forked from bartvdbraak/blender
PyAPI: remove operator methods that leak memory
This commit is contained in:
parent
ff432a410a
commit
254067106e
@ -208,7 +208,7 @@ def enable_addons(addons=None, support=None, disable=False, check_only=False):
|
|||||||
for cat in dir(bpy.ops):
|
for cat in dir(bpy.ops):
|
||||||
cat = getattr(bpy.ops, cat)
|
cat = getattr(bpy.ops, cat)
|
||||||
for op in dir(cat):
|
for op in dir(cat):
|
||||||
getattr(cat, op).get_rna()
|
getattr(cat, op).get_rna_type()
|
||||||
|
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
@ -26,9 +26,7 @@ op_dir = ops_module.dir
|
|||||||
op_poll = ops_module.poll
|
op_poll = ops_module.poll
|
||||||
op_call = ops_module.call
|
op_call = ops_module.call
|
||||||
op_as_string = ops_module.as_string
|
op_as_string = ops_module.as_string
|
||||||
op_get_rna = ops_module.get_rna
|
|
||||||
op_get_rna_type = ops_module.get_rna_type
|
op_get_rna_type = ops_module.get_rna_type
|
||||||
op_get_instance = ops_module.get_instance
|
|
||||||
|
|
||||||
|
|
||||||
class BPyOps:
|
class BPyOps:
|
||||||
@ -207,14 +205,6 @@ class BPyOpsSubModOp:
|
|||||||
"""Internal function for introspection"""
|
"""Internal function for introspection"""
|
||||||
return op_get_rna_type(self.idname())
|
return op_get_rna_type(self.idname())
|
||||||
|
|
||||||
def get_rna(self):
|
|
||||||
"""Internal function for introspection"""
|
|
||||||
return op_get_rna(self.idname())
|
|
||||||
|
|
||||||
def get_instance(self):
|
|
||||||
"""Internal function for introspection"""
|
|
||||||
return op_get_instance(self.idname())
|
|
||||||
|
|
||||||
def __repr__(self): # useful display, repr(op)
|
def __repr__(self): # useful display, repr(op)
|
||||||
# import bpy
|
# import bpy
|
||||||
return op_as_string(self.idname())
|
return op_as_string(self.idname())
|
||||||
|
@ -422,66 +422,12 @@ static PyObject *pyop_getrna_type(PyObject *UNUSED(self), PyObject *value)
|
|||||||
return (PyObject *)pyrna;
|
return (PyObject *)pyrna;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *pyop_getrna(PyObject *UNUSED(self), PyObject *value)
|
|
||||||
{
|
|
||||||
wmOperatorType *ot;
|
|
||||||
|
|
||||||
if ((ot = ot_lookup_from_py_string(value, "getrna")) == NULL) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* type */
|
|
||||||
//RNA_pointer_create(NULL, &RNA_Struct, ot->srna, &ptr);
|
|
||||||
|
|
||||||
/* XXX - should call WM_operator_properties_free */
|
|
||||||
PointerRNA ptr;
|
|
||||||
WM_operator_properties_create_ptr(&ptr, ot);
|
|
||||||
WM_operator_properties_sanitize(&ptr, 0);
|
|
||||||
|
|
||||||
BPy_StructRNA *pyrna = (BPy_StructRNA *)pyrna_struct_CreatePyObject(&ptr);
|
|
||||||
#ifdef PYRNA_FREE_SUPPORT
|
|
||||||
pyrna->freeptr = true;
|
|
||||||
#endif
|
|
||||||
return (PyObject *)pyrna;
|
|
||||||
}
|
|
||||||
|
|
||||||
static PyObject *pyop_getinstance(PyObject *UNUSED(self), PyObject *value)
|
|
||||||
{
|
|
||||||
wmOperatorType *ot;
|
|
||||||
if ((ot = ot_lookup_from_py_string(value, "get_instance")) == NULL) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
wmOperator *op;
|
|
||||||
#ifdef PYRNA_FREE_SUPPORT
|
|
||||||
op = MEM_callocN(sizeof(wmOperator), __func__);
|
|
||||||
#else
|
|
||||||
op = PyMem_MALLOC(sizeof(wmOperator));
|
|
||||||
memset(op, 0, sizeof(wmOperator));
|
|
||||||
#endif
|
|
||||||
BLI_strncpy(op->idname, ot->idname, sizeof(op->idname)); /* in case its needed */
|
|
||||||
op->type = ot;
|
|
||||||
|
|
||||||
PointerRNA ptr;
|
|
||||||
RNA_pointer_create(NULL, &RNA_Operator, op, &ptr);
|
|
||||||
|
|
||||||
BPy_StructRNA *pyrna = (BPy_StructRNA *)pyrna_struct_CreatePyObject(&ptr);
|
|
||||||
#ifdef PYRNA_FREE_SUPPORT
|
|
||||||
pyrna->freeptr = true;
|
|
||||||
#endif
|
|
||||||
op->ptr = &pyrna->ptr;
|
|
||||||
|
|
||||||
return (PyObject *)pyrna;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct PyMethodDef bpy_ops_methods[] = {
|
static struct PyMethodDef bpy_ops_methods[] = {
|
||||||
{"poll", (PyCFunction) pyop_poll, METH_VARARGS, NULL},
|
{"poll", (PyCFunction) pyop_poll, METH_VARARGS, NULL},
|
||||||
{"call", (PyCFunction) pyop_call, METH_VARARGS, NULL},
|
{"call", (PyCFunction) pyop_call, METH_VARARGS, NULL},
|
||||||
{"as_string", (PyCFunction) pyop_as_string, METH_VARARGS, NULL},
|
{"as_string", (PyCFunction) pyop_as_string, METH_VARARGS, NULL},
|
||||||
{"dir", (PyCFunction) pyop_dir, METH_NOARGS, NULL},
|
{"dir", (PyCFunction) pyop_dir, METH_NOARGS, NULL},
|
||||||
{"get_rna_type", (PyCFunction) pyop_getrna_type, METH_O, NULL},
|
{"get_rna_type", (PyCFunction) pyop_getrna_type, METH_O, NULL},
|
||||||
{"get_rna", (PyCFunction) pyop_getrna, METH_O, NULL}, /* only for introspection, leaks memory */
|
|
||||||
{"get_instance", (PyCFunction) pyop_getinstance, METH_O, NULL}, /* only for introspection, leaks memory */
|
|
||||||
{"macro_define", (PyCFunction) PYOP_wrap_macro_define, METH_VARARGS, NULL},
|
{"macro_define", (PyCFunction) PYOP_wrap_macro_define, METH_VARARGS, NULL},
|
||||||
{NULL, NULL, 0, NULL}
|
{NULL, NULL, 0, NULL}
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user