1/* 2 * This module is used in the unittests for object initialize. 3 */ 4#include "Python.h" 5#include "pyobjc-api.h" 6 7#import <Foundation/Foundation.h> 8 9 10static PyMethodDef mod_methods[] = { 11 { 0, 0, 0, 0 } 12}; 13 14typedef struct TestStructPointerStruct* Foo; 15 16#if PY_VERSION_HEX >= 0x03000000 17 18static struct PyModuleDef mod_module = { 19 PyModuleDef_HEAD_INIT, 20 "structpointer2", 21 NULL, 22 0, 23 mod_methods, 24 NULL, 25 NULL, 26 NULL, 27 NULL 28}; 29 30#define INITERROR() return NULL 31#define INITDONE() return m 32 33PyObject* PyInit_structpointer2(void); 34 35PyObject* 36PyInit_structpointer2(void) 37 38#else 39 40#define INITERROR() return 41#define INITDONE() return 42 43void initstructpointer2(void); 44 45void 46initstructpointer2(void) 47#endif 48{ 49 PyObject* m; 50 PyObject* v; 51 52#if PY_VERSION_HEX >= 0x03000000 53 m = PyModule_Create(&mod_module); 54#else 55 m = Py_InitModule4("structpointer2", mod_methods, 56 NULL, NULL, PYTHON_API_VERSION); 57#endif 58 if (!m) { 59 INITERROR(); 60 } 61 62 if (PyObjC_ImportAPI(m) < 0) { 63 INITERROR(); 64 } 65 v = PyObjCCreateOpaquePointerType("TestStructPointerStructPtr", 66 @encode(Foo), NULL); 67 if (v == NULL) { 68 INITERROR(); 69 } 70 if (PyDict_SetItemString(PyModule_GetDict(m), "TestStructPointerStructPtr", 71 v) < 0) { 72 INITERROR(); 73 } 74 75 INITDONE(); 76} 77