interop.md 1.4 KB


icon: dot label: 'Interop with PyObject'

order: 90

In pkpy, any python object is represented by a PyObject*. There are 3 macros for you to do convert.

  • VAR(...), create a PyObject* from a C type
  • CAST(T, ...), cast a PyObject* to a C type
  • _CAST(T, ...), cast a PyObject* to a C type, without type check

    PyObject* x = VAR(12);		// cast a C int to PyObject*
    int y = CAST(int, x);		// cast a PyObject* to C int
    
    PyObject* i = VAR("abc");
    std::cout << CAST(Str, i);	// abc
    

Types

python type C type note
int i64 62 bits integer
float f64 62 bits floating point
str pkpy::Str
bool bool
list pkpy::List
tuple pkpy::Tuple
function pkpy::Function
... ... ...

Type check

  • bool is_type(PyObject* obj, Type type)
  • bool is_non_tagged_type(PyObject* obj, Type type)
  • void VM::check_type(PyObject* obj, Type type) throws TypeError on failure
  • void VM::check_non_tagged_type(PyObject* obj, Type type) throws TypeError on failure