15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// FetchCommonType.proto /////////////// 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)/////////////// FetchCommonType /////////////// 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyObject* fake_module; 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyTypeObject* cached_type = NULL; 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI); 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!fake_module) return NULL; 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_INCREF(fake_module); 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name); 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (cached_type) { 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!PyType_Check((PyObject*)cached_type)) { 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Format(PyExc_TypeError, 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Shared Cython type %.200s is not a type object", 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) type->tp_name); 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) goto bad; 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (cached_type->tp_basicsize != type->tp_basicsize) { 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Format(PyExc_TypeError, 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "Shared Cython type %.200s has the wrong size, try recompiling", 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) type->tp_name); 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) goto bad; 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } else { 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) PyErr_Clear(); 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (PyType_Ready(type) < 0) goto bad; 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0) 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) goto bad; 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_INCREF(type); 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) cached_type = type; 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)done: 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_DECREF(fake_module); 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // NOTE: always returns owned reference, or NULL on error 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return cached_type; 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bad: 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) Py_XDECREF(cached_type); 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) cached_type = NULL; 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) goto done; 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 49