PyAPI: use a new type for storing the deferred result of bpy.props

This is needed to support Python 3.10's Postponed annotation evaluation.

It also simplifies type checking.
This commit is contained in:
2021-02-20 16:16:43 +11:00
parent 4cd808f912
commit 37e6a1995a
3 changed files with 137 additions and 94 deletions

View File

@@ -30,6 +30,16 @@ PyObject *BPy_PointerProperty(PyObject *self, PyObject *args, PyObject *kw);
PyObject *BPy_CollectionProperty(PyObject *self, PyObject *args, PyObject *kw);
StructRNA *pointer_type_from_py(PyObject *value, const char *error_prefix);
typedef struct {
PyObject_HEAD
/* This isn't GC tracked, it's a function from `bpy.props` so it's not going away. */
void *fn;
PyObject *kw;
} BPy_PropDeferred;
extern PyTypeObject bpy_prop_deferred_Type;
#define BPy_PropDeferred_CheckTypeExact(v) (Py_TYPE(v) == &bpy_prop_deferred_Type)
#define PYRNA_STACK_ARRAY RNA_STACK_ARRAY
#ifdef __cplusplus