17#ifdef WITH_PYTHON_SAFETY
29# define USE_PYRNA_INVALIDATE_WEAKREF
32# define USE_PYRNA_STRUCT_REFERENCE
41#if defined(USE_PYRNA_INVALIDATE_WEAKREF) && !defined(USE_WEAKREFS)
45#if defined(USE_PYRNA_INVALIDATE_GC) && defined(USE_PYRNA_INVALIDATE_WEAKREF)
46# error "Only 1 reference check method at a time!"
73#define BPy_StructRNA_Check(v) (PyObject_TypeCheck(v, &pyrna_struct_Type))
74#define BPy_StructRNA_CheckExact(v) (Py_TYPE(v) == &pyrna_struct_Type)
75#define BPy_PropertyRNA_Check(v) (PyObject_TypeCheck(v, &pyrna_prop_Type))
76#define BPy_PropertyRNA_CheckExact(v) (Py_TYPE(v) == &pyrna_prop_Type)
78#define PYRNA_STRUCT_CHECK_OBJ(obj) \
79 if (UNLIKELY(pyrna_struct_validity_check(obj) == -1)) { \
83#define PYRNA_STRUCT_CHECK_INT(obj) \
84 if (UNLIKELY(pyrna_struct_validity_check(obj) == -1)) { \
89#define PYRNA_PROP_CHECK_OBJ(obj) \
90 if (UNLIKELY(pyrna_prop_validity_check(obj) == -1)) { \
94#define PYRNA_PROP_CHECK_INT(obj) \
95 if (UNLIKELY(pyrna_prop_validity_check(obj) == -1)) { \
100#define PYRNA_STRUCT_CHECK_OBJ_UNLESS(obj, unless) \
102 const BPy_StructRNA *_obj = obj; \
103 if (UNLIKELY(pyrna_struct_validity_check_only(_obj) == -1) && !(unless)) { \
104 pyrna_struct_validity_exception_only(_obj); \
110#define PYRNA_STRUCT_IS_VALID(pysrna) (LIKELY(((BPy_StructRNA *)(pysrna))->ptr->type != NULL))
111#define PYRNA_PROP_IS_VALID(pysrna) (LIKELY(((BPy_PropertyRNA *)(pysrna))->ptr->type != NULL))
118 PyObject *in_weakreflist;
121 std::optional<PointerRNA>
ptr;
127 PyObject *in_weakreflist;
130 std::optional<PointerRNA>
ptr;
132#ifdef USE_PYRNA_STRUCT_REFERENCE
138#ifdef PYRNA_FREE_SUPPORT
147 PyObject *in_weakreflist;
150 std::optional<PointerRNA>
ptr;
160 PyObject *in_weakreflist;
163 std::optional<PointerRNA>
ptr;
178 PyObject *in_weakreflist;
182 std::optional<CollectionPropertyIterator>
iter;
188 PyObject *in_weakreflist;
191 std::optional<PointerRNA>
ptr;
203 const char *error_prefix);
230 const char *error_prefix);
276 const char *error_prefix);
PyTypeObject pyrna_struct_meta_idprop_Type
PyTypeObject pyrna_prop_Type
PyMethodDef meth_bpy_owner_id_set
PyMethodDef meth_bpy_owner_id_get
PyTypeObject pyrna_prop_array_Type
PyTypeObject pyrna_struct_Type
PyTypeObject pyrna_func_Type
PyMethodDef meth_bpy_unregister_class
PyMethodDef meth_bpy_register_class
BPy_StructRNA * bpy_context_module
PyTypeObject pyrna_prop_collection_Type
const PointerRNA * pyrna_struct_as_ptr(PyObject *py_obj, const StructRNA *srna)
int pyrna_py_to_array(PointerRNA *ptr, PropertyRNA *prop, char *param_data, PyObject *py, const char *error_prefix)
void pyrna_invalidate(BPy_DummyPointerRNA *self)
int pyrna_pydict_to_props(PointerRNA *ptr, PyObject *kw, bool all_args, const char *error_prefix)
bool pyrna_id_CheckPyObject(PyObject *obj)
PyObject * BPY_rna_module()
PyObject * pyrna_array_index(PointerRNA *ptr, PropertyRNA *prop, int index)
PyObject * pyrna_math_object_from_array(PointerRNA *ptr, PropertyRNA *prop)
void pyrna_struct_type_extend_capi(StructRNA *srna, PyMethodDef *method, PyGetSetDef *getset)
int pyrna_array_contains_py(PointerRNA *ptr, PropertyRNA *prop, PyObject *value)
void pyrna_struct_validity_exception_only(const BPy_StructRNA *pysrna)
void BPY_rna_types_finalize_external_types(PyObject *submodule)
int pyrna_struct_as_ptr_or_null_parse(PyObject *o, void *p)
int pyrna_struct_as_ptr_parse(PyObject *o, void *p)
int pyrna_py_to_array_index(PointerRNA *ptr, PropertyRNA *prop, int arraydim, int arrayoffset, int index, PyObject *py, const char *error_prefix)
StructRNA * srna_from_self(PyObject *self, const char *error_prefix)
PyObject * pyrna_id_CreatePyObject(ID *id)
int pyrna_struct_validity_check(const BPy_StructRNA *pysrna)
int pyrna_prop_validity_check(const BPy_PropertyRNA *self)
int pyrna_struct_validity_check_only(const BPy_StructRNA *pysrna)
const PointerRNA * pyrna_struct_as_ptr_or_null(PyObject *py_obj, const StructRNA *srna)
StructRNA * pyrna_struct_as_srna(PyObject *self, bool parent, const char *error_prefix)
PyObject * pyrna_prop_to_py(PointerRNA *ptr, PropertyRNA *prop)
int pyrna_deferred_register_class(StructRNA *srna, PyTypeObject *py_class)
void BPY_rna_types_dict_set(PyObject *dict)
PyObject * BPY_rna_types()
PyObject * pyrna_prop_CreatePyObject(PointerRNA *ptr, PropertyRNA *prop)
void pyrna_write_set(bool val)
void BPY_update_rna_module()
bool pyrna_id_FromPyObject(PyObject *obj, ID **id)
PyObject * pyrna_struct_CreatePyObject(PointerRNA *ptr)
PyObject * pyrna_py_from_array_index(BPy_PropertyArrayRNA *self, PointerRNA *ptr, PropertyRNA *prop, int index)
PyObject * pyrna_struct_CreatePyObject_with_primitive_support(PointerRNA *ptr)
PyObject * pyrna_py_from_array(PointerRNA *ptr, PropertyRNA *prop)
PyObject_HEAD std::optional< PointerRNA > ptr
vectorcallfunc vectorcall
PyObject_HEAD std::optional< PointerRNA > ptr
PyObject_HEAD std::optional< PointerRNA > ptr
PyObject_HEAD std::optional< CollectionPropertyIterator > iter
PyObject_HEAD std::optional< PointerRNA > ptr
PyObject_HEAD std::optional< PointerRNA > ptr