aboutsummaryrefslogtreecommitdiffstats
path: root/src/vm.c
diff options
context:
space:
mode:
authorBad Diode <bd@badd10de.dev>2024-07-05 16:50:41 +0200
committerBad Diode <bd@badd10de.dev>2024-07-05 16:50:41 +0200
commit9d548e7dd018d8f365d788f9a716ee6c04592c9d (patch)
treea6435e40974c23121816d2d02537db10189bb2d9 /src/vm.c
parentf67c4050a21d0d7ec2c5936ca5ea87fd48872be7 (diff)
downloadbdl-main.tar.gz
bdl-main.zip
Add tail-call-optimizationHEADmain
Diffstat (limited to 'src/vm.c')
-rw-r--r--src/vm.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/vm.c b/src/vm.c
index 0929fb6..0791706 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -5,7 +5,7 @@
5#include "compiler.c" 5#include "compiler.c"
6 6
7#define N_CONST 256 7#define N_CONST 256
8#define STACK_SIZE KB(64) 8#define STACK_SIZE MB(4)
9typedef struct VM { 9typedef struct VM {
10 Chunk *main; 10 Chunk *main;
11 Chunk *chunk; 11 Chunk *chunk;
@@ -382,6 +382,9 @@ vm_run(VM *vm) {
382 p[3] = old_fp; 382 p[3] = old_fp;
383 vm->sp += sizeof(ptrsize) * 4; 383 vm->sp += sizeof(ptrsize) * 4;
384 } break; 384 } break;
385 case OP_RECUR: {
386 vm->ip = vm->chunk->code;
387 } break;
385 case OP_RET: { 388 case OP_RET: {
386 u64 *p = (u64 *)vm->sp; 389 u64 *p = (u64 *)vm->sp;
387 ptrsize chunk_addr = p[-4]; 390 ptrsize chunk_addr = p[-4];