From b743e03fc6042e3e2d55cfa0387c092824de64c5 Mon Sep 17 00:00:00 2001 From: Bad Diode Date: Sun, 24 Oct 2021 09:52:09 +0200 Subject: Add print/display/newline ops --- src/bytecode/debug.h | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) (limited to 'src/bytecode/debug.h') diff --git a/src/bytecode/debug.h b/src/bytecode/debug.h index 42b5b93..52cf431 100755 --- a/src/bytecode/debug.h +++ b/src/bytecode/debug.h @@ -6,6 +6,33 @@ void disassemble_chunk(Chunk *chunk, const char *name); size_t disassemble_instruction(Chunk *chunk, size_t offset); +static const char* ops_str[] = { + // Load/store ops. + [OP_CONSTANT] = "OP_CONSTANT", + // Arithmetic ops. + [OP_SUM] = "OP_SUM", + [OP_SUB] = "OP_SUB", + [OP_MUL] = "OP_MUL", + [OP_DIV] = "OP_DIV", + [OP_MOD] = "OP_MOD", + // Logic ops. + [OP_NOT] = "OP_NOT", + [OP_AND] = "OP_AND", + [OP_OR] = "OP_OR", + // Numerical comparison ops. + [OP_EQUAL] = "OP_EQUAL", + [OP_LESS] = "OP_LESS", + [OP_GREATER] = "OP_GREATER", + [OP_LESS_EQUAL] = "OP_LESS_EQUAL", + [OP_GREATER_EQUAL] = "OP_GREATER_EQUAL", + // Display ops. + [OP_DISPLAY] = "OP_DISPLAY", + [OP_PRINT] = "OP_PRINT", + [OP_NEWLINE] = "OP_NEWLINE", + // Return. + [OP_RETURN] = "OP_RETURN", +}; + void disassemble_chunk(Chunk *chunk, const char *name) { printf("== %s ==\n", name); @@ -43,14 +70,8 @@ disassemble_instruction(Chunk *chunk, size_t offset) { printf("\n"); return offset + 2; } break; - case OP_SUM: { printf("OP_SUM\n"); return offset + 1; } break; - case OP_SUB: { printf("OP_SUB\n"); return offset + 1; } break; - case OP_MUL: { printf("OP_MUL\n"); return offset + 1; } break; - case OP_DIV: { printf("OP_DIV\n"); return offset + 1; } break; - case OP_MOD: { printf("OP_MOD\n"); return offset + 1; } break; - case OP_RETURN: { printf("OP_RETURN\n"); return offset + 1; } break; default: { - printf("Unknown OP: %d\n", instruction); + printf("%s\n", ops_str[instruction]); return offset + 1; } break; } -- cgit v1.2.1