110static const char *opcode_name(
OpCode op) {
119 return "STORE_LOCAL";
121 return "LOAD_GLOBAL";
123 return "STORE_GLOBAL";
149 return "JUMP_IF_FALSE";
209 return "REGEX_MATCH";
211 return "REGEX_SEARCH";
213 return "REGEX_REPLACE";
235 return "RANDOM_SEED";
257 return "PROC_SYSTEM";
259 return "TIME_NOW_MS";
261 return "CLOCK_MONO_MS";
263 return "DATE_FORMAT";
267 return "FUN_VERSION";
269 return "THREAD_SPAWN";
271 return "THREAD_JOIN";
275 return "RANDOM_NUMBER";
295 return "JSON_STRINGIFY";
297 return "JSON_FROM_FILE";
299 return "JSON_TO_FILE";
305 return "CURL_DOWNLOAD";
307 return "SQLITE_OPEN";
309 return "SQLITE_CLOSE";
311 return "SQLITE_EXEC";
313 return "SQLITE_QUERY";
315 return "PCSC_ESTABLISH";
317 return "PCSC_RELEASE";
319 return "PCSC_LIST_READERS";
321 return "PCSC_CONNECT";
323 return "PCSC_DISCONNECT";
325 return "PCSC_TRANSMIT";
329 return "PCRE2_MATCH";
331 return "PCRE2_FINDALL";
333 return "OPENSSL_MD5";
335 return "OPENSSL_SHA256";
337 return "OPENSSL_SHA512";
339 return "OPENSSL_RIPEMD160";
345 return "INI_GET_STRING";
347 return "INI_GET_INT";
349 return "INI_GET_DOUBLE";
351 return "INI_GET_BOOL";
403 return "RUST_HELLO_ARGS";
405 return "RUST_HELLO_ARGS_RETURN";
407 return "RUST_GET_SP";
409 return "RUST_SET_EXIT";
425 printf(
"<null bytecode>\n");
437 printf(
" %3d: %-15s %d\n", i, opcode_name(ins->
op), ins->
operand);
Bytecode * bytecode_new(void)
Allocate and initialize an empty Bytecode object.
int bytecode_add_instruction(Bytecode *bc, OpCode op, int32_t operand)
Append a single instruction to the instruction stream.
void bytecode_free(Bytecode *bc)
Free a Bytecode and all memory it owns.
void bytecode_dump(const Bytecode *bc)
Print a human-readable dump of constants and instructions to stdout.
void bytecode_set_operand(Bytecode *bc, int idx, int32_t operand)
Patch the operand of a previously emitted instruction.
int bytecode_add_constant(Bytecode *bc, Value v)
Append a constant to a Bytecode's constant table.
Definitions for the Fun VM bytecode: opcodes, instruction format, and bytecode container API.
OpCode
VM operation codes executed by the Fun virtual machine.
@ OP_RUST_HELLO_ARGS_RETURN
Instruction * instructions
Tagged union representing a Fun value.
void print_value(const Value *v)
Print a human-readable representation of a Value to stdout.
void free_value(Value v)
Free dynamic storage owned by a Value.
Value copy_value(const Value *v)
Shallow copy a Value.