]> gitweb.factorcode.org Git - factor.git/blobdiff - extra/python/ffi/ffi.factor
factor: trim using lists
[factor.git] / extra / python / ffi / ffi.factor
index c1b3b50f1db424a96b68e7a7cc4d9aa5053f098a..2895c2bdf1dc95d5cdbeb36147199b1d0f829955 100644 (file)
@@ -1,11 +1,9 @@
 USING: alien alien.c-types alien.destructors alien.libraries
-alien.libraries.finder alien.syntax assocs classes.struct kernel sequences
-system ;
+alien.libraries.finder alien.syntax classes.struct ;
 IN: python.ffi
 
-! << "python" { "3.0" "3" "2.7" "2.6" } ! Python 3 has a different api, enable someday
 << "python"
-{ "python2.7" "python2.6" "python27" "python26" } find-library-from-list
+{ "python3.10" "python3.9" "python3.8" "python3.7" } find-library-from-list
 cdecl add-library >>
 
 ! Functions that return borrowed references needs to be called like this:
@@ -16,141 +14,216 @@ LIBRARY: python
 C-TYPE: PyObject
 
 ! Methods
-CONSTANT: METH_OLDARGS  0x0000
-CONSTANT: METH_VARARGS  0x0001
-CONSTANT: METH_KEYWORDS 0x0002
-CONSTANT: METH_NOARGS   0x0004
-CONSTANT: METH_O        0x0008
-CONSTANT: METH_CLASS    0x0010
-CONSTANT: METH_STATIC   0x0020
-CONSTANT: METH_COEXIST  0x0040
+CONSTANT: METH_OLDARGS   0x0000
+CONSTANT: METH_VARARGS   0x0001
+CONSTANT: METH_KEYWORDS  0x0002
+CONSTANT: METH_NOARGS    0x0004
+CONSTANT: METH_O         0x0008
+CONSTANT: METH_CLASS     0x0010
+CONSTANT: METH_STATIC    0x0020
+CONSTANT: METH_COEXIST   0x0040
+CONSTANT: METH_FASTCALL  0x0080
+CONSTANT: METH_STACKLESS 0x0100
+CONSTANT: METH_METHOD    0x0200
 
 C-TYPE: PyCFunction
 
+TYPEDEF: long Py_ssize_t
+
 STRUCT: PyMethodDef
     { ml_name c-string }
     { ml_meth PyCFunction* }
     { ml_flags int }
     { ml_doc c-string } ;
 
-FUNCTION: PyObject* PyCFunction_NewEx ( PyMethodDef* ml,
-                                        PyObject* self,
-                                        PyObject* module ) ;
+CALLBACK: PyObject* PyCallback ( PyObject* self, PyObject* args, PyObject* kw )
 
-CALLBACK: PyObject* PyCallback ( PyObject* self,
-                                 PyObject* args,
-                                 PyObject* kw ) ;
+! Functions
+FUNCTION: PyObject* PyCFunction_NewEx ( PyMethodDef* ml, PyObject* self, PyObject* module )
+FUNCTION: int PyCFunction_GetFlags ( PyObject* op )
 
 ! Top-level
-FUNCTION: c-string Py_GetVersion ( ) ;
-FUNCTION: void Py_Initialize ( ) ;
-FUNCTION: bool Py_IsInitialized ( ) ;
-FUNCTION: void Py_Finalize ( ) ;
-FUNCTION: void PySys_SetArgvEx ( int argc, c-string* argv, int updatepath ) ;
+FUNCTION: c-string Py_GetVersion ( )
+FUNCTION: void Py_Initialize ( )
+FUNCTION: bool Py_IsInitialized ( )
+FUNCTION: void Py_Finalize ( )
+FUNCTION: void PySys_SetArgvEx ( int argc, c-string* argv, int updatepath )
 
 ! Misc
-FUNCTION: int PyRun_SimpleString ( c-string command ) ;
+FUNCTION: int PyRun_SimpleString ( c-string command )
 
 ! Importing
