fig. 5.2 — C API
integration
C API
crono_api.h · extern "C" · CRONO_API
// Lifecycle
CronoVM* crono_create();
void crono_destroy(CronoVM* vm);
// Execution
int crono_run(CronoVM* vm, const char* source);
int crono_call(CronoVM* vm, const char* func_name,
int argc, const CronoValue* argv, CronoValue* result);
int crono_get_global(CronoVM* vm, const char* name, CronoValue* result);
int crono_get_field(CronoVM* vm, CronoValue instance,
const char* name, CronoValue* result);
int crono_set_field(CronoVM* vm, CronoValue instance,
const char* name, CronoValue value);
// Registration
int crono_register_function(CronoVM* vm, const char* name,
const char** param_types, int param_count,
CronoNativeCallback callback);
// Extensions
int crono_load_extension(CronoVM* vm, const char* path);
int crono_create_instance(CronoVM* vm, const char* class_name,
CronoValue* result);
// Error / Debug
const char* crono_get_last_error(CronoVM* vm);
CronoStepResult crono_step(CronoVM* vm);
int crono_get_current_line(CronoVM* vm);
int crono_get_frame_count(CronoVM* vm);
void crono_get_frame_info(CronoVM* vm, int index, CronoFrameInfo* info);
int crono_get_stack_value(CronoVM* vm, int index, CronoValue* result);
int crono_get_buffer_info(CronoVM* vm, CronoValue buf,
void** ptr, int* size);
void crono_mark_value(void* gc_ctx, CronoValue val);
CronoStepResult
OK=0, DONE=1, ERROR=2, PAUSED=3
CronoValueType
NIL, BOOL, INT, FLOAT, STRING, POINTER, BUFFER, NATIVE_OBJECT, ERROR
LONG / DOUBLE
not exposed — LONG drops to NIL, DOUBLE maps to FLOAT