[Scummvm-git-logs] scummvm master -> 8a5396e6f554f894c963b43e476d72eda1c31553

sev- sev at scummvm.org
Sat Mar 28 20:52:22 UTC 2020


This automated email contains information about 5 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
eb7fdaa007 DIRECTOR: LINGO: Fix 'play done' behavior
107d40aac5 DIRECTOR: LINGO: Improved disassembly of cb_call opcode
40d9ed41e2 DIRECTOR: LINGO: preprocess "play done" and remove c_playdone code
e570423595 DIRECTOR: LINGO: Changed notion of SYMBOL to be a string. Fixed ilk keyword accordingly
8a5396e6f5 DIRECTOR: LINGO: Preprocess 'play done' to 'play #done'


Commit: eb7fdaa0071fd5792b6b6032ba46aff9f8c22a02
    https://github.com/scummvm/scummvm/commit/eb7fdaa0071fd5792b6b6032ba46aff9f8c22a02
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-03-28T21:33:41+01:00

Commit Message:
DIRECTOR: LINGO: Fix 'play done' behavior

Changed paths:
    engines/director/lingo/lingo-funcs.cpp


diff --git a/engines/director/lingo/lingo-funcs.cpp b/engines/director/lingo/lingo-funcs.cpp
index 6fa4228271..4fe5653e4e 100644
--- a/engines/director/lingo/lingo-funcs.cpp
+++ b/engines/director/lingo/lingo-funcs.cpp
@@ -308,6 +308,9 @@ void Lingo::func_play(Datum &frame, Datum &movie) {
 }
 
 void Lingo::func_playdone() {
+	if (_vm->_movieStack.empty()) {	// No op if no nested movies
+		return;
+	}
 	MovieReference ref = _vm->_movieStack.back();
 
 	_vm->_movieStack.pop_back();


Commit: 107d40aac5e501571437a48e2bee9e9133b28485
    https://github.com/scummvm/scummvm/commit/107d40aac5e501571437a48e2bee9e9133b28485
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-03-28T21:33:41+01:00

Commit Message:
DIRECTOR: LINGO: Improved disassembly of cb_call opcode

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 dbd6f7e2ee..37f05748e8 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -138,7 +138,7 @@ static struct FuncDescr {
 	{ LC::c_wordOf,			"c_wordOf",			"" },	// D3
 	{ LC::c_wordToOf,		"c_wordToOf",		"" },	// D3
 	{ LC::c_xpop,			"c_xpop",			""  },
-	{ LC::cb_call,			"cb_call",			"i" },
+	{ LC::cb_call,			"cb_call",			"N" },
 	{ LC::cb_field,			"cb_field",			"" },
 	{ LC::cb_globalassign,	"cb_globalassign",	"i" },
 	{ LC::cb_globalpush,	"cb_globalpush",	"i" },
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 9ba7843854..ab16fe1ab9 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -160,6 +160,14 @@ Common::String Lingo::decodeInstruction(ScriptData *sd, uint pc, uint *newPc) {
 					res += Common::String::format(" %s", field2str(v));
 					break;
 				}
+			case 'N':
+				{
+					i = (*sd)[pc++];
+					int v = READ_UINT32(&i);
+
+					res += Common::String::format(" \"%s\"", getName(v).c_str());
+					break;
+				}
 			default:
 				warning("decodeInstruction: Unknown parameter type: %c", pars[-1]);
 			}


Commit: 40d9ed41e28368ee02fc22711ade06c72061abac
    https://github.com/scummvm/scummvm/commit/40d9ed41e28368ee02fc22711ade06c72061abac
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-03-28T21:33:41+01:00

Commit Message:
DIRECTOR: LINGO: preprocess "play done" and remove c_playdone code

Changed paths:
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-code.h
    engines/director/lingo/lingo-funcs.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-preprocessor.cpp
    engines/director/lingo/lingo.h


diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 37f05748e8..87be7a0124 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -112,7 +112,6 @@ static struct FuncDescr {
 	{ LC::c_open,			"c_open",			"" },
 	{ LC::c_or,				"c_or",				"" },
 	{ LC::c_play,			"c_play",			"" },
-	{ LC::c_playdone,		"c_playdone",		"" },
 	{ LC::c_printtop,		"c_printtop",		""  },
 	{ LC::c_procret,		"c_procret",		"" },
 	{ LC::c_proparraypush,	"c_proparraypush",	"i" },
@@ -1298,10 +1297,6 @@ void LC::c_play() {
 	g_lingo->func_play(frame, movie);
 }
 
-void LC::c_playdone() {
-	g_lingo->func_playdone();
-}
-
 void LC::c_call() {
 	Common::String name(g_lingo->readString());
 
diff --git a/engines/director/lingo/lingo-code.h b/engines/director/lingo/lingo-code.h
index 9c1877632e..29e896071b 100644
--- a/engines/director/lingo/lingo-code.h
+++ b/engines/director/lingo/lingo-code.h
@@ -127,7 +127,6 @@ namespace LC {
 	void c_property();
 
 	void c_play();
-	void c_playdone();
 
 	void c_open();
 	void c_hilite();
diff --git a/engines/director/lingo/lingo-funcs.cpp b/engines/director/lingo/lingo-funcs.cpp
index 4fe5653e4e..d4ca356158 100644
--- a/engines/director/lingo/lingo-funcs.cpp
+++ b/engines/director/lingo/lingo-funcs.cpp
@@ -295,39 +295,42 @@ void Lingo::func_play(Datum &frame, Datum &movie) {
 		return;
 	}
 
-	if (!_vm->getCurrentScore()) {
-		warning("Lingo::func_play(): no score");
-		return;
-	}
+	// play "done"
+	if (frame.type == STRING) {
+		if (_vm->_movieStack.empty()) {	// No op if no nested movies
+			return;
+		}
+		ref = _vm->_movieStack.back();
 
-	ref.frameI = _vm->getCurrentScore()->getCurrentFrame();
+		_vm->_movieStack.pop_back();
 
-	_vm->_movieStack.push_back(ref);
+		Datum m, f;
 
-	func_goto(frame, movie);
-}
+		if (ref.movie.empty()) {
+			m.type = VOID;
+		} else {
+			m.type = STRING;
+			m.u.s = new Common::String(ref.movie);
+		}
 
-void Lingo::func_playdone() {
-	if (_vm->_movieStack.empty()) {	// No op if no nested movies
-		return;
-	}
-	MovieReference ref = _vm->_movieStack.back();
+		f.type = INT;
+		f.u.i = ref.frameI;
 
-	_vm->_movieStack.pop_back();
+		func_goto(f, m);
 
-	Datum m, f;
+		return;
+	}
 
-	if (ref.movie.empty()) {
-		m.type = VOID;
-	} else {
-		m.type = STRING;
-		m.u.s = new Common::String(ref.movie);
+	if (!_vm->getCurrentScore()) {
+		warning("Lingo::func_play(): no score");
+		return;
 	}
 
-	f.type = INT;
-	f.u.i = ref.frameI;
+	ref.frameI = _vm->getCurrentScore()->getCurrentFrame();
+
+	_vm->_movieStack.push_back(ref);
 
-	func_goto(f, m);
+	func_goto(frame, movie);
 }
 
 void Lingo::func_cursor(int c, int m) {
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 92a68848e6..f3732b1b2b 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.5.1.  */
+/* A Bison parser, made by GNU Bison 3.5.3.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
@@ -48,7 +48,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.5.1"
+#define YYBISON_VERSION "3.5.3"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -202,34 +202,33 @@ extern int yydebug;
     tFACTORY = 312,
     tOPEN = 313,
     tPLAY = 314,
-    tDONE = 315,
-    tINSTANCE = 316,
-    tGE = 317,
-    tLE = 318,
-    tEQ = 319,
-    tNEQ = 320,
-    tAND = 321,
-    tOR = 322,
-    tNOT = 323,
-    tMOD = 324,
-    tAFTER = 325,
-    tBEFORE = 326,
-    tCONCAT = 327,
-    tCONTAINS = 328,
-    tSTARTS = 329,
-    tCHAR = 330,
-    tITEM = 331,
-    tLINE = 332,
-    tWORD = 333,
-    tSPRITE = 334,
-    tINTERSECTS = 335,
-    tWITHIN = 336,
-    tTELL = 337,
-    tPROPERTY = 338,
-    tON = 339,
-    tENDIF = 340,
-    tENDREPEAT = 341,
-    tENDTELL = 342
+    tINSTANCE = 315,
+    tGE = 316,
+    tLE = 317,
+    tEQ = 318,
+    tNEQ = 319,
+    tAND = 320,
+    tOR = 321,
+    tNOT = 322,
+    tMOD = 323,
+    tAFTER = 324,
+    tBEFORE = 325,
+    tCONCAT = 326,
+    tCONTAINS = 327,
+    tSTARTS = 328,
+    tCHAR = 329,
+    tITEM = 330,
+    tLINE = 331,
+    tWORD = 332,
+    tSPRITE = 333,
+    tINTERSECTS = 334,
+    tWITHIN = 335,
+    tTELL = 336,
+    tPROPERTY = 337,
+    tON = 338,
+    tENDIF = 339,
+    tENDREPEAT = 340,
+    tENDTELL = 341
   };
 #endif
 
@@ -257,7 +256,7 @@ union YYSTYPE
 		Common::String *field;
 	} objectref;
 
-#line 261 "engines/director/lingo/lingo-gr.cpp"
+#line 260 "engines/director/lingo/lingo-gr.cpp"
 
 };
 typedef union YYSTYPE YYSTYPE;
@@ -574,21 +573,21 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  128
+#define YYFINAL  127
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1738
+#define YYLAST   1755
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  103
+#define YYNTOKENS  102
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  51
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  173
+#define YYNRULES  172
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  377
+#define YYNSTATES  376
 
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   342
+#define YYMAXUTOK   341
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -601,15 +600,15 @@ union yyalloc
 static const yytype_int8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      96,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      95,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,    95,    90,     2,
-      97,    98,    93,    91,    99,    92,     2,    94,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   102,     2,
-      88,     2,    89,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    94,    89,     2,
+      96,    97,    92,    90,    98,    91,     2,    93,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   101,     2,
+      87,     2,    88,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   100,     2,   101,     2,     2,     2,     2,     2,     2,
+       2,    99,     2,   100,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -634,7 +633,7 @@ static const yytype_int8 yytranslate[] =
       55,    56,    57,    58,    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,    84,
-      85,    86,    87
+      85,    86
 };
 
 #if YYDEBUG
@@ -654,11 +653,11 @@ static const yytype_int16 yyrline[] =
      488,   489,   490,   492,   495,   497,   498,   499,   500,   501,
      502,   502,   503,   503,   504,   505,   508,   511,   512,   514,
      518,   523,   527,   532,   536,   548,   549,   550,   551,   555,
-     559,   564,   565,   567,   568,   572,   576,   580,   580,   610,
-     610,   610,   617,   618,   618,   625,   635,   643,   643,   645,
-     646,   647,   648,   650,   651,   652,   654,   656,   664,   665,
-     666,   668,   669,   671,   673,   674,   675,   676,   678,   679,
-     681,   682,   684,   688
+     559,   564,   565,   567,   571,   575,   579,   579,   609,   609,
+     609,   616,   617,   617,   624,   634,   642,   642,   644,   645,
+     646,   647,   649,   650,   651,   653,   655,   663,   664,   665,
+     667,   668,   670,   672,   673,   674,   675,   677,   678,   680,
+     681,   683,   687
 };
 #endif
 
@@ -676,9 +675,9 @@ static const char *const yytname[] =
   "tGLOBAL", "tGO", "tIF", "tIN", "tINTO", "tLOOP", "tMACRO", "tMOVIE",
   "tNEXT", "tOF", "tPREVIOUS", "tPUT", "tREPEAT", "tSET", "tTHEN", "tTO",
   "tWHEN", "tWITH", "tWHILE", "tNLELSE", "tFACTORY", "tOPEN", "tPLAY",
-  "tDONE", "tINSTANCE", "tGE", "tLE", "tEQ", "tNEQ", "tAND", "tOR", "tNOT",
-  "tMOD", "tAFTER", "tBEFORE", "tCONCAT", "tCONTAINS", "tSTARTS", "tCHAR",
-  "tITEM", "tLINE", "tWORD", "tSPRITE", "tINTERSECTS", "tWITHIN", "tTELL",
+  "tINSTANCE", "tGE", "tLE", "tEQ", "tNEQ", "tAND", "tOR", "tNOT", "tMOD",
+  "tAFTER", "tBEFORE", "tCONCAT", "tCONTAINS", "tSTARTS", "tCHAR", "tITEM",
+  "tLINE", "tWORD", "tSPRITE", "tINTERSECTS", "tWITHIN", "tTELL",
   "tPROPERTY", "tON", "tENDIF", "tENDREPEAT", "tENDTELL", "'<'", "'>'",
   "'&'", "'+'", "'-'", "'*'", "'/'", "'%'", "'\\n'", "'('", "')'", "','",
   "'['", "']'", "':'", "$accept", "program", "programline", "asgn",
@@ -706,13 +705,13 @@ static const yytype_int16 yytoknum[] =
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,    60,    62,
-      38,    43,    45,    42,    47,    37,    10,    40,    41,    44,
-      91,    93,    58
+     335,   336,   337,   338,   339,   340,   341,    60,    62,    38,
+      43,    45,    42,    47,    37,    10,    40,    41,    44,    91,
+      93,    58
 };
 # endif
 
-#define YYPACT_NINF (-275)
+#define YYPACT_NINF (-272)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -726,44 +725,44 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     322,   -85,  -275,  -275,    24,  -275,  1063,  1101,    24,  1183,
-    -275,  -275,  -275,  -275,  -275,  -275,   -34,  -275,   860,  -275,
-    -275,   -30,   981,    33,    89,    28,    43,  1221,   942,    47,
-    1221,  1221,  1221,  1221,  1221,  1221,  1221,  -275,  -275,  1221,
-    1221,  1221,   404,     8,  -275,  -275,  -275,  -275,  -275,  1221,
-     -17,  1221,   738,  -275,  1631,  -275,  -275,  -275,  -275,  -275,
-    -275,  -275,  -275,  -275,  -275,  -275,  -275,    22,   981,  1221,
-    1631,    13,  1221,    13,  -275,  1221,  1631,    26,  1221,  -275,
-    -275,    92,  -275,  1221,  -275,    79,  -275,   396,  -275,   102,
-    -275,   104,   163,   105,  -275,   -32,    24,    24,   -11,    80,
-     100,  -275,  1548,  -275,   396,  -275,  -275,    32,  -275,  1242,
-    1276,  1309,  1342,  1598,  1507,   129,   130,  -275,  -275,  1561,
-      53,    56,  -275,  1631,    59,    62,    63,  -275,  -275,   492,
-    1631,  -275,  -275,  1631,  -275,  -275,  1221,  1631,  -275,  -275,
-    1221,  1221,  1221,  1221,  1221,  1221,  1221,  1221,  1221,  1221,
-    1221,  1221,  1221,  1221,  1221,  1221,  1221,   139,  1221,   163,
-    1561,    -3,  1221,    16,    19,  1221,    13,   139,  -275,    65,
-    1631,  1221,  -275,  -275,    24,    15,  1221,  1221,  -275,  1221,
-    1221,    18,   120,  1221,  1221,  1221,  -275,  1221,  -275,   143,
-    1221,  1221,  1221,  1221,  1221,  1221,  1221,  1221,  1221,  1221,
-    -275,  -275,  -275,    70,  -275,  -275,    24,    24,  -275,  1221,
-      34,  -275,  -275,  1221,  1221,   121,  -275,  1631,     7,     7,
-       7,     7,  1644,  1644,  -275,    17,     7,     7,     7,     7,
-      17,   -29,   -29,  -275,  -275,  -275,   -39,  -275,  1631,  -275,
-    -275,  1631,   -21,   151,  1631,  -275,   135,  -275,  -275,  1631,
-    1631,  1631,     7,  1221,  1221,   158,  1631,     7,  1631,  1631,
-    -275,  1631,  1375,  1631,  1408,  1631,  1441,  1631,  1474,  1631,
-    1631,   820,  -275,   159,  -275,  -275,  1631,    53,    56,  -275,
-     656,  1631,  1631,  -275,   144,    95,   172,    95,  -275,   139,
-    1221,  1631,     7,    24,  1221,  1221,  1221,  1221,  -275,   656,
-    -275,  -275,  -275,   111,  -275,    -2,   656,   820,   174,  -275,
-    -275,  -275,   -15,  1631,   147,  1631,  1631,  1631,  1631,  -275,
-     113,  -275,   656,   149,  1221,  -275,  -275,  -275,   574,   656,
-      95,  1221,  -275,   116,  1221,  1631,    87,   -27,   181,  -275,
-    1631,  -275,  1631,  -275,  -275,  -275,  -275,  1221,   124,  -275,
-    -275,  -275,   107,   656,  -275,   656,  -275,  1631,  -275,   820,
-     186,   656,   125,   656,   164,  -275,  -275,   128,  -275,   131,
-    -275,   132,  -275,  -275,   656,  -275,  -275
+     312,   -78,  -272,  -272,    24,  -272,  1042,  1123,    24,  1161,
+    -272,  -272,  -272,  -272,  -272,  -272,   -26,  -272,   885,  -272,
+    -272,    19,  1004,   -23,   203,    54,    56,  1242,   923,    61,
+    1242,  1242,  1242,  1242,  1242,  1242,  1242,  -272,  -272,  1242,
+    1242,  1242,   393,     9,  -272,  -272,  -272,  -272,  -272,  1242,
+      -2,  1242,   723,  -272,  1662,  -272,  -272,  -272,  -272,  -272,
+    -272,  -272,  -272,  -272,  -272,  -272,  -272,    -5,  1004,  1242,
+    1662,     3,  1242,     3,  -272,  1242,  1662,    23,  1242,  -272,
+    -272,    81,  -272,  1242,  -272,    78,  -272,  1234,  -272,   100,
+    -272,   101,   385,   102,  -272,   -11,    24,    24,     7,    76,
+      79,  -272,  1559,  1234,  -272,  -272,    33,  -272,  1282,  1315,
+    1348,  1381,  1629,  1546,   126,   128,  -272,  -272,  1592,    52,
+      53,  -272,  1662,    57,    58,    62,  -272,  -272,   480,  1662,
+    -272,  -272,  1662,  -272,  -272,  1242,  1662,  -272,  -272,  1242,
+    1242,  1242,  1242,  1242,  1242,  1242,  1242,  1242,  1242,  1242,
+    1242,  1242,  1242,  1242,  1242,  1242,   137,  1242,   385,  1592,
+     -24,  1242,     2,    13,  1242,     3,   137,  -272,    64,  1662,
+    1242,  -272,  -272,    24,    32,  1242,  1242,  -272,  1242,  1242,
+       8,   117,  1242,  1242,  1242,  -272,  1242,  -272,   141,  1242,
+    1242,  1242,  1242,  1242,  1242,  1242,  1242,  1242,  1242,  -272,
+    -272,  -272,    68,  -272,  -272,    24,    24,  -272,  1242,   -14,
+    -272,  -272,  1242,  1242,   123,  -272,  1662,   125,   125,   125,
+     125,    25,    25,  -272,   107,   125,   125,   125,   125,   107,
+     -28,   -28,  -272,  -272,  -272,   -48,  -272,  1662,  -272,  -272,
+    1662,   -16,   144,  1662,  -272,   140,  -272,  -272,  1662,  1662,
+    1662,   125,  1242,  1242,   170,  1662,   125,  1662,  1662,  -272,
+    1662,  1414,  1662,  1447,  1662,  1480,  1662,  1513,  1662,  1662,
+     804,  -272,   171,  -272,  -272,  1662,    52,    53,  -272,   642,
+    1662,  1662,  -272,   150,   106,   181,   106,  -272,   137,  1242,
+    1662,   125,    24,  1242,  1242,  1242,  1242,  -272,   642,  -272,
+    -272,  -272,   124,  -272,   -13,   642,   804,   189,  -272,  -272,
+    -272,    -3,  1662,   173,  1662,  1662,  1662,  1662,  -272,   142,
+    -272,   642,   174,  1242,  -272,  -272,  -272,   561,   642,   106,
+    1242,  -272,   145,  1242,  1662,    85,   -27,   205,  -272,  1662,
+    -272,  1662,  -272,  -272,  -272,  -272,  1242,   147,  -272,  -272,
+    -272,   134,   642,  -272,   642,  -272,  1662,  -272,   804,   209,
+     642,   151,   642,   184,  -272,  -272,   152,  -272,   155,  -272,
+     159,  -272,  -272,   642,  -272,  -272
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -771,66 +770,66 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,    56,    67,     0,    57,   158,   158,     0,    60,
-      59,    58,   137,   143,    69,    70,   109,   110,     0,    48,
-     139,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   112,   147,     0,
-       0,     0,   164,     0,     3,    71,    28,     7,    29,     0,
+       0,     0,    56,    67,     0,    57,   157,   157,     0,    60,
+      59,    58,   136,   142,    69,    70,   109,   110,     0,    48,
+     138,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   112,   146,     0,
+       0,     0,   163,     0,     3,    71,    28,     7,    29,     0,
        0,     0,     0,    62,    22,   104,    63,    23,   106,   107,
-       6,    50,    21,    61,     4,    60,    68,    60,     0,   158,
-     159,   116,   158,    65,   103,   158,   161,   157,   158,    50,
+       6,    50,    21,    61,     4,    60,    68,    60,     0,   157,
+     158,   116,   157,    65,   103,   157,   160,   156,   157,    50,
      108,     0,   125,     0,   126,     0,   127,   128,   130,     0,
       34,     0,   105,     0,    46,     0,     0,     0,     0,     0,
-       0,   142,   118,   133,   134,   136,   123,   114,    85,     0,
-       0,     0,     0,     0,     0,     0,     0,    90,    91,     0,
-      59,    58,   165,   168,     0,   166,   167,   170,     1,     5,
-      51,    50,    50,    51,    51,    27,     0,    25,    26,    24,
+       0,   141,   118,   133,   135,   123,   114,    85,     0,     0,
+       0,     0,     0,     0,     0,     0,    90,    91,     0,    59,
+      58,   164,   167,     0,   165,   166,   169,     1,     5,    51,
+      50,    50,    51,    51,    27,     0,    25,    26,    24,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   149,   158,     0,
-     159,     0,     0,     0,     0,     0,   138,   149,   119,   111,
-     132,     0,   129,   140,     0,     0,     0,     0,    47,     0,
-       0,     0,     0,     0,     0,     0,    55,     0,   135,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      38,    38,   121,   113,   148,    92,     0,     0,   163,     0,
-       0,     2,    52,     0,     0,     0,    35,    51,    81,    82,
-      79,    80,    83,    84,    76,    87,    88,    89,    78,    77,
-      86,    72,    73,    74,    75,   150,     0,   115,   160,    64,
-      66,   162,     0,     0,   131,    50,     0,     8,     9,    11,
-      12,    16,    14,     0,     0,     0,    15,    13,    20,   117,
-     124,    95,     0,    97,     0,    99,     0,   101,     0,    93,
-      94,     0,    52,     0,   173,   172,   169,     0,     0,   171,
-      51,    51,    51,    52,     0,   156,     0,   156,   120,   149,
-       0,    17,    18,     0,     0,     0,     0,     0,    51,    51,
-     122,    53,    54,     0,    52,     0,    51,     0,     0,    52,
-     151,    52,     0,    10,     0,    96,    98,   100,   102,    37,
-       0,    30,    51,     0,     0,    41,    51,   152,   146,   144,
-     156,     0,    36,     0,     0,    51,    51,     0,   153,    52,
-      19,    33,    51,    52,    50,    49,    42,     0,     0,    50,
-      45,   154,   145,   141,    52,    51,    52,    51,    39,     0,
-       0,    51,     0,    51,     0,    51,   155,     0,    31,     0,
-      52,     0,    32,    40,    51,    44,    43
+       0,     0,     0,     0,     0,     0,   148,   157,     0,   158,
+       0,     0,     0,     0,     0,   137,   148,   119,   111,   132,
+       0,   129,   139,     0,     0,     0,     0,    47,     0,     0,
+       0,     0,     0,     0,     0,    55,     0,   134,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    38,
+      38,   121,   113,   147,    92,     0,     0,   162,     0,     0,
+       2,    52,     0,     0,     0,    35,    51,    81,    82,    79,
+      80,    83,    84,    76,    87,    88,    89,    78,    77,    86,
+      72,    73,    74,    75,   149,     0,   115,   159,    64,    66,
+     161,     0,     0,   131,    50,     0,     8,     9,    11,    12,
+      16,    14,     0,     0,     0,    15,    13,    20,   117,   124,
+      95,     0,    97,     0,    99,     0,   101,     0,    93,    94,
+       0,    52,     0,   172,   171,   168,     0,     0,   170,    51,
+      51,    51,    52,     0,   155,     0,   155,   120,   148,     0,
+      17,    18,     0,     0,     0,     0,     0,    51,    51,   122,
+      53,    54,     0,    52,     0,    51,     0,     0,    52,   150,
+      52,     0,    10,     0,    96,    98,   100,   102,    37,     0,
+      30,    51,     0,     0,    41,    51,   151,   145,   143,   155,
+       0,    36,     0,     0,    51,    51,     0,   152,    52,    19,
+      33,    51,    52,    50,    49,    42,     0,     0,    50,    45,
+     153,   144,   140,    52,    51,    52,    51,    39,     0,     0,
+      51,     0,    51,     0,    51,   154,     0,    31,     0,    52,
+       0,    32,    40,    51,    44,    43
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -275,  -275,    90,  -275,  -265,  -275,     4,    23,  -275,  -275,
-    -275,  -275,  -275,  -275,   166,  -275,   -77,   -60,   -41,  -275,
-       6,    -6,  -275,    48,   188,  -275,  -275,  -275,  -275,  -275,
-    -275,   -19,  -275,  -275,  -275,  -275,  -275,  -275,  -275,  -275,
-    -162,  -275,  -274,   189,    11,  -275,  -275,  -275,  -275,  -275,
-      35
+    -272,  -272,   116,  -272,  -264,  -272,     4,    45,  -272,  -272,
+    -272,  -272,  -272,  -272,   197,  -272,   -77,   -57,  -100,  -272,
+       6,    -6,  -272,    77,   198,  -272,  -272,  -272,  -272,  -272,
+    -272,   -20,  -272,  -272,  -272,  -272,  -272,  -272,  -272,  -272,
+    -161,  -272,  -271,   200,    12,  -272,  -272,  -272,  -272,  -272,
+      47
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    43,    44,    45,    46,   134,   302,   271,    48,   336,
-     346,   135,    49,    50,    51,   347,   157,   212,   280,    52,
-      53,    54,    55,    56,    57,    81,   115,   169,   203,   107,
-      58,    88,    59,    78,    60,    89,   245,    79,    61,   116,
-     236,   352,   309,    62,   164,    77,    63,   124,   125,   126,
-     127
+      -1,    43,    44,    45,    46,   133,   301,   270,    48,   335,
+     345,   134,    49,    50,    51,   346,   156,   211,   279,    52,
+      53,    54,    55,    56,    57,    81,   114,   168,   202,   106,
+      58,    88,    59,    78,    60,    89,   244,    79,    61,   115,
+     235,   351,   308,    62,   163,    77,    63,   123,   124,   125,
+     126
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -838,358 +837,362 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      70,    70,   167,    76,    47,   242,   298,   349,   128,   105,
-      66,    64,    87,   311,    74,    80,    92,    71,    73,    90,
-     179,   102,   104,   131,   108,   109,   110,   111,   112,   113,
-     114,   323,   180,   117,   118,   119,   123,     2,     8,   247,
-     146,   183,   326,   130,     5,   133,   137,   132,    65,    10,
-     324,    11,   100,   184,   213,   214,   339,   285,   350,   277,
-     286,   278,   159,   160,   155,   156,   160,   101,   172,   160,
-     253,   106,    70,   215,   216,   287,   146,   170,   286,   147,
-     161,   330,   254,   163,   286,   188,   146,    93,    94,   166,
-      31,    32,    33,    34,   365,   237,   162,   152,   153,   154,
-     155,   156,   181,   182,   129,    95,    96,    97,   153,   154,
-     155,   156,   162,    98,   239,   162,   168,   240,   162,   158,
-      99,   344,   345,   171,    42,   165,   173,   312,   174,   178,
-     217,   189,   185,    47,   218,   219,   220,   221,   222,   223,
+      70,    70,   166,    76,    47,   241,   297,   348,   104,   127,
+      66,   276,    87,   277,    74,   310,    92,    64,    71,    73,
+     322,   102,   103,    80,   107,   108,   109,   110,   111,   112,
+     113,    93,    94,   116,   117,   118,   122,     2,   130,   323,
+     145,   178,   325,   129,     5,   132,   136,   284,    65,    10,
+     285,    11,   179,   212,   213,     8,   246,   349,   338,   182,
+     252,   131,   158,   159,   154,   155,   159,   171,    90,   159,
+     183,   253,    70,   236,   161,   214,   215,   169,   100,   286,
+     101,   160,   285,   187,   162,   105,   139,   140,   141,   142,
+     165,   157,   329,   145,   364,   285,   146,   147,   148,   238,
+     161,   161,   180,   181,   128,   167,    31,    32,    33,    34,
+     239,   161,   149,   150,   151,   152,   153,   154,   155,   343,
+     344,   164,   170,    42,   172,   173,   177,   311,   184,   216,
+     185,   188,    47,   217,   218,   219,   220,   221,   222,   223,
      224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
-     234,   186,    70,   202,   204,   206,   238,   284,   207,   241,
-     208,   209,   210,   235,   243,   244,   255,   260,   289,   273,
-     249,   250,   283,   251,   252,   288,   290,   256,   257,   258,
-     246,   259,   293,   300,   261,   262,   263,   264,   265,   266,
-     267,   268,   269,   270,   308,   307,   310,   321,   327,   331,
-     332,   334,   341,   276,   175,   351,   360,   281,   282,   358,
-     366,   368,   274,   275,   372,   370,   373,   375,   136,   211,
-     303,   304,   305,   248,   272,   140,   141,   142,   143,   144,
-     145,   299,   146,   176,   177,   147,   148,   149,   319,   320,
-     138,   139,   306,     0,     0,   279,   325,   291,   292,     0,
-       0,   150,   151,   152,   153,   154,   155,   156,     0,     0,
-       0,     0,   333,   322,     0,     0,   337,   356,   328,     0,
-     329,     0,   359,     0,     0,   343,   348,     0,     0,     0,
-       0,     0,   354,     0,   313,     0,     0,     0,   315,   316,
-     317,   318,     0,     0,     0,   362,     0,   364,   353,   314,
-       0,   367,   355,   369,     0,   371,     0,     0,     0,     0,
-       0,     0,     0,   361,   376,   363,     0,     0,   335,     0,
-       0,     0,    -5,     1,     0,   340,     0,     0,   342,   374,
-       0,     0,     0,     0,     0,     2,     0,     0,     3,     4,
-       0,   357,     5,     6,     7,     8,     9,    10,     0,    11,
-       0,    12,    13,    14,    15,     0,     0,     0,    16,    17,
-      18,    19,     0,     0,     0,    20,     0,    21,     0,     0,
-      22,    23,    24,     0,     0,    25,     0,     0,     0,    26,
-      27,    28,     0,    29,     0,     0,     0,     0,     0,     0,
-      30,     0,     0,     0,     0,     0,     0,    31,    32,    33,
-      34,    35,     0,     0,    36,    37,    38,     0,     0,     0,
-       0,     0,     0,    39,    40,     0,     0,     2,    -5,    41,
-       3,     4,    42,     0,     5,     0,     7,     8,    67,   120,
-       0,   121,     0,     0,     0,    14,    15,     0,     0,     0,
-      83,     0,    85,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    68,     0,    24,     0,     0,     0,   140,   141,
-     142,   143,   144,   145,     0,   146,     0,     0,   147,   148,
-     149,     0,    30,     0,     0,     0,     0,     0,     0,    31,
-      32,    33,    34,    35,   150,   151,   152,   153,   154,   155,
-     156,     0,     0,     0,     0,    39,    40,     0,     0,     0,
-       0,    41,     0,     0,    42,     2,   122,     0,     3,     4,
+     201,    70,   203,   205,   206,   237,   208,   207,   240,   283,
+     209,   234,   242,   254,   243,   259,   272,   288,   287,   248,
+     249,   298,   250,   251,   282,   145,   255,   256,   257,   245,
+     258,   289,   305,   260,   261,   262,   263,   264,   265,   266,
+     267,   268,   269,   145,   292,   299,   146,   152,   153,   154,
+     155,   306,   275,   321,   307,   309,   280,   281,   327,   320,
+     328,   273,   274,   326,   151,   152,   153,   154,   155,    95,
+      96,    97,   302,   303,   304,   330,   333,    98,   331,   350,
+     340,   357,   359,   365,    99,   369,   367,   371,   352,   372,
+     318,   319,   354,   374,   210,   271,   290,   291,   324,   135,
+     137,   247,   138,   360,     0,   362,   278,     0,     0,     0,
+       0,     0,     0,     0,   332,     0,   355,     0,   336,   373,
+       0,   358,     0,     0,     0,     0,     0,   342,   347,     0,
+       0,     0,     0,   312,   353,     0,     0,   314,   315,   316,
+     317,     0,     0,     0,     0,     0,     0,   361,   313,   363,
+       0,     0,     0,   366,     0,   368,     0,   370,     0,     0,
+       0,     0,    -5,     1,     0,     0,   375,   334,     0,     0,
+       0,     0,     0,     0,   339,     2,     0,   341,     3,     4,
        0,     0,     5,     6,     7,     8,     9,    10,     0,    11,
-       0,    12,    13,    14,    15,     0,     0,     0,    16,    17,
+     356,    12,    13,    14,    15,     0,     0,     0,    16,    17,
       18,    19,     0,     0,     0,    20,     0,    21,     0,     0,
       22,    23,    24,     0,     0,    25,     0,     0,     0,    26,
-      27,    28,     0,    29,     0,     0,     0,     0,     0,     0,
+      27,    28,    29,     0,     0,     0,     0,     0,     0,    30,
+       0,     0,     0,     0,     0,     0,    31,    32,    33,    34,
+      35,     0,     0,    36,    37,    38,     0,     0,     0,     0,
+       0,     0,    39,    40,     0,     0,     2,    -5,    41,     3,
+       4,    42,     0,     5,     0,     7,     8,    67,   119,     0,
+     120,     0,     0,     0,    14,    15,   174,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    68,     0,    24,     0,     0,   139,   140,   141,   142,
+     143,   144,     0,   145,   175,   176,   146,   147,   148,     0,
       30,     0,     0,     0,     0,     0,     0,    31,    32,    33,
-      34,    35,     0,     0,    36,    37,    38,     0,     0,     0,
-       0,     0,     0,    39,    40,     0,     0,     2,     0,    41,
-       3,     4,    42,     0,     5,     6,     7,     8,     9,    10,
-       0,    11,   338,    12,     0,    14,    15,     0,     0,     0,
-      16,    17,    18,    19,     0,     0,     0,     0,     0,    21,
-       0,     0,    22,    23,    24,     0,     0,    25,     0,     0,
-       0,     0,    27,    28,     0,    29,     0,     0,     0,     0,
-       0,     0,    30,     0,     0,     0,     0,     0,     0,    31,
-      32,    33,    34,    35,     0,     0,    36,    37,     0,     0,
-       0,     0,     0,     0,     0,    39,    40,     0,     0,     2,
-     301,    41,     3,     4,    42,     0,     5,     6,     7,     8,
-       9,    10,     0,    11,     0,    12,     0,    14,    15,     0,
-       0,     0,    16,    17,    18,    19,     0,     0,     0,     0,
-       0,    21,     0,     0,    22,    23,    24,     0,     0,    25,
-       0,     0,     0,     0,    27,    28,     0,    29,     0,     0,
-       0,     0,     0,     0,    30,     0,     0,     0,     0,     0,
-       0,    31,    32,    33,    34,    35,     0,     0,    36,    37,
-       0,     0,     0,     0,     0,     0,     0,    39,    40,     0,
-       0,     2,   301,    41,     3,     4,    42,     0,     5,     6,
-       7,     8,     9,    10,     0,    11,     0,    12,     0,    14,
-      15,     0,     0,     0,    16,    17,    18,    19,     0,     0,
-       0,     0,     0,     0,     0,     0,    22,     0,    24,     0,
-       0,     0,     0,     0,     0,     0,    27,    28,     0,    29,
-       0,     0,     0,     0,     0,     0,    30,     0,     0,     0,
-       0,     0,     0,    31,    32,    33,    34,    35,     0,     0,
-       0,    37,     0,     0,     0,     0,     0,     0,     0,    39,
-      40,     0,     0,     2,     0,    41,     3,     4,    42,     0,
+      34,    35,   149,   150,   151,   152,   153,   154,   155,     0,
+       0,     0,     0,    39,    40,     0,     0,     0,     0,    41,
+       0,     0,    42,     2,   121,     0,     3,     4,     0,     0,
        5,     6,     7,     8,     9,    10,     0,    11,     0,    12,
-       0,    14,    15,     0,     0,     0,    16,    17,    18,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    22,     0,
-      24,     0,     0,     2,     0,     0,     3,     4,    27,    28,
-       5,    29,     7,     8,    67,    10,     0,    11,    30,     0,
-       0,    14,    15,     0,     0,    31,    32,    33,    34,    35,
-       0,     0,    82,    37,    83,    84,    85,    86,    68,     0,
-      24,    39,    40,     0,     0,     0,     0,    41,     0,     0,
-      42,     0,     0,     0,     0,     0,     0,     0,    30,     0,
+      13,    14,    15,     0,     0,     0,    16,    17,    18,    19,
+       0,     0,     0,    20,     0,    21,     0,     0,    22,    23,
+      24,     0,     0,    25,     0,     0,     0,    26,    27,    28,
+      29,     0,     0,     0,     0,     0,     0,    30,     0,     0,
+       0,     0,     0,     0,    31,    32,    33,    34,    35,     0,
+       0,    36,    37,    38,     0,     0,     0,     0,     0,     0,
+      39,    40,     0,     0,     2,     0,    41,     3,     4,    42,
+       0,     5,     6,     7,     8,     9,    10,     0,    11,   337,
+      12,     0,    14,    15,     0,     0,     0,    16,    17,    18,
+      19,     0,     0,     0,     0,     0,    21,     0,     0,    22,
+      23,    24,     0,     0,    25,     0,     0,     0,     0,    27,
+      28,    29,     0,     0,     0,     0,     0,     0,    30,     0,
        0,     0,     0,     0,     0,    31,    32,    33,    34,    35,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    39,    40,     0,     0,     2,     0,    41,     3,     4,
-      42,     0,     5,     0,     7,     8,    67,    10,     0,    11,
-       0,     0,     0,    14,    15,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    83,     0,    85,     0,
-      68,     0,    24,     0,     2,     0,     0,     3,     4,     0,
-      91,     5,   103,     7,     8,    67,    10,     0,    11,     0,
-      30,     0,    14,    15,     0,     0,     0,    31,    32,    33,
-      34,    35,     0,     0,     0,     0,     0,     0,     0,    68,
-       0,    24,     0,    39,    40,     0,     0,     0,     0,    41,
-       0,     0,    42,     0,     0,     0,     0,     0,     0,    30,
+       0,     0,    36,    37,     0,     0,     0,     0,     0,     0,
+       0,    39,    40,     0,     0,     2,   300,    41,     3,     4,
+      42,     0,     5,     6,     7,     8,     9,    10,     0,    11,
+       0,    12,     0,    14,    15,     0,     0,     0,    16,    17,
+      18,    19,     0,     0,     0,     0,     0,    21,     0,     0,
+      22,    23,    24,     0,     0,    25,     0,     0,     0,     0,
+      27,    28,    29,     0,     0,     0,     0,     0,     0,    30,
        0,     0,     0,     0,     0,     0,    31,    32,    33,    34,
-      35,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    39,    40,     0,     0,     2,     0,    41,     3,
-       4,    42,     0,     5,     0,     7,     8,    67,    10,     0,
-      11,     0,     0,     0,    14,    15,     0,     0,     0,     0,
+      35,     0,     0,    36,    37,     0,     0,     0,     0,     0,
+       0,     0,    39,    40,     0,     0,     2,   300,    41,     3,
+       4,    42,     0,     5,     6,     7,     8,     9,    10,     0,
+      11,     0,    12,     0,    14,    15,     0,     0,     0,    16,
+      17,    18,    19,     0,     0,     0,     0,     0,     0,     0,
+       0,    22,     0,    24,     0,     0,     0,     0,     0,     0,
+       0,    27,    28,    29,     0,     0,     0,     0,     0,     0,
+      30,     0,     0,     0,     0,     0,     0,    31,    32,    33,
+      34,    35,     0,     0,     0,    37,     0,     0,     0,     0,
+       0,     0,     0,    39,    40,     0,     0,     2,     0,    41,
+       3,     4,    42,     0,     5,     6,     7,     8,     9,    10,
+       0,    11,     0,    12,     0,    14,    15,     0,     0,     0,
+      16,    17,    18,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    22,     0,    24,     0,     0,     0,     0,     0,
+       0,     0,    27,    28,    29,     0,     0,     0,     0,     0,
+       0,    30,     0,     0,     0,     0,     0,     0,    31,    32,
+      33,    34,    35,     0,     0,     0,    37,     0,     0,     0,
+       0,     0,     0,     0,    39,    40,     0,     0,     2,     0,
+      41,     3,     4,    42,     0,     5,     0,     7,     8,    67,
+      10,     0,    11,     0,     0,     0,    14,    15,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    82,     0,    83,
+      84,    85,    86,    68,     0,    24,     2,     0,     0,     3,
+       4,     0,     0,     5,     0,     7,     8,    67,    10,     0,
+      11,     0,    30,     0,    14,    15,     0,     0,     0,    31,
+      32,    33,    34,    35,     0,     0,     0,    83,     0,    85,
+       0,    68,     0,    24,     0,    39,    40,     0,     0,     0,
+       0,    41,     0,     0,    42,     0,     0,     0,     0,     0,
+      30,     0,     0,     0,     0,     0,     0,    31,    32,    33,
+      34,    35,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    39,    40,     0,     0,     2,     0,    41,
+       3,     4,    42,    91,     5,     0,     7,     8,    67,    10,
+       0,    11,     0,     0,     0,    14,    15,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    68,     0,    24,     2,     0,     0,     3,     4,     0,
-       0,     5,     0,     7,     8,    67,    10,     0,    11,     0,
-       0,    30,    14,    15,     0,     0,     0,     0,    31,    32,
-      33,    34,    35,     0,     0,     0,     0,     0,     0,    68,
-       0,    24,     0,     0,    39,    40,     0,     0,     0,     0,
-      69,     0,     0,    42,     0,     0,     0,     0,     0,    30,
+       0,     0,    68,     0,    24,     2,     0,     0,     3,     4,
+       0,     0,     5,     0,     7,     8,    67,    10,     0,    11,
+       0,    30,     0,    14,    15,     0,     0,     0,    31,    32,
+      33,    34,    35,     0,     0,     0,     0,     0,     0,     0,
+      68,     0,    24,     0,    39,    40,     0,     0,     0,     0,
+      41,     0,     0,    42,     0,     0,     0,     0,     0,    30,
        0,     0,     0,     0,     0,     0,    31,    32,    33,    34,
       35,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    39,    40,     0,     0,     2,     0,    72,     3,
+       0,     0,    39,    40,     0,     0,     2,     0,    69,     3,
        4,    42,     0,     5,     0,     7,     8,    67,    10,     0,
       11,     0,     0,     0,    14,    15,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,    68,     0,    24,     2,     0,     0,     3,     4,     0,
        0,     5,     0,     7,     8,    67,    10,     0,    11,     0,
-       0,    30,    14,    15,     0,     0,     0,     0,    31,    32,
-      33,    34,    35,     0,     0,     0,     0,     0,     0,    68,
-       0,    24,     0,     0,    39,    40,     0,     0,     0,     0,
-      75,     0,     0,    42,     0,     0,     0,     0,   190,    30,
-       0,     0,     0,     0,   191,     0,    31,    32,    33,    34,
-      35,     0,     0,     0,   140,   141,   142,   143,   144,   145,
-       0,   146,    39,    40,   147,   148,   149,     0,    41,     0,
-       0,    42,   192,     0,     0,     0,     0,     0,   193,     0,
-     150,   151,   152,   153,   154,   155,   156,     0,   140,   141,
-     142,   143,   144,   145,     0,   146,     0,     0,   147,   148,
-     149,     0,     0,     0,     0,   194,     0,     0,     0,     0,
-       0,   195,     0,     0,   150,   151,   152,   153,   154,   155,
-     156,   140,   141,   142,   143,   144,   145,     0,   146,     0,
-       0,   147,   148,   149,     0,     0,     0,     0,   196,     0,
-       0,     0,     0,     0,   197,     0,     0,   150,   151,   152,
-     153,   154,   155,   156,   140,   141,   142,   143,   144,   145,
-       0,   146,     0,     0,   147,   148,   149,     0,     0,     0,
-       0,   294,     0,     0,     0,     0,     0,     0,     0,     0,
-     150,   151,   152,   153,   154,   155,   156,   140,   141,   142,
-     143,   144,   145,     0,   146,     0,     0,   147,   148,   149,
-       0,     0,     0,     0,   295,     0,     0,     0,     0,     0,
-       0,     0,     0,   150,   151,   152,   153,   154,   155,   156,
-     140,   141,   142,   143,   144,   145,     0,   146,     0,     0,
-     147,   148,   149,     0,     0,     0,     0,   296,     0,     0,
-       0,     0,     0,     0,     0,     0,   150,   151,   152,   153,
-     154,   155,   156,   140,   141,   142,   143,   144,   145,     0,
-     146,     0,     0,   147,   148,   149,     0,     0,     0,     0,
-     297,     0,     0,     0,     0,     0,     0,     0,     0,   150,
-     151,   152,   153,   154,   155,   156,   140,   141,   142,   143,
-     144,   145,     0,   146,     0,     0,   147,   148,   149,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   200,
-       0,     0,   150,   151,   152,   153,   154,   155,   156,   140,
-     141,   142,   143,   144,   145,     0,   146,     0,     0,   147,
-     148,   149,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   150,   151,   152,   153,   154,
-     155,   156,   187,   201,     0,     0,     0,     0,     0,     0,
-     140,   141,   142,   143,   144,   145,     0,   146,     0,     0,
-     147,   148,   149,   140,   141,   142,   143,   144,   145,     0,
-     146,     0,     0,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,     0,     0,     0,     0,     0,     0,   150,
-     151,   152,   153,   154,   155,   156,     0,     0,     0,   205,
-     140,   141,   142,   143,   144,   145,     0,   146,     0,     0,
-     147,   148,   149,     0,     0,     0,     0,     0,   198,   199,
-       0,     0,     0,     0,     0,     0,   150,   151,   152,   153,
-     154,   155,   156,   140,   141,   142,   143,   144,   145,     0,
-     146,     0,     0,   147,   148,   149,   140,   141,   142,   143,
-       0,     0,     0,   146,     0,     0,   147,   148,   149,   150,
-     151,   152,   153,   154,   155,   156,     0,     0,     0,     0,
-       0,     0,   150,   151,   152,   153,   154,   155,   156
+      30,     0,    14,    15,     0,     0,     0,    31,    32,    33,
+      34,    35,     0,     0,     0,     0,     0,     0,     0,    68,
+       0,    24,     0,    39,    40,     0,     0,     0,     0,    72,
+       0,     0,    42,     0,     0,     0,     0,     0,    30,     0,
+       0,     0,     0,     0,     0,    31,    32,    33,    34,    35,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    39,    40,     0,     0,     2,     0,    75,     3,     4,
+      42,     0,     5,     0,     7,     8,    67,    10,     0,    11,
+       0,     0,     0,    14,    15,     0,     0,     0,    83,     0,
+      85,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      68,     0,    24,     0,     0,   139,   140,   141,   142,   143,
+     144,     0,   145,     0,     0,   146,   147,   148,     0,    30,
+       0,     0,     0,     0,     0,     0,    31,    32,    33,    34,
+      35,   149,   150,   151,   152,   153,   154,   155,   189,     0,
+       0,     0,    39,    40,   190,     0,     0,     0,    41,     0,
+       0,    42,     0,   139,   140,   141,   142,   143,   144,     0,
+     145,     0,     0,   146,   147,   148,     0,     0,     0,     0,
+       0,   191,     0,     0,     0,     0,     0,   192,     0,   149,
+     150,   151,   152,   153,   154,   155,   139,   140,   141,   142,
+     143,   144,     0,   145,     0,     0,   146,   147,   148,     0,
+       0,     0,     0,     0,   193,     0,     0,     0,     0,     0,
+     194,     0,   149,   150,   151,   152,   153,   154,   155,   139,
+     140,   141,   142,   143,   144,     0,   145,     0,     0,   146,
+     147,   148,     0,     0,     0,     0,     0,   195,     0,     0,
+       0,     0,     0,   196,     0,   149,   150,   151,   152,   153,
+     154,   155,   139,   140,   141,   142,   143,   144,     0,   145,
+       0,     0,   146,   147,   148,     0,     0,     0,     0,     0,
+     293,     0,     0,     0,     0,     0,     0,     0,   149,   150,
+     151,   152,   153,   154,   155,   139,   140,   141,   142,   143,
+     144,     0,   145,     0,     0,   146,   147,   148,     0,     0,
+       0,     0,     0,   294,     0,     0,     0,     0,     0,     0,
+       0,   149,   150,   151,   152,   153,   154,   155,   139,   140,
+     141,   142,   143,   144,     0,   145,     0,     0,   146,   147,
+     148,     0,     0,     0,     0,     0,   295,     0,     0,     0,
+       0,     0,     0,     0,   149,   150,   151,   152,   153,   154,
+     155,   139,   140,   141,   142,   143,   144,     0,   145,     0,
+       0,   146,   147,   148,     0,     0,     0,     0,     0,   296,
+       0,     0,     0,     0,     0,     0,     0,   149,   150,   151,
+     152,   153,   154,   155,   139,   140,   141,   142,   143,   144,
+       0,   145,     0,     0,   146,   147,   148,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   199,     0,
+     149,   150,   151,   152,   153,   154,   155,   139,   140,   141,
+     142,   143,   144,   186,   145,     0,     0,   146,   147,   148,
+     139,   140,   141,   142,   143,   144,     0,   145,     0,     0,
+     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
+       0,   200,     0,     0,     0,     0,   149,   150,   151,   152,
+     153,   154,   155,   139,   140,   141,   142,   143,   144,     0,
+     145,     0,     0,   146,   147,   148,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   149,
+     150,   151,   152,   153,   154,   155,     0,     0,     0,   204,
+     139,   140,   141,   142,   143,   144,     0,   145,     0,     0,
+     146,   147,   148,     0,     0,     0,     0,     0,   197,   198,
+       0,     0,     0,     0,     0,     0,   149,   150,   151,   152,
+     153,   154,   155,   139,   140,   141,   142,   143,   144,     0,
+     145,     0,     0,   146,   147,   148,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   149,
+     150,   151,   152,   153,   154,   155
 };
 
 static const yytype_int16 yycheck[] =
 {
-       6,     7,    79,     9,     0,   167,   271,    34,     0,    28,
-       4,    96,    18,   287,     8,    49,    22,     6,     7,    49,
-      52,    27,    28,    40,    30,    31,    32,    33,    34,    35,
-      36,    33,    64,    39,    40,    41,    42,    13,    23,    24,
-      69,    52,   307,    49,    20,    51,    52,    64,    24,    25,
-      52,    27,    24,    64,   131,   132,   330,    96,    85,    25,
-      99,    27,    68,    69,    93,    94,    72,    24,    87,    75,
-      52,    24,    78,   133,   134,    96,    69,    83,    99,    72,
-      69,    96,    64,    72,    99,   104,    69,    54,    55,    78,
-      75,    76,    77,    78,   359,    98,    99,    90,    91,    92,
-      93,    94,    96,    97,    96,    16,    17,    18,    91,    92,
-      93,    94,    99,    24,    98,    99,    24,    98,    99,    97,
-      31,    34,    35,    44,   100,    99,    24,   289,    24,    24,
-     136,    99,    52,   129,   140,   141,   142,   143,   144,   145,
+       6,     7,    79,     9,     0,   166,   270,    34,    28,     0,
+       4,    25,    18,    27,     8,   286,    22,    95,     6,     7,
+      33,    27,    28,    49,    30,    31,    32,    33,    34,    35,
+      36,    54,    55,    39,    40,    41,    42,    13,    40,    52,
+      68,    52,   306,    49,    20,    51,    52,    95,    24,    25,
+      98,    27,    63,   130,   131,    23,    24,    84,   329,    52,
+      52,    63,    68,    69,    92,    93,    72,    87,    49,    75,
+      63,    63,    78,    97,    98,   132,   133,    83,    24,    95,
+      24,    69,    98,   103,    72,    24,    61,    62,    63,    64,
+      78,    96,    95,    68,   358,    98,    71,    72,    73,    97,
+      98,    98,    96,    97,    95,    24,    74,    75,    76,    77,
+      97,    98,    87,    88,    89,    90,    91,    92,    93,    34,
+      35,    98,    44,    99,    24,    24,    24,   288,    52,   135,
+      51,    98,   128,   139,   140,   141,   142,   143,   144,   145,
      146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,    51,   158,    24,    24,   102,   162,   217,   102,   165,
-     101,    99,    99,    24,    99,   171,    46,    24,   245,    99,
-     176,   177,    51,   179,   180,    24,    41,   183,   184,   185,
-     174,   187,    24,    24,   190,   191,   192,   193,   194,   195,
-     196,   197,   198,   199,    99,    51,    24,    86,    24,    52,
-      87,    52,    86,   209,    41,    24,    99,   213,   214,    85,
-      24,    86,   206,   207,    86,    51,    85,    85,    52,   129,
-     280,   281,   282,   175,   201,    62,    63,    64,    65,    66,
-      67,   272,    69,    70,    71,    72,    73,    74,   298,   299,
-      52,    52,   283,    -1,    -1,   210,   306,   253,   254,    -1,
-      -1,    88,    89,    90,    91,    92,    93,    94,    -1,    -1,
-      -1,    -1,   322,   304,    -1,    -1,   326,   344,   309,    -1,
-     311,    -1,   349,    -1,    -1,   335,   336,    -1,    -1,    -1,
-      -1,    -1,   342,    -1,   290,    -1,    -1,    -1,   294,   295,
-     296,   297,    -1,    -1,    -1,   355,    -1,   357,   339,   293,
-      -1,   361,   343,   363,    -1,   365,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   354,   374,   356,    -1,    -1,   324,    -1,
-      -1,    -1,     0,     1,    -1,   331,    -1,    -1,   334,   370,
-      -1,    -1,    -1,    -1,    -1,    13,    -1,    -1,    16,    17,
-      -1,   347,    20,    21,    22,    23,    24,    25,    -1,    27,
-      -1,    29,    30,    31,    32,    -1,    -1,    -1,    36,    37,
-      38,    39,    -1,    -1,    -1,    43,    -1,    45,    -1,    -1,
-      48,    49,    50,    -1,    -1,    53,    -1,    -1,    -1,    57,
-      58,    59,    -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,
-      68,    -1,    -1,    -1,    -1,    -1,    -1,    75,    76,    77,
-      78,    79,    -1,    -1,    82,    83,    84,    -1,    -1,    -1,
-      -1,    -1,    -1,    91,    92,    -1,    -1,    13,    96,    97,
-      16,    17,   100,    -1,    20,    -1,    22,    23,    24,    25,
-      -1,    27,    -1,    -1,    -1,    31,    32,    -1,    -1,    -1,
-      44,    -1,    46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    48,    -1,    50,    -1,    -1,    -1,    62,    63,
-      64,    65,    66,    67,    -1,    69,    -1,    -1,    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,    -1,    -1,    91,    92,    -1,    -1,    -1,
-      -1,    97,    -1,    -1,   100,    13,   102,    -1,    16,    17,
+      24,   157,    24,   101,   101,   161,    98,   100,   164,   216,
+      98,    24,    98,    46,   170,    24,    98,   244,    24,   175,
+     176,   271,   178,   179,    51,    68,   182,   183,   184,   173,
+     186,    41,   282,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,    68,    24,    24,    71,    90,    91,    92,
+      93,    51,   208,   303,    98,    24,   212,   213,   308,    85,
+     310,   205,   206,    24,    89,    90,    91,    92,    93,    16,
+      17,    18,   279,   280,   281,    52,    52,    24,    86,    24,
+      85,    84,    98,    24,    31,    51,    85,    85,   338,    84,
+     297,   298,   342,    84,   128,   200,   252,   253,   305,    52,
+      52,   174,    52,   353,    -1,   355,   209,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   321,    -1,   343,    -1,   325,   369,
+      -1,   348,    -1,    -1,    -1,    -1,    -1,   334,   335,    -1,
+      -1,    -1,    -1,   289,   341,    -1,    -1,   293,   294,   295,
+     296,    -1,    -1,    -1,    -1,    -1,    -1,   354,   292,   356,
+      -1,    -1,    -1,   360,    -1,   362,    -1,   364,    -1,    -1,
+      -1,    -1,     0,     1,    -1,    -1,   373,   323,    -1,    -1,
+      -1,    -1,    -1,    -1,   330,    13,    -1,   333,    16,    17,
       -1,    -1,    20,    21,    22,    23,    24,    25,    -1,    27,
-      -1,    29,    30,    31,    32,    -1,    -1,    -1,    36,    37,
+     346,    29,    30,    31,    32,    -1,    -1,    -1,    36,    37,
       38,    39,    -1,    -1,    -1,    43,    -1,    45,    -1,    -1,
       48,    49,    50,    -1,    -1,    53,    -1,    -1,    -1,    57,
-      58,    59,    -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,
-      68,    -1,    -1,    -1,    -1,    -1,    -1,    75,    76,    77,
-      78,    79,    -1,    -1,    82,    83,    84,    -1,    -1,    -1,
-      -1,    -1,    -1,    91,    92,    -1,    -1,    13,    -1,    97,
-      16,    17,   100,    -1,    20,    21,    22,    23,    24,    25,
-      -1,    27,    28,    29,    -1,    31,    32,    -1,    -1,    -1,
-      36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
-      -1,    -1,    48,    49,    50,    -1,    -1,    53,    -1,    -1,
-      -1,    -1,    58,    59,    -1,    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,    13,
-      96,    97,    16,    17,   100,    -1,    20,    21,    22,    23,
-      24,    25,    -1,    27,    -1,    29,    -1,    31,    32,    -1,
-      -1,    -1,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
-      -1,    45,    -1,    -1,    48,    49,    50,    -1,    -1,    53,
-      -1,    -1,    -1,    -1,    58,    59,    -1,    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,    13,    96,    97,    16,    17,   100,    -1,    20,    21,
-      22,    23,    24,    25,    -1,    27,    -1,    29,    -1,    31,
-      32,    -1,    -1,    -1,    36,    37,    38,    39,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,    50,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    58,    59,    -1,    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,    13,    -1,    97,    16,    17,   100,    -1,
+      58,    59,    60,    -1,    -1,    -1,    -1,    -1,    -1,    67,
+      -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    76,    77,
+      78,    -1,    -1,    81,    82,    83,    -1,    -1,    -1,    -1,
+      -1,    -1,    90,    91,    -1,    -1,    13,    95,    96,    16,
+      17,    99,    -1,    20,    -1,    22,    23,    24,    25,    -1,
+      27,    -1,    -1,    -1,    31,    32,    41,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    48,    -1,    50,    -1,    -1,    61,    62,    63,    64,
+      65,    66,    -1,    68,    69,    70,    71,    72,    73,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    76,
+      77,    78,    87,    88,    89,    90,    91,    92,    93,    -1,
+      -1,    -1,    -1,    90,    91,    -1,    -1,    -1,    -1,    96,
+      -1,    -1,    99,    13,   101,    -1,    16,    17,    -1,    -1,
       20,    21,    22,    23,    24,    25,    -1,    27,    -1,    29,
-      -1,    31,    32,    -1,    -1,    -1,    36,    37,    38,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,
-      50,    -1,    -1,    13,    -1,    -1,    16,    17,    58,    59,
-      20,    61,    22,    23,    24,    25,    -1,    27,    68,    -1,
-      -1,    31,    32,    -1,    -1,    75,    76,    77,    78,    79,
-      -1,    -1,    42,    83,    44,    45,    46,    47,    48,    -1,
-      50,    91,    92,    -1,    -1,    -1,    -1,    97,    -1,    -1,
-     100,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,
-      -1,    -1,    -1,    -1,    -1,    75,    76,    77,    78,    79,
+      30,    31,    32,    -1,    -1,    -1,    36,    37,    38,    39,
+      -1,    -1,    -1,    43,    -1,    45,    -1,    -1,    48,    49,
+      50,    -1,    -1,    53,    -1,    -1,    -1,    57,    58,    59,
+      60,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,    -1,
+      -1,    -1,    -1,    -1,    74,    75,    76,    77,    78,    -1,
+      -1,    81,    82,    83,    -1,    -1,    -1,    -1,    -1,    -1,
+      90,    91,    -1,    -1,    13,    -1,    96,    16,    17,    99,
+      -1,    20,    21,    22,    23,    24,    25,    -1,    27,    28,
+      29,    -1,    31,    32,    -1,    -1,    -1,    36,    37,    38,
+      39,    -1,    -1,    -1,    -1,    -1,    45,    -1,    -1,    48,
+      49,    50,    -1,    -1,    53,    -1,    -1,    -1,    -1,    58,
+      59,    60,    -1,    -1,    -1,    -1,    -1,    -1,    67,    -1,
+      -1,    -1,    -1,    -1,    -1,    74,    75,    76,    77,    78,
+      -1,    -1,    81,    82,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    90,    91,    -1,    -1,    13,    95,    96,    16,    17,
+      99,    -1,    20,    21,    22,    23,    24,    25,    -1,    27,
+      -1,    29,    -1,    31,    32,    -1,    -1,    -1,    36,    37,
+      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    -1,    -1,
+      48,    49,    50,    -1,    -1,    53,    -1,    -1,    -1,    -1,
+      58,    59,    60,    -1,    -1,    -1,    -1,    -1,    -1,    67,
+      -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    76,    77,
+      78,    -1,    -1,    81,    82,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    90,    91,    -1,    -1,    13,    95,    96,    16,
+      17,    99,    -1,    20,    21,    22,    23,    24,    25,    -1,
+      27,    -1,    29,    -1,    31,    32,    -1,    -1,    -1,    36,
+      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    48,    -1,    50,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    58,    59,    60,    -1,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    76,
+      77,    78,    -1,    -1,    -1,    82,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    90,    91,    -1,    -1,    13,    -1,    96,
+      16,    17,    99,    -1,    20,    21,    22,    23,    24,    25,
+      -1,    27,    -1,    29,    -1,    31,    32,    -1,    -1,    -1,
+      36,    37,    38,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    48,    -1,    50,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    58,    59,    60,    -1,    -1,    -1,    -1,    -1,
+      -1,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
+      76,    77,    78,    -1,    -1,    -1,    82,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    90,    91,    -1,    -1,    13,    -1,
+      96,    16,    17,    99,    -1,    20,    -1,    22,    23,    24,
+      25,    -1,    27,    -1,    -1,    -1,    31,    32,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    -1,    44,
+      45,    46,    47,    48,    -1,    50,    13,    -1,    -1,    16,
+      17,    -1,    -1,    20,    -1,    22,    23,    24,    25,    -1,
+      27,    -1,    67,    -1,    31,    32,    -1,    -1,    -1,    74,
+      75,    76,    77,    78,    -1,    -1,    -1,    44,    -1,    46,
+      -1,    48,    -1,    50,    -1,    90,    91,    -1,    -1,    -1,
+      -1,    96,    -1,    -1,    99,    -1,    -1,    -1,    -1,    -1,
+      67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    76,
+      77,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    90,    91,    -1,    -1,    13,    -1,    96,
+      16,    17,    99,    19,    20,    -1,    22,    23,    24,    25,
+      -1,    27,    -1,    -1,    -1,    31,    32,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    91,    92,    -1,    -1,    13,    -1,    97,    16,    17,
-     100,    -1,    20,    -1,    22,    23,    24,    25,    -1,    27,
-      -1,    -1,    -1,    31,    32,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    44,    -1,    46,    -1,
-      48,    -1,    50,    -1,    13,    -1,    -1,    16,    17,    -1,
-      19,    20,    60,    22,    23,    24,    25,    -1,    27,    -1,
-      68,    -1,    31,    32,    -1,    -1,    -1,    75,    76,    77,
-      78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    48,
-      -1,    50,    -1,    91,    92,    -1,    -1,    -1,    -1,    97,
-      -1,    -1,   100,    -1,    -1,    -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,    13,    -1,    97,    16,
-      17,   100,    -1,    20,    -1,    22,    23,    24,    25,    -1,
+      -1,    -1,    48,    -1,    50,    13,    -1,    -1,    16,    17,
+      -1,    -1,    20,    -1,    22,    23,    24,    25,    -1,    27,
+      -1,    67,    -1,    31,    32,    -1,    -1,    -1,    74,    75,
+      76,    77,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      48,    -1,    50,    -1,    90,    91,    -1,    -1,    -1,    -1,
+      96,    -1,    -1,    99,    -1,    -1,    -1,    -1,    -1,    67,
+      -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    76,    77,
+      78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    90,    91,    -1,    -1,    13,    -1,    96,    16,
+      17,    99,    -1,    20,    -1,    22,    23,    24,    25,    -1,
       27,    -1,    -1,    -1,    31,    32,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    48,    -1,    50,    13,    -1,    -1,    16,    17,    -1,
       -1,    20,    -1,    22,    23,    24,    25,    -1,    27,    -1,
-      -1,    68,    31,    32,    -1,    -1,    -1,    -1,    75,    76,
-      77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    48,
-      -1,    50,    -1,    -1,    91,    92,    -1,    -1,    -1,    -1,
-      97,    -1,    -1,   100,    -1,    -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,    13,    -1,    97,    16,
-      17,   100,    -1,    20,    -1,    22,    23,    24,    25,    -1,
-      27,    -1,    -1,    -1,    31,    32,    -1,    -1,    -1,    -1,
+      67,    -1,    31,    32,    -1,    -1,    -1,    74,    75,    76,
+      77,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    48,
+      -1,    50,    -1,    90,    91,    -1,    -1,    -1,    -1,    96,
+      -1,    -1,    99,    -1,    -1,    -1,    -1,    -1,    67,    -1,
+      -1,    -1,    -1,    -1,    -1,    74,    75,    76,    77,    78,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    48,    -1,    50,    13,    -1,    -1,    16,    17,    -1,
-      -1,    20,    -1,    22,    23,    24,    25,    -1,    27,    -1,
-      -1,    68,    31,    32,    -1,    -1,    -1,    -1,    75,    76,
-      77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,    48,
-      -1,    50,    -1,    -1,    91,    92,    -1,    -1,    -1,    -1,
-      97,    -1,    -1,   100,    -1,    -1,    -1,    -1,    46,    68,
-      -1,    -1,    -1,    -1,    52,    -1,    75,    76,    77,    78,
-      79,    -1,    -1,    -1,    62,    63,    64,    65,    66,    67,
-      -1,    69,    91,    92,    72,    73,    74,    -1,    97,    -1,
-      -1,   100,    46,    -1,    -1,    -1,    -1,    -1,    52,    -1,
-      88,    89,    90,    91,    92,    93,    94,    -1,    62,    63,
-      64,    65,    66,    67,    -1,    69,    -1,    -1,    72,    73,
-      74,    -1,    -1,    -1,    -1,    46,    -1,    -1,    -1,    -1,
-      -1,    52,    -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,    46,    -1,
-      -1,    -1,    -1,    -1,    52,    -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,    46,    -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,
+      -1,    90,    91,    -1,    -1,    13,    -1,    96,    16,    17,
+      99,    -1,    20,    -1,    22,    23,    24,    25,    -1,    27,
+      -1,    -1,    -1,    31,    32,    -1,    -1,    -1,    44,    -1,
+      46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      48,    -1,    50,    -1,    -1,    61,    62,    63,    64,    65,
+      66,    -1,    68,    -1,    -1,    71,    72,    73,    -1,    67,
+      -1,    -1,    -1,    -1,    -1,    -1,    74,    75,    76,    77,
+      78,    87,    88,    89,    90,    91,    92,    93,    46,    -1,
+      -1,    -1,    90,    91,    52,    -1,    -1,    -1,    96,    -1,
+      -1,    99,    -1,    61,    62,    63,    64,    65,    66,    -1,
+      68,    -1,    -1,    71,    72,    73,    -1,    -1,    -1,    -1,
+      -1,    46,    -1,    -1,    -1,    -1,    -1,    52,    -1,    87,
+      88,    89,    90,    91,    92,    93,    61,    62,    63,    64,
+      65,    66,    -1,    68,    -1,    -1,    71,    72,    73,    -1,
       -1,    -1,    -1,    -1,    46,    -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,    -1,    -1,    -1,    -1,    46,    -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,    -1,    -1,    -1,    -1,
-      46,    -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,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    52,
-      -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,
-      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
-      93,    94,    54,    96,    -1,    -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
+      52,    -1,    87,    88,    89,    90,    91,    92,    93,    61,
+      62,    63,    64,    65,    66,    -1,    68,    -1,    -1,    71,
+      72,    73,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
+      -1,    -1,    -1,    52,    -1,    87,    88,    89,    90,    91,
+      92,    93,    61,    62,    63,    64,    65,    66,    -1,    68,
+      -1,    -1,    71,    72,    73,    -1,    -1,    -1,    -1,    -1,
+      46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,
+      89,    90,    91,    92,    93,    61,    62,    63,    64,    65,
+      66,    -1,    68,    -1,    -1,    71,    72,    73,    -1,    -1,
+      -1,    -1,    -1,    46,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    87,    88,    89,    90,    91,    92,    93,    61,    62,
+      63,    64,    65,    66,    -1,    68,    -1,    -1,    71,    72,
+      73,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,    92,
+      93,    61,    62,    63,    64,    65,    66,    -1,    68,    -1,
+      -1,    71,    72,    73,    -1,    -1,    -1,    -1,    -1,    46,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
+      90,    91,    92,    93,    61,    62,    63,    64,    65,    66,
+      -1,    68,    -1,    -1,    71,    72,    73,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    52,    -1,
+      87,    88,    89,    90,    91,    92,    93,    61,    62,    63,
+      64,    65,    66,    54,    68,    -1,    -1,    71,    72,    73,
+      61,    62,    63,    64,    65,    66,    -1,    68,    -1,    -1,
+      71,    72,    73,    87,    88,    89,    90,    91,    92,    93,
+      -1,    95,    -1,    -1,    -1,    -1,    87,    88,    89,    90,
+      91,    92,    93,    61,    62,    63,    64,    65,    66,    -1,
+      68,    -1,    -1,    71,    72,    73,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,
+      88,    89,    90,    91,    92,    93,    -1,    -1,    -1,    97,
+      61,    62,    63,    64,    65,    66,    -1,    68,    -1,    -1,
+      71,    72,    73,    -1,    -1,    -1,    -1,    -1,    79,    80,
+      -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,
+      91,    92,    93,    61,    62,    63,    64,    65,    66,    -1,
+      68,    -1,    -1,    71,    72,    73,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,
+      88,    89,    90,    91,    92,    93
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1198,65 +1201,65 @@ static const yytype_uint8 yystos[] =
 {
        0,     1,    13,    16,    17,    20,    21,    22,    23,    24,
       25,    27,    29,    30,    31,    32,    36,    37,    38,    39,
-      43,    45,    48,    49,    50,    53,    57,    58,    59,    61,
-      68,    75,    76,    77,    78,    79,    82,    83,    84,    91,
-      92,    97,   100,   104,   105,   106,   107,   109,   111,   115,
-     116,   117,   122,   123,   124,   125,   126,   127,   133,   135,
-     137,   141,   146,   149,    96,    24,   123,    24,    48,    97,
-     124,   147,    97,   147,   123,    97,   124,   148,   136,   140,
-      49,   128,    42,    44,    45,    46,    47,   124,   134,   138,
-      49,    19,   124,    54,    55,    16,    17,    18,    24,    31,
-      24,    24,   124,    60,   124,   134,    24,   132,   124,   124,
-     124,   124,   124,   124,   124,   129,   142,   124,   124,   124,
-      25,    27,   102,   124,   150,   151,   152,   153,     0,    96,
-     124,    40,    64,   124,   108,   114,   117,   124,   127,   146,
-      62,    63,    64,    65,    66,    67,    69,    72,    73,    74,
-      88,    89,    90,    91,    92,    93,    94,   119,    97,   124,
-     124,   147,    99,   147,   147,    99,   147,   119,    24,   130,
-     124,    44,   134,    24,    24,    41,    70,    71,    24,    52,
-      64,   123,   123,    52,    64,    52,    51,    54,   134,    99,
-      46,    52,    46,    52,    46,    52,    46,    52,    80,    81,
-      52,    96,    24,   131,    24,    98,   102,   102,   101,    99,
-      99,   105,   120,   119,   119,   120,   120,   124,   124,   124,
-     124,   124,   124,   124,   124,   124,   124,   124,   124,   124,
-     124,   124,   124,   124,   124,    24,   143,    98,   124,    98,
-      98,   124,   143,    99,   124,   139,   123,    24,   126,   124,
-     124,   124,   124,    52,    64,    46,   124,   124,   124,   124,
-      24,   124,   124,   124,   124,   124,   124,   124,   124,   124,
-     124,   110,   110,    99,   123,   123,   124,    25,    27,   153,
-     121,   124,   124,    51,   120,    96,    99,    96,    24,   119,
-      41,   124,   124,    24,    46,    46,    46,    46,   107,   121,
-      24,    96,   109,   120,   120,   120,   121,    51,    99,   145,
-      24,   145,   143,   124,   123,   124,   124,   124,   124,   120,
-     120,    86,   121,    33,    52,   120,   107,    24,   121,   121,
-      96,    52,    87,   120,    52,   124,   112,   120,    28,   145,
-     124,    86,   124,   120,    34,    35,   113,   118,   120,    34,
-      85,    24,   144,   121,   120,   121,   119,   124,    85,   119,
-      99,   121,   120,   121,   120,   107,    24,   120,    86,   120,
-      51,   120,    86,    85,   121,    85,   120
+      43,    45,    48,    49,    50,    53,    57,    58,    59,    60,
+      67,    74,    75,    76,    77,    78,    81,    82,    83,    90,
+      91,    96,    99,   103,   104,   105,   106,   108,   110,   114,
+     115,   116,   121,   122,   123,   124,   125,   126,   132,   134,
+     136,   140,   145,   148,    95,    24,   122,    24,    48,    96,
+     123,   146,    96,   146,   122,    96,   123,   147,   135,   139,
+      49,   127,    42,    44,    45,    46,    47,   123,   133,   137,
+      49,    19,   123,    54,    55,    16,    17,    18,    24,    31,
+      24,    24,   123,   123,   133,    24,   131,   123,   123,   123,
+     123,   123,   123,   123,   128,   141,   123,   123,   123,    25,
+      27,   101,   123,   149,   150,   151,   152,     0,    95,   123,
+      40,    63,   123,   107,   113,   116,   123,   126,   145,    61,
+      62,    63,    64,    65,    66,    68,    71,    72,    73,    87,
+      88,    89,    90,    91,    92,    93,   118,    96,   123,   123,
+     146,    98,   146,   146,    98,   146,   118,    24,   129,   123,
+      44,   133,    24,    24,    41,    69,    70,    24,    52,    63,
+     122,   122,    52,    63,    52,    51,    54,   133,    98,    46,
+      52,    46,    52,    46,    52,    46,    52,    79,    80,    52,
+      95,    24,   130,    24,    97,   101,   101,   100,    98,    98,
+     104,   119,   118,   118,   119,   119,   123,   123,   123,   123,
+     123,   123,   123,   123,   123,   123,   123,   123,   123,   123,
+     123,   123,   123,   123,    24,   142,    97,   123,    97,    97,
+     123,   142,    98,   123,   138,   122,    24,   125,   123,   123,
+     123,   123,    52,    63,    46,   123,   123,   123,   123,    24,
+     123,   123,   123,   123,   123,   123,   123,   123,   123,   123,
+     109,   109,    98,   122,   122,   123,    25,    27,   152,   120,
+     123,   123,    51,   119,    95,    98,    95,    24,   118,    41,
+     123,   123,    24,    46,    46,    46,    46,   106,   120,    24,
+      95,   108,   119,   119,   119,   120,    51,    98,   144,    24,
+     144,   142,   123,   122,   123,   123,   123,   123,   119,   119,
+      85,   120,    33,    52,   119,   106,    24,   120,   120,    95,
+      52,    86,   119,    52,   123,   111,   119,    28,   144,   123,
+      85,   123,   119,    34,    35,   112,   117,   119,    34,    84,
+      24,   143,   120,   119,   120,   118,   123,    84,   118,    98,
+     120,   119,   120,   119,   106,    24,   119,    85,   119,    51,
+     119,    85,    84,   120,    84,   119
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   103,   104,   104,   104,   105,   105,   105,   106,   106,
-     106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
-     106,   107,   107,   107,   108,   108,   108,   108,   109,   109,
-     109,   109,   109,   109,   109,   109,   109,   109,   110,   111,
-     111,   112,   112,   113,   114,   114,   115,   116,   117,   118,
-     119,   120,   121,   121,   121,   122,   123,   123,   123,   123,
-     123,   123,   124,   124,   124,   124,   124,   124,   124,   124,
-     124,   124,   124,   124,   124,   124,   124,   124,   124,   124,
-     124,   124,   124,   124,   124,   124,   124,   124,   124,   124,
-     124,   124,   124,   124,   124,   125,   125,   125,   125,   125,
-     125,   125,   125,   126,   126,   127,   127,   127,   127,   127,
-     128,   127,   129,   127,   127,   127,   127,   127,   127,   130,
-     130,   131,   131,   132,   132,   133,   133,   133,   133,   133,
-     133,   134,   134,   135,   135,   135,   135,   136,   135,   138,
-     139,   137,   137,   140,   137,   137,   137,   142,   141,   143,
-     143,   143,   143,   144,   144,   144,   145,   146,   147,   147,
-     147,   148,   148,   149,   150,   150,   150,   150,   151,   151,
-     152,   152,   153,   153
+       0,   102,   103,   103,   103,   104,   104,   104,   105,   105,
+     105,   105,   105,   105,   105,   105,   105,   105,   105,   105,
+     105,   106,   106,   106,   107,   107,   107,   107,   108,   108,
+     108,   108,   108,   108,   108,   108,   108,   108,   109,   110,
+     110,   111,   111,   112,   113,   113,   114,   115,   116,   117,
+     118,   119,   120,   120,   120,   121,   122,   122,   122,   122,
+     122,   122,   123,   123,   123,   123,   123,   123,   123,   123,
+     123,   123,   123,   123,   123,   123,   123,   123,   123,   123,
+     123,   123,   123,   123,   123,   123,   123,   123,   123,   123,
+     123,   123,   123,   123,   123,   124,   124,   124,   124,   124,
+     124,   124,   124,   125,   125,   126,   126,   126,   126,   126,
+     127,   126,   128,   126,   126,   126,   126,   126,   126,   129,
+     129,   130,   130,   131,   131,   132,   132,   132,   132,   132,
+     132,   133,   133,   134,   134,   134,   135,   134,   137,   138,
+     136,   136,   139,   136,   136,   136,   141,   140,   142,   142,
+     142,   142,   143,   143,   143,   144,   145,   146,   146,   146,
+     147,   147,   148,   149,   149,   149,   149,   150,   150,   151,
+     151,   152,   152
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1275,11 +1278,11 @@ static const yytype_int8 yyr2[] =
        6,     4,     6,     2,     1,     2,     1,     1,     2,     1,
        0,     3,     0,     3,     2,     4,     2,     4,     2,     1,
        3,     1,     3,     1,     3,     2,     2,     2,     2,     3,
-       2,     3,     2,     2,     2,     3,     2,     0,     3,     0,
-       0,     9,     2,     0,     7,     8,     6,     0,     3,     0,
-       1,     3,     4,     0,     1,     3,     0,     2,     0,     1,
-       3,     1,     3,     3,     0,     1,     1,     1,     1,     3,
-       1,     3,     3,     3
+       2,     3,     2,     2,     3,     2,     0,     3,     0,     0,
+       9,     2,     0,     7,     8,     6,     0,     3,     0,     1,
+       3,     4,     0,     1,     3,     0,     2,     0,     1,     3,
+       1,     3,     3,     0,     1,     1,     1,     1,     3,     1,
+       3,     3,     3
 };
 
 
@@ -1717,73 +1720,73 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
     case 21: /* BLTIN  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1721 "engines/director/lingo/lingo-gr.cpp"
+#line 1724 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 22: /* FBLTIN  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1727 "engines/director/lingo/lingo-gr.cpp"
+#line 1730 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 23: /* RBLTIN  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1733 "engines/director/lingo/lingo-gr.cpp"
+#line 1736 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 24: /* ID  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1739 "engines/director/lingo/lingo-gr.cpp"
+#line 1742 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 25: /* STRING  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1745 "engines/director/lingo/lingo-gr.cpp"
+#line 1748 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 26: /* HANDLER  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1751 "engines/director/lingo/lingo-gr.cpp"
+#line 1754 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 27: /* SYMBOL  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1757 "engines/director/lingo/lingo-gr.cpp"
+#line 1760 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 28: /* ENDCLAUSE  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1763 "engines/director/lingo/lingo-gr.cpp"
+#line 1766 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 29: /* tPLAYACCEL  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1769 "engines/director/lingo/lingo-gr.cpp"
+#line 1772 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 30: /* tMETHOD  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1775 "engines/director/lingo/lingo-gr.cpp"
+#line 1778 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 31: /* THEOBJECTFIELD  */
 #line 137 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).objectfield).os; }
-#line 1781 "engines/director/lingo/lingo-gr.cpp"
+#line 1784 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case 141: /* on  */
+    case 140: /* on  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1787 "engines/director/lingo/lingo-gr.cpp"
+#line 1790 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2053,7 +2056,7 @@ yyreduce:
   case 4:
 #line 143 "engines/director/lingo/lingo-gr.y"
                                 { yyerrok; }
-#line 2057 "engines/director/lingo/lingo-gr.cpp"
+#line 2060 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 8:
@@ -2064,7 +2067,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code);
 		delete (yyvsp[0].s); }
-#line 2068 "engines/director/lingo/lingo-gr.cpp"
+#line 2071 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 9:
@@ -2072,7 +2075,7 @@ yyreduce:
                                                 {
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code); }
-#line 2076 "engines/director/lingo/lingo-gr.cpp"
+#line 2079 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10:
@@ -2088,19 +2091,19 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-4].e)[0]);
 		g_lingo->codeInt((yyvsp[-4].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2092 "engines/director/lingo/lingo-gr.cpp"
+#line 2095 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11:
 #line 170 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code1(LC::c_after); }
-#line 2098 "engines/director/lingo/lingo-gr.cpp"
+#line 2101 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12:
 #line 171 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code1(LC::c_before); }
-#line 2104 "engines/director/lingo/lingo-gr.cpp"
+#line 2107 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13:
@@ -2111,7 +2114,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2115 "engines/director/lingo/lingo-gr.cpp"
+#line 2118 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 14:
@@ -2123,7 +2126,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2127 "engines/director/lingo/lingo-gr.cpp"
+#line 2130 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15:
@@ -2134,7 +2137,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2138 "engines/director/lingo/lingo-gr.cpp"
+#line 2141 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16:
@@ -2146,7 +2149,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2150 "engines/director/lingo/lingo-gr.cpp"
+#line 2153 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17:
@@ -2157,7 +2160,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2161 "engines/director/lingo/lingo-gr.cpp"
+#line 2164 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 18:
@@ -2168,7 +2171,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2172 "engines/director/lingo/lingo-gr.cpp"
+#line 2175 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19:
@@ -2184,7 +2187,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-6].e)[0]);
 		g_lingo->codeInt((yyvsp[-6].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2188 "engines/director/lingo/lingo-gr.cpp"
+#line 2191 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20:
@@ -2195,7 +2198,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].objectfield).oe);
 		delete (yyvsp[-2].objectfield).os;
 		(yyval.code) = (yyvsp[0].code); }
-#line 2199 "engines/director/lingo/lingo-gr.cpp"
+#line 2202 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30:
@@ -2206,7 +2209,7 @@ yyreduce:
 		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-5].code));
 		(*g_lingo->_currentScript)[(yyvsp[-5].code) + 1] = body;	/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-5].code) + 2] = end; }
-#line 2210 "engines/director/lingo/lingo-gr.cpp"
+#line 2213 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31:
@@ -2223,7 +2226,7 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 3] = body;		/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 4] = inc;		/* increment */
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 5] = end; }
-#line 2227 "engines/director/lingo/lingo-gr.cpp"
+#line 2230 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32:
@@ -2240,7 +2243,7 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-11].code) + 3] = body;		/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-11].code) + 4] = inc;		/* increment */
 		(*g_lingo->_currentScript)[(yyvsp[-11].code) + 5] = end; }