-FUNCTION: PyObject* PyImport_AddModule ( c-string name ) ;
-FUNCTION: long PyImport_GetMagicNumber ( ) ;
-FUNCTION: PyObject* PyImport_ImportModule ( c-string name ) ;
+FUNCTION: PyObject* PyImport_AddModule ( c-string name )
+FUNCTION: long PyImport_GetMagicNumber ( )
+FUNCTION: PyObject* PyImport_ImportModule ( c-string name )
 
 ! Sys module
-! Borrowed reference
-FUNCTION: PyObject* PySys_GetObject ( c-string name ) ;
+FUNCTION: PyObject* PySys_GetObject ( c-string name )
 
 ! Dicts
-! Borrowed reference
-FUNCTION: PyObject* PyDict_GetItemString ( PyObject* d, c-string key ) ;
-FUNCTION: PyObject* PyDict_New ( ) ;
-FUNCTION: int PyDict_Size ( PyObject* d ) ;
-FUNCTION: int PyDict_SetItemString ( PyObject* d,
-                                     c-string key,
-                                     PyObject* val ) ;
-FUNCTION: int PyDict_SetItem ( PyObject* d, PyObject* k, PyObject* o ) ;
-FUNCTION: PyObject* PyDict_Items ( PyObject *d ) ;
+FUNCTION: PyObject* PyDict_New ( )
+FUNCTION: PyObject* PyDict_GetItem ( PyObject* d, PyObject* key )
+FUNCTION: PyObject* PyDict_GetItemString ( PyObject* d, c-string key )
+FUNCTION: PyObject* PyDict_GetItemWithError ( PyObject* d, PyObject* key )
+FUNCTION: int PyDict_SetItem ( PyObject* d, PyObject* key, PyObject* value )
+FUNCTION: int PyDict_SetItemString ( PyObject* d, c-string key, PyObject* val )
+FUNCTION: int PyDict_DelItem ( PyObject* d, PyObject* key )
+FUNCTION: int PyDict_DelItemString ( PyObject* d, c-string key )
+FUNCTION: void PyDict_Clear ( PyObject* d )
+FUNCTION: PyObject* PyDict_Keys ( PyObject* d )
+FUNCTION: PyObject* PyDict_Values ( PyObject* d )
+FUNCTION: PyObject* PyDict_Items ( PyObject* d )
+FUNCTION: int PyDict_Size ( PyObject* d )
+FUNCTION: int PyDict_Contains ( PyObject* d, PyObject* key )
 
 ! Tuples
-! Borrowed reference
-FUNCTION: PyObject* PyTuple_GetItem ( PyObject* t, int pos ) ;
-FUNCTION: PyObject* PyTuple_New ( int len ) ;
-! Steals the reference
-FUNCTION: int PyTuple_SetItem ( PyObject* t, int pos, PyObject* o ) ;
-FUNCTION: int PyTuple_Size ( PyObject* t ) ;
+FUNCTION: PyObject* PyTuple_New ( int len )
+FUNCTION: int PyTuple_Size ( PyObject* t )
+FUNCTION: PyObject* PyTuple_GetItem ( PyObject* t, Py_ssize_t pos )
+FUNCTION: int PyTuple_SetItem ( PyObject* t, Py_ssize_t pos, PyObject* o )
+FUNCTION: PyObject* PyTuple_GetSlice ( PyObject* t, Py_ssize_t i1, Py_ssize_t i2 )
 
 ! Lists
