]> gitweb.factorcode.org Git - factor.git/blob - extra/python/ffi/ffi.factor
python.syntax: fix func_code => __code__
[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 STRUCT: PyPreConfig
41     { _config_init int }
42     { parse_argv int }
43     { isolated int }
44     { use_environment int }
45     { configure_locale int }
46     { coerce_c_locale int }
47     { coerce_c_locale_warn int }
48     ! { legacy_windows_fs_encoding int } ! on Windows
49     { utf8_mode int }
50     { dev_mode int }
51     { allocate int } ;
52
53 FUNCTION: PyObject* PyCFunction_NewEx ( PyMethodDef* ml,
54                                         PyObject* self,
55                                         PyObject* module )
56 FUNCTION: int PyCFunction_GetFlags ( PyObject* op )
57
58 CALLBACK: PyObject* PyCallback ( PyObject* self,
59                                  PyObject* args,
60                                  PyObject* kw )
61
62 ! Top-level
63 FUNCTION: c-string Py_GetVersion ( )
64 FUNCTION: void Py_Initialize ( )
65 FUNCTION: bool Py_IsInitialized ( )
66 FUNCTION: void Py_Finalize ( )
67 FUNCTION: void PySys_SetArgvEx ( int argc, c-string* argv, int updatepath )
68
69 ! Misc
70 FUNCTION: int PyRun_SimpleString ( c-string command )
71
72 ! Importing
73 FUNCTION: PyObject* PyImport_AddModule ( c-string name )
74 FUNCTION: long PyImport_GetMagicNumber ( )
75 FUNCTION: PyObject* PyImport_ImportModule ( c-string name )
76
77 ! Sys module
78 ! Borrowed reference
79 FUNCTION: PyObject* PySys_GetObject ( c-string name )
80
81 ! Dicts
82 ! Borrowed reference
83 FUNCTION: PyObject* PyDict_GetItemString ( PyObject* d, c-string key )
84 FUNCTION: PyObject* PyDict_New ( )
85 FUNCTION: int PyDict_Size ( PyObject* d )
86 FUNCTION: int PyDict_SetItemString ( PyObject* d,
87                                      c-string key,
88                                      PyObject* val )
89 FUNCTION: int PyDict_SetItem ( PyObject* d, PyObject* k, PyObject* o )
90 FUNCTION: PyObject* PyDict_Items ( PyObject *d )
91
92 ! Tuples
93 ! Borrowed reference
94 FUNCTION: PyObject* PyTuple_GetItem ( PyObject* t, int pos )
95 FUNCTION: PyObject* PyTuple_New ( int len )
96 ! Steals the reference
97 FUNCTION: int PyTuple_SetItem ( PyObject* t, int pos, PyObject* o )
98 FUNCTION: int PyTuple_Size ( PyObject* t )
99
100 ! Lists
101 ! Borrowed reference
102 FUNCTION: PyObject* PyList_GetItem ( PyObject* l, int pos )
103 ! New reference
104 FUNCTION: PyObject* PyList_New ( int len )
105 FUNCTION: int PyList_Size ( PyObject* l )
106 ! Steals the reference
107 FUNCTION: int PyList_SetItem ( PyObject* l, int pos, PyObject* o )
108
109 ! Sequences
110 FUNCTION: int PySequence_Check ( PyObject* o )
111
112 ! Modules
113 FUNCTION: c-string PyModule_GetName ( PyObject* module )
114 FUNCTION: PyObject* PyModule_GetDict ( PyObject* module )
115
116 ! Callables
117 FUNCTION: int PyCallable_Check ( PyObject* obj )
118
119 ! Objects
120 FUNCTION: PyObject* PyObject_CallObject ( PyObject* callable,
121                                           PyObject* args )
122 FUNCTION: PyObject* PyObject_Call ( PyObject* callable,
123                                     PyObject* args,
124                                     PyObject* kw )
125 ! New reference
126 FUNCTION: PyObject* PyObject_GetAttrString ( PyObject* o,
127                                              c-string attr_name )
128 FUNCTION: int PyObject_SetAttrString ( PyObject* o,
129                                        c-string attr_name,
130                                        PyObject *v )
131
132 FUNCTION: PyObject* PyObject_Str ( PyObject* o )
133 FUNCTION: int PyObject_IsTrue ( PyObject* o )
134
135 ! Bytes
136 FUNCTION: c-string PyBytes_AsString ( PyObject* string )
137 FUNCTION: PyObject* PyBytes_FromStringAndSize ( c-string v, Py_ssize_t size  )
138
139 ! Strings
140 FUNCTION: c-string PyUnicode_AsUTF8 ( PyObject* unicode )
141 FUNCTION: PyObject* PyUnicode_FromStringAndSize ( c-string v, Py_ssize_t size  )
142
143 ! Ints
144 FUNCTION: long PyLong_AsLong ( PyObject* io )
145 FUNCTION: PyObject* PyLong_FromLong ( long v )
146 FUNCTION: PyObject* PyLong_FromString ( c-string str, char** pend, int base )
147
148 ! Floats
149 FUNCTION: PyObject* PyFloat_FromDouble ( double d )
150
151 ! Types
152 FUNCTION: int PyType_Check ( PyObject* obj )
153
154 ! Reference counting
155 FUNCTION: void Py_IncRef ( PyObject* o )
156 FUNCTION: void Py_DecRef ( PyObject* o )
157 DESTRUCTOR: Py_DecRef
158
159 ! Reflection
160 FUNCTION: c-string PyEval_GetFuncName ( PyObject* func )
161
162 ! Errors
163 FUNCTION: void PyErr_Clear ( )
164 FUNCTION: void PyErr_Print ( )
165 FUNCTION: void PyErr_Fetch ( PyObject** ptype,
166                              PyObject** pvalue,
167                              PyObject** *ptraceback )