|
15 | 15 |
|
16 | 16 | #ifdef HAVE_PYTHON
|
17 | 17 |
|
18 |
| -class EmptyClass { |
19 |
| -}; |
20 |
| -Define_Module_Class_Private(dtoolconfig, DTOOL_SUPER_BASE, EmptyClass, DTOOL_SUPER_BASE111); |
21 |
| - |
22 | 18 | static PyObject *GetSuperBase(PyObject *self) {
|
23 |
| - Py_INCREF((PyTypeObject *)&Dtool_DTOOL_SUPER_BASE); // order is important .. this is used for static functions |
24 |
| - return (PyObject *) &Dtool_DTOOL_SUPER_BASE; |
25 |
| -}; |
26 |
| - |
27 |
| -PyMethodDef Dtool_Methods_DTOOL_SUPER_BASE[] = { |
28 |
| - { "DtoolGetSuperBase", (PyCFunction) &GetSuperBase, METH_NOARGS, "Will Return SUPERbase Class"}, |
29 |
| - { nullptr, nullptr, 0, nullptr } |
| 19 | + Dtool_PyTypedObject *super_base = Dtool_GetSuperBase(); |
| 20 | + Py_XINCREF((PyTypeObject *)super_base); // order is important .. this is used for static functions |
| 21 | + return (PyObject *)super_base; |
30 | 22 | };
|
31 | 23 |
|
32 |
| -EXPCL_INTERROGATEDB void Dtool_PyModuleClassInit_DTOOL_SUPER_BASE(PyObject *module) { |
33 |
| - static bool initdone = false; |
34 |
| - if (!initdone) { |
35 |
| - |
36 |
| - initdone = true; |
37 |
| - Dtool_DTOOL_SUPER_BASE._PyType.tp_dict = PyDict_New(); |
38 |
| - PyDict_SetItemString(Dtool_DTOOL_SUPER_BASE._PyType.tp_dict, "DtoolClassDict", Dtool_DTOOL_SUPER_BASE._PyType.tp_dict); |
39 |
| - |
40 |
| - if (PyType_Ready((PyTypeObject *)&Dtool_DTOOL_SUPER_BASE) < 0) { |
41 |
| - PyErr_SetString(PyExc_TypeError, "PyType_Ready(Dtool_DTOOL_SUPER_BASE)"); |
42 |
| - return; |
43 |
| - } |
44 |
| - Py_INCREF((PyTypeObject *)&Dtool_DTOOL_SUPER_BASE); |
45 |
| - |
46 |
| - PyDict_SetItemString(Dtool_DTOOL_SUPER_BASE._PyType.tp_dict, "DtoolGetSuperBase", PyCFunction_New(&Dtool_Methods_DTOOL_SUPER_BASE[0], (PyObject *)&Dtool_DTOOL_SUPER_BASE)); |
47 |
| - } |
48 |
| - |
| 24 | +static void Dtool_PyModuleClassInit_DTOOL_SUPER_BASE(PyObject *module) { |
49 | 25 | if (module != nullptr) {
|
50 |
| - Py_INCREF((PyTypeObject *)&Dtool_DTOOL_SUPER_BASE); |
51 |
| - PyModule_AddObject(module, "DTOOL_SUPER_BASE", (PyObject *)&Dtool_DTOOL_SUPER_BASE); |
| 26 | + Dtool_PyTypedObject *super_base = Dtool_GetSuperBase(); |
| 27 | + Py_INCREF((PyTypeObject *)&super_base); |
| 28 | + PyModule_AddObject(module, "DTOOL_SUPER_BASE", (PyObject *)&super_base); |
52 | 29 | }
|
53 | 30 | }
|
54 | 31 |
|
55 |
| -inline void *Dtool_DowncastInterface_DTOOL_SUPER_BASE(void *from_this, Dtool_PyTypedObject *from_type) { |
| 32 | +static void *Dtool_DowncastInterface_DTOOL_SUPER_BASE(void *from_this, Dtool_PyTypedObject *from_type) { |
56 | 33 | return nullptr;
|
57 | 34 | }
|
58 | 35 |
|
59 |
| -inline void *Dtool_UpcastInterface_DTOOL_SUPER_BASE(PyObject *self, Dtool_PyTypedObject *requested_type) { |
| 36 | +static void *Dtool_UpcastInterface_DTOOL_SUPER_BASE(PyObject *self, Dtool_PyTypedObject *requested_type) { |
60 | 37 | return nullptr;
|
61 | 38 | }
|
62 | 39 |
|
63 |
| -int Dtool_Init_DTOOL_SUPER_BASE(PyObject *self, PyObject *args, PyObject *kwds) { |
| 40 | +static int Dtool_Init_DTOOL_SUPER_BASE(PyObject *self, PyObject *args, PyObject *kwds) { |
64 | 41 | assert(self != nullptr);
|
65 | 42 | PyErr_Format(PyExc_TypeError, "cannot init constant class %s", Py_TYPE(self)->tp_name);
|
66 | 43 | return -1;
|
67 | 44 | }
|
68 | 45 |
|
69 |
| -EXPORT_THIS Dtool_PyTypedObject Dtool_DTOOL_SUPER_BASE = { |
70 |
| - { |
71 |
| - PyVarObject_HEAD_INIT(nullptr, 0) |
72 |
| - "dtoolconfig.DTOOL_SUPER_BASE", |
73 |
| - sizeof(Dtool_PyInstDef), |
74 |
| - 0, // tp_itemsize |
75 |
| - &Dtool_FreeInstance_DTOOL_SUPER_BASE, |
76 |
| - nullptr, // tp_print |
77 |
| - nullptr, // tp_getattr |
78 |
| - nullptr, // tp_setattr |
| 46 | +static void Dtool_FreeInstance_DTOOL_SUPER_BASE(PyObject *self) { |
| 47 | + Py_TYPE(self)->tp_free(self); |
| 48 | +} |
| 49 | + |
| 50 | +/** |
| 51 | + * Returns a pointer to the DTOOL_SUPER_BASE class that is the base class of |
| 52 | + * all Panda types. This pointer is shared by all modules. |
| 53 | + */ |
| 54 | +Dtool_PyTypedObject *Dtool_GetSuperBase() { |
| 55 | + Dtool_TypeMap *type_map = Dtool_GetGlobalTypeMap(); |
| 56 | + auto it = type_map->find("DTOOL_SUPER_BASE"); |
| 57 | + if (it != type_map->end()) { |
| 58 | + return it->second; |
| 59 | + } |
| 60 | + |
| 61 | + static PyMethodDef methods[] = { |
| 62 | + { "DtoolGetSuperBase", (PyCFunction)&GetSuperBase, METH_NOARGS, "Will Return SUPERbase Class"}, |
| 63 | + { nullptr, nullptr, 0, nullptr } |
| 64 | + }; |
| 65 | + |
| 66 | + static Dtool_PyTypedObject super_base_type = { |
| 67 | + { |
| 68 | + PyVarObject_HEAD_INIT(nullptr, 0) |
| 69 | + "dtoolconfig.DTOOL_SUPER_BASE", |
| 70 | + sizeof(Dtool_PyInstDef), |
| 71 | + 0, // tp_itemsize |
| 72 | + &Dtool_FreeInstance_DTOOL_SUPER_BASE, |
| 73 | + nullptr, // tp_print |
| 74 | + nullptr, // tp_getattr |
| 75 | + nullptr, // tp_setattr |
79 | 76 | #if PY_MAJOR_VERSION >= 3
|
80 |
| - nullptr, // tp_compare |
| 77 | + nullptr, // tp_compare |
81 | 78 | #else
|
82 |
| - &DtoolInstance_ComparePointers, |
| 79 | + &DtoolInstance_ComparePointers, |
83 | 80 | #endif
|
84 |
| - nullptr, // tp_repr |
85 |
| - nullptr, // tp_as_number |
86 |
| - nullptr, // tp_as_sequence |
87 |
| - nullptr, // tp_as_mapping |
88 |
| - &DtoolInstance_HashPointer, |
89 |
| - nullptr, // tp_call |
90 |
| - nullptr, // tp_str |
91 |
| - PyObject_GenericGetAttr, |
92 |
| - PyObject_GenericSetAttr, |
93 |
| - nullptr, // tp_as_buffer |
94 |
| - (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_CHECKTYPES), |
95 |
| - nullptr, // tp_doc |
96 |
| - nullptr, // tp_traverse |
97 |
| - nullptr, // tp_clear |
| 81 | + nullptr, // tp_repr |
| 82 | + nullptr, // tp_as_number |
| 83 | + nullptr, // tp_as_sequence |
| 84 | + nullptr, // tp_as_mapping |
| 85 | + &DtoolInstance_HashPointer, |
| 86 | + nullptr, // tp_call |
| 87 | + nullptr, // tp_str |
| 88 | + PyObject_GenericGetAttr, |
| 89 | + PyObject_GenericSetAttr, |
| 90 | + nullptr, // tp_as_buffer |
| 91 | + (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_CHECKTYPES), |
| 92 | + nullptr, // tp_doc |
| 93 | + nullptr, // tp_traverse |
| 94 | + nullptr, // tp_clear |
98 | 95 | #if PY_MAJOR_VERSION >= 3
|
99 |
| - &DtoolInstance_RichComparePointers, |
| 96 | + &DtoolInstance_RichComparePointers, |
100 | 97 | #else
|
101 |
| - nullptr, // tp_richcompare |
| 98 | + nullptr, // tp_richcompare |
102 | 99 | #endif
|
103 |
| - 0, // tp_weaklistoffset |
104 |
| - nullptr, // tp_iter |
105 |
| - nullptr, // tp_iternext |
106 |
| - Dtool_Methods_DTOOL_SUPER_BASE, |
107 |
| - standard_type_members, |
108 |
| - nullptr, // tp_getset |
109 |
| - nullptr, // tp_base |
110 |
| - nullptr, // tp_dict |
111 |
| - nullptr, // tp_descr_get |
112 |
| - nullptr, // tp_descr_set |
113 |
| - 0, // tp_dictoffset |
114 |
| - Dtool_Init_DTOOL_SUPER_BASE, |
115 |
| - PyType_GenericAlloc, |
116 |
| - Dtool_new_DTOOL_SUPER_BASE, |
117 |
| - PyObject_Del, |
118 |
| - nullptr, // tp_is_gc |
119 |
| - nullptr, // tp_bases |
120 |
| - nullptr, // tp_mro |
121 |
| - nullptr, // tp_cache |
122 |
| - nullptr, // tp_subclasses |
123 |
| - nullptr, // tp_weaklist |
124 |
| - nullptr, // tp_del |
125 |
| - }, |
126 |
| - TypeHandle::none(), |
127 |
| - Dtool_PyModuleClassInit_DTOOL_SUPER_BASE, |
128 |
| - Dtool_UpcastInterface_DTOOL_SUPER_BASE, |
129 |
| - Dtool_DowncastInterface_DTOOL_SUPER_BASE, |
130 |
| - nullptr, |
131 |
| - nullptr, |
132 |
| -}; |
| 100 | + 0, // tp_weaklistoffset |
| 101 | + nullptr, // tp_iter |
| 102 | + nullptr, // tp_iternext |
| 103 | + methods, |
| 104 | + standard_type_members, |
| 105 | + nullptr, // tp_getset |
| 106 | + nullptr, // tp_base |
| 107 | + nullptr, // tp_dict |
| 108 | + nullptr, // tp_descr_get |
| 109 | + nullptr, // tp_descr_set |
| 110 | + 0, // tp_dictoffset |
| 111 | + Dtool_Init_DTOOL_SUPER_BASE, |
| 112 | + PyType_GenericAlloc, |
| 113 | + nullptr, // tp_new |
| 114 | + PyObject_Del, |
| 115 | + nullptr, // tp_is_gc |
| 116 | + nullptr, // tp_bases |
| 117 | + nullptr, // tp_mro |
| 118 | + nullptr, // tp_cache |
| 119 | + nullptr, // tp_subclasses |
| 120 | + nullptr, // tp_weaklist |
| 121 | + nullptr, // tp_del |
| 122 | + }, |
| 123 | + TypeHandle::none(), |
| 124 | + Dtool_PyModuleClassInit_DTOOL_SUPER_BASE, |
| 125 | + Dtool_UpcastInterface_DTOOL_SUPER_BASE, |
| 126 | + Dtool_DowncastInterface_DTOOL_SUPER_BASE, |
| 127 | + nullptr, |
| 128 | + nullptr, |
| 129 | + }; |
| 130 | + |
| 131 | + super_base_type._PyType.tp_dict = PyDict_New(); |
| 132 | + PyDict_SetItemString(super_base_type._PyType.tp_dict, "DtoolClassDict", super_base_type._PyType.tp_dict); |
| 133 | + |
| 134 | + if (PyType_Ready((PyTypeObject *)&super_base_type) < 0) { |
| 135 | + PyErr_SetString(PyExc_TypeError, "PyType_Ready(Dtool_DTOOL_SUPER_BASE)"); |
| 136 | + return nullptr; |
| 137 | + } |
| 138 | + Py_INCREF((PyTypeObject *)&super_base_type); |
| 139 | + |
| 140 | + PyDict_SetItemString(super_base_type._PyType.tp_dict, "DtoolGetSuperBase", PyCFunction_New(&methods[0], (PyObject *)&super_base_type)); |
| 141 | + |
| 142 | + (*type_map)["DTOOL_SUPER_BASE"] = &super_base_type; |
| 143 | + return &super_base_type; |
| 144 | +} |
133 | 145 |
|
134 | 146 | #endif // HAVE_PYTHON
|
0 commit comments