91 if (idx >= 0 && idx < bc->instr_count) {
111 if (bc->
name) free((
void *)bc->
name);
131 return "STORE_LOCAL";
133 return "LOAD_GLOBAL";
135 return "STORE_GLOBAL";
161 return "JUMP_IF_FALSE";
221 return "REGEX_MATCH";
223 return "REGEX_SEARCH";
225 return "REGEX_REPLACE";
247 return "RANDOM_SEED";
269 return "PROC_SYSTEM";
271 return "TIME_NOW_MS";
273 return "CLOCK_MONO_MS";
275 return "DATE_FORMAT";
279 return "FUN_VERSION";
281 return "THREAD_SPAWN";
283 return "THREAD_JOIN";
287 return "RANDOM_NUMBER";
307 return "JSON_STRINGIFY";
309 return "JSON_FROM_FILE";
311 return "JSON_TO_FILE";
317 return "CURL_DOWNLOAD";
319 return "SQLITE_OPEN";
321 return "SQLITE_CLOSE";
323 return "SQLITE_EXEC";
325 return "SQLITE_QUERY";
327 return "PCSC_ESTABLISH";
329 return "PCSC_RELEASE";
331 return "PCSC_LIST_READERS";
333 return "PCSC_CONNECT";
335 return "PCSC_DISCONNECT";
337 return "PCSC_TRANSMIT";
341 return "PCRE2_MATCH";
343 return "PCRE2_FINDALL";
345 return "OPENSSL_MD5";
347 return "OPENSSL_SHA256";
349 return "OPENSSL_SHA512";
351 return "OPENSSL_RIPEMD160";
357 return "INI_GET_STRING";
359 return "INI_GET_INT";
361 return "INI_GET_DOUBLE";
363 return "INI_GET_BOOL";
415 return "RUST_HELLO_ARGS";
417 return "RUST_HELLO_ARGS_RETURN";
419 return "RUST_GET_SP";
421 return "RUST_SET_EXIT";
437 printf(
"<null bytecode>\n");
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.
static const char * opcode_name(OpCode op)
Convert an opcode enum to a short mnemonic string.
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 with de-duplication.
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.
int value_equals(const Value *a, const Value *b)
Compare two Values for equality.
Value copy_value(const Value *v)
Shallow copy a Value.