[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