PyAPI: remove operator methods that leak memory
authorCampbell Barton <ideasman42@gmail.com>
Thu, 13 Sep 2018 10:10:56 +0000 (20:10 +1000)
committerCampbell Barton <ideasman42@gmail.com>
Thu, 13 Sep 2018 10:10:56 +0000 (20:10 +1000)
release/scripts/modules/bl_i18n_utils/utils.py
release/scripts/modules/bpy/ops.py
source/blender/python/intern/bpy_operator.c

index 4be7ccf3356bd45bf861ebefa4cd76b127390c9a..55a210c56ed4ffd945a367cf0a3bbf57b4ccb94f 100644 (file)
@@ -208,7 +208,7 @@ def enable_addons(addons=None, support=None, disable=False, check_only=False):
         for cat in dir(bpy.ops):
             cat = getattr(bpy.ops, cat)
             for op in dir(cat):
         for cat in dir(bpy.ops):
             cat = getattr(bpy.ops, cat)
             for op in dir(cat):
-                getattr(cat, op).get_rna()
+                getattr(cat, op).get_rna_type()
 
     return ret
 
 
     return ret
 
index 664dc79b28b72239010d47633a6f58ad5c1c0964..fcba6b3aafcc1884e5a985771876fef23d047364 100644 (file)
@@ -26,9 +26,7 @@ op_dir = ops_module.dir
 op_poll = ops_module.poll
 op_call = ops_module.call
 op_as_string = ops_module.as_string
 op_poll = ops_module.poll
 op_call = ops_module.call
 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"""
         return op_get_rna_type(self.idname())
 
         """Internal function for introspection"""
         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)
         # import bpy
         return op_as_string(self.idname())
     def __repr__(self):  # useful display, repr(op)
         # import bpy
         return op_as_string(self.idname())
index 555aec00b2c9488df805c9f3cefd9a60b813d83f..d3abaf43aef0a1cc31a215b808bd980dabf41cb8 100644 (file)
@@ -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[] = {
        {"poll", (PyCFunction) pyop_poll, METH_VARARGS, NULL},
        {"call", (PyCFunction) pyop_call, METH_VARARGS, NULL},
        {"as_string", (PyCFunction) pyop_as_string, METH_VARARGS, NULL},
        {"dir", (PyCFunction) pyop_dir, METH_NOARGS, NULL},
        {"get_rna_type", (PyCFunction) pyop_getrna_type, METH_O, NULL},
 static struct PyMethodDef bpy_ops_methods[] = {
        {"poll", (PyCFunction) pyop_poll, METH_VARARGS, NULL},
        {"call", (PyCFunction) pyop_call, METH_VARARGS, NULL},
        {"as_string", (PyCFunction) pyop_as_string, METH_VARARGS, NULL},
        {"dir", (PyCFunction) pyop_dir, METH_NOARGS, 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},
        {NULL, NULL, 0, NULL}
 };
        {"macro_define", (PyCFunction) PYOP_wrap_macro_define, METH_VARARGS, NULL},
        {NULL, NULL, 0, NULL}
 };