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

sev- noreply at scummvm.org
Tue May 28 19:09:10 UTC 2024


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:
a4eb40bf5a DIRECTOR: LINGO: Implement non-fatal Ligo errors


Commit: a4eb40bf5a3a567dc8fad4f17d827a7516c4046b
    https://github.com/scummvm/scummvm/commit/a4eb40bf5a3a567dc8fad4f17d827a7516c4046b
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2024-05-28T21:08:19+02:00

Commit Message:
DIRECTOR: LINGO: Implement non-fatal Ligo errors

And use it in value.lingo test where syntax errors are expected

Changed paths:
    engines/director/director.h
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/lingo-builtins.h
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.y
    engines/director/lingo/tests/value.lingo


diff --git a/engines/director/director.h b/engines/director/director.h
index 2498a57b7f4..d9f516fbbe3 100644
--- a/engines/director/director.h
+++ b/engines/director/director.h
@@ -317,6 +317,7 @@ public:
 	Common::Path _traceLogFile;
 
 	uint16 _framesRan = 0; // used by kDebugFewFramesOnly
+	bool _noFatalLingoError = false;
 };
 
 // An extension of MacPlotData for interfacing with inks and patterns without
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 6c850f5549e..8ca9abd75ea 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -231,6 +231,7 @@ static BuiltinProto builtins[] = {
 	// ScummVM Asserts: Used for testing ScummVM's Lingo implementation
 	{ "scummvmAssert",	LB::b_scummvmassert,1, 2, 200, HBLTIN },
 	{ "scummvmAssertEqual",	LB::b_scummvmassertequal,2,3,200,HBLTIN },
+	{ "scummvmNoFatalError", LB::b_scummvmNoFatalError,1,1,200,HBLTIN },
 
 	// XCMD/XFCN (HyperCard), normally exposed
 	{ "GetVolumes", LB::b_getVolumes, 0, 0, 400, FBLTIN },
@@ -3489,6 +3490,14 @@ void LB::b_scummvmassertequal(int nargs) {
 	}
 }
 
+void LB::b_scummvmNoFatalError(int nargs) {
+	Datum flag = g_lingo->pop();
+
+	g_director->_noFatalLingoError = (flag.asInt() != 0);
+
+	warning("scummvmNoFatalEror is set to %d", g_director->_noFatalLingoError);
+}
+
 void LB::b_getVolumes(int nargs) {
 	// Right now, only "Journeyman Project 2: Buried in Time" is known to check
 	// for its volume name.
diff --git a/engines/director/lingo/lingo-builtins.h b/engines/director/lingo/lingo-builtins.h
index ad6eee2f40d..b2ed4f3eef6 100644
--- a/engines/director/lingo/lingo-builtins.h
+++ b/engines/director/lingo/lingo-builtins.h
@@ -196,6 +196,7 @@ void b_numberofwords(int nargs);
 
 void b_scummvmassert(int nargs);
 void b_scummvmassertequal(int nargs);
+void b_scummvmNoFatalError(int nargs);
 
 // XCMD/XFCN (HyperCard), normally exposed
 void b_getVolumes(int nargs);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 94b0adb074e..23b1d72a045 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -99,8 +99,8 @@ using namespace Director;
 static void yyerror(const char *s) {
 	LingoCompiler *compiler = g_lingo->_compiler;
 	compiler->_hadError = true;
-	warning("######################  LINGO: %s at line %d col %d in %s id: %d",
-		s, compiler->_linenumber, compiler->_colnumber, scriptType2str(compiler->_assemblyContext->_scriptType),
+	warning("%s  LINGO: %s at line %d col %d in %s id: %d",
+		(g_director->_noFatalLingoError ? "####" : "######################"), s, compiler->_linenumber, compiler->_colnumber, scriptType2str(compiler->_assemblyContext->_scriptType),
 		compiler->_assemblyContext->_id);
 	if (compiler->_lines[2] != compiler->_lines[1])
 		warning("# %3d: %s", compiler->_linenumber - 2, Common::String(compiler->_lines[2], compiler->_lines[1] - 1).c_str());
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 7696e648452..c818f154a70 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -81,8 +81,8 @@ using namespace Director;
 static void yyerror(const char *s) {
 	LingoCompiler *compiler = g_lingo->_compiler;
 	compiler->_hadError = true;
-	warning("######################  LINGO: %s at line %d col %d in %s id: %d",
-		s, compiler->_linenumber, compiler->_colnumber, scriptType2str(compiler->_assemblyContext->_scriptType),
+	warning("%s  LINGO: %s at line %d col %d in %s id: %d",
+		(g_director->_noFatalLingoError ? "####" : "######################"), s, compiler->_linenumber, compiler->_colnumber, scriptType2str(compiler->_assemblyContext->_scriptType),
 		compiler->_assemblyContext->_id);
 	if (compiler->_lines[2] != compiler->_lines[1])
 		warning("# %3d: %s", compiler->_linenumber - 2, Common::String(compiler->_lines[2], compiler->_lines[1] - 1).c_str());
diff --git a/engines/director/lingo/tests/value.lingo b/engines/director/lingo/tests/value.lingo
index c12b0548205..8a0650a54d9 100644
--- a/engines/director/lingo/tests/value.lingo
+++ b/engines/director/lingo/tests/value.lingo
@@ -13,9 +13,13 @@ scummvmAssertEqual(9, value("3*3"))
 
 -- the kicker; you are allowed to have garbage on the end!!!
 -- if it hits a token it doesn't understand, the parser should try again but stopping just before that token.
+scummvmNoFatalError(true)
+
 scummvmAssertEqual(9, value("3*3[34]"))
 scummvmAssertEqual([1, 2, 3], value("[1, 2, 3],4]"))
 
+scummvmNoFatalError(false)
+
 -- if there's no valid expression at all, return void
 set test = value("#")
 scummvmAssert(voidP(test))




More information about the Scummvm-git-logs mailing list