]> gitweb.factorcode.org Git - factor.git/blob - extra/python/ffi/ffi.factor
python: feature to create python callbacks/functions, now you can call hofs like...
[factor.git] / extra / python / ffi / ffi.factor
1 USING: alien alien.c-types alien.destructors alien.libraries
2 alien.libraries.finder alien.syntax assocs classes.struct kernel sequences
3 system ;
4 IN: python.ffi
5
6 ! << "python" { "3.0" "3" "2.7" "2.6" } ! Python 3 has a different api, enable someday
7 << "python"
8 { "python2.7" "python2.6" "python27" "python26" } find-library-from-list
9 cdecl add-library >>
10
11 ! Functions that return borrowed references needs to be called like this:
12 ! Py_Func dup Py_IncRef &Py_DecRef
13
14 LIBRARY: python
15
16 C-TYPE: PyObject
17
18 ! Methods
19 CONSTANT: METH_OLDARGS  0x0000
20 CONSTANT: METH_VARARGS  0x0001
21 CONSTANT: METH_KEYWORDS 0x0002
22 CONSTANT: METH_NOARGS   0x0004
23 CONSTANT: METH_O        0x0008
24 CONSTANT: METH_CLASS    0x0010
25 CONSTANT: METH_STATIC   0x0020
26 CONSTANT: METH_COEXIST  0x0040
27
28 C-TYPE: PyCFunction
29
30 STRUCT: PyMethodDef
31     { ml_name void* }
32     { ml_meth PyCFunction* }
33     { ml_flags int }
34     { ml_doc c-string } ;
35
36 FUNCTION: PyObject* PyCFunction_NewEx ( PyMethodDef* ml,
37                                         PyObject* self,
38                                         PyObject* module ) ;
39
40 CALLBACK: PyObject* PyCallback ( PyObject* self,
41                                  PyObject* args,
42                                  PyObject* kw ) ;
43
44 ! Top-level
45 FUNCTION: c-string Py_GetVersion ( ) ;
46 FUNCTION: void Py_Initialize ( ) ;
47 FUNCTION: bool Py_IsInitialized ( ) ;
48 FUNCTION: void Py_Finalize ( ) ;
49 FUNCTION: void PySys_SetArgvEx ( int argc, c-string* argv, int updatepath ) ;
50
51 ! Misc
52 FUNCTION: int PyRun_SimpleString ( c-string command ) ;
53
54 ! Importing
55 FUNCTION: PyObject* PyImport_AddModule ( c-string name ) ;
56 FUNCTION: long PyImport_GetMagicNumber ( ) ;
57 FUNCTION: PyObject* PyImport_ImportModule ( c-string name ) ;
58
59 ! Sys module
60 ! Borrowed reference
61 FUNCTION: PyObject* PySys_GetObject ( c-string name ) ;
62
63 ! Dicts
64 ! Borrowed reference
65 FUNCTION: PyObject* PyDict_GetItemString ( PyObject* d, c-string key ) ;
66 FUNCTION: PyObject* PyDict_New ( ) ;
67 FUNCTION: int PyDict_Size ( PyObject* d ) ;
68 FUNCTION: int PyDict_SetItemString ( PyObject* d,
69                                      c-string key,
70                                      PyObject* val ) ;
71 FUNCTION: int PyDict_SetItem ( PyObject* d, PyObject* k, PyObject* o ) ;
72 FUNCTION: PyObject* PyDict_Items ( PyObject *d ) ;
73
74 ! Tuples
75 ! Borrowed reference
76 FUNCTION: PyObject* PyTuple_GetItem ( PyObject* t, int pos ) ;
77 FUNCTION: PyObject* PyTuple_New ( int len ) ;
78 ! Steals the reference
79 FUNCTION: int PyTuple_SetItem ( PyObject* t, int pos, PyObject* o ) ;
80 FUNCTION: int PyTuple_Size ( PyObject* t ) ;
81
82 ! Lists
83 ! Borrowed reference
84 FUNCTION: PyObject* PyList_GetItem ( PyObject* l, int pos ) ;
85 ! New reference
86 FUNCTION: PyObject* PyList_New ( int len ) ;
87 FUNCTION: int PyList_Size ( PyObject* l ) ;
88 ! Steals the reference
89 FUNCTION: int PyList_SetItem ( PyObject* l, int pos, PyObject* o ) ;
90
91 ! Sequences
92 FUNCTION: int PySequence_Check ( PyObject* o ) ;
93
94 ! Modules
95 FUNCTION: c-string PyModule_GetName ( PyObject* module ) ;
96 FUNCTION: PyObject* PyModule_GetDict ( PyObject* module ) ;
97
98 ! Callables
99 FUNCTION: int PyCallable_Check ( PyObject* obj ) ;
100
101 ! Objects
102 FUNCTION: PyObject* PyObject_CallObject ( PyObject* callable,
103                                           PyObject* args ) ;
104 FUNCTION: PyObject* PyObject_Call ( PyObject* callable,
105                                     PyObject* args,
106                                     PyObject* kw ) ;
107 ! New reference
108 FUNCTION: PyObject* PyObject_GetAttrString ( PyObject* o,
109                                              c-string attr_name ) ;
110 FUNCTION: int PyObject_SetAttrString ( PyObject* o,
111                                        c-string attr_name,
112                                        PyObject *v ) ;
113
114 FUNCTION: PyObject* PyObject_Str ( PyObject* o ) ;
115 FUNCTION: int PyObject_IsTrue ( PyObject* o ) ;
116
117 ! Strings
118 FUNCTION: c-string PyString_AsString ( PyObject* string ) ;
119 FUNCTION: PyObject* PyString_FromString ( c-string v ) ;
120
121 ! Unicode
122 FUNCTION: PyObject* PyUnicode_DecodeUTF8 ( c-string s,
123                                            int size,
124                                            void* errors ) ;
125 FUNCTION: PyObject* PyUnicodeUCS4_FromString ( c-string s ) ;
126 FUNCTION: PyObject* PyUnicodeUCS2_FromString ( c-string s ) ;
127 FUNCTION: PyObject* PyUnicodeUCS2_AsUTF8String ( PyObject* unicode ) ;
128 FUNCTION: PyObject* PyUnicodeUCS4_AsUTF8String ( PyObject* unicode ) ;
129
130 ! Ints
131 FUNCTION: long PyInt_AsLong ( PyObject* io ) ;
132
133 ! Longs
134 FUNCTION: PyObject* PyLong_FromLong ( long v ) ;
135 FUNCTION: long PyLong_AsLong ( PyObject* o ) ;
136
137 ! Floats
138 FUNCTION: PyObject* PyFloat_FromDouble ( double d ) ;
139
140 ! Types
141 FUNCTION: int PyType_Check ( PyObject* obj ) ;
142
143 ! Reference counting
144 FUNCTION: void Py_IncRef ( PyObject* o ) ;
145 FUNCTION: void Py_DecRef ( PyObject* o ) ;
146 DESTRUCTOR: Py_DecRef
147
148 ! Reflection
149 FUNCTION: c-string PyEval_GetFuncName ( PyObject* func ) ;
150
151 ! Errors
152 FUNCTION: void PyErr_Clear ( ) ;
153 FUNCTION: void PyErr_Print ( ) ;
154 FUNCTION: void PyErr_Fetch ( PyObject** ptype,
155                              PyObject** pvalue,
156                              PyObject** *ptraceback ) ;