-#line 2244 "engines/director/lingo/lingo-gr.cpp"
+#line 2247 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33:
@@ -2255,14 +2258,14 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-7].code) + 3] = body;		/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-7].code) + 4] = 0;		/* increment */
 		(*g_lingo->_currentScript)[(yyvsp[-7].code) + 5] = end; }
-#line 2259 "engines/director/lingo/lingo-gr.cpp"
+#line 2262 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34:
 #line 295 "engines/director/lingo/lingo-gr.y"
                         {
 		g_lingo->code1(LC::c_nextRepeat); }
-#line 2266 "engines/director/lingo/lingo-gr.cpp"
+#line 2269 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35:
@@ -2272,7 +2275,7 @@ yyreduce:
 		WRITE_UINT32(&end, (yyvsp[0].code) - (yyvsp[-2].code));
 		g_lingo->code1(STOP);
 		(*g_lingo->_currentScript)[(yyvsp[-2].code) + 1] = end; }
-#line 2276 "engines/director/lingo/lingo-gr.cpp"
+#line 2279 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36:
@@ -2281,7 +2284,7 @@ yyreduce:
 		inst end;
 		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-3].code));
 		(*g_lingo->_currentScript)[(yyvsp[-3].code) + 1] = end; }
-#line 2285 "engines/director/lingo/lingo-gr.cpp"
+#line 2288 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37:
@@ -2290,7 +2293,7 @@ yyreduce:
 		inst end;
 		WRITE_UINT32(&end, (yyvsp[0].code) - (yyvsp[-2].code));
 		(*g_lingo->_currentScript)[(yyvsp[-2].code) + 1] = end; }
