From 6c349fc3ede718e4aa98355f6ae063fe0f7cd43d Mon Sep 17 00:00:00 2001 From: dzaima Date: Sat, 8 May 2021 14:19:48 +0300 Subject: [PATCH] fix !GS_REALLOC --- src/vm.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/vm.c b/src/vm.c index 5cde5068..112037a3 100644 --- a/src/vm.c +++ b/src/vm.c @@ -314,7 +314,7 @@ B evalBC(Body* b, Scope* sc) { // doesn't consume B* lgStack = gStack; #define POP (*--lgStack) #define P(N) B N=POP; - #define ADD(X) { *(lgStack++) = X; } + #define ADD(X) { *(lgStack++) = X; } // fine, as, if an error occurs, lgStack is ignored anyways #define GS_UPD { gStack = lgStack; } #endif @@ -362,6 +362,7 @@ B evalBC(Body* b, Scope* sc) { // doesn't consume HArr_p r = m_harrUv(sz); bool allNum = true; for (i32 i = 0; i < sz; i++) if (!isNum(r.a[sz-i-1] = POP)) allNum = false; + GS_UPD; ADD(allNum && sz? withFill(r.b, m_f64(0)) : r.b); break; } @@ -399,9 +400,9 @@ B evalBC(Body* b, Scope* sc) { // doesn't consume vars[p] = bi_optOut; break; } - case SETN: { P(s) P(x) v_set(pscs, s, x, false); dec(s); ADD(x); break; } - case SETU: { P(s) P(x) v_set(pscs, s, x, true ); dec(s); ADD(x); break; } - case SETM: { P(s)P(f)P(x) + case SETN: { P(s) P(x) GS_UPD; v_set(pscs, s, x, false); dec(s); ADD(x); break; } + case SETU: { P(s) P(x) GS_UPD; v_set(pscs, s, x, true ); dec(s); ADD(x); break; } + case SETM: { P(s)P(f)P(x) GS_UPD; B w = v_get(pscs, s); B r = c2(f,w,x); dec(f); v_set(pscs, s, r, true); dec(s); @@ -431,6 +432,7 @@ B evalBC(Body* b, Scope* sc) { // doesn't consume #undef P #undef ADD #undef POP + #undef GS_UPD } B actualExec(Block* bl, Scope* psc, i32 ga, B* svar) { // consumes svar contents