[Scummvm-git-logs] scummvm master -> df7cc8e2c2c9feba0bf62131b289f85192cce0ba

djsrv dservilla at gmail.com
Wed Aug 19 19:12:35 UTC 2020


This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
205a90122a DIRECTOR: LINGO: Warn on missing factory method
b95495725a DIRECTOR: LINGO: Remove unnecessary non-eval pop
febf4592ba DIRECTOR: LINGO: Handle varType in cb_objectcall
df7cc8e2c2 DIRECTOR: LINGO: Mark objectcall warnings BUILDBOT


Commit: 205a90122a0d9566431ffa230e5cc94bf5630740
    https://github.com/scummvm/scummvm/commit/205a90122a0d9566431ffa230e5cc94bf5630740
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-19T14:31:48-04:00

Commit Message:
DIRECTOR: LINGO: Warn on missing factory method

Changed paths:
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/tests/factory2.lingo


diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 4a03d96ec9..b91e2a6819 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1472,8 +1472,10 @@ void LC::call(const Common::String &name, int nargs, bool allowRetVal) {
 				if (funcSym.type != VOIDSYM) {
 					g_lingo->_stack[g_lingo->_stack.size() - nargs] = funcSym.target; // Set first arg to target
 					call(funcSym, nargs, allowRetVal);
-					return;
+				} else {
+					warning("Object <%s> has no method '%s'", obj.asString(true).c_str(), firstArg.u.s->c_str());
 				}
+				return;
 			}
 			firstArg = firstArg.eval();
 		}
diff --git a/engines/director/lingo/tests/factory2.lingo b/engines/director/lingo/tests/factory2.lingo
index 0582e82bfc..b5b23aa927 100644
--- a/engines/director/lingo/tests/factory2.lingo
+++ b/engines/director/lingo/tests/factory2.lingo
@@ -4,4 +4,5 @@ AimGun2
 aim1(mDispose)
 
 set notAMethod = 0
-aim2(notAMethod)
+aim2(notAMethod) -- should error
+aim2("notAMethod") -- should run fallback handler


Commit: b95495725a3900d588b415bf1a2ed1771ce3f3ba
    https://github.com/scummvm/scummvm/commit/b95495725a3900d588b415bf1a2ed1771ce3f3ba
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-19T14:42:49-04:00

Commit Message:
DIRECTOR: LINGO: Remove unnecessary non-eval pop

cb_varrefpush no longer pushes a lazy var, so suppressing its evaluation
is no longer necessary.

Changed paths:
    engines/director/lingo/lingo-bytecode.cpp


diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index e61231c390..8c74f2f67b 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -358,7 +358,7 @@ void LC::cb_localcall() {
 
 void LC::cb_objectcall() {
 	g_lingo->readInt();
-	Datum d = g_lingo->pop(false);
+	Datum d = g_lingo->pop();
 	Datum nargs = g_lingo->pop();
 
 	Common::String name;


Commit: febf4592bac04640434c7572e66b5b5ffe7688f0
    https://github.com/scummvm/scummvm/commit/febf4592bac04640434c7572e66b5b5ffe7688f0
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-19T15:06:27-04:00

Commit Message:
DIRECTOR: LINGO: Handle varType in cb_objectcall

Changed paths:
    engines/director/lingo/lingo-bytecode.cpp


diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index 8c74f2f67b..f82c6030f1 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -357,7 +357,7 @@ void LC::cb_localcall() {
 
 
 void LC::cb_objectcall() {
-	g_lingo->readInt();
+	int varType = g_lingo->readInt();
 	Datum d = g_lingo->pop();
 	Datum nargs = g_lingo->pop();
 
@@ -367,11 +367,28 @@ void LC::cb_objectcall() {
 			warning("cb_objectcall: no call frame");
 			return;
 		}
-		Common::Array<Common::String> *varNames = g_lingo->_callstack.back()->sp.varNames;
-		if ((d.asInt() % 6 == 0) && varNames && (d.asInt() / 6 < (int)varNames->size())) {
+		if (d.asInt() % 6 != 0) {
+			warning("cb_objectcall: invalid var ID %d for var type %d (not divisible by 6)", d.asInt(), varType);
+			return;
+		}
+		int varIndex = d.asInt() / 6;
+		Common::Array<Common::String> *varNames;
+		switch (varType) {
+		case 4: // arg
+			varNames = g_lingo->_callstack.back()->sp.argNames;
+			break;
+		case 5: // local
+			varNames = g_lingo->_callstack.back()->sp.varNames;
+			break;
+		default:
+			// everything else should be passed as a VAR
+			warning("cb_objectcall: received var index %d for unhandled var type %d", varIndex, varType);
+			return;
+		}
+		if (varIndex < (int)varNames->size()) {
 			name = (*varNames)[d.asInt() / 6];
 		} else {
-			warning("cb_objectcall: invalid variable ID %d", d.asInt());
+			warning("cb_objectcall: invalid var ID %d for var type %d (too high)", d.asInt(), varType);
 			return;
 		}
 	} else if (d.type == VAR) {


Commit: df7cc8e2c2c9feba0bf62131b289f85192cce0ba
    https://github.com/scummvm/scummvm/commit/df7cc8e2c2c9feba0bf62131b289f85192cce0ba
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-19T15:09:45-04:00

Commit Message:
DIRECTOR: LINGO: Mark objectcall warnings BUILDBOT

Changed paths:
    engines/director/lingo/lingo-bytecode.cpp


diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index f82c6030f1..97a09941ad 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -368,7 +368,7 @@ void LC::cb_objectcall() {
 			return;
 		}
 		if (d.asInt() % 6 != 0) {
-			warning("cb_objectcall: invalid var ID %d for var type %d (not divisible by 6)", d.asInt(), varType);
+			warning("BUILDBOT: cb_objectcall: invalid var ID %d for var type %d (not divisible by 6)", d.asInt(), varType);
 			return;
 		}
 		int varIndex = d.asInt() / 6;
@@ -382,13 +382,13 @@ void LC::cb_objectcall() {
 			break;
 		default:
 			// everything else should be passed as a VAR
-			warning("cb_objectcall: received var index %d for unhandled var type %d", varIndex, varType);
+			warning("BUILDBOT: cb_objectcall: received var index %d for unhandled var type %d", varIndex, varType);
 			return;
 		}
 		if (varIndex < (int)varNames->size()) {
 			name = (*varNames)[d.asInt() / 6];
 		} else {
-			warning("cb_objectcall: invalid var ID %d for var type %d (too high)", d.asInt(), varType);
+			warning("BUILDBOT: cb_objectcall: invalid var ID %d for var type %d (too high)", d.asInt(), varType);
 			return;
 		}
 	} else if (d.type == VAR) {




More information about the Scummvm-git-logs mailing list