fix multi-body function error offset
This commit is contained in:
parent
b076f4bd43
commit
c1ff25a253
4
src/vm.c
4
src/vm.c
@ -525,7 +525,7 @@ i32 bcDepth=-2;
|
|||||||
i32* vmStack;
|
i32* vmStack;
|
||||||
i32 bcCtr = 0;
|
i32 bcCtr = 0;
|
||||||
#endif
|
#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
|
B evalBC(Block* bl, Body* b, Scope* sc) { // doesn't consume
|
||||||
#ifdef DEBUG_VM
|
#ifdef DEBUG_VM
|
||||||
bcDepth+= 2;
|
bcDepth+= 2;
|
||||||
@ -1067,6 +1067,8 @@ NOINLINE void vm_pstLive() {
|
|||||||
void unwindEnv(Env* envNew) {
|
void unwindEnv(Env* envNew) {
|
||||||
assert(envNew<=envCurr);
|
assert(envNew<=envCurr);
|
||||||
while (envCurr!=envNew) {
|
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;
|
if ((envCurr->pos&1) == 0) envCurr->pos = (BCPOS(envCurr->sc->body, (u32*)envCurr->pos)<<1) | 1;
|
||||||
envCurr--;
|
envCurr--;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user