[Scummvm-git-logs] scummvm master -> e0eba8ba734bd20d2f023728a1612d496aa01c8a
sev-
sev at scummvm.org
Sat May 30 21:36:49 UTC 2020
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:
e0eba8ba73 DIRECTOR: LINGO: Eliminate recursiveness in c_call
Commit: e0eba8ba734bd20d2f023728a1612d496aa01c8a
https://github.com/scummvm/scummvm/commit/e0eba8ba734bd20d2f023728a1612d496aa01c8a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-05-30T23:36:19+02:00
Commit Message:
DIRECTOR: LINGO: Eliminate recursiveness in c_call
Changed paths:
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo-codegen.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 d15682094d..a3446ba592 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1413,15 +1413,13 @@ void LC::call(Symbol *sym, int nargs) {
g_lingo->_archiveIndex = sym->archiveIndex;
}
- g_lingo->execute(0);
-
- g_lingo->_returning = false;
+ g_lingo->_pc = 0;
}
void LC::c_procret() {
if (!g_lingo->_callstack.size()) {
warning("c_procret: Call stack underflow");
- g_lingo->_returning = true;
+ g_lingo->_abort = true;
return;
}
@@ -1445,8 +1443,6 @@ void LC::c_procret() {
g_lingo->_localvars = fp->localvars;
delete fp;
-
- g_lingo->_returning = true;
}
void LC::c_global() {
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 9b64f5d6e6..d42c3e3632 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -55,7 +55,7 @@
namespace Director {
void Lingo::execute(uint pc) {
- for (_pc = pc; !_returning && (*_currentScript)[_pc] != STOP && !_nextRepeat;) {
+ for (_pc = pc; !_abort && (*_currentScript)[_pc] != STOP && !_nextRepeat;) {
Common::String instr = decodeInstruction(_currentScript, _pc);
uint current = _pc;
@@ -88,6 +88,8 @@ void Lingo::execute(uint pc) {
if (_vm->getCurrentScore() && _vm->getCurrentScore()->_stopPlay)
break;
}
+
+ _abort = false;
}
void Lingo::printStack(const char *s, uint pc) {
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index c5ceb68ee0..22a9ca5976 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -144,7 +144,7 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
_currentEntityId = 0;
_currentChannelId = -1;
_pc = 0;
- _returning = false;
+ _abort = false;
_nextRepeat = false;
_indef = kStateNone;
_ignoreMe = false;
@@ -386,7 +386,6 @@ void Lingo::executeScript(ScriptType type, uint16 id, uint16 function) {
_currentScriptContext = sc;
_currentScript = _currentScriptContext->functions[function]->u.defn;
_pc = 0;
- _returning = false;
_localvars = new SymbolHash;
@@ -396,7 +395,6 @@ void Lingo::executeScript(ScriptType type, uint16 id, uint16 function) {
}
void Lingo::executeHandler(Common::String name) {
- _returning = false;
_localvars = new SymbolHash;
debugC(1, kDebugLingoExec, "Executing script handler : %s", name.c_str());
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 36188f5a19..781f0bc4b3 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -421,7 +421,7 @@ public:
uint16 _currentScriptFunction;
ScriptData *_currentScript;
- bool _returning;
+ bool _abort;
bool _nextRepeat;
LexerDefineState _indef;
bool _ignoreMe;
More information about the Scummvm-git-logs
mailing list