fix CHKV
This commit is contained in:
parent
d27dc57bed
commit
b51cf8cfc2
@ -40,6 +40,3 @@ static inline void gsAdd(B x) {
|
|||||||
static inline B gsPop() {
|
static inline B gsPop() {
|
||||||
return *--gStack;
|
return *--gStack;
|
||||||
}
|
}
|
||||||
static inline B gsGet(i32 p) { // p>0; 1 is the top item, etc
|
|
||||||
return gStack[-p];
|
|
||||||
}
|
|
||||||
|
|||||||
4
src/vm.c
4
src/vm.c
@ -374,12 +374,14 @@ B evalBC(Body* b, Scope* sc) { // doesn't consume
|
|||||||
#define POP (*--gStack)
|
#define POP (*--gStack)
|
||||||
#define P(N) B N=POP;
|
#define P(N) B N=POP;
|
||||||
#define ADD(X) { B tr=X; *(gStack++) = tr; }
|
#define ADD(X) { B tr=X; *(gStack++) = tr; }
|
||||||
|
#define PEEK(X) gStack[-(X)]
|
||||||
#define GS_UPD
|
#define GS_UPD
|
||||||
#else
|
#else
|
||||||
B* lgStack = gStack;
|
B* lgStack = gStack;
|
||||||
#define POP (*--lgStack)
|
#define POP (*--lgStack)
|
||||||
#define P(N) B N=POP;
|
#define P(N) B N=POP;
|
||||||
#define ADD(X) { *(lgStack++) = X; } // fine, as, if an error occurs, lgStack is ignored anyways
|
#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; }
|
#define GS_UPD { gStack = lgStack; }
|
||||||
#endif
|
#endif
|
||||||
#define L64 ({ u64 r = bc[0] | ((u64)bc[1])<<32; bc+= 2; r; })
|
#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 RETN: goto end;
|
||||||
case CHKV: {
|
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;
|
break;
|
||||||
}
|
}
|
||||||
// not implemented: VARO VARM VFYM SETH FLDM SYSV
|
// not implemented: VARO VARM VFYM SETH FLDM SYSV
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user