[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