Browse Source

fix free variables in generators

albertodemichelis 6 years ago
parent
commit
51137b84e6
1 changed files with 2 additions and 1 deletions
  1. 2 1
      squirrel/sqvm.cpp

+ 2 - 1
squirrel/sqvm.cpp

@@ -1006,8 +1006,9 @@ exception_restore:
             case _OP_YIELD:{
             case _OP_YIELD:{
                 if(ci->_generator) {
                 if(ci->_generator) {
                     if(sarg1 != MAX_FUNC_STACKSIZE) temp_reg = STK(arg1);
                     if(sarg1 != MAX_FUNC_STACKSIZE) temp_reg = STK(arg1);
+					if (_openouters) CloseOuters(&_stack._vals[_stackbase]);
                     _GUARD(ci->_generator->Yield(this,arg2));
                     _GUARD(ci->_generator->Yield(this,arg2));
-                    traps -= ci->_etraps;
+					traps -= ci->_etraps;
                     if(sarg1 != MAX_FUNC_STACKSIZE) _Swap(STK(arg1),temp_reg);//STK(arg1) = temp_reg;
                     if(sarg1 != MAX_FUNC_STACKSIZE) _Swap(STK(arg1),temp_reg);//STK(arg1) = temp_reg;
                 }
                 }
                 else { Raise_Error(_SC("trying to yield a '%s',only genenerator can be yielded"), GetTypeName(ci->_generator)); SQ_THROW();}
                 else { Raise_Error(_SC("trying to yield a '%s',only genenerator can be yielded"), GetTypeName(ci->_generator)); SQ_THROW();}