[Scummvm-git-logs] scummvm master -> 40da239e764dbb2623ec5b6063dc19a5a19ec572
djsrv
dservilla at gmail.com
Thu Aug 5 00:01:18 UTC 2021
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
40da239e76 DIRECTOR: LINGO: Expect extra values on stack when aborting
Commit: 40da239e764dbb2623ec5b6063dc19a5a19ec572
https://github.com/scummvm/scummvm/commit/40da239e764dbb2623ec5b6063dc19a5a19ec572
Author: djsrv (dservilla at gmail.com)
Date: 2021-08-04T20:00:43-04:00
Commit Message:
DIRECTOR: LINGO: Expect extra values on stack when aborting
Changed paths:
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index a527e5275a..b3436a65c3 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -317,7 +317,7 @@ void Lingo::pushContext(const Symbol funcSym, bool allowRetVal, Datum defaultRet
}
}
-void Lingo::popContext() {
+void Lingo::popContext(bool aborting) {
Common::Array<CFrame *> &callstack = _vm->getCurrentWindow()->_callstack;
debugC(5, kDebugLingoExec, "Popping frame %d", callstack.size());
@@ -335,7 +335,15 @@ void Lingo::popContext() {
g_lingo->push(fp->defaultRetVal);
}
} else if (_stack.size() > fp->stackSizeBefore) {
- error("handler %s returned extra %d values", fp->sp.name->c_str(), _stack.size() - fp->stackSizeBefore);
+ if (aborting) {
+ // Since we're aborting execution, we should expect that some extra
+ // values are left on the stack.
+ while (_stack.size() > fp->stackSizeBefore) {
+ g_lingo->pop();
+ }
+ } else {
+ error("handler %s returned extra %d values", fp->sp.name->c_str(), _stack.size() - fp->stackSizeBefore);
+ }
} else {
error("handler %s popped extra %d values", fp->sp.name->c_str(), fp->stackSizeBefore - _stack.size());
}
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 138a9c2173..2a2fb47309 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -444,7 +444,7 @@ void Lingo::execute() {
if (_abort || _vm->getCurrentMovie()->getScore()->_playState == kPlayStopped) {
// Clean up call stack
while (_vm->getCurrentWindow()->_callstack.size()) {
- popContext();
+ popContext(true);
}
}
_abort = false;
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 71d8f662d9..99510fba52 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -317,7 +317,7 @@ public:
void loadStateFromWindow();
void saveStateToWindow();
void pushContext(const Symbol funcSym, bool allowRetVal, Datum defaultRetVal);
- void popContext();
+ void popContext(bool aborting = false);
bool hasFrozenContext();
void cleanLocalVars();
void varAssign(const Datum &var, const Datum &value);
More information about the Scummvm-git-logs
mailing list