]> gitweb.factorcode.org Git - factor.git/blob - extra/python/ffi/ffi.factor
cf5e8f720e8dac6855ecc92ef979a3b78c3d9806
[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"
7 { "python3.10" "python3.9" "python3.8" "python3.7" } find-library-from-list
8 cdecl add-library >>
9
10 ! Functions that return borrowed references needs to be called like this:
11 ! Py_Func dup Py_IncRef &Py_DecRef
12
13 LIBRARY: python
14
15 C-TYPE: PyObject
16
17 ! Methods
18 CONSTANT: METH_OLDARGS   0x0000
19 CONSTANT: METH_VARARGS   0x0001
20 CONSTANT: METH_KEYWORDS  0x0002
21 CONSTANT: METH_NOARGS    0x0004
22 CONSTANT: METH_O         0x0008
23 CONSTANT: METH_CLASS     0x0010
24 CONSTANT: METH_STATIC    0x0020
25 CONSTANT: METH_COEXIST   0x0040
26 CONSTANT: METH_FASTCALL  0x0080
27 CONSTANT: METH_STACKLESS 0x0100
28 CONSTANT: METH_METHOD    0x0200
29
30 C-TYPE: PyCFunction
31
32 TYPEDEF: long Py_ssize_t
33
34 STRUCT: PyMethodDef
35     { ml_name c-string }
36     { ml_meth PyCFunction* }
37     { ml_flags int }
38     { ml_doc c-string } ;
39
40 CALLBACK: PyObject* PyCallback ( PyObject* self, PyObject* args, PyObject* kw )
41
42 ! Functions
43 FUNCTION: PyObject* PyCFunction_NewEx ( PyMethodDef* ml, PyObject* self, PyObject* module )
44 FUNCTION: int PyCFunction_GetFlags ( PyObject* op )
45
46 ! Top-level
47 FUNCTION: c-string Py_GetVersion ( )
48 FUNCTION: void Py_Initialize ( )
49 FUNCTION: bool Py_IsInitialized ( )
50 FUNCTION: void Py_Finalize ( )
51 FUNCTION: void PySys_SetArgvEx ( int argc, c-string* argv, int updatepath )
52
53 ! Misc
54 FUNCTION: int PyRun_SimpleString ( c-string command )
55
56 ! Importing
57 FUNCTION: PyObject* PyImport_AddModule ( c-string name )
58 FUNCTION: long PyImport_GetMagicNumber ( )
59 FUNCTION: PyObject* PyImport_ImportModule ( c-string name )
60
61 ! Sys module
62 FUNCTION: PyObject* PySys_GetObject ( c-string name )
63
64 ! Dicts
65 FUNCTION: PyObject* PyDict_New ( )
66 FUNCTION: PyObject* PyDict_GetItem ( PyObject* d, PyObject* key )
67 FUNCTION: PyObject* PyDict_GetItemString ( PyObject* d, c-string key )
68 FUNCTION: PyObject* PyDict_GetItemWithError ( PyObject* d, PyObject* key )
69 FUNCTION: int PyDict_SetItem ( PyObject* d, PyObject* key, PyObject* value )
70 FUNCTION: int PyDict_SetItemString ( PyObject* d, c-string key, PyObject* val )
71 FUNCTION: int PyDict_DelItem ( PyObject* d, PyObject* key )
72 FUNCTION: int PyDict_DelItemString ( PyObject* d, c-string key )
73 FUNCTION: void PyDict_Clear ( PyObject* d )
74 FUNCTION: PyObject* PyDict_Keys ( PyObject* d )
75 FUNCTION: PyObject* PyDict_Values ( PyObject* d )
76 FUNCTION: PyObject* PyDict_Items ( PyObject* d )
77 FUNCTION: int PyDict_Size ( PyObject* d )
78 FUNCTION: int PyDict_Contains ( PyObject* d, PyObject* key )
79
80 ! Tuples
81 FUNCTION: PyObject* PyTuple_New ( int len )
82 FUNCTION: int PyTuple_Size ( PyObject* t )
83 FUNCTION: PyObject* PyTuple_GetItem ( PyObject* t, Py_ssize_t pos )
84 FUNCTION: int PyTuple_SetItem ( PyObject* t, Py_ssize_t pos, PyObject* o )
85 FUNCTION: PyObject* PyTuple_GetSlice ( PyObject* t, Py_ssize_t i1, Py_ssize_t i2 )
86
87 ! Lists
88 FUNCTION: PyObject* PyList_New ( int len )
89 FUNCTION: int PyList_Size ( PyObject* l )
90 FUNCTION: PyObject* PyList_GetItem ( PyObject* l, Py_ssize_t pos )
91 FUNCTION: int PyList_SetItem ( PyObject* l, Py_ssize_t pos, PyObject* o )
92 FUNCTION: int PyList_Insert ( PyObject* l, Py_ssize_t pos, PyObject* o )
93 FUNCTION: int PyList_Append ( PyObject* l, PyObject* o )
94 FUNCTION: PyObject* PyList_GetSlice ( PyObject* l, Py_ssize_t i1, Py_ssize_t i2 )
95 FUNCTION: PyObject* PyList_SetSlice ( PyObject* l, Py_ssize_t i1, Py_ssize_t i2, PyObject* v )
96 FUNCTION: int PyList_Sort ( PyObject* l )
97 FUNCTION: int PyList_Reverse ( PyObject* l )
98
99 ! Sequences
100 FUNCTION: int PySequence_Check ( PyObject* o )
101 FUNCTION: Py_ssize_t PySequence_Size ( PyObject* o )
102 FUNCTION: PyObject* PySequence_Concat ( PyObject* o1, PyObject* o2 )
103 FUNCTION: PyObject* PySequence_Repeat ( PyObject* o, Py_ssize_t count )
104 FUNCTION: PyObject* PySequence_GetItem ( PyObject* o, Py_ssize_t i )
105 FUNCTION: PyObject* PySequence_GetSlice ( PyObject* o, Py_ssize_t i1, Py_ssize_t i2 )
106 FUNCTION: PyObject* PySequence_SetItem ( PyObject* o, Py_ssize_t i, PyObject* v )
107 FUNCTION: PyObject* PySequence_DelItem ( PyObject* o, Py_ssize_t i )
108 FUNCTION: PyObject* PySequence_SetSlice ( PyObject* o, Py_ssize_t i1, Py_ssize_t i2, PyObject* v )
109 FUNCTION: PyObject* PySequence_DelSlice ( PyObject* o, Py_ssize_t i1, Py_ssize_t i2 )
110 FUNCTION: PyObject* PySequence_Tuple ( PyObject* o )
111 FUNCTION: PyObject* PySequence_List ( PyObject* o )
112 FUNCTION: Py_ssize_t PySequence_Count ( PyObject* o )
113 FUNCTION: int PySequence_Contains ( PyObject* o, PyObject* v )
114 FUNCTION: Py_ssize_t PySequence_Index ( PyObject* o, PyObject* v )
115 FUNCTION: PyObject* PySequence_InPlaceConcat ( PyObject* o1, PyObject* o2 )
116 FUNCTION: PyObject* PySequence_InPlaceRepeat ( PyObject* o, Py_ssize_t count )
117
118 ! Mapping
119 FUNCTION: int PyMapping_Check ( PyObject* o )
120 FUNCTION: Py_ssize_t PyMapping_Size ( PyObject* o )
121 FUNCTION: int PyMapping_HasKey ( PyObject* o, PyObject* key )
122 FUNCTION: PyObject* PyMapping_Keys ( PyObject* o )
123 FUNCTION: PyObject* PyMapping_Values ( PyObject* o )
124 FUNCTION: PyObject* PyMapping_Items ( PyObject* o )
125 FUNCTION: PyObject* PyMapping_GetItemString ( PyObject* o, c-string key )
126 FUNCTION: int PyMapping_SetItemString ( PyObject* o, c-string key, PyObject* value )
127
128 ! Modules
129 FUNCTION: c-string PyModule_GetName ( PyObject* module )
130 FUNCTION: PyObject* PyModule_GetDict ( PyObject* module )
131
132 ! Callables
133 FUNCTION: int PyCallable_Check ( PyObject* obj )
134
135 ! Objects
136 FUNCTION: PyObject* PyObject_CallNoArgs ( PyObject* callable )
137 FUNCTION: PyObject* PyObject_Call ( PyObject* callable, PyObject* args, PyObject* kw )
138 FUNCTION: PyObject* PyObject_CallObject ( PyObject* callable, PyObject* args )
139 FUNCTION: int PyObject_HasAttr ( PyObject* o, c-string attr_name )
140 FUNCTION: PyObject* PyObject_GetAttr ( PyObject* o, c-string attr_name )
141 FUNCTION: PyObject* PyObject_GetAttrString ( PyObject* o, c-string attr_name )
142 FUNCTION: int PyObject_SetAttr ( PyObject* o, c-string attr_name, PyObject *v )
143 FUNCTION: int PyObject_SetAttrString ( PyObject* o, c-string attr_name, PyObject *v )
144 FUNCTION: int PyObject_DelAttr ( PyObject* o, c-string attr_name )
145 FUNCTION: int PyObject_DelAttrString ( PyObject* o, c-string attr_name )
146 FUNCTION: PyObject* PyObject_Repr ( PyObject* o )
147 FUNCTION: PyObject* PyObject_Str ( PyObject* o )
148 FUNCTION: PyObject* PyObject_Type ( PyObject* o )
149 FUNCTION: PyObject* PyObject_GetItem ( PyObject* o, PyObject* key )
150 FUNCTION: int PyObject_SetItem ( PyObject* o, PyObject* key, PyObject* v )
151 FUNCTION: int PyObject_DelItem ( PyObject* o, PyObject* key )
152 FUNCTION: PyObject* PyObject_Iter ( PyObject* o )
153 FUNCTION: int PyObject_IsTrue ( PyObject* o )
154 FUNCTION: int PyObject_IsInstance ( PyObject* o, PyObject* typeorclass )
155 FUNCTION: int PyObject_IsSubclass ( PyObject* o, PyObject* typeorclass )
156
157 ! Iter
158 FUNCTION: int PyIter_Check ( PyObject* o )
159 FUNCTION: PyObject* PyIter_Next ( PyObject* o )
160
161 ! Number
162 FUNCTION: int PyNumber_Check ( PyObject* o )
163 FUNCTION: PyObject* PyNumber_Add ( PyObject* o1, PyObject* o2 )
164 FUNCTION: PyObject* PyNumber_Subtract ( PyObject* o1, PyObject* o2 )
165 FUNCTION: PyObject* PyNumber_Multiply ( PyObject* o1, PyObject* o2 )
166 FUNCTION: PyObject* PyNumber_FloorDivide ( PyObject* o1, PyObject* o2 )
167 FUNCTION: PyObject* PyNumber_TrueDivide ( PyObject* o1, PyObject* o2 )
168 FUNCTION: PyObject* PyNumber_Remainder ( PyObject* o1, PyObject* o2 )
169 FUNCTION: PyObject* PyNumber_Divmod ( PyObject* o1, PyObject* o2 )
170 FUNCTION: PyObject* PyNumber_Power ( PyObject* o1, PyObject* o2, PyObject* o3 )
171 FUNCTION: PyObject* PyNumber_Negative ( PyObject* o )
172 FUNCTION: PyObject* PyNumber_Positive ( PyObject* o )
173 FUNCTION: PyObject* PyNumber_Absolute ( PyObject* o )
174 FUNCTION: PyObject* PyNumber_Invert ( PyObject* o )
175 FUNCTION: PyObject* PyNumber_Lshift ( PyObject* o1, PyObject* o2 )
176 FUNCTION: PyObject* PyNumber_Rshift ( PyObject* o1, PyObject* o2 )
177 FUNCTION: PyObject* PyNumber_And ( PyObject* o1, PyObject* o2 )
178 FUNCTION: PyObject* PyNumber_Xor ( PyObject* o1, PyObject* o2 )
179 FUNCTION: PyObject* PyNumber_Or ( PyObject* o1, PyObject* o2 )
180 FUNCTION: int PyIndex_Check ( PyObject* o )
181 FUNCTION: PyObject* PyNumber_Index ( PyObject* o )
182 FUNCTION: PyObject* PyNumber_Long ( PyObject* o )
183 FUNCTION: PyObject* PyNumber_Float ( PyObject* o )
184 FUNCTION: PyObject* PyNumber_InPlaceAdd ( PyObject* o1, PyObject* o2 )
185 FUNCTION: PyObject* PyNumber_InPlaceSubtract ( PyObject* o1, PyObject* o2 )
186 FUNCTION: PyObject* PyNumber_InPlaceMultiply ( PyObject* o1, PyObject* o2 )
187 FUNCTION: PyObject* PyNumber_InPlaceFloorDivide ( PyObject* o1, PyObject* o2 )
188 FUNCTION: PyObject* PyNumber_InPlaceTrueDivide ( PyObject* o1, PyObject* o2 )
189 FUNCTION: PyObject* PyNumber_InPlaceRemainder ( PyObject* o1, PyObject* o2 )
190 FUNCTION: PyObject* PyNumber_InPlaceDivmod ( PyObject* o1, PyObject* o2 )
191 FUNCTION: PyObject* PyNumber_InPlacePower ( PyObject* o1, PyObject* o2, PyObject* o3 )
192 FUNCTION: PyObject* PyNumber_InPlaceLshift ( PyObject* o1, PyObject* o2 )
193 FUNCTION: PyObject* PyNumber_InPlaceRshift ( PyObject* o1, PyObject* o2 )
194 FUNCTION: PyObject* PyNumber_InPlaceAnd ( PyObject* o1, PyObject* o2 )
195 FUNCTION: PyObject* PyNumber_InPlaceXor ( PyObject* o1, PyObject* o2 )
196 FUNCTION: PyObject* PyNumber_InPlaceOr ( PyObject* o1, PyObject* o2 )
197 FUNCTION: PyObject* PyNumber_ToBase ( PyObject* o1, int base )
198
199 ! Bytes
200 FUNCTION: c-string PyBytes_AsString ( PyObject* string )
201 FUNCTION: PyObject* PyBytes_FromStringAndSize ( c-string v, Py_ssize_t size  )
202
203 ! Strings
204 FUNCTION: c-string PyUnicode_AsUTF8 ( PyObject* unicode )
205 FUNCTION: PyObject* PyUnicode_FromStringAndSize ( c-string v, Py_ssize_t size  )
206 FUNCTION: PyObject* PyUnicode_FromString ( c-string v )
207
208 ! Ints
209 FUNCTION: long PyLong_AsLong ( PyObject* io )
210 FUNCTION: PyObject* PyLong_FromLong ( long v )
211 FUNCTION: PyObject* PyLong_FromString ( c-string str, char** pend, int base )
212
213 ! Floats
214 FUNCTION: PyObject* PyFloat_FromDouble ( double d )
215
216 ! Types
217 FUNCTION: int PyType_Check ( PyObject* obj )
218
219 ! Reference counting
220 FUNCTION: void Py_IncRef ( PyObject* o )
221 FUNCTION: void Py_DecRef ( PyObject* o )
222 DESTRUCTOR: Py_DecRef
223
224 ! Reflection
225 FUNCTION: c-string PyEval_GetFuncName ( PyObject* func )
226
227 ! Errors
228 FUNCTION: void PyErr_Clear ( )
229 FUNCTION: void PyErr_Print ( )
230 FUNCTION: void PyErr_Fetch ( PyObject** ptype, PyObject** pvalue, PyObject** *ptraceback )