Selaa lähdekoodia

implicitly coerce strings to InternalName pointers if needed

David Rose 16 vuotta sitten
vanhempi
sitoutus
9d6ebb4c34
1 muutettua tiedostoa jossa 9 lisäystä ja 0 poistoa
  1. 9 0
      dtool/src/interrogatedb/py_panda.cxx

+ 9 - 0
dtool/src/interrogatedb/py_panda.cxx

@@ -73,6 +73,15 @@ attempt_coercion(PyObject *self, Dtool_PyTypedObject *classdef,
     // Attempt coercion: try to create a temporary instance of the
     // Attempt coercion: try to create a temporary instance of the
     // required class using the supplied parameter.
     // required class using the supplied parameter.
     PyObject *obj = PyObject_Call((PyObject *)classdef, self, NULL);
     PyObject *obj = PyObject_Call((PyObject *)classdef, self, NULL);
+    if (obj == NULL) {
+      // That didn't work; try to call a static "make" method instead.
+      PyObject *make = PyObject_GetAttrString((PyObject *)classdef, "make");
+      if (make != NULL) {
+        PyErr_Clear();
+        obj = PyObject_Call(make, self, NULL);
+        Py_DECREF(make);
+      }
+    }
     if (obj != NULL) {
     if (obj != NULL) {
       // Well, whaddaya know?  The supplied parameter(s) suited
       // Well, whaddaya know?  The supplied parameter(s) suited
       // the object's constructor.  Now we have a temporary object
       // the object's constructor.  Now we have a temporary object