From 675a0e804570ddabdee5802c38e4ffd3cfaa907a Mon Sep 17 00:00:00 2001 From: dzaima Date: Tue, 11 Jan 2022 00:32:58 +0200 Subject: [PATCH] make body->bl an owned pointer --- src/ns.c | 2 +- src/vm.c | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/ns.c b/src/ns.c index 9bf75f95..d033ce55 100644 --- a/src/ns.c +++ b/src/ns.c @@ -121,7 +121,7 @@ Body* m_nnsDescF(i32 n, char** names) { Body* body = m_body(n, 0, 0, 0); body->nsDesc = nd; body->bc = (u32*) emptyi32ptr; - body->bl = bl; + body->bl = ptr_inc(bl); for (usz i = 0; i < n; i++) { body->varData[i] = nd->expGIDs[i]; body->varData[i+n] = i; diff --git a/src/vm.c b/src/vm.c index 59ce2d36..d83b2187 100644 --- a/src/vm.c +++ b/src/vm.c @@ -417,7 +417,7 @@ Block* compileBlock(B block, Comp* comp, bool* bDone, u32* bc, usz bcIA, B allBl for (i32 i = 0; i < bodyCount; i++) { bl->bodies[i] = bodies[i]; bodies[i]->bc = (u32*)nbc + bodies[i]->bcTmp; - bodies[i]->bl = bl; + bodies[i]->bl = ptr_inc(bl); } TSFREE(bodies); return bl; @@ -892,6 +892,7 @@ DEF_FREE(body) { dec(c->nvmRefs); #endif if(c->nsDesc) ptr_decR(c->nsDesc); + if(c->bl) ptr_decR(c->bl); } DEF_FREE(block) { Block* c = (Block*)x; @@ -924,6 +925,7 @@ void body_visit(Value* x) { #if JIT_START != -1 mm_visit(c->nvmRefs); #endif + if(c->bl) mm_visitP(c->bl); if(c->nsDesc) mm_visitP(c->nsDesc); } void block_visit(Value* x) {