mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 11:30:18 +00:00
105 lines
3.1 KiB
C
105 lines
3.1 KiB
C
#ifndef POCKETPY_C_H
|
|
#define POCKETPY_C_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <stdbool.h>
|
|
#include <stdint.h>
|
|
|
|
#include "export.h"
|
|
|
|
typedef struct pkpy_vm_handle pkpy_vm;
|
|
typedef int (*pkpy_CFunction)(pkpy_vm*);
|
|
typedef int pkpy_CName;
|
|
typedef int pkpy_CType;
|
|
|
|
typedef struct{
|
|
const char* data;
|
|
int size;
|
|
}pkpy_CString;
|
|
|
|
/* Basic Functions */
|
|
PK_EXPORT pkpy_vm* pkpy_new_vm(bool enable_os);
|
|
PK_EXPORT void pkpy_delete_vm(pkpy_vm*);
|
|
PK_EXPORT bool pkpy_exec(pkpy_vm*, const char* source);
|
|
PK_EXPORT bool pkpy_exec_2(pkpy_vm*, const char* source, const char* filename, int mode, const char* module);
|
|
|
|
/* Stack Manipulation */
|
|
PK_EXPORT bool pkpy_pop(pkpy_vm*, int);
|
|
PK_EXPORT bool pkpy_pop_top(pkpy_vm*);
|
|
PK_EXPORT bool pkpy_dup_top(pkpy_vm*);
|
|
PK_EXPORT bool pkpy_rot_two(pkpy_vm*);
|
|
PK_EXPORT int pkpy_stack_size(pkpy_vm*);
|
|
|
|
// int
|
|
PK_EXPORT bool pkpy_push_int(pkpy_vm*, int);
|
|
PK_EXPORT bool pkpy_is_int(pkpy_vm*, int i);
|
|
PK_EXPORT bool pkpy_to_int(pkpy_vm*, int i, int* out);
|
|
|
|
// float
|
|
PK_EXPORT bool pkpy_push_float(pkpy_vm*, float);
|
|
PK_EXPORT bool pkpy_is_float(pkpy_vm*, int i);
|
|
PK_EXPORT bool pkpy_to_float(pkpy_vm*, int i, float* out);
|
|
|
|
// bool
|
|
PK_EXPORT bool pkpy_push_bool(pkpy_vm*, bool);
|
|
PK_EXPORT bool pkpy_is_bool(pkpy_vm*, int i);
|
|
PK_EXPORT bool pkpy_to_bool(pkpy_vm*, int i, bool* out);
|
|
|
|
// string
|
|
PK_EXPORT bool pkpy_push_string(pkpy_vm*, pkpy_CString);
|
|
PK_EXPORT bool pkpy_is_string(pkpy_vm*, int i);
|
|
PK_EXPORT bool pkpy_to_string(pkpy_vm*, int i, pkpy_CString* out);
|
|
|
|
// void_p
|
|
PK_EXPORT bool pkpy_push_voidp(pkpy_vm*, void*);
|
|
PK_EXPORT bool pkpy_is_voidp(pkpy_vm*, int i);
|
|
PK_EXPORT bool pkpy_to_voidp(pkpy_vm*, int i, void** out);
|
|
|
|
// none
|
|
PK_EXPORT bool pkpy_push_none(pkpy_vm*);
|
|
PK_EXPORT bool pkpy_is_none(pkpy_vm*, int i);
|
|
|
|
// special push
|
|
PK_EXPORT bool pkpy_push_null(pkpy_vm*);
|
|
PK_EXPORT bool pkpy_push_function(pkpy_vm*, const char*, pkpy_CFunction);
|
|
PK_EXPORT bool pkpy_push_module(pkpy_vm*, const char*);
|
|
|
|
// some opt
|
|
PK_EXPORT bool pkpy_getattr(pkpy_vm*, pkpy_CName);
|
|
PK_EXPORT bool pkpy_setattr(pkpy_vm*, pkpy_CName);
|
|
PK_EXPORT bool pkpy_getglobal(pkpy_vm*, pkpy_CName);
|
|
PK_EXPORT bool pkpy_setglobal(pkpy_vm*, pkpy_CName);
|
|
PK_EXPORT bool pkpy_eval(pkpy_vm*, const char* source);
|
|
PK_EXPORT bool pkpy_unpack_sequence(pkpy_vm*, int size);
|
|
PK_EXPORT bool pkpy_get_unbound_method(pkpy_vm*, pkpy_CName);
|
|
PK_EXPORT bool pkpy_py_repr(pkpy_vm*, int i);
|
|
|
|
/* Error Handling */
|
|
PK_EXPORT bool pkpy_error(pkpy_vm*, const char* name, pkpy_CString);
|
|
PK_EXPORT bool pkpy_check_error(pkpy_vm*);
|
|
PK_EXPORT bool pkpy_clear_error(pkpy_vm*, char** message);
|
|
|
|
/* Callables */
|
|
PK_EXPORT bool pkpy_vectorcall(pkpy_vm*, int argc);
|
|
|
|
/* Special APIs */
|
|
PK_EXPORT void pkpy_free(void* p);
|
|
PK_EXPORT pkpy_CString pkpy_string(const char*);
|
|
PK_EXPORT pkpy_CName pkpy_name(const char*);
|
|
PK_EXPORT pkpy_CString pkpy_name_to_string(pkpy_CName);
|
|
PK_EXPORT void pkpy_compile_to_string(pkpy_vm*, const char* source, const char* filename, int mode, bool* ok, char** out);
|
|
|
|
/* REPL */
|
|
PK_EXPORT void* pkpy_new_repl(pkpy_vm* vm);
|
|
PK_EXPORT bool pkpy_repl_input(void* r, const char* line);
|
|
PK_EXPORT void pkpy_delete_repl(void* repl);
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif
|