]> gitweb.factorcode.org Git - factor.git/commitdiff
python: adding a lot more of the stable c api
authorJohn Benediktsson <mrjbq7@gmail.com>
Wed, 19 Jan 2022 20:34:12 +0000 (12:34 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Wed, 19 Jan 2022 20:34:12 +0000 (12:34 -0800)
extra/python/errors/errors.factor
extra/python/ffi/ffi.factor
extra/python/python.factor
extra/python/syntax/syntax.factor
extra/python/throwing/throwing.factor

index a82a0c4828924ced450434b4b92067ccbe130c36..7cfa66a265c384c926f7a2d65b03ad0c979b858a 100644 (file)
@@ -1,6 +1,6 @@
-USING: accessors alien alien.c-types alien.data combinators.short-circuit
-destructors.private kernel namespaces python.ffi sequences vocabs.loader
-words ;
+USING: accessors alien alien.c-types alien.data
+combinators.short-circuit destructors.private kernel namespaces
+python.ffi sequences words ;
 IN: python.errors
 
 <PRIVATE
index 37be4fffe6dc0022a0f90109e2e2f303c6615567..cf5e8f720e8dac6855ecc92ef979a3b78c3d9806 100644 (file)
@@ -37,27 +37,11 @@ STRUCT: PyMethodDef
     { ml_flags int }
     { ml_doc c-string } ;
 
-STRUCT: PyPreConfig
-    { _config_init int }
-    { parse_argv int }
-    { isolated int }
-    { use_environment int }
-    { configure_locale int }
-    { coerce_c_locale int }
-    { coerce_c_locale_warn int }
-    ! { legacy_windows_fs_encoding int } ! on Windows
-    { utf8_mode int }
-    { dev_mode int }
-    { allocate int } ;
-
-FUNCTION: PyObject* PyCFunction_NewEx ( PyMethodDef* ml,
-                                        PyObject* self,
-                                        PyObject* module )
-FUNCTION: int PyCFunction_GetFlags ( PyObject* op )
+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 ( )
@@ -75,39 +59,71 @@ FUNCTION: long PyImport_GetMagicNumber ( )
 FUNCTION: PyObject* PyImport_ImportModule ( c-string name )
 
 ! Sys module
-! Borrowed reference
 FUNCTION: PyObject* PySys_GetObject ( c-string name )
 
 ! Dicts
-! Borrowed reference
-FUNCTION: PyObject* PyDict_GetItemString ( PyObject* d, c-string key )
 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_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: 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_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_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: 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 )
@@ -117,20 +133,68 @@ FUNCTION: PyObject* PyModule_GetDict ( PyObject* module )
 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_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 )
@@ -163,6 +227,4 @@ 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_Fetch ( PyObject** ptype, PyObject** pvalue, PyObject** *ptraceback )
index ee32ab8e0d95c359050136e71f4a1f281edea7a5..0a20ed6d4e3e5ba51ce582f4da1163d225b8f286 100644 (file)
@@ -1,8 +1,6 @@
-USING: alien alien.c-types alien.data alien.libraries arrays
-assocs byte-arrays command-line hashtables init
-io.encodings.string io.encodings.utf8 kernel math math.parser
-namespaces python.errors python.ffi python.objects sequences
-specialized-arrays strings vectors ;
+USING: alien alien.libraries arrays assocs byte-arrays
+hashtables init kernel math math.parser namespaces python.errors
+python.ffi python.objects sequences strings vectors ;
 
 IN: python
 
@@ -22,9 +20,6 @@ ERROR: python-error type message traceback ;
 : py-import-from ( modulename objname -- obj )
     [ py-import ] [ getattr ] bi* ;
 
-DEFER: >py
-DEFER: py>
-
 ! Data marshalling to Python
 : array>py-tuple ( array -- py-tuple )
     [ length <py-tuple> ] keep
@@ -88,6 +83,8 @@ M: f >py
 ! Data marshalling to Factor
 SYMBOL: py-type-dispatch
 
+DEFER: py>
+
 : init-py-type-dispatch ( -- table )
     H{
         { "NoneType" [ drop f ] }
index d9490eac6a7090a90a6290251e6faed64d244f92..b45dfb5d5139a06cd5acabee26f0ed836f874fae 100644 (file)
@@ -1,6 +1,6 @@
-USING: accessors arrays combinators effects effects.parser fry generalizations
-kernel lexer locals math namespaces parser python python.ffi python.objects
-sequences sequences.generalizations vocabs.parser words ;
+USING: accessors combinators effects effects.parser kernel lexer
+namespaces parser python python.objects sequences
+sequences.generalizations words ;
 IN: python.syntax
 
 <PRIVATE
index 2cf763d32b6b29d4d10b4b3c69fffaa10efa6768..e2920ead55bb6ef240c5e870c37ff8814c3fa309 100644 (file)
@@ -1,5 +1,5 @@
-USING: arrays kernel python python.ffi python.modules.builtins
-python.syntax sequences ;
+USING: kernel python python.ffi python.modules.builtins
+python.syntax ;
 IN: python.throwing
 
 PY-FROM: traceback => format_tb ( tb -- seq ) ;