summaryrefslogtreecommitdiff
path: root/Objective-C/libffi_support.h
blob: d9a7f40e2438204bd10e87059ab2d465953d4b9a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#ifndef PyObjC_FFI_SUPPORT_H
#define PyObjC_FFI_SUPPORT_H

#include "ffi.h"

typedef void (*PyObjCFFI_ClosureFunc)(ffi_cif*, void*, void**, void*);

void PyObjCFFI_FreeCIF(ffi_cif* cif);
ffi_cif* PyObjCFFI_CIFForSignature(PyObjCMethodSignature* signature);
IMP PyObjCFFI_MakeClosure(PyObjCMethodSignature* signature,
			PyObjCFFI_ClosureFunc func, void* userdata);
void* PyObjCFFI_FreeClosure(IMP closure);

IMP PyObjCFFI_MakeIMPForSignature(char* signature, PyObject* callable);
IMP PyObjCFFI_MakeIMPForPyObjCSelector(PyObjCSelector *aSelector);
PyObject *PyObjCFFI_Caller(PyObject *aMeth, PyObject* self, PyObject *args);

int PyObjCFFI_CountArguments(
	PyObjCMethodSignature* methinfo, Py_ssize_t argOffset, 
	Py_ssize_t* byref_in_count,
	Py_ssize_t* byref_out_count,
	Py_ssize_t* plain_count,
	Py_ssize_t* argbuf_len);

int PyObjCFFI_ParseArguments(
	PyObjCMethodSignature* methinfo, Py_ssize_t argOffset,
	PyObject* args, Py_ssize_t argbuf_cur, unsigned char* argbuf,
	void** byref,
	ffi_type** arglist, void** values);

PyObject* PyObjCFFI_BuildResult(
	PyObjCMethodSignature* methinfo, Py_ssize_t argOffset,
	void* pRetval, void** byref, Py_ssize_t byref_out_count,
	PyObject* self, int flags);

#endif /* PyObjC_FFI_SUPPORT_H */