Browse Source

Apply fixes from squirrel

mingodad 8 years ago
parent
commit
f938a4075f
2 changed files with 6 additions and 1 deletions
  1. 3 0
      SquiLu/squirrel/sqcompiler.cpp
  2. 3 1
      SquiLu/squirrel/sqvm.cpp

+ 3 - 0
SquiLu/squirrel/sqcompiler.cpp

@@ -986,6 +986,7 @@ public:
         INVOKE_EXP(f);
         INVOKE_EXP(f);
         SQInteger op1 = _fs->PopTarget();SQInteger op2 = _fs->PopTarget();
         SQInteger op1 = _fs->PopTarget();SQInteger op2 = _fs->PopTarget();
         _fs->AddInstruction(op, _fs->PushTarget(), op1, op2, op3);
         _fs->AddInstruction(op, _fs->PushTarget(), op1, op2, op3);
+        _es.etype = EXPR;
     }
     }
     void LogicalOrExp()
     void LogicalOrExp()
     {
     {
@@ -1002,6 +1003,7 @@ public:
             if(trg != second_exp) _fs->AddInstruction(_OP_MOVE, trg, second_exp);
             if(trg != second_exp) _fs->AddInstruction(_OP_MOVE, trg, second_exp);
             _fs->SnoozeOpt();
             _fs->SnoozeOpt();
             _fs->SetIntructionParam(jpos, 1, (_fs->GetCurrentPos() - jpos));
             _fs->SetIntructionParam(jpos, 1, (_fs->GetCurrentPos() - jpos));
+            _es.etype = EXPR;
             break;
             break;
         }else return;
         }else return;
     }
     }
@@ -1021,6 +1023,7 @@ public:
             if(trg != second_exp) _fs->AddInstruction(_OP_MOVE, trg, second_exp);
             if(trg != second_exp) _fs->AddInstruction(_OP_MOVE, trg, second_exp);
             _fs->SnoozeOpt();
             _fs->SnoozeOpt();
             _fs->SetIntructionParam(jpos, 1, (_fs->GetCurrentPos() - jpos));
             _fs->SetIntructionParam(jpos, 1, (_fs->GetCurrentPos() - jpos));
+            _es.etype = EXPR;
             break;
             break;
             }
             }
 
 

+ 3 - 1
SquiLu/squirrel/sqvm.cpp

@@ -124,7 +124,7 @@ bool SQVM::ARITH_OP(SQUnsignedInteger op,SQObjectPtr &trg,const SQObjectPtr &o1,
 
 
 SQVM::SQVM(SQSharedState *ss)
 SQVM::SQVM(SQSharedState *ss)
 {
 {
-    _closing=SQFalse;
+	_closing=SQFalse;
 	_sharedstate=ss;
 	_sharedstate=ss;
 	_suspended = SQFalse;
 	_suspended = SQFalse;
 	_suspended_target = -1;
 	_suspended_target = -1;
@@ -919,9 +919,11 @@ exception_restore:
 				if (type(t) == OT_CLOSURE
 				if (type(t) == OT_CLOSURE
 					&& (!_closure(t)->_function->_bgenerator)){
 					&& (!_closure(t)->_function->_bgenerator)){
 					SQObjectPtr clo = t;
 					SQObjectPtr clo = t;
+					SQInteger last_top = _top;
 					if(_openouters) CloseOuters(&(_stack._vals[_stackbase]));
 					if(_openouters) CloseOuters(&(_stack._vals[_stackbase]));
 					for (SQInteger i = 0; i < arg3; i++) STK(i) = STK(arg2 + i);
 					for (SQInteger i = 0; i < arg3; i++) STK(i) = STK(arg2 + i);
 					_GUARD(StartCall(_closure(clo), ci->_target, arg3, _stackbase, true));
 					_GUARD(StartCall(_closure(clo), ci->_target, arg3, _stackbase, true));
+					if (last_top >= _top) _top = last_top;
 					continue;
 					continue;
 				}
 				}
 							  }
 							  }