-#line 2294 "engines/director/lingo/lingo-gr.cpp"
+#line 2297 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38:
@@ -2298,7 +2301,7 @@ yyreduce:
                                                         {
 		(yyval.code) = g_lingo->code1(LC::c_tellcode);
 		g_lingo->code1(STOP); }
-#line 2302 "engines/director/lingo/lingo-gr.cpp"
+#line 2305 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39:
@@ -2313,7 +2316,7 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-8].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-8].code), (yyvsp[-1].code) - (yyvsp[-8].code), 0); }
-#line 2317 "engines/director/lingo/lingo-gr.cpp"
+#line 2320 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40:
@@ -2328,7 +2331,7 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-11].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-11].code), (yyvsp[-1].code) - (yyvsp[-11].code), (yyvsp[-3].code) - (yyvsp[-11].code)); }
-#line 2332 "engines/director/lingo/lingo-gr.cpp"
+#line 2335 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43:
@@ -2339,7 +2342,7 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-5].code) + 1] = then;	/* thenpart */
 
 		g_lingo->codeLabel((yyvsp[-5].code)); }
-#line 2343 "engines/director/lingo/lingo-gr.cpp"
+#line 2346 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44:
@@ -2354,7 +2357,7 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-10].code), (yyvsp[-1].code) - (yyvsp[-10].code), (yyvsp[-3].code) - (yyvsp[-10].code)); }
-#line 2358 "engines/director/lingo/lingo-gr.cpp"
+#line 2361 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45:
@@ -2369,13 +2372,13 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-6].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-6].code), (yyvsp[-1].code) - (yyvsp[-6].code), (yyvsp[-1].code) - (yyvsp[-6].code)); }
-#line 2373 "engines/director/lingo/lingo-gr.cpp"
+#line 2376 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46:
 #line 367 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = g_lingo->code3(LC::c_repeatwhilecode, STOP, STOP); }
