diff --git a/src/jit/nvm_x86_64.c b/src/jit/nvm_x86_64.c index 43bbe5fc..521639d4 100644 --- a/src/jit/nvm_x86_64.c +++ b/src/jit/nvm_x86_64.c @@ -121,7 +121,7 @@ INS B i_ARR_p(B el0, i64 sz, B* cStack) { assert(sz>0); if (allNum) return num_squeeze(r.b); return r.b; } -INS B i_DFND_0(u32* bc, Scope* sc, Block* bl) { POS_UPD; return m_funBlock(bl, sc); } +INS B i_DFND_0(u32* bc, Scope* sc, Block* bl) { POS_UPD; return evalFunBlock(bl, sc); } INS B i_DFND_1(u32* bc, Scope* sc, Block* bl) { POS_UPD; return m_md1Block(bl, sc); } // TODO these only fail on oom, so no need to update pos INS B i_DFND_2(u32* bc, Scope* sc, Block* bl) { POS_UPD; return m_md2Block(bl, sc); } INS B i_MD1C(B f,B m, u32* bc) { POS_UPD; return m1_d (m,f ); } diff --git a/src/load.c b/src/load.c index 0391c7f0..5c7149b3 100644 --- a/src/load.c +++ b/src/load.c @@ -204,7 +204,7 @@ NOINLINE Block* bqn_compSc(B str, B path, B args, Scope* sc, bool repl) { // con B bqn_exec(B str, B path, B args) { // consumes all Block* block = bqn_comp(str, path, args); - B res = m_funBlock(block, 0); + B res = evalFunBlock(block, 0); ptr_dec(block); return res; } @@ -296,7 +296,7 @@ B rebqn_exec(B str, B path, B args, B o) { Block* block = bqn_compc(str, path, args, op[2], rtsys); decG(rtsys); comp_currRe = prevRe; - res = m_funBlock(block, 0); + res = evalFunBlock(block, 0); ptr_dec(block); } decG(o); @@ -353,7 +353,7 @@ void load_init() { // very last init function Block* runtime0_b = load_compImport( #include "gen/runtime0" ); - B r0r = m_funBlock(runtime0_b, 0); ptr_dec(runtime0_b); + B r0r = evalFunBlock(runtime0_b, 0); ptr_dec(runtime0_b); B* runtime_0 = toHArr(r0r)->a; #endif @@ -365,7 +365,7 @@ void load_init() { // very last init function dec(r0r); #endif - B rtRes = m_funBlock(runtime_b, 0); ptr_dec(runtime_b); + B rtRes = evalFunBlock(runtime_b, 0); ptr_dec(runtime_b); SGet(rtRes); B rtObjRaw = Get(rtRes,0); B setPrims = Get(rtRes,1); @@ -444,7 +444,7 @@ void load_init() { // very last init function #include "gen/interp" , bi_N, bi_N, bi_N, bi_N, NULL ); - B interp = m_funBlock(c, 0); ptr_dec(c); + B interp = evalFunBlock(c, 0); ptr_dec(c); print(interp); printf("\n"); dec(interp); @@ -463,7 +463,7 @@ void load_init() { // very last init function ); runtime[n_asrt] = prevAsrt; load_glyphs = m_hVec3(m_str32(U"+-×÷⋆√⌊⌈|¬∧∨<>≠=≤≥≡≢⊣⊢⥊∾≍⋈↑↓↕«»⌽⍉/⍋⍒⊏⊑⊐⊒∊⍷⊔!"), m_str32(U"˙˜˘¨⌜⁼´˝`"), m_str32(U"∘○⊸⟜⌾⊘◶⎉⚇⍟⎊")); - load_compgen = m_funBlock(comp_b, 0); ptr_dec(comp_b); + load_compgen = evalFunBlock(comp_b, 0); ptr_dec(comp_b); load_comp = c1(load_compgen, inc(load_glyphs)); gc_add(load_compgen); gc_add(load_comp); gc_add(load_glyphs); @@ -472,7 +472,7 @@ void load_init() { // very last init function Block* fmt_b = load_compImport( #include "gen/formatter" ); - B fmtM = m_funBlock(fmt_b, 0); ptr_dec(fmt_b); + B fmtM = evalFunBlock(fmt_b, 0); ptr_dec(fmt_b); B fmtR = c1(fmtM, m_caB(4, (B[]){incG(bi_type), incG(bi_decp), incG(bi_glyph), incG(bi_repr)})); decG(fmtM); SGet(fmtR) diff --git a/src/vm.c b/src/vm.c index aded06e5..f663431e 100644 --- a/src/vm.c +++ b/src/vm.c @@ -670,9 +670,9 @@ B evalBC(Block* bl, Body* b, Scope* sc) { // doesn't consume } break; } - case DFND0: { GS_UPD;POS_UPD; ADD(m_funBlock((Block*)L64, sc)); break; } - case DFND1: { GS_UPD;POS_UPD; ADD(m_md1Block((Block*)L64, sc)); break; } - case DFND2: { GS_UPD;POS_UPD; ADD(m_md2Block((Block*)L64, sc)); break; } + case DFND0: { GS_UPD;POS_UPD; ADD(evalFunBlock((Block*)L64, sc)); break; } + case DFND1: { GS_UPD;POS_UPD; ADD(m_md1Block ((Block*)L64, sc)); break; } + case DFND2: { GS_UPD;POS_UPD; ADD(m_md2Block ((Block*)L64, sc)); break; } case MD1C: { P(f)P(m) GS_UPD;POS_UPD; ADD(m1_d (m,f )); break; } case MD2C: { P(f)P(m)P(g) GS_UPD;POS_UPD; ADD(m2_d (m,f,g)); break; } @@ -859,7 +859,7 @@ B md2Bl_ix(Md2D* d, B w, B x) { Md2Block* b=(Md2Block*)d->m2; ptr_inc(d); return B md1Bl_d(B m, B f ) { Md1Block* c = c(Md1Block,m); Block* bl=c(Md1Block, m)->bl; return c->bl->imm? execBlock(bl, bl->bodies[0], c(Md1Block, m)->sc, 2, (B[]){m, f }) : m_md1D((Md1*)c,f ); } B md2Bl_d(B m, B f, B g) { Md2Block* c = c(Md2Block,m); Block* bl=c(Md2Block, m)->bl; return c->bl->imm? execBlock(bl, bl->bodies[0], c(Md2Block, m)->sc, 3, (B[]){m, f, g}) : m_md2D((Md2*)c,f,g); } -B m_funBlock(Block* bl, Scope* psc) { // doesn't consume anything +B evalFunBlock(Block* bl, Scope* psc) { // doesn't consume anything if (bl->imm) return execBlock(bl, bl->bodies[0], psc, 0, NULL); FunBlock* r = mm_alloc(sizeof(FunBlock), t_funBl); r->bl = ptr_inc(bl); diff --git a/src/vm.h b/src/vm.h index 5112f34f..85b7ca0a 100644 --- a/src/vm.h +++ b/src/vm.h @@ -195,7 +195,7 @@ typedef struct FunBlock { struct Fun; Scope* sc; Block* bl; } FunBlock; typedef struct Md1Block { struct Md1; Scope* sc; Block* bl; } Md1Block; typedef struct Md2Block { struct Md2; Scope* sc; Block* bl; } Md2Block; // all don't consume anything -B m_funBlock(Block* bl, Scope* psc); // may return evaluated result, whatever +B evalFunBlock(Block* bl, Scope* psc); // may return evaluated result, so not named m_funBlock B m_md1Block(Block* bl, Scope* psc); B m_md2Block(Block* bl, Scope* psc);