diff --git a/src/core/gstack.h b/src/core/gstack.h index b5e84d88..a9676ccb 100644 --- a/src/core/gstack.h +++ b/src/core/gstack.h @@ -40,6 +40,3 @@ static inline void gsAdd(B x) { static inline B gsPop() { return *--gStack; } -static inline B gsGet(i32 p) { // p>0; 1 is the top item, etc - return gStack[-p]; -} diff --git a/src/vm.c b/src/vm.c index d0462084..a6dbc443 100644 --- a/src/vm.c +++ b/src/vm.c @@ -374,12 +374,14 @@ B evalBC(Body* b, Scope* sc) { // doesn't consume #define POP (*--gStack) #define P(N) B N=POP; #define ADD(X) { B tr=X; *(gStack++) = tr; } + #define PEEK(X) gStack[-(X)] #define GS_UPD #else B* lgStack = gStack; #define POP (*--lgStack) #define P(N) B N=POP; #define ADD(X) { *(lgStack++) = X; } // fine, as, if an error occurs, lgStack is ignored anyways + #define PEEK(X) lgStack[-(X)] #define GS_UPD { gStack = lgStack; } #endif #define L64 ({ u64 r = bc[0] | ((u64)bc[1])<<32; bc+= 2; r; }) @@ -535,7 +537,7 @@ B evalBC(Body* b, Scope* sc) { // doesn't consume } case RETN: goto end; case CHKV: { - if (isNothing(gsGet(1))) { GS_UPD; POS_UPD; thrM("Unexpected Nothing (·)"); } + if (isNothing(PEEK(1))) { GS_UPD; POS_UPD; thrM("Unexpected Nothing (·)"); } break; } // not implemented: VARO VARM VFYM SETH FLDM SYSV