-#line 2379 "engines/director/lingo/lingo-gr.cpp"
+#line 2382 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47:
@@ -2385,7 +2388,7 @@ yyreduce:
 		g_lingo->code3(STOP, STOP, STOP);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2389 "engines/director/lingo/lingo-gr.cpp"
+#line 2392 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48:
@@ -2395,7 +2398,7 @@ yyreduce:
 		g_lingo->code3(STOP, STOP, STOP);
 		g_lingo->code1(0);  // Do not skip end
 		g_lingo->codeLabel(0); }
-#line 2399 "engines/director/lingo/lingo-gr.cpp"
+#line 2402 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49:
@@ -2406,25 +2409,25 @@ yyreduce:
 		(yyval.code) = g_lingo->code1(LC::c_ifcode);
 		g_lingo->code3(STOP, STOP, STOP);
 		g_lingo->code1(skipEnd); }
-#line 2410 "engines/director/lingo/lingo-gr.cpp"
+#line 2413 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50:
 #line 388 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2416 "engines/director/lingo/lingo-gr.cpp"
+#line 2419 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51:
 #line 390 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2422 "engines/director/lingo/lingo-gr.cpp"
+#line 2425 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52:
 #line 392 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2428 "engines/director/lingo/lingo-gr.cpp"
+#line 2431 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55:
@@ -2434,7 +2437,7 @@ yyreduce:
 		g_lingo->code1(STOP);
 		g_lingo->codeString((yyvsp[-1].s)->c_str());
 		delete (yyvsp[-1].s); }