-! Borrowed reference
-FUNCTION: PyObject* PyList_GetItem ( PyObject* l, int pos ) ;
-! New reference
-FUNCTION: PyObject* PyList_New ( int len ) ;
-FUNCTION: int PyList_Size ( PyObject* l ) ;
-! Steals the reference
-FUNCTION: int PyList_SetItem ( PyObject* l, int pos, PyObject* o ) ;
+FUNCTION: PyObject* PyList_New ( int len )
+FUNCTION: int PyList_Size ( PyObject* l )
+FUNCTION: PyObject* PyList_GetItem ( PyObject* l, Py_ssize_t pos )
+FUNCTION: int PyList_SetItem ( PyObject* l, Py_ssize_t pos, PyObject* o )
+FUNCTION: int PyList_Insert ( PyObject* l, Py_ssize_t pos, PyObject* o )
+FUNCTION: int PyList_Append ( PyObject* l, PyObject* o )
+FUNCTION: PyObject* PyList_GetSlice ( PyObject* l, Py_ssize_t i1, Py_ssize_t i2 )
+FUNCTION: PyObject* PyList_SetSlice ( PyObject* l, Py_ssize_t i1, Py_ssize_t i2, PyObject* v )
+FUNCTION: int PyList_Sort ( PyObject* l )
+FUNCTION: int PyList_Reverse ( PyObject* l )
 
 ! Sequences
-FUNCTION: int PySequence_Check ( PyObject* o ) ;
+FUNCTION: int PySequence_Check ( PyObject* o )
+FUNCTION: Py_ssize_t PySequence_Size ( PyObject* o )
+FUNCTION: PyObject* PySequence_Concat ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PySequence_Repeat ( PyObject* o, Py_ssize_t count )
+FUNCTION: PyObject* PySequence_GetItem ( PyObject* o, Py_ssize_t i )
+FUNCTION: PyObject* PySequence_GetSlice ( PyObject* o, Py_ssize_t i1, Py_ssize_t i2 )
+FUNCTION: PyObject* PySequence_SetItem ( PyObject* o, Py_ssize_t i, PyObject* v )
+FUNCTION: PyObject* PySequence_DelItem ( PyObject* o, Py_ssize_t i )
+FUNCTION: PyObject* PySequence_SetSlice ( PyObject* o, Py_ssize_t i1, Py_ssize_t i2, PyObject* v )
+FUNCTION: PyObject* PySequence_DelSlice ( PyObject* o, Py_ssize_t i1, Py_ssize_t i2 )
+FUNCTION: PyObject* PySequence_Tuple ( PyObject* o )
+FUNCTION: PyObject* PySequence_List ( PyObject* o )
+FUNCTION: Py_ssize_t PySequence_Count ( PyObject* o )
+FUNCTION: int PySequence_Contains ( PyObject* o, PyObject* v )
+FUNCTION: Py_ssize_t PySequence_Index ( PyObject* o, PyObject* v )
+FUNCTION: PyObject* PySequence_InPlaceConcat ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PySequence_InPlaceRepeat ( PyObject* o, Py_ssize_t count )
+
+! Mapping
+FUNCTION: int PyMapping_Check ( PyObject* o )
+FUNCTION: Py_ssize_t PyMapping_Size ( PyObject* o )
+FUNCTION: int PyMapping_HasKey ( PyObject* o, PyObject* key )
+FUNCTION: PyObject* PyMapping_Keys ( PyObject* o )
+FUNCTION: PyObject* PyMapping_Values ( PyObject* o )
+FUNCTION: PyObject* PyMapping_Items ( PyObject* o )
+FUNCTION: PyObject* PyMapping_GetItemString ( PyObject* o, c-string key )
+FUNCTION: int PyMapping_SetItemString ( PyObject* o, c-string key, PyObject* value )
 
 ! Modules
-FUNCTION: c-string PyModule_GetName ( PyObject* module ) ;
-FUNCTION: PyObject* PyModule_GetDict ( PyObject* module ) ;
+FUNCTION: c-string PyModule_GetName ( PyObject* module )
+FUNCTION: PyObject* PyModule_GetDict ( PyObject* module )
 
 ! Callables
-FUNCTION: int PyCallable_Check ( PyObject* obj ) ;
+FUNCTION: int PyCallable_Check ( PyObject* obj )
 
 ! Objects
