#include "dis.h" #include #include void disasm_chunk(Chunk *ch) { for (size_t ip = 0; ip < ch->blen; ) { uint8_t instr = ch->b[ip]; printf("%04zd\t",ip); ip ++; #define SIMPLE_INSTR(opcode, str) \ case opcode: puts(str); break; switch (instr) { SIMPLE_INSTR(OP_RET, "ret") case OP_LOADK:; uint8_t ix = ch->b[ip++]; printf("loadk #%d\t; ",ix); Val k = ch->c[ix]; printf("%-4s : ",valty_str(k.ty)); println_val(k); break; SIMPLE_INSTR(OP_PRINT, "print") SIMPLE_INSTR(OP_ADD, "add") SIMPLE_INSTR(OP_SUB, "sub") SIMPLE_INSTR(OP_MUL, "mul") SIMPLE_INSTR(OP_DIV, "div") } } #undef SIMPLE_INSTR }