[Scummvm-git-logs] scummvm master -> d6c30c2f58d724e9dcca634869e48ab1dce04f4f
djsrv
dservilla at gmail.com
Wed Aug 11 22:43:50 UTC 2021
This automated email contains information about 3 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
b52b47f227 DIRECTOR: LINGO: Init globals to 0 in D2-3
205999c61d DIRECTOR: LINGO: Fix asString for VOID
d6c30c2f58 DIRECTOR: LINGO: Fix b_do
Commit: b52b47f22703df9f8406ebe07fff3c641313565d
https://github.com/scummvm/scummvm/commit/b52b47f22703df9f8406ebe07fff3c641313565d
Author: djsrv (dservilla at gmail.com)
Date: 2021-08-11T18:42:37-04:00
Commit Message:
DIRECTOR: LINGO: Init globals to 0 in D2-3
Changed paths:
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo-code.h
engines/director/lingo/lingo-codegen.cpp
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 545e9c1f66..904d052255 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -91,6 +91,7 @@ static struct FuncDescr {
{ LC::c_field, "c_field", "" },
{ LC::c_fieldref, "c_fieldref", "" },
{ LC::c_floatpush, "c_floatpush", "f" },
+ { LC::c_globalinit, "c_globalinit", "s" },
{ LC::c_globalpush, "c_globalpush", "s" },
{ LC::c_globalrefpush, "c_globalrefpush", "s" },
{ LC::c_ge, "c_ge", "" },
@@ -489,6 +490,13 @@ void LC::c_proparraypush() {
g_lingo->push(d);
}
+void LC::c_globalinit() {
+ Common::String name(g_lingo->readString());
+ if (!g_lingo->_globalvars.contains(name) || g_lingo->_globalvars[name].type == VOID) {
+ g_lingo->_globalvars[name] = Datum(0);
+ }
+}
+
void LC::c_varrefpush() {
Common::String name(g_lingo->readString());
Datum d(name);
diff --git a/engines/director/lingo/lingo-code.h b/engines/director/lingo/lingo-code.h
index 6a9014f0ca..f878cebef2 100644
--- a/engines/director/lingo/lingo-code.h
+++ b/engines/director/lingo/lingo-code.h
@@ -81,6 +81,7 @@ void c_globalrefpush();
void c_localrefpush();
void c_proprefpush();
void c_varpush();
+void c_globalinit();
void c_globalpush();
void c_localpush();
void c_proppush();
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 6146e25b91..aae0729be9 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -771,6 +771,13 @@ bool LingoCompiler::visitGlobalNode(GlobalNode *node) {
for (uint i = 0; i < node->names->size(); i++) {
registerMethodVar(*(*node->names)[i], kVarGlobal);
}
+ // Before Director 4, a global statement initializes the var to 0.
+ if (g_director->getVersion() < 400) {
+ for (uint i = 0; i < node->names->size(); i++) {
+ code1(LC::c_globalinit);
+ codeString((*node->names)[i]->c_str());
+ }
+ }
return true;
}
Commit: 205999c61d68dff8145542b118cbf9e4f2c5c684
https://github.com/scummvm/scummvm/commit/205999c61d68dff8145542b118cbf9e4f2c5c684
Author: djsrv (dservilla at gmail.com)
Date: 2021-08-11T18:42:37-04:00
Commit Message:
DIRECTOR: LINGO: Fix asString for VOID
Changed paths:
engines/director/lingo/lingo.cpp
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index db026f5e92..bd213c7b13 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -812,7 +812,15 @@ Common::String Datum::asString(bool printonly) const {
}
break;
case VOID:
- s = "#void";
+ if (!printonly) {
+ s = "";
+ } else {
+ if (g_director->getVersion() < 400) {
+ s = "<NoValue>";
+ } else {
+ s = "<Void>";
+ }
+ }
break;
case VARREF:
s = Common::String::format("var: #%s", u.s->c_str());
Commit: d6c30c2f58d724e9dcca634869e48ab1dce04f4f
https://github.com/scummvm/scummvm/commit/d6c30c2f58d724e9dcca634869e48ab1dce04f4f
Author: djsrv (dservilla at gmail.com)
Date: 2021-08-11T18:42:37-04:00
Commit Message:
DIRECTOR: LINGO: Fix b_do
Changed paths:
engines/director/lingo/lingo-builtins.cpp
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 1a4bc25209..f53e0803a6 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1192,19 +1192,10 @@ void LB::b_delay(int nargs) {
}
void LB::b_do(int nargs) {
- Datum d = g_lingo->pop();
-
- // FIXME: correct way for finding the script id
- // movie script 65535 is for startup scripts currently
- // i think we don't find to find the empty slot. Maybe finding a constant slot for "do" command is ok. e.g. 65534.
- // And we can always overwrite the script we add while executing "do" command
- LingoArchive *mainArchive = g_director->getCurrentMovie()->getMainLingoArch();
- int counter = 65535;
- while (mainArchive->getScriptContext(kMovieScript, counter))
- counter--;
-
- mainArchive->addCode(Common::U32String(d.asString(), Common::kMacRoman), kMovieScript, counter);
- g_lingo->executeScript(kMovieScript, CastMemberID(counter, 0));
+ Common::String code = g_lingo->pop().asString();
+ ScriptContext *sc = g_lingo->_compiler->compileAnonymous(code);
+ Symbol sym = sc->_eventHandlers[kEventGeneric];
+ LC::call(sym, 0, false);
}
void LB::b_go(int nargs) {
More information about the Scummvm-git-logs
mailing list