[Scummvm-git-logs] scummvm master -> 215f077a8cc9e43ba65296be337cc2dc1b71f652
sev-
sev at scummvm.org
Thu Jun 11 23:05:24 UTC 2020
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:
215f077a8c DIRECTOR: LINGO: Narrowed down 'the <builtin> of <expr>' to D3-
Commit: 215f077a8cc9e43ba65296be337cc2dc1b71f652
https://github.com/scummvm/scummvm/commit/215f077a8cc9e43ba65296be337cc2dc1b71f652
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-06-12T01:05:13+02:00
Commit Message:
DIRECTOR: LINGO: Narrowed down 'the <builtin> of <expr>' to D3-
Changed paths:
engines/director/lingo/lingo-lex.cpp
engines/director/lingo/lingo-lex.l
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index a7cad39f3a..d3e785e2d2 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -1440,19 +1440,6 @@ YY_RULE_SETUP
return THEENTITYWITHID;
else
return THEENTITY;
- } else if (g_lingo->_builtins.contains(field)) {
- if (g_lingo->_builtins[field].type == FBLTIN &&
- g_lingo->_builtins[field].nargs == 1 && g_lingo->_builtins[field].maxArgs == 1) {
- yylval.s = new Common::String(field);
- Common::String rest(ptr);
-
- for (int i = rest.size() - 1; i >= 0; i--)
- unput(rest[i]);
-
- unput(' '); unput('f'); unput('o');
-
- return THEFBLTIN;
- }
} else {
if (g_director->getVersion() >= 4) {
Common::String key = Common::String::format("%d%s", g_lingo->_objectEntityId, field.c_str());
@@ -1468,6 +1455,24 @@ YY_RULE_SETUP
yylval.objectfield.oe = g_lingo->_theEntityFields[key]->field;
return THEOBJECTFIELD;
+ } else if (g_lingo->_builtins.contains(field)) { // Let's hope they don't do it in D4+
+ if (g_lingo->_builtins[field].type == FBLTIN &&
+ g_lingo->_builtins[field].nargs == 1 && g_lingo->_builtins[field].maxArgs == 1) {
+ yylval.s = new Common::String(field);
+ Common::String rest(ptr);
+
+ // It is the dreaded 'the <builtin> of <expr>'
+ // with 'expr' starting with ID, which leads to clash
+ //
+ // put 'of ID' back.
+
+ for (int i = rest.size() - 1; i >= 0; i--)
+ unput(rest[i]);
+
+ unput(' '); unput('f'); unput('o');
+
+ return THEFBLTIN;
+ }
}
}
@@ -1476,7 +1481,7 @@ YY_RULE_SETUP
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 326 "engines/director/lingo/lingo-lex.l"
+#line 331 "engines/director/lingo/lingo-lex.l"
{
count();
@@ -1514,7 +1519,7 @@ YY_RULE_SETUP
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 360 "engines/director/lingo/lingo-lex.l"
+#line 365 "engines/director/lingo/lingo-lex.l"
{
count();
@@ -1545,72 +1550,72 @@ YY_RULE_SETUP
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 387 "engines/director/lingo/lingo-lex.l"
+#line 392 "engines/director/lingo/lingo-lex.l"
{ count(); return tTHEN; }
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 388 "engines/director/lingo/lingo-lex.l"
+#line 393 "engines/director/lingo/lingo-lex.l"
{ count(); return varCheck(tTO, "to"); }
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 389 "engines/director/lingo/lingo-lex.l"
+#line 394 "engines/director/lingo/lingo-lex.l"
{ count(); return varCheck(tSPRITE, "sprite"); }
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 390 "engines/director/lingo/lingo-lex.l"
+#line 395 "engines/director/lingo/lingo-lex.l"
{ count(); return varCheck(tWITH, "with"); }
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 391 "engines/director/lingo/lingo-lex.l"
+#line 396 "engines/director/lingo/lingo-lex.l"
{ count(); return varCheck(tWITHIN, "within"); }
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 392 "engines/director/lingo/lingo-lex.l"
+#line 397 "engines/director/lingo/lingo-lex.l"
{ count(); return varCheck(tWHEN, "when"); }
YY_BREAK
case 56:
YY_RULE_SETUP
-#line 393 "engines/director/lingo/lingo-lex.l"
+#line 398 "engines/director/lingo/lingo-lex.l"
{ count(); return varCheck(tWHILE, "while"); }
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 394 "engines/director/lingo/lingo-lex.l"
+#line 399 "engines/director/lingo/lingo-lex.l"
{ count(); return varCheck(tWORD, "word"); }
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 396 "engines/director/lingo/lingo-lex.l"
+#line 401 "engines/director/lingo/lingo-lex.l"
{ count(); return tNEQ; }
YY_BREAK
case 59:
YY_RULE_SETUP
-#line 397 "engines/director/lingo/lingo-lex.l"
+#line 402 "engines/director/lingo/lingo-lex.l"
{ count(); return tGE; }
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 398 "engines/director/lingo/lingo-lex.l"
+#line 403 "engines/director/lingo/lingo-lex.l"
{ count(); return tLE; }
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 399 "engines/director/lingo/lingo-lex.l"
+#line 404 "engines/director/lingo/lingo-lex.l"
{ count(); return tCONCAT; }
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 400 "engines/director/lingo/lingo-lex.l"
+#line 405 "engines/director/lingo/lingo-lex.l"
{ count(); return tEQ; }
YY_BREAK
case 63:
YY_RULE_SETUP
-#line 402 "engines/director/lingo/lingo-lex.l"
+#line 407 "engines/director/lingo/lingo-lex.l"
{
count();
yylval.s = new Common::String(yytext);
@@ -1650,41 +1655,41 @@ YY_RULE_SETUP
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 438 "engines/director/lingo/lingo-lex.l"
+#line 443 "engines/director/lingo/lingo-lex.l"
{ count(); yylval.f = atof(yytext); return FLOAT; }
YY_BREAK
case 65:
YY_RULE_SETUP
-#line 439 "engines/director/lingo/lingo-lex.l"
+#line 444 "engines/director/lingo/lingo-lex.l"
{ count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 440 "engines/director/lingo/lingo-lex.l"
+#line 445 "engines/director/lingo/lingo-lex.l"
{ count(); return *yytext; }
YY_BREAK
case 67:
/* rule 67 can match eol */
YY_RULE_SETUP
-#line 441 "engines/director/lingo/lingo-lex.l"
+#line 446 "engines/director/lingo/lingo-lex.l"
{ count(); return '\n'; }
YY_BREAK
case 68:
YY_RULE_SETUP
-#line 442 "engines/director/lingo/lingo-lex.l"
+#line 447 "engines/director/lingo/lingo-lex.l"
{ count(); yylval.s = cleanupString(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
YY_BREAK
case 69:
YY_RULE_SETUP
-#line 443 "engines/director/lingo/lingo-lex.l"
+#line 448 "engines/director/lingo/lingo-lex.l"
{ count(); }
YY_BREAK
case 70:
YY_RULE_SETUP
-#line 445 "engines/director/lingo/lingo-lex.l"
+#line 450 "engines/director/lingo/lingo-lex.l"
ECHO;
YY_BREAK
-#line 1687 "engines/director/lingo/lingo-lex.cpp"
+#line 1692 "engines/director/lingo/lingo-lex.cpp"
case YY_STATE_EOF(INITIAL):
yyterminate();
@@ -2693,7 +2698,7 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
-#line 445 "engines/director/lingo/lingo-lex.l"
+#line 450 "engines/director/lingo/lingo-lex.l"
extern int yydebug;
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index 3b273aa7e2..fc318ed70f 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -290,19 +290,6 @@ the{spc}+[[:alpha:]]+{spc}+of{spc}+{identifier} {
return THEENTITYWITHID;
else
return THEENTITY;
- } else if (g_lingo->_builtins.contains(field)) {
- if (g_lingo->_builtins[field].type == FBLTIN &&
- g_lingo->_builtins[field].nargs == 1 && g_lingo->_builtins[field].maxArgs == 1) {
- yylval.s = new Common::String(field);
- Common::String rest(ptr);
-
- for (int i = rest.size() - 1; i >= 0; i--)
- unput(rest[i]);
-
- unput(' '); unput('f'); unput('o');
-
- return THEFBLTIN;
- }
} else {
if (g_director->getVersion() >= 4) {
Common::String key = Common::String::format("%d%s", g_lingo->_objectEntityId, field.c_str());
@@ -318,6 +305,24 @@ the{spc}+[[:alpha:]]+{spc}+of{spc}+{identifier} {
yylval.objectfield.oe = g_lingo->_theEntityFields[key]->field;
return THEOBJECTFIELD;
+ } else if (g_lingo->_builtins.contains(field)) { // Let's hope they don't do it in D4+
+ if (g_lingo->_builtins[field].type == FBLTIN &&
+ g_lingo->_builtins[field].nargs == 1 && g_lingo->_builtins[field].maxArgs == 1) {
+ yylval.s = new Common::String(field);
+ Common::String rest(ptr);
+
+ // It is the dreaded 'the <builtin> of <expr>'
+ // with 'expr' starting with ID, which leads to clash
+ //
+ // put 'of ID' back.
+
+ for (int i = rest.size() - 1; i >= 0; i--)
+ unput(rest[i]);
+
+ unput(' '); unput('f'); unput('o');
+
+ return THEFBLTIN;
+ }
}
}
More information about the Scummvm-git-logs
mailing list