diff options
author | Yexo <yexo@openttd.org> | 2009-01-20 14:11:58 +0000 |
---|---|---|
committer | Yexo <yexo@openttd.org> | 2009-01-20 14:11:58 +0000 |
commit | eab990901ba64eb52887739a09ff5eeec5c40a0c (patch) | |
tree | 5db8c69e705f0e04ba8a13cd9f5454fd9eb67c3a | |
parent | a9a8bb35901ca431756eba4406f9da9dbc817829 (diff) | |
download | openttd-eab990901ba64eb52887739a09ff5eeec5c40a0c.tar.xz |
(svn r15167) -Fix [FS#2558]: The top of the stack was resetted after executing the first Ai tick causing random AI crashes.
-rw-r--r-- | src/script/squirrel.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/script/squirrel.cpp b/src/script/squirrel.cpp index b75833f65..22e39562e 100644 --- a/src/script/squirrel.cpp +++ b/src/script/squirrel.cpp @@ -192,8 +192,9 @@ bool Squirrel::CallMethod(HSQOBJECT instance, const char *method_name, HSQOBJECT sq_pushobject(this->vm, instance); sq_call(this->vm, 1, ret == NULL ? SQFalse : SQTrue, SQTrue, suspend); if (ret != NULL) sq_getstackobj(vm, -1, ret); - /* Reset the top */ - sq_settop(this->vm, top); + /* Reset the top, but don't do so for the AI main function, as we need + * a correct stack when resuming. */ + if (this->vm->_suspended == 0) sq_settop(this->vm, top); return this->vm->_suspended != 0; } |