Browse Source

implicitly coerce strings to InternalName pointers if needed

David Rose 16 years ago
parent
commit
9d6ebb4c34
1 changed files with 9 additions and 0 deletions
  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
     // required class using the supplied parameter.
     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) {
       // Well, whaddaya know?  The supplied parameter(s) suited
       // the object's constructor.  Now we have a temporary object