From 51137b84e66c4d526809fd8a59f4ba1d38138c76 Mon Sep 17 00:00:00 2001 From: albertodemichelis Date: Tue, 23 Apr 2019 23:36:46 +0800 Subject: [PATCH] fix free variables in generators --- squirrel/sqvm.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/squirrel/sqvm.cpp b/squirrel/sqvm.cpp index 2da6bea..c0c7c98 100644 --- a/squirrel/sqvm.cpp +++ b/squirrel/sqvm.cpp @@ -1006,8 +1006,9 @@ exception_restore: case _OP_YIELD:{ if(ci->_generator) { if(sarg1 != MAX_FUNC_STACKSIZE) temp_reg = STK(arg1); + if (_openouters) CloseOuters(&_stack._vals[_stackbase]); _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; } else { Raise_Error(_SC("trying to yield a '%s',only genenerator can be yielded"), GetTypeName(ci->_generator)); SQ_THROW();}