From c1ff25a2536c5eb04c69229c642673d3ee823af9 Mon Sep 17 00:00:00 2001 From: dzaima Date: Tue, 21 Sep 2021 19:00:16 +0300 Subject: [PATCH] fix multi-body function error offset --- src/vm.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/vm.c b/src/vm.c index 4ae0f7dc..3f9e369d 100644 --- a/src/vm.c +++ b/src/vm.c @@ -525,7 +525,7 @@ i32 bcDepth=-2; i32* vmStack; i32 bcCtr = 0; #endif -#define BCPOS(B,P) (B->bl->map[(P)-B->bc]) +#define BCPOS(B,P) (B->bl->map[(P)-(u32*)B->bl->bc]) B evalBC(Block* bl, Body* b, Scope* sc) { // doesn't consume #ifdef DEBUG_VM bcDepth+= 2; @@ -1067,6 +1067,8 @@ NOINLINE void vm_pstLive() { void unwindEnv(Env* envNew) { assert(envNew<=envCurr); while (envCurr!=envNew) { + // if ((envCurr->pos&1) == 0) printf("unwinding %ld\n", (u32*)envCurr->pos - (u32*)envCurr->sc->body->bl->bc); + // else printf("not unwinding %ld", envCurr->pos>>1); if ((envCurr->pos&1) == 0) envCurr->pos = (BCPOS(envCurr->sc->body, (u32*)envCurr->pos)<<1) | 1; envCurr--; }