Two SquirrelObject methods must pop values from stack, but they don't.
BOOL SquirrelObject::Exists(const SQChar *key) const
{
BOOL ret = FALSE;
if(GetSlot(key)) {
ret = TRUE;
sq_pop(SquirrelVM::_VM,1); //--- HERE
}
sq_pop(SquirrelVM::_VM,1);
return ret;
}
BOOL SquirrelObject::SetDelegate(SquirrelObject &obj)
{
if (obj.GetType() == OT_TABLE ||
obj.GetType() == OT_NULL) {
switch(_o._type) {
case OT_USERDATA:
case OT_TABLE:
sq_pushobject(SquirrelVM::_VM,_o);
sq_pushobject(SquirrelVM::_VM,obj._o);
if(SQ_SUCCEEDED(sq_setdelegate(SquirrelVM::_VM,-2)))
{
sq_pop(SquirrelVM::_VM, 1); //--- HERE
return TRUE;
}
sq_pop(SquirrelVM::_VM, 1); //--- HERE
break;
}
}
return FALSE;
}
When pops are not performed, SQVM stack can grow to huge sizes