Files
fz-lang/include/vm/fzl_vm.h
samsonium 1c57525604 wip: working on externs loading
- WIP: add extern objects initializing/freeing functions
- Feat: add extern objects loading in VM initializer
2026-11-08 17:12:31 +03:00

51 lines
823 B
C

#ifndef FZL_VM_H
#define FZL_VM_H
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <vm/fzl_vm_env.h>
#include <vm/fzl_vm_extern.h>
#include <vm/fzl_vm_reader.h>
// VM descriptor
typedef struct
{
fzl_vm_reader_t *reader;
fzl_vm_extern_t *prep_fns;
size_t ip;
bool allow_infinite;
size_t max_iter;
// Data stack
fzl_value_t dstack[256];
size_t dtop;
// Call stack
size_t cstack[256];
size_t ctop;
// Environment stack
fzl_vm_env_t *estack[256];
size_t etop;
} fzl_vm_t;
// Allocate FZL VM
fzl_vm_t *fzl_mkvm(fzl_vm_reader_t *reader);
// Load and run code
int fzl_vm_run(fzl_vm_t *vm);
// Get last VM error message
char *fzl_vm_geterror();
// Print opcodes sequence
void fzl_vm_print_ops(fzl_vm_t *vm);
// Free VM
void fzl_freevm(fzl_vm_t *vm);
#endif // FZL_VM_H