-#line 2438 "engines/director/lingo/lingo-gr.cpp"
+#line 2441 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56:
@@ -2442,7 +2445,7 @@ yyreduce:
                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt((yyvsp[0].i)); }
-#line 2446 "engines/director/lingo/lingo-gr.cpp"
+#line 2449 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57:
@@ -2450,7 +2453,7 @@ yyreduce:
                         {
 		(yyval.code) = g_lingo->code1(LC::c_floatpush);
 		g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2454 "engines/director/lingo/lingo-gr.cpp"
+#line 2457 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58:
@@ -2459,7 +2462,7 @@ yyreduce:
 		(yyval.code) = g_lingo->code1(LC::c_symbolpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2463 "engines/director/lingo/lingo-gr.cpp"
+#line 2466 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59:
@@ -2468,7 +2471,7 @@ yyreduce:
 		(yyval.code) = g_lingo->code1(LC::c_stringpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2472 "engines/director/lingo/lingo-gr.cpp"
+#line 2475 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60:
@@ -2477,13 +2480,13 @@ yyreduce:
 		(yyval.code) = g_lingo->code1(LC::c_eval);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2481 "engines/director/lingo/lingo-gr.cpp"
+#line 2484 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62:
 #line 422 "engines/director/lingo/lingo-gr.y"
                  { (yyval.code) = (yyvsp[0].code); }
-#line 2487 "engines/director/lingo/lingo-gr.cpp"
+#line 2490 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64:
@@ -2491,7 +2494,7 @@ yyreduce:
                                  {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2495 "engines/director/lingo/lingo-gr.cpp"
+#line 2498 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 65:
@@ -2499,7 +2502,7 @@ yyreduce:
                                 {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 2503 "engines/director/lingo/lingo-gr.cpp"
+#line 2506 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66:
@@ -2507,7 +2510,7 @@ yyreduce:
                                 {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2511 "engines/director/lingo/lingo-gr.cpp"
+#line 2514 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67:
@@ -2520,7 +2523,7 @@ yyreduce:
 		WRITE_UINT32(&e, (yyvsp[0].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[0].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2524 "engines/director/lingo/lingo-gr.cpp"
+#line 2527 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68:
@@ -2531,7 +2534,7 @@ yyreduce:
 		WRITE_UINT32(&e, (yyvsp[-1].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[-1].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2535 "engines/director/lingo/lingo-gr.cpp"
+#line 2538 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69:
@@ -2541,7 +2544,7 @@ yyreduce:
 		g_lingo->codeString((yyvsp[0].objectfield).os->c_str());
 		g_lingo->codeInt((yyvsp[0].objectfield).oe);
 		delete (yyvsp[0].objectfield).os; }
-#line 2545 "engines/director/lingo/lingo-gr.cpp"
+#line 2548 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70:
@@ -2552,193 +2555,193 @@ yyreduce:
 		g_lingo->codeString((yyvsp[0].objectref).field->c_str());
 		delete (yyvsp[0].objectref).obj;
 		delete (yyvsp[0].objectref).field; }
-#line 2556 "engines/director/lingo/lingo-gr.cpp"
+#line 2559 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72:
 #line 459 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_add); }
-#line 2562 "engines/director/lingo/lingo-gr.cpp"
+#line 2565 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73:
 #line 460 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_sub); }
-#line 2568 "engines/director/lingo/lingo-gr.cpp"
+#line 2571 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74:
 #line 461 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mul); }
-#line 2574 "engines/director/lingo/lingo-gr.cpp"
+#line 2577 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75:
 #line 462 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_div); }
-#line 2580 "engines/director/lingo/lingo-gr.cpp"
+#line 2583 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76:
 #line 463 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mod); }
-#line 2586 "engines/director/lingo/lingo-gr.cpp"
+#line 2589 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77:
 #line 464 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gt); }
-#line 2592 "engines/director/lingo/lingo-gr.cpp"
+#line 2595 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78:
 #line 465 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lt); }
-#line 2598 "engines/director/lingo/lingo-gr.cpp"
+#line 2601 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79:
 #line 466 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_eq); }
-#line 2604 "engines/director/lingo/lingo-gr.cpp"
+#line 2607 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80:
 #line 467 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_neq); }
-#line 2610 "engines/director/lingo/lingo-gr.cpp"
+#line 2613 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81:
 #line 468 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ge); }
-#line 2616 "engines/director/lingo/lingo-gr.cpp"
+#line 2619 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82:
 #line 469 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_le); }
-#line 2622 "engines/director/lingo/lingo-gr.cpp"
+#line 2625 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83:
 #line 470 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_and); }
-#line 2628 "engines/director/lingo/lingo-gr.cpp"
+#line 2631 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84:
 #line 471 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_or); }
-#line 2634 "engines/director/lingo/lingo-gr.cpp"
+#line 2637 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85:
 #line 472 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_not); }
-#line 2640 "engines/director/lingo/lingo-gr.cpp"
+#line 2643 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86:
 #line 473 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ampersand); }
-#line 2646 "engines/director/lingo/lingo-gr.cpp"
+#line 2649 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87:
 #line 474 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_concat); }
-#line 2652 "engines/director/lingo/lingo-gr.cpp"
+#line 2655 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88:
 #line 475 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_contains); }
-#line 2658 "engines/director/lingo/lingo-gr.cpp"
+#line 2661 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89:
 #line 476 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_starts); }
-#line 2664 "engines/director/lingo/lingo-gr.cpp"
+#line 2667 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90:
 #line 477 "engines/director/lingo/lingo-gr.y"
                                     { (yyval.code) = (yyvsp[0].code); }
-#line 2670 "engines/director/lingo/lingo-gr.cpp"
+#line 2673 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91:
 #line 478 "engines/director/lingo/lingo-gr.y"
                                     { (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 2676 "engines/director/lingo/lingo-gr.cpp"
+#line 2679 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92:
 #line 479 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = (yyvsp[-1].code); }
-#line 2682 "engines/director/lingo/lingo-gr.cpp"
+#line 2685 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93:
 #line 480 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_intersects); }
-#line 2688 "engines/director/lingo/lingo-gr.cpp"
+#line 2691 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94:
 #line 481 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_within); }
-#line 2694 "engines/director/lingo/lingo-gr.cpp"
+#line 2697 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95:
 #line 483 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_charOf); }
-#line 2700 "engines/director/lingo/lingo-gr.cpp"
+#line 2703 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 96:
 #line 484 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_charToOf); }
-#line 2706 "engines/director/lingo/lingo-gr.cpp"
+#line 2709 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97:
 #line 485 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_itemOf); }
-#line 2712 "engines/director/lingo/lingo-gr.cpp"
+#line 2715 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98:
 #line 486 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_itemToOf); }
-#line 2718 "engines/director/lingo/lingo-gr.cpp"
+#line 2721 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99:
 #line 487 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_lineOf); }
-#line 2724 "engines/director/lingo/lingo-gr.cpp"
+#line 2727 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 100:
 #line 488 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lineToOf); }
-#line 2730 "engines/director/lingo/lingo-gr.cpp"
+#line 2733 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101:
 #line 489 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_wordOf); }
-#line 2736 "engines/director/lingo/lingo-gr.cpp"
+#line 2739 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 102:
 #line 490 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_wordToOf); }
-#line 2742 "engines/director/lingo/lingo-gr.cpp"
+#line 2745 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 103:
@@ -2746,49 +2749,49 @@ yyreduce:
                                         {
 		g_lingo->codeFunc((yyvsp[-1].s), 1);
 		delete (yyvsp[-1].s); }
-#line 2750 "engines/director/lingo/lingo-gr.cpp"
+#line 2753 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 105:
 #line 497 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_printtop); }
-#line 2756 "engines/director/lingo/lingo-gr.cpp"
+#line 2759 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 108:
 #line 500 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_exitRepeat); }
-#line 2762 "engines/director/lingo/lingo-gr.cpp"
+#line 2765 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 109:
 #line 501 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_procret); }
-#line 2768 "engines/director/lingo/lingo-gr.cpp"
+#line 2771 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110:
 #line 502 "engines/director/lingo/lingo-gr.y"
                   { g_lingo->_indef = kStateInArgs; }
-#line 2774 "engines/director/lingo/lingo-gr.cpp"
+#line 2777 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111:
 #line 502 "engines/director/lingo/lingo-gr.y"
                                                                  { g_lingo->_indef = kStateNone; }
-#line 2780 "engines/director/lingo/lingo-gr.cpp"
+#line 2783 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112:
 #line 503 "engines/director/lingo/lingo-gr.y"
                     { g_lingo->_indef = kStateInArgs; }
-#line 2786 "engines/director/lingo/lingo-gr.cpp"
+#line 2789 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113:
 #line 503 "engines/director/lingo/lingo-gr.y"
                                                                      { g_lingo->_indef = kStateNone; }
-#line 2792 "engines/director/lingo/lingo-gr.cpp"
+#line 2795 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115:
@@ -2796,7 +2799,7 @@ yyreduce:
                                                 {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2800 "engines/director/lingo/lingo-gr.cpp"
+#line 2803 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 116:
@@ -2804,19 +2807,19 @@ yyreduce:
                                         {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 2808 "engines/director/lingo/lingo-gr.cpp"
+#line 2811 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117:
 #line 511 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_open); }
-#line 2814 "engines/director/lingo/lingo-gr.cpp"
+#line 2817 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118:
 #line 512 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code2(LC::c_voidpush, LC::c_open); }
-#line 2820 "engines/director/lingo/lingo-gr.cpp"
+#line 2823 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119:
@@ -2825,7 +2828,7 @@ yyreduce:
 		g_lingo->code1(LC::c_global);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2829 "engines/director/lingo/lingo-gr.cpp"
+#line 2832 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 120:
@@ -2834,7 +2837,7 @@ yyreduce:
 		g_lingo->code1(LC::c_global);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2838 "engines/director/lingo/lingo-gr.cpp"
+#line 2841 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121:
@@ -2843,7 +2846,7 @@ yyreduce:
 		g_lingo->code1(LC::c_property);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2847 "engines/director/lingo/lingo-gr.cpp"
+#line 2850 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 122:
@@ -2852,7 +2855,7 @@ yyreduce:
 		g_lingo->code1(LC::c_property);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2856 "engines/director/lingo/lingo-gr.cpp"
+#line 2859 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 123:
@@ -2861,7 +2864,7 @@ yyreduce:
 		g_lingo->code1(LC::c_instance);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2865 "engines/director/lingo/lingo-gr.cpp"
+#line 2868 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124:
@@ -2870,25 +2873,25 @@ yyreduce:
 		g_lingo->code1(LC::c_instance);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2874 "engines/director/lingo/lingo-gr.cpp"
+#line 2877 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125:
 #line 548 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoloop); }
-#line 2880 "engines/director/lingo/lingo-gr.cpp"
+#line 2883 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126:
 #line 549 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_gotonext); }
-#line 2886 "engines/director/lingo/lingo-gr.cpp"
+#line 2889 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 127:
 #line 550 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoprevious); }
-#line 2892 "engines/director/lingo/lingo-gr.cpp"
+#line 2895 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 128:
@@ -2897,7 +2900,7 @@ yyreduce:
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_goto); }
-#line 2901 "engines/director/lingo/lingo-gr.cpp"
+#line 2904 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 129:
@@ -2906,7 +2909,7 @@ yyreduce:
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_goto); }
-#line 2910 "engines/director/lingo/lingo-gr.cpp"
+#line 2913 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 130:
@@ -2915,105 +2918,99 @@ yyreduce:
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_goto); }
-#line 2919 "engines/director/lingo/lingo-gr.cpp"
+#line 2922 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 133:
 #line 567 "engines/director/lingo/lingo-gr.y"
-                                        { g_lingo->code1(LC::c_playdone); }
-#line 2925 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 134:
-#line 568 "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 2934 "engines/director/lingo/lingo-gr.cpp"
+#line 2931 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135:
-#line 572 "engines/director/lingo/lingo-gr.y"
+  case 134:
+#line 571 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_play); }
-#line 2943 "engines/director/lingo/lingo-gr.cpp"
+#line 2940 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136:
-#line 576 "engines/director/lingo/lingo-gr.y"
+  case 135:
+#line 575 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_play); }
-#line 2952 "engines/director/lingo/lingo-gr.cpp"
+#line 2949 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137:
-#line 580 "engines/director/lingo/lingo-gr.y"
+  case 136:
+#line 579 "engines/director/lingo/lingo-gr.y"
                      { g_lingo->codeSetImmediate(true); }
-#line 2958 "engines/director/lingo/lingo-gr.cpp"
+#line 2955 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 138:
-#line 580 "engines/director/lingo/lingo-gr.y"
+  case 137:
+#line 579 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeFunc((yyvsp[-2].s), (yyvsp[0].narg));
 		delete (yyvsp[-2].s); }
-#line 2967 "engines/director/lingo/lingo-gr.cpp"
+#line 2964 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 139:
-#line 610 "engines/director/lingo/lingo-gr.y"
+  case 138:
+#line 609 "engines/director/lingo/lingo-gr.y"
              { g_lingo->_indef = kStateInArgs; }
-#line 2973 "engines/director/lingo/lingo-gr.cpp"
+#line 2970 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140:
-#line 610 "engines/director/lingo/lingo-gr.y"
+  case 139:
+#line 609 "engines/director/lingo/lingo-gr.y"
                                                     { g_lingo->_currentFactory.clear(); }
-#line 2979 "engines/director/lingo/lingo-gr.cpp"
+#line 2976 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 141:
-#line 611 "engines/director/lingo/lingo-gr.y"
+  case 140:
+#line 610 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg));
 		g_lingo->clearArgStack();
 		g_lingo->_indef = kStateNone;
 		delete (yyvsp[-6].s); }
-#line 2990 "engines/director/lingo/lingo-gr.cpp"
+#line 2987 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 142:
-#line 617 "engines/director/lingo/lingo-gr.y"
+  case 141:
+#line 616 "engines/director/lingo/lingo-gr.y"
                         { g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 2996 "engines/director/lingo/lingo-gr.cpp"
+#line 2993 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143:
-#line 618 "engines/director/lingo/lingo-gr.y"
+  case 142:
+#line 617 "engines/director/lingo/lingo-gr.y"
                   { g_lingo->_indef = kStateInArgs; }
-#line 3002 "engines/director/lingo/lingo-gr.cpp"
+#line 2999 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144:
-#line 619 "engines/director/lingo/lingo-gr.y"
+  case 143:
+#line 618 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg) + 1, &g_lingo->_currentFactory);
 		g_lingo->clearArgStack();
 		g_lingo->_indef = kStateNone;
 		delete (yyvsp[-6].s); }
-#line 3013 "engines/director/lingo/lingo-gr.cpp"
+#line 3010 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 145:
-#line 625 "engines/director/lingo/lingo-gr.y"
+  case 144:
+#line 624 "engines/director/lingo/lingo-gr.y"
                                                                      {	// D3
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-7].s), (yyvsp[-6].code), (yyvsp[-5].narg));
@@ -3024,11 +3021,11 @@ yyreduce:
 		checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
 		delete (yyvsp[-7].s);
 		delete (yyvsp[-1].s); }
-#line 3028 "engines/director/lingo/lingo-gr.cpp"
+#line 3025 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146:
-#line 635 "engines/director/lingo/lingo-gr.y"
+  case 145:
+#line 634 "engines/director/lingo/lingo-gr.y"
                                                  {	// D4. No 'end' clause
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
@@ -3036,65 +3033,65 @@ yyreduce:
 		g_lingo->clearArgStack();
 		g_lingo->_ignoreMe = false;
 		delete (yyvsp[-5].s); }
-#line 3040 "engines/director/lingo/lingo-gr.cpp"
+#line 3037 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 147:
-#line 643 "engines/director/lingo/lingo-gr.y"
+  case 146:
+#line 642 "engines/director/lingo/lingo-gr.y"
          { g_lingo->_indef = kStateInArgs; }
-#line 3046 "engines/director/lingo/lingo-gr.cpp"
+#line 3043 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 148:
-#line 643 "engines/director/lingo/lingo-gr.y"
+  case 147:
+#line 642 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
-#line 3052 "engines/director/lingo/lingo-gr.cpp"
+#line 3049 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 148:
+#line 644 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.narg) = 0; }
+#line 3055 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 149:
 #line 645 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.narg) = 0; }
-#line 3058 "engines/director/lingo/lingo-gr.cpp"
+                                                { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = 1; delete (yyvsp[0].s); }
+#line 3061 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 150:
 #line 646 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = 1; delete (yyvsp[0].s); }
-#line 3064 "engines/director/lingo/lingo-gr.cpp"
+                                        { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
+#line 3067 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 151:
 #line 647 "engines/director/lingo/lingo-gr.y"
-                                        { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
-#line 3070 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 152:
-#line 648 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = (yyvsp[-3].narg) + 1; delete (yyvsp[0].s); }
-#line 3076 "engines/director/lingo/lingo-gr.cpp"
+#line 3073 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154:
-#line 651 "engines/director/lingo/lingo-gr.y"
+  case 153:
+#line 650 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 3082 "engines/director/lingo/lingo-gr.cpp"
+#line 3079 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155:
-#line 652 "engines/director/lingo/lingo-gr.y"
+  case 154:
+#line 651 "engines/director/lingo/lingo-gr.y"
                                         { delete (yyvsp[0].s); }
-#line 3088 "engines/director/lingo/lingo-gr.cpp"
+#line 3085 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156:
-#line 654 "engines/director/lingo/lingo-gr.y"
+  case 155:
+#line 653 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->codeArgStore(); g_lingo->_indef = kStateInDef; }
-#line 3094 "engines/director/lingo/lingo-gr.cpp"
+#line 3091 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157:
-#line 656 "engines/director/lingo/lingo-gr.y"
+  case 156:
+#line 655 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_call);
 		g_lingo->codeString((yyvsp[-1].s)->c_str());
@@ -3102,113 +3099,113 @@ yyreduce:
 		WRITE_UINT32(&numpar, (yyvsp[0].narg));
 		g_lingo->code1(numpar);
 		delete (yyvsp[-1].s); }
-#line 3106 "engines/director/lingo/lingo-gr.cpp"
+#line 3103 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 157:
+#line 663 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.narg) = 0; }
+#line 3109 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 158:
 #line 664 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.narg) = 0; }
-#line 3112 "engines/director/lingo/lingo-gr.cpp"
+                                                { (yyval.narg) = 1; }
+#line 3115 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 159:
 #line 665 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.narg) = 1; }
-#line 3118 "engines/director/lingo/lingo-gr.cpp"
+                                        { (yyval.narg) = (yyvsp[-2].narg) + 1; }
+#line 3121 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 160:
-#line 666 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3124 "engines/director/lingo/lingo-gr.cpp"
+#line 667 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.narg) = 1; }
+#line 3127 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 161:
 #line 668 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.narg) = 1; }
-#line 3130 "engines/director/lingo/lingo-gr.cpp"
+                                        { (yyval.narg) = (yyvsp[-2].narg) + 1; }
+#line 3133 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 162:
-#line 669 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3136 "engines/director/lingo/lingo-gr.cpp"
+#line 670 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.code) = (yyvsp[-1].code); }
+#line 3139 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 163:
-#line 671 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.code) = (yyvsp[-1].code); }
-#line 3142 "engines/director/lingo/lingo-gr.cpp"
+#line 672 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
+#line 3145 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 164:
 #line 673 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3148 "engines/director/lingo/lingo-gr.cpp"
+                                                { (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
+#line 3151 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 165:
 #line 674 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3154 "engines/director/lingo/lingo-gr.cpp"
+                     { (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
+#line 3157 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 166:
 #line 675 "engines/director/lingo/lingo-gr.y"
-                     { (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3160 "engines/director/lingo/lingo-gr.cpp"
+                         { (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
+#line 3163 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 167:
-#line 676 "engines/director/lingo/lingo-gr.y"
-                         { (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3166 "engines/director/lingo/lingo-gr.cpp"
+#line 677 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.narg) = 1; }
+#line 3169 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 168:
 #line 678 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.narg) = 1; }
-#line 3172 "engines/director/lingo/lingo-gr.cpp"
+                                { (yyval.narg) = (yyvsp[-2].narg) + 1; }
+#line 3175 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 169:
-#line 679 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3178 "engines/director/lingo/lingo-gr.cpp"
+#line 680 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.narg) = 1; }
+#line 3181 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 170:
 #line 681 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.narg) = 1; }
-#line 3184 "engines/director/lingo/lingo-gr.cpp"
-    break;
-
-  case 171:
-#line 682 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3190 "engines/director/lingo/lingo-gr.cpp"
+#line 3187 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172:
-#line 684 "engines/director/lingo/lingo-gr.y"
+  case 171:
+#line 683 "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 3199 "engines/director/lingo/lingo-gr.cpp"
+#line 3196 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 173:
-#line 688 "engines/director/lingo/lingo-gr.y"
+  case 172:
+#line 687 "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 3208 "engines/director/lingo/lingo-gr.cpp"
+#line 3205 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3212 "engines/director/lingo/lingo-gr.cpp"
+#line 3209 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3440,5 +3437,5 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 694 "engines/director/lingo/lingo-gr.y"
+#line 693 "engines/director/lingo/lingo-gr.y"
 
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 2ce6093c66..0c0f5bcec7 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.5.1.  */
+/* A Bison parser, made by GNU Bison 3.5.3.  */
 
 /* Bison interface for Yacc-like parsers in C
 
@@ -106,34 +106,33 @@ extern int yydebug;
     tFACTORY = 312,
     tOPEN = 313,
     tPLAY = 314,
-    tDONE = 315,
-    tINSTANCE = 316,
-    tGE = 317,
-    tLE = 318,
-    tEQ = 319,
-    tNEQ = 320,
-    tAND = 321,
-    tOR = 322,
-    tNOT = 323,
-    tMOD = 324,
-    tAFTER = 325,
-    tBEFORE = 326,
-    tCONCAT = 327,
-    tCONTAINS = 328,
-    tSTARTS = 329,
-    tCHAR = 330,
-    tITEM = 331,
-    tLINE = 332,
-    tWORD = 333,
-    tSPRITE = 334,
-    tINTERSECTS = 335,
-    tWITHIN = 336,
-    tTELL = 337,
-    tPROPERTY = 338,
-    tON = 339,
-    tENDIF = 340,
-    tENDREPEAT = 341,
-    tENDTELL = 342
+    tINSTANCE = 315,
+    tGE = 316,
+    tLE = 317,
+    tEQ = 318,
+    tNEQ = 319,
+    tAND = 320,
+    tOR = 321,
+    tNOT = 322,
+    tMOD = 323,
+    tAFTER = 324,
+    tBEFORE = 325,
+    tCONCAT = 326,
+    tCONTAINS = 327,
+    tSTARTS = 328,
+    tCHAR = 329,
+    tITEM = 330,
+    tLINE = 331,
+    tWORD = 332,
+    tSPRITE = 333,
+    tINTERSECTS = 334,
+    tWITHIN = 335,
+    tTELL = 336,
+    tPROPERTY = 337,
+    tON = 338,
+    tENDIF = 339,
+    tENDREPEAT = 340,
+    tENDTELL = 341
   };
 #endif
 
@@ -161,7 +160,7 @@ union YYSTYPE
 		Common::String *field;
 	} objectref;
 
-#line 165 "engines/director/lingo/lingo-gr.h"
+#line 164 "engines/director/lingo/lingo-gr.h"
 
 };
 typedef union YYSTYPE YYSTYPE;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index aa7e8c9697..dd14c2c6ae 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -115,7 +115,7 @@ void checkEnd(Common::String *token, const char *expect, bool required) {
 %token<objectref> THEOBJECTREF
 %token tDOWN tELSE tELSIF tEXIT tGLOBAL tGO tIF tIN tINTO tLOOP tMACRO
 %token tMOVIE tNEXT tOF tPREVIOUS tPUT tREPEAT tSET tTHEN tTO tWHEN
-%token tWITH tWHILE tNLELSE tFACTORY tOPEN tPLAY tDONE tINSTANCE
+%token tWITH tWHILE tNLELSE tFACTORY tOPEN tPLAY tINSTANCE
 %token tGE tLE tEQ tNEQ tAND tOR tNOT tMOD
 %token tAFTER tBEFORE tCONCAT tCONTAINS tSTARTS tCHAR tITEM tLINE tWORD
 %token tSPRITE tINTERSECTS tWITHIN tTELL tPROPERTY
@@ -564,8 +564,7 @@ gotofunc: tGO tLOOP				{ g_lingo->code1(LC::c_gotoloop); }
 gotomovie: tOF tMOVIE expr
 	| tMOVIE expr
 
-playfunc: tPLAY tDONE			{ g_lingo->code1(LC::c_playdone); }
-	| tPLAY expr 			{
+playfunc: tPLAY expr 			{ // "play #done" is also caught by this
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_play); }
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index a72b4b5266..a91229011a 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -364,8 +364,8 @@ static void yy_fatal_error (yyconst char msg[]  );
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 78
-#define YY_END_OF_BUFFER 79
+#define YY_NUM_RULES 77
+#define YY_END_OF_BUFFER 78
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -373,48 +373,48 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[366] =
+static yyconst flex_int16_t yy_accept[364] =
     {   0,
-        0,    0,   79,   77,    4,   75,   75,   77,   77,   77,
-       74,   74,   74,   73,   74,   70,   74,   71,   71,   71,
-       71,   71,   71,   71,   71,   71,   71,   71,   71,   71,
-       71,   71,   71,   71,   77,    3,    3,   71,    4,   75,
-        0,    0,    0,   76,    5,   69,    2,   72,   73,   68,
-       66,   67,   71,   71,   71,   71,   71,   71,   71,   71,
-       71,   71,   71,   22,   13,   26,   71,   71,   71,   71,
-       71,   71,   71,   71,   36,   37,   71,   39,   71,   71,
-       71,   71,   71,   71,   71,   71,   71,   71,   59,   71,
-       71,   71,    1,    3,    3,    0,   71,    5,    2,   72,
-
-       71,    7,   71,   71,   71,   71,   71,   71,   16,   71,
-       71,    0,   71,   71,   71,   71,   71,   71,   71,   32,
-       71,   71,   35,   71,   71,   71,   71,   45,   71,   47,
-       71,   71,   71,   71,   71,   71,   71,   71,   71,    0,
-       71,   71,   71,    9,   71,   11,   12,   15,    0,   18,
-       71,    0,   71,   71,   25,   27,   28,   29,   71,   71,
-       71,   34,   38,   41,   71,   71,   71,   71,   71,   71,
-       50,    0,   58,   63,   71,   61,   65,    0,   71,    6,
-       71,   71,    0,   16,   71,   21,   71,   71,   30,   71,
-       33,    0,   71,   71,   71,   71,   71,   71,   71,   57,
-
-       57,   57,   57,   57,   64,   71,    0,   71,    8,   71,
-        0,   16,   19,    0,   71,   71,   71,    0,   71,   71,
-       71,   46,    0,   60,   49,    0,    0,   57,   57,   57,
-       57,   62,    0,   71,   71,   14,    0,   71,   71,    0,
-       31,    0,   71,   71,   71,    0,    0,    0,    0,    0,
-        0,    0,    0,   57,   57,   57,   57,    0,   17,   10,
-        0,   23,   71,   31,   31,    0,   71,   43,   44,    0,
-        0,    0,    0,    0,    0,    0,   57,   57,   57,   57,
-       17,    0,   71,   31,    0,   42,    0,    0,    0,    0,
-        0,    0,    0,    0,   57,    0,   57,    0,   24,   40,
-
-        0,    0,    0,   48,   56,   55,   56,    0,    0,    0,
-        0,   57,    0,    0,    0,   20,   48,    0,    0,    0,
-       55,    0,    0,    0,    0,    0,    0,    0,    0,   48,
-        0,    0,    0,    0,    0,    0,    0,    0,    0,   51,
-        0,   48,    0,    0,    0,   56,   55,   55,   56,    0,
-       52,   48,   54,   55,   55,    0,   55,    0,   55,    0,
-        0,    0,    0,   53,    0
+        0,    0,   78,   76,    4,   74,   74,   76,   76,   76,
+       73,   73,   73,   72,   73,   69,   73,   70,   70,   70,
+       70,   70,   70,   70,   70,   70,   70,   70,   70,   70,
+       70,   70,   70,   70,   76,    3,    3,   70,    4,   74,
+        0,    0,    0,   75,    5,   68,    2,   71,   72,   67,
+       65,   66,   70,   70,   70,   70,   70,   70,   70,   70,
+       70,   70,   70,   21,   12,   25,   70,   70,   70,   70,
+       70,   70,   70,   70,   35,   36,   70,   38,   70,   70,
+       70,   70,   70,   70,   70,   70,   70,   70,   58,   70,
+       70,   70,    1,    3,    3,    0,   70,    5,    2,   71,
+
+       70,    7,   70,   70,   70,   70,   70,   15,   70,   70,
+        0,   70,   70,   70,   70,   70,   70,   70,   31,   70,
+       70,   34,   70,   70,   70,   70,   44,   70,   46,   70,
+       70,   70,   70,   70,   70,   70,   70,   70,    0,   70,
+       70,   70,    9,   70,   11,   14,    0,   17,   70,    0,
+       70,   70,   24,   26,   27,   28,   70,   70,   70,   33,
+       37,   40,   70,   70,   70,   70,   70,   70,   49,    0,
+       57,   62,   70,   60,   64,    0,   70,    6,   70,   70,
+        0,   15,   70,   20,   70,   70,   29,   70,   32,    0,
+       70,   70,   70,   70,   70,   70,   70,   56,   56,   56,
+
+       56,   56,   63,   70,    0,   70,    8,   70,    0,   15,
+       18,    0,   70,   70,   70,    0,   70,   70,   70,   45,
+        0,   59,   48,    0,    0,   56,   56,   56,   56,   61,
+        0,   70,   70,   13,    0,   70,   70,    0,   30,    0,
+       70,   70,   70,    0,    0,    0,    0,    0,    0,    0,
+        0,   56,   56,   56,   56,    0,   16,   10,    0,   22,
+       70,   30,   30,    0,   70,   42,   43,    0,    0,    0,
+        0,    0,    0,    0,   56,   56,   56,   56,   16,    0,
+       70,   30,    0,   41,    0,    0,    0,    0,    0,    0,
+        0,    0,   56,    0,   56,    0,   23,   39,    0,    0,
+
+        0,   47,   55,   54,   55,    0,    0,    0,    0,   56,
+        0,    0,    0,   19,   47,    0,    0,    0,   54,    0,
+        0,    0,    0,    0,    0,    0,    0,   47,    0,    0,
+        0,    0,    0,    0,    0,    0,    0,   50,    0,   47,
+        0,    0,    0,   55,   54,   54,   55,    0,   51,   47,
+       53,   54,   54,    0,   54,    0,   54,    0,    0,    0,
+        0,   52,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -460,99 +460,97 @@ static yyconst flex_int32_t yy_meta[66] =
         5,    5,    5,    5,    1
     } ;
 
-static yyconst flex_int16_t yy_base[383] =
+static yyconst flex_int16_t yy_base[381] =
     {   0,
-        0,   64,  240,  981,   68,  981,  981,   72,  180,    0,
-      981,  164,  140,   55,   63,  981,  130,   59,   59,   59,
+        0,   64,  240,  974,   68,  974,  974,   72,  230,    0,
+      974,  177,  140,   55,   63,  974,  130,   59,   59,   59,
        55,   63,    0,   64,   75,   70,  100,   77,  110,  102,
-       98,  139,  126,  152,  145,  185,  206,  110,  210,  981,
-      214,  175,   97,  981,    0,  981,    0,   86,  171,  981,
-      981,  981,    0,   66,  116,  144,  154,  111,  192,  134,
-      175,  172,  151,   82,    0,  165,  183,  174,  195,  207,
-      196,  215,  194,  199,    0,    0,  215,    0,  220,  218,
-      206,  211,  208,  208,  213,  221,  229,  238,    0,  248,
-      242,  245,  981,  283,  287,  257,  262,    0,    0,   69,
-
-      261,    0,  263,  262,  261,  262,  268,  279,   91,  268,
-      286,  308,  276,  293,  284,  294,  287,  289,  292,    0,
-      299,  291,    0,  302,  292,  296,  306,    0,  307,    0,
-      309,  319,  318,  327,  358,  329,  332,  321,  344,  346,
-      333,  338,  339,    0,  349,    0,    0,  153,  371,    0,
-      357,  347,  362,  348,    0,    0,    0,    0,  354,  355,
-      367,    0,    0,  395,  368,  373,  381,  382,  351,  371,
-        0,  436,    0,    0,  382,  382,    0,  380,  386,    0,
-      396,  395,  419,    0,  395,  424,  396,  397,    0,  413,
-        0,  445,  415,  406,  415,  416,  451,  422,  418,  452,
-
-      469,  478,  480,  491,    0,  449,  451,  458,    0,  466,
-      462,    0,    0,  498,  479,  478,  505,  471,  487,  477,
-      481,    0,  544,    0,    0,  527,  506,  525,  548,  559,
-      550,    0,  510,  504,  522,  981,  537,  496,  529,  459,
-        0,  537,  550,  540,  542,  557,  568,  560,  554,  588,
-      578,  575,  578,  602,  621,  619,  630,  569,    0,    0,
-      588,    0,  579,    0,    0,  589,  592,    0,    0,  595,
-      607,  617,  606,  609,  520,  617,  645,  646,  660,  670,
-      981,  625,  623,    0,  625,    0,  624,  642,  633,  643,
-      655,  681,  658,  682,  698,  694,  705,  672,    0,  981,
-
-      673,  695,  683,  981,  981,    0,  981,  704,  721,  730,
-      732,  741,  742,  711,  754,  981,  981,  660,  704,  717,
-        0,  736,  760,  766,  773,  786,  768,  774,  738,  981,
-      734,  754,  754,  765,  809,  792,  813,  818,  780,  798,
-      824,  981,  789,  831,  836,  842,  803,  802,  848,  849,
-      855,  981,  981,  856,  860,  861,  862,  843,  869,  823,
-      847,  875,  876,  981,  981,  910,  912,  915,  918,  924,
-      929,  934,  936,  941,  946,  949,  952,  957,  962,  964,
-      969,  974
+       98,  139,  126,  152,  145,  185,  206,  110,  210,  974,
+      214,  175,   97,  974,    0,  974,    0,   86,  171,  974,
+      974,  974,    0,   66,  116,  144,  154,  111,  130,  139,
+      175,  174,  151,   82,    0,  187,  179,  174,  193,  185,
+      195,  206,  192,  198,    0,    0,  213,    0,  218,  218,
+      202,  207,  206,  206,  211,  232,  225,  235,    0,  248,
+      223,  230,  974,  281,  286,  253,  258,    0,    0,   69,
+
+      259,    0,  262,  260,  261,  268,  278,   91,  266,  286,
+      304,  272,  289,  284,  292,  287,  290,  291,    0,  302,
+      291,    0,  301,  292,  297,  306,    0,  320,    0,  315,
+      320,  315,  322,  355,  324,  328,  338,  344,  346,  324,
+      334,  336,    0,  354,    0,  153,  309,    0,  357,  346,
+      361,  347,    0,    0,    0,    0,  351,  352,  364,    0,
+        0,  390,  361,  367,  377,  377,  366,  367,    0,  431,
+        0,    0,  377,  384,    0,  379,  385,    0,  391,  391,
+      419,    0,  391,  415,  398,  394,    0,  409,    0,  441,
+      411,  405,  407,  412,  443,  410,  415,  465,  476,  475,
+
+      485,  489,    0,  421,  442,  443,    0,  450,  461,    0,
+        0,  499,  478,  477,  500,  476,  488,  474,  477,    0,
+      545,    0,    0,  523,  495,  514,  547,  560,  561,    0,
+      481,  480,  493,  974,  504,  534,  537,  524,    0,  542,
+      539,  511,  533,  547,  566,  551,  551,  585,  574,  572,
+      570,  599,  619,  620,  621,  571,    0,    0,  590,    0,
+      579,    0,    0,  590,  600,    0,    0,  598,  616,  623,
+      613,  609,  537,  617,  644,  654,  661,  668,  974,  620,
+      616,    0,  639,    0,  619,  655,  640,  651,  662,  682,
+      665,  689,  688,  690,  697,  667,    0,  974,  676,  687,
+
+      681,  974,  974,    0,  974,  713,  721,  725,  727,  748,
+      731,  709,  749,  974,  974,  687,  706,  714,    0,  732,
+      763,  765,  769,  771,  773,  785,  733,  974,  724,  754,
+      759,  767,  790,  794,  805,  815,  771,  826,  827,  974,
+      781,  832,  833,  838,  780,  819,  844,  845,  850,  974,
+      974,  851,  852,  856,  857,  835,  862,  834,  846,  869,
+      871,  974,  974,  903,  905,  908,  911,  917,  922,  927,
+      929,  934,  939,  942,  945,  950,  955,  957,  962,  967
     } ;
 
-static yyconst flex_int16_t yy_def[383] =
+static yyconst flex_int16_t yy_def[381] =
     {   0,
-      365,    1,  365,  365,  365,  365,  365,  365,  366,  367,
-      365,  365,  365,  365,  365,  365,  365,  368,  368,  368,
-      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
-      368,  368,  368,  368,  365,  365,  365,  368,  365,  365,
-      365,  365,  366,  365,  369,  365,  370,  365,  365,  365,
-      365,  365,  368,  368,  368,  368,  368,  368,  368,  368,
-      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
-      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
-      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
-      368,  368,  365,  365,  365,  365,  368,  369,  370,  365,
-
-      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
-      368,  365,  368,  368,  368,  368,  368,  368,  368,  368,
-      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
-      368,  368,  368,  368,  368,  368,  368,  368,  368,  365,
-      368,  368,  368,  368,  368,  368,  368,  368,  371,  368,
-      368,  365,  368,  368,  368,  368,  368,  368,  368,  368,
-      368,  368,  368,  368,  368,  368,  368,  368,  368,  368,
-      368,  372,  368,  368,  368,  368,  368,  365,  368,  368,
-      368,  368,  365,  373,  368,  365,  368,  368,  368,  368,
-      368,  365,  368,  368,  368,  368,  368,  368,  368,  372,
-
-      372,  372,  372,  372,  368,  368,  365,  368,  368,  368,
-      365,  373,  368,  365,  368,  368,  374,  365,  368,  368,
-      368,  368,  365,  368,  368,  365,  365,  372,  372,  372,
-      372,  368,  365,  368,  368,  365,  365,  368,  368,  375,
-      376,  365,  368,  368,  368,  365,  365,  365,  365,  365,
-      365,  365,  365,  372,  372,  372,  372,  365,  368,  368,
-      365,  368,  368,  377,  376,  365,  368,  368,  368,  365,
-      365,  365,  365,  365,  365,  365,  372,  372,  372,  372,
-      365,  365,  368,  377,  365,  368,  365,  365,  365,  365,
-      365,  378,  365,  379,  372,  365,  372,  365,  368,  365,
-
-      365,  365,  365,  365,  365,  380,  365,  379,  379,  379,
-      379,  372,  365,  365,  365,  365,  365,  365,  365,  365,
-      380,  365,  379,  379,  379,  365,  365,  365,  365,  365,
-      365,  365,  365,  365,  379,  378,  379,  365,  365,  378,
-      365,  365,  365,  365,  365,  379,  380,  380,  379,  365,
-      378,  365,  365,  380,  380,  381,  382,  365,  382,  365,
-      365,  365,  365,  365,    0,  365,  365,  365,  365,  365,
-      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-      365,  365
+      363,    1,  363,  363,  363,  363,  363,  363,  364,  365,
+      363,  363,  363,  363,  363,  363,  363,  366,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  363,  363,  363,  366,  363,  363,
+      363,  363,  364,  363,  367,  363,  368,  363,  363,  363,
+      363,  363,  366,  366,  366,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
+      366,  366,  363,  363,  363,  363,  366,  367,  368,  363,
+
+      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
+      363,  366,  366,  366,  366,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  366,  363,  366,
+      366,  366,  366,  366,  366,  366,  369,  366,  366,  363,
+      366,  366,  366,  366,  366,  366,  366,  366,  366,  366,
+      366,  366,  366,  366,  366,  366,  366,  366,  366,  370,
+      366,  366,  366,  366,  366,  363,  366,  366,  366,  366,
+      363,  371,  366,  363,  366,  366,  366,  366,  366,  363,
+      366,  366,  366,  366,  366,  366,  366,  370,  370,  370,
+
+      370,  370,  366,  366,  363,  366,  366,  366,  363,  371,
+      366,  363,  366,  366,  372,  363,  366,  366,  366,  366,
+      363,  366,  366,  363,  363,  370,  370,  370,  370,  366,
+      363,  366,  366,  363,  363,  366,  366,  373,  374,  363,
+      366,  366,  366,  363,  363,  363,  363,  363,  363,  363,
+      363,  370,  370,  370,  370,  363,  366,  366,  363,  366,
+      366,  375,  374,  363,  366,  366,  366,  363,  363,  363,
+      363,  363,  363,  363,  370,  370,  370,  370,  363,  363,
+      366,  375,  363,  366,  363,  363,  363,  363,  363,  376,
+      363,  377,  370,  363,  370,  363,  366,  363,  363,  363,
+
+      363,  363,  363,  378,  363,  377,  377,  377,  377,  370,
+      363,  363,  363,  363,  363,  363,  363,  363,  378,  363,
+      377,  377,  377,  363,  363,  363,  363,  363,  363,  363,
+      363,  363,  377,  376,  377,  363,  363,  376,  363,  363,
+      363,  363,  363,  377,  378,  378,  377,  363,  376,  363,
+      363,  378,  378,  379,  380,  363,  380,  363,  363,  363,
+      363,  363,    0,  363,  363,  363,  363,  363,  363,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  363,  363
     } ;
 
-static yyconst flex_int16_t yy_nxt[1047] =
+static yyconst flex_int16_t yy_nxt[1040] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,   11,
        13,    4,   14,   15,   16,   17,   18,   19,   20,   21,
@@ -562,116 +560,115 @@ static yyconst flex_int16_t yy_nxt[1047] =
        26,   27,   28,   29,   30,   23,   31,   32,   33,   23,
        23,   34,   23,   23,   35,   36,   48,   49,   37,   39,
        40,   40,   41,   41,   40,   40,   41,   50,   51,   56,
-       54,  100,   57,  112,   59,   38,  112,   55,   58,   60,
-       63,   61,  149,   64,   68,  149,   65,   73,  100,   69,
+       54,  100,   57,  111,   59,   38,  111,   55,   58,   60,
+       63,   61,  147,   64,   68,  147,   65,   73,  100,   69,
 
       101,   62,   44,   66,   56,   54,   74,   57,   59,   67,
        38,   55,   58,   60,   63,   61,   70,   64,   82,   68,
        71,   65,   73,   69,  101,   62,   97,   66,   79,   72,
        74,   75,   42,   67,   80,  102,   42,   81,   76,  105,
        77,   70,   78,   82,   52,   71,   87,   93,   93,   88,
-       47,   97,   79,   72,  183,   89,   75,  183,   80,   83,
-      102,   81,   76,  105,   77,  103,   78,  108,   84,   85,
-      104,   87,   46,   86,   88,   90,   91,   93,   93,   89,
-      111,   92,   48,   49,   83,   44,   94,   40,   40,   95,
-      103,  108,   84,   85,  109,  104,  110,   86,  113,  114,
-
-       90,   91,  116,  115,  111,   92,   96,   95,   40,   40,
-       95,   39,   40,   40,   41,   41,   40,   40,   41,  109,
-      106,  110,  113,  114,  117,  118,  116,   96,  115,  107,
-      119,   96,  122,  123,  120,  124,  125,  133,  126,  365,
-      128,  129,  130,  131,  106,  132,  365,  127,  117,   42,
-      118,  121,   96,  107,  119,  134,  122,  123,  135,  120,
-      124,  125,  133,  126,  128,  129,  130,  131,  136,  132,
-       42,  127,  137,  140,   42,  121,  138,  139,   42,  134,
-      141,  142,  146,  135,   94,   40,   40,   95,   95,   40,
-       40,   95,  143,  136,  144,  145,  147,  137,  140,  148,
-
-      138,  139,  150,  151,   96,  141,  142,  146,   96,  112,
-      153,  156,  112,  154,  157,  160,  143,  158,  144,  145,
-      147,  159,  155,  161,  148,  162,  150,  167,  151,   96,
-      163,  164,  165,   96,  153,  156,  166,  168,  154,  157,
-      160,  158,  152,  169,  176,  159,  155,   42,  161,  162,
-      170,   42,  167,  171,  163,  164,  165,  174,  175,  172,
-      166,  168,  172,  177,  178,  182,  152,  179,  169,  176,
-      180,  181,  149,  185,  170,  149,  186,  171,  187,  365,
-      188,  174,  175,  189,  190,  198,  173,  191,  177,  178,
-      182,  179,  194,  195,  180,  181,  192,  196,  185,  192,
-
-      186,  197,  205,  187,  188,  199,  206,  189,  190,  198,
-      173,  193,  191,  365,  207,  208,  209,  194,  195,  210,
-      183,  213,  196,  183,  215,  214,  197,  205,  214,  199,
-      216,  206,  217,  219,  365,  220,  193,  172,  207,  208,
-      172,  209,  224,  211,  210,  213,  192,  221,  215,  192,
-      222,  225,  223,  226,  216,  223,  226,  217,  219,  220,
-      240,  227,  201,  240,  202,  365,  218,  224,  211,  203,
-      226,  221,  204,  226,  222,  225,  365,  232,  227,  226,
-      233,  226,  226,  236,  226,  228,  201,  227,  202,  227,
-      234,  218,  226,  203,  235,  226,  204,  238,  239,  214,
-
-      227,  232,  214,  242,  233,  243,  240,  231,  236,  240,
-      228,  230,  244,  229,  234,  245,  262,   53,  235,  237,
-      365,  292,  238,  239,  292,  251,  226,  242,  250,  226,
-      243,  250,  231,  365,  227,  230,  244,  229,  365,  245,
-      253,  262,  258,  259,  237,  223,  251,  263,  223,  226,
-      251,  226,  226,  266,  226,  260,  252,  227,  254,  227,
-      226,  253,  246,  226,  253,  247,  258,  259,  227,  261,
-      267,  251,  263,  268,  248,  255,  257,  249,  266,  260,
-      252,  269,  254,  270,  271,  253,  272,  246,  273,  250,
-      247,  256,  250,  261,  274,  267,  275,  268,  248,  255,
-
-      257,  249,  276,  226,  282,  269,  226,  270,  281,  271,
-      272,  227,  273,  283,  365,  256,  285,  252,  286,  274,
-      226,  275,  226,  226,  287,  226,  288,  276,  227,  282,
-      227,  226,  281,  289,  226,  290,  277,  283,  278,  227,
-      285,  252,  286,  291,  293,  300,  294,  226,  287,  294,
-      226,  288,  298,  279,  227,  227,  299,  301,  289,  290,
-      277,  296,  302,  278,  296,  280,  295,  291,  293,  227,
-      300,  226,  303,  304,  226,  305,  298,  279,  307,  227,
-      299,  301,  292,  250,  365,  292,  250,  302,  330,  280,
-      297,  295,  316,  317,  365,  313,  303,  304,  313,  226,
-
-      305,  309,  226,  307,  320,  322,  315,  227,  322,  315,
-      365,  310,  330,  251,  227,  297,  311,  316,  317,  318,
-      365,  365,  322,  314,  319,  322,  309,  365,  253,  320,
-      312,  322,  327,  322,  322,  310,  322,  323,  251,  331,
-      311,  332,  326,  313,  318,  326,  313,  314,  319,  365,
-      227,  324,  253,  365,  312,  328,  325,  327,  328,  341,
-      333,  322,  323,  331,  322,  334,  332,  336,  342,  340,
-      336,  314,  340,  251,  322,  328,  324,  322,  328,  365,
-      343,  325,  344,  329,  341,  333,  345,  338,  253,  334,
-      338,  365,  342,  292,  335,  314,  292,  365,  251,  340,
-
-      337,  350,  340,  329,  343,  251,  344,  329,  365,  352,
-      322,  345,  253,  322,  322,  339,  347,  322,  335,  338,
-      253,  348,  338,  355,  337,  351,  350,  329,  351,  346,
-      251,  354,  353,  349,  352,  353,  365,  353,  365,  339,
-      353,  347,  365,  322,  253,  348,  322,  339,  355,  322,
-      356,  362,  322,  356,  346,  354,  351,  353,  349,  351,
-      353,  353,  356,  358,  353,  356,  358,  360,  363,  365,
-      358,  339,  361,  358,  321,  362,  364,  364,  365,  364,
-      364,  321,  365,  365,  365,  365,  365,  365,  365,  365,
-      365,  365,  360,  363,  365,  365,  361,  365,  365,  365,
-
-      365,  306,  321,  365,  365,  365,  365,  365,  365,  321,
-       43,   43,  365,   43,   43,   43,   45,   45,   53,   53,
-       53,   98,   98,   98,   99,   99,  365,   99,   99,   99,
-      184,  365,  365,  184,  184,  200,  365,  365,  200,  212,
-      212,  212,  241,  365,  241,  241,  241,  264,  365,  365,
-      264,  264,  265,  265,  265,  284,  284,  284,  306,  365,
-      365,  306,  306,  308,  365,  365,  308,  321,  321,  321,
-      357,  365,  365,  357,  357,  359,  365,  359,  359,  359,
-        3,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-
-      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-      365,  365,  365,  365,  365,  365
+       47,   97,   79,   72,  181,   89,   75,  181,   80,   83,
+      102,   81,   76,  105,   77,  103,   78,  106,   84,   85,
+      104,   87,  107,   86,   88,   90,   91,   93,   93,   89,
+      110,   92,   48,   49,   83,   46,   94,   40,   40,   95,
+      103,  106,   84,   85,  108,  104,  107,   86,  109,  114,
+
+       90,   91,  115,  117,  110,   92,   96,   95,   40,   40,
+       95,   39,   40,   40,   41,   41,   40,   40,   41,  108,
+      112,  113,  116,  109,  114,  119,  115,   96,  117,  118,
+      121,   96,  122,  123,  124,   44,  127,  128,  125,  363,
+      129,  130,  120,  131,  112,  113,  116,  126,  132,   42,
+      119,  133,   96,  118,  121,  134,  122,  137,  123,  124,
+      127,  128,  138,  125,  129,  130,  120,  131,  135,  139,
+       42,  126,  136,  132,   42,  133,  140,  363,   42,  141,
+      134,  137,   94,   40,   40,   95,  138,   95,   40,   40,
+       95,  142,  143,  135,  139,  144,  145,  136,  146,  363,
+
+      148,  140,   96,  149,  141,  111,  151,   96,  111,  152,
+      147,  154,  155,  147,  158,  142,  143,  156,  153,  144,
+      145,  363,  157,  146,  148,  160,  159,   96,  149,  161,
+      151,  162,   96,  163,  152,  154,  164,  155,  150,  158,
+      165,  156,  153,  166,  167,   42,  157,  168,  169,  160,
+       42,  159,  172,  161,  173,  162,  170,  163,  177,  170,
+      164,  174,  150,  175,  176,  165,  178,  166,  179,  167,
+      180,  168,  169,  183,  363,  184,  172,  185,  173,  186,
+      187,  188,  177,  171,  189,  192,  174,  193,  175,  176,
+      178,  190,  179,  194,  190,  180,  195,  203,  183,  184,
+
+      196,  197,  185,  186,  187,  188,  191,  171,  204,  189,
+      192,  207,  193,  205,  206,  208,  212,  211,  194,  212,
+      181,  195,  203,  181,  196,  197,  213,  214,  215,  217,
+      222,  191,  170,  204,  218,  170,  207,  205,  206,  219,
+      208,  211,  190,  209,  221,  190,  220,  221,  223,  230,
+      213,  214,  363,  215,  217,  222,  363,  199,  218,  200,
+      363,  363,  216,  219,  201,  363,  224,  202,  209,  224,
+      220,  231,  223,  230,  225,  232,  224,  224,  233,  224,
+      224,  199,  234,  200,  225,  225,  224,  216,  201,  224,
+      224,  202,  226,  224,  225,  231,  236,  237,  225,  232,
+
+      212,  238,  233,  212,  238,  229,  241,  234,  240,  242,
+      227,  243,   53,  256,  249,  224,  228,  226,  224,  257,
+      235,  236,  237,  225,  248,  238,  258,  248,  238,  251,
+      229,  241,  240,  242,  227,  243,  259,  256,  290,  249,
+      228,  290,  249,  257,  266,  235,  221,  252,  224,  221,
+      258,  224,  250,  251,  260,  261,  225,  251,  264,  265,
+      259,  224,  224,  244,  224,  224,  245,  249,  266,  225,
+      225,  252,  267,  268,  253,  246,  250,  270,  247,  260,
+      261,  251,  269,  264,  265,  271,  248,  255,  244,  248,
+      272,  245,  254,  273,  274,  363,  267,  268,  253,  246,
+
+      224,  270,  247,  224,  363,  363,  280,  269,  225,  271,
+      279,  255,  363,  281,  250,  272,  254,  283,  273,  274,
+      224,  224,  224,  224,  224,  224,  284,  285,  225,  225,
+      225,  280,  363,  275,  279,  286,  276,  281,  250,  287,
+      363,  283,  288,  289,  291,  292,  363,  296,  292,  297,
+      284,  285,  299,  225,  277,  224,  278,  275,  224,  298,
+      286,  276,  294,  225,  287,  294,  288,  289,  291,  224,
+      225,  296,  224,  297,  293,  300,  299,  225,  277,  301,
+      278,  302,  303,  290,  298,  305,  290,  314,  295,  224,
+      248,  311,  224,  248,  311,  363,  315,  225,  313,  293,
+
+      300,  313,  318,  301,  363,  302,  225,  303,  307,  249,
+      305,  316,  314,  295,  320,  328,  317,  320,  308,  312,
+      310,  315,  320,  309,  251,  320,  320,  318,  320,  320,
+      325,  320,  311,  307,  249,  311,  316,  321,  330,  328,
+      317,  329,  308,  312,  310,  363,  322,  309,  251,  324,
+      326,  323,  324,  326,  339,  325,  331,  225,  340,  363,
+      312,  332,  321,  330,  320,  329,  334,  320,  249,  334,
+      320,  322,  336,  320,  338,  336,  323,  338,  327,  339,
+      341,  331,  340,  251,  312,  332,  326,  342,  343,  326,
+      249,  320,  348,  249,  320,  290,  335,  333,  290,  363,
+
+      337,  350,  327,  363,  341,  251,  320,  251,  352,  320,
+      344,  342,  363,  343,  327,  249,  336,  348,  345,  336,
+      335,  333,  363,  346,  337,  347,  350,  338,  349,  251,
+      338,  349,  352,  351,  351,  344,  351,  351,  327,  320,
+      353,  363,  320,  345,  337,  320,  354,  346,  320,  354,
+      347,  349,  351,  351,  349,  351,  351,  354,  356,  358,
+      354,  356,  360,  356,  359,  353,  356,  361,  337,  319,
+      362,  363,  362,  362,  319,  362,  363,  363,  363,  363,
+      363,  363,  363,  363,  358,  363,  360,  363,  359,  363,
+      363,  363,  361,  363,  363,  363,  304,  319,  363,  363,
+
+      363,  363,  319,   43,   43,  363,   43,   43,   43,   45,
+       45,   53,   53,   53,   98,   98,   98,   99,   99,  363,
+       99,   99,   99,  182,  363,  363,  182,  182,  198,  363,
+      363,  198,  210,  210,  210,  239,  363,  239,  239,  239,
+      262,  363,  363,  262,  262,  263,  263,  263,  282,  282,
+      282,  304,  363,  363,  304,  304,  306,  363,  363,  306,
+      319,  319,  319,  355,  363,  363,  355,  355,  357,  363,
+      357,  357,  357,    3,  363,  363,  363,  363,  363,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
+
+      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  363
     } ;
 
-static yyconst flex_int16_t yy_chk[1047] =
+static yyconst flex_int16_t yy_chk[1040] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -682,112 +679,111 @@ static yyconst flex_int16_t yy_chk[1047] =
         1,    1,    1,    1,    1,    2,   14,   14,    2,    5,
         5,    5,    5,    8,    8,    8,    8,   15,   15,   19,
        18,  100,   20,   64,   21,    2,   64,   18,   20,   22,
-       24,   22,  109,   24,   26,  109,   25,   28,   48,   26,
+       24,   22,  108,   24,   26,  108,   25,   28,   48,   26,
 
        54,   22,   43,   25,   19,   18,   28,   20,   21,   25,
         2,   18,   20,   22,   24,   22,   27,   24,   31,   26,
        27,   25,   28,   26,   54,   22,   38,   25,   30,   27,
        28,   29,    5,   25,   30,   55,    8,   30,   29,   58,
        29,   27,   29,   31,   17,   27,   33,   35,   35,   33,
-       13,   38,   30,   27,  148,   33,   29,  148,   30,   32,
-       55,   30,   29,   58,   29,   56,   29,   60,   32,   32,
-       57,   33,   12,   32,   33,   34,   34,   42,   42,   33,
-       63,   34,   49,   49,   32,    9,   36,   36,   36,   36,
-       56,   60,   32,   32,   61,   57,   62,   32,   66,   66,
+       13,   38,   30,   27,  146,   33,   29,  146,   30,   32,
+       55,   30,   29,   58,   29,   56,   29,   59,   32,   32,
+       57,   33,   60,   32,   33,   34,   34,   42,   42,   33,
+       63,   34,   49,   49,   32,   12,   36,   36,   36,   36,
+       56,   59,   32,   32,   61,   57,   60,   32,   62,   67,
 
-       34,   34,   68,   67,   63,   34,   36,   37,   37,   37,
+       34,   34,   68,   70,   63,   34,   36,   37,   37,   37,
        37,   39,   39,   39,   39,   41,   41,   41,   41,   61,
-       59,   62,   66,   66,   69,   70,   68,   37,   67,   59,
-       71,   36,   73,   74,   72,   77,   79,   86,   80,    3,
-       81,   82,   83,   84,   59,   85,    0,   80,   69,   36,
-       70,   72,   37,   59,   71,   87,   73,   74,   88,   72,
-       77,   79,   86,   80,   81,   82,   83,   84,   90,   85,
-       37,   80,   90,   96,   39,   72,   91,   92,   41,   87,
-       97,  101,  106,   88,   94,   94,   94,   94,   95,   95,
-       95,   95,  103,   90,  104,  105,  107,   90,   96,  108,
-
-       91,   92,  110,  111,   94,   97,  101,  106,   95,  112,
-      113,  115,  112,  114,  116,  119,  103,  117,  104,  105,
-      107,  118,  114,  121,  108,  122,  110,  129,  111,   94,
-      124,  125,  126,   95,  113,  115,  127,  131,  114,  116,
-      119,  117,  112,  132,  138,  118,  114,   94,  121,  122,
-      133,   95,  129,  134,  124,  125,  126,  136,  137,  135,
-      127,  131,  135,  139,  140,  145,  112,  141,  132,  138,
-      142,  143,  149,  151,  133,  149,  152,  134,  153,    0,
-      154,  136,  137,  159,  160,  169,  135,  161,  139,  140,
-      145,  141,  165,  166,  142,  143,  164,  167,  151,  164,
-
-      152,  168,  175,  153,  154,  170,  176,  159,  160,  169,
-      135,  164,  161,    0,  178,  179,  181,  165,  166,  182,
-      183,  185,  167,  183,  187,  186,  168,  175,  186,  170,
-      188,  176,  190,  193,    0,  194,  164,  172,  178,  179,
-      172,  181,  198,  183,  182,  185,  192,  195,  187,  192,
-      196,  199,  197,  200,  188,  197,  200,  190,  193,  194,
-      240,  200,  172,  240,  172,    0,  192,  198,  183,  172,
-      201,  195,  172,  201,  196,  199,    0,  206,  201,  202,
-      207,  203,  202,  211,  203,  201,  172,  202,  172,  203,
-      208,  192,  204,  172,  210,  204,  172,  215,  216,  214,
-
-      204,  206,  214,  218,  207,  219,  217,  204,  211,  217,
-      201,  203,  220,  202,  208,  221,  238,  217,  210,  214,
-        0,  275,  215,  216,  275,  227,  228,  218,  226,  228,
-      219,  226,  204,    0,  228,  203,  220,  202,    0,  221,
-      227,  238,  233,  234,  214,  223,  226,  239,  223,  229,
-      227,  231,  229,  242,  231,  235,  226,  229,  228,  231,
-      230,  226,  223,  230,  227,  223,  233,  234,  230,  237,
-      243,  226,  239,  244,  223,  229,  231,  223,  242,  235,
-      226,  245,  228,  246,  247,  226,  248,  223,  249,  250,
-      223,  230,  250,  237,  251,  243,  252,  244,  223,  229,
-
-      231,  223,  253,  254,  261,  245,  254,  246,  258,  247,
-      248,  254,  249,  263,    0,  230,  266,  250,  267,  251,
-      256,  252,  255,  256,  270,  255,  271,  253,  256,  261,
-      255,  257,  258,  272,  257,  273,  254,  263,  255,  257,
-      266,  250,  267,  274,  276,  285,  277,  278,  270,  277,
-      278,  271,  282,  256,  277,  278,  283,  287,  272,  273,
-      254,  279,  288,  255,  279,  257,  278,  274,  276,  279,
-      285,  280,  289,  290,  280,  291,  282,  256,  293,  280,
-      283,  287,  292,  294,    0,  292,  294,  288,  318,  257,
-      280,  278,  298,  301,    0,  296,  289,  290,  296,  295,
-
-      291,  294,  295,  293,  303,  308,  297,  295,  308,  297,
-        0,  294,  318,  296,  297,  280,  294,  298,  301,  302,
-        0,    0,  309,  296,  302,  309,  294,    0,  296,  303,
-      295,  310,  314,  311,  310,  294,  311,  309,  296,  319,
-      294,  320,  312,  313,  302,  312,  313,  296,  302,    0,
-      312,  310,  296,    0,  295,  315,  311,  314,  315,  329,
-      322,  323,  309,  319,  323,  322,  320,  324,  331,  327,
-      324,  313,  327,  315,  325,  328,  310,  325,  328,    0,
-      332,  311,  333,  315,  329,  322,  334,  326,  315,  322,
-      326,    0,  331,  336,  323,  313,  336,    0,  315,  340,
-
-      325,  339,  340,  328,  332,  326,  333,  315,    0,  343,
-      335,  334,  315,  335,  337,  326,  336,  337,  323,  338,
-      326,  336,  338,  348,  325,  341,  339,  328,  341,  335,
-      326,  347,  344,  337,  343,  344,    0,  345,    0,  326,
-      345,  336,    0,  346,  326,  336,  346,  338,  348,  349,
-      350,  360,  349,  350,  335,  347,  351,  354,  337,  351,
-      354,  355,  356,  357,  355,  356,  357,  358,  361,    0,
-      359,  338,  358,  359,  357,  360,  362,  363,    0,  362,
-      363,  359,    0,    0,    0,    0,    0,    0,    0,    0,
-        0,    0,  358,  361,    0,    0,  358,    0,    0,    0,
-
-        0,  356,  357,    0,    0,    0,    0,    0,    0,  359,
-      366,  366,    0,  366,  366,  366,  367,  367,  368,  368,
-      368,  369,  369,  369,  370,  370,    0,  370,  370,  370,
-      371,    0,    0,  371,  371,  372,    0,    0,  372,  373,
-      373,  373,  374,    0,  374,  374,  374,  375,    0,    0,
-      375,  375,  376,  376,  376,  377,  377,  377,  378,    0,
-        0,  378,  378,  379,    0,    0,  379,  380,  380,  380,
-      381,    0,    0,  381,  381,  382,    0,  382,  382,  382,
-      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-
-      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-      365,  365,  365,  365,  365,  365,  365,  365,  365,  365,
-      365,  365,  365,  365,  365,  365
+       66,   66,   69,   62,   67,   72,   68,   37,   70,   71,
+       73,   36,   74,   77,   79,    9,   81,   82,   80,    3,
+       83,   84,   72,   85,   66,   66,   69,   80,   86,   36,
+       72,   87,   37,   71,   73,   88,   74,   91,   77,   79,
+       81,   82,   92,   80,   83,   84,   72,   85,   90,   96,
+       37,   80,   90,   86,   39,   87,   97,    0,   41,  101,
+       88,   91,   94,   94,   94,   94,   92,   95,   95,   95,
+       95,  103,  104,   90,   96,  105,  106,   90,  107,    0,
+
+      109,   97,   94,  110,  101,  111,  112,   95,  111,  113,
+      147,  114,  115,  147,  118,  103,  104,  116,  113,  105,
+      106,    0,  117,  107,  109,  121,  120,   94,  110,  123,
+      112,  124,   95,  125,  113,  114,  126,  115,  111,  118,
+      128,  116,  113,  130,  131,   94,  117,  132,  133,  121,
+       95,  120,  135,  123,  136,  124,  134,  125,  140,  134,
+      126,  137,  111,  138,  139,  128,  141,  130,  142,  131,
+      144,  132,  133,  149,    0,  150,  135,  151,  136,  152,
+      157,  158,  140,  134,  159,  163,  137,  164,  138,  139,
+      141,  162,  142,  165,  162,  144,  166,  173,  149,  150,
+
+      167,  168,  151,  152,  157,  158,  162,  134,  174,  159,
+      163,  179,  164,  176,  177,  180,  184,  183,  165,  184,
+      181,  166,  173,  181,  167,  168,  185,  186,  188,  191,
+      196,  162,  170,  174,  192,  170,  179,  176,  177,  193,
+      180,  183,  190,  181,  195,  190,  194,  195,  197,  204,
+      185,  186,    0,  188,  191,  196,    0,  170,  192,  170,
+        0,    0,  190,  193,  170,    0,  198,  170,  181,  198,
+      194,  205,  197,  204,  198,  206,  200,  199,  208,  200,
+      199,  170,  209,  170,  200,  199,  201,  190,  170,  201,
+      202,  170,  199,  202,  201,  205,  213,  214,  202,  206,
+
+      212,  215,  208,  212,  215,  202,  217,  209,  216,  218,
+      200,  219,  215,  231,  225,  226,  201,  199,  226,  232,
+      212,  213,  214,  226,  224,  238,  233,  224,  238,  225,
+      202,  217,  216,  218,  200,  219,  235,  231,  273,  225,
+      201,  273,  224,  232,  242,  212,  221,  226,  227,  221,
+      233,  227,  224,  225,  236,  237,  227,  224,  240,  241,
+      235,  228,  229,  221,  228,  229,  221,  224,  242,  228,
+      229,  226,  243,  244,  227,  221,  224,  246,  221,  236,
+      237,  224,  245,  240,  241,  247,  248,  229,  221,  248,
+      249,  221,  228,  250,  251,    0,  243,  244,  227,  221,
+
+      252,  246,  221,  252,    0,    0,  259,  245,  252,  247,
+      256,  229,    0,  261,  248,  249,  228,  264,  250,  251,
+      253,  254,  255,  253,  254,  255,  265,  268,  253,  254,
+      255,  259,    0,  252,  256,  269,  253,  261,  248,  270,
+        0,  264,  271,  272,  274,  275,    0,  280,  275,  281,
+      265,  268,  285,  275,  254,  276,  255,  252,  276,  283,
+      269,  253,  277,  276,  270,  277,  271,  272,  274,  278,
+      277,  280,  278,  281,  276,  286,  285,  278,  254,  287,
+      255,  288,  289,  290,  283,  291,  290,  296,  278,  293,
+      292,  294,  293,  292,  294,    0,  299,  293,  295,  276,
+
+      286,  295,  301,  287,    0,  288,  295,  289,  292,  294,
+      291,  300,  296,  278,  306,  316,  300,  306,  292,  294,
+      293,  299,  307,  292,  294,  307,  308,  301,  309,  308,
+      312,  309,  311,  292,  294,  311,  300,  307,  318,  316,
+      300,  317,  292,  294,  293,    0,  308,  292,  294,  310,
+      313,  309,  310,  313,  327,  312,  320,  310,  329,    0,
+      311,  320,  307,  318,  321,  317,  322,  321,  313,  322,
+      323,  308,  324,  323,  325,  324,  309,  325,  313,  327,
+      330,  320,  329,  313,  311,  320,  326,  331,  332,  326,
+      324,  333,  337,  313,  333,  334,  323,  321,  334,    0,
+
+      324,  341,  313,    0,  330,  324,  335,  313,  345,  335,
+      333,  331,    0,  332,  326,  324,  336,  337,  334,  336,
+      323,  321,    0,  334,  324,  335,  341,  338,  339,  324,
+      338,  339,  345,  342,  343,  333,  342,  343,  326,  344,
+      346,    0,  344,  334,  336,  347,  348,  334,  347,  348,
+      335,  349,  352,  353,  349,  352,  353,  354,  355,  356,
+      354,  355,  358,  357,  356,  346,  357,  359,  336,  355,
+      360,    0,  361,  360,  357,  361,    0,    0,    0,    0,
+        0,    0,    0,    0,  356,    0,  358,    0,  356,    0,
+        0,    0,  359,    0,    0,    0,  354,  355,    0,    0,
+
+        0,    0,  357,  364,  364,    0,  364,  364,  364,  365,
+      365,  366,  366,  366,  367,  367,  367,  368,  368,    0,
+      368,  368,  368,  369,    0,    0,  369,  369,  370,    0,
+        0,  370,  371,  371,  371,  372,    0,  372,  372,  372,
+      373,    0,    0,  373,  373,  374,  374,  374,  375,  375,
+      375,  376,    0,    0,  376,  376,  377,    0,    0,  377,
+      378,  378,  378,  379,    0,    0,  379,  379,  380,    0,
+      380,  380,  380,  363,  363,  363,  363,  363,  363,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
+
+      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  363,  363,
+      363,  363,  363,  363,  363,  363,  363,  363,  363
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -878,7 +874,7 @@ static int checkImmediate(int token) {
 	return token;
 }
 
-#line 882 "engines/director/lingo/lingo-lex.cpp"
+#line 878 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -1064,7 +1060,7 @@ YY_DECL
 #line 92 "engines/director/lingo/lingo-lex.l"
 
 
-#line 1068 "engines/director/lingo/lingo-lex.cpp"
+#line 1064 "engines/director/lingo/lingo-lex.cpp"
 
 	if ( !(yy_init) )
 		{
@@ -1118,13 +1114,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 366 )
+				if ( yy_current_state >= 364 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_current_state != 365 );
+		while ( yy_current_state != 363 );
 		yy_cp = (yy_last_accepting_cpos);
 		yy_current_state = (yy_last_accepting_state);
 
@@ -1198,31 +1194,26 @@ YY_RULE_SETUP
 case 11:
 YY_RULE_SETUP
 #line 106 "engines/director/lingo/lingo-lex.l"
-{ count(); return tDONE; }
+{ count(); return tDOWN; }
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
 #line 107 "engines/director/lingo/lingo-lex.l"
-{ count(); return tDOWN; }
+{ count(); return tIF; }
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
 #line 108 "engines/director/lingo/lingo-lex.l"
-{ count(); return tIF; }
+{ count(); return tELSIF; }
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
 #line 109 "engines/director/lingo/lingo-lex.l"
-{ count(); return tELSIF; }
+{ count(); return tELSE; }
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
 #line 110 "engines/director/lingo/lingo-lex.l"
-{ count(); return tELSE; }
-	YY_BREAK
-case 16:
-YY_RULE_SETUP
-#line 111 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1242,20 +1233,25 @@ YY_RULE_SETUP
 		return ENDCLAUSE;
 	}
 	YY_BREAK
+case 16:
+YY_RULE_SETUP
+#line 128 "engines/director/lingo/lingo-lex.l"
+{ count(); return tFACTORY; }
+	YY_BREAK
 case 17:
 YY_RULE_SETUP
 #line 129 "engines/director/lingo/lingo-lex.l"
-{ count(); return tFACTORY; }
+{ count(); return tEXIT; }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
 #line 130 "engines/director/lingo/lingo-lex.l"
-{ count(); return tEXIT; }
+{ count(); return tGLOBAL; }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
 #line 131 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGLOBAL; }
+{ count(); return tGO; }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
@@ -1270,51 +1266,46 @@ YY_RULE_SETUP
 case 22:
 YY_RULE_SETUP
 #line 134 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGO; }
+{ count(); return tINSTANCE; }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
 #line 135 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINSTANCE; }
+{ count(); return tINTERSECTS; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 136 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTERSECTS; }
+{ count(); return tINTO; }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 137 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTO; }
+{ count(); return tIN; }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 138 "engines/director/lingo/lingo-lex.l"
-{ count(); return tIN; }
+{ count(); return tITEM; }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 139 "engines/director/lingo/lingo-lex.l"
-{ count(); return tITEM; }
+{ count(); return tLINE; }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 140 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLINE; }
+{ count(); return checkImmediate(tLOOP); }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 141 "engines/director/lingo/lingo-lex.l"
-{ count(); return checkImmediate(tLOOP); }
+{ count(); return tMACRO; }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 142 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMACRO; }
-	YY_BREAK
-case 31:
-YY_RULE_SETUP
-#line 143 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1327,45 +1318,50 @@ YY_RULE_SETUP
 		return tMETHOD;
 	}
 	YY_BREAK
+case 31:
+YY_RULE_SETUP
+#line 153 "engines/director/lingo/lingo-lex.l"
+{ count(); return tMOD; }
+	YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 154 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMOD; }
+{ count(); return tMOVIE; }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 155 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMOVIE; }
+{ count(); return tNEXT; }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 156 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEXT; }
+{ count(); return tNOT; }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 157 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNOT; }
+{ count(); return tOF; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 158 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOF; }
+{ count(); return tON; }		// D3
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 159 "engines/director/lingo/lingo-lex.l"
-{ count(); return tON; }		// D3
+{ count(); return tOPEN; }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 160 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOPEN; }
+{ count(); return tOR; }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 161 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOR; }
+{ count(); return tPLAY; }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
@@ -1375,41 +1371,36 @@ YY_RULE_SETUP
 case 41:
 YY_RULE_SETUP
 #line 163 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPLAY; }
+{ count(); yylval.s = new Common::String(yytext); return tPLAYACCEL; }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 164 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.s = new Common::String(yytext); return tPLAYACCEL; }
+{ count(); return tPREVIOUS; }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 165 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPREVIOUS; }
+{ count(); return tPROPERTY; }	// D4
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 166 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPROPERTY; }	// D4
+{ count(); return tPUT; }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 167 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPUT; }
+{ count(); return checkImmediate(tREPEAT); }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 168 "engines/director/lingo/lingo-lex.l"
-{ count(); return checkImmediate(tREPEAT); }
+{ count(); return tSET; }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 169 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSET; }
-	YY_BREAK
-case 48:
-YY_RULE_SETUP
-#line 170 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1428,19 +1419,19 @@ YY_RULE_SETUP
 		}
 	}
 	YY_BREAK
-case 49:
+case 48:
 YY_RULE_SETUP
-#line 187 "engines/director/lingo/lingo-lex.l"
+#line 186 "engines/director/lingo/lingo-lex.l"
 { count(); return tSTARTS; }
 	YY_BREAK
-case 50:
+case 49:
 YY_RULE_SETUP
-#line 188 "engines/director/lingo/lingo-lex.l"
+#line 187 "engines/director/lingo/lingo-lex.l"
 { count(); return tTELL; }
 	YY_BREAK
-case 51:
+case 50:
 YY_RULE_SETUP
-#line 189 "engines/director/lingo/lingo-lex.l"
+#line 188 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1450,9 +1441,9 @@ YY_RULE_SETUP
 		return THEENTITYWITHID;
 	}
 	YY_BREAK
-case 52:
+case 51:
 YY_RULE_SETUP
-#line 197 "engines/director/lingo/lingo-lex.l"
+#line 196 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1461,9 +1452,9 @@ YY_RULE_SETUP
 		return FBLTIN;
 	}
 	YY_BREAK
-case 53:
+case 52:
 YY_RULE_SETUP
-#line 204 "engines/director/lingo/lingo-lex.l"
+#line 203 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1500,9 +1491,9 @@ YY_RULE_SETUP
 		}
 	}
 	YY_BREAK
-case 54:
+case 53:
 YY_RULE_SETUP
-#line 239 "engines/director/lingo/lingo-lex.l"
+#line 238 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1526,9 +1517,9 @@ YY_RULE_SETUP
 		}
 	}
 	YY_BREAK
-case 55:
+case 54:
 YY_RULE_SETUP
-#line 261 "engines/director/lingo/lingo-lex.l"
+#line 260 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1593,9 +1584,9 @@ YY_RULE_SETUP
 		warning("LEXER: Unhandled the entity '%s', field '%s'", ptr, field.c_str());
 	}
 	YY_BREAK
-case 56:
+case 55:
 YY_RULE_SETUP
-#line 324 "engines/director/lingo/lingo-lex.l"
+#line 323 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1631,9 +1622,9 @@ YY_RULE_SETUP
 			return THEENTITY;
 	}
 	YY_BREAK
-case 57:
+case 56:
 YY_RULE_SETUP
-#line 358 "engines/director/lingo/lingo-lex.l"
+#line 357 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1654,74 +1645,74 @@ YY_RULE_SETUP
 		warning("LEXER: Unhandled the entity '%s'", ptr);
 	}
 	YY_BREAK
+case 57:
+YY_RULE_SETUP
+#line 376 "engines/director/lingo/lingo-lex.l"
+{ count(); return tTHEN; }
+	YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 377 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTHEN; }
+{ count(); return tTO; }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
 #line 378 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTO; }
+{ count(); return tSPRITE; }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
 #line 379 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSPRITE; }
+{ count(); return tWITH; }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
 #line 380 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITH; }
+{ count(); return tWITHIN; }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
 #line 381 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITHIN; }
+{ count(); return tWHEN; }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
 #line 382 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHEN; }
+{ count(); return tWHILE; }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
 #line 383 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHILE; }
+{ count(); return tWORD; }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 384 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWORD; }
+#line 385 "engines/director/lingo/lingo-lex.l"
+{ count(); return tNEQ; }
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
 #line 386 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEQ; }
+{ count(); return tGE; }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
 #line 387 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGE; }
+{ count(); return tLE; }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
 #line 388 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLE; }
+{ count(); return tCONCAT; }
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
 #line 389 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCONCAT; }
-	YY_BREAK
-case 70:
-YY_RULE_SETUP
-#line 390 "engines/director/lingo/lingo-lex.l"
 { count(); return tEQ; }
 	YY_BREAK
-case 71:
+case 70:
 YY_RULE_SETUP
-#line 392 "engines/director/lingo/lingo-lex.l"
+#line 391 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1757,43 +1748,43 @@ YY_RULE_SETUP
 		return ID;
 	}
 	YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 425 "engines/director/lingo/lingo-lex.l"
+{ count(); yylval.f = atof(yytext); return FLOAT; }
+	YY_BREAK
 case 72:
 YY_RULE_SETUP
 #line 426 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.f = atof(yytext); return FLOAT; }
+{ count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
 #line 427 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
+{ count(); return *yytext; }
 	YY_BREAK
 case 74:
+/* rule 74 can match eol */
 YY_RULE_SETUP
 #line 428 "engines/director/lingo/lingo-lex.l"
-{ count(); return *yytext; }
+{ count(); return '\n'; }
 	YY_BREAK
 case 75:
-/* rule 75 can match eol */
 YY_RULE_SETUP
 #line 429 "engines/director/lingo/lingo-lex.l"
-{ count(); return '\n'; }
+{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
 #line 430 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
-	YY_BREAK
-case 77:
-YY_RULE_SETUP
-#line 431 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
-case 78:
+case 77:
 YY_RULE_SETUP
-#line 433 "engines/director/lingo/lingo-lex.l"
+#line 432 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1797 "engines/director/lingo/lingo-lex.cpp"
+#line 1788 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2087,7 +2078,7 @@ static int yy_get_next_buffer (void)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 366 )
+			if ( yy_current_state >= 364 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2115,11 +2106,11 @@ static int yy_get_next_buffer (void)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 366 )
+		if ( yy_current_state >= 364 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 365);
+	yy_is_jam = (yy_current_state == 363);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2753,7 +2744,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 433 "engines/director/lingo/lingo-lex.l"
+#line 432 "engines/director/lingo/lingo-lex.l"
 
 
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index 7f0715aa3a..5f63a93473 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -103,7 +103,6 @@ and			{ count(); return tAND; }
 before		{ count(); return tBEFORE; }	// D3
 char		{ count(); return tCHAR; }		// D3
 contains	{ count(); return tCONTAINS; }
-done		{ count(); return tDONE; }
 down		{ count(); return tDOWN; }
 if			{ count(); return tIF; }
 else[ \t]+if { count(); return tELSIF; }
diff --git a/engines/director/lingo/lingo-preprocessor.cpp b/engines/director/lingo/lingo-preprocessor.cpp
index 8e251b4a6c..4afde4117a 100644
--- a/engines/director/lingo/lingo-preprocessor.cpp
+++ b/engines/director/lingo/lingo-preprocessor.cpp
@@ -25,6 +25,9 @@
 
 namespace Director {
 
+Common::String preprocessReturn(Common::String in);
+Common::String preprocessPlay(Common::String in);
+
 bool isspec(char c) {
 	return strchr("-+*/%%^:,()><&[]=", c) != NULL;
 }
@@ -161,6 +164,7 @@ Common::String Lingo::codePreprocessor(const char *s, bool simple) {
 		debugC(2, kDebugLingoParse, "line: %d                         '%s'", iflevel, line.c_str());
 
 		res1 = preprocessReturn(res1);
+		res1 = preprocessPlay(res1);
 
 		res += res1;
 
@@ -335,7 +339,7 @@ const char *strcasestr(const char *s, const char *find) {
 }
 #endif
 
-Common::String Lingo::preprocessReturn(Common::String in) {
+Common::String preprocessReturn(Common::String in) {
 	Common::String res, prev, next;
 	const char *ptr = in.c_str();
 	const char *beg = ptr;
@@ -369,4 +373,33 @@ Common::String Lingo::preprocessReturn(Common::String in) {
 	return res;
 }
 
+Common::String preprocessPlay(Common::String in) {
+	Common::String res, next;
+	const char *ptr = in.c_str();
+	const char *beg = ptr;
+
+	while ((ptr = strcasestr(beg, "play")) != NULL) {
+		ptr += 5; // end of 'play'
+		res += Common::String(beg, ptr);
+
+		next = nexttok(ptr);
+
+		debugC(2, kDebugLingoParse, "PLAY: nexttok: %s", next.c_str());
+
+		if (next.equals("done")) {
+			res += "\"done\""; // Turn it into STRING
+		}
+
+		ptr += 4; // Skip "done"
+		beg = ptr;
+	}
+
+	res += Common::String(beg);
+
+	if (in.size() != res.size())
+		debugC(2, kDebugLingoParse, "PLAY: in: %s\nout: %s", in.c_str(), res.c_str());
+
+	return res;
+}
+
 } // End of namespace Director
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index f434d646ac..2e81ebec39 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -177,7 +177,6 @@ public:
 	Common::String codePreprocessor(const char *s, bool simple = false);
 
 private:
-	Common::String preprocessReturn(Common::String in);
 	const char *findNextDefinition(const char *s);
 
 	// lingo-events.cpp


Commit: e57042359518864f8b4bb10c89b0cdcf6b3a43b3
    https://github.com/scummvm/scummvm/commit/e57042359518864f8b4bb10c89b0cdcf6b3a43b3
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-03-28T21:51:30+01:00

Commit Message:
DIRECTOR: LINGO: Changed notion of SYMBOL to be a string. Fixed ilk keyword accordingly

Changed paths:
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo.cpp


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 6abbc85662..b61584e34c 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1046,7 +1046,7 @@ void LB::b_floatP(int nargs) {
 
 void LB::b_ilk(int nargs) {
 	Datum d = g_lingo->pop();
-	d.u.i = d.type;
+	d.u.s = new Common::String(d.type2str(true));
 	d.type = SYMBOL;
 	g_lingo->push(d);
 }
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 87be7a0124..aa2c407fe6 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -263,10 +263,13 @@ void LC::c_stringpush() {
 void LC::c_symbolpush() {
 	char *s = g_lingo->readString();
 
-	warning("STUB: c_symbolpush()");
+	// TODO: FIXME: Currently we push string
+	// If you change it, you must also fix func_play for "play done"
+	// command
+	Datum d(new Common::String(s));
+	d.type = SYMBOL;
 
-	// TODO: FIXME: Must push symbol instead of string
-	g_lingo->push(Datum(new Common::String(s)));
+	g_lingo->push(d);
 }
 
 void LC::c_namepush() {
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 83f5a5c031..55c7131469 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -438,34 +438,7 @@ Common::String *Datum::toString() {
 		*s = *u.s;
 		break;
 	case SYMBOL:
-		switch (u.i) {
-		case INT:
-			*s = "#integer";
-			break;
-		case FLOAT:
-			*s = "#float";
-			break;
-		case STRING:
-			*s = "#string";
-			break;
-		case SYMBOL:
-			*s = "#symbol";
-			break;
-		case OBJECT:
-			*s = "#object";
-			break;
-		case VOID:
-			*s = "#void";
-			break;
-		case VAR:
-			*s = "#scumm-var";
-			break;
-		case REFERENCE:
-			*s = "#scumm-ref";
-			break;
-		default:
-			*s = Common::String::format("#unknown%d", u.i);
-		}
+		*s = Common::String::format("%s", u.s->c_str());
 		break;
 	case OBJECT:
 		*s = Common::String::format("#%s", u.s->c_str());


Commit: 8a5396e6f554f894c963b43e476d72eda1c31553
    https://github.com/scummvm/scummvm/commit/8a5396e6f554f894c963b43e476d72eda1c31553
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-03-28T21:51:49+01:00

Commit Message:
DIRECTOR: LINGO: Preprocess 'play done' to 'play #done'

Changed paths:
    engines/director/lingo/lingo-funcs.cpp
    engines/director/lingo/lingo-preprocessor.cpp


diff --git a/engines/director/lingo/lingo-funcs.cpp b/engines/director/lingo/lingo-funcs.cpp
index d4ca356158..7a75923e2f 100644
--- a/engines/director/lingo/lingo-funcs.cpp
+++ b/engines/director/lingo/lingo-funcs.cpp
@@ -295,8 +295,12 @@ void Lingo::func_play(Datum &frame, Datum &movie) {
 		return;
 	}
 
-	// play "done"
-	if (frame.type == STRING) {
+	// play #done
+	if (frame.type == SYMBOL) {
+		if (!frame.u.s->equals("#done")) {
+			warning("Lingo::func_play: unknown symbol: %s", frame.u.s->c_str());
+			return;
+		}
 		if (_vm->_movieStack.empty()) {	// No op if no nested movies
 			return;
 		}
diff --git a/engines/director/lingo/lingo-preprocessor.cpp b/engines/director/lingo/lingo-preprocessor.cpp
index 4afde4117a..328cfc7105 100644
--- a/engines/director/lingo/lingo-preprocessor.cpp
+++ b/engines/director/lingo/lingo-preprocessor.cpp
@@ -387,10 +387,10 @@ Common::String preprocessPlay(Common::String in) {
 		debugC(2, kDebugLingoParse, "PLAY: nexttok: %s", next.c_str());
 
 		if (next.equals("done")) {
-			res += "\"done\""; // Turn it into STRING
+			res += "#"; // Turn it into SYMBOL
 		}
 
-		ptr += 4; // Skip "done"
+		res += *ptr++; // We advance one character, so 'one' is left
 		beg = ptr;
 	}
 




More information about the Scummvm-git-logs mailing list