|
@@ -76,6 +76,11 @@ static void sPushNull(Script* sc) {
|
|
sPush(sc, &o);
|
|
sPush(sc, &o);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void sPushBool(Script* sc, bool b) {
|
|
|
|
+ Object o = {.type = OT_BOOL, .data.intValue = b};
|
|
|
|
+ sPush(sc, &o);
|
|
|
|
+}
|
|
|
|
+
|
|
static void sIntBinary(Script* sc, int (*f)(int, int)) {
|
|
static void sIntBinary(Script* sc, int (*f)(int, int)) {
|
|
Object a;
|
|
Object a;
|
|
if(sPop(sc, &a)) {
|
|
if(sPop(sc, &a)) {
|
|
@@ -116,6 +121,8 @@ static void sConsumeInstruction(Script* sc) {
|
|
case OP_NOTHING: break;
|
|
case OP_NOTHING: break;
|
|
case OP_PUSH_INT: sPushInt(sc); break;
|
|
case OP_PUSH_INT: sPushInt(sc); break;
|
|
case OP_PUSH_NULL: sPushNull(sc); break;
|
|
case OP_PUSH_NULL: sPushNull(sc); break;
|
|
|
|
+ case OP_PUSH_TRUE: sPushBool(sc, true); break;
|
|
|
|
+ case OP_PUSH_FALSE: sPushBool(sc, false); break;
|
|
case OP_ADD: sIntBinary(sc, sIntAdd); break;
|
|
case OP_ADD: sIntBinary(sc, sIntAdd); break;
|
|
case OP_MUL: sIntBinary(sc, sIntMul); break;
|
|
case OP_MUL: sIntBinary(sc, sIntMul); break;
|
|
case OP_PRINT: sPrint(sc); break;
|
|
case OP_PRINT: sPrint(sc); break;
|