-FUNCTION: PyObject* PyObject_CallObject ( PyObject* callable,
-                                          PyObject* args ) ;
-FUNCTION: PyObject* PyObject_Call ( PyObject* callable,
-                                    PyObject* args,
-                                    PyObject* kw ) ;
-! New reference
-FUNCTION: PyObject* PyObject_GetAttrString ( PyObject* o,
-                                             c-string attr_name ) ;
-FUNCTION: int PyObject_SetAttrString ( PyObject* o,
-                                       c-string attr_name,
-                                       PyObject *v ) ;
-
-FUNCTION: PyObject* PyObject_Str ( PyObject* o ) ;
-FUNCTION: int PyObject_IsTrue ( PyObject* o ) ;
+FUNCTION: PyObject* PyObject_CallNoArgs ( PyObject* callable )
+FUNCTION: PyObject* PyObject_Call ( PyObject* callable, PyObject* args, PyObject* kw )
+FUNCTION: PyObject* PyObject_CallObject ( PyObject* callable, PyObject* args )
+FUNCTION: int PyObject_HasAttr ( PyObject* o, c-string attr_name )
+FUNCTION: PyObject* PyObject_GetAttr ( PyObject* o, c-string attr_name )
+FUNCTION: PyObject* PyObject_GetAttrString ( PyObject* o, c-string attr_name )
+FUNCTION: int PyObject_SetAttr ( PyObject* o, c-string attr_name, PyObject *v )
+FUNCTION: int PyObject_SetAttrString ( PyObject* o, c-string attr_name, PyObject *v )
+FUNCTION: int PyObject_DelAttr ( PyObject* o, c-string attr_name )
+FUNCTION: int PyObject_DelAttrString ( PyObject* o, c-string attr_name )
+FUNCTION: PyObject* PyObject_Repr ( PyObject* o )
+FUNCTION: PyObject* PyObject_Str ( PyObject* o )
+FUNCTION: PyObject* PyObject_Type ( PyObject* o )
+FUNCTION: PyObject* PyObject_GetItem ( PyObject* o, PyObject* key )
+FUNCTION: int PyObject_SetItem ( PyObject* o, PyObject* key, PyObject* v )
+FUNCTION: int PyObject_DelItem ( PyObject* o, PyObject* key )
+FUNCTION: PyObject* PyObject_Iter ( PyObject* o )
+FUNCTION: int PyObject_IsTrue ( PyObject* o )
+FUNCTION: int PyObject_IsInstance ( PyObject* o, PyObject* typeorclass )
+FUNCTION: int PyObject_IsSubclass ( PyObject* o, PyObject* typeorclass )
+
+! Iter
+FUNCTION: int PyIter_Check ( PyObject* o )
+FUNCTION: PyObject* PyIter_Next ( PyObject* o )
+
+! Number
+FUNCTION: int PyNumber_Check ( PyObject* o )
+FUNCTION: PyObject* PyNumber_Add ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_Subtract ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_Multiply ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_FloorDivide ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_TrueDivide ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_Remainder ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_Divmod ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_Power ( PyObject* o1, PyObject* o2, PyObject* o3 )
+FUNCTION: PyObject* PyNumber_Negative ( PyObject* o )
+FUNCTION: PyObject* PyNumber_Positive ( PyObject* o )
+FUNCTION: PyObject* PyNumber_Absolute ( PyObject* o )
+FUNCTION: PyObject* PyNumber_Invert ( PyObject* o )
+FUNCTION: PyObject* PyNumber_Lshift ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_Rshift ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_And ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_Xor ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_Or ( PyObject* o1, PyObject* o2 )
+FUNCTION: int PyIndex_Check ( PyObject* o )
+FUNCTION: PyObject* PyNumber_Index ( PyObject* o )
+FUNCTION: PyObject* PyNumber_Long ( PyObject* o )
+FUNCTION: PyObject* PyNumber_Float ( PyObject* o )
+FUNCTION: PyObject* PyNumber_InPlaceAdd ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_InPlaceSubtract ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_InPlaceMultiply ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_InPlaceFloorDivide ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_InPlaceTrueDivide ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_InPlaceRemainder ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_InPlaceDivmod ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_InPlacePower ( PyObject* o1, PyObject* o2, PyObject* o3 )
+FUNCTION: PyObject* PyNumber_InPlaceLshift ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_InPlaceRshift ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_InPlaceAnd ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_InPlaceXor ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_InPlaceOr ( PyObject* o1, PyObject* o2 )
+FUNCTION: PyObject* PyNumber_ToBase ( PyObject* o1, int base )
+
+! Bytes
+FUNCTION: c-string PyBytes_AsString ( PyObject* string )
+FUNCTION: PyObject* PyBytes_FromStringAndSize ( c-string v, Py_ssize_t size  )
 
 ! Strings
