|
@@ -148,6 +148,22 @@ static void sGet(Script* sc) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static void sPreIncrement(Script* sc) {
|
|
|
+ int value = 0;
|
|
|
+ if(sReadInt(sc, &value)) {
|
|
|
+ Object* o = sc->stack + value + sc->stackVarIndex;
|
|
|
+ if(o->type == OT_INT) {
|
|
|
+ o->data.intValue++;
|
|
|
+ } else if(o->type == OT_FLOAT) {
|
|
|
+ o->data.floatValue++;
|
|
|
+ } else {
|
|
|
+ sError(sc, "object is not a number on line %d", sc->line);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ sPush(sc, o);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static void sPushCodeInt(Script* sc) {
|
|
|
int value = 0;
|
|
|
if(sReadInt(sc, &value)) {
|
|
@@ -389,6 +405,7 @@ static void sConsumeInstruction(Script* sc) {
|
|
|
case OP_POP: sPopEmpty(sc); break;
|
|
|
case OP_SET: sSet(sc); break;
|
|
|
case OP_GET: sGet(sc); break;
|
|
|
+ case OP_PRE_INCREMENT: sPreIncrement(sc); break;
|
|
|
case OP_ADD: sNumberBinary(sc, sIntAdd, sFloatAdd); break;
|
|
|
case OP_SUB: sNumberBinary(sc, sIntSub, sFloatSub); break;
|
|
|
case OP_MUL: sNumberBinary(sc, sIntMul, sFloatMul); break;
|
|
@@ -490,6 +507,7 @@ void sPrintCode(Script* sc) {
|
|
|
case OP_POP: puts("Pop"); break;
|
|
|
case OP_SET: sPrintInt(sc, "Set"); break;
|
|
|
case OP_GET: sPrintInt(sc, "Get"); break;
|
|
|
+ case OP_PRE_INCREMENT: sPrintInt(sc, "Pre Increment"); break;
|
|
|
case OP_ADD: puts("Add"); break;
|
|
|
case OP_SUB: puts("Sub"); break;
|
|
|
case OP_MUL: puts("Mul"); break;
|