2.4 KiB
title | icon | order |
---|---|---|
Introduction | dot | 10 |
All public functions in the C API are prefixed with py_
in pocketpy.h.
Overview
pocketpy works with opaque references. py_Ref
is used to reference objects in the virtual machine. It is your responsibility to ensure a reference is valid before using it. See following reference types:
/// A generic reference to a python object.
typedef py_TValue* py_Ref;
/// A reference which has the same lifespan as the python object.
typedef py_TValue* py_ObjectRef;
/// A global reference which has the same lifespan as the VM.
typedef py_TValue* py_GlobalRef;
/// A specific location in the value stack of the VM.
typedef py_TValue* py_StackRef;
/// An item reference to a container object. It invalidates when the container is modified.
typedef py_TValue* py_ItemRef;
/// An output reference for returning a value.
typedef py_TValue* py_OutRef;
You can store python objects into "stack" or "register".
We provide 8 registers and you can get references to them by py_reg()
.
Also, py_retval()
is a special register that is used to store the return value of a py_CFunction
.
Registers are shared so they could be overwritten easily.
If you want to store python objects across function calls, you should store them into the stack via py_push()
and py_pop()
.
Data Types
You can do conversions between C types and python objects using the following functions:
C type | Python type | C to Python | Python to C |
---|---|---|---|
char,short,int,long | int | py_newint() |
py_toint() |
float,double | float | py_newfloat() |
py_tofloat() , py_castfloat() |
bool | bool | py_newbool() |
py_tobool() |
const char* | str | py_newstr() |
py_tostr() |
void*,intptr_t | int | py_newint() |
(void*)py_toint() |
PY_RAISE
macro
Mark a function that can raise an exception on failure.
- If the function returns
bool
, thenfalse
means an exception is raised. - If the function returns
int
, then-1
means an exception is raised.
PY_RETURN
macro
Mark a function that can store a value in py_retval()
on success.