-FUNCTION: c-string PyString_AsString ( PyObject* string ) ;
-FUNCTION: PyObject* PyString_FromString ( c-string v ) ;
-
-! Unicode
-FUNCTION: PyObject* PyUnicode_DecodeUTF8 ( c-string s,
-                                           int size,
-                                           void* errors ) ;
-FUNCTION: PyObject* PyUnicodeUCS4_FromString ( c-string s ) ;
-FUNCTION: PyObject* PyUnicodeUCS2_FromString ( c-string s ) ;
-FUNCTION: PyObject* PyUnicodeUCS2_AsUTF8String ( PyObject* unicode ) ;
-FUNCTION: PyObject* PyUnicodeUCS4_AsUTF8String ( PyObject* unicode ) ;
+FUNCTION: c-string PyUnicode_AsUTF8 ( PyObject* unicode )
+FUNCTION: PyObject* PyUnicode_FromStringAndSize ( c-string v, Py_ssize_t size  )
+FUNCTION: PyObject* PyUnicode_FromString ( c-string v )
 
 ! Ints
-FUNCTION: long PyInt_AsLong ( PyObject* io ) ;
-
-! Longs
-FUNCTION: PyObject* PyLong_FromLong ( long v ) ;
-FUNCTION: long PyLong_AsLong ( PyObject* o ) ;
+FUNCTION: long PyLong_AsLong ( PyObject* io )
+FUNCTION: PyObject* PyLong_FromLong ( long v )
+FUNCTION: PyObject* PyLong_FromString ( c-string str, char** pend, int base )
 
 ! Floats
-FUNCTION: PyObject* PyFloat_FromDouble ( double d ) ;
+FUNCTION: PyObject* PyFloat_FromDouble ( double d )
 
 ! Types
-FUNCTION: int PyType_Check ( PyObject* obj ) ;
+FUNCTION: int PyType_Check ( PyObject* obj )
 
 ! Reference counting
-FUNCTION: void Py_IncRef ( PyObject* o ) ;
-FUNCTION: void Py_DecRef ( PyObject* o ) ;
+FUNCTION: void Py_IncRef ( PyObject* o )
+FUNCTION: void Py_DecRef ( PyObject* o )
 DESTRUCTOR: Py_DecRef
 
 ! Reflection
-FUNCTION: c-string PyEval_GetFuncName ( PyObject* func ) ;
+FUNCTION: c-string PyEval_GetFuncName ( PyObject* func )
 
 ! Errors
-FUNCTION: void PyErr_Clear ( ) ;
-FUNCTION: void PyErr_Print ( ) ;
-FUNCTION: void PyErr_Fetch ( PyObject** ptype,
-                             PyObject** pvalue,
-                             PyObject** *ptraceback ) ;
+FUNCTION: void PyErr_Clear ( )
+FUNCTION: void PyErr_Print ( )
+FUNCTION: void PyErr_Fetch ( PyObject** ptype, PyObject** pvalue, PyObject** *ptraceback )