[Scummvm-git-logs] scummvm master -> c01b88c2e8686ce1deba5b73cce5ef111b8777d5
sev-
sev at scummvm.org
Sat Jun 6 16:34:27 UTC 2020
This automated email contains information about 26 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
182402fdfa DIRECTOR: LINGO: Create and populate factory objs
041326bdd1 DIRECTOR: LINGO: Implement factory method calls
95a70de5c3 DIRECTOR: LINGO: Clean up LC::call
eef6fbe831 DIRECTOR: LINGO: Implement m_new
fddf6dd193 DIRECTOR: LINGO: Implement instance vars
ccba7503e0 DIRECTOR: LINGO: Implement me
e39fa92178 DIRECTOR: LINGO: Implement object array
c855e1ad6e DIRECTOR: LINGO: Add factory debugging
8274f76dee DIRECTOR: LINGO: Clean up factory code
5443cb2b32 DIRECTOR: LINGO: Fix user-defined mNew
964b3eddc2 DIRECTOR: LINGO: Implement m_dispose
f0e598e402 DIRECTOR: LINGO: Fix b_objectp
516d2ef17f DIRECTOR: LINGO: Implement kThePerFrameHook
4e4f26f963 DIRECTOR: LINGO: Fix var assign/fetch with obj val
47f19d8515 DIRECTOR: LINGO: Fix extra arg warning on method
5de9a9816e DIRECTOR: LINGO: Lazy evaluate first ID in arglist
99755d8cf5 DIRECTOR: LINGO: Improve object printing
68e6b915a3 DIRECTOR: LINGO: Fix vars in global scope
dbeabf0be3 DIRECTOR: LINGO: Fix lazy datum printing
ca9e952d41 DIRECTOR: LINGO: Implement Lingo::push/popContext
7549b819bb DIRECTOR: LINGO: Implement primary event handlers
759c53c868 DIRECTOR: LINGO: Call perFrameHook with arguments
be4c440128 DIRECTOR: LINGO: Remove legacy me code
2d9dea678a DIRECTOR: LINGO: Remove unnecessary instructions
2daf4721c9 DIRECTOR: LINGO: Implement b_factory
c01b88c2e8 DIRECTOR: LINGO: Clean up lingo-object.cpp
Commit: 182402fdfa35b01bb625329c98205b5715fce417
https://github.com/scummvm/scummvm/commit/182402fdfa35b01bb625329c98205b5715fce417
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Create and populate factory objs
Changed paths:
engines/director/lingo/lingo-codegen.cpp
engines/director/lingo/lingo-gr.cpp
engines/director/lingo/lingo-gr.h
engines/director/lingo/lingo-gr.y
engines/director/lingo/lingo.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 7ea255c577..da5dd4bb7f 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -224,7 +224,7 @@ void Lingo::cleanLocalVars() {
g_lingo->_localvars = nullptr;
}
-Symbol Lingo::define(Common::String &name, int nargs, ScriptData *code, Common::Array<Common::String> *argNames, Common::Array<Common::String> *varNames) {
+Symbol Lingo::define(Common::String &name, int nargs, ScriptData *code, Common::Array<Common::String> *argNames, Common::Array<Common::String> *varNames, Object *factory) {
Symbol sym;
sym.name = new Common::String(name);
sym.type = HANDLER;
@@ -246,25 +246,29 @@ Symbol Lingo::define(Common::String &name, int nargs, ScriptData *code, Common::
debugC(1, kDebugLingoCompile, "<end define code>");
}
- Symbol existing = getHandler(name);
- if (existing.type != VOID)
- warning("Redefining handler '%s'", name.c_str());
-
- if (!_eventHandlerTypeIds.contains(name)) {
- _archives[_archiveIndex].functionHandlers[name] = sym;
+ if (factory != nullptr) {
+ if (factory->methods.contains(name)) {
+ warning("Redefining method '%s' on factory '%s'", name.c_str(), factory->name->c_str());
+ }
+ factory->methods[name] = sym;
} else {
- _archives[_archiveIndex].eventHandlers[ENTITY_INDEX(_eventHandlerTypeIds[name.c_str()], _currentEntityId)] = sym;
+ Symbol existing = getHandler(name);
+ if (existing.type != VOID)
+ warning("Redefining handler '%s'", name.c_str());
+
+ if (!_eventHandlerTypeIds.contains(name)) {
+ _archives[_archiveIndex].functionHandlers[name] = sym;
+ } else {
+ _archives[_archiveIndex].eventHandlers[ENTITY_INDEX(_eventHandlerTypeIds[name.c_str()], _currentEntityId)] = sym;
+ }
}
return sym;
}
-Symbol Lingo::codeDefine(Common::String &name, int start, int nargs, Common::String *prefix, int end, bool removeCode) {
- if (prefix)
- name = *prefix + "-" + name;
-
+Symbol Lingo::codeDefine(Common::String &name, int start, int nargs, Object *factory, int end, bool removeCode) {
debugC(1, kDebugLingoCompile, "codeDefine(\"%s\"(len: %d), %d, %d, \"%s\", %d) entity: %d",
- name.c_str(), _currentScript->size() - 1, start, nargs, (prefix ? prefix->c_str() : ""),
+ name.c_str(), _currentScript->size() - 1, start, nargs, (factory ? factory->name->c_str() : ""),
end, _currentEntityId);
if (end == -1)
@@ -280,7 +284,7 @@ Symbol Lingo::codeDefine(Common::String &name, int start, int nargs, Common::Str
if (it->_value == kVarLocal)
varNames->push_back(Common::String(it->_key));
}
- Symbol sym = define(name, nargs, code, argNames, varNames);
+ Symbol sym = define(name, nargs, code, argNames, varNames, factory);
// Now remove all defined code from the _currentScript
if (removeCode)
@@ -375,30 +379,30 @@ int Lingo::codeFunc(Common::String *s, int numpar) {
return ret;
}
-int Lingo::codeMe(Common::String *method, int numpar) {
- // Check if need to encode reference to the factory
- if (method == nullptr) {
- int ret = g_lingo->code1(LC::c_factory);
- g_lingo->codeString(g_lingo->_currentFactory.c_str());
+// int Lingo::codeMe(Common::String *method, int numpar) {
+// // Check if need to encode reference to the factory
+// if (method == nullptr) {
+// int ret = g_lingo->code1(LC::c_factory);
+// g_lingo->codeString(g_lingo->_currentFactory->name->c_str());
- return ret;
- }
+// return ret;
+// }
- int ret = g_lingo->code1(LC::c_call);
+// int ret = g_lingo->code1(LC::c_call);
- Common::String m(g_lingo->_currentFactory);
+// Common::String m(g_lingo->_currentFactory->name);
- m += '-';
- m += *method;
+// m += '-';
+// m += *method;
- g_lingo->codeString(m.c_str());
+// g_lingo->codeString(m.c_str());
- inst num = 0;
- WRITE_UINT32(&num, numpar);
- g_lingo->code1(num);
+// inst num = 0;
+// WRITE_UINT32(&num, numpar);
+// g_lingo->code1(num);
- return ret;
-}
+// return ret;
+// }
void Lingo::codeLabel(int label) {
_labelstack.push_back(label);
@@ -627,18 +631,23 @@ Datum Lingo::varFetch(Datum &var, bool global) {
}
void Lingo::codeFactory(Common::String &name) {
- _currentFactory = name;
-
- Symbol sym;
-
- sym.name = new Common::String(name);
- sym.type = BLTIN;
- sym.nargs = -1;
- sym.maxArgs = 0;
- sym.parens = true;
- sym.u.bltin = LB::b_factory;
-
- _archives[_archiveIndex].eventHandlers[ENTITY_INDEX(_eventHandlerTypeIds[name.c_str()], _currentEntityId)] = sym;
+ Object *obj = new Object;
+ obj->name = new Common::String(name);
+ obj->type = kFactoryObj;
+ obj->inheritanceLevel = 1;
+ obj->scriptContext = _currentScriptContext;
+ obj->objArray = new DatumArray;
+
+ _currentFactory = obj;
+ if (!_globalvars.contains(name)) {
+ _globalvars[name] = Symbol();
+ _globalvars[name].name = new Common::String(name);
+ _globalvars[name].global = true;
+ _globalvars[name].type = OBJECT;
+ _globalvars[name].u.obj = obj;
+ } else {
+ warning("Factory '%s' already defined", name.c_str());
+ }
}
}
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 0a13186a39..642e854eee 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.6.3. */
+/* A Bison parser, made by GNU Bison 3.6.2. */
/* Bison implementation for Yacc-like parsers in C
@@ -49,7 +49,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "3.6.3"
+#define YYBISON_VERSION "3.6.2"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -116,6 +116,17 @@ static void endDef() {
inNone();
g_lingo->_ignoreMe = false;
+ for (Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>::iterator i = g_lingo->_methodVars->begin(); i != g_lingo->_methodVars->end(); ++i) {
+ if (i->_value == kVarInstance) {
+ if (g_lingo->_currentFactory != nullptr) {
+ g_lingo->_currentFactory->properties[i->_key] = Symbol();
+ g_lingo->_currentFactory->properties[i->_key].name = new Common::String(i->_key);
+ } else {
+ warning("Instance var '%s' defined outside factory", i->_key.c_str());
+ }
+ }
+ }
+
delete g_lingo->_methodVars;
g_lingo->_methodVars = g_lingo->_methodVarsStash;
g_lingo->_methodVarsStash = nullptr;
@@ -127,7 +138,7 @@ static void mVar(Common::String *s, VarType type) {
}
-#line 131 "engines/director/lingo/lingo-gr.cpp"
+#line 142 "engines/director/lingo/lingo-gr.cpp"
# ifndef YY_CAST
# ifdef __cplusplus
@@ -264,7 +275,7 @@ extern int yydebug;
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
-#line 114 "engines/director/lingo/lingo-gr.y"
+#line 125 "engines/director/lingo/lingo-gr.y"
Common::String *s;
int i;
@@ -284,7 +295,7 @@ union YYSTYPE
Common::String *field;
} objectref;
-#line 288 "engines/director/lingo/lingo-gr.cpp"
+#line 299 "engines/director/lingo/lingo-gr.cpp"
};
typedef union YYSTYPE YYSTYPE;
@@ -834,27 +845,27 @@ static const yytype_int8 yytranslate[] =
};
#if YYDEBUG
- /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
+ /* YYRLINEYYN -- Source line where rule number YYN was defined. */
static const yytype_int16 yyrline[] =
{
- 0, 173, 173, 174, 176, 177, 178, 180, 187, 191,
- 202, 203, 204, 211, 218, 225, 232, 238, 245, 256,
- 263, 264, 265, 267, 268, 273, 285, 289, 292, 284,
- 316, 320, 323, 315, 349, 356, 362, 348, 390, 392,
- 395, 396, 398, 400, 407, 415, 416, 418, 424, 428,
- 432, 436, 439, 441, 442, 443, 445, 448, 451, 455,
- 459, 463, 471, 477, 478, 479, 490, 491, 492, 495,
- 498, 501, 504, 509, 515, 516, 517, 518, 519, 520,
- 521, 522, 523, 524, 525, 526, 527, 528, 529, 530,
- 531, 532, 533, 534, 535, 536, 537, 539, 540, 541,
- 542, 543, 544, 545, 546, 548, 551, 553, 554, 555,
- 556, 557, 558, 558, 559, 559, 560, 560, 561, 564,
- 567, 568, 570, 575, 581, 586, 592, 597, 610, 611,
- 612, 613, 617, 621, 626, 627, 629, 633, 637, 641,
- 641, 671, 671, 671, 677, 678, 678, 684, 692, 698,
- 698, 701, 702, 703, 705, 706, 707, 709, 711, 719,
- 720, 721, 723, 724, 726, 728, 729, 730, 731, 733,
- 734, 736, 737, 739, 743
+ 0, 184, 184, 185, 187, 188, 189, 191, 198, 202,
+ 213, 214, 215, 222, 229, 236, 243, 249, 256, 267,
+ 274, 275, 276, 278, 279, 284, 296, 300, 303, 295,
+ 327, 331, 334, 326, 360, 367, 373, 359, 401, 403,
+ 406, 407, 409, 411, 418, 426, 427, 429, 435, 439,
+ 443, 447, 450, 452, 453, 454, 456, 459, 462, 466,
+ 470, 474, 482, 488, 489, 490, 501, 502, 503, 506,
+ 509, 512, 515, 520, 526, 527, 528, 529, 530, 531,
+ 532, 533, 534, 535, 536, 537, 538, 539, 540, 541,
+ 542, 543, 544, 545, 546, 547, 548, 550, 551, 552,
+ 553, 554, 555, 556, 557, 559, 562, 564, 565, 566,
+ 567, 568, 569, 569, 570, 570, 571, 571, 572, 575,
+ 578, 579, 581, 586, 592, 597, 603, 606, 617, 618,
+ 619, 620, 624, 628, 633, 634, 636, 640, 644, 648,
+ 648, 678, 678, 678, 684, 685, 685, 691, 699, 705,
+ 705, 708, 709, 710, 712, 713, 714, 716, 718, 726,
+ 727, 728, 730, 731, 733, 735, 736, 737, 738, 740,
+ 741, 743, 744, 746, 750
};
#endif
@@ -929,7 +940,7 @@ static const yytype_int16 yytoknum[] =
#define yytable_value_is_error(Yyn) \
0
- /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ /* YYPACTSTATE-NUM -- Index in YYTABLE of the portion describing
STATE-NUM. */
static const yytype_int16 yypact[] =
{
@@ -972,7 +983,7 @@ static const yytype_int16 yypact[] =
-293, 1610, -293
};
- /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+ /* YYDEFACTSTATE-NUM -- Default reduction number in state STATE-NUM.
Performed when YYTABLE does not specify something else to do. Zero
means the default is an error. */
static const yytype_uint8 yydefact[] =
@@ -1016,7 +1027,7 @@ static const yytype_uint8 yydefact[] =
29, 0, 33
};
- /* YYPGOTO[NTERM-NUM]. */
+ /* YYPGOTONTERM-NUM. */
static const yytype_int16 yypgoto[] =
{
-293, 85, -293, -293, -47, 15, -293, -293, -293, -293,
@@ -1027,7 +1038,7 @@ static const yytype_int16 yypgoto[] =
13, -293, -293, -293, -293, -293, 16
};
- /* YYDEFGOTO[NTERM-NUM]. */
+ /* YYDEFGOTONTERM-NUM. */
static const yytype_int16 yydefgoto[] =
{
-1, 45, 46, 47, 48, 308, 298, 324, 349, 299,
@@ -1038,7 +1049,7 @@ static const yytype_int16 yydefgoto[] =
153, 77, 62, 121, 122, 123, 124
};
- /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
+ /* YYTABLEYYPACT[STATE-NUM] -- What to do in state STATE-NUM. If
positive, shift that token. If negative, reduce the rule whose
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
@@ -1559,7 +1570,7 @@ static const yytype_int16 yycheck[] =
88, 89, 90, 91, 92, 93, 94
};
- /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ /* YYSTOSSTATE-NUM -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint8 yystos[] =
{
@@ -1602,7 +1613,7 @@ static const yytype_uint8 yystos[] =
86, 127, 86
};
- /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+ /* YYR1YYN -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint8 yyr1[] =
{
0, 103, 104, 104, 105, 105, 105, 106, 106, 106,
@@ -1625,7 +1636,7 @@ static const yytype_uint8 yyr1[] =
157, 158, 158, 159, 159
};
- /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
+ /* YYR2YYN -- Number of symbols on the right hand side of rule YYN. */
static const yytype_int8 yyr2[] =
{
0, 2, 1, 3, 0, 1, 1, 4, 4, 6,
@@ -1917,81 +1928,81 @@ yydestruct (const char *yymsg,
switch (yykind)
{
case 22: /* BLTIN */
-#line 168 "engines/director/lingo/lingo-gr.y"
+#line 179 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1923 "engines/director/lingo/lingo-gr.cpp"
+#line 1934 "engines/director/lingo/lingo-gr.cpp"
break;
case 23: /* FBLTIN */
-#line 168 "engines/director/lingo/lingo-gr.y"
+#line 179 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1929 "engines/director/lingo/lingo-gr.cpp"
+#line 1940 "engines/director/lingo/lingo-gr.cpp"
break;
case 24: /* RBLTIN */
-#line 168 "engines/director/lingo/lingo-gr.y"
+#line 179 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1935 "engines/director/lingo/lingo-gr.cpp"
+#line 1946 "engines/director/lingo/lingo-gr.cpp"
break;
case 25: /* THEFBLTIN */
-#line 168 "engines/director/lingo/lingo-gr.y"
+#line 179 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1941 "engines/director/lingo/lingo-gr.cpp"
+#line 1952 "engines/director/lingo/lingo-gr.cpp"
break;
case 26: /* ID */
-#line 168 "engines/director/lingo/lingo-gr.y"
+#line 179 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1947 "engines/director/lingo/lingo-gr.cpp"
+#line 1958 "engines/director/lingo/lingo-gr.cpp"
break;
case 27: /* STRING */
-#line 168 "engines/director/lingo/lingo-gr.y"
+#line 179 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1953 "engines/director/lingo/lingo-gr.cpp"
+#line 1964 "engines/director/lingo/lingo-gr.cpp"
break;
case 28: /* HANDLER */
-#line 168 "engines/director/lingo/lingo-gr.y"
+#line 179 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1959 "engines/director/lingo/lingo-gr.cpp"
+#line 1970 "engines/director/lingo/lingo-gr.cpp"
break;
case 29: /* SYMBOL */
-#line 168 "engines/director/lingo/lingo-gr.y"
+#line 179 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1965 "engines/director/lingo/lingo-gr.cpp"
+#line 1976 "engines/director/lingo/lingo-gr.cpp"
break;
case 30: /* ENDCLAUSE */
-#line 168 "engines/director/lingo/lingo-gr.y"
+#line 179 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1971 "engines/director/lingo/lingo-gr.cpp"
+#line 1982 "engines/director/lingo/lingo-gr.cpp"
break;
case 31: /* tPLAYACCEL */
-#line 168 "engines/director/lingo/lingo-gr.y"
+#line 179 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1977 "engines/director/lingo/lingo-gr.cpp"
+#line 1988 "engines/director/lingo/lingo-gr.cpp"
break;
case 32: /* tMETHOD */
-#line 168 "engines/director/lingo/lingo-gr.y"
+#line 179 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1983 "engines/director/lingo/lingo-gr.cpp"
+#line 1994 "engines/director/lingo/lingo-gr.cpp"
break;
case 33: /* THEOBJECTFIELD */
-#line 169 "engines/director/lingo/lingo-gr.y"
+#line 180 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).objectfield).os; }
-#line 1989 "engines/director/lingo/lingo-gr.cpp"
+#line 2000 "engines/director/lingo/lingo-gr.cpp"
break;
case 147: /* on */
-#line 168 "engines/director/lingo/lingo-gr.y"
+#line 179 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1995 "engines/director/lingo/lingo-gr.cpp"
+#line 2006 "engines/director/lingo/lingo-gr.cpp"
break;
default:
@@ -2270,7 +2281,7 @@ yyreduce:
switch (yyn)
{
case 7:
-#line 180 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
@@ -2278,19 +2289,19 @@ yyreduce:
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[-2].code);
delete (yyvsp[0].s); }
-#line 2282 "engines/director/lingo/lingo-gr.cpp"
+#line 2293 "engines/director/lingo/lingo-gr.cpp"
break;
case 8:
-#line 187 "engines/director/lingo/lingo-gr.y"
+#line 198 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[-2].code); }
-#line 2290 "engines/director/lingo/lingo-gr.cpp"
+#line 2301 "engines/director/lingo/lingo-gr.cpp"
break;
case 9:
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 202 "engines/director/lingo/lingo-gr.y"
{
if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
warning("LEXER: keyword 'menu' expected");
@@ -2302,23 +2313,23 @@ yyreduce:
g_lingo->codeInt((yyvsp[-4].e)[1]);
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code); }
-#line 2306 "engines/director/lingo/lingo-gr.cpp"
+#line 2317 "engines/director/lingo/lingo-gr.cpp"
break;
case 10:
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 213 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_after); }
-#line 2312 "engines/director/lingo/lingo-gr.cpp"
+#line 2323 "engines/director/lingo/lingo-gr.cpp"
break;
case 11:
-#line 203 "engines/director/lingo/lingo-gr.y"
+#line 214 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_before); }
-#line 2318 "engines/director/lingo/lingo-gr.cpp"
+#line 2329 "engines/director/lingo/lingo-gr.cpp"
break;
case 12:
-#line 204 "engines/director/lingo/lingo-gr.y"
+#line 215 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
@@ -2326,11 +2337,11 @@ yyreduce:
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code);
delete (yyvsp[-2].s); }
-#line 2330 "engines/director/lingo/lingo-gr.cpp"
+#line 2341 "engines/director/lingo/lingo-gr.cpp"
break;
case 13:
-#line 211 "engines/director/lingo/lingo-gr.y"
+#line 222 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2338,11 +2349,11 @@ yyreduce:
g_lingo->codeInt((yyvsp[-2].e)[0]);
g_lingo->codeInt((yyvsp[-2].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2342 "engines/director/lingo/lingo-gr.cpp"
+#line 2353 "engines/director/lingo/lingo-gr.cpp"
break;
case 14:
-#line 218 "engines/director/lingo/lingo-gr.y"
+#line 229 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
@@ -2350,11 +2361,11 @@ yyreduce:
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code);
delete (yyvsp[-2].s); }
-#line 2354 "engines/director/lingo/lingo-gr.cpp"
+#line 2365 "engines/director/lingo/lingo-gr.cpp"
break;
case 15:
-#line 225 "engines/director/lingo/lingo-gr.y"
+#line 236 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2362,33 +2373,33 @@ yyreduce:
g_lingo->codeInt((yyvsp[-2].e)[0]);
g_lingo->codeInt((yyvsp[-2].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2366 "engines/director/lingo/lingo-gr.cpp"
+#line 2377 "engines/director/lingo/lingo-gr.cpp"
break;
case 16:
-#line 232 "engines/director/lingo/lingo-gr.y"
+#line 243 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_swap);
g_lingo->code1(LC::c_theentityassign);
g_lingo->codeInt((yyvsp[-3].e)[0]);
g_lingo->codeInt((yyvsp[-3].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2377 "engines/director/lingo/lingo-gr.cpp"
+#line 2388 "engines/director/lingo/lingo-gr.cpp"
break;
case 17:
-#line 238 "engines/director/lingo/lingo-gr.y"
+#line 249 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_swap);
g_lingo->code1(LC::c_theentityassign);
g_lingo->codeInt((yyvsp[-3].e)[0]);
g_lingo->codeInt((yyvsp[-3].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2388 "engines/director/lingo/lingo-gr.cpp"
+#line 2399 "engines/director/lingo/lingo-gr.cpp"
break;
case 18:
-#line 245 "engines/director/lingo/lingo-gr.y"
+#line 256 "engines/director/lingo/lingo-gr.y"
{
if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
warning("LEXER: keyword 'menu' expected");
@@ -2400,54 +2411,54 @@ yyreduce:
g_lingo->codeInt((yyvsp[-6].e)[0]);
g_lingo->codeInt((yyvsp[-6].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2404 "engines/director/lingo/lingo-gr.cpp"
+#line 2415 "engines/director/lingo/lingo-gr.cpp"
break;
case 19:
-#line 256 "engines/director/lingo/lingo-gr.y"
+#line 267 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectfieldassign);
g_lingo->codeString((yyvsp[-2].objectfield).os->c_str());
g_lingo->codeInt((yyvsp[-2].objectfield).oe);
delete (yyvsp[-2].objectfield).os;
(yyval.code) = (yyvsp[0].code); }
-#line 2415 "engines/director/lingo/lingo-gr.cpp"
+#line 2426 "engines/director/lingo/lingo-gr.cpp"
break;
case 25:
-#line 273 "engines/director/lingo/lingo-gr.y"
+#line 284 "engines/director/lingo/lingo-gr.y"
{
inst start = 0, end = 0;
WRITE_UINT32(&start, (yyvsp[-5].code) - (yyvsp[-1].code) + 1);
WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-3].code) + 2);
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = end; /* end, if cond fails */
(*g_lingo->_currentScript)[(yyvsp[-1].code)] = start; }
-#line 2426 "engines/director/lingo/lingo-gr.cpp"
+#line 2437 "engines/director/lingo/lingo-gr.cpp"
break;
case 26:
-#line 285 "engines/director/lingo/lingo-gr.y"
+#line 296 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
mVar((yyvsp[-2].s), kVarLocal); }
-#line 2434 "engines/director/lingo/lingo-gr.cpp"
+#line 2445 "engines/director/lingo/lingo-gr.cpp"
break;
case 27:
-#line 289 "engines/director/lingo/lingo-gr.y"
+#line 300 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2441 "engines/director/lingo/lingo-gr.cpp"
+#line 2452 "engines/director/lingo/lingo-gr.cpp"
break;
case 28:
-#line 292 "engines/director/lingo/lingo-gr.y"
+#line 303 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_le); }
-#line 2447 "engines/director/lingo/lingo-gr.cpp"
+#line 2458 "engines/director/lingo/lingo-gr.cpp"
break;
case 29:
-#line 292 "engines/director/lingo/lingo-gr.y"
+#line 303 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_eval);
@@ -2466,32 +2477,32 @@ yyreduce:
WRITE_UINT32(&end, pos - (yyvsp[-2].code) + 2);
(*g_lingo->_currentScript)[pos] = loop; /* final count value */
(*g_lingo->_currentScript)[(yyvsp[-2].code)] = end; }
-#line 2470 "engines/director/lingo/lingo-gr.cpp"
+#line 2481 "engines/director/lingo/lingo-gr.cpp"
break;
case 30:
-#line 316 "engines/director/lingo/lingo-gr.y"
+#line 327 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
mVar((yyvsp[-2].s), kVarLocal); }
-#line 2478 "engines/director/lingo/lingo-gr.cpp"
+#line 2489 "engines/director/lingo/lingo-gr.cpp"
break;
case 31:
-#line 320 "engines/director/lingo/lingo-gr.y"
+#line 331 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2485 "engines/director/lingo/lingo-gr.cpp"
+#line 2496 "engines/director/lingo/lingo-gr.cpp"
break;
case 32:
-#line 323 "engines/director/lingo/lingo-gr.y"
+#line 334 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ge); }
-#line 2491 "engines/director/lingo/lingo-gr.cpp"
+#line 2502 "engines/director/lingo/lingo-gr.cpp"
break;
case 33:
-#line 324 "engines/director/lingo/lingo-gr.y"
+#line 335 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_eval);
@@ -2510,32 +2521,32 @@ yyreduce:
WRITE_UINT32(&end, pos - (yyvsp[-2].code) + 2);
(*g_lingo->_currentScript)[pos] = loop; /* final count value */
(*g_lingo->_currentScript)[(yyvsp[-2].code)] = end; }
-#line 2514 "engines/director/lingo/lingo-gr.cpp"
+#line 2525 "engines/director/lingo/lingo-gr.cpp"
break;
case 34:
-#line 349 "engines/director/lingo/lingo-gr.y"
+#line 360 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_stackpeek);
g_lingo->codeInt(0);
Common::String count("count");
g_lingo->codeFunc(&count, 1);
g_lingo->code1(LC::c_intpush); // start counter
g_lingo->codeInt(1); }
-#line 2525 "engines/director/lingo/lingo-gr.cpp"
+#line 2536 "engines/director/lingo/lingo-gr.cpp"
break;
case 35:
-#line 356 "engines/director/lingo/lingo-gr.y"
+#line 367 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_stackpeek); // get counter
g_lingo->codeInt(0);
g_lingo->code1(LC::c_stackpeek); // get array size
g_lingo->codeInt(2);
g_lingo->code1(LC::c_le); }
-#line 2535 "engines/director/lingo/lingo-gr.cpp"
+#line 2546 "engines/director/lingo/lingo-gr.cpp"
break;
case 36:
-#line 362 "engines/director/lingo/lingo-gr.y"
+#line 373 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_stackpeek); // get list
g_lingo->codeInt(2);
g_lingo->code1(LC::c_stackpeek); // get counter
@@ -2546,11 +2557,11 @@ yyreduce:
g_lingo->codeString((yyvsp[-6].s)->c_str());
mVar((yyvsp[-6].s), kVarLocal);
g_lingo->code1(LC::c_assign); }
-#line 2550 "engines/director/lingo/lingo-gr.cpp"
+#line 2561 "engines/director/lingo/lingo-gr.cpp"
break;
case 37:
-#line 372 "engines/director/lingo/lingo-gr.y"
+#line 383 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
@@ -2568,44 +2579,44 @@ yyreduce:
(*g_lingo->_currentScript)[jump + 1] = loop; /* final count value */
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = end; }
-#line 2572 "engines/director/lingo/lingo-gr.cpp"
+#line 2583 "engines/director/lingo/lingo-gr.cpp"
break;
case 38:
-#line 390 "engines/director/lingo/lingo-gr.y"
+#line 401 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_nextRepeat); }
-#line 2579 "engines/director/lingo/lingo-gr.cpp"
+#line 2590 "engines/director/lingo/lingo-gr.cpp"
break;
case 39:
-#line 392 "engines/director/lingo/lingo-gr.y"
+#line 403 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_whencode);
g_lingo->codeString((yyvsp[-2].s)->c_str()); }
-#line 2587 "engines/director/lingo/lingo-gr.cpp"
+#line 2598 "engines/director/lingo/lingo-gr.cpp"
break;
case 40:
-#line 395 "engines/director/lingo/lingo-gr.y"
+#line 406 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_telldone); }
-#line 2593 "engines/director/lingo/lingo-gr.cpp"
+#line 2604 "engines/director/lingo/lingo-gr.cpp"
break;
case 41:
-#line 396 "engines/director/lingo/lingo-gr.y"
+#line 407 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_telldone); }
-#line 2599 "engines/director/lingo/lingo-gr.cpp"
+#line 2610 "engines/director/lingo/lingo-gr.cpp"
break;
case 42:
-#line 398 "engines/director/lingo/lingo-gr.y"
+#line 409 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_tell); }
-#line 2605 "engines/director/lingo/lingo-gr.cpp"
+#line 2616 "engines/director/lingo/lingo-gr.cpp"
break;
case 43:
-#line 400 "engines/director/lingo/lingo-gr.y"
+#line 411 "engines/director/lingo/lingo-gr.y"
{
inst else1 = 0, end3 = 0;
WRITE_UINT32(&else1, (yyvsp[-3].code) + 1 - (yyvsp[-6].code) + 1);
@@ -2613,11 +2624,11 @@ yyreduce:
(*g_lingo->_currentScript)[(yyvsp[-6].code)] = else1; /* elsepart */
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = end3; /* end, if cond fails */
g_lingo->processIf((yyvsp[-3].code), (yyvsp[-1].code)); }
-#line 2617 "engines/director/lingo/lingo-gr.cpp"
+#line 2628 "engines/director/lingo/lingo-gr.cpp"
break;
case 44:
-#line 407 "engines/director/lingo/lingo-gr.y"
+#line 418 "engines/director/lingo/lingo-gr.y"
{
inst else1 = 0, end = 0;
WRITE_UINT32(&else1, (yyvsp[-5].code) + 1 - (yyvsp[-8].code) + 1);
@@ -2625,107 +2636,107 @@ yyreduce:
(*g_lingo->_currentScript)[(yyvsp[-8].code)] = else1; /* elsepart */
(*g_lingo->_currentScript)[(yyvsp[-5].code)] = end; /* end, if cond fails */
g_lingo->processIf((yyvsp[-5].code), (yyvsp[-1].code)); }
-#line 2629 "engines/director/lingo/lingo-gr.cpp"
+#line 2640 "engines/director/lingo/lingo-gr.cpp"
break;
case 47:
-#line 418 "engines/director/lingo/lingo-gr.y"
+#line 429 "engines/director/lingo/lingo-gr.y"
{
inst else1 = 0;
WRITE_UINT32(&else1, (yyvsp[0].code) + 1 - (yyvsp[-3].code) + 1);
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = else1; /* end, if cond fails */
g_lingo->codeLabel((yyvsp[0].code)); }
-#line 2639 "engines/director/lingo/lingo-gr.cpp"
+#line 2650 "engines/director/lingo/lingo-gr.cpp"
break;
case 48:
-#line 424 "engines/director/lingo/lingo-gr.y"
+#line 435 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code2(LC::c_jumpifz, 0);
(yyval.code) = g_lingo->_currentScript->size() - 1; }
-#line 2647 "engines/director/lingo/lingo-gr.cpp"
+#line 2658 "engines/director/lingo/lingo-gr.cpp"
break;
case 49:
-#line 428 "engines/director/lingo/lingo-gr.y"
+#line 439 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code2(LC::c_jump, 0);
(yyval.code) = g_lingo->_currentScript->size() - 1; }
-#line 2655 "engines/director/lingo/lingo-gr.cpp"
+#line 2666 "engines/director/lingo/lingo-gr.cpp"
break;
case 50:
-#line 432 "engines/director/lingo/lingo-gr.y"
+#line 443 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_assign);
(yyval.code) = g_lingo->_currentScript->size() - 1; }
-#line 2663 "engines/director/lingo/lingo-gr.cpp"
+#line 2674 "engines/director/lingo/lingo-gr.cpp"
break;
case 51:
-#line 436 "engines/director/lingo/lingo-gr.y"
+#line 447 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeLabel(0); }
-#line 2670 "engines/director/lingo/lingo-gr.cpp"
+#line 2681 "engines/director/lingo/lingo-gr.cpp"
break;
case 52:
-#line 439 "engines/director/lingo/lingo-gr.y"
+#line 450 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2676 "engines/director/lingo/lingo-gr.cpp"
+#line 2687 "engines/director/lingo/lingo-gr.cpp"
break;
case 53:
-#line 441 "engines/director/lingo/lingo-gr.y"
+#line 452 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2682 "engines/director/lingo/lingo-gr.cpp"
+#line 2693 "engines/director/lingo/lingo-gr.cpp"
break;
case 56:
-#line 445 "engines/director/lingo/lingo-gr.y"
+#line 456 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_intpush);
g_lingo->codeInt((yyvsp[0].i)); }
-#line 2690 "engines/director/lingo/lingo-gr.cpp"
+#line 2701 "engines/director/lingo/lingo-gr.cpp"
break;
case 57:
-#line 448 "engines/director/lingo/lingo-gr.y"
+#line 459 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_floatpush);
g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2698 "engines/director/lingo/lingo-gr.cpp"
+#line 2709 "engines/director/lingo/lingo-gr.cpp"
break;
case 58:
-#line 451 "engines/director/lingo/lingo-gr.y"
+#line 462 "engines/director/lingo/lingo-gr.y"
{ // D3
(yyval.code) = g_lingo->code1(LC::c_symbolpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2707 "engines/director/lingo/lingo-gr.cpp"
+#line 2718 "engines/director/lingo/lingo-gr.cpp"
break;
case 59:
-#line 455 "engines/director/lingo/lingo-gr.y"
+#line 466 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_stringpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2716 "engines/director/lingo/lingo-gr.cpp"
+#line 2727 "engines/director/lingo/lingo-gr.cpp"
break;
case 60:
-#line 459 "engines/director/lingo/lingo-gr.y"
+#line 470 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2725 "engines/director/lingo/lingo-gr.cpp"
+#line 2736 "engines/director/lingo/lingo-gr.cpp"
break;
case 61:
-#line 463 "engines/director/lingo/lingo-gr.y"
+#line 474 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2734,28 +2745,28 @@ yyreduce:
WRITE_UINT32(&e, (yyvsp[0].e)[0]);
WRITE_UINT32(&f, (yyvsp[0].e)[1]);
g_lingo->code2(e, f); }
-#line 2738 "engines/director/lingo/lingo-gr.cpp"
+#line 2749 "engines/director/lingo/lingo-gr.cpp"
break;
case 62:
-#line 471 "engines/director/lingo/lingo-gr.y"
+#line 482 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_theentitypush);
inst e = 0, f = 0;
WRITE_UINT32(&e, (yyvsp[-1].e)[0]);
WRITE_UINT32(&f, (yyvsp[-1].e)[1]);
g_lingo->code2(e, f); }
-#line 2749 "engines/director/lingo/lingo-gr.cpp"
+#line 2760 "engines/director/lingo/lingo-gr.cpp"
break;
case 63:
-#line 477 "engines/director/lingo/lingo-gr.y"
+#line 488 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[-1].code); }
-#line 2755 "engines/director/lingo/lingo-gr.cpp"
+#line 2766 "engines/director/lingo/lingo-gr.cpp"
break;
case 65:
-#line 479 "engines/director/lingo/lingo-gr.y"
+#line 490 "engines/director/lingo/lingo-gr.y"
{
// Director parser till D3 was forgiving for any hanging parentheses
if (g_lingo->_ignoreError) {
@@ -2766,531 +2777,527 @@ yyreduce:
yyerrok;
}
}
-#line 2770 "engines/director/lingo/lingo-gr.cpp"
+#line 2781 "engines/director/lingo/lingo-gr.cpp"
break;
case 66:
-#line 490 "engines/director/lingo/lingo-gr.y"
+#line 501 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); }
-#line 2776 "engines/director/lingo/lingo-gr.cpp"
+#line 2787 "engines/director/lingo/lingo-gr.cpp"
break;
case 68:
-#line 492 "engines/director/lingo/lingo-gr.y"
+#line 503 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 2784 "engines/director/lingo/lingo-gr.cpp"
+#line 2795 "engines/director/lingo/lingo-gr.cpp"
break;
case 69:
-#line 495 "engines/director/lingo/lingo-gr.y"
+#line 506 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
delete (yyvsp[-1].s); }
-#line 2792 "engines/director/lingo/lingo-gr.cpp"
+#line 2803 "engines/director/lingo/lingo-gr.cpp"
break;
case 70:
-#line 498 "engines/director/lingo/lingo-gr.y"
+#line 509 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 2800 "engines/director/lingo/lingo-gr.cpp"
+#line 2811 "engines/director/lingo/lingo-gr.cpp"
break;
case 71:
-#line 501 "engines/director/lingo/lingo-gr.y"
+#line 512 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->codeFunc((yyvsp[-2].s), 1);
delete (yyvsp[-2].s); }
-#line 2808 "engines/director/lingo/lingo-gr.cpp"
+#line 2819 "engines/director/lingo/lingo-gr.cpp"
break;
case 72:
-#line 504 "engines/director/lingo/lingo-gr.y"
+#line 515 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectfieldpush);
g_lingo->codeString((yyvsp[0].objectfield).os->c_str());
g_lingo->codeInt((yyvsp[0].objectfield).oe);
delete (yyvsp[0].objectfield).os; }
-#line 2818 "engines/director/lingo/lingo-gr.cpp"
+#line 2829 "engines/director/lingo/lingo-gr.cpp"
break;
case 73:
-#line 509 "engines/director/lingo/lingo-gr.y"
+#line 520 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectrefpush);
g_lingo->codeString((yyvsp[0].objectref).obj->c_str());
g_lingo->codeString((yyvsp[0].objectref).field->c_str());
delete (yyvsp[0].objectref).obj;
delete (yyvsp[0].objectref).field; }
-#line 2829 "engines/director/lingo/lingo-gr.cpp"
+#line 2840 "engines/director/lingo/lingo-gr.cpp"
break;
case 75:
-#line 516 "engines/director/lingo/lingo-gr.y"
+#line 527 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_add); }
-#line 2835 "engines/director/lingo/lingo-gr.cpp"
+#line 2846 "engines/director/lingo/lingo-gr.cpp"
break;
case 76:
-#line 517 "engines/director/lingo/lingo-gr.y"
+#line 528 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_sub); }
-#line 2841 "engines/director/lingo/lingo-gr.cpp"
+#line 2852 "engines/director/lingo/lingo-gr.cpp"
break;
case 77:
-#line 518 "engines/director/lingo/lingo-gr.y"
+#line 529 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_mul); }
-#line 2847 "engines/director/lingo/lingo-gr.cpp"
+#line 2858 "engines/director/lingo/lingo-gr.cpp"
break;
case 78:
-#line 519 "engines/director/lingo/lingo-gr.y"
+#line 530 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_div); }
-#line 2853 "engines/director/lingo/lingo-gr.cpp"
+#line 2864 "engines/director/lingo/lingo-gr.cpp"
break;
case 79:
-#line 520 "engines/director/lingo/lingo-gr.y"
+#line 531 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_mod); }
-#line 2859 "engines/director/lingo/lingo-gr.cpp"
+#line 2870 "engines/director/lingo/lingo-gr.cpp"
break;
case 80:
-#line 521 "engines/director/lingo/lingo-gr.y"
+#line 532 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gt); }
-#line 2865 "engines/director/lingo/lingo-gr.cpp"
+#line 2876 "engines/director/lingo/lingo-gr.cpp"
break;
case 81:
-#line 522 "engines/director/lingo/lingo-gr.y"
+#line 533 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lt); }
-#line 2871 "engines/director/lingo/lingo-gr.cpp"
+#line 2882 "engines/director/lingo/lingo-gr.cpp"
break;
case 82:
-#line 523 "engines/director/lingo/lingo-gr.y"
+#line 534 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eq); }
-#line 2877 "engines/director/lingo/lingo-gr.cpp"
+#line 2888 "engines/director/lingo/lingo-gr.cpp"
break;
case 83:
-#line 524 "engines/director/lingo/lingo-gr.y"
+#line 535 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_neq); }
-#line 2883 "engines/director/lingo/lingo-gr.cpp"
+#line 2894 "engines/director/lingo/lingo-gr.cpp"
break;
case 84:
-#line 525 "engines/director/lingo/lingo-gr.y"
+#line 536 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ge); }
-#line 2889 "engines/director/lingo/lingo-gr.cpp"
+#line 2900 "engines/director/lingo/lingo-gr.cpp"
break;
case 85:
-#line 526 "engines/director/lingo/lingo-gr.y"
+#line 537 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_le); }
-#line 2895 "engines/director/lingo/lingo-gr.cpp"
+#line 2906 "engines/director/lingo/lingo-gr.cpp"
break;
case 86:
-#line 527 "engines/director/lingo/lingo-gr.y"
+#line 538 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_and); }
-#line 2901 "engines/director/lingo/lingo-gr.cpp"
+#line 2912 "engines/director/lingo/lingo-gr.cpp"
break;
case 87:
-#line 528 "engines/director/lingo/lingo-gr.y"
+#line 539 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_or); }
-#line 2907 "engines/director/lingo/lingo-gr.cpp"
+#line 2918 "engines/director/lingo/lingo-gr.cpp"
break;
case 88:
-#line 529 "engines/director/lingo/lingo-gr.y"
+#line 540 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_not); }
-#line 2913 "engines/director/lingo/lingo-gr.cpp"
+#line 2924 "engines/director/lingo/lingo-gr.cpp"
break;
case 89:
-#line 530 "engines/director/lingo/lingo-gr.y"
+#line 541 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ampersand); }
-#line 2919 "engines/director/lingo/lingo-gr.cpp"
+#line 2930 "engines/director/lingo/lingo-gr.cpp"
break;
case 90:
-#line 531 "engines/director/lingo/lingo-gr.y"
+#line 542 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_concat); }
-#line 2925 "engines/director/lingo/lingo-gr.cpp"
+#line 2936 "engines/director/lingo/lingo-gr.cpp"
break;
case 91:
-#line 532 "engines/director/lingo/lingo-gr.y"
+#line 543 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_contains); }
-#line 2931 "engines/director/lingo/lingo-gr.cpp"
+#line 2942 "engines/director/lingo/lingo-gr.cpp"
break;
case 92:
-#line 533 "engines/director/lingo/lingo-gr.y"
+#line 544 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_starts); }
-#line 2937 "engines/director/lingo/lingo-gr.cpp"
+#line 2948 "engines/director/lingo/lingo-gr.cpp"
break;
case 93:
-#line 534 "engines/director/lingo/lingo-gr.y"
+#line 545 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); }
-#line 2943 "engines/director/lingo/lingo-gr.cpp"
+#line 2954 "engines/director/lingo/lingo-gr.cpp"
break;
case 94:
-#line 535 "engines/director/lingo/lingo-gr.y"
+#line 546 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 2949 "engines/director/lingo/lingo-gr.cpp"
+#line 2960 "engines/director/lingo/lingo-gr.cpp"
break;
case 95:
-#line 536 "engines/director/lingo/lingo-gr.y"
+#line 547 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_intersects); }
-#line 2955 "engines/director/lingo/lingo-gr.cpp"
+#line 2966 "engines/director/lingo/lingo-gr.cpp"
break;
case 96:
-#line 537 "engines/director/lingo/lingo-gr.y"
+#line 548 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_within); }
-#line 2961 "engines/director/lingo/lingo-gr.cpp"
+#line 2972 "engines/director/lingo/lingo-gr.cpp"
break;
case 97:
-#line 539 "engines/director/lingo/lingo-gr.y"
+#line 550 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_charOf); }
-#line 2967 "engines/director/lingo/lingo-gr.cpp"
+#line 2978 "engines/director/lingo/lingo-gr.cpp"
break;
case 98:
-#line 540 "engines/director/lingo/lingo-gr.y"
+#line 551 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_charToOf); }
-#line 2973 "engines/director/lingo/lingo-gr.cpp"
+#line 2984 "engines/director/lingo/lingo-gr.cpp"
break;
case 99:
-#line 541 "engines/director/lingo/lingo-gr.y"
+#line 552 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_itemOf); }
-#line 2979 "engines/director/lingo/lingo-gr.cpp"
+#line 2990 "engines/director/lingo/lingo-gr.cpp"
break;
case 100:
-#line 542 "engines/director/lingo/lingo-gr.y"
+#line 553 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_itemToOf); }
-#line 2985 "engines/director/lingo/lingo-gr.cpp"
+#line 2996 "engines/director/lingo/lingo-gr.cpp"
break;
case 101:
-#line 543 "engines/director/lingo/lingo-gr.y"
+#line 554 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lineOf); }
-#line 2991 "engines/director/lingo/lingo-gr.cpp"
+#line 3002 "engines/director/lingo/lingo-gr.cpp"
break;
case 102:
-#line 544 "engines/director/lingo/lingo-gr.y"
+#line 555 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lineToOf); }
-#line 2997 "engines/director/lingo/lingo-gr.cpp"
+#line 3008 "engines/director/lingo/lingo-gr.cpp"
break;
case 103:
-#line 545 "engines/director/lingo/lingo-gr.y"
+#line 556 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_wordOf); }
-#line 3003 "engines/director/lingo/lingo-gr.cpp"
+#line 3014 "engines/director/lingo/lingo-gr.cpp"
break;
case 104:
-#line 546 "engines/director/lingo/lingo-gr.y"
+#line 557 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_wordToOf); }
-#line 3009 "engines/director/lingo/lingo-gr.cpp"
+#line 3020 "engines/director/lingo/lingo-gr.cpp"
break;
case 105:
-#line 548 "engines/director/lingo/lingo-gr.y"
+#line 559 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), 1);
delete (yyvsp[-1].s); }
-#line 3017 "engines/director/lingo/lingo-gr.cpp"
+#line 3028 "engines/director/lingo/lingo-gr.cpp"
break;
case 107:
-#line 553 "engines/director/lingo/lingo-gr.y"
+#line 564 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_printtop); }
-#line 3023 "engines/director/lingo/lingo-gr.cpp"
+#line 3034 "engines/director/lingo/lingo-gr.cpp"
break;
case 110:
-#line 556 "engines/director/lingo/lingo-gr.y"
+#line 567 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_exitRepeat); }
-#line 3029 "engines/director/lingo/lingo-gr.cpp"
+#line 3040 "engines/director/lingo/lingo-gr.cpp"
break;
case 111:
-#line 557 "engines/director/lingo/lingo-gr.y"
+#line 568 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_procret); }
-#line 3035 "engines/director/lingo/lingo-gr.cpp"
+#line 3046 "engines/director/lingo/lingo-gr.cpp"
break;
case 112:
-#line 558 "engines/director/lingo/lingo-gr.y"
+#line 569 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3041 "engines/director/lingo/lingo-gr.cpp"
+#line 3052 "engines/director/lingo/lingo-gr.cpp"
break;
case 113:
-#line 558 "engines/director/lingo/lingo-gr.y"
+#line 569 "engines/director/lingo/lingo-gr.y"
{ inNone(); }
-#line 3047 "engines/director/lingo/lingo-gr.cpp"
+#line 3058 "engines/director/lingo/lingo-gr.cpp"
break;
case 114:
-#line 559 "engines/director/lingo/lingo-gr.y"
+#line 570 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3053 "engines/director/lingo/lingo-gr.cpp"
+#line 3064 "engines/director/lingo/lingo-gr.cpp"
break;
case 115:
-#line 559 "engines/director/lingo/lingo-gr.y"
+#line 570 "engines/director/lingo/lingo-gr.y"
{ inNone(); }
-#line 3059 "engines/director/lingo/lingo-gr.cpp"
+#line 3070 "engines/director/lingo/lingo-gr.cpp"
break;
case 116:
-#line 560 "engines/director/lingo/lingo-gr.y"
+#line 571 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3065 "engines/director/lingo/lingo-gr.cpp"
+#line 3076 "engines/director/lingo/lingo-gr.cpp"
break;
case 117:
-#line 560 "engines/director/lingo/lingo-gr.y"
+#line 571 "engines/director/lingo/lingo-gr.y"
{ inNone(); }
-#line 3071 "engines/director/lingo/lingo-gr.cpp"
+#line 3082 "engines/director/lingo/lingo-gr.cpp"
break;
case 118:
-#line 561 "engines/director/lingo/lingo-gr.y"
+#line 572 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 3079 "engines/director/lingo/lingo-gr.cpp"
+#line 3090 "engines/director/lingo/lingo-gr.cpp"
break;
case 119:
-#line 564 "engines/director/lingo/lingo-gr.y"
+#line 575 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
delete (yyvsp[-1].s); }
-#line 3087 "engines/director/lingo/lingo-gr.cpp"
+#line 3098 "engines/director/lingo/lingo-gr.cpp"
break;
case 120:
-#line 567 "engines/director/lingo/lingo-gr.y"
+#line 578 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_open); }
-#line 3093 "engines/director/lingo/lingo-gr.cpp"
+#line 3104 "engines/director/lingo/lingo-gr.cpp"
break;
case 121:
-#line 568 "engines/director/lingo/lingo-gr.y"
+#line 579 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code2(LC::c_voidpush, LC::c_open); }
-#line 3099 "engines/director/lingo/lingo-gr.cpp"
+#line 3110 "engines/director/lingo/lingo-gr.cpp"
break;
case 122:
-#line 570 "engines/director/lingo/lingo-gr.y"
+#line 581 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_global);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarGlobal);
delete (yyvsp[0].s); }
-#line 3109 "engines/director/lingo/lingo-gr.cpp"
+#line 3120 "engines/director/lingo/lingo-gr.cpp"
break;
case 123:
-#line 575 "engines/director/lingo/lingo-gr.y"
+#line 586 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_global);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarGlobal);
delete (yyvsp[0].s); }
-#line 3119 "engines/director/lingo/lingo-gr.cpp"
+#line 3130 "engines/director/lingo/lingo-gr.cpp"
break;
case 124:
-#line 581 "engines/director/lingo/lingo-gr.y"
+#line 592 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_property);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarProperty);
delete (yyvsp[0].s); }
-#line 3129 "engines/director/lingo/lingo-gr.cpp"
+#line 3140 "engines/director/lingo/lingo-gr.cpp"
break;
case 125:
-#line 586 "engines/director/lingo/lingo-gr.y"
+#line 597 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_property);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarProperty);
delete (yyvsp[0].s); }
-#line 3139 "engines/director/lingo/lingo-gr.cpp"
+#line 3150 "engines/director/lingo/lingo-gr.cpp"
break;
case 126:
-#line 592 "engines/director/lingo/lingo-gr.y"
+#line 603 "engines/director/lingo/lingo-gr.y"
{
- g_lingo->code1(LC::c_instance);
- g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarInstance);
delete (yyvsp[0].s); }
-#line 3149 "engines/director/lingo/lingo-gr.cpp"
+#line 3158 "engines/director/lingo/lingo-gr.cpp"
break;
case 127:
-#line 597 "engines/director/lingo/lingo-gr.y"
+#line 606 "engines/director/lingo/lingo-gr.y"
{
- g_lingo->code1(LC::c_instance);
- g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarInstance);
delete (yyvsp[0].s); }
-#line 3159 "engines/director/lingo/lingo-gr.cpp"
+#line 3166 "engines/director/lingo/lingo-gr.cpp"
break;
case 128:
-#line 610 "engines/director/lingo/lingo-gr.y"
+#line 617 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotoloop); }
-#line 3165 "engines/director/lingo/lingo-gr.cpp"
+#line 3172 "engines/director/lingo/lingo-gr.cpp"
break;
case 129:
-#line 611 "engines/director/lingo/lingo-gr.y"
+#line 618 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotonext); }
-#line 3171 "engines/director/lingo/lingo-gr.cpp"
+#line 3178 "engines/director/lingo/lingo-gr.cpp"
break;
case 130:
-#line 612 "engines/director/lingo/lingo-gr.y"
+#line 619 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotoprevious); }
-#line 3177 "engines/director/lingo/lingo-gr.cpp"
+#line 3184 "engines/director/lingo/lingo-gr.cpp"
break;
case 131:
-#line 613 "engines/director/lingo/lingo-gr.y"
+#line 620 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(1);
g_lingo->code1(LC::c_goto); }
-#line 3186 "engines/director/lingo/lingo-gr.cpp"
+#line 3193 "engines/director/lingo/lingo-gr.cpp"
break;
case 132:
-#line 617 "engines/director/lingo/lingo-gr.y"
+#line 624 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(3);
g_lingo->code1(LC::c_goto); }
-#line 3195 "engines/director/lingo/lingo-gr.cpp"
+#line 3202 "engines/director/lingo/lingo-gr.cpp"
break;
case 133:
-#line 621 "engines/director/lingo/lingo-gr.y"
+#line 628 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(2);
g_lingo->code1(LC::c_goto); }
-#line 3204 "engines/director/lingo/lingo-gr.cpp"
+#line 3211 "engines/director/lingo/lingo-gr.cpp"
break;
case 136:
-#line 629 "engines/director/lingo/lingo-gr.y"
+#line 636 "engines/director/lingo/lingo-gr.y"
{ // "play #done" is also caught by this
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(1);
g_lingo->code1(LC::c_play); }
-#line 3213 "engines/director/lingo/lingo-gr.cpp"
+#line 3220 "engines/director/lingo/lingo-gr.cpp"
break;
case 137:
-#line 633 "engines/director/lingo/lingo-gr.y"
+#line 640 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(3);
g_lingo->code1(LC::c_play); }
-#line 3222 "engines/director/lingo/lingo-gr.cpp"
+#line 3229 "engines/director/lingo/lingo-gr.cpp"
break;
case 138:
-#line 637 "engines/director/lingo/lingo-gr.y"
+#line 644 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(2);
g_lingo->code1(LC::c_play); }
-#line 3231 "engines/director/lingo/lingo-gr.cpp"
+#line 3238 "engines/director/lingo/lingo-gr.cpp"
break;
case 139:
-#line 641 "engines/director/lingo/lingo-gr.y"
+#line 648 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeSetImmediate(true); }
-#line 3237 "engines/director/lingo/lingo-gr.cpp"
+#line 3244 "engines/director/lingo/lingo-gr.cpp"
break;
case 140:
-#line 641 "engines/director/lingo/lingo-gr.y"
+#line 648 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeSetImmediate(false);
g_lingo->codeFunc((yyvsp[-2].s), (yyvsp[0].narg));
delete (yyvsp[-2].s); }
-#line 3246 "engines/director/lingo/lingo-gr.cpp"
+#line 3253 "engines/director/lingo/lingo-gr.cpp"
break;
case 141:
-#line 671 "engines/director/lingo/lingo-gr.y"
+#line 678 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3252 "engines/director/lingo/lingo-gr.cpp"
+#line 3259 "engines/director/lingo/lingo-gr.cpp"
break;
case 142:
-#line 671 "engines/director/lingo/lingo-gr.y"
- { g_lingo->_currentFactory.clear(); }
-#line 3258 "engines/director/lingo/lingo-gr.cpp"
+#line 678 "engines/director/lingo/lingo-gr.y"
+ { g_lingo->_currentFactory = NULL; }
+#line 3265 "engines/director/lingo/lingo-gr.cpp"
break;
case 143:
-#line 672 "engines/director/lingo/lingo-gr.y"
+#line 679 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg));
endDef();
delete (yyvsp[-6].s); }
-#line 3268 "engines/director/lingo/lingo-gr.cpp"
+#line 3275 "engines/director/lingo/lingo-gr.cpp"
break;
case 144:
-#line 677 "engines/director/lingo/lingo-gr.y"
+#line 684 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 3274 "engines/director/lingo/lingo-gr.cpp"
+#line 3281 "engines/director/lingo/lingo-gr.cpp"
break;
case 145:
-#line 678 "engines/director/lingo/lingo-gr.y"
+#line 685 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3280 "engines/director/lingo/lingo-gr.cpp"
+#line 3287 "engines/director/lingo/lingo-gr.cpp"
break;
case 146:
-#line 679 "engines/director/lingo/lingo-gr.y"
+#line 686 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_procret);
- g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg) + 1, &g_lingo->_currentFactory);
+ g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg) + 1, g_lingo->_currentFactory);
endDef();
delete (yyvsp[-6].s); }
-#line 3290 "engines/director/lingo/lingo-gr.cpp"
+#line 3297 "engines/director/lingo/lingo-gr.cpp"
break;
case 147:
-#line 684 "engines/director/lingo/lingo-gr.y"
+#line 691 "engines/director/lingo/lingo-gr.y"
{ // D3
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-7].s), (yyvsp[-6].code), (yyvsp[-5].narg));
@@ -3299,70 +3306,70 @@ yyreduce:
checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
delete (yyvsp[-7].s);
delete (yyvsp[-1].s); }
-#line 3303 "engines/director/lingo/lingo-gr.cpp"
+#line 3310 "engines/director/lingo/lingo-gr.cpp"
break;
case 148:
-#line 692 "engines/director/lingo/lingo-gr.y"
+#line 699 "engines/director/lingo/lingo-gr.y"
{ // D4. No 'end' clause
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
endDef();
delete (yyvsp[-5].s); }
-#line 3313 "engines/director/lingo/lingo-gr.cpp"
+#line 3320 "engines/director/lingo/lingo-gr.cpp"
break;
case 149:
-#line 698 "engines/director/lingo/lingo-gr.y"
+#line 705 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3319 "engines/director/lingo/lingo-gr.cpp"
+#line 3326 "engines/director/lingo/lingo-gr.cpp"
break;
case 150:
-#line 698 "engines/director/lingo/lingo-gr.y"
+#line 705 "engines/director/lingo/lingo-gr.y"
{
- (yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
-#line 3326 "engines/director/lingo/lingo-gr.cpp"
+ (yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory = NULL; g_lingo->_ignoreMe = true; }
+#line 3333 "engines/director/lingo/lingo-gr.cpp"
break;
case 151:
-#line 701 "engines/director/lingo/lingo-gr.y"
+#line 708 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 0; }
-#line 3332 "engines/director/lingo/lingo-gr.cpp"
+#line 3339 "engines/director/lingo/lingo-gr.cpp"
break;
case 152:
-#line 702 "engines/director/lingo/lingo-gr.y"
+#line 709 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); (yyval.narg) = 1; delete (yyvsp[0].s); }
-#line 3338 "engines/director/lingo/lingo-gr.cpp"
+#line 3345 "engines/director/lingo/lingo-gr.cpp"
break;
case 153:
-#line 703 "engines/director/lingo/lingo-gr.y"
+#line 710 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
-#line 3344 "engines/director/lingo/lingo-gr.cpp"
+#line 3351 "engines/director/lingo/lingo-gr.cpp"
break;
case 155:
-#line 706 "engines/director/lingo/lingo-gr.y"
+#line 713 "engines/director/lingo/lingo-gr.y"
{ delete (yyvsp[0].s); }
-#line 3350 "engines/director/lingo/lingo-gr.cpp"
+#line 3357 "engines/director/lingo/lingo-gr.cpp"
break;
case 156:
-#line 707 "engines/director/lingo/lingo-gr.y"
+#line 714 "engines/director/lingo/lingo-gr.y"
{ delete (yyvsp[0].s); }
-#line 3356 "engines/director/lingo/lingo-gr.cpp"
+#line 3363 "engines/director/lingo/lingo-gr.cpp"
break;
case 157:
-#line 709 "engines/director/lingo/lingo-gr.y"
+#line 716 "engines/director/lingo/lingo-gr.y"
{ inDef(); }
-#line 3362 "engines/director/lingo/lingo-gr.cpp"
+#line 3369 "engines/director/lingo/lingo-gr.cpp"
break;
case 158:
-#line 711 "engines/director/lingo/lingo-gr.y"
+#line 718 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_call);
g_lingo->codeString((yyvsp[-1].s)->c_str());
@@ -3370,113 +3377,113 @@ yyreduce:
WRITE_UINT32(&numpar, (yyvsp[0].narg));
g_lingo->code1(numpar);
delete (yyvsp[-1].s); }
-#line 3374 "engines/director/lingo/lingo-gr.cpp"
+#line 3381 "engines/director/lingo/lingo-gr.cpp"
break;
case 159:
-#line 719 "engines/director/lingo/lingo-gr.y"
+#line 726 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 0; }
-#line 3380 "engines/director/lingo/lingo-gr.cpp"
+#line 3387 "engines/director/lingo/lingo-gr.cpp"
break;
case 160:
-#line 720 "engines/director/lingo/lingo-gr.y"
+#line 727 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3386 "engines/director/lingo/lingo-gr.cpp"
+#line 3393 "engines/director/lingo/lingo-gr.cpp"
break;
case 161:
-#line 721 "engines/director/lingo/lingo-gr.y"
+#line 728 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3392 "engines/director/lingo/lingo-gr.cpp"
+#line 3399 "engines/director/lingo/lingo-gr.cpp"
break;
case 162:
-#line 723 "engines/director/lingo/lingo-gr.y"
+#line 730 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3398 "engines/director/lingo/lingo-gr.cpp"
+#line 3405 "engines/director/lingo/lingo-gr.cpp"
break;
case 163:
-#line 724 "engines/director/lingo/lingo-gr.y"
+#line 731 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3404 "engines/director/lingo/lingo-gr.cpp"
+#line 3411 "engines/director/lingo/lingo-gr.cpp"
break;
case 164:
-#line 726 "engines/director/lingo/lingo-gr.y"
+#line 733 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[-1].code); }
-#line 3410 "engines/director/lingo/lingo-gr.cpp"
+#line 3417 "engines/director/lingo/lingo-gr.cpp"
break;
case 165:
-#line 728 "engines/director/lingo/lingo-gr.y"
+#line 735 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3416 "engines/director/lingo/lingo-gr.cpp"
+#line 3423 "engines/director/lingo/lingo-gr.cpp"
break;
case 166:
-#line 729 "engines/director/lingo/lingo-gr.y"
+#line 736 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3422 "engines/director/lingo/lingo-gr.cpp"
+#line 3429 "engines/director/lingo/lingo-gr.cpp"
break;
case 167:
-#line 730 "engines/director/lingo/lingo-gr.y"
+#line 737 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3428 "engines/director/lingo/lingo-gr.cpp"
+#line 3435 "engines/director/lingo/lingo-gr.cpp"
break;
case 168:
-#line 731 "engines/director/lingo/lingo-gr.y"
+#line 738 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3434 "engines/director/lingo/lingo-gr.cpp"
+#line 3441 "engines/director/lingo/lingo-gr.cpp"
break;
case 169:
-#line 733 "engines/director/lingo/lingo-gr.y"
+#line 740 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3440 "engines/director/lingo/lingo-gr.cpp"
+#line 3447 "engines/director/lingo/lingo-gr.cpp"
break;
case 170:
-#line 734 "engines/director/lingo/lingo-gr.y"
+#line 741 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3446 "engines/director/lingo/lingo-gr.cpp"
+#line 3453 "engines/director/lingo/lingo-gr.cpp"
break;
case 171:
-#line 736 "engines/director/lingo/lingo-gr.y"
+#line 743 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3452 "engines/director/lingo/lingo-gr.cpp"
+#line 3459 "engines/director/lingo/lingo-gr.cpp"
break;
case 172:
-#line 737 "engines/director/lingo/lingo-gr.y"
+#line 744 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3458 "engines/director/lingo/lingo-gr.cpp"
+#line 3465 "engines/director/lingo/lingo-gr.cpp"
break;
case 173:
-#line 739 "engines/director/lingo/lingo-gr.y"
+#line 746 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_symbolpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
delete (yyvsp[-2].s); }
-#line 3467 "engines/director/lingo/lingo-gr.cpp"
+#line 3474 "engines/director/lingo/lingo-gr.cpp"
break;
case 174:
-#line 743 "engines/director/lingo/lingo-gr.y"
+#line 750 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_stringpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
delete (yyvsp[-2].s); }
-#line 3476 "engines/director/lingo/lingo-gr.cpp"
+#line 3483 "engines/director/lingo/lingo-gr.cpp"
break;
-#line 3480 "engines/director/lingo/lingo-gr.cpp"
+#line 3487 "engines/director/lingo/lingo-gr.cpp"
default: break;
}
@@ -3675,7 +3682,7 @@ yyreturn:
return yyresult;
}
-#line 749 "engines/director/lingo/lingo-gr.y"
+#line 756 "engines/director/lingo/lingo-gr.y"
int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index a2eb53ffcc..b8ef3f1baf 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.6.3. */
+/* A Bison parser, made by GNU Bison 3.6.2. */
/* Bison interface for Yacc-like parsers in C
@@ -147,7 +147,7 @@ extern int yydebug;
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
-#line 114 "engines/director/lingo/lingo-gr.y"
+#line 125 "engines/director/lingo/lingo-gr.y"
Common::String *s;
int i;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index a4017d1763..d5ea403d43 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -99,6 +99,17 @@ static void endDef() {
inNone();
g_lingo->_ignoreMe = false;
+ for (Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>::iterator i = g_lingo->_methodVars->begin(); i != g_lingo->_methodVars->end(); ++i) {
+ if (i->_value == kVarInstance) {
+ if (g_lingo->_currentFactory != nullptr) {
+ g_lingo->_currentFactory->properties[i->_key] = Symbol();
+ g_lingo->_currentFactory->properties[i->_key].name = new Common::String(i->_key);
+ } else {
+ warning("Instance var '%s' defined outside factory", i->_key.c_str());
+ }
+ }
+ }
+
delete g_lingo->_methodVars;
g_lingo->_methodVars = g_lingo->_methodVarsStash;
g_lingo->_methodVarsStash = nullptr;
@@ -590,13 +601,9 @@ propertylist: ID {
delete $ID; }
instancelist: ID {
- g_lingo->code1(LC::c_instance);
- g_lingo->codeString($ID->c_str());
mVar($ID, kVarInstance);
delete $ID; }
| instancelist ',' ID {
- g_lingo->code1(LC::c_instance);
- g_lingo->codeString($ID->c_str());
mVar($ID, kVarInstance);
delete $ID; }
@@ -668,7 +675,7 @@ playfunc: tPLAY expr { // "play #done" is also caught by this
//
// See also:
// on keyword
-defn: tMACRO { startDef(); } ID { g_lingo->_currentFactory.clear(); }
+defn: tMACRO { startDef(); } ID { g_lingo->_currentFactory = NULL; }
lbl argdef '\n' argstore stmtlist {
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*$ID, $lbl, $argdef);
@@ -678,7 +685,7 @@ defn: tMACRO { startDef(); } ID { g_lingo->_currentFactory.clear(); }
| tMETHOD { startDef(); }
lbl argdef '\n' argstore stmtlist {
g_lingo->code1(LC::c_procret);
- g_lingo->codeDefine(*$tMETHOD, $lbl, $argdef + 1, &g_lingo->_currentFactory);
+ g_lingo->codeDefine(*$tMETHOD, $lbl, $argdef + 1, g_lingo->_currentFactory);
endDef();
delete $tMETHOD; }
| on lbl argdef '\n' argstore stmtlist ENDCLAUSE endargdef { // D3
@@ -696,7 +703,7 @@ defn: tMACRO { startDef(); } ID { g_lingo->_currentFactory.clear(); }
delete $on; }
on: tON { startDef(); } ID {
- $$ = $ID; g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
+ $$ = $ID; g_lingo->_currentFactory = NULL; g_lingo->_ignoreMe = true; }
argdef: /* nothing */ { $$ = 0; }
| ID { g_lingo->codeArg($ID); mVar($ID, kVarArgument); $$ = 1; delete $ID; }
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 97f5f99b44..71a1d75303 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -619,9 +619,21 @@ Common::String Datum::asString(bool printonly) {
break;
case OBJECT:
if (!printonly) {
- s = Common::String::format("#%s", u.s->c_str());
+ s = Common::String::format("#%s", u.obj->name->c_str());
} else {
- s = Common::String::format("object: #%s", u.s->c_str());
+ s = Common::String::format("object: #%s properties: [", u.obj->name->c_str());
+ for (SymbolHash::iterator i = u.obj->properties.begin(); i != u.obj->properties.end(); ++i) {
+ if (i != u.obj->properties.begin())
+ s += ", ";
+ s += (*i)._key.c_str();
+ }
+ s += "] methods: [";
+ for (SymbolHash::iterator i = u.obj->methods.begin(); i != u.obj->methods.end(); ++i) {
+ if (i != u.obj->methods.begin())
+ s += ", ";
+ s += (*i)._key.c_str();
+ }
+ s += "]";
}
break;
case VOID:
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 06221eaa8d..2057f96bf9 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -42,6 +42,7 @@ struct TheEntity;
struct TheEntityField;
struct LingoV4Bytecode;
struct LingoV4TheEntity;
+struct Object;
struct ScriptContext;
class DirectorEngine;
class Frame;
@@ -87,6 +88,7 @@ struct Symbol { /* symbol table entry */
Common::String *s; /* STRING */
DatumArray *farr; /* ARRAY, POINT, RECT */
PropertyArray *parr;
+ Object *obj;
} u;
int *refCount;
@@ -117,6 +119,7 @@ struct Datum { /* interpreter stack type */
Common::String *s; /* STRING, VAR, OBJECT */
DatumArray *farr; /* ARRAY, POINT, RECT */
PropertyArray *parr; /* PARRAY */
+ Object *obj;
} u;
int *refCount;
@@ -235,6 +238,25 @@ typedef Common::HashMap<Common::String, Builtin *, Common::IgnoreCase_Hash, Comm
typedef Common::HashMap<Common::String, TheEntity *, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> TheEntityHash;
typedef Common::HashMap<Common::String, TheEntityField *, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> TheEntityFieldHash;
+enum ObjectType {
+ kFactoryObj = 0,
+ kScriptObj = 1
+};
+
+struct Object {
+ Common::String *name;
+ ObjectType type;
+
+ Object *prototype;
+ SymbolHash properties;
+ SymbolHash methods;
+ int inheritanceLevel; // 1 for original object
+ ScriptContext *scriptContext;
+
+ // used only for factories
+ DatumArray *objArray;
+};
+
struct CFrame { /* proc/func call stack frame */
Symbol sp; /* symbol table entry */
int retpc; /* where to resume after return */
@@ -330,8 +352,8 @@ public:
void pushContext();
void popContext();
void cleanLocalVars();
- Symbol define(Common::String &s, int nargs, ScriptData *code, Common::Array<Common::String> *argNames = nullptr, Common::Array<Common::String> *varNames = nullptr);
- Symbol codeDefine(Common::String &s, int start, int nargs, Common::String *prefix = NULL, int end = -1, bool removeCode = true);
+ Symbol define(Common::String &s, int nargs, ScriptData *code, Common::Array<Common::String> *argNames = nullptr, Common::Array<Common::String> *varNames = nullptr, Object *obj = nullptr);
+ Symbol codeDefine(Common::String &s, int start, int nargs, Object *obj = nullptr, int end = -1, bool removeCode = true);
void processIf(int toplabel, int endlabel);
int castIdFetch(Datum &var);
void varCreate(const Common::String &name, bool global);
@@ -361,7 +383,7 @@ public:
void codeArg(Common::String *s);
int codeSetImmediate(bool state);
int codeFunc(Common::String *s, int numpar);
- int codeMe(Common::String *method, int numpar);
+ // int codeMe(Common::String *method, int numpar);
int codeFloat(double f);
void codeFactory(Common::String &s);
@@ -461,7 +483,7 @@ public:
bool _hadError;
bool _inFactory;
- Common::String _currentFactory;
+ Object *_currentFactory;
bool _inCond;
bool _exitRepeat;
Commit: 041326bdd113c1a14618860e3a158667babe6e61
https://github.com/scummvm/scummvm/commit/041326bdd113c1a14618860e3a158667babe6e61
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Implement factory method calls
Changed paths:
A engines/director/lingo/lingo-object.cpp
A engines/director/lingo/lingo-object.h
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo-codegen.cpp
engines/director/lingo/lingo.cpp
engines/director/lingo/lingo.h
engines/director/module.mk
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 8b3e57f25b..650aebe929 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -260,21 +260,6 @@ static struct BuiltinProto {
{ 0, 0, 0, 0, false, 0, 0 }
};
-static const char *predefinedMethods[] = {
- "mAtFrame", // D3
- "mDescribe", // D3
- "mDispose", // D3
- "mGet", // D3
- "mInstanceRespondsTo", // D3
- "mMessageList", // D3
- "mName", // D3
- "mNew", // D3
- "mPerform", // D3
- "mPut", // D3
- "mRespondsTo", // D3
- 0
-};
-
void Lingo::initBuiltIns() {
for (BuiltinProto *blt = builtins; blt->name; blt++) {
if (blt->version > _vm->getVersion())
@@ -293,17 +278,6 @@ void Lingo::initBuiltIns() {
_functions[(void *)sym.u.s] = new FuncDesc(blt->name, "");
}
-
- // Set predefined methods
- for (const char **b = predefinedMethods; *b; b++) {
- Common::String name(*b);
- Datum target(name);
- target.type = VAR;
- Datum source(name);
- source.type = SYMBOL;
- g_lingo->varCreate(name, true);
- g_lingo->varAssign(target, source, true);
- }
}
void Lingo::cleanupBuiltins() {
@@ -2099,41 +2073,6 @@ void LB::b_version(int nargs) {
}
}
-///////////////////
-// Factory
-///////////////////
-void LB::b_factory(int nargs) {
- // This is intentionally empty
-}
-
-void Lingo::factoryCall(const Common::String &name, int nargs) {
- Common::String s("factoryCall: ");
-
- s += name;
-
- convertVOIDtoString(0, nargs);
-
- printSTUBWithArglist(s.c_str(), nargs);
-
- Datum method = _stack[_stack.size() - nargs + 0];
-
- drop(nargs - 1);
-
- s = name + "-" + *method.u.s;
-
- debugC(3, kDebugLingoExec, "Stack size before call: %d, nargs: %d", _stack.size(), nargs);
- LC::call(s, 1);
- debugC(3, kDebugLingoExec, "Stack size after call: %d", _stack.size());
-
- if (!method.u.s->compareToIgnoreCase("mNew")) {
- Datum d(name);
-
- d.type = OBJECT;
-
- g_lingo->push(d);
- }
-}
-
///////////////////
// References
///////////////////
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 6b600d70e0..2883e80c96 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1252,15 +1252,15 @@ void LC::call(const Common::String &name, int nargs) {
Symbol sym = g_lingo->getHandler(name);
- if (!g_lingo->_eventHandlerTypeIds.contains(name)) {
- if ((*g_lingo->_localvars).contains(name)) {
- Datum eventName(name);
- eventName.type = VAR;
- Datum d = g_lingo->varFetch(eventName);
- if (d.type == OBJECT) {
- debugC(3, kDebugLingoExec, "Dereferencing object reference: %s to %s", name.c_str(), d.u.s->c_str());
- sym = g_lingo->getHandler(*d.u.s);
- }
+ if (sym.type == VOID) {
+ Datum eventName(name);
+ eventName.type = VAR;
+ Datum d = g_lingo->varFetch(eventName);
+ if (d.type == OBJECT) {
+ debugC(3, kDebugLingoExec, "Dereferencing object reference: %s to %s", name.c_str(), d.u.obj->name->c_str());
+ sym = Symbol();
+ sym.type = OBJECT;
+ sym.u.obj = d.u.obj;
}
}
@@ -1270,16 +1270,28 @@ void LC::call(const Common::String &name, int nargs) {
void LC::call(const Symbol &sym, int nargs) {
bool dropArgs = false;
- if (sym.type == VOID) {
+ Symbol targetSym;
+ Symbol funcSym;
+ if (sym.type == OBJECT) {
+ targetSym = sym;
+ Datum methodName = g_lingo->_stack.remove_at(g_lingo->_stack.size() - nargs); // Take method name out of stack
+ nargs -= 1;
+ funcSym = targetSym.u.obj->getMethod(*methodName.u.s);
+ } else {
+ targetSym.type = VOID;
+ funcSym = sym;
+ }
+
+ if (funcSym.type == VOID) {
warning("Call to undefined handler. Dropping %d stack items", nargs);
dropArgs = true;
} else {
- if ((sym.type == BLTIN || sym.type == FBLTIN || sym.type == RBLTIN)
- && sym.nargs != -1 && sym.nargs != nargs && sym.maxArgs != nargs) {
- if (sym.nargs == sym.maxArgs)
- warning("Incorrect number of arguments to handler '%s', expecting %d. Dropping %d stack items", sym.name->c_str(), sym.nargs, nargs);
+ if ((funcSym.type == BLTIN || funcSym.type == FBLTIN || funcSym.type == RBLTIN)
+ && funcSym.nargs != -1 && funcSym.nargs != nargs && funcSym.maxArgs != nargs) {
+ if (funcSym.nargs == funcSym.maxArgs)
+ warning("Incorrect number of arguments to handler '%s', expecting %d. Dropping %d stack items", funcSym.name->c_str(), funcSym.nargs, nargs);
else
- warning("Incorrect number of arguments to handler '%s', expecting %d or %d. Dropping %d stack items", sym.name->c_str(), sym.nargs, sym.maxArgs, nargs);
+ warning("Incorrect number of arguments to handler '%s', expecting %d or %d. Dropping %d stack items", funcSym.name->c_str(), funcSym.nargs, funcSym.maxArgs, nargs);
dropArgs = true;
}
@@ -1295,36 +1307,40 @@ void LC::call(const Symbol &sym, int nargs) {
return;
}
- if (sym.nargs != -1 && sym.maxArgs < nargs) {
+ if (funcSym.nargs != -1 && funcSym.maxArgs < nargs) {
warning("Incorrect number of arguments for function %s (%d, expected %d to %d). Dropping extra %d",
- sym.name->c_str(), nargs, sym.nargs, sym.maxArgs, nargs - sym.nargs);
- for (int i = 0; i < nargs - sym.maxArgs; i++)
+ funcSym.name->c_str(), nargs, funcSym.nargs, funcSym.maxArgs, nargs - funcSym.nargs);
+ for (int i = 0; i < nargs - funcSym.maxArgs; i++)
g_lingo->pop();
}
- if (sym.type == BLTIN || sym.type == FBLTIN || sym.type == RBLTIN) {
- if (sym.u.bltin == LB::b_factory) {
- g_lingo->factoryCall(*sym.name, nargs);
- } else {
- int stackSize = g_lingo->_stack.size() - nargs;
+ if (funcSym.type == BLTIN || funcSym.type == FBLTIN || funcSym.type == RBLTIN) {
+ int stackSize = g_lingo->_stack.size() - nargs;
- (*sym.u.bltin)(nargs);
+ if (targetSym.type == OBJECT) {
+ // Only need to update the me obj
+ // Pushing an entire stack frame is not necessary
+ Object *retMeObj = g_lingo->_currentMeObj;
+ g_lingo->_currentMeObj = targetSym.u.obj;
+ (*funcSym.u.bltin)(nargs);
+ g_lingo->_currentMeObj = retMeObj;
+ } else {
+ (*funcSym.u.bltin)(nargs);
+ }
- int stackNewSize = g_lingo->_stack.size();
+ int stackNewSize = g_lingo->_stack.size();
- if (sym.type == FBLTIN || sym.type == RBLTIN) {
- if (stackNewSize - stackSize != 1)
- warning("built-in function %s did not return value", sym.name->c_str());
- } else {
- if (stackNewSize - stackSize != 0)
- warning("built-in procedure %s returned extra %d values", sym.name->c_str(), stackNewSize - stackSize);
- }
+ if (funcSym.type == FBLTIN || funcSym.type == RBLTIN) {
+ if (stackNewSize - stackSize != 1)
+ warning("built-in function %s did not return value", funcSym.name->c_str());
+ } else {
+ if (stackNewSize - stackSize != 0)
+ warning("built-in procedure %s returned extra %d values", funcSym.name->c_str(), stackNewSize - stackSize);
}
-
return;
}
- for (int i = nargs; i < sym.nargs; i++) {
+ for (int i = nargs; i < funcSym.nargs; i++) {
Datum d;
d.u.s = NULL;
@@ -1340,23 +1356,24 @@ void LC::call(const Symbol &sym, int nargs) {
fp->retctx = g_lingo->_currentScriptContext;
fp->retarchive = g_lingo->_archiveIndex;
fp->localvars = g_lingo->_localvars;
+ fp->retMeObj = g_lingo->_currentMeObj;
// Create new set of local variables
g_lingo->_localvars = new SymbolHash;
- if (sym.argNames) {
- int symNArgs = sym.nargs;
- if ((int)sym.argNames->size() < symNArgs) {
- int dropSize = symNArgs - sym.argNames->size();
- warning("%d arg names defined for %d args! Dropping the last %d values", sym.argNames->size(), symNArgs, dropSize);
+ if (funcSym.argNames) {
+ int symNArgs = funcSym.nargs;
+ if ((int)funcSym.argNames->size() < symNArgs) {
+ int dropSize = symNArgs - funcSym.argNames->size();
+ warning("%d arg names defined for %d args! Dropping the last %d values", funcSym.argNames->size(), symNArgs, dropSize);
for (int i = 0; i < dropSize; i++) {
g_lingo->pop();
symNArgs -= 1;
}
- } else if ((int)sym.argNames->size() > symNArgs) {
- warning("%d arg names defined for %d args! Ignoring the last %d names", sym.argNames->size(), symNArgs, sym.argNames->size() - symNArgs);
+ } else if ((int)funcSym.argNames->size() > symNArgs) {
+ warning("%d arg names defined for %d args! Ignoring the last %d names", funcSym.argNames->size(), symNArgs, funcSym.argNames->size() - symNArgs);
}
for (int i = symNArgs - 1; i >= 0; i--) {
- Common::String name = (*sym.argNames)[i];
+ Common::String name = (*funcSym.argNames)[i];
if (!g_lingo->_localvars->contains(name)) {
g_lingo->varCreate(name, false);
Datum arg(name);
@@ -1368,8 +1385,8 @@ void LC::call(const Symbol &sym, int nargs) {
}
}
}
- if (sym.varNames) {
- for (Common::Array<Common::String>::iterator it = sym.varNames->begin(); it != sym.varNames->end(); ++it) {
+ if (funcSym.varNames) {
+ for (Common::Array<Common::String>::iterator it = funcSym.varNames->begin(); it != funcSym.varNames->end(); ++it) {
Common::String name = *it;
if (!g_lingo->_localvars->contains(name)) {
(*g_lingo->_localvars)[name] = Symbol();
@@ -1380,7 +1397,7 @@ void LC::call(const Symbol &sym, int nargs) {
}
}
- fp->sp = sym;
+ fp->sp = funcSym;
g_lingo->_callstack.push_back(fp);
@@ -1388,13 +1405,19 @@ void LC::call(const Symbol &sym, int nargs) {
g_lingo->printCallStack(0);
}
- g_lingo->_currentScript = sym.u.defn;
- if (sym.ctx) {
- g_lingo->_currentScriptContext = sym.ctx;
+ g_lingo->_currentScript = funcSym.u.defn;
+ if (funcSym.ctx) {
+ g_lingo->_currentScriptContext = funcSym.ctx;
}
- g_lingo->_archiveIndex = sym.archiveIndex;
+ g_lingo->_archiveIndex = funcSym.archiveIndex;
g_lingo->_pc = 0;
+
+ if (targetSym.type == OBJECT) {
+ g_lingo->_currentMeObj = targetSym.u.obj;
+ } else {
+ g_lingo->_currentMeObj = nullptr;
+ }
}
void LC::c_procret() {
@@ -1413,6 +1436,7 @@ void LC::c_procret() {
g_lingo->_currentScriptContext = fp->retctx;
g_lingo->_archiveIndex = fp->retarchive;
g_lingo->_pc = fp->retpc;
+ g_lingo->_currentMeObj = fp->retMeObj;
if (debugChannelSet(5, kDebugLingoExec)) {
g_lingo->printCallStack(g_lingo->_pc);
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index da5dd4bb7f..21752027af 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -246,11 +246,19 @@ Symbol Lingo::define(Common::String &name, int nargs, ScriptData *code, Common::
debugC(1, kDebugLingoCompile, "<end define code>");
}
- if (factory != nullptr) {
+ if (factory) {
if (factory->methods.contains(name)) {
warning("Redefining method '%s' on factory '%s'", name.c_str(), factory->name->c_str());
}
factory->methods[name] = sym;
+
+ // FIXME: Method names can conflict with vars. This won't work all the time.
+ Datum target(name);
+ target.type = VAR;
+ Datum source(name);
+ source.type = SYMBOL;
+ g_lingo->varCreate(name, true);
+ g_lingo->varAssign(target, source, true);
} else {
Symbol existing = getHandler(name);
if (existing.type != VOID)
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
new file mode 100644
index 0000000000..f88906f468
--- /dev/null
+++ b/engines/director/lingo/lingo-object.cpp
@@ -0,0 +1,110 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#include "director/director.h"
+#include "director/lingo/lingo.h"
+#include "director/lingo/lingo-object.h"
+
+namespace Director {
+
+static struct MethodProto {
+ const char *name;
+ void (*func)(int);
+ int minArgs; // -1 -- arglist
+ int maxArgs;
+ int version;
+} predefinedMethods[] = {
+ // "mAtFrame" // D2 - XObject or user-defined
+ // "mDescribe", // D2 - XObject
+ { "mDispose", LM::m_dispose, 0, 0, 2 }, // D2
+ { "mGet", LM::m_get, 1, 1, 2 }, // D2
+ // "mInstanceRespondsTo", // D2 - XObject
+ // "mMessageList", // D2 - XObject
+ // "mName", // D2 - XObject
+ { "mNew", LM::m_new, -1, 0, 2 }, // D2
+ // "mPerform", // D2 - XObject
+ { "mPut", LM::m_put, 2, 2, 2 }, // D2
+ // "mRespondsTo", // D2 - XObject
+ { 0, 0, 0, 0, 0 }
+};
+
+void Lingo::initMethods() {
+ for (MethodProto *mtd = predefinedMethods; mtd->name; mtd++) {
+ if (mtd->version > _vm->getVersion())
+ continue;
+
+ Symbol sym;
+ sym.name = new Common::String(mtd->name);
+ sym.type = FBLTIN;
+ sym.nargs = mtd->minArgs;
+ sym.maxArgs = mtd->maxArgs;
+ sym.parens = false;
+ sym.u.bltin = mtd->func;
+ _methods[mtd->name] = sym;
+
+ // FIXME: Method names can conflict with vars. This won't work all the time.
+ Common::String name(mtd->name);
+ Datum target(name);
+ target.type = VAR;
+ Datum source(name);
+ source.type = SYMBOL;
+ g_lingo->varCreate(name, true);
+ g_lingo->varAssign(target, source, true);
+ }
+}
+
+Symbol Object::getMethod(Common::String &methodName, bool ignorePredefined) {
+ if (!ignorePredefined && g_lingo->_methods.contains(methodName)) {
+ return g_lingo->_methods[methodName];
+ }
+ if (methods.contains(methodName)) {
+ return methods[methodName];
+ }
+ // TODO: error handling
+ return Symbol();
+}
+
+void LM::m_dispose(int nargs) {
+ g_lingo->printSTUBWithArglist("m_dispose", nargs);
+ g_lingo->dropStack(nargs);
+ g_lingo->pushVoid();
+}
+
+void LM::m_get(int nargs) {
+ g_lingo->printSTUBWithArglist("m_get", nargs);
+ g_lingo->dropStack(nargs);
+ g_lingo->pushVoid();
+}
+
+void LM::m_put(int nargs) {
+ g_lingo->printSTUBWithArglist("m_put", nargs);
+ g_lingo->dropStack(nargs);
+ g_lingo->pushVoid();
+}
+
+void LM::m_new(int nargs) {
+ g_lingo->printSTUBWithArglist("m_new", nargs);
+ g_lingo->dropStack(nargs);
+ g_lingo->pushVoid();
+}
+
+}
diff --git a/engines/director/lingo/lingo-object.h b/engines/director/lingo/lingo-object.h
new file mode 100644
index 0000000000..db818fbfd0
--- /dev/null
+++ b/engines/director/lingo/lingo-object.h
@@ -0,0 +1,39 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ */
+
+#ifndef DIRECTOR_LINGO_OBJECT_H
+#define DIRECTOR_LINGO_OBJECT_H
+
+namespace Director {
+
+namespace LM {
+ // predefined methods
+ void m_dispose(int nargs);
+ void m_get(int nargs);
+ void m_new(int nargs);
+ void m_put(int nargs);
+
+} // End of namespace LM
+
+} // End of namespace Director
+
+#endif
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 71a1d75303..1f0442fb86 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -186,6 +186,7 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
initFuncs();
initBytecode();
initTheEntities();
+ initMethods();
warning("Lingo Inited");
}
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 2057f96bf9..d6d0cbbc7b 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -255,6 +255,8 @@ struct Object {
// used only for factories
DatumArray *objArray;
+
+ Symbol getMethod(Common::String &methodName, bool ignorePredefined = false);
};
struct CFrame { /* proc/func call stack frame */
@@ -264,6 +266,7 @@ struct CFrame { /* proc/func call stack frame */
ScriptContext *retctx; /* which script context to use after return */
int retarchive; /* which archive to use after return */
SymbolHash *localvars;
+ Object *retMeObj; /* which me obj to use after return */
};
struct LingoEvent {
@@ -309,6 +312,7 @@ public:
void cleanupBuiltins();
void initFuncs();
void initBytecode();
+ void initMethods();
void runTests();
@@ -449,6 +453,7 @@ public:
ScriptContext *_currentScriptContext;
uint16 _currentScriptFunction;
ScriptData *_currentScript;
+ Object *_currentMeObj;
bool _abort;
bool _nextRepeat;
@@ -468,6 +473,7 @@ public:
Common::Array<int> _labelstack;
SymbolHash _builtins;
+ SymbolHash _methods;
int _linenumber;
int _colnumber;
diff --git a/engines/director/module.mk b/engines/director/module.mk
index 058fe2796d..914a5c0e51 100644
--- a/engines/director/module.mk
+++ b/engines/director/module.mk
@@ -30,6 +30,7 @@ MODULE_OBJS = \
lingo/lingo-events.o \
lingo/lingo-funcs.o \
lingo/lingo-lex.o \
+ lingo/lingo-object.o \
lingo/lingo-patcher.o \
lingo/lingo-preprocessor.o \
lingo/lingo-the.o
Commit: 95a70de5c3445bddc19537c60a15332cae3f9398
https://github.com/scummvm/scummvm/commit/95a70de5c3445bddc19537c60a15332cae3f9398
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Clean up LC::call
Changed paths:
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo-code.h
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 2883e80c96..885013eeba 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1250,37 +1250,30 @@ void LC::call(const Common::String &name, int nargs) {
if (debugChannelSet(3, kDebugLingoExec))
g_lingo->printSTUBWithArglist(name.c_str(), nargs, "call:");
- Symbol sym = g_lingo->getHandler(name);
+ Symbol targetSym = Symbol();
+ Symbol funcSym = g_lingo->getHandler(name);
- if (sym.type == VOID) {
+ if (funcSym.type == VOID) {
Datum eventName(name);
eventName.type = VAR;
Datum d = g_lingo->varFetch(eventName);
if (d.type == OBJECT) {
debugC(3, kDebugLingoExec, "Dereferencing object reference: %s to %s", name.c_str(), d.u.obj->name->c_str());
- sym = Symbol();
- sym.type = OBJECT;
- sym.u.obj = d.u.obj;
+ targetSym = Symbol();
+ targetSym.type = OBJECT;
+ targetSym.u.obj = d.u.obj;
}
- }
-
- call(sym, nargs);
-}
-
-void LC::call(const Symbol &sym, int nargs) {
- bool dropArgs = false;
-
- Symbol targetSym;
- Symbol funcSym;
- if (sym.type == OBJECT) {
- targetSym = sym;
Datum methodName = g_lingo->_stack.remove_at(g_lingo->_stack.size() - nargs); // Take method name out of stack
nargs -= 1;
funcSym = targetSym.u.obj->getMethod(*methodName.u.s);
+ call(funcSym, nargs, targetSym);
} else {
- targetSym.type = VOID;
- funcSym = sym;
+ call(funcSym, nargs);
}
+}
+
+void LC::call(const Symbol &funcSym, int nargs, const Symbol &targetSym) {
+ bool dropArgs = false;
if (funcSym.type == VOID) {
warning("Call to undefined handler. Dropping %d stack items", nargs);
diff --git a/engines/director/lingo/lingo-code.h b/engines/director/lingo/lingo-code.h
index cf1a559237..01c1f4c873 100644
--- a/engines/director/lingo/lingo-code.h
+++ b/engines/director/lingo/lingo-code.h
@@ -116,7 +116,7 @@ namespace LC {
void c_jumpifz();
void c_call();
- void call(const Symbol &sym, int nargs);
+ void call(const Symbol &targetSym, int nargs, const Symbol &funcSym = Symbol());
void call(const Common::String &name, int nargs);
void c_procret();
Commit: eef6fbe8316b3287fb5b1aeacc6b2e2d1a0e6b51
https://github.com/scummvm/scummvm/commit/eef6fbe8316b3287fb5b1aeacc6b2e2d1a0e6b51
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Implement m_new
Changed paths:
engines/director/lingo/lingo-object.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index f88906f468..d192c909ee 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -22,6 +22,7 @@
#include "director/director.h"
#include "director/lingo/lingo.h"
+#include "director/lingo/lingo-code.h"
#include "director/lingo/lingo-object.h"
namespace Director {
@@ -72,6 +73,21 @@ void Lingo::initMethods() {
}
}
+Object *Object::clone() {
+ Object *res = new Object;
+ res->name = name;
+ res->type = type;
+ res->prototype = this;
+ res->properties = properties;
+ res->methods = methods;
+ res->inheritanceLevel = inheritanceLevel + 1;
+ res->scriptContext = scriptContext;
+ if (objArray) {
+ res->objArray = new DatumArray(*objArray);
+ }
+ return res;
+}
+
Symbol Object::getMethod(Common::String &methodName, bool ignorePredefined) {
if (!ignorePredefined && g_lingo->_methods.contains(methodName)) {
return g_lingo->_methods[methodName];
@@ -102,9 +118,22 @@ void LM::m_put(int nargs) {
}
void LM::m_new(int nargs) {
- g_lingo->printSTUBWithArglist("m_new", nargs);
- g_lingo->dropStack(nargs);
- g_lingo->pushVoid();
+ Object *clone = g_lingo->_currentMeObj->clone();
+
+ // Call user-defined mNew
+ Common::String methodName("mNew");
+ Symbol userMNew = clone->getMethod(methodName, true);
+ Symbol cloneSym;
+ cloneSym.type = OBJECT;
+ cloneSym.u.obj = clone;
+ if (userMNew.type != VOID) {
+ LC::call(userMNew, nargs, cloneSym);
+ }
+
+ Datum res;
+ res.type = OBJECT;
+ res.u.obj = clone;
+ g_lingo->push(res);
}
}
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index d6d0cbbc7b..a37a901ca7 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -256,6 +256,7 @@ struct Object {
// used only for factories
DatumArray *objArray;
+ Object *clone();
Symbol getMethod(Common::String &methodName, bool ignorePredefined = false);
};
Commit: fddf6dd193622a97d22653928f8667f526fed6a0
https://github.com/scummvm/scummvm/commit/fddf6dd193622a97d22653928f8667f526fed6a0
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Implement instance vars
Changed paths:
engines/director/lingo/lingo-codegen.cpp
engines/director/lingo/lingo-gr.cpp
engines/director/lingo/lingo-gr.h
engines/director/lingo/lingo-gr.y
engines/director/lingo/lingo-object.cpp
engines/director/lingo/lingo.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 21752027af..f06ed50847 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -477,7 +477,11 @@ void Lingo::varCreate(const Common::String &name, bool global) {
if (global)
warning("varCreate: variable %s is local, not global", name.c_str());
return;
- } else if (_globalvars.contains(name)) {
+ } else if (_currentMeObj && _currentMeObj->hasVar(name)) {
+ if (global)
+ warning("varCreate: variable %s is instance or property, not global", name.c_str());
+ return;
+ } else if (_globalvars.contains(name)) {
if (!global)
warning("varCreate: variable %s is global, not local", name.c_str());
return;
@@ -506,6 +510,10 @@ void Lingo::varAssign(Datum &var, Datum &value, bool global) {
sym = &(*_localvars)[name];
if (global)
warning("varAssign: variable %s is local, not global", name.c_str());
+ } else if (_currentMeObj && _currentMeObj->hasVar(name)) {
+ sym = &_currentMeObj->getVar(name);
+ if (global)
+ warning("varAssign: variable %s is instance or property, not global", sym->name->c_str());
} else if (_globalvars.contains(name)) {
sym = &_globalvars[name];
if (!global)
@@ -584,6 +592,10 @@ Datum Lingo::varFetch(Datum &var, bool global) {
sym = &(*_localvars)[name];
if (global)
warning("varFetch: variable %s is local, not global", sym->name->c_str());
+ } else if (_currentMeObj && _currentMeObj->hasVar(name)) {
+ sym = &_currentMeObj->getVar(name);
+ if (global)
+ warning("varFetch: variable %s is instance or property, not global", sym->name->c_str());
} else if (_globalvars.contains(name)) {
sym = &_globalvars[name];
if (!global)
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 642e854eee..0fd9a36256 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -109,6 +109,12 @@ static void startDef() {
inArgs();
g_lingo->_methodVarsStash = g_lingo->_methodVars;
g_lingo->_methodVars = new Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>();
+
+ if (g_lingo->_currentFactory) {
+ for (SymbolHash::iterator i = g_lingo->_currentFactory->properties.begin(); i != g_lingo->_currentFactory->properties.end(); ++i) {
+ (*g_lingo->_methodVars)[i->_key] = kVarInstance;
+ }
+ }
}
static void endDef() {
@@ -116,29 +122,27 @@ static void endDef() {
inNone();
g_lingo->_ignoreMe = false;
- for (Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>::iterator i = g_lingo->_methodVars->begin(); i != g_lingo->_methodVars->end(); ++i) {
- if (i->_value == kVarInstance) {
- if (g_lingo->_currentFactory != nullptr) {
- g_lingo->_currentFactory->properties[i->_key] = Symbol();
- g_lingo->_currentFactory->properties[i->_key].name = new Common::String(i->_key);
- } else {
- warning("Instance var '%s' defined outside factory", i->_key.c_str());
- }
- }
- }
-
delete g_lingo->_methodVars;
g_lingo->_methodVars = g_lingo->_methodVarsStash;
g_lingo->_methodVarsStash = nullptr;
}
static void mVar(Common::String *s, VarType type) {
- if (!g_lingo->_methodVars->contains(*s))
+ if (!g_lingo->_methodVars->contains(*s)) {
(*g_lingo->_methodVars)[*s] = type;
+ if (type == kVarInstance) {
+ if (g_lingo->_currentFactory) {
+ g_lingo->_currentFactory->properties[*s] = Symbol();
+ g_lingo->_currentFactory->properties[*s].name = new Common::String(*s);
+ } else {
+ warning("Instance var '%s' defined outside factory", s->c_str());
+ }
+ }
+ }
}
-#line 142 "engines/director/lingo/lingo-gr.cpp"
+#line 146 "engines/director/lingo/lingo-gr.cpp"
# ifndef YY_CAST
# ifdef __cplusplus
@@ -275,7 +279,7 @@ extern int yydebug;
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
-#line 125 "engines/director/lingo/lingo-gr.y"
+#line 129 "engines/director/lingo/lingo-gr.y"
Common::String *s;
int i;
@@ -295,7 +299,7 @@ union YYSTYPE
Common::String *field;
} objectref;
-#line 299 "engines/director/lingo/lingo-gr.cpp"
+#line 303 "engines/director/lingo/lingo-gr.cpp"
};
typedef union YYSTYPE YYSTYPE;
@@ -848,24 +852,24 @@ static const yytype_int8 yytranslate[] =
/* YYRLINEYYN -- Source line where rule number YYN was defined. */
static const yytype_int16 yyrline[] =
{
- 0, 184, 184, 185, 187, 188, 189, 191, 198, 202,
- 213, 214, 215, 222, 229, 236, 243, 249, 256, 267,
- 274, 275, 276, 278, 279, 284, 296, 300, 303, 295,
- 327, 331, 334, 326, 360, 367, 373, 359, 401, 403,
- 406, 407, 409, 411, 418, 426, 427, 429, 435, 439,
- 443, 447, 450, 452, 453, 454, 456, 459, 462, 466,
- 470, 474, 482, 488, 489, 490, 501, 502, 503, 506,
- 509, 512, 515, 520, 526, 527, 528, 529, 530, 531,
- 532, 533, 534, 535, 536, 537, 538, 539, 540, 541,
- 542, 543, 544, 545, 546, 547, 548, 550, 551, 552,
- 553, 554, 555, 556, 557, 559, 562, 564, 565, 566,
- 567, 568, 569, 569, 570, 570, 571, 571, 572, 575,
- 578, 579, 581, 586, 592, 597, 603, 606, 617, 618,
- 619, 620, 624, 628, 633, 634, 636, 640, 644, 648,
- 648, 678, 678, 678, 684, 685, 685, 691, 699, 705,
- 705, 708, 709, 710, 712, 713, 714, 716, 718, 726,
- 727, 728, 730, 731, 733, 735, 736, 737, 738, 740,
- 741, 743, 744, 746, 750
+ 0, 188, 188, 189, 191, 192, 193, 195, 202, 206,
+ 217, 218, 219, 226, 233, 240, 247, 253, 260, 271,
+ 278, 279, 280, 282, 283, 288, 300, 304, 307, 299,
+ 331, 335, 338, 330, 364, 371, 377, 363, 405, 407,
+ 410, 411, 413, 415, 422, 430, 431, 433, 439, 443,
+ 447, 451, 454, 456, 457, 458, 460, 463, 466, 470,
+ 474, 478, 486, 492, 493, 494, 505, 506, 507, 510,
+ 513, 516, 519, 524, 530, 531, 532, 533, 534, 535,
+ 536, 537, 538, 539, 540, 541, 542, 543, 544, 545,
+ 546, 547, 548, 549, 550, 551, 552, 554, 555, 556,
+ 557, 558, 559, 560, 561, 563, 566, 568, 569, 570,
+ 571, 572, 573, 573, 574, 574, 575, 575, 576, 579,
+ 582, 583, 585, 590, 596, 601, 607, 610, 621, 622,
+ 623, 624, 628, 632, 637, 638, 640, 644, 648, 652,
+ 652, 682, 682, 682, 688, 689, 689, 695, 703, 709,
+ 709, 712, 713, 714, 716, 717, 718, 720, 722, 730,
+ 731, 732, 734, 735, 737, 739, 740, 741, 742, 744,
+ 745, 747, 748, 750, 754
};
#endif
@@ -1928,81 +1932,81 @@ yydestruct (const char *yymsg,
switch (yykind)
{
case 22: /* BLTIN */
-#line 179 "engines/director/lingo/lingo-gr.y"
+#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1934 "engines/director/lingo/lingo-gr.cpp"
+#line 1938 "engines/director/lingo/lingo-gr.cpp"
break;
case 23: /* FBLTIN */
-#line 179 "engines/director/lingo/lingo-gr.y"
+#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1940 "engines/director/lingo/lingo-gr.cpp"
+#line 1944 "engines/director/lingo/lingo-gr.cpp"
break;
case 24: /* RBLTIN */
-#line 179 "engines/director/lingo/lingo-gr.y"
+#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1946 "engines/director/lingo/lingo-gr.cpp"
+#line 1950 "engines/director/lingo/lingo-gr.cpp"
break;
case 25: /* THEFBLTIN */
-#line 179 "engines/director/lingo/lingo-gr.y"
+#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1952 "engines/director/lingo/lingo-gr.cpp"
+#line 1956 "engines/director/lingo/lingo-gr.cpp"
break;
case 26: /* ID */
-#line 179 "engines/director/lingo/lingo-gr.y"
+#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1958 "engines/director/lingo/lingo-gr.cpp"
+#line 1962 "engines/director/lingo/lingo-gr.cpp"
break;
case 27: /* STRING */
-#line 179 "engines/director/lingo/lingo-gr.y"
+#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1964 "engines/director/lingo/lingo-gr.cpp"
+#line 1968 "engines/director/lingo/lingo-gr.cpp"
break;
case 28: /* HANDLER */
-#line 179 "engines/director/lingo/lingo-gr.y"
+#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1970 "engines/director/lingo/lingo-gr.cpp"
+#line 1974 "engines/director/lingo/lingo-gr.cpp"
break;
case 29: /* SYMBOL */
-#line 179 "engines/director/lingo/lingo-gr.y"
+#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1976 "engines/director/lingo/lingo-gr.cpp"
+#line 1980 "engines/director/lingo/lingo-gr.cpp"
break;
case 30: /* ENDCLAUSE */
-#line 179 "engines/director/lingo/lingo-gr.y"
+#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1982 "engines/director/lingo/lingo-gr.cpp"
+#line 1986 "engines/director/lingo/lingo-gr.cpp"
break;
case 31: /* tPLAYACCEL */
-#line 179 "engines/director/lingo/lingo-gr.y"
+#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1988 "engines/director/lingo/lingo-gr.cpp"
+#line 1992 "engines/director/lingo/lingo-gr.cpp"
break;
case 32: /* tMETHOD */
-#line 179 "engines/director/lingo/lingo-gr.y"
+#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1994 "engines/director/lingo/lingo-gr.cpp"
+#line 1998 "engines/director/lingo/lingo-gr.cpp"
break;
case 33: /* THEOBJECTFIELD */
-#line 180 "engines/director/lingo/lingo-gr.y"
+#line 184 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).objectfield).os; }
-#line 2000 "engines/director/lingo/lingo-gr.cpp"
+#line 2004 "engines/director/lingo/lingo-gr.cpp"
break;
case 147: /* on */
-#line 179 "engines/director/lingo/lingo-gr.y"
+#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2006 "engines/director/lingo/lingo-gr.cpp"
+#line 2010 "engines/director/lingo/lingo-gr.cpp"
break;
default:
@@ -2281,7 +2285,7 @@ yyreduce:
switch (yyn)
{
case 7:
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 195 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
@@ -2289,19 +2293,19 @@ yyreduce:
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[-2].code);
delete (yyvsp[0].s); }
-#line 2293 "engines/director/lingo/lingo-gr.cpp"
+#line 2297 "engines/director/lingo/lingo-gr.cpp"
break;
case 8:
-#line 198 "engines/director/lingo/lingo-gr.y"
+#line 202 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[-2].code); }
-#line 2301 "engines/director/lingo/lingo-gr.cpp"
+#line 2305 "engines/director/lingo/lingo-gr.cpp"
break;
case 9:
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 206 "engines/director/lingo/lingo-gr.y"
{
if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
warning("LEXER: keyword 'menu' expected");
@@ -2313,23 +2317,23 @@ yyreduce:
g_lingo->codeInt((yyvsp[-4].e)[1]);
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code); }
-#line 2317 "engines/director/lingo/lingo-gr.cpp"
+#line 2321 "engines/director/lingo/lingo-gr.cpp"
break;
case 10:
-#line 213 "engines/director/lingo/lingo-gr.y"
+#line 217 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_after); }
-#line 2323 "engines/director/lingo/lingo-gr.cpp"
+#line 2327 "engines/director/lingo/lingo-gr.cpp"
break;
case 11:
-#line 214 "engines/director/lingo/lingo-gr.y"
+#line 218 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_before); }
-#line 2329 "engines/director/lingo/lingo-gr.cpp"
+#line 2333 "engines/director/lingo/lingo-gr.cpp"
break;
case 12:
-#line 215 "engines/director/lingo/lingo-gr.y"
+#line 219 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
@@ -2337,11 +2341,11 @@ yyreduce:
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code);
delete (yyvsp[-2].s); }
-#line 2341 "engines/director/lingo/lingo-gr.cpp"
+#line 2345 "engines/director/lingo/lingo-gr.cpp"
break;
case 13:
-#line 222 "engines/director/lingo/lingo-gr.y"
+#line 226 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2349,11 +2353,11 @@ yyreduce:
g_lingo->codeInt((yyvsp[-2].e)[0]);
g_lingo->codeInt((yyvsp[-2].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2353 "engines/director/lingo/lingo-gr.cpp"
+#line 2357 "engines/director/lingo/lingo-gr.cpp"
break;
case 14:
-#line 229 "engines/director/lingo/lingo-gr.y"
+#line 233 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
@@ -2361,11 +2365,11 @@ yyreduce:
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code);
delete (yyvsp[-2].s); }
-#line 2365 "engines/director/lingo/lingo-gr.cpp"
+#line 2369 "engines/director/lingo/lingo-gr.cpp"
break;
case 15:
-#line 236 "engines/director/lingo/lingo-gr.y"
+#line 240 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2373,33 +2377,33 @@ yyreduce:
g_lingo->codeInt((yyvsp[-2].e)[0]);
g_lingo->codeInt((yyvsp[-2].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2377 "engines/director/lingo/lingo-gr.cpp"
+#line 2381 "engines/director/lingo/lingo-gr.cpp"
break;
case 16:
-#line 243 "engines/director/lingo/lingo-gr.y"
+#line 247 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_swap);
g_lingo->code1(LC::c_theentityassign);
g_lingo->codeInt((yyvsp[-3].e)[0]);
g_lingo->codeInt((yyvsp[-3].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2388 "engines/director/lingo/lingo-gr.cpp"
+#line 2392 "engines/director/lingo/lingo-gr.cpp"
break;
case 17:
-#line 249 "engines/director/lingo/lingo-gr.y"
+#line 253 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_swap);
g_lingo->code1(LC::c_theentityassign);
g_lingo->codeInt((yyvsp[-3].e)[0]);
g_lingo->codeInt((yyvsp[-3].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2399 "engines/director/lingo/lingo-gr.cpp"
+#line 2403 "engines/director/lingo/lingo-gr.cpp"
break;
case 18:
-#line 256 "engines/director/lingo/lingo-gr.y"
+#line 260 "engines/director/lingo/lingo-gr.y"
{
if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
warning("LEXER: keyword 'menu' expected");
@@ -2411,54 +2415,54 @@ yyreduce:
g_lingo->codeInt((yyvsp[-6].e)[0]);
g_lingo->codeInt((yyvsp[-6].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2415 "engines/director/lingo/lingo-gr.cpp"
+#line 2419 "engines/director/lingo/lingo-gr.cpp"
break;
case 19:
-#line 267 "engines/director/lingo/lingo-gr.y"
+#line 271 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectfieldassign);
g_lingo->codeString((yyvsp[-2].objectfield).os->c_str());
g_lingo->codeInt((yyvsp[-2].objectfield).oe);
delete (yyvsp[-2].objectfield).os;
(yyval.code) = (yyvsp[0].code); }
-#line 2426 "engines/director/lingo/lingo-gr.cpp"
+#line 2430 "engines/director/lingo/lingo-gr.cpp"
break;
case 25:
-#line 284 "engines/director/lingo/lingo-gr.y"
+#line 288 "engines/director/lingo/lingo-gr.y"
{
inst start = 0, end = 0;
WRITE_UINT32(&start, (yyvsp[-5].code) - (yyvsp[-1].code) + 1);
WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-3].code) + 2);
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = end; /* end, if cond fails */
(*g_lingo->_currentScript)[(yyvsp[-1].code)] = start; }
-#line 2437 "engines/director/lingo/lingo-gr.cpp"
+#line 2441 "engines/director/lingo/lingo-gr.cpp"
break;
case 26:
-#line 296 "engines/director/lingo/lingo-gr.y"
+#line 300 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
mVar((yyvsp[-2].s), kVarLocal); }
-#line 2445 "engines/director/lingo/lingo-gr.cpp"
+#line 2449 "engines/director/lingo/lingo-gr.cpp"
break;
case 27:
-#line 300 "engines/director/lingo/lingo-gr.y"
+#line 304 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2452 "engines/director/lingo/lingo-gr.cpp"
+#line 2456 "engines/director/lingo/lingo-gr.cpp"
break;
case 28:
-#line 303 "engines/director/lingo/lingo-gr.y"
+#line 307 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_le); }
-#line 2458 "engines/director/lingo/lingo-gr.cpp"
+#line 2462 "engines/director/lingo/lingo-gr.cpp"
break;
case 29:
-#line 303 "engines/director/lingo/lingo-gr.y"
+#line 307 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_eval);
@@ -2477,32 +2481,32 @@ yyreduce:
WRITE_UINT32(&end, pos - (yyvsp[-2].code) + 2);
(*g_lingo->_currentScript)[pos] = loop; /* final count value */
(*g_lingo->_currentScript)[(yyvsp[-2].code)] = end; }
-#line 2481 "engines/director/lingo/lingo-gr.cpp"
+#line 2485 "engines/director/lingo/lingo-gr.cpp"
break;
case 30:
-#line 327 "engines/director/lingo/lingo-gr.y"
+#line 331 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
mVar((yyvsp[-2].s), kVarLocal); }
-#line 2489 "engines/director/lingo/lingo-gr.cpp"
+#line 2493 "engines/director/lingo/lingo-gr.cpp"
break;
case 31:
-#line 331 "engines/director/lingo/lingo-gr.y"
+#line 335 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2496 "engines/director/lingo/lingo-gr.cpp"
+#line 2500 "engines/director/lingo/lingo-gr.cpp"
break;
case 32:
-#line 334 "engines/director/lingo/lingo-gr.y"
+#line 338 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ge); }
-#line 2502 "engines/director/lingo/lingo-gr.cpp"
+#line 2506 "engines/director/lingo/lingo-gr.cpp"
break;
case 33:
-#line 335 "engines/director/lingo/lingo-gr.y"
+#line 339 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_eval);
@@ -2521,32 +2525,32 @@ yyreduce:
WRITE_UINT32(&end, pos - (yyvsp[-2].code) + 2);
(*g_lingo->_currentScript)[pos] = loop; /* final count value */
(*g_lingo->_currentScript)[(yyvsp[-2].code)] = end; }
-#line 2525 "engines/director/lingo/lingo-gr.cpp"
+#line 2529 "engines/director/lingo/lingo-gr.cpp"
break;
case 34:
-#line 360 "engines/director/lingo/lingo-gr.y"
+#line 364 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_stackpeek);
g_lingo->codeInt(0);
Common::String count("count");
g_lingo->codeFunc(&count, 1);
g_lingo->code1(LC::c_intpush); // start counter
g_lingo->codeInt(1); }
-#line 2536 "engines/director/lingo/lingo-gr.cpp"
+#line 2540 "engines/director/lingo/lingo-gr.cpp"
break;
case 35:
-#line 367 "engines/director/lingo/lingo-gr.y"
+#line 371 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_stackpeek); // get counter
g_lingo->codeInt(0);
g_lingo->code1(LC::c_stackpeek); // get array size
g_lingo->codeInt(2);
g_lingo->code1(LC::c_le); }
-#line 2546 "engines/director/lingo/lingo-gr.cpp"
+#line 2550 "engines/director/lingo/lingo-gr.cpp"
break;
case 36:
-#line 373 "engines/director/lingo/lingo-gr.y"
+#line 377 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_stackpeek); // get list
g_lingo->codeInt(2);
g_lingo->code1(LC::c_stackpeek); // get counter
@@ -2557,11 +2561,11 @@ yyreduce:
g_lingo->codeString((yyvsp[-6].s)->c_str());
mVar((yyvsp[-6].s), kVarLocal);
g_lingo->code1(LC::c_assign); }
-#line 2561 "engines/director/lingo/lingo-gr.cpp"
+#line 2565 "engines/director/lingo/lingo-gr.cpp"
break;
case 37:
-#line 383 "engines/director/lingo/lingo-gr.y"
+#line 387 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
@@ -2579,44 +2583,44 @@ yyreduce:
(*g_lingo->_currentScript)[jump + 1] = loop; /* final count value */
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = end; }
-#line 2583 "engines/director/lingo/lingo-gr.cpp"
+#line 2587 "engines/director/lingo/lingo-gr.cpp"
break;
case 38:
-#line 401 "engines/director/lingo/lingo-gr.y"
+#line 405 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_nextRepeat); }
-#line 2590 "engines/director/lingo/lingo-gr.cpp"
+#line 2594 "engines/director/lingo/lingo-gr.cpp"
break;
case 39:
-#line 403 "engines/director/lingo/lingo-gr.y"
+#line 407 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_whencode);
g_lingo->codeString((yyvsp[-2].s)->c_str()); }
-#line 2598 "engines/director/lingo/lingo-gr.cpp"
+#line 2602 "engines/director/lingo/lingo-gr.cpp"
break;
case 40:
-#line 406 "engines/director/lingo/lingo-gr.y"
+#line 410 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_telldone); }
-#line 2604 "engines/director/lingo/lingo-gr.cpp"
+#line 2608 "engines/director/lingo/lingo-gr.cpp"
break;
case 41:
-#line 407 "engines/director/lingo/lingo-gr.y"
+#line 411 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_telldone); }
-#line 2610 "engines/director/lingo/lingo-gr.cpp"
+#line 2614 "engines/director/lingo/lingo-gr.cpp"
break;
case 42:
-#line 409 "engines/director/lingo/lingo-gr.y"
+#line 413 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_tell); }
-#line 2616 "engines/director/lingo/lingo-gr.cpp"
+#line 2620 "engines/director/lingo/lingo-gr.cpp"
break;
case 43:
-#line 411 "engines/director/lingo/lingo-gr.y"
+#line 415 "engines/director/lingo/lingo-gr.y"
{
inst else1 = 0, end3 = 0;
WRITE_UINT32(&else1, (yyvsp[-3].code) + 1 - (yyvsp[-6].code) + 1);
@@ -2624,11 +2628,11 @@ yyreduce:
(*g_lingo->_currentScript)[(yyvsp[-6].code)] = else1; /* elsepart */
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = end3; /* end, if cond fails */
g_lingo->processIf((yyvsp[-3].code), (yyvsp[-1].code)); }
-#line 2628 "engines/director/lingo/lingo-gr.cpp"
+#line 2632 "engines/director/lingo/lingo-gr.cpp"
break;
case 44:
-#line 418 "engines/director/lingo/lingo-gr.y"
+#line 422 "engines/director/lingo/lingo-gr.y"
{
inst else1 = 0, end = 0;
WRITE_UINT32(&else1, (yyvsp[-5].code) + 1 - (yyvsp[-8].code) + 1);
@@ -2636,107 +2640,107 @@ yyreduce:
(*g_lingo->_currentScript)[(yyvsp[-8].code)] = else1; /* elsepart */
(*g_lingo->_currentScript)[(yyvsp[-5].code)] = end; /* end, if cond fails */
g_lingo->processIf((yyvsp[-5].code), (yyvsp[-1].code)); }
-#line 2640 "engines/director/lingo/lingo-gr.cpp"
+#line 2644 "engines/director/lingo/lingo-gr.cpp"
break;
case 47:
-#line 429 "engines/director/lingo/lingo-gr.y"
+#line 433 "engines/director/lingo/lingo-gr.y"
{
inst else1 = 0;
WRITE_UINT32(&else1, (yyvsp[0].code) + 1 - (yyvsp[-3].code) + 1);
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = else1; /* end, if cond fails */
g_lingo->codeLabel((yyvsp[0].code)); }
-#line 2650 "engines/director/lingo/lingo-gr.cpp"
+#line 2654 "engines/director/lingo/lingo-gr.cpp"
break;
case 48:
-#line 435 "engines/director/lingo/lingo-gr.y"
+#line 439 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code2(LC::c_jumpifz, 0);
(yyval.code) = g_lingo->_currentScript->size() - 1; }
-#line 2658 "engines/director/lingo/lingo-gr.cpp"
+#line 2662 "engines/director/lingo/lingo-gr.cpp"
break;
case 49:
-#line 439 "engines/director/lingo/lingo-gr.y"
+#line 443 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code2(LC::c_jump, 0);
(yyval.code) = g_lingo->_currentScript->size() - 1; }
-#line 2666 "engines/director/lingo/lingo-gr.cpp"
+#line 2670 "engines/director/lingo/lingo-gr.cpp"
break;
case 50:
-#line 443 "engines/director/lingo/lingo-gr.y"
+#line 447 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_assign);
(yyval.code) = g_lingo->_currentScript->size() - 1; }
-#line 2674 "engines/director/lingo/lingo-gr.cpp"
+#line 2678 "engines/director/lingo/lingo-gr.cpp"
break;
case 51:
-#line 447 "engines/director/lingo/lingo-gr.y"
+#line 451 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeLabel(0); }
-#line 2681 "engines/director/lingo/lingo-gr.cpp"
+#line 2685 "engines/director/lingo/lingo-gr.cpp"
break;
case 52:
-#line 450 "engines/director/lingo/lingo-gr.y"
+#line 454 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2687 "engines/director/lingo/lingo-gr.cpp"
+#line 2691 "engines/director/lingo/lingo-gr.cpp"
break;
case 53:
-#line 452 "engines/director/lingo/lingo-gr.y"
+#line 456 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2693 "engines/director/lingo/lingo-gr.cpp"
+#line 2697 "engines/director/lingo/lingo-gr.cpp"
break;
case 56:
-#line 456 "engines/director/lingo/lingo-gr.y"
+#line 460 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_intpush);
g_lingo->codeInt((yyvsp[0].i)); }
-#line 2701 "engines/director/lingo/lingo-gr.cpp"
+#line 2705 "engines/director/lingo/lingo-gr.cpp"
break;
case 57:
-#line 459 "engines/director/lingo/lingo-gr.y"
+#line 463 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_floatpush);
g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2709 "engines/director/lingo/lingo-gr.cpp"
+#line 2713 "engines/director/lingo/lingo-gr.cpp"
break;
case 58:
-#line 462 "engines/director/lingo/lingo-gr.y"
+#line 466 "engines/director/lingo/lingo-gr.y"
{ // D3
(yyval.code) = g_lingo->code1(LC::c_symbolpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2718 "engines/director/lingo/lingo-gr.cpp"
+#line 2722 "engines/director/lingo/lingo-gr.cpp"
break;
case 59:
-#line 466 "engines/director/lingo/lingo-gr.y"
+#line 470 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_stringpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2727 "engines/director/lingo/lingo-gr.cpp"
+#line 2731 "engines/director/lingo/lingo-gr.cpp"
break;
case 60:
-#line 470 "engines/director/lingo/lingo-gr.y"
+#line 474 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2736 "engines/director/lingo/lingo-gr.cpp"
+#line 2740 "engines/director/lingo/lingo-gr.cpp"
break;
case 61:
-#line 474 "engines/director/lingo/lingo-gr.y"
+#line 478 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2745,28 +2749,28 @@ yyreduce:
WRITE_UINT32(&e, (yyvsp[0].e)[0]);
WRITE_UINT32(&f, (yyvsp[0].e)[1]);
g_lingo->code2(e, f); }
-#line 2749 "engines/director/lingo/lingo-gr.cpp"
+#line 2753 "engines/director/lingo/lingo-gr.cpp"
break;
case 62:
-#line 482 "engines/director/lingo/lingo-gr.y"
+#line 486 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_theentitypush);
inst e = 0, f = 0;
WRITE_UINT32(&e, (yyvsp[-1].e)[0]);
WRITE_UINT32(&f, (yyvsp[-1].e)[1]);
g_lingo->code2(e, f); }
-#line 2760 "engines/director/lingo/lingo-gr.cpp"
+#line 2764 "engines/director/lingo/lingo-gr.cpp"
break;
case 63:
-#line 488 "engines/director/lingo/lingo-gr.y"
+#line 492 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[-1].code); }
-#line 2766 "engines/director/lingo/lingo-gr.cpp"
+#line 2770 "engines/director/lingo/lingo-gr.cpp"
break;
case 65:
-#line 490 "engines/director/lingo/lingo-gr.y"
+#line 494 "engines/director/lingo/lingo-gr.y"
{
// Director parser till D3 was forgiving for any hanging parentheses
if (g_lingo->_ignoreError) {
@@ -2777,527 +2781,527 @@ yyreduce:
yyerrok;
}
}
-#line 2781 "engines/director/lingo/lingo-gr.cpp"
+#line 2785 "engines/director/lingo/lingo-gr.cpp"
break;
case 66:
-#line 501 "engines/director/lingo/lingo-gr.y"
+#line 505 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); }
-#line 2787 "engines/director/lingo/lingo-gr.cpp"
+#line 2791 "engines/director/lingo/lingo-gr.cpp"
break;
case 68:
-#line 503 "engines/director/lingo/lingo-gr.y"
+#line 507 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 2795 "engines/director/lingo/lingo-gr.cpp"
+#line 2799 "engines/director/lingo/lingo-gr.cpp"
break;
case 69:
-#line 506 "engines/director/lingo/lingo-gr.y"
+#line 510 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
delete (yyvsp[-1].s); }
-#line 2803 "engines/director/lingo/lingo-gr.cpp"
+#line 2807 "engines/director/lingo/lingo-gr.cpp"
break;
case 70:
-#line 509 "engines/director/lingo/lingo-gr.y"
+#line 513 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 2811 "engines/director/lingo/lingo-gr.cpp"
+#line 2815 "engines/director/lingo/lingo-gr.cpp"
break;
case 71:
-#line 512 "engines/director/lingo/lingo-gr.y"
+#line 516 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->codeFunc((yyvsp[-2].s), 1);
delete (yyvsp[-2].s); }
-#line 2819 "engines/director/lingo/lingo-gr.cpp"
+#line 2823 "engines/director/lingo/lingo-gr.cpp"
break;
case 72:
-#line 515 "engines/director/lingo/lingo-gr.y"
+#line 519 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectfieldpush);
g_lingo->codeString((yyvsp[0].objectfield).os->c_str());
g_lingo->codeInt((yyvsp[0].objectfield).oe);
delete (yyvsp[0].objectfield).os; }
-#line 2829 "engines/director/lingo/lingo-gr.cpp"
+#line 2833 "engines/director/lingo/lingo-gr.cpp"
break;
case 73:
-#line 520 "engines/director/lingo/lingo-gr.y"
+#line 524 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectrefpush);
g_lingo->codeString((yyvsp[0].objectref).obj->c_str());
g_lingo->codeString((yyvsp[0].objectref).field->c_str());
delete (yyvsp[0].objectref).obj;
delete (yyvsp[0].objectref).field; }
-#line 2840 "engines/director/lingo/lingo-gr.cpp"
+#line 2844 "engines/director/lingo/lingo-gr.cpp"
break;
case 75:
-#line 527 "engines/director/lingo/lingo-gr.y"
+#line 531 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_add); }
-#line 2846 "engines/director/lingo/lingo-gr.cpp"
+#line 2850 "engines/director/lingo/lingo-gr.cpp"
break;
case 76:
-#line 528 "engines/director/lingo/lingo-gr.y"
+#line 532 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_sub); }
-#line 2852 "engines/director/lingo/lingo-gr.cpp"
+#line 2856 "engines/director/lingo/lingo-gr.cpp"
break;
case 77:
-#line 529 "engines/director/lingo/lingo-gr.y"
+#line 533 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_mul); }
-#line 2858 "engines/director/lingo/lingo-gr.cpp"
+#line 2862 "engines/director/lingo/lingo-gr.cpp"
break;
case 78:
-#line 530 "engines/director/lingo/lingo-gr.y"
+#line 534 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_div); }
-#line 2864 "engines/director/lingo/lingo-gr.cpp"
+#line 2868 "engines/director/lingo/lingo-gr.cpp"
break;
case 79:
-#line 531 "engines/director/lingo/lingo-gr.y"
+#line 535 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_mod); }
-#line 2870 "engines/director/lingo/lingo-gr.cpp"
+#line 2874 "engines/director/lingo/lingo-gr.cpp"
break;
case 80:
-#line 532 "engines/director/lingo/lingo-gr.y"
+#line 536 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gt); }
-#line 2876 "engines/director/lingo/lingo-gr.cpp"
+#line 2880 "engines/director/lingo/lingo-gr.cpp"
break;
case 81:
-#line 533 "engines/director/lingo/lingo-gr.y"
+#line 537 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lt); }
-#line 2882 "engines/director/lingo/lingo-gr.cpp"
+#line 2886 "engines/director/lingo/lingo-gr.cpp"
break;
case 82:
-#line 534 "engines/director/lingo/lingo-gr.y"
+#line 538 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eq); }
-#line 2888 "engines/director/lingo/lingo-gr.cpp"
+#line 2892 "engines/director/lingo/lingo-gr.cpp"
break;
case 83:
-#line 535 "engines/director/lingo/lingo-gr.y"
+#line 539 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_neq); }
-#line 2894 "engines/director/lingo/lingo-gr.cpp"
+#line 2898 "engines/director/lingo/lingo-gr.cpp"
break;
case 84:
-#line 536 "engines/director/lingo/lingo-gr.y"
+#line 540 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ge); }
-#line 2900 "engines/director/lingo/lingo-gr.cpp"
+#line 2904 "engines/director/lingo/lingo-gr.cpp"
break;
case 85:
-#line 537 "engines/director/lingo/lingo-gr.y"
+#line 541 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_le); }
-#line 2906 "engines/director/lingo/lingo-gr.cpp"
+#line 2910 "engines/director/lingo/lingo-gr.cpp"
break;
case 86:
-#line 538 "engines/director/lingo/lingo-gr.y"
+#line 542 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_and); }
-#line 2912 "engines/director/lingo/lingo-gr.cpp"
+#line 2916 "engines/director/lingo/lingo-gr.cpp"
break;
case 87:
-#line 539 "engines/director/lingo/lingo-gr.y"
+#line 543 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_or); }
-#line 2918 "engines/director/lingo/lingo-gr.cpp"
+#line 2922 "engines/director/lingo/lingo-gr.cpp"
break;
case 88:
-#line 540 "engines/director/lingo/lingo-gr.y"
+#line 544 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_not); }
-#line 2924 "engines/director/lingo/lingo-gr.cpp"
+#line 2928 "engines/director/lingo/lingo-gr.cpp"
break;
case 89:
-#line 541 "engines/director/lingo/lingo-gr.y"
+#line 545 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ampersand); }
-#line 2930 "engines/director/lingo/lingo-gr.cpp"
+#line 2934 "engines/director/lingo/lingo-gr.cpp"
break;
case 90:
-#line 542 "engines/director/lingo/lingo-gr.y"
+#line 546 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_concat); }
-#line 2936 "engines/director/lingo/lingo-gr.cpp"
+#line 2940 "engines/director/lingo/lingo-gr.cpp"
break;
case 91:
-#line 543 "engines/director/lingo/lingo-gr.y"
+#line 547 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_contains); }
-#line 2942 "engines/director/lingo/lingo-gr.cpp"
+#line 2946 "engines/director/lingo/lingo-gr.cpp"
break;
case 92:
-#line 544 "engines/director/lingo/lingo-gr.y"
+#line 548 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_starts); }
-#line 2948 "engines/director/lingo/lingo-gr.cpp"
+#line 2952 "engines/director/lingo/lingo-gr.cpp"
break;
case 93:
-#line 545 "engines/director/lingo/lingo-gr.y"
+#line 549 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); }
-#line 2954 "engines/director/lingo/lingo-gr.cpp"
+#line 2958 "engines/director/lingo/lingo-gr.cpp"
break;
case 94:
-#line 546 "engines/director/lingo/lingo-gr.y"
+#line 550 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 2960 "engines/director/lingo/lingo-gr.cpp"
+#line 2964 "engines/director/lingo/lingo-gr.cpp"
break;
case 95:
-#line 547 "engines/director/lingo/lingo-gr.y"
+#line 551 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_intersects); }
-#line 2966 "engines/director/lingo/lingo-gr.cpp"
+#line 2970 "engines/director/lingo/lingo-gr.cpp"
break;
case 96:
-#line 548 "engines/director/lingo/lingo-gr.y"
+#line 552 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_within); }
-#line 2972 "engines/director/lingo/lingo-gr.cpp"
+#line 2976 "engines/director/lingo/lingo-gr.cpp"
break;
case 97:
-#line 550 "engines/director/lingo/lingo-gr.y"
+#line 554 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_charOf); }
-#line 2978 "engines/director/lingo/lingo-gr.cpp"
+#line 2982 "engines/director/lingo/lingo-gr.cpp"
break;
case 98:
-#line 551 "engines/director/lingo/lingo-gr.y"
+#line 555 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_charToOf); }
-#line 2984 "engines/director/lingo/lingo-gr.cpp"
+#line 2988 "engines/director/lingo/lingo-gr.cpp"
break;
case 99:
-#line 552 "engines/director/lingo/lingo-gr.y"
+#line 556 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_itemOf); }
-#line 2990 "engines/director/lingo/lingo-gr.cpp"
+#line 2994 "engines/director/lingo/lingo-gr.cpp"
break;
case 100:
-#line 553 "engines/director/lingo/lingo-gr.y"
+#line 557 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_itemToOf); }
-#line 2996 "engines/director/lingo/lingo-gr.cpp"
+#line 3000 "engines/director/lingo/lingo-gr.cpp"
break;
case 101:
-#line 554 "engines/director/lingo/lingo-gr.y"
+#line 558 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lineOf); }
-#line 3002 "engines/director/lingo/lingo-gr.cpp"
+#line 3006 "engines/director/lingo/lingo-gr.cpp"
break;
case 102:
-#line 555 "engines/director/lingo/lingo-gr.y"
+#line 559 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lineToOf); }
-#line 3008 "engines/director/lingo/lingo-gr.cpp"
+#line 3012 "engines/director/lingo/lingo-gr.cpp"
break;
case 103:
-#line 556 "engines/director/lingo/lingo-gr.y"
+#line 560 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_wordOf); }
-#line 3014 "engines/director/lingo/lingo-gr.cpp"
+#line 3018 "engines/director/lingo/lingo-gr.cpp"
break;
case 104:
-#line 557 "engines/director/lingo/lingo-gr.y"
+#line 561 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_wordToOf); }
-#line 3020 "engines/director/lingo/lingo-gr.cpp"
+#line 3024 "engines/director/lingo/lingo-gr.cpp"
break;
case 105:
-#line 559 "engines/director/lingo/lingo-gr.y"
+#line 563 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), 1);
delete (yyvsp[-1].s); }
-#line 3028 "engines/director/lingo/lingo-gr.cpp"
+#line 3032 "engines/director/lingo/lingo-gr.cpp"
break;
case 107:
-#line 564 "engines/director/lingo/lingo-gr.y"
+#line 568 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_printtop); }
-#line 3034 "engines/director/lingo/lingo-gr.cpp"
+#line 3038 "engines/director/lingo/lingo-gr.cpp"
break;
case 110:
-#line 567 "engines/director/lingo/lingo-gr.y"
+#line 571 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_exitRepeat); }
-#line 3040 "engines/director/lingo/lingo-gr.cpp"
+#line 3044 "engines/director/lingo/lingo-gr.cpp"
break;
case 111:
-#line 568 "engines/director/lingo/lingo-gr.y"
+#line 572 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_procret); }
-#line 3046 "engines/director/lingo/lingo-gr.cpp"
+#line 3050 "engines/director/lingo/lingo-gr.cpp"
break;
case 112:
-#line 569 "engines/director/lingo/lingo-gr.y"
+#line 573 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3052 "engines/director/lingo/lingo-gr.cpp"
+#line 3056 "engines/director/lingo/lingo-gr.cpp"
break;
case 113:
-#line 569 "engines/director/lingo/lingo-gr.y"
+#line 573 "engines/director/lingo/lingo-gr.y"
{ inNone(); }
-#line 3058 "engines/director/lingo/lingo-gr.cpp"
+#line 3062 "engines/director/lingo/lingo-gr.cpp"
break;
case 114:
-#line 570 "engines/director/lingo/lingo-gr.y"
+#line 574 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3064 "engines/director/lingo/lingo-gr.cpp"
+#line 3068 "engines/director/lingo/lingo-gr.cpp"
break;
case 115:
-#line 570 "engines/director/lingo/lingo-gr.y"
+#line 574 "engines/director/lingo/lingo-gr.y"
{ inNone(); }
-#line 3070 "engines/director/lingo/lingo-gr.cpp"
+#line 3074 "engines/director/lingo/lingo-gr.cpp"
break;
case 116:
-#line 571 "engines/director/lingo/lingo-gr.y"
+#line 575 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3076 "engines/director/lingo/lingo-gr.cpp"
+#line 3080 "engines/director/lingo/lingo-gr.cpp"
break;
case 117:
-#line 571 "engines/director/lingo/lingo-gr.y"
+#line 575 "engines/director/lingo/lingo-gr.y"
{ inNone(); }
-#line 3082 "engines/director/lingo/lingo-gr.cpp"
+#line 3086 "engines/director/lingo/lingo-gr.cpp"
break;
case 118:
-#line 572 "engines/director/lingo/lingo-gr.y"
+#line 576 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 3090 "engines/director/lingo/lingo-gr.cpp"
+#line 3094 "engines/director/lingo/lingo-gr.cpp"
break;
case 119:
-#line 575 "engines/director/lingo/lingo-gr.y"
+#line 579 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
delete (yyvsp[-1].s); }
-#line 3098 "engines/director/lingo/lingo-gr.cpp"
+#line 3102 "engines/director/lingo/lingo-gr.cpp"
break;
case 120:
-#line 578 "engines/director/lingo/lingo-gr.y"
+#line 582 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_open); }
-#line 3104 "engines/director/lingo/lingo-gr.cpp"
+#line 3108 "engines/director/lingo/lingo-gr.cpp"
break;
case 121:
-#line 579 "engines/director/lingo/lingo-gr.y"
+#line 583 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code2(LC::c_voidpush, LC::c_open); }
-#line 3110 "engines/director/lingo/lingo-gr.cpp"
+#line 3114 "engines/director/lingo/lingo-gr.cpp"
break;
case 122:
-#line 581 "engines/director/lingo/lingo-gr.y"
+#line 585 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_global);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarGlobal);
delete (yyvsp[0].s); }
-#line 3120 "engines/director/lingo/lingo-gr.cpp"
+#line 3124 "engines/director/lingo/lingo-gr.cpp"
break;
case 123:
-#line 586 "engines/director/lingo/lingo-gr.y"
+#line 590 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_global);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarGlobal);
delete (yyvsp[0].s); }
-#line 3130 "engines/director/lingo/lingo-gr.cpp"
+#line 3134 "engines/director/lingo/lingo-gr.cpp"
break;
case 124:
-#line 592 "engines/director/lingo/lingo-gr.y"
+#line 596 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_property);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarProperty);
delete (yyvsp[0].s); }
-#line 3140 "engines/director/lingo/lingo-gr.cpp"
+#line 3144 "engines/director/lingo/lingo-gr.cpp"
break;
case 125:
-#line 597 "engines/director/lingo/lingo-gr.y"
+#line 601 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_property);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarProperty);
delete (yyvsp[0].s); }
-#line 3150 "engines/director/lingo/lingo-gr.cpp"
+#line 3154 "engines/director/lingo/lingo-gr.cpp"
break;
case 126:
-#line 603 "engines/director/lingo/lingo-gr.y"
+#line 607 "engines/director/lingo/lingo-gr.y"
{
mVar((yyvsp[0].s), kVarInstance);
delete (yyvsp[0].s); }
-#line 3158 "engines/director/lingo/lingo-gr.cpp"
+#line 3162 "engines/director/lingo/lingo-gr.cpp"
break;
case 127:
-#line 606 "engines/director/lingo/lingo-gr.y"
+#line 610 "engines/director/lingo/lingo-gr.y"
{
mVar((yyvsp[0].s), kVarInstance);
delete (yyvsp[0].s); }
-#line 3166 "engines/director/lingo/lingo-gr.cpp"
+#line 3170 "engines/director/lingo/lingo-gr.cpp"
break;
case 128:
-#line 617 "engines/director/lingo/lingo-gr.y"
+#line 621 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotoloop); }
-#line 3172 "engines/director/lingo/lingo-gr.cpp"
+#line 3176 "engines/director/lingo/lingo-gr.cpp"
break;
case 129:
-#line 618 "engines/director/lingo/lingo-gr.y"
+#line 622 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotonext); }
-#line 3178 "engines/director/lingo/lingo-gr.cpp"
+#line 3182 "engines/director/lingo/lingo-gr.cpp"
break;
case 130:
-#line 619 "engines/director/lingo/lingo-gr.y"
+#line 623 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotoprevious); }
-#line 3184 "engines/director/lingo/lingo-gr.cpp"
+#line 3188 "engines/director/lingo/lingo-gr.cpp"
break;
case 131:
-#line 620 "engines/director/lingo/lingo-gr.y"
+#line 624 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(1);
g_lingo->code1(LC::c_goto); }
-#line 3193 "engines/director/lingo/lingo-gr.cpp"
+#line 3197 "engines/director/lingo/lingo-gr.cpp"
break;
case 132:
-#line 624 "engines/director/lingo/lingo-gr.y"
+#line 628 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(3);
g_lingo->code1(LC::c_goto); }
-#line 3202 "engines/director/lingo/lingo-gr.cpp"
+#line 3206 "engines/director/lingo/lingo-gr.cpp"
break;
case 133:
-#line 628 "engines/director/lingo/lingo-gr.y"
+#line 632 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(2);
g_lingo->code1(LC::c_goto); }
-#line 3211 "engines/director/lingo/lingo-gr.cpp"
+#line 3215 "engines/director/lingo/lingo-gr.cpp"
break;
case 136:
-#line 636 "engines/director/lingo/lingo-gr.y"
+#line 640 "engines/director/lingo/lingo-gr.y"
{ // "play #done" is also caught by this
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(1);
g_lingo->code1(LC::c_play); }
-#line 3220 "engines/director/lingo/lingo-gr.cpp"
+#line 3224 "engines/director/lingo/lingo-gr.cpp"
break;
case 137:
-#line 640 "engines/director/lingo/lingo-gr.y"
+#line 644 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(3);
g_lingo->code1(LC::c_play); }
-#line 3229 "engines/director/lingo/lingo-gr.cpp"
+#line 3233 "engines/director/lingo/lingo-gr.cpp"
break;
case 138:
-#line 644 "engines/director/lingo/lingo-gr.y"
+#line 648 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(2);
g_lingo->code1(LC::c_play); }
-#line 3238 "engines/director/lingo/lingo-gr.cpp"
+#line 3242 "engines/director/lingo/lingo-gr.cpp"
break;
case 139:
-#line 648 "engines/director/lingo/lingo-gr.y"
+#line 652 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeSetImmediate(true); }
-#line 3244 "engines/director/lingo/lingo-gr.cpp"
+#line 3248 "engines/director/lingo/lingo-gr.cpp"
break;
case 140:
-#line 648 "engines/director/lingo/lingo-gr.y"
+#line 652 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeSetImmediate(false);
g_lingo->codeFunc((yyvsp[-2].s), (yyvsp[0].narg));
delete (yyvsp[-2].s); }
-#line 3253 "engines/director/lingo/lingo-gr.cpp"
+#line 3257 "engines/director/lingo/lingo-gr.cpp"
break;
case 141:
-#line 678 "engines/director/lingo/lingo-gr.y"
+#line 682 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3259 "engines/director/lingo/lingo-gr.cpp"
+#line 3263 "engines/director/lingo/lingo-gr.cpp"
break;
case 142:
-#line 678 "engines/director/lingo/lingo-gr.y"
+#line 682 "engines/director/lingo/lingo-gr.y"
{ g_lingo->_currentFactory = NULL; }
-#line 3265 "engines/director/lingo/lingo-gr.cpp"
+#line 3269 "engines/director/lingo/lingo-gr.cpp"
break;
case 143:
-#line 679 "engines/director/lingo/lingo-gr.y"
+#line 683 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg));
endDef();
delete (yyvsp[-6].s); }
-#line 3275 "engines/director/lingo/lingo-gr.cpp"
+#line 3279 "engines/director/lingo/lingo-gr.cpp"
break;
case 144:
-#line 684 "engines/director/lingo/lingo-gr.y"
+#line 688 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 3281 "engines/director/lingo/lingo-gr.cpp"
+#line 3285 "engines/director/lingo/lingo-gr.cpp"
break;
case 145:
-#line 685 "engines/director/lingo/lingo-gr.y"
+#line 689 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3287 "engines/director/lingo/lingo-gr.cpp"
+#line 3291 "engines/director/lingo/lingo-gr.cpp"
break;
case 146:
-#line 686 "engines/director/lingo/lingo-gr.y"
+#line 690 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg) + 1, g_lingo->_currentFactory);
endDef();
delete (yyvsp[-6].s); }
-#line 3297 "engines/director/lingo/lingo-gr.cpp"
+#line 3301 "engines/director/lingo/lingo-gr.cpp"
break;
case 147:
-#line 691 "engines/director/lingo/lingo-gr.y"
+#line 695 "engines/director/lingo/lingo-gr.y"
{ // D3
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-7].s), (yyvsp[-6].code), (yyvsp[-5].narg));
@@ -3306,70 +3310,70 @@ yyreduce:
checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
delete (yyvsp[-7].s);
delete (yyvsp[-1].s); }
-#line 3310 "engines/director/lingo/lingo-gr.cpp"
+#line 3314 "engines/director/lingo/lingo-gr.cpp"
break;
case 148:
-#line 699 "engines/director/lingo/lingo-gr.y"
+#line 703 "engines/director/lingo/lingo-gr.y"
{ // D4. No 'end' clause
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
endDef();
delete (yyvsp[-5].s); }
-#line 3320 "engines/director/lingo/lingo-gr.cpp"
+#line 3324 "engines/director/lingo/lingo-gr.cpp"
break;
case 149:
-#line 705 "engines/director/lingo/lingo-gr.y"
+#line 709 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3326 "engines/director/lingo/lingo-gr.cpp"
+#line 3330 "engines/director/lingo/lingo-gr.cpp"
break;
case 150:
-#line 705 "engines/director/lingo/lingo-gr.y"
+#line 709 "engines/director/lingo/lingo-gr.y"
{
(yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory = NULL; g_lingo->_ignoreMe = true; }
-#line 3333 "engines/director/lingo/lingo-gr.cpp"
+#line 3337 "engines/director/lingo/lingo-gr.cpp"
break;
case 151:
-#line 708 "engines/director/lingo/lingo-gr.y"
+#line 712 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 0; }
-#line 3339 "engines/director/lingo/lingo-gr.cpp"
+#line 3343 "engines/director/lingo/lingo-gr.cpp"
break;
case 152:
-#line 709 "engines/director/lingo/lingo-gr.y"
+#line 713 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); (yyval.narg) = 1; delete (yyvsp[0].s); }
-#line 3345 "engines/director/lingo/lingo-gr.cpp"
+#line 3349 "engines/director/lingo/lingo-gr.cpp"
break;
case 153:
-#line 710 "engines/director/lingo/lingo-gr.y"
+#line 714 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
-#line 3351 "engines/director/lingo/lingo-gr.cpp"
+#line 3355 "engines/director/lingo/lingo-gr.cpp"
break;
case 155:
-#line 713 "engines/director/lingo/lingo-gr.y"
+#line 717 "engines/director/lingo/lingo-gr.y"
{ delete (yyvsp[0].s); }
-#line 3357 "engines/director/lingo/lingo-gr.cpp"
+#line 3361 "engines/director/lingo/lingo-gr.cpp"
break;
case 156:
-#line 714 "engines/director/lingo/lingo-gr.y"
+#line 718 "engines/director/lingo/lingo-gr.y"
{ delete (yyvsp[0].s); }
-#line 3363 "engines/director/lingo/lingo-gr.cpp"
+#line 3367 "engines/director/lingo/lingo-gr.cpp"
break;
case 157:
-#line 716 "engines/director/lingo/lingo-gr.y"
+#line 720 "engines/director/lingo/lingo-gr.y"
{ inDef(); }
-#line 3369 "engines/director/lingo/lingo-gr.cpp"
+#line 3373 "engines/director/lingo/lingo-gr.cpp"
break;
case 158:
-#line 718 "engines/director/lingo/lingo-gr.y"
+#line 722 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_call);
g_lingo->codeString((yyvsp[-1].s)->c_str());
@@ -3377,113 +3381,113 @@ yyreduce:
WRITE_UINT32(&numpar, (yyvsp[0].narg));
g_lingo->code1(numpar);
delete (yyvsp[-1].s); }
-#line 3381 "engines/director/lingo/lingo-gr.cpp"
+#line 3385 "engines/director/lingo/lingo-gr.cpp"
break;
case 159:
-#line 726 "engines/director/lingo/lingo-gr.y"
+#line 730 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 0; }
-#line 3387 "engines/director/lingo/lingo-gr.cpp"
+#line 3391 "engines/director/lingo/lingo-gr.cpp"
break;
case 160:
-#line 727 "engines/director/lingo/lingo-gr.y"
+#line 731 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3393 "engines/director/lingo/lingo-gr.cpp"
+#line 3397 "engines/director/lingo/lingo-gr.cpp"
break;
case 161:
-#line 728 "engines/director/lingo/lingo-gr.y"
+#line 732 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3399 "engines/director/lingo/lingo-gr.cpp"
+#line 3403 "engines/director/lingo/lingo-gr.cpp"
break;
case 162:
-#line 730 "engines/director/lingo/lingo-gr.y"
+#line 734 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3405 "engines/director/lingo/lingo-gr.cpp"
+#line 3409 "engines/director/lingo/lingo-gr.cpp"
break;
case 163:
-#line 731 "engines/director/lingo/lingo-gr.y"
+#line 735 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3411 "engines/director/lingo/lingo-gr.cpp"
+#line 3415 "engines/director/lingo/lingo-gr.cpp"
break;
case 164:
-#line 733 "engines/director/lingo/lingo-gr.y"
+#line 737 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[-1].code); }
-#line 3417 "engines/director/lingo/lingo-gr.cpp"
+#line 3421 "engines/director/lingo/lingo-gr.cpp"
break;
case 165:
-#line 735 "engines/director/lingo/lingo-gr.y"
+#line 739 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3423 "engines/director/lingo/lingo-gr.cpp"
+#line 3427 "engines/director/lingo/lingo-gr.cpp"
break;
case 166:
-#line 736 "engines/director/lingo/lingo-gr.y"
+#line 740 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3429 "engines/director/lingo/lingo-gr.cpp"
+#line 3433 "engines/director/lingo/lingo-gr.cpp"
break;
case 167:
-#line 737 "engines/director/lingo/lingo-gr.y"
+#line 741 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3435 "engines/director/lingo/lingo-gr.cpp"
+#line 3439 "engines/director/lingo/lingo-gr.cpp"
break;
case 168:
-#line 738 "engines/director/lingo/lingo-gr.y"
+#line 742 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3441 "engines/director/lingo/lingo-gr.cpp"
+#line 3445 "engines/director/lingo/lingo-gr.cpp"
break;
case 169:
-#line 740 "engines/director/lingo/lingo-gr.y"
+#line 744 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3447 "engines/director/lingo/lingo-gr.cpp"
+#line 3451 "engines/director/lingo/lingo-gr.cpp"
break;
case 170:
-#line 741 "engines/director/lingo/lingo-gr.y"
+#line 745 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3453 "engines/director/lingo/lingo-gr.cpp"
+#line 3457 "engines/director/lingo/lingo-gr.cpp"
break;
case 171:
-#line 743 "engines/director/lingo/lingo-gr.y"
+#line 747 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3459 "engines/director/lingo/lingo-gr.cpp"
+#line 3463 "engines/director/lingo/lingo-gr.cpp"
break;
case 172:
-#line 744 "engines/director/lingo/lingo-gr.y"
+#line 748 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3465 "engines/director/lingo/lingo-gr.cpp"
+#line 3469 "engines/director/lingo/lingo-gr.cpp"
break;
case 173:
-#line 746 "engines/director/lingo/lingo-gr.y"
+#line 750 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_symbolpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
delete (yyvsp[-2].s); }
-#line 3474 "engines/director/lingo/lingo-gr.cpp"
+#line 3478 "engines/director/lingo/lingo-gr.cpp"
break;
case 174:
-#line 750 "engines/director/lingo/lingo-gr.y"
+#line 754 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_stringpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
delete (yyvsp[-2].s); }
-#line 3483 "engines/director/lingo/lingo-gr.cpp"
+#line 3487 "engines/director/lingo/lingo-gr.cpp"
break;
-#line 3487 "engines/director/lingo/lingo-gr.cpp"
+#line 3491 "engines/director/lingo/lingo-gr.cpp"
default: break;
}
@@ -3682,7 +3686,7 @@ yyreturn:
return yyresult;
}
-#line 756 "engines/director/lingo/lingo-gr.y"
+#line 760 "engines/director/lingo/lingo-gr.y"
int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index b8ef3f1baf..303bd41d2d 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -147,7 +147,7 @@ extern int yydebug;
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
-#line 125 "engines/director/lingo/lingo-gr.y"
+#line 129 "engines/director/lingo/lingo-gr.y"
Common::String *s;
int i;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index d5ea403d43..8005eb2612 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -92,6 +92,12 @@ static void startDef() {
inArgs();
g_lingo->_methodVarsStash = g_lingo->_methodVars;
g_lingo->_methodVars = new Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>();
+
+ if (g_lingo->_currentFactory) {
+ for (SymbolHash::iterator i = g_lingo->_currentFactory->properties.begin(); i != g_lingo->_currentFactory->properties.end(); ++i) {
+ (*g_lingo->_methodVars)[i->_key] = kVarInstance;
+ }
+ }
}
static void endDef() {
@@ -99,25 +105,23 @@ static void endDef() {
inNone();
g_lingo->_ignoreMe = false;
- for (Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>::iterator i = g_lingo->_methodVars->begin(); i != g_lingo->_methodVars->end(); ++i) {
- if (i->_value == kVarInstance) {
- if (g_lingo->_currentFactory != nullptr) {
- g_lingo->_currentFactory->properties[i->_key] = Symbol();
- g_lingo->_currentFactory->properties[i->_key].name = new Common::String(i->_key);
- } else {
- warning("Instance var '%s' defined outside factory", i->_key.c_str());
- }
- }
- }
-
delete g_lingo->_methodVars;
g_lingo->_methodVars = g_lingo->_methodVarsStash;
g_lingo->_methodVarsStash = nullptr;
}
static void mVar(Common::String *s, VarType type) {
- if (!g_lingo->_methodVars->contains(*s))
+ if (!g_lingo->_methodVars->contains(*s)) {
(*g_lingo->_methodVars)[*s] = type;
+ if (type == kVarInstance) {
+ if (g_lingo->_currentFactory) {
+ g_lingo->_currentFactory->properties[*s] = Symbol();
+ g_lingo->_currentFactory->properties[*s].name = new Common::String(*s);
+ } else {
+ warning("Instance var '%s' defined outside factory", s->c_str());
+ }
+ }
+ }
}
%}
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index d192c909ee..1d10017d7e 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -88,7 +88,7 @@ Object *Object::clone() {
return res;
}
-Symbol Object::getMethod(Common::String &methodName, bool ignorePredefined) {
+Symbol Object::getMethod(const Common::String &methodName, bool ignorePredefined) {
if (!ignorePredefined && g_lingo->_methods.contains(methodName)) {
return g_lingo->_methods[methodName];
}
@@ -99,6 +99,19 @@ Symbol Object::getMethod(Common::String &methodName, bool ignorePredefined) {
return Symbol();
}
+bool Object::hasVar(const Common::String &varName) {
+ // Factory object instance vars are accessed like normal vars
+ // Script object properties cannot be accessed like normal vars until D5
+ if (type == kScriptObj && g_lingo->_vm->getVersion() < 5) {
+ return false;
+ }
+ return properties.contains(varName);
+}
+
+Symbol &Object::getVar(const Common::String &varName) {
+ return properties[varName];
+}
+
void LM::m_dispose(int nargs) {
g_lingo->printSTUBWithArglist("m_dispose", nargs);
g_lingo->dropStack(nargs);
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 1f0442fb86..ad568f4641 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -149,6 +149,7 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
_currentScriptType = kMovieScript;
_currentScriptContext = nullptr;
_currentScriptFunction = 0;
+ _currentMeObj = nullptr;
_currentEntityId = 0;
_currentChannelId = -1;
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index a37a901ca7..4779d5b7eb 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -257,7 +257,9 @@ struct Object {
DatumArray *objArray;
Object *clone();
- Symbol getMethod(Common::String &methodName, bool ignorePredefined = false);
+ Symbol getMethod(const Common::String &methodName, bool ignorePredefined = false);
+ bool hasVar(const Common::String &varName);
+ Symbol &getVar(const Common::String &varName);
};
struct CFrame { /* proc/func call stack frame */
Commit: ccba7503e0c72f3d7fc109f702c28b158aec9a8d
https://github.com/scummvm/scummvm/commit/ccba7503e0c72f3d7fc109f702c28b158aec9a8d
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Implement me
Changed paths:
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo-codegen.cpp
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 885013eeba..ac6b9647b8 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -354,14 +354,6 @@ void LC::c_varpush() {
return;
}
- if (name.equalsIgnoreCase("me")) {
- warning("c_varpush: ME");
- }
-
- if (name.equalsIgnoreCase("ancestor")) {
- warning("c_varpush: ANCESTOR");
- }
-
// Looking for the cast member constants
if (g_director->getVersion() < 4) { // TODO: There could be a flag 'Allow Outdated Lingo' in Movie Info in D4
int val = castNumToNum(name.c_str());
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index f06ed50847..ea5ec5443a 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -588,6 +588,11 @@ Datum Lingo::varFetch(Datum &var, bool global) {
Symbol *sym = nullptr;
Common::String name = *var.u.s;
+ if (_currentMeObj != nullptr && name.equalsIgnoreCase("me")) {
+ result.type = OBJECT;
+ result.u.obj = _currentMeObj;
+ return result;
+ }
if (_localvars && _localvars->contains(name)) {
sym = &(*_localvars)[name];
if (global)
Commit: e39fa921786ae2fbecd1e1e2b35f7762ef3ba7f5
https://github.com/scummvm/scummvm/commit/e39fa921786ae2fbecd1e1e2b35f7762ef3ba7f5
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Implement object array
Changed paths:
engines/director/lingo/lingo-codegen.cpp
engines/director/lingo/lingo-object.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index ea5ec5443a..9a2d6f0195 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -661,7 +661,7 @@ void Lingo::codeFactory(Common::String &name) {
obj->type = kFactoryObj;
obj->inheritanceLevel = 1;
obj->scriptContext = _currentScriptContext;
- obj->objArray = new DatumArray;
+ obj->objArray = new Common::HashMap<uint32, Datum>;
_currentFactory = obj;
if (!_globalvars.contains(name)) {
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 1d10017d7e..95e6aac66e 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -83,7 +83,7 @@ Object *Object::clone() {
res->inheritanceLevel = inheritanceLevel + 1;
res->scriptContext = scriptContext;
if (objArray) {
- res->objArray = new DatumArray(*objArray);
+ res->objArray = new Common::HashMap<uint, Datum>(*objArray);
}
return res;
}
@@ -119,15 +119,20 @@ void LM::m_dispose(int nargs) {
}
void LM::m_get(int nargs) {
- g_lingo->printSTUBWithArglist("m_get", nargs);
- g_lingo->dropStack(nargs);
- g_lingo->pushVoid();
+ Datum indexD = g_lingo->pop();
+ uint index = MAX(0, indexD.asInt());
+ if (g_lingo->_currentMeObj->objArray->contains(index)) {
+ g_lingo->push((*g_lingo->_currentMeObj->objArray)[index]);
+ } else {
+ g_lingo->push(Datum(0));
+ }
}
void LM::m_put(int nargs) {
- g_lingo->printSTUBWithArglist("m_put", nargs);
- g_lingo->dropStack(nargs);
- g_lingo->pushVoid();
+ Datum value = g_lingo->pop();
+ Datum indexD = g_lingo->pop();
+ uint index = MAX(0, indexD.asInt());
+ (*g_lingo->_currentMeObj->objArray)[index] = value;
}
void LM::m_new(int nargs) {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 4779d5b7eb..cd65be5d9f 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -254,7 +254,7 @@ struct Object {
ScriptContext *scriptContext;
// used only for factories
- DatumArray *objArray;
+ Common::HashMap<uint, Datum> *objArray;
Object *clone();
Symbol getMethod(const Common::String &methodName, bool ignorePredefined = false);
Commit: c855e1ad6e23d065f7c307ee1b0fd43722b09bc2
https://github.com/scummvm/scummvm/commit/c855e1ad6e23d065f7c307ee1b0fd43722b09bc2
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Add factory debugging
Changed paths:
engines/director/lingo/lingo-codegen.cpp
engines/director/lingo/lingo.cpp
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 9a2d6f0195..e6e0c3f3d9 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -67,6 +67,8 @@ void Lingo::execute(uint pc) {
if (debugChannelSet(9, kDebugLingoExec)) {
debug("Vars before");
printAllVars();
+ if (_currentMeObj)
+ debug("me: %s", _currentMeObj->name->c_str());
}
debugC(1, kDebugLingoExec, "[%3d]: %s", current, instr.c_str());
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index ad568f4641..58beef6931 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -835,6 +835,14 @@ void Lingo::printAllVars() {
}
debugN("\n");
+ if (_currentMeObj) {
+ debugN(" Instance/property vars: ");
+ for (SymbolHash::iterator i = _currentMeObj->properties.begin(); i != _currentMeObj->properties.end(); ++i) {
+ debugN("%s, ", (*i)._key.c_str());
+ }
+ debugN("\n");
+ }
+
debugN(" Global vars: ");
for (SymbolHash::iterator i = _globalvars.begin(); i != _globalvars.end(); ++i) {
debugN("%s, ", (*i)._key.c_str());
Commit: 8274f76dee2daaa91d6d1d3fbf8569de774eba15
https://github.com/scummvm/scummvm/commit/8274f76dee2daaa91d6d1d3fbf8569de774eba15
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Clean up factory code
Changed paths:
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo-code.h
engines/director/lingo/lingo-gr.cpp
engines/director/lingo/lingo-gr.y
engines/director/lingo/lingo-object.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index ac6b9647b8..2c12bb5fae 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1242,7 +1242,6 @@ void LC::call(const Common::String &name, int nargs) {
if (debugChannelSet(3, kDebugLingoExec))
g_lingo->printSTUBWithArglist(name.c_str(), nargs, "call:");
- Symbol targetSym = Symbol();
Symbol funcSym = g_lingo->getHandler(name);
if (funcSym.type == VOID) {
@@ -1251,20 +1250,18 @@ void LC::call(const Common::String &name, int nargs) {
Datum d = g_lingo->varFetch(eventName);
if (d.type == OBJECT) {
debugC(3, kDebugLingoExec, "Dereferencing object reference: %s to %s", name.c_str(), d.u.obj->name->c_str());
- targetSym = Symbol();
- targetSym.type = OBJECT;
- targetSym.u.obj = d.u.obj;
+ Object *target = d.u.obj;
+ Datum methodName = g_lingo->_stack.remove_at(g_lingo->_stack.size() - nargs); // Take method name out of stack
+ nargs -= 1;
+ funcSym = target->getMethod(*methodName.u.s);
+ call(funcSym, nargs, target);
+ return;
}
- Datum methodName = g_lingo->_stack.remove_at(g_lingo->_stack.size() - nargs); // Take method name out of stack
- nargs -= 1;
- funcSym = targetSym.u.obj->getMethod(*methodName.u.s);
- call(funcSym, nargs, targetSym);
- } else {
- call(funcSym, nargs);
}
+ call(funcSym, nargs);
}
-void LC::call(const Symbol &funcSym, int nargs, const Symbol &targetSym) {
+void LC::call(const Symbol &funcSym, int nargs, Object *target) {
bool dropArgs = false;
if (funcSym.type == VOID) {
@@ -1302,11 +1299,11 @@ void LC::call(const Symbol &funcSym, int nargs, const Symbol &targetSym) {
if (funcSym.type == BLTIN || funcSym.type == FBLTIN || funcSym.type == RBLTIN) {
int stackSize = g_lingo->_stack.size() - nargs;
- if (targetSym.type == OBJECT) {
+ if (target) {
// Only need to update the me obj
// Pushing an entire stack frame is not necessary
Object *retMeObj = g_lingo->_currentMeObj;
- g_lingo->_currentMeObj = targetSym.u.obj;
+ g_lingo->_currentMeObj = target;
(*funcSym.u.bltin)(nargs);
g_lingo->_currentMeObj = retMeObj;
} else {
@@ -1382,6 +1379,12 @@ void LC::call(const Symbol &funcSym, int nargs, const Symbol &targetSym) {
}
}
+ if (target) {
+ g_lingo->_currentMeObj = target;
+ } else {
+ g_lingo->_currentMeObj = nullptr;
+ }
+
fp->sp = funcSym;
g_lingo->_callstack.push_back(fp);
@@ -1397,12 +1400,6 @@ void LC::call(const Symbol &funcSym, int nargs, const Symbol &targetSym) {
g_lingo->_archiveIndex = funcSym.archiveIndex;
g_lingo->_pc = 0;
-
- if (targetSym.type == OBJECT) {
- g_lingo->_currentMeObj = targetSym.u.obj;
- } else {
- g_lingo->_currentMeObj = nullptr;
- }
}
void LC::c_procret() {
diff --git a/engines/director/lingo/lingo-code.h b/engines/director/lingo/lingo-code.h
index 01c1f4c873..21c642141d 100644
--- a/engines/director/lingo/lingo-code.h
+++ b/engines/director/lingo/lingo-code.h
@@ -116,7 +116,7 @@ namespace LC {
void c_jumpifz();
void c_call();
- void call(const Symbol &targetSym, int nargs, const Symbol &funcSym = Symbol());
+ void call(const Symbol &targetSym, int nargs, Object *target = nullptr);
void call(const Common::String &name, int nargs);
void c_procret();
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 0fd9a36256..cc414c1d77 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -110,7 +110,7 @@ static void startDef() {
g_lingo->_methodVarsStash = g_lingo->_methodVars;
g_lingo->_methodVars = new Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>();
- if (g_lingo->_currentFactory) {
+ if (g_lingo->_inFactory) {
for (SymbolHash::iterator i = g_lingo->_currentFactory->properties.begin(); i != g_lingo->_currentFactory->properties.end(); ++i) {
(*g_lingo->_methodVars)[i->_key] = kVarInstance;
}
@@ -131,7 +131,7 @@ static void mVar(Common::String *s, VarType type) {
if (!g_lingo->_methodVars->contains(*s)) {
(*g_lingo->_methodVars)[*s] = type;
if (type == kVarInstance) {
- if (g_lingo->_currentFactory) {
+ if (g_lingo->_inFactory) {
g_lingo->_currentFactory->properties[*s] = Symbol();
g_lingo->_currentFactory->properties[*s].name = new Common::String(*s);
} else {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 8005eb2612..6573bcfb00 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -93,7 +93,7 @@ static void startDef() {
g_lingo->_methodVarsStash = g_lingo->_methodVars;
g_lingo->_methodVars = new Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo>();
- if (g_lingo->_currentFactory) {
+ if (g_lingo->_inFactory) {
for (SymbolHash::iterator i = g_lingo->_currentFactory->properties.begin(); i != g_lingo->_currentFactory->properties.end(); ++i) {
(*g_lingo->_methodVars)[i->_key] = kVarInstance;
}
@@ -114,7 +114,7 @@ static void mVar(Common::String *s, VarType type) {
if (!g_lingo->_methodVars->contains(*s)) {
(*g_lingo->_methodVars)[*s] = type;
if (type == kVarInstance) {
- if (g_lingo->_currentFactory) {
+ if (g_lingo->_inFactory) {
g_lingo->_currentFactory->properties[*s] = Symbol();
g_lingo->_currentFactory->properties[*s].name = new Common::String(*s);
} else {
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 95e6aac66e..b5b0ae9d6d 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -88,7 +88,7 @@ Object *Object::clone() {
return res;
}
-Symbol Object::getMethod(const Common::String &methodName, bool ignorePredefined) {
+Symbol Object::getMethod(const Common::String methodName, bool ignorePredefined) {
if (!ignorePredefined && g_lingo->_methods.contains(methodName)) {
return g_lingo->_methods[methodName];
}
@@ -99,7 +99,7 @@ Symbol Object::getMethod(const Common::String &methodName, bool ignorePredefined
return Symbol();
}
-bool Object::hasVar(const Common::String &varName) {
+bool Object::hasVar(const Common::String varName) {
// Factory object instance vars are accessed like normal vars
// Script object properties cannot be accessed like normal vars until D5
if (type == kScriptObj && g_lingo->_vm->getVersion() < 5) {
@@ -108,14 +108,13 @@ bool Object::hasVar(const Common::String &varName) {
return properties.contains(varName);
}
-Symbol &Object::getVar(const Common::String &varName) {
+Symbol &Object::getVar(const Common::String varName) {
return properties[varName];
}
void LM::m_dispose(int nargs) {
g_lingo->printSTUBWithArglist("m_dispose", nargs);
g_lingo->dropStack(nargs);
- g_lingo->pushVoid();
}
void LM::m_get(int nargs) {
@@ -139,13 +138,9 @@ void LM::m_new(int nargs) {
Object *clone = g_lingo->_currentMeObj->clone();
// Call user-defined mNew
- Common::String methodName("mNew");
- Symbol userMNew = clone->getMethod(methodName, true);
- Symbol cloneSym;
- cloneSym.type = OBJECT;
- cloneSym.u.obj = clone;
+ Symbol userMNew = clone->getMethod("mNew", true);
if (userMNew.type != VOID) {
- LC::call(userMNew, nargs, cloneSym);
+ LC::call(userMNew, nargs, clone);
}
Datum res;
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index cd65be5d9f..c8b905bea6 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -257,9 +257,9 @@ struct Object {
Common::HashMap<uint, Datum> *objArray;
Object *clone();
- Symbol getMethod(const Common::String &methodName, bool ignorePredefined = false);
- bool hasVar(const Common::String &varName);
- Symbol &getVar(const Common::String &varName);
+ Symbol getMethod(const Common::String methodName, bool ignorePredefined = false);
+ bool hasVar(const Common::String varName);
+ Symbol &getVar(const Common::String varName);
};
struct CFrame { /* proc/func call stack frame */
Commit: 5443cb2b320d6ba87597e067288dc226c3b09c13
https://github.com/scummvm/scummvm/commit/5443cb2b320d6ba87597e067288dc226c3b09c13
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Fix user-defined mNew
Changed paths:
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo-object.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 650aebe929..9f05ce75f5 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1267,7 +1267,12 @@ void LB::b_quit(int nargs) {
}
void LB::b_return(int nargs) {
- // We do not touch the top of the stack, it will be returned
+ CFrame *fp = g_lingo->_callstack.back();
+ // Do not allow a factory's mNew method to return a value
+ // Otherwise do not touch the top of the stack, it will be returned
+ if (g_lingo->_currentMeObj && g_lingo->_currentMeObj->type == kFactoryObj && fp->sp.name->equalsIgnoreCase("mNew")) {
+ g_lingo->pop();
+ }
LC::c_procret();
}
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 2c12bb5fae..ec529a51f0 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1253,6 +1253,9 @@ void LC::call(const Common::String &name, int nargs) {
Object *target = d.u.obj;
Datum methodName = g_lingo->_stack.remove_at(g_lingo->_stack.size() - nargs); // Take method name out of stack
nargs -= 1;
+ if (methodName.u.s->equalsIgnoreCase("mNew")) {
+ target = target->clone();
+ }
funcSym = target->getMethod(*methodName.u.s);
call(funcSym, nargs, target);
return;
@@ -1414,6 +1417,14 @@ void LC::c_procret() {
CFrame *fp = g_lingo->_callstack.back();
g_lingo->_callstack.pop_back();
+ if (g_lingo->_currentMeObj && g_lingo->_currentMeObj->type == kFactoryObj && fp->sp.name->equalsIgnoreCase("mNew")) {
+ // Return the newly created object after executing mNew
+ Datum d;
+ d.type = OBJECT;
+ d.u.obj = g_lingo->_currentMeObj;
+ g_lingo->push(d);
+ }
+
g_lingo->_currentScript = fp->retscript;
g_lingo->_currentScriptContext = fp->retctx;
g_lingo->_archiveIndex = fp->retarchive;
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index b5b0ae9d6d..a998679839 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -88,13 +88,13 @@ Object *Object::clone() {
return res;
}
-Symbol Object::getMethod(const Common::String methodName, bool ignorePredefined) {
- if (!ignorePredefined && g_lingo->_methods.contains(methodName)) {
- return g_lingo->_methods[methodName];
- }
+Symbol Object::getMethod(const Common::String methodName) {
if (methods.contains(methodName)) {
return methods[methodName];
}
+ if (g_lingo->_methods.contains(methodName)) {
+ return g_lingo->_methods[methodName];
+ }
// TODO: error handling
return Symbol();
}
@@ -135,17 +135,10 @@ void LM::m_put(int nargs) {
}
void LM::m_new(int nargs) {
- Object *clone = g_lingo->_currentMeObj->clone();
-
- // Call user-defined mNew
- Symbol userMNew = clone->getMethod("mNew", true);
- if (userMNew.type != VOID) {
- LC::call(userMNew, nargs, clone);
- }
-
+ // This is usually be overridden by a user-defined mNew
Datum res;
res.type = OBJECT;
- res.u.obj = clone;
+ res.u.obj = g_lingo->_currentMeObj;
g_lingo->push(res);
}
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index c8b905bea6..9e009a74ed 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -257,7 +257,7 @@ struct Object {
Common::HashMap<uint, Datum> *objArray;
Object *clone();
- Symbol getMethod(const Common::String methodName, bool ignorePredefined = false);
+ Symbol getMethod(const Common::String methodName);
bool hasVar(const Common::String varName);
Symbol &getVar(const Common::String varName);
};
Commit: 964b3eddc28b2a2d054e63dc9d7a4a94ce4c6aab
https://github.com/scummvm/scummvm/commit/964b3eddc28b2a2d054e63dc9d7a4a94ce4c6aab
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Implement m_dispose
Changed paths:
engines/director/lingo/lingo-codegen.cpp
engines/director/lingo/lingo-object.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index e6e0c3f3d9..85131ce162 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -661,6 +661,7 @@ void Lingo::codeFactory(Common::String &name) {
Object *obj = new Object;
obj->name = new Common::String(name);
obj->type = kFactoryObj;
+ obj->disposed = false;
obj->inheritanceLevel = 1;
obj->scriptContext = _currentScriptContext;
obj->objArray = new Common::HashMap<uint32, Datum>;
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index a998679839..23347df311 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -77,6 +77,7 @@ Object *Object::clone() {
Object *res = new Object;
res->name = name;
res->type = type;
+ res->disposed = disposed;
res->prototype = this;
res->properties = properties;
res->methods = methods;
@@ -89,17 +90,22 @@ Object *Object::clone() {
}
Symbol Object::getMethod(const Common::String methodName) {
+ if (disposed) {
+ error("Method '%s' called on disposed object '%s'", methodName.c_str(), name->c_str());
+ }
if (methods.contains(methodName)) {
return methods[methodName];
}
if (g_lingo->_methods.contains(methodName)) {
return g_lingo->_methods[methodName];
}
- // TODO: error handling
return Symbol();
}
bool Object::hasVar(const Common::String varName) {
+ if (disposed) {
+ error("Variable '%s' accessed on disposed object '%s'", varName.c_str(), name->c_str());
+ }
// Factory object instance vars are accessed like normal vars
// Script object properties cannot be accessed like normal vars until D5
if (type == kScriptObj && g_lingo->_vm->getVersion() < 5) {
@@ -113,8 +119,7 @@ Symbol &Object::getVar(const Common::String varName) {
}
void LM::m_dispose(int nargs) {
- g_lingo->printSTUBWithArglist("m_dispose", nargs);
- g_lingo->dropStack(nargs);
+ g_lingo->_currentMeObj->disposed = true;
}
void LM::m_get(int nargs) {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 9e009a74ed..e347a86268 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -246,6 +246,7 @@ enum ObjectType {
struct Object {
Common::String *name;
ObjectType type;
+ bool disposed;
Object *prototype;
SymbolHash properties;
Commit: f0e598e402fc02e89ac720156fe18ca3a7bd8573
https://github.com/scummvm/scummvm/commit/f0e598e402fc02e89ac720156fe18ca3a7bd8573
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Fix b_objectp
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 9f05ce75f5..f5e8c7c544 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1323,7 +1323,16 @@ void LB::b_integerp(int nargs) {
void LB::b_objectp(int nargs) {
Datum d = g_lingo->pop();
- Datum res ((d.type == OBJECT) ? 1 : 0);
+ Datum res;
+ if (d.type == OBJECT) {
+ if (d.u.obj->type == kFactoryObj && (d.u.obj->inheritanceLevel == 1 || d.u.obj->disposed)) {
+ res = 0;
+ } else {
+ res = 1;
+ }
+ } else {
+ res = 0;
+ }
g_lingo->push(res);
}
Commit: 516d2ef17f84a0d582bc1e336b067973242da455
https://github.com/scummvm/scummvm/commit/516d2ef17f84a0d582bc1e336b067973242da455
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Implement kThePerFrameHook
Changed paths:
engines/director/lingo/lingo-the.cpp
engines/director/lingo/lingo.cpp
engines/director/lingo/lingo.h
engines/director/score.cpp
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 85fa301a85..123d955666 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -468,7 +468,7 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
d.u.i = g_system->getEventManager()->getButtonState() & (1 << Common::MOUSE_BUTTON_LEFT | 1 << Common::MOUSE_BUTTON_RIGHT) ? 0 : 1;
break;
case kThePerFrameHook:
- warning("STUB: Lingo::getTheEntity(): getting the perframehook");
+ d = _perFrameHook;
break;
case kThePi:
d.type = FLOAT;
@@ -553,7 +553,7 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
_floatPrecisionFormat = Common::String::format("%%.%df", _floatPrecision);
break;
case kThePerFrameHook:
- warning("STUB: Lingo::setTheEntity(): setting the perframehook");
+ _perFrameHook = d;
break;
case kTheSoundEntity:
{
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 58beef6931..1bb061056c 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -181,6 +181,8 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
_archiveIndex = 0;
+ _perFrameHook = Datum();
+
initEventHandlerTypes();
initBuiltIns();
@@ -828,6 +830,22 @@ void Lingo::executeImmediateScripts(Frame *frame) {
}
}
+void Lingo::executePerFrameHook() {
+ // TODO: Call with arguments
+ if (_perFrameHook.type == OBJECT) {
+ Symbol method = _perFrameHook.u.obj->getMethod("mAtFrame");
+ if (method.type != VOID) {
+ _localvars = new SymbolHash;
+
+ debugC(1, kDebugLingoExec, "Executing mAtFrame on perFrameHook : %s", _perFrameHook.u.obj->name->c_str());
+ LC::call(method, 0, _perFrameHook.u.obj);
+ execute(_pc);
+
+ cleanLocalVars();
+ }
+ }
+}
+
void Lingo::printAllVars() {
debugN(" Local vars: ");
for (SymbolHash::iterator i = _localvars->begin(); i != _localvars->end(); ++i) {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index e347a86268..16ff91232c 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -538,8 +538,11 @@ public:
bool _dontPassEvent;
+ Datum _perFrameHook;
+
public:
void executeImmediateScripts(Frame *frame);
+ void executePerFrameHook();
};
extern Lingo *g_lingo;
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index f86643876a..4b61f25f78 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -430,6 +430,7 @@ void Score::update() {
// _surface->copyFrom(*_trailSurface);
_lingo->executeImmediateScripts(_frames[_currentFrame]);
+ _lingo->executePerFrameHook();
if (_vm->getVersion() >= 6) {
_lingo->processEvent(kEventBeginSprite);
Commit: 4e4f26f96309cceeb20274df34f0fa7202a42d30
https://github.com/scummvm/scummvm/commit/4e4f26f96309cceeb20274df34f0fa7202a42d30
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Fix var assign/fetch with obj val
Changed paths:
engines/director/lingo/lingo-codegen.cpp
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 85131ce162..061a03f840 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -543,12 +543,14 @@ void Lingo::varAssign(Datum &var, Datum &value, bool global) {
sym->u.i = value.u.i;
} else if (value.type == FLOAT) {
sym->u.f = value.u.f;
- } else if (value.type == STRING || value.type == SYMBOL || value.type == OBJECT) {
+ } else if (value.type == STRING || value.type == SYMBOL) {
sym->u.s = value.u.s;
} else if (value.type == POINT || value.type == ARRAY) {
sym->u.farr = value.u.farr;
} else if (value.type == PARRAY) {
sym->u.parr = value.u.parr;
+ } else if (value.type == OBJECT) {
+ sym->u.obj = value.u.obj;
} else if (value.type == VOID) {
sym->u.i = 0;
} else {
@@ -623,12 +625,14 @@ Datum Lingo::varFetch(Datum &var, bool global) {
result.u.i = sym->u.i;
else if (sym->type == FLOAT)
result.u.f = sym->u.f;
- else if (sym->type == STRING || sym->type == SYMBOL || sym->type == OBJECT)
+ else if (sym->type == STRING || sym->type == SYMBOL)
result.u.s = sym->u.s;
else if (sym->type == POINT || sym->type == ARRAY)
result.u.farr = sym->u.farr;
else if (sym->type == PARRAY)
result.u.parr = sym->u.parr;
+ else if (sym->type == OBJECT)
+ result.u.obj = sym->u.obj;
else if (sym->type == VOID)
result.u.i = 0;
else {
Commit: 47f19d8515df5fd76967234590bb3b9dc85935aa
https://github.com/scummvm/scummvm/commit/47f19d8515df5fd76967234590bb3b9dc85935aa
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Fix extra arg warning on method
Changed paths:
engines/director/lingo/lingo-gr.cpp
engines/director/lingo/lingo-gr.y
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index cc414c1d77..ae25c183b5 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -3294,7 +3294,7 @@ yyreduce:
#line 690 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_procret);
- g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg) + 1, g_lingo->_currentFactory);
+ g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg), g_lingo->_currentFactory);
endDef();
delete (yyvsp[-6].s); }
#line 3301 "engines/director/lingo/lingo-gr.cpp"
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 6573bcfb00..e52459bb76 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -689,7 +689,7 @@ defn: tMACRO { startDef(); } ID { g_lingo->_currentFactory = NULL; }
| tMETHOD { startDef(); }
lbl argdef '\n' argstore stmtlist {
g_lingo->code1(LC::c_procret);
- g_lingo->codeDefine(*$tMETHOD, $lbl, $argdef + 1, g_lingo->_currentFactory);
+ g_lingo->codeDefine(*$tMETHOD, $lbl, $argdef, g_lingo->_currentFactory);
endDef();
delete $tMETHOD; }
| on lbl argdef '\n' argstore stmtlist ENDCLAUSE endargdef { // D3
Commit: 5de9a9816e832e796c3819127f1fea4b08c557ac
https://github.com/scummvm/scummvm/commit/5de9a9816e832e796c3819127f1fea4b08c557ac
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Lazy evaluate first ID in arglist
This avoids conflicts between variable names and method names.
Changed paths:
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo-code.h
engines/director/lingo/lingo-codegen.cpp
engines/director/lingo/lingo-gr.cpp
engines/director/lingo/lingo-gr.y
engines/director/lingo/lingo-object.cpp
engines/director/lingo/lingo.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index ec529a51f0..8d47d3d067 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -94,6 +94,7 @@ static struct FuncDescr {
{ LC::c_itemToOf, "c_itemToOf", "" }, // D3
{ LC::c_jump, "c_jump", "o" },
{ LC::c_jumpifz, "c_jumpifz", "o" },
+ { LC::c_lazyeval, "c_lazyeval", "s" },
{ LC::c_le, "c_le", "" },
{ LC::c_lineOf, "c_lineOf", "" }, // D3
{ LC::c_lineToOf, "c_lineToOf", "" }, // D3
@@ -192,6 +193,9 @@ Datum Lingo::pop(void) {
Datum ret = _stack.back();
_stack.pop_back();
+ if (ret.lazy) {
+ ret = ret.eval();
+ }
return ret;
}
@@ -424,6 +428,15 @@ void LC::c_eval() {
g_lingo->push(d);
}
+void LC::c_lazyeval() {
+ LC::c_varpush();
+
+ Datum d;
+ d = g_lingo->pop();
+ d.lazy = true;
+ g_lingo->push(d);
+}
+
void LC::c_theentitypush() {
Datum id = g_lingo->pop();
@@ -1344,7 +1357,7 @@ void LC::call(const Symbol &funcSym, int nargs, Object *target) {
fp->retMeObj = g_lingo->_currentMeObj;
// Create new set of local variables
- g_lingo->_localvars = new SymbolHash;
+ SymbolHash *localvars = new SymbolHash;
if (funcSym.argNames) {
int symNArgs = funcSym.nargs;
if ((int)funcSym.argNames->size() < symNArgs) {
@@ -1359,28 +1372,30 @@ void LC::call(const Symbol &funcSym, int nargs, Object *target) {
}
for (int i = symNArgs - 1; i >= 0; i--) {
Common::String name = (*funcSym.argNames)[i];
- if (!g_lingo->_localvars->contains(name)) {
- g_lingo->varCreate(name, false);
+ if (!localvars->contains(name)) {
+ g_lingo->varCreate(name, false, localvars);
Datum arg(name);
arg.type = VAR;
Datum value = g_lingo->pop();
- g_lingo->varAssign(arg, value);
+ g_lingo->varAssign(arg, value, false, localvars);
} else {
warning("Argument %s already defined", name.c_str());
+ g_lingo->pop();
}
}
}
if (funcSym.varNames) {
for (Common::Array<Common::String>::iterator it = funcSym.varNames->begin(); it != funcSym.varNames->end(); ++it) {
Common::String name = *it;
- if (!g_lingo->_localvars->contains(name)) {
- (*g_lingo->_localvars)[name] = Symbol();
- (*g_lingo->_localvars)[name].name = new Common::String(name);
+ if (!localvars->contains(name)) {
+ (*localvars)[name] = Symbol();
+ (*localvars)[name].name = new Common::String(name);
} else {
warning("Variable %s already defined", name.c_str());
}
}
}
+ g_lingo->_localvars = localvars;
if (target) {
g_lingo->_currentMeObj = target;
diff --git a/engines/director/lingo/lingo-code.h b/engines/director/lingo/lingo-code.h
index 21c642141d..d2cb192b25 100644
--- a/engines/director/lingo/lingo-code.h
+++ b/engines/director/lingo/lingo-code.h
@@ -82,6 +82,7 @@ namespace LC {
void c_assign();
bool verify(const Symbol &s);
void c_eval();
+ void c_lazyeval();
void c_setImmediate();
void c_swap();
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 061a03f840..b0dd6c01a5 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -253,14 +253,6 @@ Symbol Lingo::define(Common::String &name, int nargs, ScriptData *code, Common::
warning("Redefining method '%s' on factory '%s'", name.c_str(), factory->name->c_str());
}
factory->methods[name] = sym;
-
- // FIXME: Method names can conflict with vars. This won't work all the time.
- Datum target(name);
- target.type = VAR;
- Datum source(name);
- source.type = SYMBOL;
- g_lingo->varCreate(name, true);
- g_lingo->varAssign(target, source, true);
} else {
Symbol existing = getHandler(name);
if (existing.type != VOID)
@@ -474,8 +466,12 @@ int Lingo::castIdFetch(Datum &var) {
return id;
}
-void Lingo::varCreate(const Common::String &name, bool global) {
- if (_localvars && _localvars->contains(name)) {
+void Lingo::varCreate(const Common::String &name, bool global, SymbolHash *localvars) {
+ if (localvars == nullptr) {
+ localvars = _localvars;
+ }
+
+ if (localvars && localvars->contains(name)) {
if (global)
warning("varCreate: variable %s is local, not global", name.c_str());
return;
@@ -493,12 +489,16 @@ void Lingo::varCreate(const Common::String &name, bool global) {
_globalvars[name] = Symbol();
_globalvars[name].name = new Common::String(name);
} else {
- (*_localvars)[name] = Symbol();
- (*_localvars)[name].name = new Common::String(name);
+ (*localvars)[name] = Symbol();
+ (*localvars)[name].name = new Common::String(name);
}
}
-void Lingo::varAssign(Datum &var, Datum &value, bool global) {
+void Lingo::varAssign(Datum &var, Datum &value, bool global, SymbolHash *localvars) {
+ if (localvars == nullptr) {
+ localvars = _localvars;
+ }
+
if (var.type != VAR && var.type != REFERENCE) {
warning("varAssign: assignment to non-variable");
return;
@@ -508,8 +508,8 @@ void Lingo::varAssign(Datum &var, Datum &value, bool global) {
Symbol *sym = nullptr;
Common::String name = *var.u.s;
- if (_localvars && _localvars->contains(name)) {
- sym = &(*_localvars)[name];
+ if (localvars && localvars->contains(name)) {
+ sym = &(*localvars)[name];
if (global)
warning("varAssign: variable %s is local, not global", name.c_str());
} else if (_currentMeObj && _currentMeObj->hasVar(name)) {
@@ -580,7 +580,11 @@ void Lingo::varAssign(Datum &var, Datum &value, bool global) {
}
}
-Datum Lingo::varFetch(Datum &var, bool global) {
+Datum Lingo::varFetch(Datum &var, bool global, SymbolHash *localvars) {
+ if (localvars == nullptr) {
+ localvars = _localvars;
+ }
+
Datum result;
result.type = VOID;
if (var.type != VAR && var.type != REFERENCE) {
@@ -597,8 +601,8 @@ Datum Lingo::varFetch(Datum &var, bool global) {
result.u.obj = _currentMeObj;
return result;
}
- if (_localvars && _localvars->contains(name)) {
- sym = &(*_localvars)[name];
+ if (localvars && localvars->contains(name)) {
+ sym = &(*localvars)[name];
if (global)
warning("varFetch: variable %s is local, not global", sym->name->c_str());
} else if (_currentMeObj && _currentMeObj->hasVar(name)) {
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index ae25c183b5..5157aaefa2 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -447,36 +447,37 @@ enum yysymbol_kind_t
YYSYMBOL_stmtlist = 127, /* stmtlist */
YYSYMBOL_simpleexpr = 128, /* simpleexpr */
YYSYMBOL_expr = 129, /* expr */
- YYSYMBOL_chunkexpr = 130, /* chunkexpr */
- YYSYMBOL_reference = 131, /* reference */
- YYSYMBOL_proc = 132, /* proc */
- YYSYMBOL_133_10 = 133, /* $@10 */
+ YYSYMBOL_130_10 = 130, /* $@10 */
+ YYSYMBOL_chunkexpr = 131, /* chunkexpr */
+ YYSYMBOL_reference = 132, /* reference */
+ YYSYMBOL_proc = 133, /* proc */
YYSYMBOL_134_11 = 134, /* $@11 */
YYSYMBOL_135_12 = 135, /* $@12 */
- YYSYMBOL_globallist = 136, /* globallist */
- YYSYMBOL_propertylist = 137, /* propertylist */
- YYSYMBOL_instancelist = 138, /* instancelist */
- YYSYMBOL_gotofunc = 139, /* gotofunc */
- YYSYMBOL_gotomovie = 140, /* gotomovie */
- YYSYMBOL_playfunc = 141, /* playfunc */
- YYSYMBOL_142_13 = 142, /* $@13 */
- YYSYMBOL_defn = 143, /* defn */
- YYSYMBOL_144_14 = 144, /* $@14 */
+ YYSYMBOL_136_13 = 136, /* $@13 */
+ YYSYMBOL_globallist = 137, /* globallist */
+ YYSYMBOL_propertylist = 138, /* propertylist */
+ YYSYMBOL_instancelist = 139, /* instancelist */
+ YYSYMBOL_gotofunc = 140, /* gotofunc */
+ YYSYMBOL_gotomovie = 141, /* gotomovie */
+ YYSYMBOL_playfunc = 142, /* playfunc */
+ YYSYMBOL_143_14 = 143, /* $@14 */
+ YYSYMBOL_defn = 144, /* defn */
YYSYMBOL_145_15 = 145, /* $@15 */
YYSYMBOL_146_16 = 146, /* $@16 */
- YYSYMBOL_on = 147, /* on */
- YYSYMBOL_148_17 = 148, /* $@17 */
- YYSYMBOL_argdef = 149, /* argdef */
- YYSYMBOL_endargdef = 150, /* endargdef */
- YYSYMBOL_argstore = 151, /* argstore */
- YYSYMBOL_macro = 152, /* macro */
- YYSYMBOL_arglist = 153, /* arglist */
- YYSYMBOL_nonemptyarglist = 154, /* nonemptyarglist */
- YYSYMBOL_list = 155, /* list */
- YYSYMBOL_valuelist = 156, /* valuelist */
- YYSYMBOL_linearlist = 157, /* linearlist */
- YYSYMBOL_proplist = 158, /* proplist */
- YYSYMBOL_proppair = 159 /* proppair */
+ YYSYMBOL_147_17 = 147, /* $@17 */
+ YYSYMBOL_on = 148, /* on */
+ YYSYMBOL_149_18 = 149, /* $@18 */
+ YYSYMBOL_argdef = 150, /* argdef */
+ YYSYMBOL_endargdef = 151, /* endargdef */
+ YYSYMBOL_argstore = 152, /* argstore */
+ YYSYMBOL_macro = 153, /* macro */
+ YYSYMBOL_arglist = 154, /* arglist */
+ YYSYMBOL_nonemptyarglist = 155, /* nonemptyarglist */
+ YYSYMBOL_list = 156, /* list */
+ YYSYMBOL_valuelist = 157, /* valuelist */
+ YYSYMBOL_linearlist = 158, /* linearlist */
+ YYSYMBOL_proplist = 159, /* proplist */
+ YYSYMBOL_proppair = 160 /* proppair */
};
typedef enum yysymbol_kind_t yysymbol_kind_t;
@@ -786,16 +787,16 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 125
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 2546
+#define YYLAST 2585
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 103
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 57
+#define YYNNTS 58
/* YYNRULES -- Number of rules. */
-#define YYNRULES 174
+#define YYNRULES 177
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 363
+#define YYNSTATES 369
#define YYMAXUTOK 342
@@ -859,17 +860,17 @@ static const yytype_int16 yyrline[] =
410, 411, 413, 415, 422, 430, 431, 433, 439, 443,
447, 451, 454, 456, 457, 458, 460, 463, 466, 470,
474, 478, 486, 492, 493, 494, 505, 506, 507, 510,
- 513, 516, 519, 524, 530, 531, 532, 533, 534, 535,
- 536, 537, 538, 539, 540, 541, 542, 543, 544, 545,
- 546, 547, 548, 549, 550, 551, 552, 554, 555, 556,
- 557, 558, 559, 560, 561, 563, 566, 568, 569, 570,
- 571, 572, 573, 573, 574, 574, 575, 575, 576, 579,
- 582, 583, 585, 590, 596, 601, 607, 610, 621, 622,
- 623, 624, 628, 632, 637, 638, 640, 644, 648, 652,
- 652, 682, 682, 682, 688, 689, 689, 695, 703, 709,
- 709, 712, 713, 714, 716, 717, 718, 720, 722, 730,
- 731, 732, 734, 735, 737, 739, 740, 741, 742, 744,
- 745, 747, 748, 750, 754
+ 513, 519, 519, 524, 527, 530, 535, 541, 542, 543,
+ 544, 545, 546, 547, 548, 549, 550, 551, 552, 553,
+ 554, 555, 556, 557, 558, 559, 560, 561, 562, 563,
+ 565, 566, 567, 568, 569, 570, 571, 572, 574, 577,
+ 579, 580, 581, 582, 583, 584, 584, 585, 585, 586,
+ 586, 587, 590, 593, 594, 596, 601, 607, 612, 618,
+ 621, 632, 633, 634, 635, 639, 643, 648, 649, 651,
+ 655, 659, 663, 663, 693, 693, 693, 699, 700, 700,
+ 706, 714, 720, 720, 723, 724, 725, 727, 728, 729,
+ 731, 733, 741, 742, 743, 745, 746, 748, 750, 751,
+ 752, 753, 755, 756, 758, 759, 761, 765
};
#endif
@@ -904,10 +905,10 @@ yysymbol_name (yysymbol_kind_t yysymbol)
"$accept", "program", "programline", "asgn", "stmtoneliner", "stmt",
"$@1", "$@2", "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9",
"tellstart", "ifstmt", "elseifstmtlist", "elseifstmt", "jumpifz", "jump",
- "varassign", "if", "lbl", "stmtlist", "simpleexpr", "expr", "chunkexpr",
- "reference", "proc", "$@10", "$@11", "$@12", "globallist",
+ "varassign", "if", "lbl", "stmtlist", "simpleexpr", "expr", "$@10",
+ "chunkexpr", "reference", "proc", "$@11", "$@12", "$@13", "globallist",
"propertylist", "instancelist", "gotofunc", "gotomovie", "playfunc",
- "$@13", "defn", "$@14", "$@15", "$@16", "on", "$@17", "argdef",
+ "$@14", "defn", "$@15", "$@16", "$@17", "on", "$@18", "argdef",
"endargdef", "argstore", "macro", "arglist", "nonemptyarglist", "list",
"valuelist", "linearlist", "proplist", "proppair", YY_NULLPTR
};
@@ -934,12 +935,12 @@ static const yytype_int16 yytoknum[] =
};
#endif
-#define YYPACT_NINF (-293)
+#define YYPACT_NINF (-300)
#define yypact_value_is_default(Yyn) \
((Yyn) == YYPACT_NINF)
-#define YYTABLE_NINF (-166)
+#define YYTABLE_NINF (-169)
#define yytable_value_is_error(Yyn) \
0
@@ -948,43 +949,43 @@ static const yytype_int16 yytoknum[] =
STATE-NUM. */
static const yytype_int16 yypact[] =
{
- 767, -91, -293, -293, 53, -293, 591, 310, 53, -38,
- 493, -293, -293, -293, -293, -293, -293, -37, -293, 225,
- -293, -293, -293, -26, 1899, 36, 173, 26, 33, 1929,
- 1775, -293, 1929, 1929, 1929, 1929, 1929, 1929, 1929, -293,
- -293, 1929, 1929, 1929, 404, 39, -28, -293, -293, -293,
- -293, 1929, -293, 2439, -293, -293, -293, -293, -293, -293,
- -293, -293, -293, -293, -293, -293, -12, 1899, 1812, 2439,
- -10, 1812, -10, -293, 53, 1812, 2439, -2, 679, -293,
- -293, 87, 1929, -293, 68, -293, 2020, -293, 89, -293,
- 90, 1987, 91, -293, -20, 53, 53, -11, 64, 66,
- -293, 2356, 2020, -293, 94, -293, 2053, 2086, 2119, 2152,
- 2406, 2317, 113, 116, -293, -293, 2369, 41, 43, -293,
- 2439, 45, 48, 50, -293, -293, 767, 2439, 1929, 1929,
- 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929,
- 1929, 1929, 1929, 1929, 1929, 125, 1812, 1987, 2369, -51,
- 1929, -3, -293, 11, 1929, -10, 125, -293, 57, 2439,
- 1929, -293, -293, 53, 25, 1929, 1929, -22, 1929, 1929,
- 1929, -4, 104, 1929, 1929, 1929, 1929, 1929, -293, -293,
- 58, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929, 1929,
- 1929, -293, -293, -293, 59, -293, -293, 53, 53, -293,
- 1929, 46, -293, 108, 14, 14, 14, 14, 2452, 2452,
- -293, -36, 14, 14, 14, 14, -36, -53, -53, -293,
- -293, -293, -87, -293, 2439, -293, -293, 2439, -33, 139,
- 2439, -293, 129, -293, -293, 2439, 2439, 1929, 1929, 2439,
- 2439, 14, 1929, 1929, 148, 2439, 14, 2439, 2439, 2439,
- 159, 2439, 2185, 2439, 2218, 2439, 2251, 2439, 2284, 2439,
- 2439, 1694, -293, 160, -293, -293, 2439, 41, 43, -293,
- -293, -293, 161, -293, -293, 125, 1929, 2439, 377, -293,
- 2439, 14, 53, -293, 1929, 1929, 1929, 1929, -293, 1189,
- -293, 1104, -293, -293, -293, -9, 2439, -293, -293, -293,
- 1273, 135, 2439, 2439, 2439, 2439, -293, -293, -293, 106,
- -293, 852, 936, -293, -293, -293, -293, 109, 1929, -293,
- 75, 170, -293, -293, 143, 167, -293, 2439, -293, 1929,
- -293, 118, -293, 110, 1020, -293, 1929, 151, 1357, 2439,
- -293, 181, -293, 2439, 1929, 123, 157, -293, 1442, -293,
- 2439, -293, -293, -293, -293, -293, 1104, 1526, -293, -293,
- -293, 1610, -293
+ 773, -82, -300, -300, 53, -300, 597, 316, 53, -2,
+ 499, -300, -300, -300, -300, -300, -300, 9, -300, 1781,
+ -300, -300, -300, 22, 2023, -17, 85, 57, 63, 2053,
+ 1818, -300, 2053, 2053, 2053, 2053, 2053, 2053, 2053, -300,
+ -300, 2053, 2053, 2053, 410, 96, 5, -300, -300, -300,
+ -300, 2053, -300, 2478, -300, -300, -300, -300, -300, -300,
+ -300, -300, -300, -300, -300, -300, 8, 2023, 1899, 2478,
+ 46, 1899, 46, -300, 53, 1936, 2478, 47, 685, -300,
+ -300, 88, 2053, -300, 69, -300, 2092, -300, 95, -300,
+ 121, 402, 122, -300, -42, 53, 53, -20, 97, 99,
+ -300, 2395, 2092, -300, 128, -300, 2125, 2158, 2191, 2224,
+ 2445, 164, 130, 132, -300, -300, 2408, 60, 64, -300,
+ 2478, 58, 75, 89, -300, -300, 773, 2478, 2053, 2053,
+ 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
+ 2053, 2053, 2053, 2053, 2053, 149, 1936, 402, 2408, -46,
+ 2053, 18, -300, -89, 21, 2053, 46, 149, -300, 91,
+ 2478, 2053, -300, -300, 53, 17, 2053, 2053, -22, 2053,
+ 2053, 2053, 14, 139, 2053, 2053, 2053, 2053, 2053, -300,
+ -300, 92, 2053, 2053, 2053, 2053, 2053, 2053, 2053, 2053,
+ 2053, 2053, -300, -300, -300, 93, -300, -300, 53, 53,
+ -300, 2053, 37, -300, 140, 16, 16, 16, 16, 2491,
+ 2491, -300, -36, 16, 16, 16, 16, -36, -44, -44,
+ -300, -300, -300, -48, -300, 2478, -300, -300, -300, -300,
+ 2478, -9, 168, 2478, -300, 153, -300, -300, 2478, 2478,
+ 2053, 2053, 2478, 2478, 16, 2053, 2053, 172, 2478, 16,
+ 2478, 2478, 2478, 174, 2478, 2257, 2478, 2290, 2478, 2323,
+ 2478, 2356, 2478, 2478, 1700, -300, 177, -300, -300, 2478,
+ 60, 64, -300, -300, -300, 178, 2053, -300, -300, 149,
+ 2053, 2478, 231, -300, 2478, 16, 53, -300, 2053, 2053,
+ 2053, 2053, -300, 1195, -300, 1110, -300, -300, 44, -300,
+ 1, 2478, -300, -300, -300, 1279, 152, 2478, 2478, 2478,
+ 2478, -300, -300, -300, 120, -300, 858, -300, 942, -300,
+ -300, -300, -300, 124, 2053, -300, 76, 182, -300, -300,
+ 157, 179, -300, 2478, -300, 2053, -300, 134, -300, 114,
+ 1026, -300, 2053, 163, 1363, 2478, -300, 194, -300, 2478,
+ 2053, 136, 169, -300, 1448, -300, 2478, -300, -300, -300,
+ -300, -300, 1110, 1532, -300, -300, -300, 1616, -300
};
/* YYDEFACTSTATE-NUM -- Default reduction number in state STATE-NUM.
@@ -993,64 +994,64 @@ static const yytype_int16 yypact[] =
static const yytype_uint8 yydefact[] =
{
0, 0, 56, 61, 0, 57, 0, 0, 0, 0,
- 0, 59, 58, 139, 145, 72, 73, 111, 112, 0,
- 128, 51, 141, 0, 0, 0, 0, 0, 0, 0,
- 0, 116, 0, 0, 0, 0, 0, 0, 0, 114,
- 149, 0, 0, 0, 0, 0, 2, 74, 23, 6,
- 24, 0, 66, 21, 106, 67, 22, 108, 109, 5,
- 52, 20, 64, 65, 60, 62, 60, 0, 0, 160,
- 119, 0, 69, 105, 0, 0, 162, 158, 0, 52,
- 110, 0, 0, 129, 0, 130, 131, 133, 0, 38,
- 0, 107, 0, 52, 0, 0, 0, 0, 0, 0,
- 144, 121, 136, 138, 0, 88, 0, 0, 0, 0,
- 0, 0, 0, 0, 93, 94, 0, 59, 58, 166,
- 169, 0, 167, 168, 171, 1, 0, 48, 0, 0,
+ 0, 59, 58, 142, 148, 75, 76, 114, 115, 0,
+ 131, 51, 144, 0, 0, 0, 0, 0, 0, 0,
+ 0, 119, 0, 0, 0, 0, 0, 0, 0, 117,
+ 152, 0, 0, 0, 0, 0, 2, 77, 23, 6,
+ 24, 0, 66, 21, 109, 67, 22, 111, 112, 5,
+ 52, 20, 64, 65, 60, 62, 60, 0, 0, 163,
+ 122, 0, 69, 108, 0, 0, 165, 161, 0, 52,
+ 113, 0, 0, 132, 0, 133, 134, 136, 0, 38,
+ 0, 110, 0, 52, 0, 0, 0, 0, 0, 0,
+ 147, 124, 139, 141, 0, 91, 0, 0, 0, 0,
+ 0, 0, 0, 0, 96, 97, 0, 59, 58, 169,
+ 172, 0, 170, 171, 174, 1, 0, 48, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 151, 0, 0, 160, 0,
- 0, 0, 71, 0, 0, 140, 151, 122, 113, 135,
- 0, 132, 142, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 137, 126,
- 117, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 42, 42, 124, 115, 150, 63, 0, 0, 164,
- 0, 0, 3, 0, 84, 85, 82, 83, 86, 87,
- 79, 90, 91, 92, 81, 80, 89, 75, 76, 77,
- 78, 152, 0, 118, 161, 68, 70, 163, 0, 0,
- 134, 52, 0, 7, 8, 10, 11, 0, 0, 48,
- 15, 13, 0, 0, 0, 14, 12, 19, 39, 120,
- 0, 97, 0, 99, 0, 101, 0, 103, 0, 95,
- 96, 0, 53, 0, 174, 173, 170, 0, 0, 172,
- 53, 157, 0, 157, 123, 151, 0, 34, 26, 53,
- 16, 17, 0, 127, 0, 0, 0, 0, 52, 0,
- 125, 0, 53, 153, 53, 0, 9, 52, 50, 50,
- 0, 0, 98, 100, 102, 104, 41, 54, 55, 0,
- 45, 0, 0, 157, 35, 27, 31, 0, 0, 40,
- 52, 154, 53, 48, 0, 0, 25, 18, 53, 0,
- 46, 0, 155, 147, 0, 36, 0, 0, 0, 48,
- 43, 0, 53, 28, 0, 0, 0, 156, 0, 48,
- 32, 44, 53, 37, 53, 48, 0, 0, 53, 47,
- 29, 0, 33
+ 0, 0, 0, 0, 0, 154, 0, 0, 163, 0,
+ 0, 0, 74, 60, 0, 0, 143, 154, 125, 116,
+ 138, 0, 135, 145, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 140,
+ 129, 120, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 42, 42, 127, 118, 153, 63, 0, 0,
+ 167, 0, 0, 3, 0, 87, 88, 85, 86, 89,
+ 90, 82, 93, 94, 95, 84, 83, 92, 78, 79,
+ 80, 81, 155, 0, 121, 164, 68, 70, 71, 73,
+ 166, 0, 0, 137, 52, 0, 7, 8, 10, 11,
+ 0, 0, 48, 15, 13, 0, 0, 0, 14, 12,
+ 19, 39, 123, 0, 100, 0, 102, 0, 104, 0,
+ 106, 0, 98, 99, 0, 53, 0, 177, 176, 173,
+ 0, 0, 175, 53, 160, 0, 0, 160, 126, 154,
+ 0, 34, 26, 53, 16, 17, 0, 130, 0, 0,
+ 0, 0, 52, 0, 128, 0, 53, 156, 0, 53,
+ 0, 9, 52, 50, 50, 0, 0, 101, 103, 105,
+ 107, 41, 54, 55, 0, 45, 0, 72, 0, 160,
+ 35, 27, 31, 0, 0, 40, 52, 157, 53, 48,
+ 0, 0, 25, 18, 53, 0, 46, 0, 158, 150,
+ 0, 36, 0, 0, 0, 48, 43, 0, 53, 28,
+ 0, 0, 0, 159, 0, 48, 32, 44, 53, 37,
+ 53, 48, 0, 0, 53, 47, 29, 0, 33
};
/* YYPGOTONTERM-NUM. */
static const yytype_int16 yypgoto[] =
{
- -293, 85, -293, -293, -47, 15, -293, -293, -293, -293,
- -293, -293, -293, -293, -293, 23, -293, -293, -293, -151,
- -292, -83, -293, -76, 1690, 3, -6, -293, 54, -293,
- -293, -293, -293, -293, -293, -293, -293, -8, -293, -293,
- -293, -293, -293, -293, -293, -293, -154, -293, -267, -293,
- 13, -293, -293, -293, -293, -293, 16
+ -300, 98, -300, -300, -41, 15, -300, -300, -300, -300,
+ -300, -300, -300, -300, -300, 39, -300, -300, -300, -156,
+ -299, -62, -300, -77, -87, 3, -6, -300, -300, 78,
+ -300, -300, -300, -300, -300, -300, -300, -300, -27, -300,
+ -300, -300, -300, -300, -300, -300, -300, -140, -300, -272,
+ -300, 13, -32, -300, -300, -300, -300, 43
};
/* YYDEFGOTONTERM-NUM. */
static const yytype_int16 yydefgoto[] =
{
- -1, 45, 46, 47, 48, 308, 298, 324, 349, 299,
- 325, 355, 297, 323, 342, 261, 50, 320, 330, 203,
- 310, 315, 51, 145, 289, 52, 53, 54, 55, 56,
- 81, 112, 104, 158, 194, 180, 57, 87, 58, 78,
- 59, 88, 231, 79, 60, 113, 222, 333, 292, 61,
- 153, 77, 62, 121, 122, 123, 124
+ -1, 45, 46, 47, 48, 313, 303, 330, 355, 304,
+ 331, 361, 302, 329, 348, 264, 50, 326, 336, 204,
+ 315, 321, 51, 145, 293, 52, 53, 276, 54, 55,
+ 56, 81, 112, 104, 159, 195, 181, 57, 87, 58,
+ 78, 59, 88, 234, 79, 60, 113, 223, 339, 296,
+ 61, 154, 77, 62, 121, 122, 123, 124
};
/* YYTABLEYYPACT[STATE-NUM] -- What to do in state STATE-NUM. If
@@ -1058,101 +1059,110 @@ static const yytype_int16 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
- 69, 69, 228, 156, 76, 63, 294, 65, 317, 271,
- 74, 73, 272, 86, 80, 49, 134, 168, 91, 70,
- 72, 237, 103, 101, 102, 89, 105, 106, 107, 108,
- 109, 110, 111, 134, 169, 114, 115, 116, 120, 125,
- 143, 144, 238, 173, 170, 127, 322, 223, 150, 8,
- 242, 233, 99, 174, 1, 141, 142, 143, 144, 100,
- 243, 147, 148, 273, 359, 148, 272, 2, 126, 148,
- 3, 4, 69, 267, 5, 268, 159, 152, 161, 64,
- 11, 149, 12, 134, 151, 146, 135, 313, 279, 150,
- 272, 155, 92, 93, 178, 225, 150, 154, 171, 172,
- 33, 34, 35, 36, 140, 141, 142, 143, 144, 226,
- 150, 328, 329, 157, 160, 162, 163, 167, 175, 176,
- 179, 295, 204, 205, 206, 207, 208, 209, 210, 211,
- 212, 213, 214, 215, 216, 217, 218, 219, 220, 193,
- 69, 49, 195, 197, 224, 198, 199, 200, 227, 201,
- 43, 221, 244, 44, 230, 275, 229, 250, 263, 235,
- 236, 270, 239, 240, 241, 274, 232, 245, 246, 247,
- 248, 249, 335, 276, 282, 251, 252, 253, 254, 255,
- 256, 257, 258, 259, 260, 283, 290, 293, 346, 318,
- 94, 95, 96, 319, 266, 326, 332, 336, 354, 97,
- 264, 265, 337, 340, 358, 344, 98, 347, 351, 341,
- 352, 202, 306, 309, 288, 262, 316, 269, 234, 0,
- 0, 314, 0, 0, 0, 0, 1, 0, 0, 0,
- 0, 277, 278, 0, 0, 0, 280, 281, 0, 2,
- 0, 0, 3, 4, 331, 0, 5, 0, 7, 8,
- 9, 66, 11, 0, 12, 0, 0, 0, 15, 16,
- 0, 0, 345, 0, 0, 0, 0, 0, 0, 0,
- 296, 82, 83, 84, 85, 67, 0, 26, 302, 303,
- 304, 305, 0, 0, 0, 301, 0, 0, 0, 0,
- 0, 0, 0, 32, 0, 0, 0, 0, 0, 0,
- 33, 34, 35, 36, 37, 0, 0, 0, 0, 0,
- -159, 1, 327, 0, 0, 0, 41, 42, 0, 0,
- 0, 0, 43, 339, 2, 44, 0, 3, 4, 0,
- 343, 5, -159, 7, 8, 9, 66, 11, 350, 12,
- -159, -159, 0, 15, 16, -159, -159, -159, -159, -159,
- -159, -159, -159, 0, -159, 0, -159, -159, -159, 0,
- 67, -159, 26, -159, -159, -159, -159, 0, 0, -159,
- -159, -159, -159, -159, -159, -159, -159, -159, 32, -159,
- -159, -159, -159, -159, -159, 33, 34, 35, 36, 37,
- -159, -159, -159, -159, 0, -159, -159, -159, -159, -159,
- -159, 41, 42, -159, -159, 1, -159, 71, -159, -159,
- 44, -159, -30, 0, 0, 0, 0, 0, 2, 0,
- 0, 3, 4, 0, 0, 5, 0, 7, 8, 9,
- 66, 117, 0, 118, 0, 0, 0, 15, 16, 128,
- 129, 130, 131, 132, 133, 0, 134, 0, 0, 135,
- 136, 137, 0, 0, 67, 0, 26, 0, 0, 0,
- 0, 0, 0, 0, 0, 138, 139, 140, 141, 142,
- 143, 144, 32, 0, 0, 0, 0, 0, 0, 33,
- 34, 35, 36, 37, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, -60, 1, 41, 42, 0, 0, 0,
- 0, 43, 0, 0, 44, -165, 119, 2, 0, 0,
- 3, 4, 0, 0, 5, -60, 7, 8, 9, 66,
- 11, 0, 12, -60, -60, 0, 15, 16, 0, -60,
- -60, -60, -60, -60, -60, -60, 0, 0, 0, 0,
- -60, 0, 0, 67, -60, 26, 0, 0, -60, 0,
- 0, 0, -60, -60, -60, -60, -60, -60, -60, -60,
- -60, 32, -60, 0, 0, -60, -60, -60, 33, 34,
- 35, 36, 37, 0, 0, -60, -60, 0, -60, -60,
- -60, -60, -60, -60, 41, 42, -60, -60, 0, -60,
- 75, -159, 1, 44, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 0, 0, 3, 4,
- 0, 0, 5, -159, 7, 8, 9, 66, 11, 0,
- 12, -159, -159, 0, 15, 16, 0, -159, -159, -159,
- -159, -159, -159, -159, 0, 0, 0, 0, -159, 0,
- 0, 67, -159, 26, 0, 0, -159, 0, 0, 0,
- -159, -159, -159, 0, 0, 0, 0, 0, 0, 32,
- 0, 0, 0, 0, 0, 0, 33, 34, 35, 36,
- 37, 0, 0, -159, -159, 0, -159, -159, -159, -159,
- 1, 0, 41, 42, 0, 0, 0, -159, 68, 0,
- -159, 44, 0, 2, 0, 0, 3, 4, 0, 0,
- 5, -159, 7, 8, 9, 66, 11, 0, 12, -159,
- -159, 0, 15, 16, 0, -159, -159, -159, -159, -159,
- -159, -159, 0, 0, 0, 0, -159, 0, 0, 67,
- -159, 26, 0, 0, -159, 0, 0, 0, -159, -159,
- -159, 0, 0, 0, 0, 0, 0, 32, 0, 0,
- 0, 0, 0, 0, 33, 34, 35, 36, 37, 0,
- 0, -159, -159, 0, -159, -159, -159, -4, 1, 0,
- 41, 42, 0, 0, 0, -159, 43, 0, -159, 44,
- 0, 2, 0, 0, 3, 4, 0, 0, 5, 6,
- 7, 8, 9, 10, 11, 0, 12, 0, 13, 14,
- 15, 16, 0, 0, 0, 17, 18, 19, 20, 21,
- 0, 0, 22, 0, 23, 0, 0, 24, 25, 26,
- 0, 0, 27, 0, 0, 28, 29, 30, 31, 0,
+ 69, 69, 157, 103, 76, 299, 323, 65, 146, 227,
+ 228, 73, 170, 86, 63, 49, 169, 231, 91, 70,
+ 72, 240, 171, 101, 102, 134, 105, 106, 107, 108,
+ 109, 110, 111, 134, 174, 114, 115, 116, 120, 92,
+ 93, 8, 241, 236, 175, 127, 74, 328, 274, 143,
+ 144, 275, 224, 150, 1, 141, 142, 143, 144, 162,
+ 80, 147, 148, 365, 270, 148, 271, 2, 245, 148,
+ 3, 4, 69, 89, 5, 179, 160, 152, 246, 64,
+ 11, 149, 12, 99, 151, 134, 283, 277, 135, 100,
+ 275, 156, 33, 34, 35, 36, 125, 319, 172, 173,
+ 275, 126, 94, 95, 96, 146, 140, 141, 142, 143,
+ 144, 97, 334, 335, 158, 161, 226, 150, 98, 229,
+ 150, 163, 205, 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219, 220, 221, 300,
+ 69, 49, 317, 155, 225, 150, 155, 164, 168, 230,
+ 43, 176, 177, 44, 180, 233, 194, 279, 196, 200,
+ 238, 239, 198, 242, 243, 244, 199, 235, 248, 249,
+ 250, 251, 252, 341, 201, 222, 254, 255, 256, 257,
+ 258, 259, 260, 261, 262, 263, 295, 247, 202, 352,
+ 232, 253, 266, 273, 278, 269, 305, 280, 286, 360,
+ 287, 267, 268, 294, 297, 364, 324, 325, 338, 316,
+ 332, 342, 318, 347, 343, 311, 314, 350, 192, 346,
+ 353, 357, 358, 292, 203, 320, 128, 129, 130, 131,
+ 132, 133, 265, 134, 281, 282, 135, 136, 137, 284,
+ 285, 340, 322, 237, 298, 272, 0, 344, 0, 337,
+ 0, 0, 138, 139, 140, 141, 142, 143, 144, 0,
+ 193, 354, 0, 0, 0, 0, -30, 351, 0, 0,
+ 76, 362, 0, 363, 301, 0, 0, 367, 0, 0,
+ 0, 0, 307, 308, 309, 310, 0, 0, 0, 306,
+ 0, 0, 0, 128, 129, 130, 131, 132, 133, 0,
+ 134, 0, 0, 135, 136, 137, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, -162, 1, 333, 138,
+ 139, 140, 141, 142, 143, 144, 0, 0, 0, 345,
+ 2, 0, 0, 3, 4, 0, 349, 5, -162, 7,
+ 8, 9, 66, 11, 356, 12, -162, -162, 0, 15,
+ 16, -162, -162, -162, -162, -162, -162, -162, -162, 0,
+ -162, 0, -162, -162, -162, 0, 67, -162, 26, -162,
+ -162, -162, -162, 0, 0, -162, -162, -162, -162, -162,
+ -162, -162, -162, -162, 32, -162, -162, -162, -162, -162,
+ -162, 33, 34, 35, 36, 37, -162, -162, -162, -162,
+ 0, -162, -162, -162, -162, -162, -162, 41, 42, -162,
+ -162, 1, -162, 71, -162, -162, 44, -162, 0, 0,
+ 0, 0, 0, 0, 2, 0, 0, 3, 4, 0,
+ 0, 5, 0, 7, 8, 9, 66, 117, 0, 118,
+ 0, 0, 0, 15, 16, 0, 165, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 67, 0, 26, 0, 128, 129, 130, 131, 132, 133,
+ 0, 134, 166, 167, 135, 136, 137, 0, 32, 0,
+ 0, 0, 0, 0, 0, 33, 34, 35, 36, 37,
+ 138, 139, 140, 141, 142, 143, 144, 0, 0, -60,
+ 1, 41, 42, 0, 0, 0, 0, 43, 0, 0,
+ 44, -168, 119, 2, 0, 0, 3, 4, 0, 0,
+ 5, -60, 7, 8, 9, 66, 11, 0, 12, -60,
+ -60, 0, 15, 16, 0, -60, -60, -60, -60, -60,
+ -60, -60, 0, 0, 0, 0, -60, 0, 0, 67,
+ -60, 26, 0, 0, -60, 0, 0, 0, -60, -60,
+ -60, -60, -60, -60, -60, -60, -60, 32, -60, 0,
+ 0, -60, -60, -60, 33, 34, 35, 36, 37, 0,
+ 0, -60, -60, 0, -60, -60, -60, -60, -60, -60,
+ 41, 42, -60, -60, 0, -60, 75, -162, 1, 44,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 2, 0, 0, 3, 4, 0, 0, 5, -162,
+ 7, 8, 9, 66, 11, 0, 12, -162, -162, 0,
+ 15, 16, 0, -162, -162, -162, -162, -162, -162, -162,
+ 0, 0, 0, 0, -162, 0, 0, 67, -162, 26,
+ 0, 0, -162, 0, 0, 0, -162, -162, -162, 0,
0, 0, 0, 0, 0, 32, 0, 0, 0, 0,
- 0, 0, 33, 34, 35, 36, 37, 0, 0, 38,
- 39, 40, -148, 1, 0, 0, 0, 0, 41, 42,
- 0, 0, 0, -4, 43, 0, 2, 44, 0, 3,
+ 0, 0, 33, 34, 35, 36, 37, 0, 0, -162,
+ -162, 0, -162, -162, -162, -162, 1, 0, 41, 42,
+ 0, 0, 0, -162, 68, 0, -162, 44, 0, 2,
+ 0, 0, 3, 4, 0, 0, 5, -162, 7, 8,
+ 9, 66, 11, 0, 12, -162, -162, 0, 15, 16,
+ 0, -162, -162, -162, -162, -162, -162, -162, 0, 0,
+ 0, 0, -162, 0, 0, 67, -162, 26, 0, 0,
+ -162, 0, 0, 0, -162, -162, -162, 0, 0, 0,
+ 0, 0, 0, 32, 0, 0, 0, 0, 0, 0,
+ 33, 34, 35, 36, 37, 0, 0, -162, -162, 0,
+ -162, -162, -162, -4, 1, 0, 41, 42, 0, 0,
+ 0, -162, 43, 0, -162, 44, 0, 2, 0, 0,
+ 3, 4, 0, 0, 5, 6, 7, 8, 9, 10,
+ 11, 0, 12, 0, 13, 14, 15, 16, 0, 0,
+ 0, 17, 18, 19, 20, 21, 0, 0, 22, 0,
+ 23, 0, 0, 24, 25, 26, 0, 0, 27, 0,
+ 0, 28, 29, 30, 31, 0, 0, 0, 0, 0,
+ 0, 32, 0, 0, 0, 0, 0, 0, 33, 34,
+ 35, 36, 37, 0, 0, 38, 39, 40, -151, 1,
+ 0, 0, 0, 0, 41, 42, 0, 0, 0, -4,
+ 43, 0, 2, 44, 0, 3, 4, 0, 0, 5,
+ 6, 7, 8, 9, 10, 11, 0, 12, 327, 13,
+ 0, 15, 16, 0, 0, 0, 17, 18, 19, 20,
+ 21, 0, 0, 0, 0, 23, 0, 0, 24, 25,
+ 26, 0, 0, 27, 0, 0, 0, 29, 30, 31,
+ 0, 0, 0, 0, 0, 0, 32, 0, 0, 0,
+ 0, 0, 0, 33, 34, 35, 36, 37, 0, 0,
+ 38, 39, -149, 1, 0, 0, 0, 0, 0, 41,
+ 42, 0, 0, 0, 312, 43, 2, 0, 44, 3,
4, 0, 0, 5, 6, 7, 8, 9, 10, 11,
- 0, 12, 321, 13, 0, 15, 16, 0, 0, 0,
+ 0, 12, 0, 13, 0, 15, 16, 0, 0, 0,
17, 18, 19, 20, 21, 0, 0, 0, 0, 23,
0, 0, 24, 25, 26, 0, 0, 27, 0, 0,
0, 29, 30, 31, 0, 0, 0, 0, 0, 0,
32, 0, 0, 0, 0, 0, 0, 33, 34, 35,
36, 37, 0, 0, 38, 39, -146, 1, 0, 0,
- 0, 0, 0, 41, 42, 0, 0, 0, 307, 43,
+ 0, 0, 0, 41, 42, 0, 0, 0, 312, 43,
2, 0, 44, 3, 4, 0, 0, 5, 6, 7,
8, 9, 10, 11, 0, 12, 0, 13, 0, 15,
16, 0, 0, 0, 17, 18, 19, 20, 21, 0,
@@ -1160,58 +1170,58 @@ static const yytype_int16 yytable[] =
0, 27, 0, 0, 0, 29, 30, 31, 0, 0,
0, 0, 0, 0, 32, 0, 0, 0, 0, 0,
0, 33, 34, 35, 36, 37, 0, 0, 38, 39,
- -143, 1, 0, 0, 0, 0, 0, 41, 42, 0,
- 0, 0, 307, 43, 2, 0, 44, 3, 4, 0,
+ 0, 1, 0, 0, 0, 0, 0, 41, 42, 0,
+ 0, 0, 312, 43, 2, 0, 44, 3, 4, 0,
0, 5, 6, 7, 8, 9, 10, 11, 0, 12,
- 0, 13, 0, 15, 16, 0, 0, 0, 17, 18,
+ 0, 13, 0, 15, 16, 0, -49, -49, 17, 18,
19, 20, 21, 0, 0, 0, 0, 23, 0, 0,
24, 25, 26, 0, 0, 27, 0, 0, 0, 29,
30, 31, 0, 0, 0, 0, 0, 0, 32, 0,
0, 0, 0, 0, 0, 33, 34, 35, 36, 37,
- 0, 0, 38, 39, 0, 1, 0, 0, 0, 0,
- 0, 41, 42, 0, 0, 0, 307, 43, 2, 0,
- 44, 3, 4, 0, 0, 5, 6, 7, 8, 9,
- 10, 11, 0, 12, 0, 13, 0, 15, 16, 0,
- -49, -49, 17, 18, 19, 20, 21, 0, 0, 0,
- 0, 23, 0, 0, 24, 25, 26, 0, 0, 27,
- 0, 0, 0, 29, 30, 31, 0, 0, 0, 0,
- 0, 0, 32, 0, 0, 0, 0, 0, 0, 33,
- 34, 35, 36, 37, 0, 0, 38, 39, 0, -49,
- 1, 0, 0, 0, 0, 41, 42, 0, 0, 0,
- 307, 43, 0, 2, 44, 0, 3, 4, 0, 0,
+ 0, 0, 38, 39, 0, -49, 1, 0, 0, 0,
+ 0, 41, 42, 0, 0, 0, 312, 43, 0, 2,
+ 44, 0, 3, 4, 0, 0, 5, 6, 7, 8,
+ 9, 10, 11, 0, 12, 0, 13, 0, 15, 16,
+ 0, 0, 0, 17, 18, 19, 20, 21, 0, 0,
+ 0, 0, 23, 0, 0, 24, 25, 26, 0, 0,
+ 27, 0, 0, 0, 29, 30, 31, 0, 0, 0,
+ 0, 0, 0, 32, 0, 0, 0, 0, 0, 0,
+ 33, 34, 35, 36, 37, 0, 0, 38, 39, 0,
+ 1, 0, -52, 0, 0, 0, 41, 42, 0, 0,
+ 0, 312, 43, 2, 0, 44, 3, 4, 0, 0,
5, 6, 7, 8, 9, 10, 11, 0, 12, 0,
13, 0, 15, 16, 0, 0, 0, 17, 18, 19,
20, 21, 0, 0, 0, 0, 23, 0, 0, 24,
25, 26, 0, 0, 27, 0, 0, 0, 29, 30,
31, 0, 0, 0, 0, 0, 0, 32, 0, 0,
0, 0, 0, 0, 33, 34, 35, 36, 37, 0,
- 0, 38, 39, 0, 1, 0, -52, 0, 0, 0,
- 41, 42, 0, 0, 0, 307, 43, 2, 0, 44,
+ 0, 38, 39, 0, 1, -49, 0, 0, 0, 0,
+ 41, 42, 0, 0, 0, 312, 43, 2, 0, 44,
3, 4, 0, 0, 5, 6, 7, 8, 9, 10,
11, 0, 12, 0, 13, 0, 15, 16, 0, 0,
0, 17, 18, 19, 20, 21, 0, 0, 0, 0,
23, 0, 0, 24, 25, 26, 0, 0, 27, 0,
0, 0, 29, 30, 31, 0, 0, 0, 0, 0,
0, 32, 0, 0, 0, 0, 0, 0, 33, 34,
- 35, 36, 37, 0, 0, 38, 39, 0, 1, -49,
- 0, 0, 0, 0, 41, 42, 0, 0, 0, 307,
- 43, 2, 0, 44, 3, 4, 0, 0, 5, 6,
- 7, 8, 9, 10, 11, 0, 12, 0, 13, 0,
- 15, 16, 0, 0, 0, 17, 18, 19, 20, 21,
- 0, 0, 0, 0, 23, 0, 0, 24, 25, 26,
- 0, 0, 27, 0, 0, 0, 29, 30, 31, 0,
- 0, 0, 0, 0, 0, 32, 0, 0, 0, 0,
- 0, 0, 33, 34, 35, 36, 37, 0, 0, 38,
- 39, 0, -52, 1, 0, 0, 0, 0, 41, 42,
- 0, 0, 0, 307, 43, 0, 2, 44, 0, 3,
+ 35, 36, 37, 0, 0, 38, 39, 0, -52, 1,
+ 0, 0, 0, 0, 41, 42, 0, 0, 0, 312,
+ 43, 0, 2, 44, 0, 3, 4, 0, 0, 5,
+ 6, 7, 8, 9, 10, 11, 0, 12, 0, 13,
+ 0, 15, 16, 0, 0, 0, 17, 18, 19, 20,
+ 21, 0, 0, 0, 0, 23, 0, 0, 24, 25,
+ 26, 0, 0, 27, 0, 0, 0, 29, 30, 31,
+ 0, 0, 0, 0, 0, 0, 32, 0, 0, 0,
+ 0, 0, 0, 33, 34, 35, 36, 37, 0, 0,
+ 38, 39, 0, 1, 359, 0, 0, 0, 0, 41,
+ 42, 0, 0, 0, 312, 43, 2, 0, 44, 3,
4, 0, 0, 5, 6, 7, 8, 9, 10, 11,
0, 12, 0, 13, 0, 15, 16, 0, 0, 0,
17, 18, 19, 20, 21, 0, 0, 0, 0, 23,
0, 0, 24, 25, 26, 0, 0, 27, 0, 0,
0, 29, 30, 31, 0, 0, 0, 0, 0, 0,
32, 0, 0, 0, 0, 0, 0, 33, 34, 35,
- 36, 37, 0, 0, 38, 39, 0, 1, 353, 0,
- 0, 0, 0, 41, 42, 0, 0, 0, 307, 43,
+ 36, 37, 0, 0, 38, 39, 0, 1, 366, 0,
+ 0, 0, 0, 41, 42, 0, 0, 0, 312, 43,
2, 0, 44, 3, 4, 0, 0, 5, 6, 7,
8, 9, 10, 11, 0, 12, 0, 13, 0, 15,
16, 0, 0, 0, 17, 18, 19, 20, 21, 0,
@@ -1219,193 +1229,197 @@ static const yytype_int16 yytable[] =
0, 27, 0, 0, 0, 29, 30, 31, 0, 0,
0, 0, 0, 0, 32, 0, 0, 0, 0, 0,
0, 33, 34, 35, 36, 37, 0, 0, 38, 39,
- 0, 1, 360, 0, 0, 0, 0, 41, 42, 0,
- 0, 0, 307, 43, 2, 0, 44, 3, 4, 0,
+ 0, 1, 368, 0, 0, 0, 0, 41, 42, 0,
+ 0, 0, 312, 43, 2, 0, 44, 3, 4, 0,
0, 5, 6, 7, 8, 9, 10, 11, 0, 12,
0, 13, 0, 15, 16, 0, 0, 0, 17, 18,
- 19, 20, 21, 0, 0, 0, 0, 23, 0, 0,
- 24, 25, 26, 0, 0, 27, 0, 0, 0, 29,
+ 19, 20, 0, 0, 0, 0, 0, 0, 0, 0,
+ 24, 0, 26, 0, 0, 0, 0, 0, 0, 29,
30, 31, 0, 0, 0, 0, 0, 0, 32, 0,
0, 0, 0, 0, 0, 33, 34, 35, 36, 37,
- 0, 0, 38, 39, 0, 1, 362, 0, 0, 0,
- 0, 41, 42, 0, 0, 0, 307, 43, 2, 0,
- 44, 3, 4, 0, 0, 5, 6, 7, 8, 9,
- 10, 11, 0, 12, 0, 13, 0, 15, 16, 0,
- 0, 0, 17, 18, 19, 20, 0, 0, 0, 0,
- 0, 0, 0, 0, 24, 0, 26, 0, 0, 0,
- 0, 0, 0, 29, 30, 31, 0, 0, 0, 0,
- 0, 0, 32, 0, 0, 0, 0, 0, 0, 33,
- 34, 35, 36, 37, 0, 0, 1, 39, 0, 0,
- 0, 0, 0, 0, 0, 41, 42, 0, 0, 2,
- 0, 43, 3, 4, 44, 0, 5, 0, 7, 8,
- 9, 66, 11, 0, 12, 0, 0, 0, 15, 16,
- 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 82, 0, 84, 0, 67, 2, 26, 0, 3,
- 4, 0, 0, 5, 0, 7, 8, 9, 66, 11,
- 0, 12, 0, 32, 0, 15, 16, 0, 0, 0,
- 33, 34, 35, 36, 37, 0, 0, 0, 0, 0,
- 0, 0, 67, 0, 26, 0, 41, 42, 0, 0,
- 0, 0, 43, 0, 0, 44, 0, 0, 0, 0,
- 32, 0, 0, 0, 0, 0, 0, 33, 34, 35,
- 36, 37, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 0, 0, 41, 42, 0, 0, 0, 0, 43,
- -159, -159, 44, 2, 0, 0, 3, 4, 0, 90,
+ 0, 0, 1, 39, 0, 0, 0, 0, 0, 0,
+ 0, 41, 42, 0, 0, 2, 0, 43, 3, 4,
+ 44, 0, 5, 0, 7, 8, 9, 66, 11, 0,
+ 12, 0, 0, 0, 15, 16, 0, 0, 0, 1,
+ 0, 0, 0, 0, 0, 0, 0, 82, 83, 84,
+ 85, 67, 2, 26, 0, 3, 4, 0, 0, 5,
+ 0, 7, 8, 9, 66, 11, 0, 12, 0, 32,
+ 0, 15, 16, 0, 0, 0, 33, 34, 35, 36,
+ 37, 0, 0, 0, 82, 0, 84, 0, 67, 0,
+ 26, 0, 41, 42, 0, 0, 0, 0, 43, 0,
+ 0, 44, 0, 0, 0, 0, 32, 0, 0, 0,
+ 0, 0, 0, 33, 34, 35, 36, 37, 0, 0,
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 41,
+ 42, 0, 0, 2, 0, 43, 3, 4, 44, 0,
5, 0, 7, 8, 9, 66, 11, 0, 12, 0,
- 1, 0, 15, 16, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 2, 0, 0, 3, 4, 0, 67,
- 5, 26, 7, 8, 9, 66, 11, 0, 12, 0,
- 291, 0, 15, 16, 0, 0, 0, 32, 0, 300,
- 0, 0, 0, 0, 33, 34, 35, 36, 37, 67,
- 0, 26, 311, 0, 312, 0, 0, 0, 0, 0,
- 41, 42, 0, 0, 0, 0, 43, 32, 0, 44,
- 0, 0, 0, 0, 33, 34, 35, 36, 37, 0,
- 0, 0, 334, 0, 0, 0, 0, 0, 338, 0,
- 41, 42, 0, 0, 0, 0, 43, 0, 0, 44,
- 0, 164, 348, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 356, 0, 357, 0, 0, 0, 361, 128,
- 129, 130, 131, 132, 133, 0, 134, 165, 166, 135,
- 136, 137, 0, 0, 0, 0, 82, 0, 84, 0,
- 0, 0, 0, 0, 0, 138, 139, 140, 141, 142,
- 143, 144, 128, 129, 130, 131, 132, 133, 0, 134,
- 0, 0, 135, 136, 137, 0, 0, 0, 0, 0,
- 0, 181, 0, 0, 0, 0, 0, 182, 138, 139,
- 140, 141, 142, 143, 144, 128, 129, 130, 131, 132,
- 133, 0, 134, 0, 0, 135, 136, 137, 0, 0,
- 0, 0, 0, 0, 183, 0, 0, 0, 0, 0,
- 184, 138, 139, 140, 141, 142, 143, 144, 128, 129,
- 130, 131, 132, 133, 0, 134, 0, 0, 135, 136,
- 137, 0, 0, 0, 0, 0, 0, 185, 0, 0,
- 0, 0, 0, 186, 138, 139, 140, 141, 142, 143,
- 144, 128, 129, 130, 131, 132, 133, 0, 134, 0,
- 0, 135, 136, 137, 0, 0, 0, 0, 0, 0,
- 187, 0, 0, 0, 0, 0, 188, 138, 139, 140,
- 141, 142, 143, 144, 128, 129, 130, 131, 132, 133,
+ 0, 0, 15, 16, 0, 0, 0, 1, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,
+ 2, 26, 0, 3, 4, 0, 0, 5, 0, 7,
+ 8, 9, 153, 11, 0, 12, 0, 32, 0, 15,
+ 16, 0, 0, 0, 33, 34, 35, 36, 37, 0,
+ 0, 0, 0, 0, 0, 0, 67, 0, 26, 0,
+ 41, 42, 0, 0, 0, 0, 43, -162, -162, 44,
+ 0, 0, 0, 0, 32, 0, 0, 0, 0, 0,
+ 0, 33, 34, 35, 36, 37, 0, 0, 0, 0,
+ 0, 0, 0, 0, 1, 0, 0, 41, 42, 0,
+ 0, 0, 0, 43, -162, -162, 44, 2, 0, 0,
+ 3, 4, 0, 90, 5, 0, 7, 8, 9, 66,
+ 11, 0, 12, 0, 1, 0, 15, 16, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0,
+ 3, 4, 0, 67, 5, 26, 7, 8, 9, 66,
+ 11, 0, 12, 0, 0, 0, 15, 16, 0, 0,
+ 0, 32, 0, 0, 0, 0, 0, 0, 33, 34,
+ 35, 36, 37, 67, 0, 26, 0, 0, 0, 0,
+ 0, 0, 0, 0, 41, 42, 0, 0, 0, 0,
+ 43, 32, 0, 44, 0, 0, 0, 0, 33, 34,
+ 35, 36, 37, 0, 0, 0, 0, 0, 82, 0,
+ 84, 0, 0, 0, 41, 42, 0, 0, 0, 0,
+ 43, 0, 0, 44, 128, 129, 130, 131, 132, 133,
0, 134, 0, 0, 135, 136, 137, 0, 0, 0,
- 0, 0, 0, 284, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 182, 0, 0, 0, 0, 0, 183,
138, 139, 140, 141, 142, 143, 144, 128, 129, 130,
131, 132, 133, 0, 134, 0, 0, 135, 136, 137,
- 0, 0, 0, 0, 0, 0, 285, 0, 0, 0,
- 0, 0, 0, 138, 139, 140, 141, 142, 143, 144,
+ 0, 0, 0, 0, 0, 0, 184, 0, 0, 0,
+ 0, 0, 185, 138, 139, 140, 141, 142, 143, 144,
128, 129, 130, 131, 132, 133, 0, 134, 0, 0,
- 135, 136, 137, 0, 0, 0, 0, 0, 0, 286,
- 0, 0, 0, 0, 0, 0, 138, 139, 140, 141,
+ 135, 136, 137, 0, 0, 0, 0, 0, 0, 186,
+ 0, 0, 0, 0, 0, 187, 138, 139, 140, 141,
142, 143, 144, 128, 129, 130, 131, 132, 133, 0,
134, 0, 0, 135, 136, 137, 0, 0, 0, 0,
- 0, 0, 287, 0, 0, 0, 0, 0, 0, 138,
+ 0, 0, 188, 0, 0, 0, 0, 0, 189, 138,
139, 140, 141, 142, 143, 144, 128, 129, 130, 131,
132, 133, 0, 134, 0, 0, 135, 136, 137, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 191, 138, 139, 140, 141, 142, 143, 144, 128,
+ 0, 0, 0, 0, 0, 288, 0, 0, 0, 0,
+ 0, 0, 138, 139, 140, 141, 142, 143, 144, 128,
129, 130, 131, 132, 133, 0, 134, 0, 0, 135,
- 136, 137, 0, 0, 0, 0, 0, 0, 0, 0,
+ 136, 137, 0, 0, 0, 0, 0, 0, 289, 0,
0, 0, 0, 0, 0, 138, 139, 140, 141, 142,
- 143, 144, 177, 192, 0, 0, 0, 0, 128, 129,
- 130, 131, 132, 133, 0, 134, 0, 0, 135, 136,
- 137, 128, 129, 130, 131, 132, 133, 0, 134, 0,
- 0, 135, 136, 137, 138, 139, 140, 141, 142, 143,
- 144, 0, 0, 0, 0, 0, 0, 138, 139, 140,
- 141, 142, 143, 144, 0, 0, 0, 196, 128, 129,
+ 143, 144, 128, 129, 130, 131, 132, 133, 0, 134,
+ 0, 0, 135, 136, 137, 0, 0, 0, 0, 0,
+ 0, 290, 0, 0, 0, 0, 0, 0, 138, 139,
+ 140, 141, 142, 143, 144, 128, 129, 130, 131, 132,
+ 133, 0, 134, 0, 0, 135, 136, 137, 0, 0,
+ 0, 0, 0, 0, 291, 0, 0, 0, 0, 0,
+ 0, 138, 139, 140, 141, 142, 143, 144, 128, 129,
130, 131, 132, 133, 0, 134, 0, 0, 135, 136,
- 137, 0, 0, 0, 0, 0, 189, 190, 0, 0,
+ 137, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 138, 139, 140, 141, 142, 143,
- 144, 128, 129, 130, 131, 132, 133, 0, 134, 0,
- 0, 135, 136, 137, 128, 129, 130, 131, 0, 0,
- 0, 134, 0, 0, 135, 136, 137, 138, 139, 140,
- 141, 142, 143, 144, 0, 0, 0, 0, 0, 0,
- 138, 139, 140, 141, 142, 143, 144
+ 144, 178, 0, 0, 0, 0, 0, 128, 129, 130,
+ 131, 132, 133, 0, 134, 0, 0, 135, 136, 137,
+ 128, 129, 130, 131, 132, 133, 0, 134, 0, 0,
+ 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
+ 0, 0, 0, 0, 0, 0, 138, 139, 140, 141,
+ 142, 143, 144, 0, 0, 0, 197, 128, 129, 130,
+ 131, 132, 133, 0, 134, 0, 0, 135, 136, 137,
+ 0, 0, 0, 0, 0, 190, 191, 0, 0, 0,
+ 0, 0, 0, 138, 139, 140, 141, 142, 143, 144,
+ 128, 129, 130, 131, 132, 133, 0, 134, 0, 0,
+ 135, 136, 137, 128, 129, 130, 131, 0, 0, 0,
+ 134, 0, 0, 135, 136, 137, 138, 139, 140, 141,
+ 142, 143, 144, 0, 0, 0, 0, 0, 0, 138,
+ 139, 140, 141, 142, 143, 144
};
static const yytype_int16 yycheck[] =
{
- 6, 7, 156, 79, 10, 96, 273, 4, 300, 96,
- 48, 8, 99, 19, 51, 0, 69, 93, 24, 6,
- 7, 43, 30, 29, 30, 51, 32, 33, 34, 35,
- 36, 37, 38, 69, 54, 41, 42, 43, 44, 0,
- 93, 94, 64, 54, 64, 51, 313, 98, 99, 24,
- 54, 26, 26, 64, 1, 91, 92, 93, 94, 26,
- 64, 67, 68, 96, 356, 71, 99, 14, 96, 75,
- 17, 18, 78, 27, 21, 29, 82, 74, 86, 26,
- 27, 68, 29, 69, 71, 97, 72, 96, 239, 99,
- 99, 78, 56, 57, 102, 98, 99, 99, 95, 96,
- 75, 76, 77, 78, 90, 91, 92, 93, 94, 98,
- 99, 36, 37, 26, 46, 26, 26, 26, 54, 53,
- 26, 275, 128, 129, 130, 131, 132, 133, 134, 135,
- 136, 137, 138, 139, 140, 141, 142, 143, 144, 26,
- 146, 126, 26, 102, 150, 102, 101, 99, 154, 99,
- 97, 26, 48, 100, 160, 231, 99, 99, 99, 165,
- 166, 53, 168, 169, 170, 26, 163, 173, 174, 175,
- 176, 177, 323, 44, 26, 181, 182, 183, 184, 185,
- 186, 187, 188, 189, 190, 26, 26, 26, 339, 54,
- 17, 18, 19, 87, 200, 86, 26, 54, 349, 26,
- 197, 198, 35, 85, 355, 54, 33, 26, 85, 99,
- 53, 126, 288, 289, 261, 192, 299, 201, 164, -1,
- -1, 297, -1, -1, -1, -1, 1, -1, -1, -1,
- -1, 237, 238, -1, -1, -1, 242, 243, -1, 14,
- -1, -1, 17, 18, 320, -1, 21, -1, 23, 24,
- 25, 26, 27, -1, 29, -1, -1, -1, 33, 34,
- -1, -1, 338, -1, -1, -1, -1, -1, -1, -1,
- 276, 46, 47, 48, 49, 50, -1, 52, 284, 285,
- 286, 287, -1, -1, -1, 282, -1, -1, -1, -1,
- -1, -1, -1, 68, -1, -1, -1, -1, -1, -1,
- 75, 76, 77, 78, 79, -1, -1, -1, -1, -1,
- 0, 1, 318, -1, -1, -1, 91, 92, -1, -1,
- -1, -1, 97, 329, 14, 100, -1, 17, 18, -1,
- 336, 21, 22, 23, 24, 25, 26, 27, 344, 29,
- 30, 31, -1, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, -1, 44, -1, 46, 47, 48, -1,
- 50, 51, 52, 53, 54, 55, 56, -1, -1, 59,
- 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
- 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
- 80, 81, 82, 83, -1, 85, 86, 87, 88, 89,
- 90, 91, 92, 93, 94, 1, 96, 97, 98, 99,
- 100, 101, 35, -1, -1, -1, -1, -1, 14, -1,
- -1, 17, 18, -1, -1, 21, -1, 23, 24, 25,
- 26, 27, -1, 29, -1, -1, -1, 33, 34, 62,
- 63, 64, 65, 66, 67, -1, 69, -1, -1, 72,
- 73, 74, -1, -1, 50, -1, 52, -1, -1, -1,
- -1, -1, -1, -1, -1, 88, 89, 90, 91, 92,
- 93, 94, 68, -1, -1, -1, -1, -1, -1, 75,
- 76, 77, 78, 79, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 0, 1, 91, 92, -1, -1, -1,
- -1, 97, -1, -1, 100, 101, 102, 14, -1, -1,
- 17, 18, -1, -1, 21, 22, 23, 24, 25, 26,
- 27, -1, 29, 30, 31, -1, 33, 34, -1, 36,
- 37, 38, 39, 40, 41, 42, -1, -1, -1, -1,
- 47, -1, -1, 50, 51, 52, -1, -1, 55, -1,
- -1, -1, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, -1, -1, 72, 73, 74, 75, 76,
- 77, 78, 79, -1, -1, 82, 83, -1, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, -1, 96,
- 97, 0, 1, 100, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 14, -1, -1, 17, 18,
- -1, -1, 21, 22, 23, 24, 25, 26, 27, -1,
- 29, 30, 31, -1, 33, 34, -1, 36, 37, 38,
- 39, 40, 41, 42, -1, -1, -1, -1, 47, -1,
- -1, 50, 51, 52, -1, -1, 55, -1, -1, -1,
- 59, 60, 61, -1, -1, -1, -1, -1, -1, 68,
- -1, -1, -1, -1, -1, -1, 75, 76, 77, 78,
- 79, -1, -1, 82, 83, -1, 85, 86, 87, 0,
- 1, -1, 91, 92, -1, -1, -1, 96, 97, -1,
- 99, 100, -1, 14, -1, -1, 17, 18, -1, -1,
+ 6, 7, 79, 30, 10, 277, 305, 4, 97, 98,
+ 99, 8, 54, 19, 96, 0, 93, 157, 24, 6,
+ 7, 43, 64, 29, 30, 69, 32, 33, 34, 35,
+ 36, 37, 38, 69, 54, 41, 42, 43, 44, 56,
+ 57, 24, 64, 26, 64, 51, 48, 319, 96, 93,
+ 94, 99, 98, 99, 1, 91, 92, 93, 94, 86,
+ 51, 67, 68, 362, 27, 71, 29, 14, 54, 75,
+ 17, 18, 78, 51, 21, 102, 82, 74, 64, 26,
+ 27, 68, 29, 26, 71, 69, 242, 96, 72, 26,
+ 99, 78, 75, 76, 77, 78, 0, 96, 95, 96,
+ 99, 96, 17, 18, 19, 97, 90, 91, 92, 93,
+ 94, 26, 36, 37, 26, 46, 98, 99, 33, 98,
+ 99, 26, 128, 129, 130, 131, 132, 133, 134, 135,
+ 136, 137, 138, 139, 140, 141, 142, 143, 144, 279,
+ 146, 126, 98, 99, 150, 99, 99, 26, 26, 155,
+ 97, 54, 53, 100, 26, 161, 26, 234, 26, 101,
+ 166, 167, 102, 169, 170, 171, 102, 164, 174, 175,
+ 176, 177, 178, 329, 99, 26, 182, 183, 184, 185,
+ 186, 187, 188, 189, 190, 191, 273, 48, 99, 345,
+ 99, 99, 99, 53, 26, 201, 283, 44, 26, 355,
+ 26, 198, 199, 26, 26, 361, 54, 87, 26, 296,
+ 86, 54, 299, 99, 35, 292, 293, 54, 54, 85,
+ 26, 85, 53, 264, 126, 302, 62, 63, 64, 65,
+ 66, 67, 193, 69, 240, 241, 72, 73, 74, 245,
+ 246, 328, 304, 165, 276, 202, -1, 334, -1, 326,
+ -1, -1, 88, 89, 90, 91, 92, 93, 94, -1,
+ 96, 348, -1, -1, -1, -1, 35, 344, -1, -1,
+ 276, 358, -1, 360, 280, -1, -1, 364, -1, -1,
+ -1, -1, 288, 289, 290, 291, -1, -1, -1, 286,
+ -1, -1, -1, 62, 63, 64, 65, 66, 67, -1,
+ 69, -1, -1, 72, 73, 74, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 0, 1, 324, 88,
+ 89, 90, 91, 92, 93, 94, -1, -1, -1, 335,
+ 14, -1, -1, 17, 18, -1, 342, 21, 22, 23,
+ 24, 25, 26, 27, 350, 29, 30, 31, -1, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, -1,
+ 44, -1, 46, 47, 48, -1, 50, 51, 52, 53,
+ 54, 55, 56, -1, -1, 59, 60, 61, 62, 63,
+ 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
+ -1, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ 94, 1, 96, 97, 98, 99, 100, 101, -1, -1,
+ -1, -1, -1, -1, 14, -1, -1, 17, 18, -1,
+ -1, 21, -1, 23, 24, 25, 26, 27, -1, 29,
+ -1, -1, -1, 33, 34, -1, 44, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 50, -1, 52, -1, 62, 63, 64, 65, 66, 67,
+ -1, 69, 70, 71, 72, 73, 74, -1, 68, -1,
+ -1, -1, -1, -1, -1, 75, 76, 77, 78, 79,
+ 88, 89, 90, 91, 92, 93, 94, -1, -1, 0,
+ 1, 91, 92, -1, -1, -1, -1, 97, -1, -1,
+ 100, 101, 102, 14, -1, -1, 17, 18, -1, -1,
21, 22, 23, 24, 25, 26, 27, -1, 29, 30,
31, -1, 33, 34, -1, 36, 37, 38, 39, 40,
41, 42, -1, -1, -1, -1, 47, -1, -1, 50,
51, 52, -1, -1, 55, -1, -1, -1, 59, 60,
- 61, -1, -1, -1, -1, -1, -1, 68, -1, -1,
- -1, -1, -1, -1, 75, 76, 77, 78, 79, -1,
- -1, 82, 83, -1, 85, 86, 87, 0, 1, -1,
- 91, 92, -1, -1, -1, 96, 97, -1, 99, 100,
+ 61, 62, 63, 64, 65, 66, 67, 68, 69, -1,
+ -1, 72, 73, 74, 75, 76, 77, 78, 79, -1,
+ -1, 82, 83, -1, 85, 86, 87, 88, 89, 90,
+ 91, 92, 93, 94, -1, 96, 97, 0, 1, 100,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, 14, -1, -1, 17, 18, -1, -1, 21, 22,
- 23, 24, 25, 26, 27, -1, 29, -1, 31, 32,
- 33, 34, -1, -1, -1, 38, 39, 40, 41, 42,
- -1, -1, 45, -1, 47, -1, -1, 50, 51, 52,
- -1, -1, 55, -1, -1, 58, 59, 60, 61, -1,
+ 23, 24, 25, 26, 27, -1, 29, 30, 31, -1,
+ 33, 34, -1, 36, 37, 38, 39, 40, 41, 42,
+ -1, -1, -1, -1, 47, -1, -1, 50, 51, 52,
+ -1, -1, 55, -1, -1, -1, 59, 60, 61, -1,
-1, -1, -1, -1, -1, 68, -1, -1, -1, -1,
-1, -1, 75, 76, 77, 78, 79, -1, -1, 82,
- 83, 84, 0, 1, -1, -1, -1, -1, 91, 92,
- -1, -1, -1, 96, 97, -1, 14, 100, -1, 17,
+ 83, -1, 85, 86, 87, 0, 1, -1, 91, 92,
+ -1, -1, -1, 96, 97, -1, 99, 100, -1, 14,
+ -1, -1, 17, 18, -1, -1, 21, 22, 23, 24,
+ 25, 26, 27, -1, 29, 30, 31, -1, 33, 34,
+ -1, 36, 37, 38, 39, 40, 41, 42, -1, -1,
+ -1, -1, 47, -1, -1, 50, 51, 52, -1, -1,
+ 55, -1, -1, -1, 59, 60, 61, -1, -1, -1,
+ -1, -1, -1, 68, -1, -1, -1, -1, -1, -1,
+ 75, 76, 77, 78, 79, -1, -1, 82, 83, -1,
+ 85, 86, 87, 0, 1, -1, 91, 92, -1, -1,
+ -1, 96, 97, -1, 99, 100, -1, 14, -1, -1,
+ 17, 18, -1, -1, 21, 22, 23, 24, 25, 26,
+ 27, -1, 29, -1, 31, 32, 33, 34, -1, -1,
+ -1, 38, 39, 40, 41, 42, -1, -1, 45, -1,
+ 47, -1, -1, 50, 51, 52, -1, -1, 55, -1,
+ -1, 58, 59, 60, 61, -1, -1, -1, -1, -1,
+ -1, 68, -1, -1, -1, -1, -1, -1, 75, 76,
+ 77, 78, 79, -1, -1, 82, 83, 84, 0, 1,
+ -1, -1, -1, -1, 91, 92, -1, -1, -1, 96,
+ 97, -1, 14, 100, -1, 17, 18, -1, -1, 21,
+ 22, 23, 24, 25, 26, 27, -1, 29, 30, 31,
+ -1, 33, 34, -1, -1, -1, 38, 39, 40, 41,
+ 42, -1, -1, -1, -1, 47, -1, -1, 50, 51,
+ 52, -1, -1, 55, -1, -1, -1, 59, 60, 61,
+ -1, -1, -1, -1, -1, -1, 68, -1, -1, -1,
+ -1, -1, -1, 75, 76, 77, 78, 79, -1, -1,
+ 82, 83, 0, 1, -1, -1, -1, -1, -1, 91,
+ 92, -1, -1, -1, 96, 97, 14, -1, 100, 17,
18, -1, -1, 21, 22, 23, 24, 25, 26, 27,
- -1, 29, 30, 31, -1, 33, 34, -1, -1, -1,
+ -1, 29, -1, 31, -1, 33, 34, -1, -1, -1,
38, 39, 40, 41, 42, -1, -1, -1, -1, 47,
-1, -1, 50, 51, 52, -1, -1, 55, -1, -1,
-1, 59, 60, 61, -1, -1, -1, -1, -1, -1,
@@ -1419,32 +1433,32 @@ static const yytype_int16 yycheck[] =
-1, 55, -1, -1, -1, 59, 60, 61, -1, -1,
-1, -1, -1, -1, 68, -1, -1, -1, -1, -1,
-1, 75, 76, 77, 78, 79, -1, -1, 82, 83,
- 0, 1, -1, -1, -1, -1, -1, 91, 92, -1,
+ -1, 1, -1, -1, -1, -1, -1, 91, 92, -1,
-1, -1, 96, 97, 14, -1, 100, 17, 18, -1,
-1, 21, 22, 23, 24, 25, 26, 27, -1, 29,
- -1, 31, -1, 33, 34, -1, -1, -1, 38, 39,
+ -1, 31, -1, 33, 34, -1, 36, 37, 38, 39,
40, 41, 42, -1, -1, -1, -1, 47, -1, -1,
50, 51, 52, -1, -1, 55, -1, -1, -1, 59,
60, 61, -1, -1, -1, -1, -1, -1, 68, -1,
-1, -1, -1, -1, -1, 75, 76, 77, 78, 79,
- -1, -1, 82, 83, -1, 1, -1, -1, -1, -1,
- -1, 91, 92, -1, -1, -1, 96, 97, 14, -1,
- 100, 17, 18, -1, -1, 21, 22, 23, 24, 25,
- 26, 27, -1, 29, -1, 31, -1, 33, 34, -1,
- 36, 37, 38, 39, 40, 41, 42, -1, -1, -1,
- -1, 47, -1, -1, 50, 51, 52, -1, -1, 55,
- -1, -1, -1, 59, 60, 61, -1, -1, -1, -1,
- -1, -1, 68, -1, -1, -1, -1, -1, -1, 75,
- 76, 77, 78, 79, -1, -1, 82, 83, -1, 85,
- 1, -1, -1, -1, -1, 91, 92, -1, -1, -1,
- 96, 97, -1, 14, 100, -1, 17, 18, -1, -1,
+ -1, -1, 82, 83, -1, 85, 1, -1, -1, -1,
+ -1, 91, 92, -1, -1, -1, 96, 97, -1, 14,
+ 100, -1, 17, 18, -1, -1, 21, 22, 23, 24,
+ 25, 26, 27, -1, 29, -1, 31, -1, 33, 34,
+ -1, -1, -1, 38, 39, 40, 41, 42, -1, -1,
+ -1, -1, 47, -1, -1, 50, 51, 52, -1, -1,
+ 55, -1, -1, -1, 59, 60, 61, -1, -1, -1,
+ -1, -1, -1, 68, -1, -1, -1, -1, -1, -1,
+ 75, 76, 77, 78, 79, -1, -1, 82, 83, -1,
+ 1, -1, 87, -1, -1, -1, 91, 92, -1, -1,
+ -1, 96, 97, 14, -1, 100, 17, 18, -1, -1,
21, 22, 23, 24, 25, 26, 27, -1, 29, -1,
31, -1, 33, 34, -1, -1, -1, 38, 39, 40,
41, 42, -1, -1, -1, -1, 47, -1, -1, 50,
51, 52, -1, -1, 55, -1, -1, -1, 59, 60,
61, -1, -1, -1, -1, -1, -1, 68, -1, -1,
-1, -1, -1, -1, 75, 76, 77, 78, 79, -1,
- -1, 82, 83, -1, 1, -1, 87, -1, -1, -1,
+ -1, 82, 83, -1, 1, 86, -1, -1, -1, -1,
91, 92, -1, -1, -1, 96, 97, 14, -1, 100,
17, 18, -1, -1, 21, 22, 23, 24, 25, 26,
27, -1, 29, -1, 31, -1, 33, 34, -1, -1,
@@ -1452,17 +1466,17 @@ static const yytype_int16 yycheck[] =
47, -1, -1, 50, 51, 52, -1, -1, 55, -1,
-1, -1, 59, 60, 61, -1, -1, -1, -1, -1,
-1, 68, -1, -1, -1, -1, -1, -1, 75, 76,
- 77, 78, 79, -1, -1, 82, 83, -1, 1, 86,
+ 77, 78, 79, -1, -1, 82, 83, -1, 85, 1,
-1, -1, -1, -1, 91, 92, -1, -1, -1, 96,
- 97, 14, -1, 100, 17, 18, -1, -1, 21, 22,
- 23, 24, 25, 26, 27, -1, 29, -1, 31, -1,
- 33, 34, -1, -1, -1, 38, 39, 40, 41, 42,
- -1, -1, -1, -1, 47, -1, -1, 50, 51, 52,
- -1, -1, 55, -1, -1, -1, 59, 60, 61, -1,
- -1, -1, -1, -1, -1, 68, -1, -1, -1, -1,
- -1, -1, 75, 76, 77, 78, 79, -1, -1, 82,
- 83, -1, 85, 1, -1, -1, -1, -1, 91, 92,
- -1, -1, -1, 96, 97, -1, 14, 100, -1, 17,
+ 97, -1, 14, 100, -1, 17, 18, -1, -1, 21,
+ 22, 23, 24, 25, 26, 27, -1, 29, -1, 31,
+ -1, 33, 34, -1, -1, -1, 38, 39, 40, 41,
+ 42, -1, -1, -1, -1, 47, -1, -1, 50, 51,
+ 52, -1, -1, 55, -1, -1, -1, 59, 60, 61,
+ -1, -1, -1, -1, -1, -1, 68, -1, -1, -1,
+ -1, -1, -1, 75, 76, 77, 78, 79, -1, -1,
+ 82, 83, -1, 1, 86, -1, -1, -1, -1, 91,
+ 92, -1, -1, -1, 96, 97, 14, -1, 100, 17,
18, -1, -1, 21, 22, 23, 24, 25, 26, 27,
-1, 29, -1, 31, -1, 33, 34, -1, -1, -1,
38, 39, 40, 41, 42, -1, -1, -1, -1, 47,
@@ -1482,96 +1496,91 @@ static const yytype_int16 yycheck[] =
-1, -1, 96, 97, 14, -1, 100, 17, 18, -1,
-1, 21, 22, 23, 24, 25, 26, 27, -1, 29,
-1, 31, -1, 33, 34, -1, -1, -1, 38, 39,
- 40, 41, 42, -1, -1, -1, -1, 47, -1, -1,
- 50, 51, 52, -1, -1, 55, -1, -1, -1, 59,
+ 40, 41, -1, -1, -1, -1, -1, -1, -1, -1,
+ 50, -1, 52, -1, -1, -1, -1, -1, -1, 59,
60, 61, -1, -1, -1, -1, -1, -1, 68, -1,
-1, -1, -1, -1, -1, 75, 76, 77, 78, 79,
- -1, -1, 82, 83, -1, 1, 86, -1, -1, -1,
- -1, 91, 92, -1, -1, -1, 96, 97, 14, -1,
- 100, 17, 18, -1, -1, 21, 22, 23, 24, 25,
- 26, 27, -1, 29, -1, 31, -1, 33, 34, -1,
- -1, -1, 38, 39, 40, 41, -1, -1, -1, -1,
- -1, -1, -1, -1, 50, -1, 52, -1, -1, -1,
- -1, -1, -1, 59, 60, 61, -1, -1, -1, -1,
- -1, -1, 68, -1, -1, -1, -1, -1, -1, 75,
- 76, 77, 78, 79, -1, -1, 1, 83, -1, -1,
- -1, -1, -1, -1, -1, 91, 92, -1, -1, 14,
- -1, 97, 17, 18, 100, -1, 21, -1, 23, 24,
- 25, 26, 27, -1, 29, -1, -1, -1, 33, 34,
- -1, -1, -1, 1, -1, -1, -1, -1, -1, -1,
- -1, 46, -1, 48, -1, 50, 14, 52, -1, 17,
- 18, -1, -1, 21, -1, 23, 24, 25, 26, 27,
- -1, 29, -1, 68, -1, 33, 34, -1, -1, -1,
- 75, 76, 77, 78, 79, -1, -1, -1, -1, -1,
- -1, -1, 50, -1, 52, -1, 91, 92, -1, -1,
- -1, -1, 97, -1, -1, 100, -1, -1, -1, -1,
- 68, -1, -1, -1, -1, -1, -1, 75, 76, 77,
- 78, 79, -1, -1, -1, -1, -1, -1, -1, -1,
- 1, -1, -1, 91, 92, -1, -1, -1, -1, 97,
- 98, 99, 100, 14, -1, -1, 17, 18, -1, 20,
+ -1, -1, 1, 83, -1, -1, -1, -1, -1, -1,
+ -1, 91, 92, -1, -1, 14, -1, 97, 17, 18,
+ 100, -1, 21, -1, 23, 24, 25, 26, 27, -1,
+ 29, -1, -1, -1, 33, 34, -1, -1, -1, 1,
+ -1, -1, -1, -1, -1, -1, -1, 46, 47, 48,
+ 49, 50, 14, 52, -1, 17, 18, -1, -1, 21,
+ -1, 23, 24, 25, 26, 27, -1, 29, -1, 68,
+ -1, 33, 34, -1, -1, -1, 75, 76, 77, 78,
+ 79, -1, -1, -1, 46, -1, 48, -1, 50, -1,
+ 52, -1, 91, 92, -1, -1, -1, -1, 97, -1,
+ -1, 100, -1, -1, -1, -1, 68, -1, -1, -1,
+ -1, -1, -1, 75, 76, 77, 78, 79, -1, -1,
+ 1, -1, -1, -1, -1, -1, -1, -1, -1, 91,
+ 92, -1, -1, 14, -1, 97, 17, 18, 100, -1,
21, -1, 23, 24, 25, 26, 27, -1, 29, -1,
- 1, -1, 33, 34, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 14, -1, -1, 17, 18, -1, 50,
- 21, 52, 23, 24, 25, 26, 27, -1, 29, -1,
- 270, -1, 33, 34, -1, -1, -1, 68, -1, 279,
- -1, -1, -1, -1, 75, 76, 77, 78, 79, 50,
- -1, 52, 292, -1, 294, -1, -1, -1, -1, -1,
- 91, 92, -1, -1, -1, -1, 97, 68, -1, 100,
- -1, -1, -1, -1, 75, 76, 77, 78, 79, -1,
- -1, -1, 322, -1, -1, -1, -1, -1, 328, -1,
- 91, 92, -1, -1, -1, -1, 97, -1, -1, 100,
- -1, 44, 342, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 352, -1, 354, -1, -1, -1, 358, 62,
- 63, 64, 65, 66, 67, -1, 69, 70, 71, 72,
- 73, 74, -1, -1, -1, -1, 46, -1, 48, -1,
- -1, -1, -1, -1, -1, 88, 89, 90, 91, 92,
- 93, 94, 62, 63, 64, 65, 66, 67, -1, 69,
- -1, -1, 72, 73, 74, -1, -1, -1, -1, -1,
- -1, 48, -1, -1, -1, -1, -1, 54, 88, 89,
- 90, 91, 92, 93, 94, 62, 63, 64, 65, 66,
- 67, -1, 69, -1, -1, 72, 73, 74, -1, -1,
- -1, -1, -1, -1, 48, -1, -1, -1, -1, -1,
- 54, 88, 89, 90, 91, 92, 93, 94, 62, 63,
- 64, 65, 66, 67, -1, 69, -1, -1, 72, 73,
- 74, -1, -1, -1, -1, -1, -1, 48, -1, -1,
- -1, -1, -1, 54, 88, 89, 90, 91, 92, 93,
- 94, 62, 63, 64, 65, 66, 67, -1, 69, -1,
- -1, 72, 73, 74, -1, -1, -1, -1, -1, -1,
- 48, -1, -1, -1, -1, -1, 54, 88, 89, 90,
- 91, 92, 93, 94, 62, 63, 64, 65, 66, 67,
+ -1, -1, 33, 34, -1, -1, -1, 1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 50,
+ 14, 52, -1, 17, 18, -1, -1, 21, -1, 23,
+ 24, 25, 26, 27, -1, 29, -1, 68, -1, 33,
+ 34, -1, -1, -1, 75, 76, 77, 78, 79, -1,
+ -1, -1, -1, -1, -1, -1, 50, -1, 52, -1,
+ 91, 92, -1, -1, -1, -1, 97, 98, 99, 100,
+ -1, -1, -1, -1, 68, -1, -1, -1, -1, -1,
+ -1, 75, 76, 77, 78, 79, -1, -1, -1, -1,
+ -1, -1, -1, -1, 1, -1, -1, 91, 92, -1,
+ -1, -1, -1, 97, 98, 99, 100, 14, -1, -1,
+ 17, 18, -1, 20, 21, -1, 23, 24, 25, 26,
+ 27, -1, 29, -1, 1, -1, 33, 34, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 14, -1, -1,
+ 17, 18, -1, 50, 21, 52, 23, 24, 25, 26,
+ 27, -1, 29, -1, -1, -1, 33, 34, -1, -1,
+ -1, 68, -1, -1, -1, -1, -1, -1, 75, 76,
+ 77, 78, 79, 50, -1, 52, -1, -1, -1, -1,
+ -1, -1, -1, -1, 91, 92, -1, -1, -1, -1,
+ 97, 68, -1, 100, -1, -1, -1, -1, 75, 76,
+ 77, 78, 79, -1, -1, -1, -1, -1, 46, -1,
+ 48, -1, -1, -1, 91, 92, -1, -1, -1, -1,
+ 97, -1, -1, 100, 62, 63, 64, 65, 66, 67,
-1, 69, -1, -1, 72, 73, 74, -1, -1, -1,
- -1, -1, -1, 48, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 48, -1, -1, -1, -1, -1, 54,
88, 89, 90, 91, 92, 93, 94, 62, 63, 64,
65, 66, 67, -1, 69, -1, -1, 72, 73, 74,
-1, -1, -1, -1, -1, -1, 48, -1, -1, -1,
- -1, -1, -1, 88, 89, 90, 91, 92, 93, 94,
+ -1, -1, 54, 88, 89, 90, 91, 92, 93, 94,
62, 63, 64, 65, 66, 67, -1, 69, -1, -1,
72, 73, 74, -1, -1, -1, -1, -1, -1, 48,
- -1, -1, -1, -1, -1, -1, 88, 89, 90, 91,
+ -1, -1, -1, -1, -1, 54, 88, 89, 90, 91,
92, 93, 94, 62, 63, 64, 65, 66, 67, -1,
69, -1, -1, 72, 73, 74, -1, -1, -1, -1,
- -1, -1, 48, -1, -1, -1, -1, -1, -1, 88,
+ -1, -1, 48, -1, -1, -1, -1, -1, 54, 88,
89, 90, 91, 92, 93, 94, 62, 63, 64, 65,
66, 67, -1, 69, -1, -1, 72, 73, 74, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 54, 88, 89, 90, 91, 92, 93, 94, 62,
+ -1, -1, -1, -1, -1, 48, -1, -1, -1, -1,
+ -1, -1, 88, 89, 90, 91, 92, 93, 94, 62,
63, 64, 65, 66, 67, -1, 69, -1, -1, 72,
- 73, 74, -1, -1, -1, -1, -1, -1, -1, -1,
+ 73, 74, -1, -1, -1, -1, -1, -1, 48, -1,
-1, -1, -1, -1, -1, 88, 89, 90, 91, 92,
- 93, 94, 56, 96, -1, -1, -1, -1, 62, 63,
- 64, 65, 66, 67, -1, 69, -1, -1, 72, 73,
- 74, 62, 63, 64, 65, 66, 67, -1, 69, -1,
- -1, 72, 73, 74, 88, 89, 90, 91, 92, 93,
- 94, -1, -1, -1, -1, -1, -1, 88, 89, 90,
- 91, 92, 93, 94, -1, -1, -1, 98, 62, 63,
+ 93, 94, 62, 63, 64, 65, 66, 67, -1, 69,
+ -1, -1, 72, 73, 74, -1, -1, -1, -1, -1,
+ -1, 48, -1, -1, -1, -1, -1, -1, 88, 89,
+ 90, 91, 92, 93, 94, 62, 63, 64, 65, 66,
+ 67, -1, 69, -1, -1, 72, 73, 74, -1, -1,
+ -1, -1, -1, -1, 48, -1, -1, -1, -1, -1,
+ -1, 88, 89, 90, 91, 92, 93, 94, 62, 63,
64, 65, 66, 67, -1, 69, -1, -1, 72, 73,
- 74, -1, -1, -1, -1, -1, 80, 81, -1, -1,
+ 74, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 88, 89, 90, 91, 92, 93,
- 94, 62, 63, 64, 65, 66, 67, -1, 69, -1,
- -1, 72, 73, 74, 62, 63, 64, 65, -1, -1,
- -1, 69, -1, -1, 72, 73, 74, 88, 89, 90,
- 91, 92, 93, 94, -1, -1, -1, -1, -1, -1,
- 88, 89, 90, 91, 92, 93, 94
+ 94, 56, -1, -1, -1, -1, -1, 62, 63, 64,
+ 65, 66, 67, -1, 69, -1, -1, 72, 73, 74,
+ 62, 63, 64, 65, 66, 67, -1, 69, -1, -1,
+ 72, 73, 74, 88, 89, 90, 91, 92, 93, 94,
+ -1, -1, -1, -1, -1, -1, 88, 89, 90, 91,
+ 92, 93, 94, -1, -1, -1, 98, 62, 63, 64,
+ 65, 66, 67, -1, 69, -1, -1, 72, 73, 74,
+ -1, -1, -1, -1, -1, 80, 81, -1, -1, -1,
+ -1, -1, -1, 88, 89, 90, 91, 92, 93, 94,
+ 62, 63, 64, 65, 66, 67, -1, 69, -1, -1,
+ 72, 73, 74, 62, 63, 64, 65, -1, -1, -1,
+ 69, -1, -1, 72, 73, 74, 88, 89, 90, 91,
+ 92, 93, 94, -1, -1, -1, -1, -1, -1, 88,
+ 89, 90, 91, 92, 93, 94
};
/* YYSTOSSTATE-NUM -- The (internal number of the) accessing
@@ -1583,38 +1592,38 @@ static const yytype_uint8 yystos[] =
41, 42, 45, 47, 50, 51, 52, 55, 58, 59,
60, 61, 68, 75, 76, 77, 78, 79, 82, 83,
84, 91, 92, 97, 100, 104, 105, 106, 107, 108,
- 119, 125, 128, 129, 130, 131, 132, 139, 141, 143,
- 147, 152, 155, 96, 26, 128, 26, 50, 97, 129,
- 153, 97, 153, 128, 48, 97, 129, 154, 142, 146,
- 51, 133, 46, 47, 48, 49, 129, 140, 144, 51,
+ 119, 125, 128, 129, 131, 132, 133, 140, 142, 144,
+ 148, 153, 156, 96, 26, 128, 26, 50, 97, 129,
+ 154, 97, 154, 128, 48, 97, 129, 155, 143, 147,
+ 51, 134, 46, 47, 48, 49, 129, 141, 145, 51,
20, 129, 56, 57, 17, 18, 19, 26, 33, 26,
- 26, 129, 129, 140, 135, 129, 129, 129, 129, 129,
- 129, 129, 134, 148, 129, 129, 129, 27, 29, 102,
- 129, 156, 157, 158, 159, 0, 96, 129, 62, 63,
+ 26, 129, 129, 141, 136, 129, 129, 129, 129, 129,
+ 129, 129, 135, 149, 129, 129, 129, 27, 29, 102,
+ 129, 157, 158, 159, 160, 0, 96, 129, 62, 63,
64, 65, 66, 67, 69, 72, 73, 74, 88, 89,
- 90, 91, 92, 93, 94, 126, 97, 129, 129, 153,
- 99, 153, 128, 153, 99, 153, 126, 26, 136, 129,
- 46, 140, 26, 26, 44, 70, 71, 26, 126, 54,
- 64, 128, 128, 54, 64, 54, 53, 56, 140, 26,
- 138, 48, 54, 48, 54, 48, 54, 48, 54, 80,
- 81, 54, 96, 26, 137, 26, 98, 102, 102, 101,
- 99, 99, 104, 122, 129, 129, 129, 129, 129, 129,
+ 90, 91, 92, 93, 94, 126, 97, 129, 129, 154,
+ 99, 154, 128, 26, 154, 99, 154, 126, 26, 137,
+ 129, 46, 141, 26, 26, 44, 70, 71, 26, 126,
+ 54, 64, 128, 128, 54, 64, 54, 53, 56, 141,
+ 26, 139, 48, 54, 48, 54, 48, 54, 48, 54,
+ 80, 81, 54, 96, 26, 138, 26, 98, 102, 102,
+ 101, 99, 99, 104, 122, 129, 129, 129, 129, 129,
129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
- 129, 26, 149, 98, 129, 98, 98, 129, 149, 99,
- 129, 145, 128, 26, 131, 129, 129, 43, 64, 129,
- 129, 129, 54, 64, 48, 129, 129, 129, 129, 129,
- 99, 129, 129, 129, 129, 129, 129, 129, 129, 129,
- 129, 118, 118, 99, 128, 128, 129, 27, 29, 159,
- 53, 96, 99, 96, 26, 126, 44, 129, 129, 122,
- 129, 129, 26, 26, 48, 48, 48, 48, 107, 127,
- 26, 127, 151, 26, 151, 149, 129, 115, 109, 112,
- 127, 128, 129, 129, 129, 129, 126, 96, 108, 126,
- 123, 127, 127, 96, 126, 124, 124, 123, 54, 87,
- 120, 30, 151, 116, 110, 113, 86, 129, 36, 37,
- 121, 126, 26, 150, 127, 122, 54, 35, 127, 129,
- 85, 99, 117, 129, 54, 126, 122, 26, 127, 111,
- 129, 85, 53, 86, 122, 114, 127, 127, 122, 123,
- 86, 127, 86
+ 129, 129, 26, 150, 98, 129, 98, 98, 99, 98,
+ 129, 150, 99, 129, 146, 128, 26, 132, 129, 129,
+ 43, 64, 129, 129, 129, 54, 64, 48, 129, 129,
+ 129, 129, 129, 99, 129, 129, 129, 129, 129, 129,
+ 129, 129, 129, 129, 118, 118, 99, 128, 128, 129,
+ 27, 29, 160, 53, 96, 99, 130, 96, 26, 126,
+ 44, 129, 129, 122, 129, 129, 26, 26, 48, 48,
+ 48, 48, 107, 127, 26, 127, 152, 26, 155, 152,
+ 150, 129, 115, 109, 112, 127, 128, 129, 129, 129,
+ 129, 126, 96, 108, 126, 123, 127, 98, 127, 96,
+ 126, 124, 124, 123, 54, 87, 120, 30, 152, 116,
+ 110, 113, 86, 129, 36, 37, 121, 126, 26, 151,
+ 127, 122, 54, 35, 127, 129, 85, 99, 117, 129,
+ 54, 126, 122, 26, 127, 111, 129, 85, 53, 86,
+ 122, 114, 127, 127, 122, 123, 86, 127, 86
};
/* YYR1YYN -- Symbol number of symbol that rule YYN derives. */
@@ -1627,17 +1636,17 @@ static const yytype_uint8 yyr1[] =
108, 108, 118, 119, 119, 120, 120, 121, 122, 123,
124, 125, 126, 127, 127, 127, 128, 128, 128, 128,
128, 128, 128, 128, 128, 128, 129, 129, 129, 129,
+ 129, 130, 129, 129, 129, 129, 129, 129, 129, 129,
129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
- 129, 129, 129, 129, 129, 129, 129, 130, 130, 130,
- 130, 130, 130, 130, 130, 131, 131, 132, 132, 132,
- 132, 132, 133, 132, 134, 132, 135, 132, 132, 132,
- 132, 132, 136, 136, 137, 137, 138, 138, 139, 139,
- 139, 139, 139, 139, 140, 140, 141, 141, 141, 142,
- 141, 144, 145, 143, 143, 146, 143, 143, 143, 148,
- 147, 149, 149, 149, 150, 150, 150, 151, 152, 153,
- 153, 153, 154, 154, 155, 156, 156, 156, 156, 157,
- 157, 158, 158, 159, 159
+ 131, 131, 131, 131, 131, 131, 131, 131, 132, 132,
+ 133, 133, 133, 133, 133, 134, 133, 135, 133, 136,
+ 133, 133, 133, 133, 133, 137, 137, 138, 138, 139,
+ 139, 140, 140, 140, 140, 140, 140, 141, 141, 142,
+ 142, 142, 143, 142, 145, 146, 144, 144, 147, 144,
+ 144, 144, 149, 148, 150, 150, 150, 151, 151, 151,
+ 152, 153, 154, 154, 154, 155, 155, 156, 157, 157,
+ 157, 157, 158, 158, 159, 159, 160, 160
};
/* YYR2YYN -- Number of symbols on the right hand side of rule YYN. */
@@ -1650,17 +1659,17 @@ static const yytype_int8 yyr2[] =
7, 6, 0, 9, 11, 0, 2, 6, 0, 0,
0, 1, 0, 0, 2, 2, 1, 1, 1, 1,
1, 1, 2, 3, 1, 2, 1, 1, 4, 2,
- 4, 3, 1, 1, 1, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 2, 3,
- 3, 3, 3, 2, 2, 4, 4, 4, 6, 4,
- 6, 4, 6, 4, 6, 2, 1, 2, 1, 1,
- 2, 1, 0, 3, 0, 3, 0, 3, 4, 2,
- 4, 2, 1, 3, 1, 3, 1, 3, 1, 2,
- 2, 2, 3, 2, 3, 2, 2, 3, 2, 0,
- 3, 0, 0, 9, 2, 0, 7, 8, 6, 0,
- 3, 0, 1, 3, 0, 1, 3, 0, 2, 0,
- 1, 3, 1, 3, 3, 0, 1, 1, 1, 1,
- 3, 1, 3, 3, 3
+ 4, 0, 7, 4, 3, 1, 1, 1, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 2, 3, 3, 3, 3, 2, 2, 4, 4,
+ 4, 6, 4, 6, 4, 6, 4, 6, 2, 1,
+ 2, 1, 1, 2, 1, 0, 3, 0, 3, 0,
+ 3, 4, 2, 4, 2, 1, 3, 1, 3, 1,
+ 3, 1, 2, 2, 2, 3, 2, 3, 2, 2,
+ 3, 2, 0, 3, 0, 0, 9, 2, 0, 7,
+ 8, 6, 0, 3, 0, 1, 3, 0, 1, 3,
+ 0, 2, 0, 1, 3, 1, 3, 3, 0, 1,
+ 1, 1, 1, 3, 1, 3, 3, 3
};
@@ -1934,79 +1943,79 @@ yydestruct (const char *yymsg,
case 22: /* BLTIN */
#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1938 "engines/director/lingo/lingo-gr.cpp"
+#line 1947 "engines/director/lingo/lingo-gr.cpp"
break;
case 23: /* FBLTIN */
#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1944 "engines/director/lingo/lingo-gr.cpp"
+#line 1953 "engines/director/lingo/lingo-gr.cpp"
break;
case 24: /* RBLTIN */
#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1950 "engines/director/lingo/lingo-gr.cpp"
+#line 1959 "engines/director/lingo/lingo-gr.cpp"
break;
case 25: /* THEFBLTIN */
#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1956 "engines/director/lingo/lingo-gr.cpp"
+#line 1965 "engines/director/lingo/lingo-gr.cpp"
break;
case 26: /* ID */
#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1962 "engines/director/lingo/lingo-gr.cpp"
+#line 1971 "engines/director/lingo/lingo-gr.cpp"
break;
case 27: /* STRING */
#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1968 "engines/director/lingo/lingo-gr.cpp"
+#line 1977 "engines/director/lingo/lingo-gr.cpp"
break;
case 28: /* HANDLER */
#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1974 "engines/director/lingo/lingo-gr.cpp"
+#line 1983 "engines/director/lingo/lingo-gr.cpp"
break;
case 29: /* SYMBOL */
#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1980 "engines/director/lingo/lingo-gr.cpp"
+#line 1989 "engines/director/lingo/lingo-gr.cpp"
break;
case 30: /* ENDCLAUSE */
#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1986 "engines/director/lingo/lingo-gr.cpp"
+#line 1995 "engines/director/lingo/lingo-gr.cpp"
break;
case 31: /* tPLAYACCEL */
#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1992 "engines/director/lingo/lingo-gr.cpp"
+#line 2001 "engines/director/lingo/lingo-gr.cpp"
break;
case 32: /* tMETHOD */
#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1998 "engines/director/lingo/lingo-gr.cpp"
+#line 2007 "engines/director/lingo/lingo-gr.cpp"
break;
case 33: /* THEOBJECTFIELD */
#line 184 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).objectfield).os; }
-#line 2004 "engines/director/lingo/lingo-gr.cpp"
+#line 2013 "engines/director/lingo/lingo-gr.cpp"
break;
- case 147: /* on */
+ case 148: /* on */
#line 183 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2010 "engines/director/lingo/lingo-gr.cpp"
+#line 2019 "engines/director/lingo/lingo-gr.cpp"
break;
default:
@@ -2293,7 +2302,7 @@ yyreduce:
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[-2].code);
delete (yyvsp[0].s); }
-#line 2297 "engines/director/lingo/lingo-gr.cpp"
+#line 2306 "engines/director/lingo/lingo-gr.cpp"
break;
case 8:
@@ -2301,7 +2310,7 @@ yyreduce:
{
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[-2].code); }
-#line 2305 "engines/director/lingo/lingo-gr.cpp"
+#line 2314 "engines/director/lingo/lingo-gr.cpp"
break;
case 9:
@@ -2317,19 +2326,19 @@ yyreduce:
g_lingo->codeInt((yyvsp[-4].e)[1]);
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code); }
-#line 2321 "engines/director/lingo/lingo-gr.cpp"
+#line 2330 "engines/director/lingo/lingo-gr.cpp"
break;
case 10:
#line 217 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_after); }
-#line 2327 "engines/director/lingo/lingo-gr.cpp"
+#line 2336 "engines/director/lingo/lingo-gr.cpp"
break;
case 11:
#line 218 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_before); }
-#line 2333 "engines/director/lingo/lingo-gr.cpp"
+#line 2342 "engines/director/lingo/lingo-gr.cpp"
break;
case 12:
@@ -2341,7 +2350,7 @@ yyreduce:
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code);
delete (yyvsp[-2].s); }
-#line 2345 "engines/director/lingo/lingo-gr.cpp"
+#line 2354 "engines/director/lingo/lingo-gr.cpp"
break;
case 13:
@@ -2353,7 +2362,7 @@ yyreduce:
g_lingo->codeInt((yyvsp[-2].e)[0]);
g_lingo->codeInt((yyvsp[-2].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2357 "engines/director/lingo/lingo-gr.cpp"
+#line 2366 "engines/director/lingo/lingo-gr.cpp"
break;
case 14:
@@ -2365,7 +2374,7 @@ yyreduce:
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code);
delete (yyvsp[-2].s); }
-#line 2369 "engines/director/lingo/lingo-gr.cpp"
+#line 2378 "engines/director/lingo/lingo-gr.cpp"
break;
case 15:
@@ -2377,7 +2386,7 @@ yyreduce:
g_lingo->codeInt((yyvsp[-2].e)[0]);
g_lingo->codeInt((yyvsp[-2].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2381 "engines/director/lingo/lingo-gr.cpp"
+#line 2390 "engines/director/lingo/lingo-gr.cpp"
break;
case 16:
@@ -2388,7 +2397,7 @@ yyreduce:
g_lingo->codeInt((yyvsp[-3].e)[0]);
g_lingo->codeInt((yyvsp[-3].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2392 "engines/director/lingo/lingo-gr.cpp"
+#line 2401 "engines/director/lingo/lingo-gr.cpp"
break;
case 17:
@@ -2399,7 +2408,7 @@ yyreduce:
g_lingo->codeInt((yyvsp[-3].e)[0]);
g_lingo->codeInt((yyvsp[-3].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2403 "engines/director/lingo/lingo-gr.cpp"
+#line 2412 "engines/director/lingo/lingo-gr.cpp"
break;
case 18:
@@ -2415,7 +2424,7 @@ yyreduce:
g_lingo->codeInt((yyvsp[-6].e)[0]);
g_lingo->codeInt((yyvsp[-6].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2419 "engines/director/lingo/lingo-gr.cpp"
+#line 2428 "engines/director/lingo/lingo-gr.cpp"
break;
case 19:
@@ -2426,7 +2435,7 @@ yyreduce:
g_lingo->codeInt((yyvsp[-2].objectfield).oe);
delete (yyvsp[-2].objectfield).os;
(yyval.code) = (yyvsp[0].code); }
-#line 2430 "engines/director/lingo/lingo-gr.cpp"
+#line 2439 "engines/director/lingo/lingo-gr.cpp"
break;
case 25:
@@ -2437,7 +2446,7 @@ yyreduce:
WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-3].code) + 2);
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = end; /* end, if cond fails */
(*g_lingo->_currentScript)[(yyvsp[-1].code)] = start; }
-#line 2441 "engines/director/lingo/lingo-gr.cpp"
+#line 2450 "engines/director/lingo/lingo-gr.cpp"
break;
case 26:
@@ -2445,20 +2454,20 @@ yyreduce:
{ g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
mVar((yyvsp[-2].s), kVarLocal); }
-#line 2449 "engines/director/lingo/lingo-gr.cpp"
+#line 2458 "engines/director/lingo/lingo-gr.cpp"
break;
case 27:
#line 304 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2456 "engines/director/lingo/lingo-gr.cpp"
+#line 2465 "engines/director/lingo/lingo-gr.cpp"
break;
case 28:
#line 307 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_le); }
-#line 2462 "engines/director/lingo/lingo-gr.cpp"
+#line 2471 "engines/director/lingo/lingo-gr.cpp"
break;
case 29:
@@ -2481,7 +2490,7 @@ yyreduce:
WRITE_UINT32(&end, pos - (yyvsp[-2].code) + 2);
(*g_lingo->_currentScript)[pos] = loop; /* final count value */
(*g_lingo->_currentScript)[(yyvsp[-2].code)] = end; }
-#line 2485 "engines/director/lingo/lingo-gr.cpp"
+#line 2494 "engines/director/lingo/lingo-gr.cpp"
break;
case 30:
@@ -2489,20 +2498,20 @@ yyreduce:
{ g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
mVar((yyvsp[-2].s), kVarLocal); }
-#line 2493 "engines/director/lingo/lingo-gr.cpp"
+#line 2502 "engines/director/lingo/lingo-gr.cpp"
break;
case 31:
#line 335 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2500 "engines/director/lingo/lingo-gr.cpp"
+#line 2509 "engines/director/lingo/lingo-gr.cpp"
break;
case 32:
#line 338 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ge); }
-#line 2506 "engines/director/lingo/lingo-gr.cpp"
+#line 2515 "engines/director/lingo/lingo-gr.cpp"
break;
case 33:
@@ -2525,7 +2534,7 @@ yyreduce:
WRITE_UINT32(&end, pos - (yyvsp[-2].code) + 2);
(*g_lingo->_currentScript)[pos] = loop; /* final count value */
(*g_lingo->_currentScript)[(yyvsp[-2].code)] = end; }
-#line 2529 "engines/director/lingo/lingo-gr.cpp"
+#line 2538 "engines/director/lingo/lingo-gr.cpp"
break;
case 34:
@@ -2536,7 +2545,7 @@ yyreduce:
g_lingo->codeFunc(&count, 1);
g_lingo->code1(LC::c_intpush); // start counter
g_lingo->codeInt(1); }
-#line 2540 "engines/director/lingo/lingo-gr.cpp"
+#line 2549 "engines/director/lingo/lingo-gr.cpp"
break;
case 35:
@@ -2546,7 +2555,7 @@ yyreduce:
g_lingo->code1(LC::c_stackpeek); // get array size
g_lingo->codeInt(2);
g_lingo->code1(LC::c_le); }
-#line 2550 "engines/director/lingo/lingo-gr.cpp"
+#line 2559 "engines/director/lingo/lingo-gr.cpp"
break;
case 36:
@@ -2561,7 +2570,7 @@ yyreduce:
g_lingo->codeString((yyvsp[-6].s)->c_str());
mVar((yyvsp[-6].s), kVarLocal);
g_lingo->code1(LC::c_assign); }
-#line 2565 "engines/director/lingo/lingo-gr.cpp"
+#line 2574 "engines/director/lingo/lingo-gr.cpp"
break;
case 37:
@@ -2583,14 +2592,14 @@ yyreduce:
(*g_lingo->_currentScript)[jump + 1] = loop; /* final count value */
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = end; }
-#line 2587 "engines/director/lingo/lingo-gr.cpp"
+#line 2596 "engines/director/lingo/lingo-gr.cpp"
break;
case 38:
#line 405 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_nextRepeat); }
-#line 2594 "engines/director/lingo/lingo-gr.cpp"
+#line 2603 "engines/director/lingo/lingo-gr.cpp"
break;
case 39:
@@ -2598,25 +2607,25 @@ yyreduce:
{
g_lingo->code1(LC::c_whencode);
g_lingo->codeString((yyvsp[-2].s)->c_str()); }
-#line 2602 "engines/director/lingo/lingo-gr.cpp"
+#line 2611 "engines/director/lingo/lingo-gr.cpp"
break;
case 40:
#line 410 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_telldone); }
-#line 2608 "engines/director/lingo/lingo-gr.cpp"
+#line 2617 "engines/director/lingo/lingo-gr.cpp"
break;
case 41:
#line 411 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_telldone); }
-#line 2614 "engines/director/lingo/lingo-gr.cpp"
+#line 2623 "engines/director/lingo/lingo-gr.cpp"
break;
case 42:
#line 413 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_tell); }
-#line 2620 "engines/director/lingo/lingo-gr.cpp"
+#line 2629 "engines/director/lingo/lingo-gr.cpp"
break;
case 43:
@@ -2628,7 +2637,7 @@ yyreduce:
(*g_lingo->_currentScript)[(yyvsp[-6].code)] = else1; /* elsepart */
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = end3; /* end, if cond fails */
g_lingo->processIf((yyvsp[-3].code), (yyvsp[-1].code)); }
-#line 2632 "engines/director/lingo/lingo-gr.cpp"
+#line 2641 "engines/director/lingo/lingo-gr.cpp"
break;
case 44:
@@ -2640,7 +2649,7 @@ yyreduce:
(*g_lingo->_currentScript)[(yyvsp[-8].code)] = else1; /* elsepart */
(*g_lingo->_currentScript)[(yyvsp[-5].code)] = end; /* end, if cond fails */
g_lingo->processIf((yyvsp[-5].code), (yyvsp[-1].code)); }
-#line 2644 "engines/director/lingo/lingo-gr.cpp"
+#line 2653 "engines/director/lingo/lingo-gr.cpp"
break;
case 47:
@@ -2650,7 +2659,7 @@ yyreduce:
WRITE_UINT32(&else1, (yyvsp[0].code) + 1 - (yyvsp[-3].code) + 1);
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = else1; /* end, if cond fails */
g_lingo->codeLabel((yyvsp[0].code)); }
-#line 2654 "engines/director/lingo/lingo-gr.cpp"
+#line 2663 "engines/director/lingo/lingo-gr.cpp"
break;
case 48:
@@ -2658,7 +2667,7 @@ yyreduce:
{
g_lingo->code2(LC::c_jumpifz, 0);
(yyval.code) = g_lingo->_currentScript->size() - 1; }
-#line 2662 "engines/director/lingo/lingo-gr.cpp"
+#line 2671 "engines/director/lingo/lingo-gr.cpp"
break;
case 49:
@@ -2666,7 +2675,7 @@ yyreduce:
{
g_lingo->code2(LC::c_jump, 0);
(yyval.code) = g_lingo->_currentScript->size() - 1; }
-#line 2670 "engines/director/lingo/lingo-gr.cpp"
+#line 2679 "engines/director/lingo/lingo-gr.cpp"
break;
case 50:
@@ -2674,26 +2683,26 @@ yyreduce:
{
g_lingo->code1(LC::c_assign);
(yyval.code) = g_lingo->_currentScript->size() - 1; }
-#line 2678 "engines/director/lingo/lingo-gr.cpp"
+#line 2687 "engines/director/lingo/lingo-gr.cpp"
break;
case 51:
#line 451 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeLabel(0); }
-#line 2685 "engines/director/lingo/lingo-gr.cpp"
+#line 2694 "engines/director/lingo/lingo-gr.cpp"
break;
case 52:
#line 454 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2691 "engines/director/lingo/lingo-gr.cpp"
+#line 2700 "engines/director/lingo/lingo-gr.cpp"
break;
case 53:
#line 456 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2697 "engines/director/lingo/lingo-gr.cpp"
+#line 2706 "engines/director/lingo/lingo-gr.cpp"
break;
case 56:
@@ -2701,7 +2710,7 @@ yyreduce:
{
(yyval.code) = g_lingo->code1(LC::c_intpush);
g_lingo->codeInt((yyvsp[0].i)); }
-#line 2705 "engines/director/lingo/lingo-gr.cpp"
+#line 2714 "engines/director/lingo/lingo-gr.cpp"
break;
case 57:
@@ -2709,7 +2718,7 @@ yyreduce:
{
(yyval.code) = g_lingo->code1(LC::c_floatpush);
g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2713 "engines/director/lingo/lingo-gr.cpp"
+#line 2722 "engines/director/lingo/lingo-gr.cpp"
break;
case 58:
@@ -2718,7 +2727,7 @@ yyreduce:
(yyval.code) = g_lingo->code1(LC::c_symbolpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2722 "engines/director/lingo/lingo-gr.cpp"
+#line 2731 "engines/director/lingo/lingo-gr.cpp"
break;
case 59:
@@ -2727,7 +2736,7 @@ yyreduce:
(yyval.code) = g_lingo->code1(LC::c_stringpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2731 "engines/director/lingo/lingo-gr.cpp"
+#line 2740 "engines/director/lingo/lingo-gr.cpp"
break;
case 60:
@@ -2736,7 +2745,7 @@ yyreduce:
(yyval.code) = g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2740 "engines/director/lingo/lingo-gr.cpp"
+#line 2749 "engines/director/lingo/lingo-gr.cpp"
break;
case 61:
@@ -2749,7 +2758,7 @@ yyreduce:
WRITE_UINT32(&e, (yyvsp[0].e)[0]);
WRITE_UINT32(&f, (yyvsp[0].e)[1]);
g_lingo->code2(e, f); }
-#line 2753 "engines/director/lingo/lingo-gr.cpp"
+#line 2762 "engines/director/lingo/lingo-gr.cpp"
break;
case 62:
@@ -2760,13 +2769,13 @@ yyreduce:
WRITE_UINT32(&e, (yyvsp[-1].e)[0]);
WRITE_UINT32(&f, (yyvsp[-1].e)[1]);
g_lingo->code2(e, f); }
-#line 2764 "engines/director/lingo/lingo-gr.cpp"
+#line 2773 "engines/director/lingo/lingo-gr.cpp"
break;
case 63:
#line 492 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[-1].code); }
-#line 2770 "engines/director/lingo/lingo-gr.cpp"
+#line 2779 "engines/director/lingo/lingo-gr.cpp"
break;
case 65:
@@ -2781,13 +2790,13 @@ yyreduce:
yyerrok;
}
}
-#line 2785 "engines/director/lingo/lingo-gr.cpp"
+#line 2794 "engines/director/lingo/lingo-gr.cpp"
break;
case 66:
#line 505 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); }
-#line 2791 "engines/director/lingo/lingo-gr.cpp"
+#line 2800 "engines/director/lingo/lingo-gr.cpp"
break;
case 68:
@@ -2795,7 +2804,7 @@ yyreduce:
{
g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 2799 "engines/director/lingo/lingo-gr.cpp"
+#line 2808 "engines/director/lingo/lingo-gr.cpp"
break;
case 69:
@@ -2803,505 +2812,531 @@ yyreduce:
{
g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
delete (yyvsp[-1].s); }
-#line 2807 "engines/director/lingo/lingo-gr.cpp"
+#line 2816 "engines/director/lingo/lingo-gr.cpp"
break;
case 70:
#line 513 "engines/director/lingo/lingo-gr.y"
+ {
+ g_lingo->code1(LC::c_lazyeval);
+ g_lingo->codeString((yyvsp[-1].s)->c_str());
+ g_lingo->codeFunc((yyvsp[-3].s), 1);
+ delete (yyvsp[-3].s);
+ delete (yyvsp[-1].s); }
+#line 2827 "engines/director/lingo/lingo-gr.cpp"
+ break;
+
+ case 71:
+#line 519 "engines/director/lingo/lingo-gr.y"
+ { g_lingo->code1(LC::c_lazyeval); g_lingo->codeString((yyvsp[-1].s)->c_str()); }
+#line 2833 "engines/director/lingo/lingo-gr.cpp"
+ break;
+
+ case 72:
+#line 520 "engines/director/lingo/lingo-gr.y"
+ {
+ g_lingo->codeFunc((yyvsp[-6].s), (yyvsp[-1].narg) + 1);
+ delete (yyvsp[-6].s);
+ delete (yyvsp[-4].s); }
+#line 2842 "engines/director/lingo/lingo-gr.cpp"
+ break;
+
+ case 73:
+#line 524 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 2815 "engines/director/lingo/lingo-gr.cpp"
+#line 2850 "engines/director/lingo/lingo-gr.cpp"
break;
- case 71:
-#line 516 "engines/director/lingo/lingo-gr.y"
+ case 74:
+#line 527 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->codeFunc((yyvsp[-2].s), 1);
delete (yyvsp[-2].s); }
-#line 2823 "engines/director/lingo/lingo-gr.cpp"
+#line 2858 "engines/director/lingo/lingo-gr.cpp"
break;
- case 72:
-#line 519 "engines/director/lingo/lingo-gr.y"
+ case 75:
+#line 530 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectfieldpush);
g_lingo->codeString((yyvsp[0].objectfield).os->c_str());
g_lingo->codeInt((yyvsp[0].objectfield).oe);
delete (yyvsp[0].objectfield).os; }
-#line 2833 "engines/director/lingo/lingo-gr.cpp"
+#line 2868 "engines/director/lingo/lingo-gr.cpp"
break;
- case 73:
-#line 524 "engines/director/lingo/lingo-gr.y"
+ case 76:
+#line 535 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectrefpush);
g_lingo->codeString((yyvsp[0].objectref).obj->c_str());
g_lingo->codeString((yyvsp[0].objectref).field->c_str());
delete (yyvsp[0].objectref).obj;
delete (yyvsp[0].objectref).field; }
-#line 2844 "engines/director/lingo/lingo-gr.cpp"
+#line 2879 "engines/director/lingo/lingo-gr.cpp"
break;
- case 75:
-#line 531 "engines/director/lingo/lingo-gr.y"
+ case 78:
+#line 542 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_add); }
-#line 2850 "engines/director/lingo/lingo-gr.cpp"
+#line 2885 "engines/director/lingo/lingo-gr.cpp"
break;
- case 76:
-#line 532 "engines/director/lingo/lingo-gr.y"
+ case 79:
+#line 543 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_sub); }
-#line 2856 "engines/director/lingo/lingo-gr.cpp"
+#line 2891 "engines/director/lingo/lingo-gr.cpp"
break;
- case 77:
-#line 533 "engines/director/lingo/lingo-gr.y"
+ case 80:
+#line 544 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_mul); }
-#line 2862 "engines/director/lingo/lingo-gr.cpp"
+#line 2897 "engines/director/lingo/lingo-gr.cpp"
break;
- case 78:
-#line 534 "engines/director/lingo/lingo-gr.y"
+ case 81:
+#line 545 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_div); }
-#line 2868 "engines/director/lingo/lingo-gr.cpp"
+#line 2903 "engines/director/lingo/lingo-gr.cpp"
break;
- case 79:
-#line 535 "engines/director/lingo/lingo-gr.y"
+ case 82:
+#line 546 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_mod); }
-#line 2874 "engines/director/lingo/lingo-gr.cpp"
+#line 2909 "engines/director/lingo/lingo-gr.cpp"
break;
- case 80:
-#line 536 "engines/director/lingo/lingo-gr.y"
+ case 83:
+#line 547 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gt); }
-#line 2880 "engines/director/lingo/lingo-gr.cpp"
+#line 2915 "engines/director/lingo/lingo-gr.cpp"
break;
- case 81:
-#line 537 "engines/director/lingo/lingo-gr.y"
+ case 84:
+#line 548 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lt); }
-#line 2886 "engines/director/lingo/lingo-gr.cpp"
+#line 2921 "engines/director/lingo/lingo-gr.cpp"
break;
- case 82:
-#line 538 "engines/director/lingo/lingo-gr.y"
+ case 85:
+#line 549 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eq); }
-#line 2892 "engines/director/lingo/lingo-gr.cpp"
+#line 2927 "engines/director/lingo/lingo-gr.cpp"
break;
- case 83:
-#line 539 "engines/director/lingo/lingo-gr.y"
+ case 86:
+#line 550 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_neq); }
-#line 2898 "engines/director/lingo/lingo-gr.cpp"
+#line 2933 "engines/director/lingo/lingo-gr.cpp"
break;
- case 84:
-#line 540 "engines/director/lingo/lingo-gr.y"
+ case 87:
+#line 551 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ge); }
-#line 2904 "engines/director/lingo/lingo-gr.cpp"
+#line 2939 "engines/director/lingo/lingo-gr.cpp"
break;
- case 85:
-#line 541 "engines/director/lingo/lingo-gr.y"
+ case 88:
+#line 552 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_le); }
-#line 2910 "engines/director/lingo/lingo-gr.cpp"
+#line 2945 "engines/director/lingo/lingo-gr.cpp"
break;
- case 86:
-#line 542 "engines/director/lingo/lingo-gr.y"
+ case 89:
+#line 553 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_and); }
-#line 2916 "engines/director/lingo/lingo-gr.cpp"
+#line 2951 "engines/director/lingo/lingo-gr.cpp"
break;
- case 87:
-#line 543 "engines/director/lingo/lingo-gr.y"
+ case 90:
+#line 554 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_or); }
-#line 2922 "engines/director/lingo/lingo-gr.cpp"
+#line 2957 "engines/director/lingo/lingo-gr.cpp"
break;
- case 88:
-#line 544 "engines/director/lingo/lingo-gr.y"
+ case 91:
+#line 555 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_not); }
-#line 2928 "engines/director/lingo/lingo-gr.cpp"
+#line 2963 "engines/director/lingo/lingo-gr.cpp"
break;
- case 89:
-#line 545 "engines/director/lingo/lingo-gr.y"
+ case 92:
+#line 556 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ampersand); }
-#line 2934 "engines/director/lingo/lingo-gr.cpp"
+#line 2969 "engines/director/lingo/lingo-gr.cpp"
break;
- case 90:
-#line 546 "engines/director/lingo/lingo-gr.y"
+ case 93:
+#line 557 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_concat); }
-#line 2940 "engines/director/lingo/lingo-gr.cpp"
+#line 2975 "engines/director/lingo/lingo-gr.cpp"
break;
- case 91:
-#line 547 "engines/director/lingo/lingo-gr.y"
+ case 94:
+#line 558 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_contains); }
-#line 2946 "engines/director/lingo/lingo-gr.cpp"
+#line 2981 "engines/director/lingo/lingo-gr.cpp"
break;
- case 92:
-#line 548 "engines/director/lingo/lingo-gr.y"
+ case 95:
+#line 559 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_starts); }
-#line 2952 "engines/director/lingo/lingo-gr.cpp"
+#line 2987 "engines/director/lingo/lingo-gr.cpp"
break;
- case 93:
-#line 549 "engines/director/lingo/lingo-gr.y"
+ case 96:
+#line 560 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); }
-#line 2958 "engines/director/lingo/lingo-gr.cpp"
+#line 2993 "engines/director/lingo/lingo-gr.cpp"
break;
- case 94:
-#line 550 "engines/director/lingo/lingo-gr.y"
+ case 97:
+#line 561 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 2964 "engines/director/lingo/lingo-gr.cpp"
+#line 2999 "engines/director/lingo/lingo-gr.cpp"
break;
- case 95:
-#line 551 "engines/director/lingo/lingo-gr.y"
+ case 98:
+#line 562 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_intersects); }
-#line 2970 "engines/director/lingo/lingo-gr.cpp"
+#line 3005 "engines/director/lingo/lingo-gr.cpp"
break;
- case 96:
-#line 552 "engines/director/lingo/lingo-gr.y"
+ case 99:
+#line 563 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_within); }
-#line 2976 "engines/director/lingo/lingo-gr.cpp"
+#line 3011 "engines/director/lingo/lingo-gr.cpp"
break;
- case 97:
-#line 554 "engines/director/lingo/lingo-gr.y"
+ case 100:
+#line 565 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_charOf); }
-#line 2982 "engines/director/lingo/lingo-gr.cpp"
+#line 3017 "engines/director/lingo/lingo-gr.cpp"
break;
- case 98:
-#line 555 "engines/director/lingo/lingo-gr.y"
+ case 101:
+#line 566 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_charToOf); }
-#line 2988 "engines/director/lingo/lingo-gr.cpp"
+#line 3023 "engines/director/lingo/lingo-gr.cpp"
break;
- case 99:
-#line 556 "engines/director/lingo/lingo-gr.y"
+ case 102:
+#line 567 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_itemOf); }
-#line 2994 "engines/director/lingo/lingo-gr.cpp"
+#line 3029 "engines/director/lingo/lingo-gr.cpp"
break;
- case 100:
-#line 557 "engines/director/lingo/lingo-gr.y"
+ case 103:
+#line 568 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_itemToOf); }
-#line 3000 "engines/director/lingo/lingo-gr.cpp"
+#line 3035 "engines/director/lingo/lingo-gr.cpp"
break;
- case 101:
-#line 558 "engines/director/lingo/lingo-gr.y"
+ case 104:
+#line 569 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lineOf); }
-#line 3006 "engines/director/lingo/lingo-gr.cpp"
+#line 3041 "engines/director/lingo/lingo-gr.cpp"
break;
- case 102:
-#line 559 "engines/director/lingo/lingo-gr.y"
+ case 105:
+#line 570 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lineToOf); }
-#line 3012 "engines/director/lingo/lingo-gr.cpp"
+#line 3047 "engines/director/lingo/lingo-gr.cpp"
break;
- case 103:
-#line 560 "engines/director/lingo/lingo-gr.y"
+ case 106:
+#line 571 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_wordOf); }
-#line 3018 "engines/director/lingo/lingo-gr.cpp"
+#line 3053 "engines/director/lingo/lingo-gr.cpp"
break;
- case 104:
-#line 561 "engines/director/lingo/lingo-gr.y"
+ case 107:
+#line 572 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_wordToOf); }
-#line 3024 "engines/director/lingo/lingo-gr.cpp"
+#line 3059 "engines/director/lingo/lingo-gr.cpp"
break;
- case 105:
-#line 563 "engines/director/lingo/lingo-gr.y"
+ case 108:
+#line 574 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), 1);
delete (yyvsp[-1].s); }
-#line 3032 "engines/director/lingo/lingo-gr.cpp"
+#line 3067 "engines/director/lingo/lingo-gr.cpp"
break;
- case 107:
-#line 568 "engines/director/lingo/lingo-gr.y"
+ case 110:
+#line 579 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_printtop); }
-#line 3038 "engines/director/lingo/lingo-gr.cpp"
+#line 3073 "engines/director/lingo/lingo-gr.cpp"
break;
- case 110:
-#line 571 "engines/director/lingo/lingo-gr.y"
+ case 113:
+#line 582 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_exitRepeat); }
-#line 3044 "engines/director/lingo/lingo-gr.cpp"
+#line 3079 "engines/director/lingo/lingo-gr.cpp"
break;
- case 111:
-#line 572 "engines/director/lingo/lingo-gr.y"
+ case 114:
+#line 583 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_procret); }
-#line 3050 "engines/director/lingo/lingo-gr.cpp"
+#line 3085 "engines/director/lingo/lingo-gr.cpp"
break;
- case 112:
-#line 573 "engines/director/lingo/lingo-gr.y"
+ case 115:
+#line 584 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3056 "engines/director/lingo/lingo-gr.cpp"
+#line 3091 "engines/director/lingo/lingo-gr.cpp"
break;
- case 113:
-#line 573 "engines/director/lingo/lingo-gr.y"
+ case 116:
+#line 584 "engines/director/lingo/lingo-gr.y"
{ inNone(); }
-#line 3062 "engines/director/lingo/lingo-gr.cpp"
+#line 3097 "engines/director/lingo/lingo-gr.cpp"
break;
- case 114:
-#line 574 "engines/director/lingo/lingo-gr.y"
+ case 117:
+#line 585 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3068 "engines/director/lingo/lingo-gr.cpp"
+#line 3103 "engines/director/lingo/lingo-gr.cpp"
break;
- case 115:
-#line 574 "engines/director/lingo/lingo-gr.y"
+ case 118:
+#line 585 "engines/director/lingo/lingo-gr.y"
{ inNone(); }
-#line 3074 "engines/director/lingo/lingo-gr.cpp"
+#line 3109 "engines/director/lingo/lingo-gr.cpp"
break;
- case 116:
-#line 575 "engines/director/lingo/lingo-gr.y"
+ case 119:
+#line 586 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3080 "engines/director/lingo/lingo-gr.cpp"
+#line 3115 "engines/director/lingo/lingo-gr.cpp"
break;
- case 117:
-#line 575 "engines/director/lingo/lingo-gr.y"
+ case 120:
+#line 586 "engines/director/lingo/lingo-gr.y"
{ inNone(); }
-#line 3086 "engines/director/lingo/lingo-gr.cpp"
+#line 3121 "engines/director/lingo/lingo-gr.cpp"
break;
- case 118:
-#line 576 "engines/director/lingo/lingo-gr.y"
+ case 121:
+#line 587 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 3094 "engines/director/lingo/lingo-gr.cpp"
+#line 3129 "engines/director/lingo/lingo-gr.cpp"
break;
- case 119:
-#line 579 "engines/director/lingo/lingo-gr.y"
+ case 122:
+#line 590 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
delete (yyvsp[-1].s); }
-#line 3102 "engines/director/lingo/lingo-gr.cpp"
+#line 3137 "engines/director/lingo/lingo-gr.cpp"
break;
- case 120:
-#line 582 "engines/director/lingo/lingo-gr.y"
+ case 123:
+#line 593 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_open); }
-#line 3108 "engines/director/lingo/lingo-gr.cpp"
+#line 3143 "engines/director/lingo/lingo-gr.cpp"
break;
- case 121:
-#line 583 "engines/director/lingo/lingo-gr.y"
+ case 124:
+#line 594 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code2(LC::c_voidpush, LC::c_open); }
-#line 3114 "engines/director/lingo/lingo-gr.cpp"
+#line 3149 "engines/director/lingo/lingo-gr.cpp"
break;
- case 122:
-#line 585 "engines/director/lingo/lingo-gr.y"
+ case 125:
+#line 596 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_global);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarGlobal);
delete (yyvsp[0].s); }
-#line 3124 "engines/director/lingo/lingo-gr.cpp"
+#line 3159 "engines/director/lingo/lingo-gr.cpp"
break;
- case 123:
-#line 590 "engines/director/lingo/lingo-gr.y"
+ case 126:
+#line 601 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_global);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarGlobal);
delete (yyvsp[0].s); }
-#line 3134 "engines/director/lingo/lingo-gr.cpp"
+#line 3169 "engines/director/lingo/lingo-gr.cpp"
break;
- case 124:
-#line 596 "engines/director/lingo/lingo-gr.y"
+ case 127:
+#line 607 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_property);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarProperty);
delete (yyvsp[0].s); }
-#line 3144 "engines/director/lingo/lingo-gr.cpp"
+#line 3179 "engines/director/lingo/lingo-gr.cpp"
break;
- case 125:
-#line 601 "engines/director/lingo/lingo-gr.y"
+ case 128:
+#line 612 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_property);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarProperty);
delete (yyvsp[0].s); }
-#line 3154 "engines/director/lingo/lingo-gr.cpp"
+#line 3189 "engines/director/lingo/lingo-gr.cpp"
break;
- case 126:
-#line 607 "engines/director/lingo/lingo-gr.y"
+ case 129:
+#line 618 "engines/director/lingo/lingo-gr.y"
{
mVar((yyvsp[0].s), kVarInstance);
delete (yyvsp[0].s); }
-#line 3162 "engines/director/lingo/lingo-gr.cpp"
+#line 3197 "engines/director/lingo/lingo-gr.cpp"
break;
- case 127:
-#line 610 "engines/director/lingo/lingo-gr.y"
+ case 130:
+#line 621 "engines/director/lingo/lingo-gr.y"
{
mVar((yyvsp[0].s), kVarInstance);
delete (yyvsp[0].s); }
-#line 3170 "engines/director/lingo/lingo-gr.cpp"
+#line 3205 "engines/director/lingo/lingo-gr.cpp"
break;
- case 128:
-#line 621 "engines/director/lingo/lingo-gr.y"
+ case 131:
+#line 632 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotoloop); }
-#line 3176 "engines/director/lingo/lingo-gr.cpp"
+#line 3211 "engines/director/lingo/lingo-gr.cpp"
break;
- case 129:
-#line 622 "engines/director/lingo/lingo-gr.y"
+ case 132:
+#line 633 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotonext); }
-#line 3182 "engines/director/lingo/lingo-gr.cpp"
+#line 3217 "engines/director/lingo/lingo-gr.cpp"
break;
- case 130:
-#line 623 "engines/director/lingo/lingo-gr.y"
+ case 133:
+#line 634 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotoprevious); }
-#line 3188 "engines/director/lingo/lingo-gr.cpp"
+#line 3223 "engines/director/lingo/lingo-gr.cpp"
break;
- case 131:
-#line 624 "engines/director/lingo/lingo-gr.y"
+ case 134:
+#line 635 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(1);
g_lingo->code1(LC::c_goto); }
-#line 3197 "engines/director/lingo/lingo-gr.cpp"
+#line 3232 "engines/director/lingo/lingo-gr.cpp"
break;
- case 132:
-#line 628 "engines/director/lingo/lingo-gr.y"
+ case 135:
+#line 639 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(3);
g_lingo->code1(LC::c_goto); }
-#line 3206 "engines/director/lingo/lingo-gr.cpp"
+#line 3241 "engines/director/lingo/lingo-gr.cpp"
break;
- case 133:
-#line 632 "engines/director/lingo/lingo-gr.y"
+ case 136:
+#line 643 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(2);
g_lingo->code1(LC::c_goto); }
-#line 3215 "engines/director/lingo/lingo-gr.cpp"
+#line 3250 "engines/director/lingo/lingo-gr.cpp"
break;
- case 136:
-#line 640 "engines/director/lingo/lingo-gr.y"
+ case 139:
+#line 651 "engines/director/lingo/lingo-gr.y"
{ // "play #done" is also caught by this
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(1);
g_lingo->code1(LC::c_play); }
-#line 3224 "engines/director/lingo/lingo-gr.cpp"
+#line 3259 "engines/director/lingo/lingo-gr.cpp"
break;
- case 137:
-#line 644 "engines/director/lingo/lingo-gr.y"
+ case 140:
+#line 655 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(3);
g_lingo->code1(LC::c_play); }
-#line 3233 "engines/director/lingo/lingo-gr.cpp"
+#line 3268 "engines/director/lingo/lingo-gr.cpp"
break;
- case 138:
-#line 648 "engines/director/lingo/lingo-gr.y"
+ case 141:
+#line 659 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(2);
g_lingo->code1(LC::c_play); }
-#line 3242 "engines/director/lingo/lingo-gr.cpp"
+#line 3277 "engines/director/lingo/lingo-gr.cpp"
break;
- case 139:
-#line 652 "engines/director/lingo/lingo-gr.y"
+ case 142:
+#line 663 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeSetImmediate(true); }
-#line 3248 "engines/director/lingo/lingo-gr.cpp"
+#line 3283 "engines/director/lingo/lingo-gr.cpp"
break;
- case 140:
-#line 652 "engines/director/lingo/lingo-gr.y"
+ case 143:
+#line 663 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeSetImmediate(false);
g_lingo->codeFunc((yyvsp[-2].s), (yyvsp[0].narg));
delete (yyvsp[-2].s); }
-#line 3257 "engines/director/lingo/lingo-gr.cpp"
+#line 3292 "engines/director/lingo/lingo-gr.cpp"
break;
- case 141:
-#line 682 "engines/director/lingo/lingo-gr.y"
+ case 144:
+#line 693 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3263 "engines/director/lingo/lingo-gr.cpp"
+#line 3298 "engines/director/lingo/lingo-gr.cpp"
break;
- case 142:
-#line 682 "engines/director/lingo/lingo-gr.y"
+ case 145:
+#line 693 "engines/director/lingo/lingo-gr.y"
{ g_lingo->_currentFactory = NULL; }
-#line 3269 "engines/director/lingo/lingo-gr.cpp"
+#line 3304 "engines/director/lingo/lingo-gr.cpp"
break;
- case 143:
-#line 683 "engines/director/lingo/lingo-gr.y"
+ case 146:
+#line 694 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg));
endDef();
delete (yyvsp[-6].s); }
-#line 3279 "engines/director/lingo/lingo-gr.cpp"
+#line 3314 "engines/director/lingo/lingo-gr.cpp"
break;
- case 144:
-#line 688 "engines/director/lingo/lingo-gr.y"
+ case 147:
+#line 699 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 3285 "engines/director/lingo/lingo-gr.cpp"
+#line 3320 "engines/director/lingo/lingo-gr.cpp"
break;
- case 145:
-#line 689 "engines/director/lingo/lingo-gr.y"
+ case 148:
+#line 700 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3291 "engines/director/lingo/lingo-gr.cpp"
+#line 3326 "engines/director/lingo/lingo-gr.cpp"
break;
- case 146:
-#line 690 "engines/director/lingo/lingo-gr.y"
+ case 149:
+#line 701 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg), g_lingo->_currentFactory);
endDef();
delete (yyvsp[-6].s); }
-#line 3301 "engines/director/lingo/lingo-gr.cpp"
+#line 3336 "engines/director/lingo/lingo-gr.cpp"
break;
- case 147:
-#line 695 "engines/director/lingo/lingo-gr.y"
+ case 150:
+#line 706 "engines/director/lingo/lingo-gr.y"
{ // D3
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-7].s), (yyvsp[-6].code), (yyvsp[-5].narg));
@@ -3310,70 +3345,70 @@ yyreduce:
checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
delete (yyvsp[-7].s);
delete (yyvsp[-1].s); }
-#line 3314 "engines/director/lingo/lingo-gr.cpp"
+#line 3349 "engines/director/lingo/lingo-gr.cpp"
break;
- case 148:
-#line 703 "engines/director/lingo/lingo-gr.y"
+ case 151:
+#line 714 "engines/director/lingo/lingo-gr.y"
{ // D4. No 'end' clause
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
endDef();
delete (yyvsp[-5].s); }
-#line 3324 "engines/director/lingo/lingo-gr.cpp"
+#line 3359 "engines/director/lingo/lingo-gr.cpp"
break;
- case 149:
-#line 709 "engines/director/lingo/lingo-gr.y"
+ case 152:
+#line 720 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3330 "engines/director/lingo/lingo-gr.cpp"
+#line 3365 "engines/director/lingo/lingo-gr.cpp"
break;
- case 150:
-#line 709 "engines/director/lingo/lingo-gr.y"
+ case 153:
+#line 720 "engines/director/lingo/lingo-gr.y"
{
(yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory = NULL; g_lingo->_ignoreMe = true; }
-#line 3337 "engines/director/lingo/lingo-gr.cpp"
+#line 3372 "engines/director/lingo/lingo-gr.cpp"
break;
- case 151:
-#line 712 "engines/director/lingo/lingo-gr.y"
+ case 154:
+#line 723 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 0; }
-#line 3343 "engines/director/lingo/lingo-gr.cpp"
+#line 3378 "engines/director/lingo/lingo-gr.cpp"
break;
- case 152:
-#line 713 "engines/director/lingo/lingo-gr.y"
+ case 155:
+#line 724 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); (yyval.narg) = 1; delete (yyvsp[0].s); }
-#line 3349 "engines/director/lingo/lingo-gr.cpp"
+#line 3384 "engines/director/lingo/lingo-gr.cpp"
break;
- case 153:
-#line 714 "engines/director/lingo/lingo-gr.y"
+ case 156:
+#line 725 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
-#line 3355 "engines/director/lingo/lingo-gr.cpp"
+#line 3390 "engines/director/lingo/lingo-gr.cpp"
break;
- case 155:
-#line 717 "engines/director/lingo/lingo-gr.y"
+ case 158:
+#line 728 "engines/director/lingo/lingo-gr.y"
{ delete (yyvsp[0].s); }
-#line 3361 "engines/director/lingo/lingo-gr.cpp"
+#line 3396 "engines/director/lingo/lingo-gr.cpp"
break;
- case 156:
-#line 718 "engines/director/lingo/lingo-gr.y"
+ case 159:
+#line 729 "engines/director/lingo/lingo-gr.y"
{ delete (yyvsp[0].s); }
-#line 3367 "engines/director/lingo/lingo-gr.cpp"
+#line 3402 "engines/director/lingo/lingo-gr.cpp"
break;
- case 157:
-#line 720 "engines/director/lingo/lingo-gr.y"
+ case 160:
+#line 731 "engines/director/lingo/lingo-gr.y"
{ inDef(); }
-#line 3373 "engines/director/lingo/lingo-gr.cpp"
+#line 3408 "engines/director/lingo/lingo-gr.cpp"
break;
- case 158:
-#line 722 "engines/director/lingo/lingo-gr.y"
+ case 161:
+#line 733 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_call);
g_lingo->codeString((yyvsp[-1].s)->c_str());
@@ -3381,113 +3416,113 @@ yyreduce:
WRITE_UINT32(&numpar, (yyvsp[0].narg));
g_lingo->code1(numpar);
delete (yyvsp[-1].s); }
-#line 3385 "engines/director/lingo/lingo-gr.cpp"
+#line 3420 "engines/director/lingo/lingo-gr.cpp"
break;
- case 159:
-#line 730 "engines/director/lingo/lingo-gr.y"
+ case 162:
+#line 741 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 0; }
-#line 3391 "engines/director/lingo/lingo-gr.cpp"
+#line 3426 "engines/director/lingo/lingo-gr.cpp"
break;
- case 160:
-#line 731 "engines/director/lingo/lingo-gr.y"
+ case 163:
+#line 742 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3397 "engines/director/lingo/lingo-gr.cpp"
+#line 3432 "engines/director/lingo/lingo-gr.cpp"
break;
- case 161:
-#line 732 "engines/director/lingo/lingo-gr.y"
+ case 164:
+#line 743 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3403 "engines/director/lingo/lingo-gr.cpp"
+#line 3438 "engines/director/lingo/lingo-gr.cpp"
break;
- case 162:
-#line 734 "engines/director/lingo/lingo-gr.y"
+ case 165:
+#line 745 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3409 "engines/director/lingo/lingo-gr.cpp"
+#line 3444 "engines/director/lingo/lingo-gr.cpp"
break;
- case 163:
-#line 735 "engines/director/lingo/lingo-gr.y"
+ case 166:
+#line 746 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3415 "engines/director/lingo/lingo-gr.cpp"
+#line 3450 "engines/director/lingo/lingo-gr.cpp"
break;
- case 164:
-#line 737 "engines/director/lingo/lingo-gr.y"
+ case 167:
+#line 748 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[-1].code); }
-#line 3421 "engines/director/lingo/lingo-gr.cpp"
+#line 3456 "engines/director/lingo/lingo-gr.cpp"
break;
- case 165:
-#line 739 "engines/director/lingo/lingo-gr.y"
+ case 168:
+#line 750 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3427 "engines/director/lingo/lingo-gr.cpp"
+#line 3462 "engines/director/lingo/lingo-gr.cpp"
break;
- case 166:
-#line 740 "engines/director/lingo/lingo-gr.y"
+ case 169:
+#line 751 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3433 "engines/director/lingo/lingo-gr.cpp"
+#line 3468 "engines/director/lingo/lingo-gr.cpp"
break;
- case 167:
-#line 741 "engines/director/lingo/lingo-gr.y"
+ case 170:
+#line 752 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3439 "engines/director/lingo/lingo-gr.cpp"
+#line 3474 "engines/director/lingo/lingo-gr.cpp"
break;
- case 168:
-#line 742 "engines/director/lingo/lingo-gr.y"
+ case 171:
+#line 753 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3445 "engines/director/lingo/lingo-gr.cpp"
+#line 3480 "engines/director/lingo/lingo-gr.cpp"
break;
- case 169:
-#line 744 "engines/director/lingo/lingo-gr.y"
+ case 172:
+#line 755 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3451 "engines/director/lingo/lingo-gr.cpp"
+#line 3486 "engines/director/lingo/lingo-gr.cpp"
break;
- case 170:
-#line 745 "engines/director/lingo/lingo-gr.y"
+ case 173:
+#line 756 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3457 "engines/director/lingo/lingo-gr.cpp"
+#line 3492 "engines/director/lingo/lingo-gr.cpp"
break;
- case 171:
-#line 747 "engines/director/lingo/lingo-gr.y"
+ case 174:
+#line 758 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3463 "engines/director/lingo/lingo-gr.cpp"
+#line 3498 "engines/director/lingo/lingo-gr.cpp"
break;
- case 172:
-#line 748 "engines/director/lingo/lingo-gr.y"
+ case 175:
+#line 759 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3469 "engines/director/lingo/lingo-gr.cpp"
+#line 3504 "engines/director/lingo/lingo-gr.cpp"
break;
- case 173:
-#line 750 "engines/director/lingo/lingo-gr.y"
+ case 176:
+#line 761 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_symbolpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
delete (yyvsp[-2].s); }
-#line 3478 "engines/director/lingo/lingo-gr.cpp"
+#line 3513 "engines/director/lingo/lingo-gr.cpp"
break;
- case 174:
-#line 754 "engines/director/lingo/lingo-gr.y"
+ case 177:
+#line 765 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_stringpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
delete (yyvsp[-2].s); }
-#line 3487 "engines/director/lingo/lingo-gr.cpp"
+#line 3522 "engines/director/lingo/lingo-gr.cpp"
break;
-#line 3491 "engines/director/lingo/lingo-gr.cpp"
+#line 3526 "engines/director/lingo/lingo-gr.cpp"
default: break;
}
@@ -3686,7 +3721,7 @@ yyreturn:
return yyresult;
}
-#line 760 "engines/director/lingo/lingo-gr.y"
+#line 771 "engines/director/lingo/lingo-gr.y"
int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index e52459bb76..97d7e418c6 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -510,6 +510,17 @@ expr: simpleexpr { $$ = $simpleexpr; }
| FBLTIN arglist {
g_lingo->codeFunc($FBLTIN, $arglist);
delete $FBLTIN; }
+ | ID[func] '(' ID[method] ')' {
+ g_lingo->code1(LC::c_lazyeval);
+ g_lingo->codeString($method->c_str());
+ g_lingo->codeFunc($func, 1);
+ delete $func;
+ delete $method; }
+ | ID[func] '(' ID[method] ',' { g_lingo->code1(LC::c_lazyeval); g_lingo->codeString($method->c_str()); }
+ nonemptyarglist ')' {
+ g_lingo->codeFunc($func, $nonemptyarglist + 1);
+ delete $func;
+ delete $method; }
| ID '(' arglist ')' {
$$ = g_lingo->codeFunc($ID, $arglist);
delete $ID; }
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 23347df311..45ef7a5a85 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -61,15 +61,6 @@ void Lingo::initMethods() {
sym.parens = false;
sym.u.bltin = mtd->func;
_methods[mtd->name] = sym;
-
- // FIXME: Method names can conflict with vars. This won't work all the time.
- Common::String name(mtd->name);
- Datum target(name);
- target.type = VAR;
- Datum source(name);
- source.type = SYMBOL;
- g_lingo->varCreate(name, true);
- g_lingo->varAssign(target, source, true);
}
}
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 1bb061056c..d4a1ced419 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -522,6 +522,15 @@ int Lingo::getAlignedType(Datum &d1, Datum &d2) {
return opType;
}
+Datum Datum::eval() {
+ if (type != VAR) { // It could be cast ref
+ lazy = false;
+ return *this;
+ }
+
+ return g_lingo->varFetch(*this);
+}
+
int Datum::asInt() {
int res = 0;
@@ -693,6 +702,10 @@ Common::String Datum::asString(bool printonly) {
warning("Incorrect operation asString() for type: %s", type2str());
}
+ if (lazy) {
+ s += " (lazy)";
+ }
+
return s;
}
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 16ff91232c..841e266ce7 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -112,6 +112,7 @@ struct Symbol { /* symbol table entry */
struct Datum { /* interpreter stack type */
int type;
+ bool lazy; // evaluate when popped off stack
union {
int i; /* INT, ARGC, ARGCNORET */
@@ -127,11 +128,13 @@ struct Datum { /* interpreter stack type */
Datum() {
u.s = nullptr;
type = VOID;
+ lazy = false;
refCount = new int;
*refCount = 1;
}
Datum(const Datum &d) {
type = d.type;
+ lazy = d.lazy;
u = d.u;
refCount = d.refCount;
*refCount += 1;
@@ -149,18 +152,21 @@ struct Datum { /* interpreter stack type */
Datum(int val) {
u.i = val;
type = INT;
+ lazy = false;
refCount = new int;
*refCount = 1;
}
Datum(double val) {
u.f = val;
type = FLOAT;
+ lazy = false;
refCount = new int;
*refCount = 1;
}
Datum(const Common::String &val) {
u.s = new Common::String(val);
type = STRING;
+ lazy = false;
refCount = new int;
*refCount = 1;
}
@@ -201,6 +207,7 @@ struct Datum { /* interpreter stack type */
reset();
}
+ Datum eval();
double asFloat();
int asInt();
Common::String asString(bool printonly = false);
@@ -364,9 +371,9 @@ public:
Symbol codeDefine(Common::String &s, int start, int nargs, Object *obj = nullptr, int end = -1, bool removeCode = true);
void processIf(int toplabel, int endlabel);
int castIdFetch(Datum &var);
- void varCreate(const Common::String &name, bool global);
- void varAssign(Datum &var, Datum &value, bool global = false);
- Datum varFetch(Datum &var, bool global = false);
+ void varCreate(const Common::String &name, bool global, SymbolHash *localvars = nullptr);
+ void varAssign(Datum &var, Datum &value, bool global = false, SymbolHash *localvars = nullptr);
+ Datum varFetch(Datum &var, bool global = false, SymbolHash *localvars = nullptr);
int getAlignedType(Datum &d1, Datum &d2);
Commit: 99755d8cf5b9a8366887f9bbc1c9aedd944d43a6
https://github.com/scummvm/scummvm/commit/99755d8cf5b9a8366887f9bbc1c9aedd944d43a6
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Improve object printing
This differentiates the parent and child objects with a number.
Changed paths:
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo.cpp
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 8d47d3d067..f2cc7a351d 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1262,7 +1262,7 @@ void LC::call(const Common::String &name, int nargs) {
eventName.type = VAR;
Datum d = g_lingo->varFetch(eventName);
if (d.type == OBJECT) {
- debugC(3, kDebugLingoExec, "Dereferencing object reference: %s to %s", name.c_str(), d.u.obj->name->c_str());
+ debugC(3, kDebugLingoExec, "Dereferencing object reference: %s to <%s>", name.c_str(), d.asString(true).c_str());
Object *target = d.u.obj;
Datum methodName = g_lingo->_stack.remove_at(g_lingo->_stack.size() - nargs); // Take method name out of stack
nargs -= 1;
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index d4a1ced419..d5fdba49a6 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -634,19 +634,7 @@ Common::String Datum::asString(bool printonly) {
if (!printonly) {
s = Common::String::format("#%s", u.obj->name->c_str());
} else {
- s = Common::String::format("object: #%s properties: [", u.obj->name->c_str());
- for (SymbolHash::iterator i = u.obj->properties.begin(); i != u.obj->properties.end(); ++i) {
- if (i != u.obj->properties.begin())
- s += ", ";
- s += (*i)._key.c_str();
- }
- s += "] methods: [";
- for (SymbolHash::iterator i = u.obj->methods.begin(); i != u.obj->methods.end(); ++i) {
- if (i != u.obj->methods.begin())
- s += ", ";
- s += (*i)._key.c_str();
- }
- s += "]";
+ s = Common::String::format("object: #%s %d", u.obj->name->c_str(), u.obj->inheritanceLevel);
}
break;
case VOID:
Commit: 68e6b915a337377a430d0367f1b7427a0691fd0e
https://github.com/scummvm/scummvm/commit/68e6b915a337377a430d0367f1b7427a0691fd0e
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Fix vars in global scope
Changed paths:
engines/director/lingo/lingo-gr.cpp
engines/director/lingo/lingo-gr.h
engines/director/lingo/lingo-gr.y
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 5157aaefa2..68d12e5628 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -127,6 +127,15 @@ static void endDef() {
g_lingo->_methodVarsStash = nullptr;
}
+static VarType globalCheck() {
+ // If in a definition, assume variables are local unless
+ // they were declared global with `global varname`
+ if (g_lingo->_indef == kStateInDef) {
+ return kVarLocal;
+ }
+ return kVarGlobal;
+}
+
static void mVar(Common::String *s, VarType type) {
if (!g_lingo->_methodVars->contains(*s)) {
(*g_lingo->_methodVars)[*s] = type;
@@ -142,7 +151,7 @@ static void mVar(Common::String *s, VarType type) {
}
-#line 146 "engines/director/lingo/lingo-gr.cpp"
+#line 155 "engines/director/lingo/lingo-gr.cpp"
# ifndef YY_CAST
# ifdef __cplusplus
@@ -279,7 +288,7 @@ extern int yydebug;
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
-#line 129 "engines/director/lingo/lingo-gr.y"
+#line 138 "engines/director/lingo/lingo-gr.y"
Common::String *s;
int i;
@@ -299,7 +308,7 @@ union YYSTYPE
Common::String *field;
} objectref;
-#line 303 "engines/director/lingo/lingo-gr.cpp"
+#line 312 "engines/director/lingo/lingo-gr.cpp"
};
typedef union YYSTYPE YYSTYPE;
@@ -853,24 +862,24 @@ static const yytype_int8 yytranslate[] =
/* YYRLINEYYN -- Source line where rule number YYN was defined. */
static const yytype_int16 yyrline[] =
{
- 0, 188, 188, 189, 191, 192, 193, 195, 202, 206,
- 217, 218, 219, 226, 233, 240, 247, 253, 260, 271,
- 278, 279, 280, 282, 283, 288, 300, 304, 307, 299,
- 331, 335, 338, 330, 364, 371, 377, 363, 405, 407,
- 410, 411, 413, 415, 422, 430, 431, 433, 439, 443,
- 447, 451, 454, 456, 457, 458, 460, 463, 466, 470,
- 474, 478, 486, 492, 493, 494, 505, 506, 507, 510,
- 513, 519, 519, 524, 527, 530, 535, 541, 542, 543,
- 544, 545, 546, 547, 548, 549, 550, 551, 552, 553,
- 554, 555, 556, 557, 558, 559, 560, 561, 562, 563,
- 565, 566, 567, 568, 569, 570, 571, 572, 574, 577,
- 579, 580, 581, 582, 583, 584, 584, 585, 585, 586,
- 586, 587, 590, 593, 594, 596, 601, 607, 612, 618,
- 621, 632, 633, 634, 635, 639, 643, 648, 649, 651,
- 655, 659, 663, 663, 693, 693, 693, 699, 700, 700,
- 706, 714, 720, 720, 723, 724, 725, 727, 728, 729,
- 731, 733, 741, 742, 743, 745, 746, 748, 750, 751,
- 752, 753, 755, 756, 758, 759, 761, 765
+ 0, 197, 197, 198, 200, 201, 202, 204, 211, 215,
+ 226, 227, 228, 235, 242, 249, 256, 262, 269, 280,
+ 287, 288, 289, 291, 292, 297, 309, 313, 316, 308,
+ 340, 344, 347, 339, 373, 380, 386, 372, 414, 416,
+ 419, 420, 422, 424, 431, 439, 440, 442, 448, 452,
+ 456, 460, 463, 465, 466, 467, 469, 472, 475, 479,
+ 483, 487, 495, 501, 502, 503, 514, 515, 516, 519,
+ 522, 528, 528, 533, 536, 539, 544, 550, 551, 552,
+ 553, 554, 555, 556, 557, 558, 559, 560, 561, 562,
+ 563, 564, 565, 566, 567, 568, 569, 570, 571, 572,
+ 574, 575, 576, 577, 578, 579, 580, 581, 583, 586,
+ 588, 589, 590, 591, 592, 593, 593, 594, 594, 595,
+ 595, 596, 599, 602, 603, 605, 610, 616, 621, 627,
+ 630, 641, 642, 643, 644, 648, 652, 657, 658, 660,
+ 664, 668, 672, 672, 702, 702, 702, 708, 709, 709,
+ 715, 723, 729, 729, 732, 733, 734, 736, 737, 738,
+ 740, 742, 750, 751, 752, 754, 755, 757, 759, 760,
+ 761, 762, 764, 765, 767, 768, 770, 774
};
#endif
@@ -1941,81 +1950,81 @@ yydestruct (const char *yymsg,
switch (yykind)
{
case 22: /* BLTIN */
-#line 183 "engines/director/lingo/lingo-gr.y"
+#line 192 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1947 "engines/director/lingo/lingo-gr.cpp"
+#line 1956 "engines/director/lingo/lingo-gr.cpp"
break;
case 23: /* FBLTIN */
-#line 183 "engines/director/lingo/lingo-gr.y"
+#line 192 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1953 "engines/director/lingo/lingo-gr.cpp"
+#line 1962 "engines/director/lingo/lingo-gr.cpp"
break;
case 24: /* RBLTIN */
-#line 183 "engines/director/lingo/lingo-gr.y"
+#line 192 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1959 "engines/director/lingo/lingo-gr.cpp"
+#line 1968 "engines/director/lingo/lingo-gr.cpp"
break;
case 25: /* THEFBLTIN */
-#line 183 "engines/director/lingo/lingo-gr.y"
+#line 192 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1965 "engines/director/lingo/lingo-gr.cpp"
+#line 1974 "engines/director/lingo/lingo-gr.cpp"
break;
case 26: /* ID */
-#line 183 "engines/director/lingo/lingo-gr.y"
+#line 192 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1971 "engines/director/lingo/lingo-gr.cpp"
+#line 1980 "engines/director/lingo/lingo-gr.cpp"
break;
case 27: /* STRING */
-#line 183 "engines/director/lingo/lingo-gr.y"
+#line 192 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1977 "engines/director/lingo/lingo-gr.cpp"
+#line 1986 "engines/director/lingo/lingo-gr.cpp"
break;
case 28: /* HANDLER */
-#line 183 "engines/director/lingo/lingo-gr.y"
+#line 192 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1983 "engines/director/lingo/lingo-gr.cpp"
+#line 1992 "engines/director/lingo/lingo-gr.cpp"
break;
case 29: /* SYMBOL */
-#line 183 "engines/director/lingo/lingo-gr.y"
+#line 192 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1989 "engines/director/lingo/lingo-gr.cpp"
+#line 1998 "engines/director/lingo/lingo-gr.cpp"
break;
case 30: /* ENDCLAUSE */
-#line 183 "engines/director/lingo/lingo-gr.y"
+#line 192 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1995 "engines/director/lingo/lingo-gr.cpp"
+#line 2004 "engines/director/lingo/lingo-gr.cpp"
break;
case 31: /* tPLAYACCEL */
-#line 183 "engines/director/lingo/lingo-gr.y"
+#line 192 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2001 "engines/director/lingo/lingo-gr.cpp"
+#line 2010 "engines/director/lingo/lingo-gr.cpp"
break;
case 32: /* tMETHOD */
-#line 183 "engines/director/lingo/lingo-gr.y"
+#line 192 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2007 "engines/director/lingo/lingo-gr.cpp"
+#line 2016 "engines/director/lingo/lingo-gr.cpp"
break;
case 33: /* THEOBJECTFIELD */
-#line 184 "engines/director/lingo/lingo-gr.y"
+#line 193 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).objectfield).os; }
-#line 2013 "engines/director/lingo/lingo-gr.cpp"
+#line 2022 "engines/director/lingo/lingo-gr.cpp"
break;
case 148: /* on */
-#line 183 "engines/director/lingo/lingo-gr.y"
+#line 192 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2019 "engines/director/lingo/lingo-gr.cpp"
+#line 2028 "engines/director/lingo/lingo-gr.cpp"
break;
default:
@@ -2294,27 +2303,27 @@ yyreduce:
switch (yyn)
{
case 7:
-#line 195 "engines/director/lingo/lingo-gr.y"
+#line 204 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
- mVar((yyvsp[0].s), kVarLocal);
+ mVar((yyvsp[0].s), globalCheck());
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[-2].code);
delete (yyvsp[0].s); }
-#line 2306 "engines/director/lingo/lingo-gr.cpp"
+#line 2315 "engines/director/lingo/lingo-gr.cpp"
break;
case 8:
-#line 202 "engines/director/lingo/lingo-gr.y"
+#line 211 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[-2].code); }
-#line 2314 "engines/director/lingo/lingo-gr.cpp"
+#line 2323 "engines/director/lingo/lingo-gr.cpp"
break;
case 9:
-#line 206 "engines/director/lingo/lingo-gr.y"
+#line 215 "engines/director/lingo/lingo-gr.y"
{
if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
warning("LEXER: keyword 'menu' expected");
@@ -2326,35 +2335,35 @@ yyreduce:
g_lingo->codeInt((yyvsp[-4].e)[1]);
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code); }
-#line 2330 "engines/director/lingo/lingo-gr.cpp"
+#line 2339 "engines/director/lingo/lingo-gr.cpp"
break;
case 10:
-#line 217 "engines/director/lingo/lingo-gr.y"
+#line 226 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_after); }
-#line 2336 "engines/director/lingo/lingo-gr.cpp"
+#line 2345 "engines/director/lingo/lingo-gr.cpp"
break;
case 11:
-#line 218 "engines/director/lingo/lingo-gr.y"
+#line 227 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_before); }
-#line 2342 "engines/director/lingo/lingo-gr.cpp"
+#line 2351 "engines/director/lingo/lingo-gr.cpp"
break;
case 12:
-#line 219 "engines/director/lingo/lingo-gr.y"
+#line 228 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
- mVar((yyvsp[-2].s), kVarLocal);
+ mVar((yyvsp[-2].s), globalCheck());
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code);
delete (yyvsp[-2].s); }
-#line 2354 "engines/director/lingo/lingo-gr.cpp"
+#line 2363 "engines/director/lingo/lingo-gr.cpp"
break;
case 13:
-#line 226 "engines/director/lingo/lingo-gr.y"
+#line 235 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2362,23 +2371,23 @@ yyreduce:
g_lingo->codeInt((yyvsp[-2].e)[0]);
g_lingo->codeInt((yyvsp[-2].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2366 "engines/director/lingo/lingo-gr.cpp"
+#line 2375 "engines/director/lingo/lingo-gr.cpp"
break;
case 14:
-#line 233 "engines/director/lingo/lingo-gr.y"
+#line 242 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
- mVar((yyvsp[-2].s), kVarLocal);
+ mVar((yyvsp[-2].s), globalCheck());
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code);
delete (yyvsp[-2].s); }
-#line 2378 "engines/director/lingo/lingo-gr.cpp"
+#line 2387 "engines/director/lingo/lingo-gr.cpp"
break;
case 15:
-#line 240 "engines/director/lingo/lingo-gr.y"
+#line 249 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2386,33 +2395,33 @@ yyreduce:
g_lingo->codeInt((yyvsp[-2].e)[0]);
g_lingo->codeInt((yyvsp[-2].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2390 "engines/director/lingo/lingo-gr.cpp"
+#line 2399 "engines/director/lingo/lingo-gr.cpp"
break;
case 16:
-#line 247 "engines/director/lingo/lingo-gr.y"
+#line 256 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_swap);
g_lingo->code1(LC::c_theentityassign);
g_lingo->codeInt((yyvsp[-3].e)[0]);
g_lingo->codeInt((yyvsp[-3].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2401 "engines/director/lingo/lingo-gr.cpp"
+#line 2410 "engines/director/lingo/lingo-gr.cpp"
break;
case 17:
-#line 253 "engines/director/lingo/lingo-gr.y"
+#line 262 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_swap);
g_lingo->code1(LC::c_theentityassign);
g_lingo->codeInt((yyvsp[-3].e)[0]);
g_lingo->codeInt((yyvsp[-3].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2412 "engines/director/lingo/lingo-gr.cpp"
+#line 2421 "engines/director/lingo/lingo-gr.cpp"
break;
case 18:
-#line 260 "engines/director/lingo/lingo-gr.y"
+#line 269 "engines/director/lingo/lingo-gr.y"
{
if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
warning("LEXER: keyword 'menu' expected");
@@ -2424,54 +2433,54 @@ yyreduce:
g_lingo->codeInt((yyvsp[-6].e)[0]);
g_lingo->codeInt((yyvsp[-6].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2428 "engines/director/lingo/lingo-gr.cpp"
+#line 2437 "engines/director/lingo/lingo-gr.cpp"
break;
case 19:
-#line 271 "engines/director/lingo/lingo-gr.y"
+#line 280 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectfieldassign);
g_lingo->codeString((yyvsp[-2].objectfield).os->c_str());
g_lingo->codeInt((yyvsp[-2].objectfield).oe);
delete (yyvsp[-2].objectfield).os;
(yyval.code) = (yyvsp[0].code); }
-#line 2439 "engines/director/lingo/lingo-gr.cpp"
+#line 2448 "engines/director/lingo/lingo-gr.cpp"
break;
case 25:
-#line 288 "engines/director/lingo/lingo-gr.y"
+#line 297 "engines/director/lingo/lingo-gr.y"
{
inst start = 0, end = 0;
WRITE_UINT32(&start, (yyvsp[-5].code) - (yyvsp[-1].code) + 1);
WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-3].code) + 2);
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = end; /* end, if cond fails */
(*g_lingo->_currentScript)[(yyvsp[-1].code)] = start; }
-#line 2450 "engines/director/lingo/lingo-gr.cpp"
+#line 2459 "engines/director/lingo/lingo-gr.cpp"
break;
case 26:
-#line 300 "engines/director/lingo/lingo-gr.y"
+#line 309 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
- mVar((yyvsp[-2].s), kVarLocal); }
-#line 2458 "engines/director/lingo/lingo-gr.cpp"
+ mVar((yyvsp[-2].s), globalCheck()); }
+#line 2467 "engines/director/lingo/lingo-gr.cpp"
break;
case 27:
-#line 304 "engines/director/lingo/lingo-gr.y"
+#line 313 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2465 "engines/director/lingo/lingo-gr.cpp"
+#line 2474 "engines/director/lingo/lingo-gr.cpp"
break;
case 28:
-#line 307 "engines/director/lingo/lingo-gr.y"
+#line 316 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_le); }
-#line 2471 "engines/director/lingo/lingo-gr.cpp"
+#line 2480 "engines/director/lingo/lingo-gr.cpp"
break;
case 29:
-#line 307 "engines/director/lingo/lingo-gr.y"
+#line 316 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_eval);
@@ -2490,32 +2499,32 @@ yyreduce:
WRITE_UINT32(&end, pos - (yyvsp[-2].code) + 2);
(*g_lingo->_currentScript)[pos] = loop; /* final count value */
(*g_lingo->_currentScript)[(yyvsp[-2].code)] = end; }
-#line 2494 "engines/director/lingo/lingo-gr.cpp"
+#line 2503 "engines/director/lingo/lingo-gr.cpp"
break;
case 30:
-#line 331 "engines/director/lingo/lingo-gr.y"
+#line 340 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
- mVar((yyvsp[-2].s), kVarLocal); }
-#line 2502 "engines/director/lingo/lingo-gr.cpp"
+ mVar((yyvsp[-2].s), globalCheck()); }
+#line 2511 "engines/director/lingo/lingo-gr.cpp"
break;
case 31:
-#line 335 "engines/director/lingo/lingo-gr.y"
+#line 344 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2509 "engines/director/lingo/lingo-gr.cpp"
+#line 2518 "engines/director/lingo/lingo-gr.cpp"
break;
case 32:
-#line 338 "engines/director/lingo/lingo-gr.y"
+#line 347 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ge); }
-#line 2515 "engines/director/lingo/lingo-gr.cpp"
+#line 2524 "engines/director/lingo/lingo-gr.cpp"
break;
case 33:
-#line 339 "engines/director/lingo/lingo-gr.y"
+#line 348 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_eval);
@@ -2534,32 +2543,32 @@ yyreduce:
WRITE_UINT32(&end, pos - (yyvsp[-2].code) + 2);
(*g_lingo->_currentScript)[pos] = loop; /* final count value */
(*g_lingo->_currentScript)[(yyvsp[-2].code)] = end; }
-#line 2538 "engines/director/lingo/lingo-gr.cpp"
+#line 2547 "engines/director/lingo/lingo-gr.cpp"
break;
case 34:
-#line 364 "engines/director/lingo/lingo-gr.y"
+#line 373 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_stackpeek);
g_lingo->codeInt(0);
Common::String count("count");
g_lingo->codeFunc(&count, 1);
g_lingo->code1(LC::c_intpush); // start counter
g_lingo->codeInt(1); }
-#line 2549 "engines/director/lingo/lingo-gr.cpp"
+#line 2558 "engines/director/lingo/lingo-gr.cpp"
break;
case 35:
-#line 371 "engines/director/lingo/lingo-gr.y"
+#line 380 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_stackpeek); // get counter
g_lingo->codeInt(0);
g_lingo->code1(LC::c_stackpeek); // get array size
g_lingo->codeInt(2);
g_lingo->code1(LC::c_le); }
-#line 2559 "engines/director/lingo/lingo-gr.cpp"
+#line 2568 "engines/director/lingo/lingo-gr.cpp"
break;
case 36:
-#line 377 "engines/director/lingo/lingo-gr.y"
+#line 386 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_stackpeek); // get list
g_lingo->codeInt(2);
g_lingo->code1(LC::c_stackpeek); // get counter
@@ -2568,13 +2577,13 @@ yyreduce:
g_lingo->codeFunc(&getAt, 2);
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-6].s)->c_str());
- mVar((yyvsp[-6].s), kVarLocal);
+ mVar((yyvsp[-6].s), globalCheck());
g_lingo->code1(LC::c_assign); }
-#line 2574 "engines/director/lingo/lingo-gr.cpp"
+#line 2583 "engines/director/lingo/lingo-gr.cpp"
break;
case 37:
-#line 387 "engines/director/lingo/lingo-gr.y"
+#line 396 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
@@ -2592,44 +2601,44 @@ yyreduce:
(*g_lingo->_currentScript)[jump + 1] = loop; /* final count value */
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = end; }
-#line 2596 "engines/director/lingo/lingo-gr.cpp"
+#line 2605 "engines/director/lingo/lingo-gr.cpp"
break;
case 38:
-#line 405 "engines/director/lingo/lingo-gr.y"
+#line 414 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_nextRepeat); }
-#line 2603 "engines/director/lingo/lingo-gr.cpp"
+#line 2612 "engines/director/lingo/lingo-gr.cpp"
break;
case 39:
-#line 407 "engines/director/lingo/lingo-gr.y"
+#line 416 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_whencode);
g_lingo->codeString((yyvsp[-2].s)->c_str()); }
-#line 2611 "engines/director/lingo/lingo-gr.cpp"
+#line 2620 "engines/director/lingo/lingo-gr.cpp"
break;
case 40:
-#line 410 "engines/director/lingo/lingo-gr.y"
+#line 419 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_telldone); }
-#line 2617 "engines/director/lingo/lingo-gr.cpp"
+#line 2626 "engines/director/lingo/lingo-gr.cpp"
break;
case 41:
-#line 411 "engines/director/lingo/lingo-gr.y"
+#line 420 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_telldone); }
-#line 2623 "engines/director/lingo/lingo-gr.cpp"
+#line 2632 "engines/director/lingo/lingo-gr.cpp"
break;
case 42:
-#line 413 "engines/director/lingo/lingo-gr.y"
+#line 422 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_tell); }
-#line 2629 "engines/director/lingo/lingo-gr.cpp"
+#line 2638 "engines/director/lingo/lingo-gr.cpp"
break;
case 43:
-#line 415 "engines/director/lingo/lingo-gr.y"
+#line 424 "engines/director/lingo/lingo-gr.y"
{
inst else1 = 0, end3 = 0;
WRITE_UINT32(&else1, (yyvsp[-3].code) + 1 - (yyvsp[-6].code) + 1);
@@ -2637,11 +2646,11 @@ yyreduce:
(*g_lingo->_currentScript)[(yyvsp[-6].code)] = else1; /* elsepart */
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = end3; /* end, if cond fails */
g_lingo->processIf((yyvsp[-3].code), (yyvsp[-1].code)); }
-#line 2641 "engines/director/lingo/lingo-gr.cpp"
+#line 2650 "engines/director/lingo/lingo-gr.cpp"
break;
case 44:
-#line 422 "engines/director/lingo/lingo-gr.y"
+#line 431 "engines/director/lingo/lingo-gr.y"
{
inst else1 = 0, end = 0;
WRITE_UINT32(&else1, (yyvsp[-5].code) + 1 - (yyvsp[-8].code) + 1);
@@ -2649,107 +2658,107 @@ yyreduce:
(*g_lingo->_currentScript)[(yyvsp[-8].code)] = else1; /* elsepart */
(*g_lingo->_currentScript)[(yyvsp[-5].code)] = end; /* end, if cond fails */
g_lingo->processIf((yyvsp[-5].code), (yyvsp[-1].code)); }
-#line 2653 "engines/director/lingo/lingo-gr.cpp"
+#line 2662 "engines/director/lingo/lingo-gr.cpp"
break;
case 47:
-#line 433 "engines/director/lingo/lingo-gr.y"
+#line 442 "engines/director/lingo/lingo-gr.y"
{
inst else1 = 0;
WRITE_UINT32(&else1, (yyvsp[0].code) + 1 - (yyvsp[-3].code) + 1);
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = else1; /* end, if cond fails */
g_lingo->codeLabel((yyvsp[0].code)); }
-#line 2663 "engines/director/lingo/lingo-gr.cpp"
+#line 2672 "engines/director/lingo/lingo-gr.cpp"
break;
case 48:
-#line 439 "engines/director/lingo/lingo-gr.y"
+#line 448 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code2(LC::c_jumpifz, 0);
(yyval.code) = g_lingo->_currentScript->size() - 1; }
-#line 2671 "engines/director/lingo/lingo-gr.cpp"
+#line 2680 "engines/director/lingo/lingo-gr.cpp"
break;
case 49:
-#line 443 "engines/director/lingo/lingo-gr.y"
+#line 452 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code2(LC::c_jump, 0);
(yyval.code) = g_lingo->_currentScript->size() - 1; }
-#line 2679 "engines/director/lingo/lingo-gr.cpp"
+#line 2688 "engines/director/lingo/lingo-gr.cpp"
break;
case 50:
-#line 447 "engines/director/lingo/lingo-gr.y"
+#line 456 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_assign);
(yyval.code) = g_lingo->_currentScript->size() - 1; }
-#line 2687 "engines/director/lingo/lingo-gr.cpp"
+#line 2696 "engines/director/lingo/lingo-gr.cpp"
break;
case 51:
-#line 451 "engines/director/lingo/lingo-gr.y"
+#line 460 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeLabel(0); }
-#line 2694 "engines/director/lingo/lingo-gr.cpp"
+#line 2703 "engines/director/lingo/lingo-gr.cpp"
break;
case 52:
-#line 454 "engines/director/lingo/lingo-gr.y"
+#line 463 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2700 "engines/director/lingo/lingo-gr.cpp"
+#line 2709 "engines/director/lingo/lingo-gr.cpp"
break;
case 53:
-#line 456 "engines/director/lingo/lingo-gr.y"
+#line 465 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2706 "engines/director/lingo/lingo-gr.cpp"
+#line 2715 "engines/director/lingo/lingo-gr.cpp"
break;
case 56:
-#line 460 "engines/director/lingo/lingo-gr.y"
+#line 469 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_intpush);
g_lingo->codeInt((yyvsp[0].i)); }
-#line 2714 "engines/director/lingo/lingo-gr.cpp"
+#line 2723 "engines/director/lingo/lingo-gr.cpp"
break;
case 57:
-#line 463 "engines/director/lingo/lingo-gr.y"
+#line 472 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_floatpush);
g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2722 "engines/director/lingo/lingo-gr.cpp"
+#line 2731 "engines/director/lingo/lingo-gr.cpp"
break;
case 58:
-#line 466 "engines/director/lingo/lingo-gr.y"
+#line 475 "engines/director/lingo/lingo-gr.y"
{ // D3
(yyval.code) = g_lingo->code1(LC::c_symbolpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2731 "engines/director/lingo/lingo-gr.cpp"
+#line 2740 "engines/director/lingo/lingo-gr.cpp"
break;
case 59:
-#line 470 "engines/director/lingo/lingo-gr.y"
+#line 479 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_stringpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2740 "engines/director/lingo/lingo-gr.cpp"
+#line 2749 "engines/director/lingo/lingo-gr.cpp"
break;
case 60:
-#line 474 "engines/director/lingo/lingo-gr.y"
+#line 483 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2749 "engines/director/lingo/lingo-gr.cpp"
+#line 2758 "engines/director/lingo/lingo-gr.cpp"
break;
case 61:
-#line 478 "engines/director/lingo/lingo-gr.y"
+#line 487 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2758,28 +2767,28 @@ yyreduce:
WRITE_UINT32(&e, (yyvsp[0].e)[0]);
WRITE_UINT32(&f, (yyvsp[0].e)[1]);
g_lingo->code2(e, f); }
-#line 2762 "engines/director/lingo/lingo-gr.cpp"
+#line 2771 "engines/director/lingo/lingo-gr.cpp"
break;
case 62:
-#line 486 "engines/director/lingo/lingo-gr.y"
+#line 495 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_theentitypush);
inst e = 0, f = 0;
WRITE_UINT32(&e, (yyvsp[-1].e)[0]);
WRITE_UINT32(&f, (yyvsp[-1].e)[1]);
g_lingo->code2(e, f); }
-#line 2773 "engines/director/lingo/lingo-gr.cpp"
+#line 2782 "engines/director/lingo/lingo-gr.cpp"
break;
case 63:
-#line 492 "engines/director/lingo/lingo-gr.y"
+#line 501 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[-1].code); }
-#line 2779 "engines/director/lingo/lingo-gr.cpp"
+#line 2788 "engines/director/lingo/lingo-gr.cpp"
break;
case 65:
-#line 494 "engines/director/lingo/lingo-gr.y"
+#line 503 "engines/director/lingo/lingo-gr.y"
{
// Director parser till D3 was forgiving for any hanging parentheses
if (g_lingo->_ignoreError) {
@@ -2790,553 +2799,553 @@ yyreduce:
yyerrok;
}
}
-#line 2794 "engines/director/lingo/lingo-gr.cpp"
+#line 2803 "engines/director/lingo/lingo-gr.cpp"
break;
case 66:
-#line 505 "engines/director/lingo/lingo-gr.y"
+#line 514 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); }
-#line 2800 "engines/director/lingo/lingo-gr.cpp"
+#line 2809 "engines/director/lingo/lingo-gr.cpp"
break;
case 68:
-#line 507 "engines/director/lingo/lingo-gr.y"
+#line 516 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 2808 "engines/director/lingo/lingo-gr.cpp"
+#line 2817 "engines/director/lingo/lingo-gr.cpp"
break;
case 69:
-#line 510 "engines/director/lingo/lingo-gr.y"
+#line 519 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
delete (yyvsp[-1].s); }
-#line 2816 "engines/director/lingo/lingo-gr.cpp"
+#line 2825 "engines/director/lingo/lingo-gr.cpp"
break;
case 70:
-#line 513 "engines/director/lingo/lingo-gr.y"
+#line 522 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_lazyeval);
g_lingo->codeString((yyvsp[-1].s)->c_str());
g_lingo->codeFunc((yyvsp[-3].s), 1);
delete (yyvsp[-3].s);
delete (yyvsp[-1].s); }
-#line 2827 "engines/director/lingo/lingo-gr.cpp"
+#line 2836 "engines/director/lingo/lingo-gr.cpp"
break;
case 71:
-#line 519 "engines/director/lingo/lingo-gr.y"
+#line 528 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lazyeval); g_lingo->codeString((yyvsp[-1].s)->c_str()); }
-#line 2833 "engines/director/lingo/lingo-gr.cpp"
+#line 2842 "engines/director/lingo/lingo-gr.cpp"
break;
case 72:
-#line 520 "engines/director/lingo/lingo-gr.y"
+#line 529 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-6].s), (yyvsp[-1].narg) + 1);
delete (yyvsp[-6].s);
delete (yyvsp[-4].s); }
-#line 2842 "engines/director/lingo/lingo-gr.cpp"
+#line 2851 "engines/director/lingo/lingo-gr.cpp"
break;
case 73:
-#line 524 "engines/director/lingo/lingo-gr.y"
+#line 533 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 2850 "engines/director/lingo/lingo-gr.cpp"
+#line 2859 "engines/director/lingo/lingo-gr.cpp"
break;
case 74:
-#line 527 "engines/director/lingo/lingo-gr.y"
+#line 536 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->codeFunc((yyvsp[-2].s), 1);
delete (yyvsp[-2].s); }
-#line 2858 "engines/director/lingo/lingo-gr.cpp"
+#line 2867 "engines/director/lingo/lingo-gr.cpp"
break;
case 75:
-#line 530 "engines/director/lingo/lingo-gr.y"
+#line 539 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectfieldpush);
g_lingo->codeString((yyvsp[0].objectfield).os->c_str());
g_lingo->codeInt((yyvsp[0].objectfield).oe);
delete (yyvsp[0].objectfield).os; }
-#line 2868 "engines/director/lingo/lingo-gr.cpp"
+#line 2877 "engines/director/lingo/lingo-gr.cpp"
break;
case 76:
-#line 535 "engines/director/lingo/lingo-gr.y"
+#line 544 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectrefpush);
g_lingo->codeString((yyvsp[0].objectref).obj->c_str());
g_lingo->codeString((yyvsp[0].objectref).field->c_str());
delete (yyvsp[0].objectref).obj;
delete (yyvsp[0].objectref).field; }
-#line 2879 "engines/director/lingo/lingo-gr.cpp"
+#line 2888 "engines/director/lingo/lingo-gr.cpp"
break;
case 78:
-#line 542 "engines/director/lingo/lingo-gr.y"
+#line 551 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_add); }
-#line 2885 "engines/director/lingo/lingo-gr.cpp"
+#line 2894 "engines/director/lingo/lingo-gr.cpp"
break;
case 79:
-#line 543 "engines/director/lingo/lingo-gr.y"
+#line 552 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_sub); }
-#line 2891 "engines/director/lingo/lingo-gr.cpp"
+#line 2900 "engines/director/lingo/lingo-gr.cpp"
break;
case 80:
-#line 544 "engines/director/lingo/lingo-gr.y"
+#line 553 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_mul); }
-#line 2897 "engines/director/lingo/lingo-gr.cpp"
+#line 2906 "engines/director/lingo/lingo-gr.cpp"
break;
case 81:
-#line 545 "engines/director/lingo/lingo-gr.y"
+#line 554 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_div); }
-#line 2903 "engines/director/lingo/lingo-gr.cpp"
+#line 2912 "engines/director/lingo/lingo-gr.cpp"
break;
case 82:
-#line 546 "engines/director/lingo/lingo-gr.y"
+#line 555 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_mod); }
-#line 2909 "engines/director/lingo/lingo-gr.cpp"
+#line 2918 "engines/director/lingo/lingo-gr.cpp"
break;
case 83:
-#line 547 "engines/director/lingo/lingo-gr.y"
+#line 556 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gt); }
-#line 2915 "engines/director/lingo/lingo-gr.cpp"
+#line 2924 "engines/director/lingo/lingo-gr.cpp"
break;
case 84:
-#line 548 "engines/director/lingo/lingo-gr.y"
+#line 557 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lt); }
-#line 2921 "engines/director/lingo/lingo-gr.cpp"
+#line 2930 "engines/director/lingo/lingo-gr.cpp"
break;
case 85:
-#line 549 "engines/director/lingo/lingo-gr.y"
+#line 558 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eq); }
-#line 2927 "engines/director/lingo/lingo-gr.cpp"
+#line 2936 "engines/director/lingo/lingo-gr.cpp"
break;
case 86:
-#line 550 "engines/director/lingo/lingo-gr.y"
+#line 559 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_neq); }
-#line 2933 "engines/director/lingo/lingo-gr.cpp"
+#line 2942 "engines/director/lingo/lingo-gr.cpp"
break;
case 87:
-#line 551 "engines/director/lingo/lingo-gr.y"
+#line 560 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ge); }
-#line 2939 "engines/director/lingo/lingo-gr.cpp"
+#line 2948 "engines/director/lingo/lingo-gr.cpp"
break;
case 88:
-#line 552 "engines/director/lingo/lingo-gr.y"
+#line 561 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_le); }
-#line 2945 "engines/director/lingo/lingo-gr.cpp"
+#line 2954 "engines/director/lingo/lingo-gr.cpp"
break;
case 89:
-#line 553 "engines/director/lingo/lingo-gr.y"
+#line 562 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_and); }
-#line 2951 "engines/director/lingo/lingo-gr.cpp"
+#line 2960 "engines/director/lingo/lingo-gr.cpp"
break;
case 90:
-#line 554 "engines/director/lingo/lingo-gr.y"
+#line 563 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_or); }
-#line 2957 "engines/director/lingo/lingo-gr.cpp"
+#line 2966 "engines/director/lingo/lingo-gr.cpp"
break;
case 91:
-#line 555 "engines/director/lingo/lingo-gr.y"
+#line 564 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_not); }
-#line 2963 "engines/director/lingo/lingo-gr.cpp"
+#line 2972 "engines/director/lingo/lingo-gr.cpp"
break;
case 92:
-#line 556 "engines/director/lingo/lingo-gr.y"
+#line 565 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ampersand); }
-#line 2969 "engines/director/lingo/lingo-gr.cpp"
+#line 2978 "engines/director/lingo/lingo-gr.cpp"
break;
case 93:
-#line 557 "engines/director/lingo/lingo-gr.y"
+#line 566 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_concat); }
-#line 2975 "engines/director/lingo/lingo-gr.cpp"
+#line 2984 "engines/director/lingo/lingo-gr.cpp"
break;
case 94:
-#line 558 "engines/director/lingo/lingo-gr.y"
+#line 567 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_contains); }
-#line 2981 "engines/director/lingo/lingo-gr.cpp"
+#line 2990 "engines/director/lingo/lingo-gr.cpp"
break;
case 95:
-#line 559 "engines/director/lingo/lingo-gr.y"
+#line 568 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_starts); }
-#line 2987 "engines/director/lingo/lingo-gr.cpp"
+#line 2996 "engines/director/lingo/lingo-gr.cpp"
break;
case 96:
-#line 560 "engines/director/lingo/lingo-gr.y"
+#line 569 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); }
-#line 2993 "engines/director/lingo/lingo-gr.cpp"
+#line 3002 "engines/director/lingo/lingo-gr.cpp"
break;
case 97:
-#line 561 "engines/director/lingo/lingo-gr.y"
+#line 570 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 2999 "engines/director/lingo/lingo-gr.cpp"
+#line 3008 "engines/director/lingo/lingo-gr.cpp"
break;
case 98:
-#line 562 "engines/director/lingo/lingo-gr.y"
+#line 571 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_intersects); }
-#line 3005 "engines/director/lingo/lingo-gr.cpp"
+#line 3014 "engines/director/lingo/lingo-gr.cpp"
break;
case 99:
-#line 563 "engines/director/lingo/lingo-gr.y"
+#line 572 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_within); }
-#line 3011 "engines/director/lingo/lingo-gr.cpp"
+#line 3020 "engines/director/lingo/lingo-gr.cpp"
break;
case 100:
-#line 565 "engines/director/lingo/lingo-gr.y"
+#line 574 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_charOf); }
-#line 3017 "engines/director/lingo/lingo-gr.cpp"
+#line 3026 "engines/director/lingo/lingo-gr.cpp"
break;
case 101:
-#line 566 "engines/director/lingo/lingo-gr.y"
+#line 575 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_charToOf); }
-#line 3023 "engines/director/lingo/lingo-gr.cpp"
+#line 3032 "engines/director/lingo/lingo-gr.cpp"
break;
case 102:
-#line 567 "engines/director/lingo/lingo-gr.y"
+#line 576 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_itemOf); }
-#line 3029 "engines/director/lingo/lingo-gr.cpp"
+#line 3038 "engines/director/lingo/lingo-gr.cpp"
break;
case 103:
-#line 568 "engines/director/lingo/lingo-gr.y"
+#line 577 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_itemToOf); }
-#line 3035 "engines/director/lingo/lingo-gr.cpp"
+#line 3044 "engines/director/lingo/lingo-gr.cpp"
break;
case 104:
-#line 569 "engines/director/lingo/lingo-gr.y"
+#line 578 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lineOf); }
-#line 3041 "engines/director/lingo/lingo-gr.cpp"
+#line 3050 "engines/director/lingo/lingo-gr.cpp"
break;
case 105:
-#line 570 "engines/director/lingo/lingo-gr.y"
+#line 579 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lineToOf); }
-#line 3047 "engines/director/lingo/lingo-gr.cpp"
+#line 3056 "engines/director/lingo/lingo-gr.cpp"
break;
case 106:
-#line 571 "engines/director/lingo/lingo-gr.y"
+#line 580 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_wordOf); }
-#line 3053 "engines/director/lingo/lingo-gr.cpp"
+#line 3062 "engines/director/lingo/lingo-gr.cpp"
break;
case 107:
-#line 572 "engines/director/lingo/lingo-gr.y"
+#line 581 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_wordToOf); }
-#line 3059 "engines/director/lingo/lingo-gr.cpp"
+#line 3068 "engines/director/lingo/lingo-gr.cpp"
break;
case 108:
-#line 574 "engines/director/lingo/lingo-gr.y"
+#line 583 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), 1);
delete (yyvsp[-1].s); }
-#line 3067 "engines/director/lingo/lingo-gr.cpp"
+#line 3076 "engines/director/lingo/lingo-gr.cpp"
break;
case 110:
-#line 579 "engines/director/lingo/lingo-gr.y"
+#line 588 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_printtop); }
-#line 3073 "engines/director/lingo/lingo-gr.cpp"
+#line 3082 "engines/director/lingo/lingo-gr.cpp"
break;
case 113:
-#line 582 "engines/director/lingo/lingo-gr.y"
+#line 591 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_exitRepeat); }
-#line 3079 "engines/director/lingo/lingo-gr.cpp"
+#line 3088 "engines/director/lingo/lingo-gr.cpp"
break;
case 114:
-#line 583 "engines/director/lingo/lingo-gr.y"
+#line 592 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_procret); }
-#line 3085 "engines/director/lingo/lingo-gr.cpp"
+#line 3094 "engines/director/lingo/lingo-gr.cpp"
break;
case 115:
-#line 584 "engines/director/lingo/lingo-gr.y"
+#line 593 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3091 "engines/director/lingo/lingo-gr.cpp"
+#line 3100 "engines/director/lingo/lingo-gr.cpp"
break;
case 116:
-#line 584 "engines/director/lingo/lingo-gr.y"
+#line 593 "engines/director/lingo/lingo-gr.y"
{ inNone(); }
-#line 3097 "engines/director/lingo/lingo-gr.cpp"
+#line 3106 "engines/director/lingo/lingo-gr.cpp"
break;
case 117:
-#line 585 "engines/director/lingo/lingo-gr.y"
+#line 594 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3103 "engines/director/lingo/lingo-gr.cpp"
+#line 3112 "engines/director/lingo/lingo-gr.cpp"
break;
case 118:
-#line 585 "engines/director/lingo/lingo-gr.y"
+#line 594 "engines/director/lingo/lingo-gr.y"
{ inNone(); }
-#line 3109 "engines/director/lingo/lingo-gr.cpp"
+#line 3118 "engines/director/lingo/lingo-gr.cpp"
break;
case 119:
-#line 586 "engines/director/lingo/lingo-gr.y"
+#line 595 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3115 "engines/director/lingo/lingo-gr.cpp"
+#line 3124 "engines/director/lingo/lingo-gr.cpp"
break;
case 120:
-#line 586 "engines/director/lingo/lingo-gr.y"
+#line 595 "engines/director/lingo/lingo-gr.y"
{ inNone(); }
-#line 3121 "engines/director/lingo/lingo-gr.cpp"
+#line 3130 "engines/director/lingo/lingo-gr.cpp"
break;
case 121:
-#line 587 "engines/director/lingo/lingo-gr.y"
+#line 596 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 3129 "engines/director/lingo/lingo-gr.cpp"
+#line 3138 "engines/director/lingo/lingo-gr.cpp"
break;
case 122:
-#line 590 "engines/director/lingo/lingo-gr.y"
+#line 599 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
delete (yyvsp[-1].s); }
-#line 3137 "engines/director/lingo/lingo-gr.cpp"
+#line 3146 "engines/director/lingo/lingo-gr.cpp"
break;
case 123:
-#line 593 "engines/director/lingo/lingo-gr.y"
+#line 602 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_open); }
-#line 3143 "engines/director/lingo/lingo-gr.cpp"
+#line 3152 "engines/director/lingo/lingo-gr.cpp"
break;
case 124:
-#line 594 "engines/director/lingo/lingo-gr.y"
+#line 603 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code2(LC::c_voidpush, LC::c_open); }
-#line 3149 "engines/director/lingo/lingo-gr.cpp"
+#line 3158 "engines/director/lingo/lingo-gr.cpp"
break;
case 125:
-#line 596 "engines/director/lingo/lingo-gr.y"
+#line 605 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_global);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarGlobal);
delete (yyvsp[0].s); }
-#line 3159 "engines/director/lingo/lingo-gr.cpp"
+#line 3168 "engines/director/lingo/lingo-gr.cpp"
break;
case 126:
-#line 601 "engines/director/lingo/lingo-gr.y"
+#line 610 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_global);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarGlobal);
delete (yyvsp[0].s); }
-#line 3169 "engines/director/lingo/lingo-gr.cpp"
+#line 3178 "engines/director/lingo/lingo-gr.cpp"
break;
case 127:
-#line 607 "engines/director/lingo/lingo-gr.y"
+#line 616 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_property);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarProperty);
delete (yyvsp[0].s); }
-#line 3179 "engines/director/lingo/lingo-gr.cpp"
+#line 3188 "engines/director/lingo/lingo-gr.cpp"
break;
case 128:
-#line 612 "engines/director/lingo/lingo-gr.y"
+#line 621 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_property);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarProperty);
delete (yyvsp[0].s); }
-#line 3189 "engines/director/lingo/lingo-gr.cpp"
+#line 3198 "engines/director/lingo/lingo-gr.cpp"
break;
case 129:
-#line 618 "engines/director/lingo/lingo-gr.y"
+#line 627 "engines/director/lingo/lingo-gr.y"
{
mVar((yyvsp[0].s), kVarInstance);
delete (yyvsp[0].s); }
-#line 3197 "engines/director/lingo/lingo-gr.cpp"
+#line 3206 "engines/director/lingo/lingo-gr.cpp"
break;
case 130:
-#line 621 "engines/director/lingo/lingo-gr.y"
+#line 630 "engines/director/lingo/lingo-gr.y"
{
mVar((yyvsp[0].s), kVarInstance);
delete (yyvsp[0].s); }
-#line 3205 "engines/director/lingo/lingo-gr.cpp"
+#line 3214 "engines/director/lingo/lingo-gr.cpp"
break;
case 131:
-#line 632 "engines/director/lingo/lingo-gr.y"
+#line 641 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotoloop); }
-#line 3211 "engines/director/lingo/lingo-gr.cpp"
+#line 3220 "engines/director/lingo/lingo-gr.cpp"
break;
case 132:
-#line 633 "engines/director/lingo/lingo-gr.y"
+#line 642 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotonext); }
-#line 3217 "engines/director/lingo/lingo-gr.cpp"
+#line 3226 "engines/director/lingo/lingo-gr.cpp"
break;
case 133:
-#line 634 "engines/director/lingo/lingo-gr.y"
+#line 643 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotoprevious); }
-#line 3223 "engines/director/lingo/lingo-gr.cpp"
+#line 3232 "engines/director/lingo/lingo-gr.cpp"
break;
case 134:
-#line 635 "engines/director/lingo/lingo-gr.y"
+#line 644 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(1);
g_lingo->code1(LC::c_goto); }
-#line 3232 "engines/director/lingo/lingo-gr.cpp"
+#line 3241 "engines/director/lingo/lingo-gr.cpp"
break;
case 135:
-#line 639 "engines/director/lingo/lingo-gr.y"
+#line 648 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(3);
g_lingo->code1(LC::c_goto); }
-#line 3241 "engines/director/lingo/lingo-gr.cpp"
+#line 3250 "engines/director/lingo/lingo-gr.cpp"
break;
case 136:
-#line 643 "engines/director/lingo/lingo-gr.y"
+#line 652 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(2);
g_lingo->code1(LC::c_goto); }
-#line 3250 "engines/director/lingo/lingo-gr.cpp"
+#line 3259 "engines/director/lingo/lingo-gr.cpp"
break;
case 139:
-#line 651 "engines/director/lingo/lingo-gr.y"
+#line 660 "engines/director/lingo/lingo-gr.y"
{ // "play #done" is also caught by this
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(1);
g_lingo->code1(LC::c_play); }
-#line 3259 "engines/director/lingo/lingo-gr.cpp"
+#line 3268 "engines/director/lingo/lingo-gr.cpp"
break;
case 140:
-#line 655 "engines/director/lingo/lingo-gr.y"
+#line 664 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(3);
g_lingo->code1(LC::c_play); }
-#line 3268 "engines/director/lingo/lingo-gr.cpp"
+#line 3277 "engines/director/lingo/lingo-gr.cpp"
break;
case 141:
-#line 659 "engines/director/lingo/lingo-gr.y"
+#line 668 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(2);
g_lingo->code1(LC::c_play); }
-#line 3277 "engines/director/lingo/lingo-gr.cpp"
+#line 3286 "engines/director/lingo/lingo-gr.cpp"
break;
case 142:
-#line 663 "engines/director/lingo/lingo-gr.y"
+#line 672 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeSetImmediate(true); }
-#line 3283 "engines/director/lingo/lingo-gr.cpp"
+#line 3292 "engines/director/lingo/lingo-gr.cpp"
break;
case 143:
-#line 663 "engines/director/lingo/lingo-gr.y"
+#line 672 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeSetImmediate(false);
g_lingo->codeFunc((yyvsp[-2].s), (yyvsp[0].narg));
delete (yyvsp[-2].s); }
-#line 3292 "engines/director/lingo/lingo-gr.cpp"
+#line 3301 "engines/director/lingo/lingo-gr.cpp"
break;
case 144:
-#line 693 "engines/director/lingo/lingo-gr.y"
+#line 702 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3298 "engines/director/lingo/lingo-gr.cpp"
+#line 3307 "engines/director/lingo/lingo-gr.cpp"
break;
case 145:
-#line 693 "engines/director/lingo/lingo-gr.y"
+#line 702 "engines/director/lingo/lingo-gr.y"
{ g_lingo->_currentFactory = NULL; }
-#line 3304 "engines/director/lingo/lingo-gr.cpp"
+#line 3313 "engines/director/lingo/lingo-gr.cpp"
break;
case 146:
-#line 694 "engines/director/lingo/lingo-gr.y"
+#line 703 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg));
endDef();
delete (yyvsp[-6].s); }
-#line 3314 "engines/director/lingo/lingo-gr.cpp"
+#line 3323 "engines/director/lingo/lingo-gr.cpp"
break;
case 147:
-#line 699 "engines/director/lingo/lingo-gr.y"
+#line 708 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 3320 "engines/director/lingo/lingo-gr.cpp"
+#line 3329 "engines/director/lingo/lingo-gr.cpp"
break;
case 148:
-#line 700 "engines/director/lingo/lingo-gr.y"
+#line 709 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3326 "engines/director/lingo/lingo-gr.cpp"
+#line 3335 "engines/director/lingo/lingo-gr.cpp"
break;
case 149:
-#line 701 "engines/director/lingo/lingo-gr.y"
+#line 710 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg), g_lingo->_currentFactory);
endDef();
delete (yyvsp[-6].s); }
-#line 3336 "engines/director/lingo/lingo-gr.cpp"
+#line 3345 "engines/director/lingo/lingo-gr.cpp"
break;
case 150:
-#line 706 "engines/director/lingo/lingo-gr.y"
+#line 715 "engines/director/lingo/lingo-gr.y"
{ // D3
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-7].s), (yyvsp[-6].code), (yyvsp[-5].narg));
@@ -3345,70 +3354,70 @@ yyreduce:
checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
delete (yyvsp[-7].s);
delete (yyvsp[-1].s); }
-#line 3349 "engines/director/lingo/lingo-gr.cpp"
+#line 3358 "engines/director/lingo/lingo-gr.cpp"
break;
case 151:
-#line 714 "engines/director/lingo/lingo-gr.y"
+#line 723 "engines/director/lingo/lingo-gr.y"
{ // D4. No 'end' clause
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
endDef();
delete (yyvsp[-5].s); }
-#line 3359 "engines/director/lingo/lingo-gr.cpp"
+#line 3368 "engines/director/lingo/lingo-gr.cpp"
break;
case 152:
-#line 720 "engines/director/lingo/lingo-gr.y"
+#line 729 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3365 "engines/director/lingo/lingo-gr.cpp"
+#line 3374 "engines/director/lingo/lingo-gr.cpp"
break;
case 153:
-#line 720 "engines/director/lingo/lingo-gr.y"
+#line 729 "engines/director/lingo/lingo-gr.y"
{
(yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory = NULL; g_lingo->_ignoreMe = true; }
-#line 3372 "engines/director/lingo/lingo-gr.cpp"
+#line 3381 "engines/director/lingo/lingo-gr.cpp"
break;
case 154:
-#line 723 "engines/director/lingo/lingo-gr.y"
+#line 732 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 0; }
-#line 3378 "engines/director/lingo/lingo-gr.cpp"
+#line 3387 "engines/director/lingo/lingo-gr.cpp"
break;
case 155:
-#line 724 "engines/director/lingo/lingo-gr.y"
+#line 733 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); (yyval.narg) = 1; delete (yyvsp[0].s); }
-#line 3384 "engines/director/lingo/lingo-gr.cpp"
+#line 3393 "engines/director/lingo/lingo-gr.cpp"
break;
case 156:
-#line 725 "engines/director/lingo/lingo-gr.y"
+#line 734 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
-#line 3390 "engines/director/lingo/lingo-gr.cpp"
+#line 3399 "engines/director/lingo/lingo-gr.cpp"
break;
case 158:
-#line 728 "engines/director/lingo/lingo-gr.y"
+#line 737 "engines/director/lingo/lingo-gr.y"
{ delete (yyvsp[0].s); }
-#line 3396 "engines/director/lingo/lingo-gr.cpp"
+#line 3405 "engines/director/lingo/lingo-gr.cpp"
break;
case 159:
-#line 729 "engines/director/lingo/lingo-gr.y"
+#line 738 "engines/director/lingo/lingo-gr.y"
{ delete (yyvsp[0].s); }
-#line 3402 "engines/director/lingo/lingo-gr.cpp"
+#line 3411 "engines/director/lingo/lingo-gr.cpp"
break;
case 160:
-#line 731 "engines/director/lingo/lingo-gr.y"
+#line 740 "engines/director/lingo/lingo-gr.y"
{ inDef(); }
-#line 3408 "engines/director/lingo/lingo-gr.cpp"
+#line 3417 "engines/director/lingo/lingo-gr.cpp"
break;
case 161:
-#line 733 "engines/director/lingo/lingo-gr.y"
+#line 742 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_call);
g_lingo->codeString((yyvsp[-1].s)->c_str());
@@ -3416,113 +3425,113 @@ yyreduce:
WRITE_UINT32(&numpar, (yyvsp[0].narg));
g_lingo->code1(numpar);
delete (yyvsp[-1].s); }
-#line 3420 "engines/director/lingo/lingo-gr.cpp"
+#line 3429 "engines/director/lingo/lingo-gr.cpp"
break;
case 162:
-#line 741 "engines/director/lingo/lingo-gr.y"
+#line 750 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 0; }
-#line 3426 "engines/director/lingo/lingo-gr.cpp"
+#line 3435 "engines/director/lingo/lingo-gr.cpp"
break;
case 163:
-#line 742 "engines/director/lingo/lingo-gr.y"
+#line 751 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3432 "engines/director/lingo/lingo-gr.cpp"
+#line 3441 "engines/director/lingo/lingo-gr.cpp"
break;
case 164:
-#line 743 "engines/director/lingo/lingo-gr.y"
+#line 752 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3438 "engines/director/lingo/lingo-gr.cpp"
+#line 3447 "engines/director/lingo/lingo-gr.cpp"
break;
case 165:
-#line 745 "engines/director/lingo/lingo-gr.y"
+#line 754 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3444 "engines/director/lingo/lingo-gr.cpp"
+#line 3453 "engines/director/lingo/lingo-gr.cpp"
break;
case 166:
-#line 746 "engines/director/lingo/lingo-gr.y"
+#line 755 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3450 "engines/director/lingo/lingo-gr.cpp"
+#line 3459 "engines/director/lingo/lingo-gr.cpp"
break;
case 167:
-#line 748 "engines/director/lingo/lingo-gr.y"
+#line 757 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[-1].code); }
-#line 3456 "engines/director/lingo/lingo-gr.cpp"
+#line 3465 "engines/director/lingo/lingo-gr.cpp"
break;
case 168:
-#line 750 "engines/director/lingo/lingo-gr.y"
+#line 759 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3462 "engines/director/lingo/lingo-gr.cpp"
+#line 3471 "engines/director/lingo/lingo-gr.cpp"
break;
case 169:
-#line 751 "engines/director/lingo/lingo-gr.y"
+#line 760 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3468 "engines/director/lingo/lingo-gr.cpp"
+#line 3477 "engines/director/lingo/lingo-gr.cpp"
break;
case 170:
-#line 752 "engines/director/lingo/lingo-gr.y"
+#line 761 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3474 "engines/director/lingo/lingo-gr.cpp"
+#line 3483 "engines/director/lingo/lingo-gr.cpp"
break;
case 171:
-#line 753 "engines/director/lingo/lingo-gr.y"
+#line 762 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3480 "engines/director/lingo/lingo-gr.cpp"
+#line 3489 "engines/director/lingo/lingo-gr.cpp"
break;
case 172:
-#line 755 "engines/director/lingo/lingo-gr.y"
+#line 764 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3486 "engines/director/lingo/lingo-gr.cpp"
+#line 3495 "engines/director/lingo/lingo-gr.cpp"
break;
case 173:
-#line 756 "engines/director/lingo/lingo-gr.y"
+#line 765 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3492 "engines/director/lingo/lingo-gr.cpp"
+#line 3501 "engines/director/lingo/lingo-gr.cpp"
break;
case 174:
-#line 758 "engines/director/lingo/lingo-gr.y"
+#line 767 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3498 "engines/director/lingo/lingo-gr.cpp"
+#line 3507 "engines/director/lingo/lingo-gr.cpp"
break;
case 175:
-#line 759 "engines/director/lingo/lingo-gr.y"
+#line 768 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3504 "engines/director/lingo/lingo-gr.cpp"
+#line 3513 "engines/director/lingo/lingo-gr.cpp"
break;
case 176:
-#line 761 "engines/director/lingo/lingo-gr.y"
+#line 770 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_symbolpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
delete (yyvsp[-2].s); }
-#line 3513 "engines/director/lingo/lingo-gr.cpp"
+#line 3522 "engines/director/lingo/lingo-gr.cpp"
break;
case 177:
-#line 765 "engines/director/lingo/lingo-gr.y"
+#line 774 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_stringpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
delete (yyvsp[-2].s); }
-#line 3522 "engines/director/lingo/lingo-gr.cpp"
+#line 3531 "engines/director/lingo/lingo-gr.cpp"
break;
-#line 3526 "engines/director/lingo/lingo-gr.cpp"
+#line 3535 "engines/director/lingo/lingo-gr.cpp"
default: break;
}
@@ -3721,7 +3730,7 @@ yyreturn:
return yyresult;
}
-#line 771 "engines/director/lingo/lingo-gr.y"
+#line 780 "engines/director/lingo/lingo-gr.y"
int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 303bd41d2d..be6b0b5b46 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -147,7 +147,7 @@ extern int yydebug;
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
-#line 129 "engines/director/lingo/lingo-gr.y"
+#line 138 "engines/director/lingo/lingo-gr.y"
Common::String *s;
int i;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 97d7e418c6..91aba75d90 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -110,6 +110,15 @@ static void endDef() {
g_lingo->_methodVarsStash = nullptr;
}
+static VarType globalCheck() {
+ // If in a definition, assume variables are local unless
+ // they were declared global with `global varname`
+ if (g_lingo->_indef == kStateInDef) {
+ return kVarLocal;
+ }
+ return kVarGlobal;
+}
+
static void mVar(Common::String *s, VarType type) {
if (!g_lingo->_methodVars->contains(*s)) {
(*g_lingo->_methodVars)[*s] = type;
@@ -195,7 +204,7 @@ programline: /* empty */
asgn: tPUT expr tINTO ID {
g_lingo->code1(LC::c_varpush);
g_lingo->codeString($ID->c_str());
- mVar($ID, kVarLocal);
+ mVar($ID, globalCheck());
g_lingo->code1(LC::c_assign);
$$ = $expr;
delete $ID; }
@@ -219,7 +228,7 @@ asgn: tPUT expr tINTO ID {
| tSET ID tEQ expr {
g_lingo->code1(LC::c_varpush);
g_lingo->codeString($ID->c_str());
- mVar($ID, kVarLocal);
+ mVar($ID, globalCheck());
g_lingo->code1(LC::c_assign);
$$ = $expr;
delete $ID; }
@@ -233,7 +242,7 @@ asgn: tPUT expr tINTO ID {
| tSET ID tTO expr {
g_lingo->code1(LC::c_varpush);
g_lingo->codeString($ID->c_str());
- mVar($ID, kVarLocal);
+ mVar($ID, globalCheck());
g_lingo->code1(LC::c_assign);
$$ = $expr;
delete $ID; }
@@ -299,7 +308,7 @@ stmt: stmtoneliner
| tREPEAT tWITH ID tEQ expr[init]
{ g_lingo->code1(LC::c_varpush);
g_lingo->codeString($ID->c_str());
- mVar($ID, kVarLocal); }
+ mVar($ID, globalCheck()); }
varassign
{ g_lingo->code1(LC::c_eval);
g_lingo->codeString($ID->c_str()); }
@@ -330,7 +339,7 @@ stmt: stmtoneliner
| tREPEAT tWITH ID tEQ expr[init]
{ g_lingo->code1(LC::c_varpush);
g_lingo->codeString($ID->c_str());
- mVar($ID, kVarLocal); }
+ mVar($ID, globalCheck()); }
varassign
{ g_lingo->code1(LC::c_eval);
g_lingo->codeString($ID->c_str()); }
@@ -382,7 +391,7 @@ stmt: stmtoneliner
g_lingo->codeFunc(&getAt, 2);
g_lingo->code1(LC::c_varpush);
g_lingo->codeString($ID->c_str());
- mVar($ID, kVarLocal);
+ mVar($ID, globalCheck());
g_lingo->code1(LC::c_assign); }
stmtlist tENDREPEAT {
Commit: dbeabf0be3124ee91943bec18d17e813d0ab2904
https://github.com/scummvm/scummvm/commit/dbeabf0be3124ee91943bec18d17e813d0ab2904
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Fix lazy datum printing
Changed paths:
engines/director/lingo/lingo.cpp
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index d5fdba49a6..f2d5f3ba97 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -690,7 +690,7 @@ Common::String Datum::asString(bool printonly) {
warning("Incorrect operation asString() for type: %s", type2str());
}
- if (lazy) {
+ if (printonly && lazy) {
s += " (lazy)";
}
Commit: ca9e952d41382a42f51183724b9e005ea493d06e
https://github.com/scummvm/scummvm/commit/ca9e952d41382a42f51183724b9e005ea493d06e
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Implement Lingo::push/popContext
Changed paths:
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index f2cc7a351d..089fdf664b 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -211,6 +211,49 @@ void LC::c_xpop() {
g_lingo->pop();
}
+void Lingo::pushContext(const Symbol *funcSym) {
+ debugC(5, kDebugLingoExec, "Pushing frame %d", g_lingo->_callstack.size() + 1);
+ CFrame *fp = new CFrame;
+
+ fp->retpc = g_lingo->_pc;
+ fp->retscript = g_lingo->_currentScript;
+ fp->retctx = g_lingo->_currentScriptContext;
+ fp->retarchive = g_lingo->_archiveIndex;
+ fp->localvars = g_lingo->_localvars;
+ fp->retMeObj = g_lingo->_currentMeObj;
+ if (funcSym) {
+ fp->sp = *funcSym;
+ }
+
+ g_lingo->_callstack.push_back(fp);
+
+ if (debugChannelSet(5, kDebugLingoExec)) {
+ g_lingo->printCallStack(0);
+ }
+}
+
+void Lingo::popContext() {
+ debugC(5, kDebugLingoExec, "Popping frame %d", g_lingo->_callstack.size());
+ CFrame *fp = g_lingo->_callstack.back();
+ g_lingo->_callstack.pop_back();
+
+ g_lingo->_currentScript = fp->retscript;
+ g_lingo->_currentScriptContext = fp->retctx;
+ g_lingo->_archiveIndex = fp->retarchive;
+ g_lingo->_pc = fp->retpc;
+ g_lingo->_currentMeObj = fp->retMeObj;
+
+ // Restore local variables
+ g_lingo->cleanLocalVars();
+ g_lingo->_localvars = fp->localvars;
+
+ if (debugChannelSet(5, kDebugLingoExec)) {
+ g_lingo->printCallStack(g_lingo->_pc);
+ }
+
+ delete fp;
+}
+
void LC::c_printtop(void) {
Datum d = g_lingo->pop();
@@ -1346,15 +1389,7 @@ void LC::call(const Symbol &funcSym, int nargs, Object *target) {
g_lingo->push(d);
}
- debugC(5, kDebugLingoExec, "Pushing frame %d", g_lingo->_callstack.size() + 1);
- CFrame *fp = new CFrame;
-
- fp->retpc = g_lingo->_pc;
- fp->retscript = g_lingo->_currentScript;
- fp->retctx = g_lingo->_currentScriptContext;
- fp->retarchive = g_lingo->_archiveIndex;
- fp->localvars = g_lingo->_localvars;
- fp->retMeObj = g_lingo->_currentMeObj;
+ g_lingo->pushContext(&funcSym);
// Create new set of local variables
SymbolHash *localvars = new SymbolHash;
@@ -1403,14 +1438,6 @@ void LC::call(const Symbol &funcSym, int nargs, Object *target) {
g_lingo->_currentMeObj = nullptr;
}
- fp->sp = funcSym;
-
- g_lingo->_callstack.push_back(fp);
-
- if (debugChannelSet(5, kDebugLingoExec)) {
- g_lingo->printCallStack(0);
- }
-
g_lingo->_currentScript = funcSym.u.defn;
if (funcSym.ctx) {
g_lingo->_currentScriptContext = funcSym.ctx;
@@ -1427,11 +1454,7 @@ void LC::c_procret() {
return;
}
- debugC(5, kDebugLingoExec, "Popping frame %d", g_lingo->_callstack.size());
-
CFrame *fp = g_lingo->_callstack.back();
- g_lingo->_callstack.pop_back();
-
if (g_lingo->_currentMeObj && g_lingo->_currentMeObj->type == kFactoryObj && fp->sp.name->equalsIgnoreCase("mNew")) {
// Return the newly created object after executing mNew
Datum d;
@@ -1440,22 +1463,7 @@ void LC::c_procret() {
g_lingo->push(d);
}
- g_lingo->_currentScript = fp->retscript;
- g_lingo->_currentScriptContext = fp->retctx;
- g_lingo->_archiveIndex = fp->retarchive;
- g_lingo->_pc = fp->retpc;
- g_lingo->_currentMeObj = fp->retMeObj;
-
- if (debugChannelSet(5, kDebugLingoExec)) {
- g_lingo->printCallStack(g_lingo->_pc);
- }
-
- g_lingo->cleanLocalVars();
-
- // Restore local variables
- g_lingo->_localvars = fp->localvars;
-
- delete fp;
+ g_lingo->popContext();
if (g_lingo->_callstack.size() == 0) {
debugC(5, kDebugLingoExec, "Call stack empty, returning");
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 841e266ce7..a9c86f454d 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -364,7 +364,7 @@ public:
public:
void execute(uint pc);
- void pushContext();
+ void pushContext(const Symbol *funcSym = nullptr);
void popContext();
void cleanLocalVars();
Symbol define(Common::String &s, int nargs, ScriptData *code, Common::Array<Common::String> *argNames = nullptr, Common::Array<Common::String> *varNames = nullptr, Object *obj = nullptr);
Commit: 7549b819bb23ce0a021c6fdad06ecd31a0fe556f
https://github.com/scummvm/scummvm/commit/7549b819bb23ce0a021c6fdad06ecd31a0fe556f
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Implement primary event handlers
Changed paths:
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo-events.cpp
engines/director/lingo/lingo-the.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 089fdf664b..193c7a665a 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1224,6 +1224,8 @@ void LC::c_whencode() {
// the following when events are supported by D3
if (eventname.equalsIgnoreCase("keyDown")) {
g_lingo->setTheEntity(kTheKeyDownScript, nullId, kTheNOField, code);
+ } else if (eventname.equalsIgnoreCase("keyUp")) {
+ g_lingo->setTheEntity(kTheKeyUpScript, nullId, kTheNOField, code);
} else if (eventname.equalsIgnoreCase("mouseDown")) {
g_lingo->setTheEntity(kTheMouseDownScript, nullId, kTheNOField, code);
} else if (eventname.equalsIgnoreCase("mouseUp")) {
diff --git a/engines/director/lingo/lingo-events.cpp b/engines/director/lingo/lingo-events.cpp
index 6f30e6327c..c30580a486 100644
--- a/engines/director/lingo/lingo-events.cpp
+++ b/engines/director/lingo/lingo-events.cpp
@@ -98,6 +98,15 @@ int Lingo::getEventCount() {
return _eventQueue.size();
}
+void Lingo::setPrimaryEventHandler(LEvent event, const Common::String &code) {
+ debugC(3, kDebugLingoExec, "setting primary event handler (%s)", _eventHandlerTypes[event]);
+ _archives[_archiveIndex].primaryEventHandlers[event] = code;
+ pushContext();
+ g_lingo->_localvars = new SymbolHash;
+ addCode(code.c_str(), kGlobalScript, event);
+ popContext();
+}
+
void Lingo::primaryEventHandler(LEvent event) {
/* When an event occurs the message [...] is first sent to a
* primary event handler: [... if exists it is executed] and the
@@ -105,14 +114,14 @@ void Lingo::primaryEventHandler(LEvent event) {
* the message by including the dontPassEventCommand in the script
* [D4 docs page 77]
*/
- debugC(3, kDebugLingoExec, "STUB: primary event handler (%s) not implemented", _eventHandlerTypes[event]);
+ debugC(3, kDebugLingoExec, "calling primary event handler (%s)", _eventHandlerTypes[event]);
switch (event) {
case kEventMouseDown:
case kEventMouseUp:
case kEventKeyUp:
case kEventKeyDown:
case kEventTimeout:
- // TODO
+ executeScript(kGlobalScript, event, 0);
break;
default:
/* N.B.: No primary event handlers for events other than
@@ -122,13 +131,6 @@ void Lingo::primaryEventHandler(LEvent event) {
*/
warning("primaryEventHandler() on event other than mouseDown, mouseUp, keyUp, keyDown, timeout");
}
-#ifdef DEBUG_DONTPASSEVENT
- // #define DEBUG_DONTPASSEVENT to simulate raising of the dontPassEvent flag
- _dontPassEvent = true;
- debugC(3, kDebugLingoExec, "STUB: primaryEventHandler raising dontPassEvent");
-#else
- debugC(3, kDebugLingoExec, "STUB: primaryEventHandler not raising dontPassEvent");
-#endif
}
void Lingo::registerInputEvent(LEvent event) {
@@ -183,10 +185,6 @@ void Lingo::registerInputEvent(LEvent event) {
_eventQueue.push(LingoEvent(event, kSpriteScript, sprite->_castId + score->_castIDoffset));
}
}
- if (event == kEventKeyDown) {
- // TODO: is the above condition necessary or useful?
- _eventQueue.push(LingoEvent(event, kGlobalScript, 0));
- }
runMovieScript(event);
}
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 123d955666..806f926bc8 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -373,6 +373,20 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
d.type = INT;
d.u.i = _vm->_keyCode;
break;
+ case kTheKeyDownScript:
+ d.type = STRING;
+ if (_archives[_archiveIndex].primaryEventHandlers.contains(kEventKeyDown))
+ d.u.s = new Common::String(_archives[_archiveIndex].primaryEventHandlers[kEventKeyDown]);
+ else
+ d.u.s = new Common::String();
+ break;
+ case kTheKeyUpScript:
+ d.type = STRING;
+ if (_archives[_archiveIndex].primaryEventHandlers.contains(kEventKeyUp))
+ d.u.s = new Common::String(_archives[_archiveIndex].primaryEventHandlers[kEventKeyUp]);
+ else
+ d.u.s = new Common::String();
+ break;
case kTheLastClick:
d.type = INT;
d.u.i = _vm->getMacTicks() - _vm->getCurrentScore()->_lastClickTime;
@@ -455,6 +469,13 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
d.type = INT;
d.u.i = g_system->getEventManager()->getButtonState() & (1 << Common::MOUSE_BUTTON_LEFT | 1 << Common::MOUSE_BUTTON_RIGHT) ? 1 : 0;
break;
+ case kTheMouseDownScript:
+ d.type = STRING;
+ if (_archives[_archiveIndex].primaryEventHandlers.contains(kEventMouseDown))
+ d.u.s = new Common::String(_archives[_archiveIndex].primaryEventHandlers[kEventMouseDown]);
+ else
+ d.u.s = new Common::String();
+ break;
case kTheMouseH:
d.type = INT;
d.u.i = g_system->getEventManager()->getMousePos().x;
@@ -467,6 +488,13 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
d.type = INT;
d.u.i = g_system->getEventManager()->getButtonState() & (1 << Common::MOUSE_BUTTON_LEFT | 1 << Common::MOUSE_BUTTON_RIGHT) ? 0 : 1;
break;
+ case kTheMouseUpScript:
+ d.type = STRING;
+ if (_archives[_archiveIndex].primaryEventHandlers.contains(kEventMouseUp))
+ d.u.s = new Common::String(_archives[_archiveIndex].primaryEventHandlers[kEventMouseUp]);
+ else
+ d.u.s = new Common::String();
+ break;
case kThePerFrameHook:
d = _perFrameHook;
break;
@@ -524,6 +552,13 @@ Datum Lingo::getTheEntity(int entity, Datum &id, int field) {
d.type = INT;
d.u.i = _vm->getMacTicks() - _vm->getCurrentScore()->_lastTimerReset;
break;
+ case kTheTimeoutScript:
+ d.type = STRING;
+ if (_archives[_archiveIndex].primaryEventHandlers.contains(kEventTimeout))
+ d.u.s = new Common::String(_archives[_archiveIndex].primaryEventHandlers[kEventTimeout]);
+ else
+ d.u.s = new Common::String();
+ break;
default:
warning("Lingo::getTheEntity(): Unprocessed getting field \"%s\" of entity %s", field2str(field), entity2str(entity));
break;
@@ -552,6 +587,18 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
_floatPrecision = MAX(0, MIN(_floatPrecision, 19)); // 0 to 19
_floatPrecisionFormat = Common::String::format("%%.%df", _floatPrecision);
break;
+ case kTheKeyDownScript:
+ setPrimaryEventHandler(kEventKeyDown, d.asString());
+ break;
+ case kTheKeyUpScript:
+ setPrimaryEventHandler(kEventKeyUp, d.asString());
+ break;
+ case kTheMouseDownScript:
+ setPrimaryEventHandler(kEventMouseDown, d.asString());
+ break;
+ case kTheMouseUpScript:
+ setPrimaryEventHandler(kEventMouseUp, d.asString());
+ break;
case kThePerFrameHook:
_perFrameHook = d;
break;
@@ -575,6 +622,9 @@ void Lingo::setTheEntity(int entity, Datum &id, int field, Datum &d) {
case kTheSprite:
setTheSprite(id, field, d);
break;
+ case kTheTimeoutScript:
+ setPrimaryEventHandler(kEventTimeout, d.asString());
+ break;
default:
warning("Lingo::setTheEntity(): Unprocessed setting field \"%s\" of entity %s", field2str(field), entity2str(entity));
}
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index a9c86f454d..a4057f9e50 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -299,6 +299,7 @@ struct LingoArchive {
ScriptContextHash scriptContexts[kMaxScriptType + 1];
Common::Array<Common::String> names;
Common::HashMap<uint32, Symbol> eventHandlers;
+ Common::HashMap<uint32, Common::String> primaryEventHandlers;
SymbolHash functionHandlers;
};
@@ -341,6 +342,7 @@ private:
// lingo-events.cpp
private:
void initEventHandlerTypes();
+ void setPrimaryEventHandler(LEvent event, Common::String &code);
void primaryEventHandler(LEvent event);
void registerInputEvent(LEvent event);
void registerFrameEvent(LEvent event);
Commit: 759c53c8684ad07e1d5620db99c8fba477045b06
https://github.com/scummvm/scummvm/commit/759c53c8684ad07e1d5620db99c8fba477045b06
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Call perFrameHook with arguments
Changed paths:
engines/director/lingo/lingo.cpp
engines/director/lingo/lingo.h
engines/director/score.cpp
engines/director/transitions.cpp
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index f2d5f3ba97..4fe1106f97 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -831,18 +831,15 @@ void Lingo::executeImmediateScripts(Frame *frame) {
}
}
-void Lingo::executePerFrameHook() {
- // TODO: Call with arguments
+void Lingo::executePerFrameHook(int frame, int subframe) {
if (_perFrameHook.type == OBJECT) {
Symbol method = _perFrameHook.u.obj->getMethod("mAtFrame");
if (method.type != VOID) {
- _localvars = new SymbolHash;
-
- debugC(1, kDebugLingoExec, "Executing mAtFrame on perFrameHook : %s", _perFrameHook.u.obj->name->c_str());
- LC::call(method, 0, _perFrameHook.u.obj);
+ debugC(1, kDebugLingoExec, "Executing perFrameHook : <%s>(mAtFrame, %d, %d)", _perFrameHook.asString(true).c_str(), frame, subframe);
+ push(Datum(frame));
+ push(Datum(subframe));
+ LC::call(method, 2, _perFrameHook.u.obj);
execute(_pc);
-
- cleanLocalVars();
}
}
}
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index a4057f9e50..ce37fb7f89 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -551,7 +551,7 @@ public:
public:
void executeImmediateScripts(Frame *frame);
- void executePerFrameHook();
+ void executePerFrameHook(int frame, int subframe);
};
extern Lingo *g_lingo;
diff --git a/engines/director/score.cpp b/engines/director/score.cpp
index 4b61f25f78..197b91c521 100644
--- a/engines/director/score.cpp
+++ b/engines/director/score.cpp
@@ -380,6 +380,14 @@ void Score::update() {
// For previous frame
if (_currentFrame > 0) {
+ // TODO: Confirm when the perFrameHook is called if
+ // there's no transition.
+ // If there is a transition, the perFrameHook is called
+ // after each transition subframe instead.
+ if (_frames[_currentFrame]->_transType == 0) {
+ _lingo->executePerFrameHook(_currentFrame, 0);
+ }
+
// When Lingo::func_goto* is called, _nextFrame is set
// and _skipFrameAdvance is set to true.
// However, the exitFrame event can overwrite the value
@@ -430,7 +438,6 @@ void Score::update() {
// _surface->copyFrom(*_trailSurface);
_lingo->executeImmediateScripts(_frames[_currentFrame]);
- _lingo->executePerFrameHook();
if (_vm->getVersion() >= 6) {
_lingo->processEvent(kEventBeginSprite);
@@ -518,9 +525,10 @@ void Score::renderFrame(uint16 frameId, bool forceUpdate, bool updateStageOnly)
_vm->_wm->draw();
- if (currentFrame->_transType != 0)
+ if (currentFrame->_transType != 0) {
// TODO Handle changing area case
playTransition(currentFrame->_transDuration, currentFrame->_transArea, currentFrame->_transChunkSize, currentFrame->_transType);
+ }
if (currentFrame->_sound1 != 0 || currentFrame->_sound2 != 0) {
playSoundChannel(frameId);
diff --git a/engines/director/transitions.cpp b/engines/director/transitions.cpp
index b90163219a..0d5906e334 100644
--- a/engines/director/transitions.cpp
+++ b/engines/director/transitions.cpp
@@ -30,6 +30,7 @@
#include "director/frame.h"
#include "director/score.h"
#include "director/util.h"
+#include "director/lingo/lingo.h"
namespace Director {
@@ -131,6 +132,8 @@ struct {
};
void Score::playTransition(uint16 transDuration, uint8 transArea, uint8 transChunkSize, TransitionType transType) {
+ // Play a transition and return the number of subframes rendered
+
TransParams t;
t.type = transType;
@@ -437,6 +440,8 @@ void Score::playTransition(uint16 transDuration, uint8 transArea, uint8 transChu
}
g_system->updateScreen();
+
+ g_lingo->executePerFrameHook(_currentFrame, i);
}
}
@@ -568,7 +573,7 @@ void Score::dissolveTrans(TransParams &t, Common::Rect &clipRect) {
Common::Rect r(MAX(1, t.xStepSize), t.yStepSize);
- while (t.steps) {
+ for (int i = 0; i < t.steps; i++) {
uint32 pixPerStep = pixPerStepInit;
do {
uint32 x = rnd >> vShift;
@@ -611,12 +616,12 @@ void Score::dissolveTrans(TransParams &t, Common::Rect &clipRect) {
g_system->copyRectToScreen(_backSurface->getPixels(), _backSurface->pitch, 0, 0, realw, realh);
g_system->updateScreen();
+ g_lingo->executePerFrameHook(_currentFrame, i + 1);
+
if (processQuitEvent(true))
break;
g_system->delayMillis(t.stepDuration);
-
- t.steps--;
}
}
@@ -719,6 +724,8 @@ void Score::dissolvePatternsTrans(TransParams &t, Common::Rect &clipRect) {
g_system->copyRectToScreen(_backSurface->getPixels(), _backSurface->pitch, 0, 0, w, h);
g_system->updateScreen();
+ g_lingo->executePerFrameHook(_currentFrame, i + 1);
+
if (processQuitEvent(true))
break;
@@ -889,6 +896,8 @@ void Score::transMultiPass(TransParams &t, Common::Rect &clipRect) {
g_system->updateScreen();
+ g_lingo->executePerFrameHook(_currentFrame, i);
+
g_system->delayMillis(t.stepDuration);
if (processQuitEvent(true))
break;
@@ -935,6 +944,8 @@ void Score::transZoom(TransParams &t, Common::Rect &clipRect) {
g_system->copyRectToScreen(_backSurface->getPixels(), _backSurface->pitch, 0, 0, w, h);
g_system->updateScreen();
+ g_lingo->executePerFrameHook(_currentFrame, i);
+
g_system->delayMillis(t.stepDuration);
if (processQuitEvent(true))
break;
Commit: be4c440128e85b84f04e515627e9ccd8e2c9ab7c
https://github.com/scummvm/scummvm/commit/be4c440128e85b84f04e515627e9ccd8e2c9ab7c
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Remove legacy me code
Changed paths:
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo-codegen.cpp
engines/director/lingo/lingo-gr.cpp
engines/director/lingo/lingo-gr.h
engines/director/lingo/lingo-gr.y
engines/director/lingo/lingo-lex.cpp
engines/director/lingo/lingo-lex.l
engines/director/lingo/lingo.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index f5e8c7c544..1196b6e4dd 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -244,7 +244,6 @@ static struct BuiltinProto {
// References
{ "cast", LB::b_cast, 1, 1, false, 4, RBLTIN }, // D4 f
{ "field", LB::b_field, 1, 1, false, 3, RBLTIN }, // D3 f
-// { "me", LB::b_me, -1,0, false, 3, FBLTIN }, // D3 // works as normal ID, see c_varpush
{ "script", LB::b_script, 1, 1, false, 4, RBLTIN }, // D4 f
{ "window", LB::b_window, 1, 1, false, 4, RBLTIN }, // D4 f
// Chunk operations
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index b0dd6c01a5..7ff1767c4a 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -381,31 +381,6 @@ int Lingo::codeFunc(Common::String *s, int numpar) {
return ret;
}
-// int Lingo::codeMe(Common::String *method, int numpar) {
-// // Check if need to encode reference to the factory
-// if (method == nullptr) {
-// int ret = g_lingo->code1(LC::c_factory);
-// g_lingo->codeString(g_lingo->_currentFactory->name->c_str());
-
-// return ret;
-// }
-
-// int ret = g_lingo->code1(LC::c_call);
-
-// Common::String m(g_lingo->_currentFactory->name);
-
-// m += '-';
-// m += *method;
-
-// g_lingo->codeString(m.c_str());
-
-// inst num = 0;
-// WRITE_UINT32(&num, numpar);
-// g_lingo->code1(num);
-
-// return ret;
-// }
-
void Lingo::codeLabel(int label) {
_labelstack.push_back(label);
debugC(4, kDebugLingoCompile, "codeLabel: Added label %d", label);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 68d12e5628..88bd048f70 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -120,7 +120,6 @@ static void startDef() {
static void endDef() {
g_lingo->clearArgStack();
inNone();
- g_lingo->_ignoreMe = false;
delete g_lingo->_methodVars;
g_lingo->_methodVars = g_lingo->_methodVarsStash;
@@ -151,7 +150,7 @@ static void mVar(Common::String *s, VarType type) {
}
-#line 155 "engines/director/lingo/lingo-gr.cpp"
+#line 154 "engines/director/lingo/lingo-gr.cpp"
# ifndef YY_CAST
# ifdef __cplusplus
@@ -288,7 +287,7 @@ extern int yydebug;
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
-#line 138 "engines/director/lingo/lingo-gr.y"
+#line 137 "engines/director/lingo/lingo-gr.y"
Common::String *s;
int i;
@@ -308,7 +307,7 @@ union YYSTYPE
Common::String *field;
} objectref;
-#line 312 "engines/director/lingo/lingo-gr.cpp"
+#line 311 "engines/director/lingo/lingo-gr.cpp"
};
typedef union YYSTYPE YYSTYPE;
@@ -862,24 +861,24 @@ static const yytype_int8 yytranslate[] =
/* YYRLINEYYN -- Source line where rule number YYN was defined. */
static const yytype_int16 yyrline[] =
{
- 0, 197, 197, 198, 200, 201, 202, 204, 211, 215,
- 226, 227, 228, 235, 242, 249, 256, 262, 269, 280,
- 287, 288, 289, 291, 292, 297, 309, 313, 316, 308,
- 340, 344, 347, 339, 373, 380, 386, 372, 414, 416,
- 419, 420, 422, 424, 431, 439, 440, 442, 448, 452,
- 456, 460, 463, 465, 466, 467, 469, 472, 475, 479,
- 483, 487, 495, 501, 502, 503, 514, 515, 516, 519,
- 522, 528, 528, 533, 536, 539, 544, 550, 551, 552,
- 553, 554, 555, 556, 557, 558, 559, 560, 561, 562,
- 563, 564, 565, 566, 567, 568, 569, 570, 571, 572,
- 574, 575, 576, 577, 578, 579, 580, 581, 583, 586,
- 588, 589, 590, 591, 592, 593, 593, 594, 594, 595,
- 595, 596, 599, 602, 603, 605, 610, 616, 621, 627,
- 630, 641, 642, 643, 644, 648, 652, 657, 658, 660,
- 664, 668, 672, 672, 702, 702, 702, 708, 709, 709,
- 715, 723, 729, 729, 732, 733, 734, 736, 737, 738,
- 740, 742, 750, 751, 752, 754, 755, 757, 759, 760,
- 761, 762, 764, 765, 767, 768, 770, 774
+ 0, 196, 196, 197, 199, 200, 201, 203, 210, 214,
+ 225, 226, 227, 234, 241, 248, 255, 261, 268, 279,
+ 286, 287, 288, 290, 291, 296, 308, 312, 315, 307,
+ 339, 343, 346, 338, 372, 379, 385, 371, 413, 415,
+ 418, 419, 421, 423, 430, 438, 439, 441, 447, 451,
+ 455, 459, 462, 464, 465, 466, 468, 471, 474, 478,
+ 482, 486, 494, 500, 501, 502, 513, 514, 515, 518,
+ 521, 527, 527, 532, 535, 538, 543, 549, 550, 551,
+ 552, 553, 554, 555, 556, 557, 558, 559, 560, 561,
+ 562, 563, 564, 565, 566, 567, 568, 569, 570, 571,
+ 573, 574, 575, 576, 577, 578, 579, 580, 582, 585,
+ 587, 588, 589, 590, 591, 592, 592, 593, 593, 594,
+ 594, 595, 598, 601, 602, 604, 609, 615, 620, 626,
+ 629, 640, 641, 642, 643, 647, 651, 656, 657, 659,
+ 663, 667, 671, 671, 701, 701, 701, 707, 708, 708,
+ 714, 722, 728, 728, 731, 732, 733, 735, 736, 737,
+ 739, 741, 749, 750, 751, 753, 754, 756, 758, 759,
+ 760, 761, 763, 764, 766, 767, 769, 773
};
#endif
@@ -1950,81 +1949,81 @@ yydestruct (const char *yymsg,
switch (yykind)
{
case 22: /* BLTIN */
-#line 192 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1956 "engines/director/lingo/lingo-gr.cpp"
+#line 1955 "engines/director/lingo/lingo-gr.cpp"
break;
case 23: /* FBLTIN */
-#line 192 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1962 "engines/director/lingo/lingo-gr.cpp"
+#line 1961 "engines/director/lingo/lingo-gr.cpp"
break;
case 24: /* RBLTIN */
-#line 192 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1968 "engines/director/lingo/lingo-gr.cpp"
+#line 1967 "engines/director/lingo/lingo-gr.cpp"
break;
case 25: /* THEFBLTIN */
-#line 192 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1974 "engines/director/lingo/lingo-gr.cpp"
+#line 1973 "engines/director/lingo/lingo-gr.cpp"
break;
case 26: /* ID */
-#line 192 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1980 "engines/director/lingo/lingo-gr.cpp"
+#line 1979 "engines/director/lingo/lingo-gr.cpp"
break;
case 27: /* STRING */
-#line 192 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1986 "engines/director/lingo/lingo-gr.cpp"
+#line 1985 "engines/director/lingo/lingo-gr.cpp"
break;
case 28: /* HANDLER */
-#line 192 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1992 "engines/director/lingo/lingo-gr.cpp"
+#line 1991 "engines/director/lingo/lingo-gr.cpp"
break;
case 29: /* SYMBOL */
-#line 192 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1998 "engines/director/lingo/lingo-gr.cpp"
+#line 1997 "engines/director/lingo/lingo-gr.cpp"
break;
case 30: /* ENDCLAUSE */
-#line 192 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2004 "engines/director/lingo/lingo-gr.cpp"
+#line 2003 "engines/director/lingo/lingo-gr.cpp"
break;
case 31: /* tPLAYACCEL */
-#line 192 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2010 "engines/director/lingo/lingo-gr.cpp"
+#line 2009 "engines/director/lingo/lingo-gr.cpp"
break;
case 32: /* tMETHOD */
-#line 192 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2016 "engines/director/lingo/lingo-gr.cpp"
+#line 2015 "engines/director/lingo/lingo-gr.cpp"
break;
case 33: /* THEOBJECTFIELD */
-#line 193 "engines/director/lingo/lingo-gr.y"
+#line 192 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).objectfield).os; }
-#line 2022 "engines/director/lingo/lingo-gr.cpp"
+#line 2021 "engines/director/lingo/lingo-gr.cpp"
break;
case 148: /* on */
-#line 192 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2028 "engines/director/lingo/lingo-gr.cpp"
+#line 2027 "engines/director/lingo/lingo-gr.cpp"
break;
default:
@@ -2303,7 +2302,7 @@ yyreduce:
switch (yyn)
{
case 7:
-#line 204 "engines/director/lingo/lingo-gr.y"
+#line 203 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
@@ -2311,19 +2310,19 @@ yyreduce:
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[-2].code);
delete (yyvsp[0].s); }
-#line 2315 "engines/director/lingo/lingo-gr.cpp"
+#line 2314 "engines/director/lingo/lingo-gr.cpp"
break;
case 8:
-#line 211 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[-2].code); }
-#line 2323 "engines/director/lingo/lingo-gr.cpp"
+#line 2322 "engines/director/lingo/lingo-gr.cpp"
break;
case 9:
-#line 215 "engines/director/lingo/lingo-gr.y"
+#line 214 "engines/director/lingo/lingo-gr.y"
{
if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
warning("LEXER: keyword 'menu' expected");
@@ -2335,23 +2334,23 @@ yyreduce:
g_lingo->codeInt((yyvsp[-4].e)[1]);
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code); }
-#line 2339 "engines/director/lingo/lingo-gr.cpp"
+#line 2338 "engines/director/lingo/lingo-gr.cpp"
break;
case 10:
-#line 226 "engines/director/lingo/lingo-gr.y"
+#line 225 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_after); }
-#line 2345 "engines/director/lingo/lingo-gr.cpp"
+#line 2344 "engines/director/lingo/lingo-gr.cpp"
break;
case 11:
-#line 227 "engines/director/lingo/lingo-gr.y"
+#line 226 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_before); }
-#line 2351 "engines/director/lingo/lingo-gr.cpp"
+#line 2350 "engines/director/lingo/lingo-gr.cpp"
break;
case 12:
-#line 228 "engines/director/lingo/lingo-gr.y"
+#line 227 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
@@ -2359,11 +2358,11 @@ yyreduce:
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code);
delete (yyvsp[-2].s); }
-#line 2363 "engines/director/lingo/lingo-gr.cpp"
+#line 2362 "engines/director/lingo/lingo-gr.cpp"
break;
case 13:
-#line 235 "engines/director/lingo/lingo-gr.y"
+#line 234 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2371,11 +2370,11 @@ yyreduce:
g_lingo->codeInt((yyvsp[-2].e)[0]);
g_lingo->codeInt((yyvsp[-2].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2375 "engines/director/lingo/lingo-gr.cpp"
+#line 2374 "engines/director/lingo/lingo-gr.cpp"
break;
case 14:
-#line 242 "engines/director/lingo/lingo-gr.y"
+#line 241 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
@@ -2383,11 +2382,11 @@ yyreduce:
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code);
delete (yyvsp[-2].s); }
-#line 2387 "engines/director/lingo/lingo-gr.cpp"
+#line 2386 "engines/director/lingo/lingo-gr.cpp"
break;
case 15:
-#line 249 "engines/director/lingo/lingo-gr.y"
+#line 248 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2395,33 +2394,33 @@ yyreduce:
g_lingo->codeInt((yyvsp[-2].e)[0]);
g_lingo->codeInt((yyvsp[-2].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2399 "engines/director/lingo/lingo-gr.cpp"
+#line 2398 "engines/director/lingo/lingo-gr.cpp"
break;
case 16:
-#line 256 "engines/director/lingo/lingo-gr.y"
+#line 255 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_swap);
g_lingo->code1(LC::c_theentityassign);
g_lingo->codeInt((yyvsp[-3].e)[0]);
g_lingo->codeInt((yyvsp[-3].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2410 "engines/director/lingo/lingo-gr.cpp"
+#line 2409 "engines/director/lingo/lingo-gr.cpp"
break;
case 17:
-#line 262 "engines/director/lingo/lingo-gr.y"
+#line 261 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_swap);
g_lingo->code1(LC::c_theentityassign);
g_lingo->codeInt((yyvsp[-3].e)[0]);
g_lingo->codeInt((yyvsp[-3].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2421 "engines/director/lingo/lingo-gr.cpp"
+#line 2420 "engines/director/lingo/lingo-gr.cpp"
break;
case 18:
-#line 269 "engines/director/lingo/lingo-gr.y"
+#line 268 "engines/director/lingo/lingo-gr.y"
{
if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
warning("LEXER: keyword 'menu' expected");
@@ -2433,54 +2432,54 @@ yyreduce:
g_lingo->codeInt((yyvsp[-6].e)[0]);
g_lingo->codeInt((yyvsp[-6].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2437 "engines/director/lingo/lingo-gr.cpp"
+#line 2436 "engines/director/lingo/lingo-gr.cpp"
break;
case 19:
-#line 280 "engines/director/lingo/lingo-gr.y"
+#line 279 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectfieldassign);
g_lingo->codeString((yyvsp[-2].objectfield).os->c_str());
g_lingo->codeInt((yyvsp[-2].objectfield).oe);
delete (yyvsp[-2].objectfield).os;
(yyval.code) = (yyvsp[0].code); }
-#line 2448 "engines/director/lingo/lingo-gr.cpp"
+#line 2447 "engines/director/lingo/lingo-gr.cpp"
break;
case 25:
-#line 297 "engines/director/lingo/lingo-gr.y"
+#line 296 "engines/director/lingo/lingo-gr.y"
{
inst start = 0, end = 0;
WRITE_UINT32(&start, (yyvsp[-5].code) - (yyvsp[-1].code) + 1);
WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-3].code) + 2);
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = end; /* end, if cond fails */
(*g_lingo->_currentScript)[(yyvsp[-1].code)] = start; }
-#line 2459 "engines/director/lingo/lingo-gr.cpp"
+#line 2458 "engines/director/lingo/lingo-gr.cpp"
break;
case 26:
-#line 309 "engines/director/lingo/lingo-gr.y"
+#line 308 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
mVar((yyvsp[-2].s), globalCheck()); }
-#line 2467 "engines/director/lingo/lingo-gr.cpp"
+#line 2466 "engines/director/lingo/lingo-gr.cpp"
break;
case 27:
-#line 313 "engines/director/lingo/lingo-gr.y"
+#line 312 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2474 "engines/director/lingo/lingo-gr.cpp"
+#line 2473 "engines/director/lingo/lingo-gr.cpp"
break;
case 28:
-#line 316 "engines/director/lingo/lingo-gr.y"
+#line 315 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_le); }
-#line 2480 "engines/director/lingo/lingo-gr.cpp"
+#line 2479 "engines/director/lingo/lingo-gr.cpp"
break;
case 29:
-#line 316 "engines/director/lingo/lingo-gr.y"
+#line 315 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_eval);
@@ -2499,32 +2498,32 @@ yyreduce:
WRITE_UINT32(&end, pos - (yyvsp[-2].code) + 2);
(*g_lingo->_currentScript)[pos] = loop; /* final count value */
(*g_lingo->_currentScript)[(yyvsp[-2].code)] = end; }
-#line 2503 "engines/director/lingo/lingo-gr.cpp"
+#line 2502 "engines/director/lingo/lingo-gr.cpp"
break;
case 30:
-#line 340 "engines/director/lingo/lingo-gr.y"
+#line 339 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
mVar((yyvsp[-2].s), globalCheck()); }
-#line 2511 "engines/director/lingo/lingo-gr.cpp"
+#line 2510 "engines/director/lingo/lingo-gr.cpp"
break;
case 31:
-#line 344 "engines/director/lingo/lingo-gr.y"
+#line 343 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2518 "engines/director/lingo/lingo-gr.cpp"
+#line 2517 "engines/director/lingo/lingo-gr.cpp"
break;
case 32:
-#line 347 "engines/director/lingo/lingo-gr.y"
+#line 346 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ge); }
-#line 2524 "engines/director/lingo/lingo-gr.cpp"
+#line 2523 "engines/director/lingo/lingo-gr.cpp"
break;
case 33:
-#line 348 "engines/director/lingo/lingo-gr.y"
+#line 347 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_eval);
@@ -2543,32 +2542,32 @@ yyreduce:
WRITE_UINT32(&end, pos - (yyvsp[-2].code) + 2);
(*g_lingo->_currentScript)[pos] = loop; /* final count value */
(*g_lingo->_currentScript)[(yyvsp[-2].code)] = end; }
-#line 2547 "engines/director/lingo/lingo-gr.cpp"
+#line 2546 "engines/director/lingo/lingo-gr.cpp"
break;
case 34:
-#line 373 "engines/director/lingo/lingo-gr.y"
+#line 372 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_stackpeek);
g_lingo->codeInt(0);
Common::String count("count");
g_lingo->codeFunc(&count, 1);
g_lingo->code1(LC::c_intpush); // start counter
g_lingo->codeInt(1); }
-#line 2558 "engines/director/lingo/lingo-gr.cpp"
+#line 2557 "engines/director/lingo/lingo-gr.cpp"
break;
case 35:
-#line 380 "engines/director/lingo/lingo-gr.y"
+#line 379 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_stackpeek); // get counter
g_lingo->codeInt(0);
g_lingo->code1(LC::c_stackpeek); // get array size
g_lingo->codeInt(2);
g_lingo->code1(LC::c_le); }
-#line 2568 "engines/director/lingo/lingo-gr.cpp"
+#line 2567 "engines/director/lingo/lingo-gr.cpp"
break;
case 36:
-#line 386 "engines/director/lingo/lingo-gr.y"
+#line 385 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_stackpeek); // get list
g_lingo->codeInt(2);
g_lingo->code1(LC::c_stackpeek); // get counter
@@ -2579,11 +2578,11 @@ yyreduce:
g_lingo->codeString((yyvsp[-6].s)->c_str());
mVar((yyvsp[-6].s), globalCheck());
g_lingo->code1(LC::c_assign); }
-#line 2583 "engines/director/lingo/lingo-gr.cpp"
+#line 2582 "engines/director/lingo/lingo-gr.cpp"
break;
case 37:
-#line 396 "engines/director/lingo/lingo-gr.y"
+#line 395 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
@@ -2601,44 +2600,44 @@ yyreduce:
(*g_lingo->_currentScript)[jump + 1] = loop; /* final count value */
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = end; }
-#line 2605 "engines/director/lingo/lingo-gr.cpp"
+#line 2604 "engines/director/lingo/lingo-gr.cpp"
break;
case 38:
-#line 414 "engines/director/lingo/lingo-gr.y"
+#line 413 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_nextRepeat); }
-#line 2612 "engines/director/lingo/lingo-gr.cpp"
+#line 2611 "engines/director/lingo/lingo-gr.cpp"
break;
case 39:
-#line 416 "engines/director/lingo/lingo-gr.y"
+#line 415 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_whencode);
g_lingo->codeString((yyvsp[-2].s)->c_str()); }
-#line 2620 "engines/director/lingo/lingo-gr.cpp"
+#line 2619 "engines/director/lingo/lingo-gr.cpp"
break;
case 40:
-#line 419 "engines/director/lingo/lingo-gr.y"
+#line 418 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_telldone); }
-#line 2626 "engines/director/lingo/lingo-gr.cpp"
+#line 2625 "engines/director/lingo/lingo-gr.cpp"
break;
case 41:
-#line 420 "engines/director/lingo/lingo-gr.y"
+#line 419 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_telldone); }
-#line 2632 "engines/director/lingo/lingo-gr.cpp"
+#line 2631 "engines/director/lingo/lingo-gr.cpp"
break;
case 42:
-#line 422 "engines/director/lingo/lingo-gr.y"
+#line 421 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_tell); }
-#line 2638 "engines/director/lingo/lingo-gr.cpp"
+#line 2637 "engines/director/lingo/lingo-gr.cpp"
break;
case 43:
-#line 424 "engines/director/lingo/lingo-gr.y"
+#line 423 "engines/director/lingo/lingo-gr.y"
{
inst else1 = 0, end3 = 0;
WRITE_UINT32(&else1, (yyvsp[-3].code) + 1 - (yyvsp[-6].code) + 1);
@@ -2646,11 +2645,11 @@ yyreduce:
(*g_lingo->_currentScript)[(yyvsp[-6].code)] = else1; /* elsepart */
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = end3; /* end, if cond fails */
g_lingo->processIf((yyvsp[-3].code), (yyvsp[-1].code)); }
-#line 2650 "engines/director/lingo/lingo-gr.cpp"
+#line 2649 "engines/director/lingo/lingo-gr.cpp"
break;
case 44:
-#line 431 "engines/director/lingo/lingo-gr.y"
+#line 430 "engines/director/lingo/lingo-gr.y"
{
inst else1 = 0, end = 0;
WRITE_UINT32(&else1, (yyvsp[-5].code) + 1 - (yyvsp[-8].code) + 1);
@@ -2658,107 +2657,107 @@ yyreduce:
(*g_lingo->_currentScript)[(yyvsp[-8].code)] = else1; /* elsepart */
(*g_lingo->_currentScript)[(yyvsp[-5].code)] = end; /* end, if cond fails */
g_lingo->processIf((yyvsp[-5].code), (yyvsp[-1].code)); }
-#line 2662 "engines/director/lingo/lingo-gr.cpp"
+#line 2661 "engines/director/lingo/lingo-gr.cpp"
break;
case 47:
-#line 442 "engines/director/lingo/lingo-gr.y"
+#line 441 "engines/director/lingo/lingo-gr.y"
{
inst else1 = 0;
WRITE_UINT32(&else1, (yyvsp[0].code) + 1 - (yyvsp[-3].code) + 1);
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = else1; /* end, if cond fails */
g_lingo->codeLabel((yyvsp[0].code)); }
-#line 2672 "engines/director/lingo/lingo-gr.cpp"
+#line 2671 "engines/director/lingo/lingo-gr.cpp"
break;
case 48:
-#line 448 "engines/director/lingo/lingo-gr.y"
+#line 447 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code2(LC::c_jumpifz, 0);
(yyval.code) = g_lingo->_currentScript->size() - 1; }
-#line 2680 "engines/director/lingo/lingo-gr.cpp"
+#line 2679 "engines/director/lingo/lingo-gr.cpp"
break;
case 49:
-#line 452 "engines/director/lingo/lingo-gr.y"
+#line 451 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code2(LC::c_jump, 0);
(yyval.code) = g_lingo->_currentScript->size() - 1; }
-#line 2688 "engines/director/lingo/lingo-gr.cpp"
+#line 2687 "engines/director/lingo/lingo-gr.cpp"
break;
case 50:
-#line 456 "engines/director/lingo/lingo-gr.y"
+#line 455 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_assign);
(yyval.code) = g_lingo->_currentScript->size() - 1; }
-#line 2696 "engines/director/lingo/lingo-gr.cpp"
+#line 2695 "engines/director/lingo/lingo-gr.cpp"
break;
case 51:
-#line 460 "engines/director/lingo/lingo-gr.y"
+#line 459 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeLabel(0); }
-#line 2703 "engines/director/lingo/lingo-gr.cpp"
+#line 2702 "engines/director/lingo/lingo-gr.cpp"
break;
case 52:
-#line 463 "engines/director/lingo/lingo-gr.y"
+#line 462 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2709 "engines/director/lingo/lingo-gr.cpp"
+#line 2708 "engines/director/lingo/lingo-gr.cpp"
break;
case 53:
-#line 465 "engines/director/lingo/lingo-gr.y"
+#line 464 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2715 "engines/director/lingo/lingo-gr.cpp"
+#line 2714 "engines/director/lingo/lingo-gr.cpp"
break;
case 56:
-#line 469 "engines/director/lingo/lingo-gr.y"
+#line 468 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_intpush);
g_lingo->codeInt((yyvsp[0].i)); }
-#line 2723 "engines/director/lingo/lingo-gr.cpp"
+#line 2722 "engines/director/lingo/lingo-gr.cpp"
break;
case 57:
-#line 472 "engines/director/lingo/lingo-gr.y"
+#line 471 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_floatpush);
g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2731 "engines/director/lingo/lingo-gr.cpp"
+#line 2730 "engines/director/lingo/lingo-gr.cpp"
break;
case 58:
-#line 475 "engines/director/lingo/lingo-gr.y"
+#line 474 "engines/director/lingo/lingo-gr.y"
{ // D3
(yyval.code) = g_lingo->code1(LC::c_symbolpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2740 "engines/director/lingo/lingo-gr.cpp"
+#line 2739 "engines/director/lingo/lingo-gr.cpp"
break;
case 59:
-#line 479 "engines/director/lingo/lingo-gr.y"
+#line 478 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_stringpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2749 "engines/director/lingo/lingo-gr.cpp"
+#line 2748 "engines/director/lingo/lingo-gr.cpp"
break;
case 60:
-#line 483 "engines/director/lingo/lingo-gr.y"
+#line 482 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2758 "engines/director/lingo/lingo-gr.cpp"
+#line 2757 "engines/director/lingo/lingo-gr.cpp"
break;
case 61:
-#line 487 "engines/director/lingo/lingo-gr.y"
+#line 486 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2767,28 +2766,28 @@ yyreduce:
WRITE_UINT32(&e, (yyvsp[0].e)[0]);
WRITE_UINT32(&f, (yyvsp[0].e)[1]);
g_lingo->code2(e, f); }
-#line 2771 "engines/director/lingo/lingo-gr.cpp"
+#line 2770 "engines/director/lingo/lingo-gr.cpp"
break;
case 62:
-#line 495 "engines/director/lingo/lingo-gr.y"
+#line 494 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_theentitypush);
inst e = 0, f = 0;
WRITE_UINT32(&e, (yyvsp[-1].e)[0]);
WRITE_UINT32(&f, (yyvsp[-1].e)[1]);
g_lingo->code2(e, f); }
-#line 2782 "engines/director/lingo/lingo-gr.cpp"
+#line 2781 "engines/director/lingo/lingo-gr.cpp"
break;
case 63:
-#line 501 "engines/director/lingo/lingo-gr.y"
+#line 500 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[-1].code); }
-#line 2788 "engines/director/lingo/lingo-gr.cpp"
+#line 2787 "engines/director/lingo/lingo-gr.cpp"
break;
case 65:
-#line 503 "engines/director/lingo/lingo-gr.y"
+#line 502 "engines/director/lingo/lingo-gr.y"
{
// Director parser till D3 was forgiving for any hanging parentheses
if (g_lingo->_ignoreError) {
@@ -2799,553 +2798,553 @@ yyreduce:
yyerrok;
}
}
-#line 2803 "engines/director/lingo/lingo-gr.cpp"
+#line 2802 "engines/director/lingo/lingo-gr.cpp"
break;
case 66:
-#line 514 "engines/director/lingo/lingo-gr.y"
+#line 513 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); }
-#line 2809 "engines/director/lingo/lingo-gr.cpp"
+#line 2808 "engines/director/lingo/lingo-gr.cpp"
break;
case 68:
-#line 516 "engines/director/lingo/lingo-gr.y"
+#line 515 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 2817 "engines/director/lingo/lingo-gr.cpp"
+#line 2816 "engines/director/lingo/lingo-gr.cpp"
break;
case 69:
-#line 519 "engines/director/lingo/lingo-gr.y"
+#line 518 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
delete (yyvsp[-1].s); }
-#line 2825 "engines/director/lingo/lingo-gr.cpp"
+#line 2824 "engines/director/lingo/lingo-gr.cpp"
break;
case 70:
-#line 522 "engines/director/lingo/lingo-gr.y"
+#line 521 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_lazyeval);
g_lingo->codeString((yyvsp[-1].s)->c_str());
g_lingo->codeFunc((yyvsp[-3].s), 1);
delete (yyvsp[-3].s);
delete (yyvsp[-1].s); }
-#line 2836 "engines/director/lingo/lingo-gr.cpp"
+#line 2835 "engines/director/lingo/lingo-gr.cpp"
break;
case 71:
-#line 528 "engines/director/lingo/lingo-gr.y"
+#line 527 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lazyeval); g_lingo->codeString((yyvsp[-1].s)->c_str()); }
-#line 2842 "engines/director/lingo/lingo-gr.cpp"
+#line 2841 "engines/director/lingo/lingo-gr.cpp"
break;
case 72:
-#line 529 "engines/director/lingo/lingo-gr.y"
+#line 528 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-6].s), (yyvsp[-1].narg) + 1);
delete (yyvsp[-6].s);
delete (yyvsp[-4].s); }
-#line 2851 "engines/director/lingo/lingo-gr.cpp"
+#line 2850 "engines/director/lingo/lingo-gr.cpp"
break;
case 73:
-#line 533 "engines/director/lingo/lingo-gr.y"
+#line 532 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 2859 "engines/director/lingo/lingo-gr.cpp"
+#line 2858 "engines/director/lingo/lingo-gr.cpp"
break;
case 74:
-#line 536 "engines/director/lingo/lingo-gr.y"
+#line 535 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->codeFunc((yyvsp[-2].s), 1);
delete (yyvsp[-2].s); }
-#line 2867 "engines/director/lingo/lingo-gr.cpp"
+#line 2866 "engines/director/lingo/lingo-gr.cpp"
break;
case 75:
-#line 539 "engines/director/lingo/lingo-gr.y"
+#line 538 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectfieldpush);
g_lingo->codeString((yyvsp[0].objectfield).os->c_str());
g_lingo->codeInt((yyvsp[0].objectfield).oe);
delete (yyvsp[0].objectfield).os; }
-#line 2877 "engines/director/lingo/lingo-gr.cpp"
+#line 2876 "engines/director/lingo/lingo-gr.cpp"
break;
case 76:
-#line 544 "engines/director/lingo/lingo-gr.y"
+#line 543 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectrefpush);
g_lingo->codeString((yyvsp[0].objectref).obj->c_str());
g_lingo->codeString((yyvsp[0].objectref).field->c_str());
delete (yyvsp[0].objectref).obj;
delete (yyvsp[0].objectref).field; }
-#line 2888 "engines/director/lingo/lingo-gr.cpp"
+#line 2887 "engines/director/lingo/lingo-gr.cpp"
break;
case 78:
-#line 551 "engines/director/lingo/lingo-gr.y"
+#line 550 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_add); }
-#line 2894 "engines/director/lingo/lingo-gr.cpp"
+#line 2893 "engines/director/lingo/lingo-gr.cpp"
break;
case 79:
-#line 552 "engines/director/lingo/lingo-gr.y"
+#line 551 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_sub); }
-#line 2900 "engines/director/lingo/lingo-gr.cpp"
+#line 2899 "engines/director/lingo/lingo-gr.cpp"
break;
case 80:
-#line 553 "engines/director/lingo/lingo-gr.y"
+#line 552 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_mul); }
-#line 2906 "engines/director/lingo/lingo-gr.cpp"
+#line 2905 "engines/director/lingo/lingo-gr.cpp"
break;
case 81:
-#line 554 "engines/director/lingo/lingo-gr.y"
+#line 553 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_div); }
-#line 2912 "engines/director/lingo/lingo-gr.cpp"
+#line 2911 "engines/director/lingo/lingo-gr.cpp"
break;
case 82:
-#line 555 "engines/director/lingo/lingo-gr.y"
+#line 554 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_mod); }
-#line 2918 "engines/director/lingo/lingo-gr.cpp"
+#line 2917 "engines/director/lingo/lingo-gr.cpp"
break;
case 83:
-#line 556 "engines/director/lingo/lingo-gr.y"
+#line 555 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gt); }
-#line 2924 "engines/director/lingo/lingo-gr.cpp"
+#line 2923 "engines/director/lingo/lingo-gr.cpp"
break;
case 84:
-#line 557 "engines/director/lingo/lingo-gr.y"
+#line 556 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lt); }
-#line 2930 "engines/director/lingo/lingo-gr.cpp"
+#line 2929 "engines/director/lingo/lingo-gr.cpp"
break;
case 85:
-#line 558 "engines/director/lingo/lingo-gr.y"
+#line 557 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eq); }
-#line 2936 "engines/director/lingo/lingo-gr.cpp"
+#line 2935 "engines/director/lingo/lingo-gr.cpp"
break;
case 86:
-#line 559 "engines/director/lingo/lingo-gr.y"
+#line 558 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_neq); }
-#line 2942 "engines/director/lingo/lingo-gr.cpp"
+#line 2941 "engines/director/lingo/lingo-gr.cpp"
break;
case 87:
-#line 560 "engines/director/lingo/lingo-gr.y"
+#line 559 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ge); }
-#line 2948 "engines/director/lingo/lingo-gr.cpp"
+#line 2947 "engines/director/lingo/lingo-gr.cpp"
break;
case 88:
-#line 561 "engines/director/lingo/lingo-gr.y"
+#line 560 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_le); }
-#line 2954 "engines/director/lingo/lingo-gr.cpp"
+#line 2953 "engines/director/lingo/lingo-gr.cpp"
break;
case 89:
-#line 562 "engines/director/lingo/lingo-gr.y"
+#line 561 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_and); }
-#line 2960 "engines/director/lingo/lingo-gr.cpp"
+#line 2959 "engines/director/lingo/lingo-gr.cpp"
break;
case 90:
-#line 563 "engines/director/lingo/lingo-gr.y"
+#line 562 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_or); }
-#line 2966 "engines/director/lingo/lingo-gr.cpp"
+#line 2965 "engines/director/lingo/lingo-gr.cpp"
break;
case 91:
-#line 564 "engines/director/lingo/lingo-gr.y"
+#line 563 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_not); }
-#line 2972 "engines/director/lingo/lingo-gr.cpp"
+#line 2971 "engines/director/lingo/lingo-gr.cpp"
break;
case 92:
-#line 565 "engines/director/lingo/lingo-gr.y"
+#line 564 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ampersand); }
-#line 2978 "engines/director/lingo/lingo-gr.cpp"
+#line 2977 "engines/director/lingo/lingo-gr.cpp"
break;
case 93:
-#line 566 "engines/director/lingo/lingo-gr.y"
+#line 565 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_concat); }
-#line 2984 "engines/director/lingo/lingo-gr.cpp"
+#line 2983 "engines/director/lingo/lingo-gr.cpp"
break;
case 94:
-#line 567 "engines/director/lingo/lingo-gr.y"
+#line 566 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_contains); }
-#line 2990 "engines/director/lingo/lingo-gr.cpp"
+#line 2989 "engines/director/lingo/lingo-gr.cpp"
break;
case 95:
-#line 568 "engines/director/lingo/lingo-gr.y"
+#line 567 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_starts); }
-#line 2996 "engines/director/lingo/lingo-gr.cpp"
+#line 2995 "engines/director/lingo/lingo-gr.cpp"
break;
case 96:
-#line 569 "engines/director/lingo/lingo-gr.y"
+#line 568 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); }
-#line 3002 "engines/director/lingo/lingo-gr.cpp"
+#line 3001 "engines/director/lingo/lingo-gr.cpp"
break;
case 97:
-#line 570 "engines/director/lingo/lingo-gr.y"
+#line 569 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 3008 "engines/director/lingo/lingo-gr.cpp"
+#line 3007 "engines/director/lingo/lingo-gr.cpp"
break;
case 98:
-#line 571 "engines/director/lingo/lingo-gr.y"
+#line 570 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_intersects); }
-#line 3014 "engines/director/lingo/lingo-gr.cpp"
+#line 3013 "engines/director/lingo/lingo-gr.cpp"
break;
case 99:
-#line 572 "engines/director/lingo/lingo-gr.y"
+#line 571 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_within); }
-#line 3020 "engines/director/lingo/lingo-gr.cpp"
+#line 3019 "engines/director/lingo/lingo-gr.cpp"
break;
case 100:
-#line 574 "engines/director/lingo/lingo-gr.y"
+#line 573 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_charOf); }
-#line 3026 "engines/director/lingo/lingo-gr.cpp"
+#line 3025 "engines/director/lingo/lingo-gr.cpp"
break;
case 101:
-#line 575 "engines/director/lingo/lingo-gr.y"
+#line 574 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_charToOf); }
-#line 3032 "engines/director/lingo/lingo-gr.cpp"
+#line 3031 "engines/director/lingo/lingo-gr.cpp"
break;
case 102:
-#line 576 "engines/director/lingo/lingo-gr.y"
+#line 575 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_itemOf); }
-#line 3038 "engines/director/lingo/lingo-gr.cpp"
+#line 3037 "engines/director/lingo/lingo-gr.cpp"
break;
case 103:
-#line 577 "engines/director/lingo/lingo-gr.y"
+#line 576 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_itemToOf); }
-#line 3044 "engines/director/lingo/lingo-gr.cpp"
+#line 3043 "engines/director/lingo/lingo-gr.cpp"
break;
case 104:
-#line 578 "engines/director/lingo/lingo-gr.y"
+#line 577 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lineOf); }
-#line 3050 "engines/director/lingo/lingo-gr.cpp"
+#line 3049 "engines/director/lingo/lingo-gr.cpp"
break;
case 105:
-#line 579 "engines/director/lingo/lingo-gr.y"
+#line 578 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lineToOf); }
-#line 3056 "engines/director/lingo/lingo-gr.cpp"
+#line 3055 "engines/director/lingo/lingo-gr.cpp"
break;
case 106:
-#line 580 "engines/director/lingo/lingo-gr.y"
+#line 579 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_wordOf); }
-#line 3062 "engines/director/lingo/lingo-gr.cpp"
+#line 3061 "engines/director/lingo/lingo-gr.cpp"
break;
case 107:
-#line 581 "engines/director/lingo/lingo-gr.y"
+#line 580 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_wordToOf); }
-#line 3068 "engines/director/lingo/lingo-gr.cpp"
+#line 3067 "engines/director/lingo/lingo-gr.cpp"
break;
case 108:
-#line 583 "engines/director/lingo/lingo-gr.y"
+#line 582 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), 1);
delete (yyvsp[-1].s); }
-#line 3076 "engines/director/lingo/lingo-gr.cpp"
+#line 3075 "engines/director/lingo/lingo-gr.cpp"
break;
case 110:
-#line 588 "engines/director/lingo/lingo-gr.y"
+#line 587 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_printtop); }
-#line 3082 "engines/director/lingo/lingo-gr.cpp"
+#line 3081 "engines/director/lingo/lingo-gr.cpp"
break;
case 113:
-#line 591 "engines/director/lingo/lingo-gr.y"
+#line 590 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_exitRepeat); }
-#line 3088 "engines/director/lingo/lingo-gr.cpp"
+#line 3087 "engines/director/lingo/lingo-gr.cpp"
break;
case 114:
-#line 592 "engines/director/lingo/lingo-gr.y"
+#line 591 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_procret); }
-#line 3094 "engines/director/lingo/lingo-gr.cpp"
+#line 3093 "engines/director/lingo/lingo-gr.cpp"
break;
case 115:
-#line 593 "engines/director/lingo/lingo-gr.y"
+#line 592 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3100 "engines/director/lingo/lingo-gr.cpp"
+#line 3099 "engines/director/lingo/lingo-gr.cpp"
break;
case 116:
-#line 593 "engines/director/lingo/lingo-gr.y"
+#line 592 "engines/director/lingo/lingo-gr.y"
{ inNone(); }
-#line 3106 "engines/director/lingo/lingo-gr.cpp"
+#line 3105 "engines/director/lingo/lingo-gr.cpp"
break;
case 117:
-#line 594 "engines/director/lingo/lingo-gr.y"
+#line 593 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3112 "engines/director/lingo/lingo-gr.cpp"
+#line 3111 "engines/director/lingo/lingo-gr.cpp"
break;
case 118:
-#line 594 "engines/director/lingo/lingo-gr.y"
+#line 593 "engines/director/lingo/lingo-gr.y"
{ inNone(); }
-#line 3118 "engines/director/lingo/lingo-gr.cpp"
+#line 3117 "engines/director/lingo/lingo-gr.cpp"
break;
case 119:
-#line 595 "engines/director/lingo/lingo-gr.y"
+#line 594 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3124 "engines/director/lingo/lingo-gr.cpp"
+#line 3123 "engines/director/lingo/lingo-gr.cpp"
break;
case 120:
-#line 595 "engines/director/lingo/lingo-gr.y"
+#line 594 "engines/director/lingo/lingo-gr.y"
{ inNone(); }
-#line 3130 "engines/director/lingo/lingo-gr.cpp"
+#line 3129 "engines/director/lingo/lingo-gr.cpp"
break;
case 121:
-#line 596 "engines/director/lingo/lingo-gr.y"
+#line 595 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 3138 "engines/director/lingo/lingo-gr.cpp"
+#line 3137 "engines/director/lingo/lingo-gr.cpp"
break;
case 122:
-#line 599 "engines/director/lingo/lingo-gr.y"
+#line 598 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
delete (yyvsp[-1].s); }
-#line 3146 "engines/director/lingo/lingo-gr.cpp"
+#line 3145 "engines/director/lingo/lingo-gr.cpp"
break;
case 123:
-#line 602 "engines/director/lingo/lingo-gr.y"
+#line 601 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_open); }
-#line 3152 "engines/director/lingo/lingo-gr.cpp"
+#line 3151 "engines/director/lingo/lingo-gr.cpp"
break;
case 124:
-#line 603 "engines/director/lingo/lingo-gr.y"
+#line 602 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code2(LC::c_voidpush, LC::c_open); }
-#line 3158 "engines/director/lingo/lingo-gr.cpp"
+#line 3157 "engines/director/lingo/lingo-gr.cpp"
break;
case 125:
-#line 605 "engines/director/lingo/lingo-gr.y"
+#line 604 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_global);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarGlobal);
delete (yyvsp[0].s); }
-#line 3168 "engines/director/lingo/lingo-gr.cpp"
+#line 3167 "engines/director/lingo/lingo-gr.cpp"
break;
case 126:
-#line 610 "engines/director/lingo/lingo-gr.y"
+#line 609 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_global);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarGlobal);
delete (yyvsp[0].s); }
-#line 3178 "engines/director/lingo/lingo-gr.cpp"
+#line 3177 "engines/director/lingo/lingo-gr.cpp"
break;
case 127:
-#line 616 "engines/director/lingo/lingo-gr.y"
+#line 615 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_property);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarProperty);
delete (yyvsp[0].s); }
-#line 3188 "engines/director/lingo/lingo-gr.cpp"
+#line 3187 "engines/director/lingo/lingo-gr.cpp"
break;
case 128:
-#line 621 "engines/director/lingo/lingo-gr.y"
+#line 620 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_property);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarProperty);
delete (yyvsp[0].s); }
-#line 3198 "engines/director/lingo/lingo-gr.cpp"
+#line 3197 "engines/director/lingo/lingo-gr.cpp"
break;
case 129:
-#line 627 "engines/director/lingo/lingo-gr.y"
+#line 626 "engines/director/lingo/lingo-gr.y"
{
mVar((yyvsp[0].s), kVarInstance);
delete (yyvsp[0].s); }
-#line 3206 "engines/director/lingo/lingo-gr.cpp"
+#line 3205 "engines/director/lingo/lingo-gr.cpp"
break;
case 130:
-#line 630 "engines/director/lingo/lingo-gr.y"
+#line 629 "engines/director/lingo/lingo-gr.y"
{
mVar((yyvsp[0].s), kVarInstance);
delete (yyvsp[0].s); }
-#line 3214 "engines/director/lingo/lingo-gr.cpp"
+#line 3213 "engines/director/lingo/lingo-gr.cpp"
break;
case 131:
-#line 641 "engines/director/lingo/lingo-gr.y"
+#line 640 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotoloop); }
-#line 3220 "engines/director/lingo/lingo-gr.cpp"
+#line 3219 "engines/director/lingo/lingo-gr.cpp"
break;
case 132:
-#line 642 "engines/director/lingo/lingo-gr.y"
+#line 641 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotonext); }
-#line 3226 "engines/director/lingo/lingo-gr.cpp"
+#line 3225 "engines/director/lingo/lingo-gr.cpp"
break;
case 133:
-#line 643 "engines/director/lingo/lingo-gr.y"
+#line 642 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotoprevious); }
-#line 3232 "engines/director/lingo/lingo-gr.cpp"
+#line 3231 "engines/director/lingo/lingo-gr.cpp"
break;
case 134:
-#line 644 "engines/director/lingo/lingo-gr.y"
+#line 643 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(1);
g_lingo->code1(LC::c_goto); }
-#line 3241 "engines/director/lingo/lingo-gr.cpp"
+#line 3240 "engines/director/lingo/lingo-gr.cpp"
break;
case 135:
-#line 648 "engines/director/lingo/lingo-gr.y"
+#line 647 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(3);
g_lingo->code1(LC::c_goto); }
-#line 3250 "engines/director/lingo/lingo-gr.cpp"
+#line 3249 "engines/director/lingo/lingo-gr.cpp"
break;
case 136:
-#line 652 "engines/director/lingo/lingo-gr.y"
+#line 651 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(2);
g_lingo->code1(LC::c_goto); }
-#line 3259 "engines/director/lingo/lingo-gr.cpp"
+#line 3258 "engines/director/lingo/lingo-gr.cpp"
break;
case 139:
-#line 660 "engines/director/lingo/lingo-gr.y"
+#line 659 "engines/director/lingo/lingo-gr.y"
{ // "play #done" is also caught by this
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(1);
g_lingo->code1(LC::c_play); }
-#line 3268 "engines/director/lingo/lingo-gr.cpp"
+#line 3267 "engines/director/lingo/lingo-gr.cpp"
break;
case 140:
-#line 664 "engines/director/lingo/lingo-gr.y"
+#line 663 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(3);
g_lingo->code1(LC::c_play); }
-#line 3277 "engines/director/lingo/lingo-gr.cpp"
+#line 3276 "engines/director/lingo/lingo-gr.cpp"
break;
case 141:
-#line 668 "engines/director/lingo/lingo-gr.y"
+#line 667 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(2);
g_lingo->code1(LC::c_play); }
-#line 3286 "engines/director/lingo/lingo-gr.cpp"
+#line 3285 "engines/director/lingo/lingo-gr.cpp"
break;
case 142:
-#line 672 "engines/director/lingo/lingo-gr.y"
+#line 671 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeSetImmediate(true); }
-#line 3292 "engines/director/lingo/lingo-gr.cpp"
+#line 3291 "engines/director/lingo/lingo-gr.cpp"
break;
case 143:
-#line 672 "engines/director/lingo/lingo-gr.y"
+#line 671 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeSetImmediate(false);
g_lingo->codeFunc((yyvsp[-2].s), (yyvsp[0].narg));
delete (yyvsp[-2].s); }
-#line 3301 "engines/director/lingo/lingo-gr.cpp"
+#line 3300 "engines/director/lingo/lingo-gr.cpp"
break;
case 144:
-#line 702 "engines/director/lingo/lingo-gr.y"
+#line 701 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3307 "engines/director/lingo/lingo-gr.cpp"
+#line 3306 "engines/director/lingo/lingo-gr.cpp"
break;
case 145:
-#line 702 "engines/director/lingo/lingo-gr.y"
+#line 701 "engines/director/lingo/lingo-gr.y"
{ g_lingo->_currentFactory = NULL; }
-#line 3313 "engines/director/lingo/lingo-gr.cpp"
+#line 3312 "engines/director/lingo/lingo-gr.cpp"
break;
case 146:
-#line 703 "engines/director/lingo/lingo-gr.y"
+#line 702 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg));
endDef();
delete (yyvsp[-6].s); }
-#line 3323 "engines/director/lingo/lingo-gr.cpp"
+#line 3322 "engines/director/lingo/lingo-gr.cpp"
break;
case 147:
-#line 708 "engines/director/lingo/lingo-gr.y"
+#line 707 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 3329 "engines/director/lingo/lingo-gr.cpp"
+#line 3328 "engines/director/lingo/lingo-gr.cpp"
break;
case 148:
-#line 709 "engines/director/lingo/lingo-gr.y"
+#line 708 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3335 "engines/director/lingo/lingo-gr.cpp"
+#line 3334 "engines/director/lingo/lingo-gr.cpp"
break;
case 149:
-#line 710 "engines/director/lingo/lingo-gr.y"
+#line 709 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg), g_lingo->_currentFactory);
endDef();
delete (yyvsp[-6].s); }
-#line 3345 "engines/director/lingo/lingo-gr.cpp"
+#line 3344 "engines/director/lingo/lingo-gr.cpp"
break;
case 150:
-#line 715 "engines/director/lingo/lingo-gr.y"
+#line 714 "engines/director/lingo/lingo-gr.y"
{ // D3
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-7].s), (yyvsp[-6].code), (yyvsp[-5].narg));
@@ -3354,70 +3353,70 @@ yyreduce:
checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
delete (yyvsp[-7].s);
delete (yyvsp[-1].s); }
-#line 3358 "engines/director/lingo/lingo-gr.cpp"
+#line 3357 "engines/director/lingo/lingo-gr.cpp"
break;
case 151:
-#line 723 "engines/director/lingo/lingo-gr.y"
+#line 722 "engines/director/lingo/lingo-gr.y"
{ // D4. No 'end' clause
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
endDef();
delete (yyvsp[-5].s); }
-#line 3368 "engines/director/lingo/lingo-gr.cpp"
+#line 3367 "engines/director/lingo/lingo-gr.cpp"
break;
case 152:
-#line 729 "engines/director/lingo/lingo-gr.y"
+#line 728 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3374 "engines/director/lingo/lingo-gr.cpp"
+#line 3373 "engines/director/lingo/lingo-gr.cpp"
break;
case 153:
-#line 729 "engines/director/lingo/lingo-gr.y"
+#line 728 "engines/director/lingo/lingo-gr.y"
{
- (yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory = NULL; g_lingo->_ignoreMe = true; }
-#line 3381 "engines/director/lingo/lingo-gr.cpp"
+ (yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory = NULL; }
+#line 3380 "engines/director/lingo/lingo-gr.cpp"
break;
case 154:
-#line 732 "engines/director/lingo/lingo-gr.y"
+#line 731 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 0; }
-#line 3387 "engines/director/lingo/lingo-gr.cpp"
+#line 3386 "engines/director/lingo/lingo-gr.cpp"
break;
case 155:
-#line 733 "engines/director/lingo/lingo-gr.y"
+#line 732 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); (yyval.narg) = 1; delete (yyvsp[0].s); }
-#line 3393 "engines/director/lingo/lingo-gr.cpp"
+#line 3392 "engines/director/lingo/lingo-gr.cpp"
break;
case 156:
-#line 734 "engines/director/lingo/lingo-gr.y"
+#line 733 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
-#line 3399 "engines/director/lingo/lingo-gr.cpp"
+#line 3398 "engines/director/lingo/lingo-gr.cpp"
break;
case 158:
-#line 737 "engines/director/lingo/lingo-gr.y"
+#line 736 "engines/director/lingo/lingo-gr.y"
{ delete (yyvsp[0].s); }
-#line 3405 "engines/director/lingo/lingo-gr.cpp"
+#line 3404 "engines/director/lingo/lingo-gr.cpp"
break;
case 159:
-#line 738 "engines/director/lingo/lingo-gr.y"
+#line 737 "engines/director/lingo/lingo-gr.y"
{ delete (yyvsp[0].s); }
-#line 3411 "engines/director/lingo/lingo-gr.cpp"
+#line 3410 "engines/director/lingo/lingo-gr.cpp"
break;
case 160:
-#line 740 "engines/director/lingo/lingo-gr.y"
+#line 739 "engines/director/lingo/lingo-gr.y"
{ inDef(); }
-#line 3417 "engines/director/lingo/lingo-gr.cpp"
+#line 3416 "engines/director/lingo/lingo-gr.cpp"
break;
case 161:
-#line 742 "engines/director/lingo/lingo-gr.y"
+#line 741 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_call);
g_lingo->codeString((yyvsp[-1].s)->c_str());
@@ -3425,113 +3424,113 @@ yyreduce:
WRITE_UINT32(&numpar, (yyvsp[0].narg));
g_lingo->code1(numpar);
delete (yyvsp[-1].s); }
-#line 3429 "engines/director/lingo/lingo-gr.cpp"
+#line 3428 "engines/director/lingo/lingo-gr.cpp"
break;
case 162:
-#line 750 "engines/director/lingo/lingo-gr.y"
+#line 749 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 0; }
-#line 3435 "engines/director/lingo/lingo-gr.cpp"
+#line 3434 "engines/director/lingo/lingo-gr.cpp"
break;
case 163:
-#line 751 "engines/director/lingo/lingo-gr.y"
+#line 750 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3441 "engines/director/lingo/lingo-gr.cpp"
+#line 3440 "engines/director/lingo/lingo-gr.cpp"
break;
case 164:
-#line 752 "engines/director/lingo/lingo-gr.y"
+#line 751 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3447 "engines/director/lingo/lingo-gr.cpp"
+#line 3446 "engines/director/lingo/lingo-gr.cpp"
break;
case 165:
-#line 754 "engines/director/lingo/lingo-gr.y"
+#line 753 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3453 "engines/director/lingo/lingo-gr.cpp"
+#line 3452 "engines/director/lingo/lingo-gr.cpp"
break;
case 166:
-#line 755 "engines/director/lingo/lingo-gr.y"
+#line 754 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3459 "engines/director/lingo/lingo-gr.cpp"
+#line 3458 "engines/director/lingo/lingo-gr.cpp"
break;
case 167:
-#line 757 "engines/director/lingo/lingo-gr.y"
+#line 756 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[-1].code); }
-#line 3465 "engines/director/lingo/lingo-gr.cpp"
+#line 3464 "engines/director/lingo/lingo-gr.cpp"
break;
case 168:
-#line 759 "engines/director/lingo/lingo-gr.y"
+#line 758 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3471 "engines/director/lingo/lingo-gr.cpp"
+#line 3470 "engines/director/lingo/lingo-gr.cpp"
break;
case 169:
-#line 760 "engines/director/lingo/lingo-gr.y"
+#line 759 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3477 "engines/director/lingo/lingo-gr.cpp"
+#line 3476 "engines/director/lingo/lingo-gr.cpp"
break;
case 170:
-#line 761 "engines/director/lingo/lingo-gr.y"
+#line 760 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3483 "engines/director/lingo/lingo-gr.cpp"
+#line 3482 "engines/director/lingo/lingo-gr.cpp"
break;
case 171:
-#line 762 "engines/director/lingo/lingo-gr.y"
+#line 761 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3489 "engines/director/lingo/lingo-gr.cpp"
+#line 3488 "engines/director/lingo/lingo-gr.cpp"
break;
case 172:
-#line 764 "engines/director/lingo/lingo-gr.y"
+#line 763 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3495 "engines/director/lingo/lingo-gr.cpp"
+#line 3494 "engines/director/lingo/lingo-gr.cpp"
break;
case 173:
-#line 765 "engines/director/lingo/lingo-gr.y"
+#line 764 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3501 "engines/director/lingo/lingo-gr.cpp"
+#line 3500 "engines/director/lingo/lingo-gr.cpp"
break;
case 174:
-#line 767 "engines/director/lingo/lingo-gr.y"
+#line 766 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3507 "engines/director/lingo/lingo-gr.cpp"
+#line 3506 "engines/director/lingo/lingo-gr.cpp"
break;
case 175:
-#line 768 "engines/director/lingo/lingo-gr.y"
+#line 767 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3513 "engines/director/lingo/lingo-gr.cpp"
+#line 3512 "engines/director/lingo/lingo-gr.cpp"
break;
case 176:
-#line 770 "engines/director/lingo/lingo-gr.y"
+#line 769 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_symbolpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
delete (yyvsp[-2].s); }
-#line 3522 "engines/director/lingo/lingo-gr.cpp"
+#line 3521 "engines/director/lingo/lingo-gr.cpp"
break;
case 177:
-#line 774 "engines/director/lingo/lingo-gr.y"
+#line 773 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_stringpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
delete (yyvsp[-2].s); }
-#line 3531 "engines/director/lingo/lingo-gr.cpp"
+#line 3530 "engines/director/lingo/lingo-gr.cpp"
break;
-#line 3535 "engines/director/lingo/lingo-gr.cpp"
+#line 3534 "engines/director/lingo/lingo-gr.cpp"
default: break;
}
@@ -3730,7 +3729,7 @@ yyreturn:
return yyresult;
}
-#line 780 "engines/director/lingo/lingo-gr.y"
+#line 779 "engines/director/lingo/lingo-gr.y"
int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index be6b0b5b46..d55c42a3c0 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -147,7 +147,7 @@ extern int yydebug;
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
-#line 138 "engines/director/lingo/lingo-gr.y"
+#line 137 "engines/director/lingo/lingo-gr.y"
Common::String *s;
int i;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 91aba75d90..ee3d962fbc 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -103,7 +103,6 @@ static void startDef() {
static void endDef() {
g_lingo->clearArgStack();
inNone();
- g_lingo->_ignoreMe = false;
delete g_lingo->_methodVars;
g_lingo->_methodVars = g_lingo->_methodVarsStash;
@@ -727,7 +726,7 @@ defn: tMACRO { startDef(); } ID { g_lingo->_currentFactory = NULL; }
delete $on; }
on: tON { startDef(); } ID {
- $$ = $ID; g_lingo->_currentFactory = NULL; g_lingo->_ignoreMe = true; }
+ $$ = $ID; g_lingo->_currentFactory = NULL; }
argdef: /* nothing */ { $$ = 0; }
| ID { g_lingo->codeArg($ID); mVar($ID, kVarArgument); $$ = 1; delete $ID; }
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index 1f6e7020b9..2b0e23a5dc 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -427,7 +427,7 @@ static const YY_CHAR yy_ec[256] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1
@@ -1602,9 +1602,6 @@ YY_RULE_SETUP
count();
yylval.s = new Common::String(yytext);
- if (g_lingo->_ignoreMe && yylval.s->equalsIgnoreCase("me"))
- return ID;
-
// When we are defining arguments, allow any string
if (g_lingo->_indef == kStateInArgs)
return ID;
@@ -1640,41 +1637,41 @@ YY_RULE_SETUP
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 428 "engines/director/lingo/lingo-lex.l"
+#line 425 "engines/director/lingo/lingo-lex.l"
{ count(); yylval.f = atof(yytext); return FLOAT; }
YY_BREAK
case 65:
YY_RULE_SETUP
-#line 429 "engines/director/lingo/lingo-lex.l"
+#line 426 "engines/director/lingo/lingo-lex.l"
{ count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 430 "engines/director/lingo/lingo-lex.l"
+#line 427 "engines/director/lingo/lingo-lex.l"
{ count(); return *yytext; }
YY_BREAK
case 67:
/* rule 67 can match eol */
YY_RULE_SETUP
-#line 431 "engines/director/lingo/lingo-lex.l"
+#line 428 "engines/director/lingo/lingo-lex.l"
{ count(); return '\n'; }
YY_BREAK
case 68:
YY_RULE_SETUP
-#line 432 "engines/director/lingo/lingo-lex.l"
+#line 429 "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 433 "engines/director/lingo/lingo-lex.l"
+#line 430 "engines/director/lingo/lingo-lex.l"
{ count(); }
YY_BREAK
case 70:
YY_RULE_SETUP
-#line 435 "engines/director/lingo/lingo-lex.l"
+#line 432 "engines/director/lingo/lingo-lex.l"
ECHO;
YY_BREAK
-#line 1677 "engines/director/lingo/lingo-lex.cpp"
+#line 1674 "engines/director/lingo/lingo-lex.cpp"
case YY_STATE_EOF(INITIAL):
yyterminate();
@@ -2683,7 +2680,7 @@ void yyfree (void * ptr )
#define YYTABLES_NAME "yytables"
-#line 435 "engines/director/lingo/lingo-lex.l"
+#line 432 "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 73c2d2158f..7543b67dfb 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -390,9 +390,6 @@ word { count(); return varCheck(tWORD, "word"); }
count();
yylval.s = new Common::String(yytext);
- if (g_lingo->_ignoreMe && yylval.s->equalsIgnoreCase("me"))
- return ID;
-
// When we are defining arguments, allow any string
if (g_lingo->_indef == kStateInArgs)
return ID;
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 4fe1106f97..ed3ec281c5 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -157,7 +157,6 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
_abort = false;
_nextRepeat = false;
_indef = kStateNone;
- _ignoreMe = false;
_immediateMode = false;
_linenumber = _colnumber = _bytenumber = _lastbytenumber = _errorbytenumber = 0;
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index ce37fb7f89..467e35765f 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -471,7 +471,6 @@ public:
bool _abort;
bool _nextRepeat;
LexerDefineState _indef;
- bool _ignoreMe;
bool _immediateMode;
Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> *_methodVars;
Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> *_methodVarsStash;
Commit: 2d9dea678ad129d1fd33242dd221d817fbcebeeb
https://github.com/scummvm/scummvm/commit/2d9dea678ad129d1fd33242dd221d817fbcebeeb
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Remove unnecessary instructions
Global and instance vars are both just added to the respective vartables
on parse instead of upon execution.
Changed paths:
engines/director/lingo/lingo-code.cpp
engines/director/lingo/lingo-code.h
engines/director/lingo/lingo-codegen.cpp
engines/director/lingo/lingo-gr.cpp
engines/director/lingo/lingo-gr.h
engines/director/lingo/lingo-gr.y
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 193c7a665a..5551328b21 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -80,14 +80,12 @@ static struct FuncDescr {
{ LC::c_exitRepeat, "c_exitRepeat", "" },
{ LC::c_floatpush, "c_floatpush", "f" },
{ LC::c_ge, "c_ge", "" },
- { LC::c_global, "c_global", "s" },
{ LC::c_goto, "c_goto", "" },
{ LC::c_gotoloop, "c_gotoloop", "" },
{ LC::c_gotonext, "c_gotonext", "" },
{ LC::c_gotoprevious, "c_gotoprevious", "" },
{ LC::c_gt, "c_gt", "" },
{ LC::c_hilite, "c_hilite", "" },
- { LC::c_instance, "c_instance", "s" }, // D2
{ LC::c_intersects, "c_intersects", "" },
{ LC::c_intpush, "c_intpush", "i" },
{ LC::c_itemOf, "c_itemOf", "" }, // D3
@@ -1474,40 +1472,12 @@ void LC::c_procret() {
}
}
-void LC::c_global() {
- Common::String name(g_lingo->readString());
-
- if (!g_lingo->_globalvars.contains(name)) {
- g_lingo->_globalvars[name] = Symbol();
- g_lingo->_globalvars[name].name = new Common::String(name);
- g_lingo->_globalvars[name].global = true;
- }
-}
-
void LC::c_property() {
Common::String name(g_lingo->readString());
warning("STUB: c_property()");
}
-void LC::c_instance() {
- Common::String name(g_lingo->readString());
-
- warning("STUB: c_instance(%s)", name.c_str());
-}
-
-void LC::c_factory() {
- Common::String name(g_lingo->readString());
- Datum d;
-
- warning("STUB: c_factory(%s)", name.c_str());
-
- d.type = OBJECT;
- d.u.s = new Common::String(name);
-
- g_lingo->push(d);
-}
-
void LC::c_open() {
Datum d2 = g_lingo->pop();
Datum d1 = g_lingo->pop();
diff --git a/engines/director/lingo/lingo-code.h b/engines/director/lingo/lingo-code.h
index d2cb192b25..5ffe5c8d8b 100644
--- a/engines/director/lingo/lingo-code.h
+++ b/engines/director/lingo/lingo-code.h
@@ -128,9 +128,6 @@ namespace LC {
void c_gotoloop();
void c_gotonext();
void c_gotoprevious();
- void c_global();
- void c_instance();
- void c_factory();
void c_property();
void c_play();
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 7ff1767c4a..e9919cce57 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -454,7 +454,7 @@ void Lingo::varCreate(const Common::String &name, bool global, SymbolHash *local
if (global)
warning("varCreate: variable %s is instance or property, not global", name.c_str());
return;
- } else if (_globalvars.contains(name)) {
+ } else if (_globalvars.contains(name)) {
if (!global)
warning("varCreate: variable %s is global, not local", name.c_str());
return;
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 88bd048f70..35b8f74b8f 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -145,12 +145,14 @@ static void mVar(Common::String *s, VarType type) {
} else {
warning("Instance var '%s' defined outside factory", s->c_str());
}
+ } else if (type == kVarGlobal) {
+ g_lingo->varCreate(*s, true);
}
}
}
-#line 154 "engines/director/lingo/lingo-gr.cpp"
+#line 156 "engines/director/lingo/lingo-gr.cpp"
# ifndef YY_CAST
# ifdef __cplusplus
@@ -287,7 +289,7 @@ extern int yydebug;
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
-#line 137 "engines/director/lingo/lingo-gr.y"
+#line 139 "engines/director/lingo/lingo-gr.y"
Common::String *s;
int i;
@@ -307,7 +309,7 @@ union YYSTYPE
Common::String *field;
} objectref;
-#line 311 "engines/director/lingo/lingo-gr.cpp"
+#line 313 "engines/director/lingo/lingo-gr.cpp"
};
typedef union YYSTYPE YYSTYPE;
@@ -861,24 +863,24 @@ static const yytype_int8 yytranslate[] =
/* YYRLINEYYN -- Source line where rule number YYN was defined. */
static const yytype_int16 yyrline[] =
{
- 0, 196, 196, 197, 199, 200, 201, 203, 210, 214,
- 225, 226, 227, 234, 241, 248, 255, 261, 268, 279,
- 286, 287, 288, 290, 291, 296, 308, 312, 315, 307,
- 339, 343, 346, 338, 372, 379, 385, 371, 413, 415,
- 418, 419, 421, 423, 430, 438, 439, 441, 447, 451,
- 455, 459, 462, 464, 465, 466, 468, 471, 474, 478,
- 482, 486, 494, 500, 501, 502, 513, 514, 515, 518,
- 521, 527, 527, 532, 535, 538, 543, 549, 550, 551,
- 552, 553, 554, 555, 556, 557, 558, 559, 560, 561,
- 562, 563, 564, 565, 566, 567, 568, 569, 570, 571,
- 573, 574, 575, 576, 577, 578, 579, 580, 582, 585,
- 587, 588, 589, 590, 591, 592, 592, 593, 593, 594,
- 594, 595, 598, 601, 602, 604, 609, 615, 620, 626,
- 629, 640, 641, 642, 643, 647, 651, 656, 657, 659,
- 663, 667, 671, 671, 701, 701, 701, 707, 708, 708,
- 714, 722, 728, 728, 731, 732, 733, 735, 736, 737,
- 739, 741, 749, 750, 751, 753, 754, 756, 758, 759,
- 760, 761, 763, 764, 766, 767, 769, 773
+ 0, 198, 198, 199, 201, 202, 203, 205, 212, 216,
+ 227, 228, 229, 236, 243, 250, 257, 263, 270, 281,
+ 288, 289, 290, 292, 293, 298, 310, 314, 317, 309,
+ 341, 345, 348, 340, 374, 381, 387, 373, 415, 417,
+ 420, 421, 423, 425, 432, 440, 441, 443, 449, 453,
+ 457, 461, 464, 466, 467, 468, 470, 473, 476, 480,
+ 484, 488, 496, 502, 503, 504, 515, 516, 517, 520,
+ 523, 529, 529, 534, 537, 540, 545, 551, 552, 553,
+ 554, 555, 556, 557, 558, 559, 560, 561, 562, 563,
+ 564, 565, 566, 567, 568, 569, 570, 571, 572, 573,
+ 575, 576, 577, 578, 579, 580, 581, 582, 584, 587,
+ 589, 590, 591, 592, 593, 594, 594, 595, 595, 596,
+ 596, 597, 600, 603, 604, 606, 609, 613, 618, 624,
+ 627, 638, 639, 640, 641, 645, 649, 654, 655, 657,
+ 661, 665, 669, 669, 699, 699, 699, 705, 706, 706,
+ 712, 720, 726, 726, 729, 730, 731, 733, 734, 735,
+ 737, 739, 747, 748, 749, 751, 752, 754, 756, 757,
+ 758, 759, 761, 762, 764, 765, 767, 771
};
#endif
@@ -1949,81 +1951,81 @@ yydestruct (const char *yymsg,
switch (yykind)
{
case 22: /* BLTIN */
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 193 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1955 "engines/director/lingo/lingo-gr.cpp"
+#line 1957 "engines/director/lingo/lingo-gr.cpp"
break;
case 23: /* FBLTIN */
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 193 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1961 "engines/director/lingo/lingo-gr.cpp"
+#line 1963 "engines/director/lingo/lingo-gr.cpp"
break;
case 24: /* RBLTIN */
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 193 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1967 "engines/director/lingo/lingo-gr.cpp"
+#line 1969 "engines/director/lingo/lingo-gr.cpp"
break;
case 25: /* THEFBLTIN */
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 193 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1973 "engines/director/lingo/lingo-gr.cpp"
+#line 1975 "engines/director/lingo/lingo-gr.cpp"
break;
case 26: /* ID */
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 193 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1979 "engines/director/lingo/lingo-gr.cpp"
+#line 1981 "engines/director/lingo/lingo-gr.cpp"
break;
case 27: /* STRING */
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 193 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1985 "engines/director/lingo/lingo-gr.cpp"
+#line 1987 "engines/director/lingo/lingo-gr.cpp"
break;
case 28: /* HANDLER */
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 193 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1991 "engines/director/lingo/lingo-gr.cpp"
+#line 1993 "engines/director/lingo/lingo-gr.cpp"
break;
case 29: /* SYMBOL */
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 193 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 1997 "engines/director/lingo/lingo-gr.cpp"
+#line 1999 "engines/director/lingo/lingo-gr.cpp"
break;
case 30: /* ENDCLAUSE */
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 193 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2003 "engines/director/lingo/lingo-gr.cpp"
+#line 2005 "engines/director/lingo/lingo-gr.cpp"
break;
case 31: /* tPLAYACCEL */
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 193 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2009 "engines/director/lingo/lingo-gr.cpp"
+#line 2011 "engines/director/lingo/lingo-gr.cpp"
break;
case 32: /* tMETHOD */
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 193 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2015 "engines/director/lingo/lingo-gr.cpp"
+#line 2017 "engines/director/lingo/lingo-gr.cpp"
break;
case 33: /* THEOBJECTFIELD */
-#line 192 "engines/director/lingo/lingo-gr.y"
+#line 194 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).objectfield).os; }
-#line 2021 "engines/director/lingo/lingo-gr.cpp"
+#line 2023 "engines/director/lingo/lingo-gr.cpp"
break;
case 148: /* on */
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 193 "engines/director/lingo/lingo-gr.y"
{ delete ((*yyvaluep).s); }
-#line 2027 "engines/director/lingo/lingo-gr.cpp"
+#line 2029 "engines/director/lingo/lingo-gr.cpp"
break;
default:
@@ -2302,7 +2304,7 @@ yyreduce:
switch (yyn)
{
case 7:
-#line 203 "engines/director/lingo/lingo-gr.y"
+#line 205 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
@@ -2310,19 +2312,19 @@ yyreduce:
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[-2].code);
delete (yyvsp[0].s); }
-#line 2314 "engines/director/lingo/lingo-gr.cpp"
+#line 2316 "engines/director/lingo/lingo-gr.cpp"
break;
case 8:
-#line 210 "engines/director/lingo/lingo-gr.y"
+#line 212 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[-2].code); }
-#line 2322 "engines/director/lingo/lingo-gr.cpp"
+#line 2324 "engines/director/lingo/lingo-gr.cpp"
break;
case 9:
-#line 214 "engines/director/lingo/lingo-gr.y"
+#line 216 "engines/director/lingo/lingo-gr.y"
{
if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
warning("LEXER: keyword 'menu' expected");
@@ -2334,23 +2336,23 @@ yyreduce:
g_lingo->codeInt((yyvsp[-4].e)[1]);
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code); }
-#line 2338 "engines/director/lingo/lingo-gr.cpp"
+#line 2340 "engines/director/lingo/lingo-gr.cpp"
break;
case 10:
-#line 225 "engines/director/lingo/lingo-gr.y"
+#line 227 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_after); }
-#line 2344 "engines/director/lingo/lingo-gr.cpp"
+#line 2346 "engines/director/lingo/lingo-gr.cpp"
break;
case 11:
-#line 226 "engines/director/lingo/lingo-gr.y"
+#line 228 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_before); }
-#line 2350 "engines/director/lingo/lingo-gr.cpp"
+#line 2352 "engines/director/lingo/lingo-gr.cpp"
break;
case 12:
-#line 227 "engines/director/lingo/lingo-gr.y"
+#line 229 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
@@ -2358,11 +2360,11 @@ yyreduce:
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code);
delete (yyvsp[-2].s); }
-#line 2362 "engines/director/lingo/lingo-gr.cpp"
+#line 2364 "engines/director/lingo/lingo-gr.cpp"
break;
case 13:
-#line 234 "engines/director/lingo/lingo-gr.y"
+#line 236 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2370,11 +2372,11 @@ yyreduce:
g_lingo->codeInt((yyvsp[-2].e)[0]);
g_lingo->codeInt((yyvsp[-2].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2374 "engines/director/lingo/lingo-gr.cpp"
+#line 2376 "engines/director/lingo/lingo-gr.cpp"
break;
case 14:
-#line 241 "engines/director/lingo/lingo-gr.y"
+#line 243 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
@@ -2382,11 +2384,11 @@ yyreduce:
g_lingo->code1(LC::c_assign);
(yyval.code) = (yyvsp[0].code);
delete (yyvsp[-2].s); }
-#line 2386 "engines/director/lingo/lingo-gr.cpp"
+#line 2388 "engines/director/lingo/lingo-gr.cpp"
break;
case 15:
-#line 248 "engines/director/lingo/lingo-gr.y"
+#line 250 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2394,33 +2396,33 @@ yyreduce:
g_lingo->codeInt((yyvsp[-2].e)[0]);
g_lingo->codeInt((yyvsp[-2].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2398 "engines/director/lingo/lingo-gr.cpp"
+#line 2400 "engines/director/lingo/lingo-gr.cpp"
break;
case 16:
-#line 255 "engines/director/lingo/lingo-gr.y"
+#line 257 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_swap);
g_lingo->code1(LC::c_theentityassign);
g_lingo->codeInt((yyvsp[-3].e)[0]);
g_lingo->codeInt((yyvsp[-3].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2409 "engines/director/lingo/lingo-gr.cpp"
+#line 2411 "engines/director/lingo/lingo-gr.cpp"
break;
case 17:
-#line 261 "engines/director/lingo/lingo-gr.y"
+#line 263 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_swap);
g_lingo->code1(LC::c_theentityassign);
g_lingo->codeInt((yyvsp[-3].e)[0]);
g_lingo->codeInt((yyvsp[-3].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2420 "engines/director/lingo/lingo-gr.cpp"
+#line 2422 "engines/director/lingo/lingo-gr.cpp"
break;
case 18:
-#line 268 "engines/director/lingo/lingo-gr.y"
+#line 270 "engines/director/lingo/lingo-gr.y"
{
if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
warning("LEXER: keyword 'menu' expected");
@@ -2432,54 +2434,54 @@ yyreduce:
g_lingo->codeInt((yyvsp[-6].e)[0]);
g_lingo->codeInt((yyvsp[-6].e)[1]);
(yyval.code) = (yyvsp[0].code); }
-#line 2436 "engines/director/lingo/lingo-gr.cpp"
+#line 2438 "engines/director/lingo/lingo-gr.cpp"
break;
case 19:
-#line 279 "engines/director/lingo/lingo-gr.y"
+#line 281 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectfieldassign);
g_lingo->codeString((yyvsp[-2].objectfield).os->c_str());
g_lingo->codeInt((yyvsp[-2].objectfield).oe);
delete (yyvsp[-2].objectfield).os;
(yyval.code) = (yyvsp[0].code); }
-#line 2447 "engines/director/lingo/lingo-gr.cpp"
+#line 2449 "engines/director/lingo/lingo-gr.cpp"
break;
case 25:
-#line 296 "engines/director/lingo/lingo-gr.y"
+#line 298 "engines/director/lingo/lingo-gr.y"
{
inst start = 0, end = 0;
WRITE_UINT32(&start, (yyvsp[-5].code) - (yyvsp[-1].code) + 1);
WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-3].code) + 2);
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = end; /* end, if cond fails */
(*g_lingo->_currentScript)[(yyvsp[-1].code)] = start; }
-#line 2458 "engines/director/lingo/lingo-gr.cpp"
+#line 2460 "engines/director/lingo/lingo-gr.cpp"
break;
case 26:
-#line 308 "engines/director/lingo/lingo-gr.y"
+#line 310 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
mVar((yyvsp[-2].s), globalCheck()); }
-#line 2466 "engines/director/lingo/lingo-gr.cpp"
+#line 2468 "engines/director/lingo/lingo-gr.cpp"
break;
case 27:
-#line 312 "engines/director/lingo/lingo-gr.y"
+#line 314 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2473 "engines/director/lingo/lingo-gr.cpp"
+#line 2475 "engines/director/lingo/lingo-gr.cpp"
break;
case 28:
-#line 315 "engines/director/lingo/lingo-gr.y"
+#line 317 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_le); }
-#line 2479 "engines/director/lingo/lingo-gr.cpp"
+#line 2481 "engines/director/lingo/lingo-gr.cpp"
break;
case 29:
-#line 315 "engines/director/lingo/lingo-gr.y"
+#line 317 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_eval);
@@ -2498,32 +2500,32 @@ yyreduce:
WRITE_UINT32(&end, pos - (yyvsp[-2].code) + 2);
(*g_lingo->_currentScript)[pos] = loop; /* final count value */
(*g_lingo->_currentScript)[(yyvsp[-2].code)] = end; }
-#line 2502 "engines/director/lingo/lingo-gr.cpp"
+#line 2504 "engines/director/lingo/lingo-gr.cpp"
break;
case 30:
-#line 339 "engines/director/lingo/lingo-gr.y"
+#line 341 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_varpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
mVar((yyvsp[-2].s), globalCheck()); }
-#line 2510 "engines/director/lingo/lingo-gr.cpp"
+#line 2512 "engines/director/lingo/lingo-gr.cpp"
break;
case 31:
-#line 343 "engines/director/lingo/lingo-gr.y"
+#line 345 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2517 "engines/director/lingo/lingo-gr.cpp"
+#line 2519 "engines/director/lingo/lingo-gr.cpp"
break;
case 32:
-#line 346 "engines/director/lingo/lingo-gr.y"
+#line 348 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ge); }
-#line 2523 "engines/director/lingo/lingo-gr.cpp"
+#line 2525 "engines/director/lingo/lingo-gr.cpp"
break;
case 33:
-#line 347 "engines/director/lingo/lingo-gr.y"
+#line 349 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_eval);
@@ -2542,32 +2544,32 @@ yyreduce:
WRITE_UINT32(&end, pos - (yyvsp[-2].code) + 2);
(*g_lingo->_currentScript)[pos] = loop; /* final count value */
(*g_lingo->_currentScript)[(yyvsp[-2].code)] = end; }
-#line 2546 "engines/director/lingo/lingo-gr.cpp"
+#line 2548 "engines/director/lingo/lingo-gr.cpp"
break;
case 34:
-#line 372 "engines/director/lingo/lingo-gr.y"
+#line 374 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_stackpeek);
g_lingo->codeInt(0);
Common::String count("count");
g_lingo->codeFunc(&count, 1);
g_lingo->code1(LC::c_intpush); // start counter
g_lingo->codeInt(1); }
-#line 2557 "engines/director/lingo/lingo-gr.cpp"
+#line 2559 "engines/director/lingo/lingo-gr.cpp"
break;
case 35:
-#line 379 "engines/director/lingo/lingo-gr.y"
+#line 381 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_stackpeek); // get counter
g_lingo->codeInt(0);
g_lingo->code1(LC::c_stackpeek); // get array size
g_lingo->codeInt(2);
g_lingo->code1(LC::c_le); }
-#line 2567 "engines/director/lingo/lingo-gr.cpp"
+#line 2569 "engines/director/lingo/lingo-gr.cpp"
break;
case 36:
-#line 385 "engines/director/lingo/lingo-gr.y"
+#line 387 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_stackpeek); // get list
g_lingo->codeInt(2);
g_lingo->code1(LC::c_stackpeek); // get counter
@@ -2578,11 +2580,11 @@ yyreduce:
g_lingo->codeString((yyvsp[-6].s)->c_str());
mVar((yyvsp[-6].s), globalCheck());
g_lingo->code1(LC::c_assign); }
-#line 2582 "engines/director/lingo/lingo-gr.cpp"
+#line 2584 "engines/director/lingo/lingo-gr.cpp"
break;
case 37:
-#line 395 "engines/director/lingo/lingo-gr.y"
+#line 397 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
@@ -2600,44 +2602,44 @@ yyreduce:
(*g_lingo->_currentScript)[jump + 1] = loop; /* final count value */
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = end; }
-#line 2604 "engines/director/lingo/lingo-gr.cpp"
+#line 2606 "engines/director/lingo/lingo-gr.cpp"
break;
case 38:
-#line 413 "engines/director/lingo/lingo-gr.y"
+#line 415 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_nextRepeat); }
-#line 2611 "engines/director/lingo/lingo-gr.cpp"
+#line 2613 "engines/director/lingo/lingo-gr.cpp"
break;
case 39:
-#line 415 "engines/director/lingo/lingo-gr.y"
+#line 417 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_whencode);
g_lingo->codeString((yyvsp[-2].s)->c_str()); }
-#line 2619 "engines/director/lingo/lingo-gr.cpp"
+#line 2621 "engines/director/lingo/lingo-gr.cpp"
break;
case 40:
-#line 418 "engines/director/lingo/lingo-gr.y"
+#line 420 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_telldone); }
-#line 2625 "engines/director/lingo/lingo-gr.cpp"
+#line 2627 "engines/director/lingo/lingo-gr.cpp"
break;
case 41:
-#line 419 "engines/director/lingo/lingo-gr.y"
+#line 421 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_telldone); }
-#line 2631 "engines/director/lingo/lingo-gr.cpp"
+#line 2633 "engines/director/lingo/lingo-gr.cpp"
break;
case 42:
-#line 421 "engines/director/lingo/lingo-gr.y"
+#line 423 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_tell); }
-#line 2637 "engines/director/lingo/lingo-gr.cpp"
+#line 2639 "engines/director/lingo/lingo-gr.cpp"
break;
case 43:
-#line 423 "engines/director/lingo/lingo-gr.y"
+#line 425 "engines/director/lingo/lingo-gr.y"
{
inst else1 = 0, end3 = 0;
WRITE_UINT32(&else1, (yyvsp[-3].code) + 1 - (yyvsp[-6].code) + 1);
@@ -2645,11 +2647,11 @@ yyreduce:
(*g_lingo->_currentScript)[(yyvsp[-6].code)] = else1; /* elsepart */
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = end3; /* end, if cond fails */
g_lingo->processIf((yyvsp[-3].code), (yyvsp[-1].code)); }
-#line 2649 "engines/director/lingo/lingo-gr.cpp"
+#line 2651 "engines/director/lingo/lingo-gr.cpp"
break;
case 44:
-#line 430 "engines/director/lingo/lingo-gr.y"
+#line 432 "engines/director/lingo/lingo-gr.y"
{
inst else1 = 0, end = 0;
WRITE_UINT32(&else1, (yyvsp[-5].code) + 1 - (yyvsp[-8].code) + 1);
@@ -2657,107 +2659,107 @@ yyreduce:
(*g_lingo->_currentScript)[(yyvsp[-8].code)] = else1; /* elsepart */
(*g_lingo->_currentScript)[(yyvsp[-5].code)] = end; /* end, if cond fails */
g_lingo->processIf((yyvsp[-5].code), (yyvsp[-1].code)); }
-#line 2661 "engines/director/lingo/lingo-gr.cpp"
+#line 2663 "engines/director/lingo/lingo-gr.cpp"
break;
case 47:
-#line 441 "engines/director/lingo/lingo-gr.y"
+#line 443 "engines/director/lingo/lingo-gr.y"
{
inst else1 = 0;
WRITE_UINT32(&else1, (yyvsp[0].code) + 1 - (yyvsp[-3].code) + 1);
(*g_lingo->_currentScript)[(yyvsp[-3].code)] = else1; /* end, if cond fails */
g_lingo->codeLabel((yyvsp[0].code)); }
-#line 2671 "engines/director/lingo/lingo-gr.cpp"
+#line 2673 "engines/director/lingo/lingo-gr.cpp"
break;
case 48:
-#line 447 "engines/director/lingo/lingo-gr.y"
+#line 449 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code2(LC::c_jumpifz, 0);
(yyval.code) = g_lingo->_currentScript->size() - 1; }
-#line 2679 "engines/director/lingo/lingo-gr.cpp"
+#line 2681 "engines/director/lingo/lingo-gr.cpp"
break;
case 49:
-#line 451 "engines/director/lingo/lingo-gr.y"
+#line 453 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code2(LC::c_jump, 0);
(yyval.code) = g_lingo->_currentScript->size() - 1; }
-#line 2687 "engines/director/lingo/lingo-gr.cpp"
+#line 2689 "engines/director/lingo/lingo-gr.cpp"
break;
case 50:
-#line 455 "engines/director/lingo/lingo-gr.y"
+#line 457 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_assign);
(yyval.code) = g_lingo->_currentScript->size() - 1; }
-#line 2695 "engines/director/lingo/lingo-gr.cpp"
+#line 2697 "engines/director/lingo/lingo-gr.cpp"
break;
case 51:
-#line 459 "engines/director/lingo/lingo-gr.y"
+#line 461 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeLabel(0); }
-#line 2702 "engines/director/lingo/lingo-gr.cpp"
+#line 2704 "engines/director/lingo/lingo-gr.cpp"
break;
case 52:
-#line 462 "engines/director/lingo/lingo-gr.y"
+#line 464 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2708 "engines/director/lingo/lingo-gr.cpp"
+#line 2710 "engines/director/lingo/lingo-gr.cpp"
break;
case 53:
-#line 464 "engines/director/lingo/lingo-gr.y"
+#line 466 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2714 "engines/director/lingo/lingo-gr.cpp"
+#line 2716 "engines/director/lingo/lingo-gr.cpp"
break;
case 56:
-#line 468 "engines/director/lingo/lingo-gr.y"
+#line 470 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_intpush);
g_lingo->codeInt((yyvsp[0].i)); }
-#line 2722 "engines/director/lingo/lingo-gr.cpp"
+#line 2724 "engines/director/lingo/lingo-gr.cpp"
break;
case 57:
-#line 471 "engines/director/lingo/lingo-gr.y"
+#line 473 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_floatpush);
g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2730 "engines/director/lingo/lingo-gr.cpp"
+#line 2732 "engines/director/lingo/lingo-gr.cpp"
break;
case 58:
-#line 474 "engines/director/lingo/lingo-gr.y"
+#line 476 "engines/director/lingo/lingo-gr.y"
{ // D3
(yyval.code) = g_lingo->code1(LC::c_symbolpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2739 "engines/director/lingo/lingo-gr.cpp"
+#line 2741 "engines/director/lingo/lingo-gr.cpp"
break;
case 59:
-#line 478 "engines/director/lingo/lingo-gr.y"
+#line 480 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_stringpush);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2748 "engines/director/lingo/lingo-gr.cpp"
+#line 2750 "engines/director/lingo/lingo-gr.cpp"
break;
case 60:
-#line 482 "engines/director/lingo/lingo-gr.y"
+#line 484 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_eval);
g_lingo->codeString((yyvsp[0].s)->c_str());
delete (yyvsp[0].s); }
-#line 2757 "engines/director/lingo/lingo-gr.cpp"
+#line 2759 "engines/director/lingo/lingo-gr.cpp"
break;
case 61:
-#line 486 "engines/director/lingo/lingo-gr.y"
+#line 488 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2766,28 +2768,28 @@ yyreduce:
WRITE_UINT32(&e, (yyvsp[0].e)[0]);
WRITE_UINT32(&f, (yyvsp[0].e)[1]);
g_lingo->code2(e, f); }
-#line 2770 "engines/director/lingo/lingo-gr.cpp"
+#line 2772 "engines/director/lingo/lingo-gr.cpp"
break;
case 62:
-#line 494 "engines/director/lingo/lingo-gr.y"
+#line 496 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->code1(LC::c_theentitypush);
inst e = 0, f = 0;
WRITE_UINT32(&e, (yyvsp[-1].e)[0]);
WRITE_UINT32(&f, (yyvsp[-1].e)[1]);
g_lingo->code2(e, f); }
-#line 2781 "engines/director/lingo/lingo-gr.cpp"
+#line 2783 "engines/director/lingo/lingo-gr.cpp"
break;
case 63:
-#line 500 "engines/director/lingo/lingo-gr.y"
+#line 502 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[-1].code); }
-#line 2787 "engines/director/lingo/lingo-gr.cpp"
+#line 2789 "engines/director/lingo/lingo-gr.cpp"
break;
case 65:
-#line 502 "engines/director/lingo/lingo-gr.y"
+#line 504 "engines/director/lingo/lingo-gr.y"
{
// Director parser till D3 was forgiving for any hanging parentheses
if (g_lingo->_ignoreError) {
@@ -2798,369 +2800,367 @@ yyreduce:
yyerrok;
}
}
-#line 2802 "engines/director/lingo/lingo-gr.cpp"
+#line 2804 "engines/director/lingo/lingo-gr.cpp"
break;
case 66:
-#line 513 "engines/director/lingo/lingo-gr.y"
+#line 515 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); }
-#line 2808 "engines/director/lingo/lingo-gr.cpp"
+#line 2810 "engines/director/lingo/lingo-gr.cpp"
break;
case 68:
-#line 515 "engines/director/lingo/lingo-gr.y"
+#line 517 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 2816 "engines/director/lingo/lingo-gr.cpp"
+#line 2818 "engines/director/lingo/lingo-gr.cpp"
break;
case 69:
-#line 518 "engines/director/lingo/lingo-gr.y"
+#line 520 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
delete (yyvsp[-1].s); }
-#line 2824 "engines/director/lingo/lingo-gr.cpp"
+#line 2826 "engines/director/lingo/lingo-gr.cpp"
break;
case 70:
-#line 521 "engines/director/lingo/lingo-gr.y"
+#line 523 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_lazyeval);
g_lingo->codeString((yyvsp[-1].s)->c_str());
g_lingo->codeFunc((yyvsp[-3].s), 1);
delete (yyvsp[-3].s);
delete (yyvsp[-1].s); }
-#line 2835 "engines/director/lingo/lingo-gr.cpp"
+#line 2837 "engines/director/lingo/lingo-gr.cpp"
break;
case 71:
-#line 527 "engines/director/lingo/lingo-gr.y"
+#line 529 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lazyeval); g_lingo->codeString((yyvsp[-1].s)->c_str()); }
-#line 2841 "engines/director/lingo/lingo-gr.cpp"
+#line 2843 "engines/director/lingo/lingo-gr.cpp"
break;
case 72:
-#line 528 "engines/director/lingo/lingo-gr.y"
+#line 530 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-6].s), (yyvsp[-1].narg) + 1);
delete (yyvsp[-6].s);
delete (yyvsp[-4].s); }
-#line 2850 "engines/director/lingo/lingo-gr.cpp"
+#line 2852 "engines/director/lingo/lingo-gr.cpp"
break;
case 73:
-#line 532 "engines/director/lingo/lingo-gr.y"
+#line 534 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 2858 "engines/director/lingo/lingo-gr.cpp"
+#line 2860 "engines/director/lingo/lingo-gr.cpp"
break;
case 74:
-#line 535 "engines/director/lingo/lingo-gr.y"
+#line 537 "engines/director/lingo/lingo-gr.y"
{
(yyval.code) = g_lingo->codeFunc((yyvsp[-2].s), 1);
delete (yyvsp[-2].s); }
-#line 2866 "engines/director/lingo/lingo-gr.cpp"
+#line 2868 "engines/director/lingo/lingo-gr.cpp"
break;
case 75:
-#line 538 "engines/director/lingo/lingo-gr.y"
+#line 540 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectfieldpush);
g_lingo->codeString((yyvsp[0].objectfield).os->c_str());
g_lingo->codeInt((yyvsp[0].objectfield).oe);
delete (yyvsp[0].objectfield).os; }
-#line 2876 "engines/director/lingo/lingo-gr.cpp"
+#line 2878 "engines/director/lingo/lingo-gr.cpp"
break;
case 76:
-#line 543 "engines/director/lingo/lingo-gr.y"
+#line 545 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_objectrefpush);
g_lingo->codeString((yyvsp[0].objectref).obj->c_str());
g_lingo->codeString((yyvsp[0].objectref).field->c_str());
delete (yyvsp[0].objectref).obj;
delete (yyvsp[0].objectref).field; }
-#line 2887 "engines/director/lingo/lingo-gr.cpp"
+#line 2889 "engines/director/lingo/lingo-gr.cpp"
break;
case 78:
-#line 550 "engines/director/lingo/lingo-gr.y"
+#line 552 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_add); }
-#line 2893 "engines/director/lingo/lingo-gr.cpp"
+#line 2895 "engines/director/lingo/lingo-gr.cpp"
break;
case 79:
-#line 551 "engines/director/lingo/lingo-gr.y"
+#line 553 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_sub); }
-#line 2899 "engines/director/lingo/lingo-gr.cpp"
+#line 2901 "engines/director/lingo/lingo-gr.cpp"
break;
case 80:
-#line 552 "engines/director/lingo/lingo-gr.y"
+#line 554 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_mul); }
-#line 2905 "engines/director/lingo/lingo-gr.cpp"
+#line 2907 "engines/director/lingo/lingo-gr.cpp"
break;
case 81:
-#line 553 "engines/director/lingo/lingo-gr.y"
+#line 555 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_div); }
-#line 2911 "engines/director/lingo/lingo-gr.cpp"
+#line 2913 "engines/director/lingo/lingo-gr.cpp"
break;
case 82:
-#line 554 "engines/director/lingo/lingo-gr.y"
+#line 556 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_mod); }
-#line 2917 "engines/director/lingo/lingo-gr.cpp"
+#line 2919 "engines/director/lingo/lingo-gr.cpp"
break;
case 83:
-#line 555 "engines/director/lingo/lingo-gr.y"
+#line 557 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gt); }
-#line 2923 "engines/director/lingo/lingo-gr.cpp"
+#line 2925 "engines/director/lingo/lingo-gr.cpp"
break;
case 84:
-#line 556 "engines/director/lingo/lingo-gr.y"
+#line 558 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lt); }
-#line 2929 "engines/director/lingo/lingo-gr.cpp"
+#line 2931 "engines/director/lingo/lingo-gr.cpp"
break;
case 85:
-#line 557 "engines/director/lingo/lingo-gr.y"
+#line 559 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_eq); }
-#line 2935 "engines/director/lingo/lingo-gr.cpp"
+#line 2937 "engines/director/lingo/lingo-gr.cpp"
break;
case 86:
-#line 558 "engines/director/lingo/lingo-gr.y"
+#line 560 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_neq); }
-#line 2941 "engines/director/lingo/lingo-gr.cpp"
+#line 2943 "engines/director/lingo/lingo-gr.cpp"
break;
case 87:
-#line 559 "engines/director/lingo/lingo-gr.y"
+#line 561 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ge); }
-#line 2947 "engines/director/lingo/lingo-gr.cpp"
+#line 2949 "engines/director/lingo/lingo-gr.cpp"
break;
case 88:
-#line 560 "engines/director/lingo/lingo-gr.y"
+#line 562 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_le); }
-#line 2953 "engines/director/lingo/lingo-gr.cpp"
+#line 2955 "engines/director/lingo/lingo-gr.cpp"
break;
case 89:
-#line 561 "engines/director/lingo/lingo-gr.y"
+#line 563 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_and); }
-#line 2959 "engines/director/lingo/lingo-gr.cpp"
+#line 2961 "engines/director/lingo/lingo-gr.cpp"
break;
case 90:
-#line 562 "engines/director/lingo/lingo-gr.y"
+#line 564 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_or); }
-#line 2965 "engines/director/lingo/lingo-gr.cpp"
+#line 2967 "engines/director/lingo/lingo-gr.cpp"
break;
case 91:
-#line 563 "engines/director/lingo/lingo-gr.y"
+#line 565 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_not); }
-#line 2971 "engines/director/lingo/lingo-gr.cpp"
+#line 2973 "engines/director/lingo/lingo-gr.cpp"
break;
case 92:
-#line 564 "engines/director/lingo/lingo-gr.y"
+#line 566 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_ampersand); }
-#line 2977 "engines/director/lingo/lingo-gr.cpp"
+#line 2979 "engines/director/lingo/lingo-gr.cpp"
break;
case 93:
-#line 565 "engines/director/lingo/lingo-gr.y"
+#line 567 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_concat); }
-#line 2983 "engines/director/lingo/lingo-gr.cpp"
+#line 2985 "engines/director/lingo/lingo-gr.cpp"
break;
case 94:
-#line 566 "engines/director/lingo/lingo-gr.y"
+#line 568 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_contains); }
-#line 2989 "engines/director/lingo/lingo-gr.cpp"
+#line 2991 "engines/director/lingo/lingo-gr.cpp"
break;
case 95:
-#line 567 "engines/director/lingo/lingo-gr.y"
+#line 569 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_starts); }
-#line 2995 "engines/director/lingo/lingo-gr.cpp"
+#line 2997 "engines/director/lingo/lingo-gr.cpp"
break;
case 96:
-#line 568 "engines/director/lingo/lingo-gr.y"
+#line 570 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); }
-#line 3001 "engines/director/lingo/lingo-gr.cpp"
+#line 3003 "engines/director/lingo/lingo-gr.cpp"
break;
case 97:
-#line 569 "engines/director/lingo/lingo-gr.y"
+#line 571 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 3007 "engines/director/lingo/lingo-gr.cpp"
+#line 3009 "engines/director/lingo/lingo-gr.cpp"
break;
case 98:
-#line 570 "engines/director/lingo/lingo-gr.y"
+#line 572 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_intersects); }
-#line 3013 "engines/director/lingo/lingo-gr.cpp"
+#line 3015 "engines/director/lingo/lingo-gr.cpp"
break;
case 99:
-#line 571 "engines/director/lingo/lingo-gr.y"
+#line 573 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_within); }
-#line 3019 "engines/director/lingo/lingo-gr.cpp"
+#line 3021 "engines/director/lingo/lingo-gr.cpp"
break;
case 100:
-#line 573 "engines/director/lingo/lingo-gr.y"
+#line 575 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_charOf); }
-#line 3025 "engines/director/lingo/lingo-gr.cpp"
+#line 3027 "engines/director/lingo/lingo-gr.cpp"
break;
case 101:
-#line 574 "engines/director/lingo/lingo-gr.y"
+#line 576 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_charToOf); }
-#line 3031 "engines/director/lingo/lingo-gr.cpp"
+#line 3033 "engines/director/lingo/lingo-gr.cpp"
break;
case 102:
-#line 575 "engines/director/lingo/lingo-gr.y"
+#line 577 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_itemOf); }
-#line 3037 "engines/director/lingo/lingo-gr.cpp"
+#line 3039 "engines/director/lingo/lingo-gr.cpp"
break;
case 103:
-#line 576 "engines/director/lingo/lingo-gr.y"
+#line 578 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_itemToOf); }
-#line 3043 "engines/director/lingo/lingo-gr.cpp"
+#line 3045 "engines/director/lingo/lingo-gr.cpp"
break;
case 104:
-#line 577 "engines/director/lingo/lingo-gr.y"
+#line 579 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lineOf); }
-#line 3049 "engines/director/lingo/lingo-gr.cpp"
+#line 3051 "engines/director/lingo/lingo-gr.cpp"
break;
case 105:
-#line 578 "engines/director/lingo/lingo-gr.y"
+#line 580 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_lineToOf); }
-#line 3055 "engines/director/lingo/lingo-gr.cpp"
+#line 3057 "engines/director/lingo/lingo-gr.cpp"
break;
case 106:
-#line 579 "engines/director/lingo/lingo-gr.y"
+#line 581 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_wordOf); }
-#line 3061 "engines/director/lingo/lingo-gr.cpp"
+#line 3063 "engines/director/lingo/lingo-gr.cpp"
break;
case 107:
-#line 580 "engines/director/lingo/lingo-gr.y"
+#line 582 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_wordToOf); }
-#line 3067 "engines/director/lingo/lingo-gr.cpp"
+#line 3069 "engines/director/lingo/lingo-gr.cpp"
break;
case 108:
-#line 582 "engines/director/lingo/lingo-gr.y"
+#line 584 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), 1);
delete (yyvsp[-1].s); }
-#line 3075 "engines/director/lingo/lingo-gr.cpp"
+#line 3077 "engines/director/lingo/lingo-gr.cpp"
break;
case 110:
-#line 587 "engines/director/lingo/lingo-gr.y"
+#line 589 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_printtop); }
-#line 3081 "engines/director/lingo/lingo-gr.cpp"
+#line 3083 "engines/director/lingo/lingo-gr.cpp"
break;
case 113:
-#line 590 "engines/director/lingo/lingo-gr.y"
+#line 592 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_exitRepeat); }
-#line 3087 "engines/director/lingo/lingo-gr.cpp"
+#line 3089 "engines/director/lingo/lingo-gr.cpp"
break;
case 114:
-#line 591 "engines/director/lingo/lingo-gr.y"
+#line 593 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_procret); }
-#line 3093 "engines/director/lingo/lingo-gr.cpp"
+#line 3095 "engines/director/lingo/lingo-gr.cpp"
break;
case 115:
-#line 592 "engines/director/lingo/lingo-gr.y"
+#line 594 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3099 "engines/director/lingo/lingo-gr.cpp"
+#line 3101 "engines/director/lingo/lingo-gr.cpp"
break;
case 116:
-#line 592 "engines/director/lingo/lingo-gr.y"
+#line 594 "engines/director/lingo/lingo-gr.y"
{ inNone(); }
-#line 3105 "engines/director/lingo/lingo-gr.cpp"
+#line 3107 "engines/director/lingo/lingo-gr.cpp"
break;
case 117:
-#line 593 "engines/director/lingo/lingo-gr.y"
+#line 595 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3111 "engines/director/lingo/lingo-gr.cpp"
+#line 3113 "engines/director/lingo/lingo-gr.cpp"
break;
case 118:
-#line 593 "engines/director/lingo/lingo-gr.y"
+#line 595 "engines/director/lingo/lingo-gr.y"
{ inNone(); }
-#line 3117 "engines/director/lingo/lingo-gr.cpp"
+#line 3119 "engines/director/lingo/lingo-gr.cpp"
break;
case 119:
-#line 594 "engines/director/lingo/lingo-gr.y"
+#line 596 "engines/director/lingo/lingo-gr.y"
{ inArgs(); }
-#line 3123 "engines/director/lingo/lingo-gr.cpp"
+#line 3125 "engines/director/lingo/lingo-gr.cpp"
break;
case 120:
-#line 594 "engines/director/lingo/lingo-gr.y"
+#line 596 "engines/director/lingo/lingo-gr.y"
{ inNone(); }
-#line 3129 "engines/director/lingo/lingo-gr.cpp"
+#line 3131 "engines/director/lingo/lingo-gr.cpp"
break;
case 121:
-#line 595 "engines/director/lingo/lingo-gr.y"
+#line 597 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
delete (yyvsp[-3].s); }
-#line 3137 "engines/director/lingo/lingo-gr.cpp"
+#line 3139 "engines/director/lingo/lingo-gr.cpp"
break;
case 122:
-#line 598 "engines/director/lingo/lingo-gr.y"
+#line 600 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
delete (yyvsp[-1].s); }
-#line 3145 "engines/director/lingo/lingo-gr.cpp"
+#line 3147 "engines/director/lingo/lingo-gr.cpp"
break;
case 123:
-#line 601 "engines/director/lingo/lingo-gr.y"
+#line 603 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_open); }
-#line 3151 "engines/director/lingo/lingo-gr.cpp"
+#line 3153 "engines/director/lingo/lingo-gr.cpp"
break;
case 124:
-#line 602 "engines/director/lingo/lingo-gr.y"
+#line 604 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code2(LC::c_voidpush, LC::c_open); }
-#line 3157 "engines/director/lingo/lingo-gr.cpp"
+#line 3159 "engines/director/lingo/lingo-gr.cpp"
break;
case 125:
-#line 604 "engines/director/lingo/lingo-gr.y"
+#line 606 "engines/director/lingo/lingo-gr.y"
{
- g_lingo->code1(LC::c_global);
- g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarGlobal);
delete (yyvsp[0].s); }
#line 3167 "engines/director/lingo/lingo-gr.cpp"
@@ -3169,182 +3169,180 @@ yyreduce:
case 126:
#line 609 "engines/director/lingo/lingo-gr.y"
{
- g_lingo->code1(LC::c_global);
- g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarGlobal);
delete (yyvsp[0].s); }
-#line 3177 "engines/director/lingo/lingo-gr.cpp"
+#line 3175 "engines/director/lingo/lingo-gr.cpp"
break;
case 127:
-#line 615 "engines/director/lingo/lingo-gr.y"
+#line 613 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_property);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarProperty);
delete (yyvsp[0].s); }
-#line 3187 "engines/director/lingo/lingo-gr.cpp"
+#line 3185 "engines/director/lingo/lingo-gr.cpp"
break;
case 128:
-#line 620 "engines/director/lingo/lingo-gr.y"
+#line 618 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_property);
g_lingo->codeString((yyvsp[0].s)->c_str());
mVar((yyvsp[0].s), kVarProperty);
delete (yyvsp[0].s); }
-#line 3197 "engines/director/lingo/lingo-gr.cpp"
+#line 3195 "engines/director/lingo/lingo-gr.cpp"
break;
case 129:
-#line 626 "engines/director/lingo/lingo-gr.y"
+#line 624 "engines/director/lingo/lingo-gr.y"
{
mVar((yyvsp[0].s), kVarInstance);
delete (yyvsp[0].s); }
-#line 3205 "engines/director/lingo/lingo-gr.cpp"
+#line 3203 "engines/director/lingo/lingo-gr.cpp"
break;
case 130:
-#line 629 "engines/director/lingo/lingo-gr.y"
+#line 627 "engines/director/lingo/lingo-gr.y"
{
mVar((yyvsp[0].s), kVarInstance);
delete (yyvsp[0].s); }
-#line 3213 "engines/director/lingo/lingo-gr.cpp"
+#line 3211 "engines/director/lingo/lingo-gr.cpp"
break;
case 131:
-#line 640 "engines/director/lingo/lingo-gr.y"
+#line 638 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotoloop); }
-#line 3219 "engines/director/lingo/lingo-gr.cpp"
+#line 3217 "engines/director/lingo/lingo-gr.cpp"
break;
case 132:
-#line 641 "engines/director/lingo/lingo-gr.y"
+#line 639 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotonext); }
-#line 3225 "engines/director/lingo/lingo-gr.cpp"
+#line 3223 "engines/director/lingo/lingo-gr.cpp"
break;
case 133:
-#line 642 "engines/director/lingo/lingo-gr.y"
+#line 640 "engines/director/lingo/lingo-gr.y"
{ g_lingo->code1(LC::c_gotoprevious); }
-#line 3231 "engines/director/lingo/lingo-gr.cpp"
+#line 3229 "engines/director/lingo/lingo-gr.cpp"
break;
case 134:
-#line 643 "engines/director/lingo/lingo-gr.y"
+#line 641 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(1);
g_lingo->code1(LC::c_goto); }
-#line 3240 "engines/director/lingo/lingo-gr.cpp"
+#line 3238 "engines/director/lingo/lingo-gr.cpp"
break;
case 135:
-#line 647 "engines/director/lingo/lingo-gr.y"
+#line 645 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(3);
g_lingo->code1(LC::c_goto); }
-#line 3249 "engines/director/lingo/lingo-gr.cpp"
+#line 3247 "engines/director/lingo/lingo-gr.cpp"
break;
case 136:
-#line 651 "engines/director/lingo/lingo-gr.y"
+#line 649 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(2);
g_lingo->code1(LC::c_goto); }
-#line 3258 "engines/director/lingo/lingo-gr.cpp"
+#line 3256 "engines/director/lingo/lingo-gr.cpp"
break;
case 139:
-#line 659 "engines/director/lingo/lingo-gr.y"
+#line 657 "engines/director/lingo/lingo-gr.y"
{ // "play #done" is also caught by this
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(1);
g_lingo->code1(LC::c_play); }
-#line 3267 "engines/director/lingo/lingo-gr.cpp"
+#line 3265 "engines/director/lingo/lingo-gr.cpp"
break;
case 140:
-#line 663 "engines/director/lingo/lingo-gr.y"
+#line 661 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(3);
g_lingo->code1(LC::c_play); }
-#line 3276 "engines/director/lingo/lingo-gr.cpp"
+#line 3274 "engines/director/lingo/lingo-gr.cpp"
break;
case 141:
-#line 667 "engines/director/lingo/lingo-gr.y"
+#line 665 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_intpush);
g_lingo->codeInt(2);
g_lingo->code1(LC::c_play); }
-#line 3285 "engines/director/lingo/lingo-gr.cpp"
+#line 3283 "engines/director/lingo/lingo-gr.cpp"
break;
case 142:
-#line 671 "engines/director/lingo/lingo-gr.y"
+#line 669 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeSetImmediate(true); }
-#line 3291 "engines/director/lingo/lingo-gr.cpp"
+#line 3289 "engines/director/lingo/lingo-gr.cpp"
break;
case 143:
-#line 671 "engines/director/lingo/lingo-gr.y"
+#line 669 "engines/director/lingo/lingo-gr.y"
{
g_lingo->codeSetImmediate(false);
g_lingo->codeFunc((yyvsp[-2].s), (yyvsp[0].narg));
delete (yyvsp[-2].s); }
-#line 3300 "engines/director/lingo/lingo-gr.cpp"
+#line 3298 "engines/director/lingo/lingo-gr.cpp"
break;
case 144:
-#line 701 "engines/director/lingo/lingo-gr.y"
+#line 699 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3306 "engines/director/lingo/lingo-gr.cpp"
+#line 3304 "engines/director/lingo/lingo-gr.cpp"
break;
case 145:
-#line 701 "engines/director/lingo/lingo-gr.y"
+#line 699 "engines/director/lingo/lingo-gr.y"
{ g_lingo->_currentFactory = NULL; }
-#line 3312 "engines/director/lingo/lingo-gr.cpp"
+#line 3310 "engines/director/lingo/lingo-gr.cpp"
break;
case 146:
-#line 702 "engines/director/lingo/lingo-gr.y"
+#line 700 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg));
endDef();
delete (yyvsp[-6].s); }
-#line 3322 "engines/director/lingo/lingo-gr.cpp"
+#line 3320 "engines/director/lingo/lingo-gr.cpp"
break;
case 147:
-#line 707 "engines/director/lingo/lingo-gr.y"
+#line 705 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 3328 "engines/director/lingo/lingo-gr.cpp"
+#line 3326 "engines/director/lingo/lingo-gr.cpp"
break;
case 148:
-#line 708 "engines/director/lingo/lingo-gr.y"
+#line 706 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3334 "engines/director/lingo/lingo-gr.cpp"
+#line 3332 "engines/director/lingo/lingo-gr.cpp"
break;
case 149:
-#line 709 "engines/director/lingo/lingo-gr.y"
+#line 707 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg), g_lingo->_currentFactory);
endDef();
delete (yyvsp[-6].s); }
-#line 3344 "engines/director/lingo/lingo-gr.cpp"
+#line 3342 "engines/director/lingo/lingo-gr.cpp"
break;
case 150:
-#line 714 "engines/director/lingo/lingo-gr.y"
+#line 712 "engines/director/lingo/lingo-gr.y"
{ // D3
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-7].s), (yyvsp[-6].code), (yyvsp[-5].narg));
@@ -3353,70 +3351,70 @@ yyreduce:
checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
delete (yyvsp[-7].s);
delete (yyvsp[-1].s); }
-#line 3357 "engines/director/lingo/lingo-gr.cpp"
+#line 3355 "engines/director/lingo/lingo-gr.cpp"
break;
case 151:
-#line 722 "engines/director/lingo/lingo-gr.y"
+#line 720 "engines/director/lingo/lingo-gr.y"
{ // D4. No 'end' clause
g_lingo->code1(LC::c_procret);
g_lingo->codeDefine(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
endDef();
delete (yyvsp[-5].s); }
-#line 3367 "engines/director/lingo/lingo-gr.cpp"
+#line 3365 "engines/director/lingo/lingo-gr.cpp"
break;
case 152:
-#line 728 "engines/director/lingo/lingo-gr.y"
+#line 726 "engines/director/lingo/lingo-gr.y"
{ startDef(); }
-#line 3373 "engines/director/lingo/lingo-gr.cpp"
+#line 3371 "engines/director/lingo/lingo-gr.cpp"
break;
case 153:
-#line 728 "engines/director/lingo/lingo-gr.y"
+#line 726 "engines/director/lingo/lingo-gr.y"
{
(yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory = NULL; }
-#line 3380 "engines/director/lingo/lingo-gr.cpp"
+#line 3378 "engines/director/lingo/lingo-gr.cpp"
break;
case 154:
-#line 731 "engines/director/lingo/lingo-gr.y"
+#line 729 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 0; }
-#line 3386 "engines/director/lingo/lingo-gr.cpp"
+#line 3384 "engines/director/lingo/lingo-gr.cpp"
break;
case 155:
-#line 732 "engines/director/lingo/lingo-gr.y"
+#line 730 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); (yyval.narg) = 1; delete (yyvsp[0].s); }
-#line 3392 "engines/director/lingo/lingo-gr.cpp"
+#line 3390 "engines/director/lingo/lingo-gr.cpp"
break;
case 156:
-#line 733 "engines/director/lingo/lingo-gr.y"
+#line 731 "engines/director/lingo/lingo-gr.y"
{ g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
-#line 3398 "engines/director/lingo/lingo-gr.cpp"
+#line 3396 "engines/director/lingo/lingo-gr.cpp"
break;
case 158:
-#line 736 "engines/director/lingo/lingo-gr.y"
+#line 734 "engines/director/lingo/lingo-gr.y"
{ delete (yyvsp[0].s); }
-#line 3404 "engines/director/lingo/lingo-gr.cpp"
+#line 3402 "engines/director/lingo/lingo-gr.cpp"
break;
case 159:
-#line 737 "engines/director/lingo/lingo-gr.y"
+#line 735 "engines/director/lingo/lingo-gr.y"
{ delete (yyvsp[0].s); }
-#line 3410 "engines/director/lingo/lingo-gr.cpp"
+#line 3408 "engines/director/lingo/lingo-gr.cpp"
break;
case 160:
-#line 739 "engines/director/lingo/lingo-gr.y"
+#line 737 "engines/director/lingo/lingo-gr.y"
{ inDef(); }
-#line 3416 "engines/director/lingo/lingo-gr.cpp"
+#line 3414 "engines/director/lingo/lingo-gr.cpp"
break;
case 161:
-#line 741 "engines/director/lingo/lingo-gr.y"
+#line 739 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_call);
g_lingo->codeString((yyvsp[-1].s)->c_str());
@@ -3424,113 +3422,113 @@ yyreduce:
WRITE_UINT32(&numpar, (yyvsp[0].narg));
g_lingo->code1(numpar);
delete (yyvsp[-1].s); }
-#line 3428 "engines/director/lingo/lingo-gr.cpp"
+#line 3426 "engines/director/lingo/lingo-gr.cpp"
break;
case 162:
-#line 749 "engines/director/lingo/lingo-gr.y"
+#line 747 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 0; }
-#line 3434 "engines/director/lingo/lingo-gr.cpp"
+#line 3432 "engines/director/lingo/lingo-gr.cpp"
break;
case 163:
-#line 750 "engines/director/lingo/lingo-gr.y"
+#line 748 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3440 "engines/director/lingo/lingo-gr.cpp"
+#line 3438 "engines/director/lingo/lingo-gr.cpp"
break;
case 164:
-#line 751 "engines/director/lingo/lingo-gr.y"
+#line 749 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3446 "engines/director/lingo/lingo-gr.cpp"
+#line 3444 "engines/director/lingo/lingo-gr.cpp"
break;
case 165:
-#line 753 "engines/director/lingo/lingo-gr.y"
+#line 751 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3452 "engines/director/lingo/lingo-gr.cpp"
+#line 3450 "engines/director/lingo/lingo-gr.cpp"
break;
case 166:
-#line 754 "engines/director/lingo/lingo-gr.y"
+#line 752 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3458 "engines/director/lingo/lingo-gr.cpp"
+#line 3456 "engines/director/lingo/lingo-gr.cpp"
break;
case 167:
-#line 756 "engines/director/lingo/lingo-gr.y"
+#line 754 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = (yyvsp[-1].code); }
-#line 3464 "engines/director/lingo/lingo-gr.cpp"
+#line 3462 "engines/director/lingo/lingo-gr.cpp"
break;
case 168:
-#line 758 "engines/director/lingo/lingo-gr.y"
+#line 756 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3470 "engines/director/lingo/lingo-gr.cpp"
+#line 3468 "engines/director/lingo/lingo-gr.cpp"
break;
case 169:
-#line 759 "engines/director/lingo/lingo-gr.y"
+#line 757 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3476 "engines/director/lingo/lingo-gr.cpp"
+#line 3474 "engines/director/lingo/lingo-gr.cpp"
break;
case 170:
-#line 760 "engines/director/lingo/lingo-gr.y"
+#line 758 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3482 "engines/director/lingo/lingo-gr.cpp"
+#line 3480 "engines/director/lingo/lingo-gr.cpp"
break;
case 171:
-#line 761 "engines/director/lingo/lingo-gr.y"
+#line 759 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3488 "engines/director/lingo/lingo-gr.cpp"
+#line 3486 "engines/director/lingo/lingo-gr.cpp"
break;
case 172:
-#line 763 "engines/director/lingo/lingo-gr.y"
+#line 761 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3494 "engines/director/lingo/lingo-gr.cpp"
+#line 3492 "engines/director/lingo/lingo-gr.cpp"
break;
case 173:
-#line 764 "engines/director/lingo/lingo-gr.y"
+#line 762 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3500 "engines/director/lingo/lingo-gr.cpp"
+#line 3498 "engines/director/lingo/lingo-gr.cpp"
break;
case 174:
-#line 766 "engines/director/lingo/lingo-gr.y"
+#line 764 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = 1; }
-#line 3506 "engines/director/lingo/lingo-gr.cpp"
+#line 3504 "engines/director/lingo/lingo-gr.cpp"
break;
case 175:
-#line 767 "engines/director/lingo/lingo-gr.y"
+#line 765 "engines/director/lingo/lingo-gr.y"
{ (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3512 "engines/director/lingo/lingo-gr.cpp"
+#line 3510 "engines/director/lingo/lingo-gr.cpp"
break;
case 176:
-#line 769 "engines/director/lingo/lingo-gr.y"
+#line 767 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_symbolpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
delete (yyvsp[-2].s); }
-#line 3521 "engines/director/lingo/lingo-gr.cpp"
+#line 3519 "engines/director/lingo/lingo-gr.cpp"
break;
case 177:
-#line 773 "engines/director/lingo/lingo-gr.y"
+#line 771 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(LC::c_stringpush);
g_lingo->codeString((yyvsp[-2].s)->c_str());
delete (yyvsp[-2].s); }
-#line 3530 "engines/director/lingo/lingo-gr.cpp"
+#line 3528 "engines/director/lingo/lingo-gr.cpp"
break;
-#line 3534 "engines/director/lingo/lingo-gr.cpp"
+#line 3532 "engines/director/lingo/lingo-gr.cpp"
default: break;
}
@@ -3729,7 +3727,7 @@ yyreturn:
return yyresult;
}
-#line 779 "engines/director/lingo/lingo-gr.y"
+#line 777 "engines/director/lingo/lingo-gr.y"
int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index d55c42a3c0..4310d7d043 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -147,7 +147,7 @@ extern int yydebug;
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
-#line 137 "engines/director/lingo/lingo-gr.y"
+#line 139 "engines/director/lingo/lingo-gr.y"
Common::String *s;
int i;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index ee3d962fbc..87949fb80e 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -128,6 +128,8 @@ static void mVar(Common::String *s, VarType type) {
} else {
warning("Instance var '%s' defined outside factory", s->c_str());
}
+ } else if (type == kVarGlobal) {
+ g_lingo->varCreate(*s, true);
}
}
}
@@ -602,13 +604,9 @@ proc: tPUT expr { g_lingo->code1(LC::c_printtop); }
| tOPEN expr { g_lingo->code2(LC::c_voidpush, LC::c_open); }
globallist: ID {
- g_lingo->code1(LC::c_global);
- g_lingo->codeString($ID->c_str());
mVar($ID, kVarGlobal);
delete $ID; }
| globallist ',' ID {
- g_lingo->code1(LC::c_global);
- g_lingo->codeString($ID->c_str());
mVar($ID, kVarGlobal);
delete $ID; }
Commit: 2daf4721c9e371bb3085b9fc3baf24c9b227b118
https://github.com/scummvm/scummvm/commit/2daf4721c9e371bb3085b9fc3baf24c9b227b118
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Implement b_factory
Removed the inheritanceLevel check in b_objectp because it should
return 1 if called with an object return by b_factory, for some
reason...
Changed paths:
engines/director/lingo/lingo-builtins.cpp
engines/director/lingo/lingo-builtins.h
diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 1196b6e4dd..b1f0fbd626 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -162,7 +162,7 @@ static struct BuiltinProto {
// when mouseUp // D2
// when timeOut // D2
// Types
- { "factory", LB::b_factoryP, 1, 1, true, 3, FBLTIN }, // D3
+ { "factory", LB::b_factory, 1, 1, true, 3, FBLTIN }, // D3
{ "floatP", LB::b_floatP, 1, 1, true, 3, FBLTIN }, // D3
{ "ilk", LB::b_ilk, 1, 2, false, 4, FBLTIN }, // D4 f
{ "integerp", LB::b_integerp, 1, 1, true, 2, FBLTIN }, // D2 f
@@ -1294,12 +1294,16 @@ void LB::b_startTimer(int nargs) {
///////////////////
// Types
///////////////////
-void LB::b_factoryP(int nargs) {
- Datum d = g_lingo->pop();
- Datum res(d.asInt());
- g_lingo->push(res);
-
- warning("STUB: b_factoryP");
+void LB::b_factory(int nargs) {
+ Datum factoryName = g_lingo->pop();
+ factoryName.type = VAR;
+ Datum o = g_lingo->varFetch(factoryName, true);
+ if (o.type == OBJECT && o.u.obj->type == kFactoryObj
+ && o.u.obj->name->equalsIgnoreCase(*factoryName.u.s) && o.u.obj->inheritanceLevel == 1) {
+ g_lingo->push(o);
+ } else {
+ g_lingo->push(Datum(0));
+ }
}
void LB::b_floatP(int nargs) {
@@ -1324,11 +1328,7 @@ void LB::b_objectp(int nargs) {
Datum d = g_lingo->pop();
Datum res;
if (d.type == OBJECT) {
- if (d.u.obj->type == kFactoryObj && (d.u.obj->inheritanceLevel == 1 || d.u.obj->disposed)) {
- res = 0;
- } else {
- res = 1;
- }
+ res = !d.u.obj->disposed;
} else {
res = 0;
}
diff --git a/engines/director/lingo/lingo-builtins.h b/engines/director/lingo/lingo-builtins.h
index bd4e58278e..77b1c80da0 100644
--- a/engines/director/lingo/lingo-builtins.h
+++ b/engines/director/lingo/lingo-builtins.h
@@ -75,7 +75,7 @@ namespace LB {
void b_setProp(int nargs);
void b_sort(int nargs);
- void b_factoryP(int nargs);
+ void b_factory(int nargs);
void b_floatP(int nargs);
void b_ilk(int nargs);
void b_integerp(int nargs);
@@ -189,8 +189,6 @@ namespace LB {
void b_true(int nargs);
void b_version(int nargs);
- void b_factory(int nargs);
-
void b_cast(int nargs);
void b_field(int nargs);
void b_script(int nargs);
Commit: c01b88c2e8686ce1deba5b73cce5ef111b8777d5
https://github.com/scummvm/scummvm/commit/c01b88c2e8686ce1deba5b73cce5ef111b8777d5
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-06T18:34:06+02:00
Commit Message:
DIRECTOR: LINGO: Clean up lingo-object.cpp
Changed paths:
engines/director/lingo/lingo-object.cpp
engines/director/lingo/lingo.h
diff --git a/engines/director/lingo/lingo-object.cpp b/engines/director/lingo/lingo-object.cpp
index 45ef7a5a85..4f1a03d26c 100644
--- a/engines/director/lingo/lingo-object.cpp
+++ b/engines/director/lingo/lingo-object.cpp
@@ -80,7 +80,7 @@ Object *Object::clone() {
return res;
}
-Symbol Object::getMethod(const Common::String methodName) {
+Symbol Object::getMethod(const Common::String &methodName) {
if (disposed) {
error("Method '%s' called on disposed object '%s'", methodName.c_str(), name->c_str());
}
@@ -93,7 +93,7 @@ Symbol Object::getMethod(const Common::String methodName) {
return Symbol();
}
-bool Object::hasVar(const Common::String varName) {
+bool Object::hasVar(const Common::String &varName) {
if (disposed) {
error("Variable '%s' accessed on disposed object '%s'", varName.c_str(), name->c_str());
}
@@ -105,14 +105,26 @@ bool Object::hasVar(const Common::String varName) {
return properties.contains(varName);
}
-Symbol &Object::getVar(const Common::String varName) {
+Symbol &Object::getVar(const Common::String &varName) {
return properties[varName];
}
+// Initialization/disposal
+
+void LM::m_new(int nargs) {
+ // This is usually overridden by a user-defined mNew
+ Datum res;
+ res.type = OBJECT;
+ res.u.obj = g_lingo->_currentMeObj;
+ g_lingo->push(res);
+}
+
void LM::m_dispose(int nargs) {
g_lingo->_currentMeObj->disposed = true;
}
+// Object array
+
void LM::m_get(int nargs) {
Datum indexD = g_lingo->pop();
uint index = MAX(0, indexD.asInt());
@@ -130,12 +142,4 @@ void LM::m_put(int nargs) {
(*g_lingo->_currentMeObj->objArray)[index] = value;
}
-void LM::m_new(int nargs) {
- // This is usually be overridden by a user-defined mNew
- Datum res;
- res.type = OBJECT;
- res.u.obj = g_lingo->_currentMeObj;
- g_lingo->push(res);
-}
-
}
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 467e35765f..d4e1c56d72 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -265,9 +265,9 @@ struct Object {
Common::HashMap<uint, Datum> *objArray;
Object *clone();
- Symbol getMethod(const Common::String methodName);
- bool hasVar(const Common::String varName);
- Symbol &getVar(const Common::String varName);
+ Symbol getMethod(const Common::String &methodName);
+ bool hasVar(const Common::String &varName);
+ Symbol &getVar(const Common::String &varName);
};
struct CFrame { /* proc/func call stack frame */
@@ -342,7 +342,7 @@ private:
// lingo-events.cpp
private:
void initEventHandlerTypes();
- void setPrimaryEventHandler(LEvent event, Common::String &code);
+ void setPrimaryEventHandler(LEvent event, const Common::String &code);
void primaryEventHandler(LEvent event);
void registerInputEvent(LEvent event);
void registerFrameEvent(LEvent event);
More information about the Scummvm-git-logs
mailing list