| 
					
				 | 
			
			
				@@ -180,6 +180,38 @@ static void sPostIncrement(Script* sc) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void sPreDecrement(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, "variable is not a number on line %d", sc->line); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        sPush(sc, o); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void sPostDecrement(Script* sc) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    int value = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(sReadInt(sc, &value)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Object* o = sc->stack + value + sc->stackVarIndex; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(o->type == OT_INT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sPush(sc, o); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            o->data.intValue--; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else if(o->type == OT_FLOAT) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sPush(sc, o); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            o->data.floatValue--; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sError(sc, "variable is not a number on line %d", sc->line); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 static void sPushCodeInt(Script* sc) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     int value = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if(sReadInt(sc, &value)) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -423,6 +455,8 @@ static void sConsumeInstruction(Script* sc) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         case OP_GET: sGet(sc); break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         case OP_PRE_INCREMENT: sPreIncrement(sc); break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         case OP_POST_INCREMENT: sPostIncrement(sc); break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        case OP_PRE_DECREMENT: sPreDecrement(sc); break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        case OP_POST_DECREMENT: sPostDecrement(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; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -526,6 +560,8 @@ void sPrintCode(Script* sc) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case OP_GET: sPrintInt(sc, "Get"); break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case OP_PRE_INCREMENT: sPrintInt(sc, "Pre Increment"); break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case OP_POST_INCREMENT: sPrintInt(sc, "Post Increment"); break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            case OP_PRE_DECREMENT: sPrintInt(sc, "Pre Decrement"); break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            case OP_POST_DECREMENT: sPrintInt(sc, "Post Decrement"); break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case OP_ADD: puts("Add"); break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case OP_SUB: puts("Sub"); break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             case OP_MUL: puts("Mul"); break; 
			 |