[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