[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