Просмотр исходного кода

improved stack cleanup for tailcalls

albertodemichelis 8 лет назад
Родитель
Сommit
a0e46fce11
1 измененных файлов с 4 добавлено и 0 удалено
  1. 4 0
      squirrel/sqvm.cpp

+ 4 - 0
squirrel/sqvm.cpp

@@ -726,9 +726,13 @@ exception_restore:
                 if (type(t) == OT_CLOSURE
                     && (!_closure(t)->_function->_bgenerator)){
                     SQObjectPtr clo = t;
+					SQInteger last_top = _top;
                     if(_openouters) CloseOuters(&(_stack._vals[_stackbase]));
                     for (SQInteger i = 0; i < arg3; i++) STK(i) = STK(arg2 + i);
                     _GUARD(StartCall(_closure(clo), ci->_target, arg3, _stackbase, true));
+					if (last_top >= _top) {
+						_top = last_top;
+					}
                     continue;
                 }
                               }