1#ifndef PyObjC_SELECTOR_H 2#define PyObjC_SELECTOR_H 3 4/* We have a small class-tree for selector/objective-C methods: A base type 5 * and two subtypes (one for methods implemented in python and one for methods 6 * implemented in Objective-C) 7 */ 8 9#define PyObjCSelector_kCLASS_METHOD 0x000001 10#define PyObjCSelector_kHIDDEN 0x000002 11#define PyObjCSelector_kREQUIRED 0x000004 12#define PyObjCSelector_kRETURNS_UNINITIALIZED 0x000010 13 14#define PyObjCSelector_HEAD \ 15 PyObject_HEAD \ 16 const char* sel_python_signature; \ 17 const char* sel_native_signature; \ 18 SEL sel_selector; \ 19 PyObject* sel_self; \ 20 Class sel_class; \ 21 int sel_flags; \ 22 PyObjCMethodSignature* sel_methinfo; 23 24 25/*! 26 * @typedef PyObjC_CallFunc 27 * @param meth A selector object 28 * @param self The self argument 29 * @param args The other arguments 30 * @result Returns the return value, or NULL if an exception occurred 31 */ 32typedef PyObject* (*PyObjC_CallFunc)( 33 PyObject* meth, PyObject* self, PyObject* args); 34 35typedef struct { 36 PyObjCSelector_HEAD 37} PyObjCSelector; 38 39typedef struct { 40 PyObjCSelector_HEAD 41 PyObjC_CallFunc sel_call_func; 42} PyObjCNativeSelector; 43 44typedef struct { 45 PyObjCSelector_HEAD 46 PyObject* callable; 47 Py_ssize_t argcount; 48 Py_ssize_t numoutput; 49} PyObjCPythonSelector; 50 51extern PyTypeObject PyObjCSelector_Type; 52extern PyTypeObject PyObjCNativeSelector_Type; 53extern PyTypeObject PyObjCPythonSelector_Type; 54#define PyObjCSelector_Check(obj) PyObject_TypeCheck(obj, &PyObjCSelector_Type) 55#define PyObjCNativeSelector_Check(obj) PyObject_TypeCheck(obj, &PyObjCNativeSelector_Type) 56#define PyObjCPythonSelector_Check(obj) PyObject_TypeCheck(obj, &PyObjCPythonSelector_Type) 57 58PyObject* PyObjCSelector_Copy(PyObject* obj); 59const char* PyObjCSelector_Signature(PyObject* obj); 60#define PyObjCSelector_GetNativeSignature(obj) (((PyObjCSelector*)obj)->sel_native_signature) 61SEL PyObjCSelector_GetSelector(PyObject* obj); 62int PyObjCSelector_GetFlags(PyObject* obj); 63Class PyObjCSelector_GetClass(PyObject* obj); 64int PyObjCSelector_Required(PyObject* obj); 65int PyObjCSelector_IsClassMethod(PyObject* obj); 66int PyObjCSelector_IsHidden(PyObject* obj); 67int ObjC_SignatureForSelector(char* class_name, SEL selector, char* signature); 68PyObjCMethodSignature* PyObjCSelector_GetMetadata(PyObject* _self); 69 70 71 72PyObject* PyObjCSelector_NewNative(Class class, SEL selector, const char* signature, int class_method) ; 73PyObject* PyObjCSelector_FindNative(PyObject* self, const char* name); 74 75#define PyObjCSelector_GET_CLASS(obj) (((PyObjCSelector*)(obj))->sel_class) 76#define PyObjCSelector_GET_SELECTOR(obj) (((PyObjCSelector*)(obj))->sel_selector) 77 78PyObject* PyObjCSelector_New(PyObject* callable, SEL selector, const char* signature, int class_method, Class class) ; 79SEL PyObjCSelector_DefaultSelector(const char* methname); 80 81 82PyObject* 83PyObjCSelector_FromFunction( 84 PyObject* pyname, 85 PyObject* callable, 86 PyObject* template_class, 87 PyObject* protocols); 88 89 90#endif /* PyObjC_SELECTOR_H */ 91