#ifndef FZL_VM_H #define FZL_VM_H #include #include #include #include #include #include // 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