mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 19:40:18 +00:00
58 lines
2.4 KiB
Markdown
58 lines
2.4 KiB
Markdown
---
|
|
title: Introduction
|
|
icon: dot
|
|
order: 10
|
|
---
|
|
|
|
All public functions in the C API are prefixed with `py_` in [pocketpy.h](https://github.com/pocketpy/pocketpy/blob/main/include/pocketpy/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:
|
|
|
|
```c
|
|
/// 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`, then `false` 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. |