From 9b60cf334cdb030759c54f700d5c122338c5b3a8 Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Thu, 29 Jul 2021 23:56:42 -0700 Subject: Chapter 15.3.1 --- clox/src/vm.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'clox/src/vm.c') diff --git a/clox/src/vm.c b/clox/src/vm.c index e05a0c8..a775acb 100644 --- a/clox/src/vm.c +++ b/clox/src/vm.c @@ -25,6 +25,12 @@ Value pop() { static InterpretResult run() { #define READ_BYTE() (*vm.ip++) #define READ_CONSTANT() (vm.chunk->constants.values[READ_BYTE()]) +#define BINARY_OP(op) \ + do { \ + double b = pop(); \ + double a = pop(); \ + push(a op b); \ + } while (false) for (;;) { #ifdef DEBUG_TRACE_EXECUTION @@ -45,6 +51,18 @@ static InterpretResult run() { push(constant); break; } + case OP_ADD: + BINARY_OP(+); + break; + case OP_SUBTRACT: + BINARY_OP(-); + break; + case OP_MULTIPLY: + BINARY_OP(*); + break; + case OP_DIVIDE: + BINARY_OP(/); + break; case OP_NEGATE: push(-pop()); break; @@ -58,6 +76,7 @@ static InterpretResult run() { #undef READ_BYTE #undef READ_CONSTANT +#undef BINARY_OP } InterpretResult interpret(Chunk *chunk) { -- cgit v1.2.3-54-g00ecf