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

sev- sev at scummvm.org
Wed Jan 22 16:28:25 UTC 2020


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

Summary:
65e857e503 DIRECTOR: LINGO: Fixed parsing for 'the number of menuItems of menu <xx>'
8c88688908 DIRECTOR: LINGO: Added test for 'the number of menuItems'


Commit: 65e857e50386584f35b1904ebc9d23f954cf6797
    https://github.com/scummvm/scummvm/commit/65e857e50386584f35b1904ebc9d23f954cf6797
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-22T17:28:01+01:00

Commit Message:
DIRECTOR: LINGO: Fixed parsing for 'the number of menuItems of menu <xx>'

Changed paths:
    engines/director/lingo/lingo-builtins.cpp
    engines/director/lingo/lingo-builtins.h
    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-the.cpp


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 687602c..ef6e5db 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -228,7 +228,6 @@ static struct BuiltinProto {
 	{ "numberOfItems",	LB::b_numberofitems,1, 1, false, 4, FBLTIN },	//			D4 f
 	{ "numberOfLines",	LB::b_numberoflines,1, 1, false, 4, FBLTIN },	//			D4 f
 	{ "numberOfWords",	LB::b_numberofwords,1, 1, false, 4, FBLTIN },	//			D4 f
-	{ "numberOfMenuItems",LB::b_numberofMenuItems,1, 1, false, 4, FBLTIN },	//		D4 f
 	{ "lastCharOf",		LB::b_lastcharof,	1, 1, false, 4, FBLTIN },	//			D4 f
 	{ "lastItemOf",		LB::b_lastitemof,	1, 1, false, 4, FBLTIN },	//			D4 f
 	{ "lastLineOf",		LB::b_lastlineof,	1, 1, false, 4, FBLTIN },	//			D4 f
@@ -1813,16 +1812,6 @@ void LB::b_numberofwords(int nargs) {
 	g_lingo->push(d);
 }
 
-void LB::b_numberofMenuItems(int nargs) {
-	Datum d = g_lingo->pop();
-
-	warning("STUB: b_numberofMenuItems");
-	d.toInt();
-	d.u.i = 0;
-
-	g_lingo->push(d);
-}
-
 void LB::b_lastcharof(int nargs) {
 	Datum d = g_lingo->pop();
 
diff --git a/engines/director/lingo/lingo-builtins.h b/engines/director/lingo/lingo-builtins.h
index 76c439e..b07a369 100644
--- a/engines/director/lingo/lingo-builtins.h
+++ b/engines/director/lingo/lingo-builtins.h
@@ -201,7 +201,6 @@ namespace LB {
 	void b_numberofitems(int nargs);
 	void b_numberoflines(int nargs);
 	void b_numberofwords(int nargs);
-	void b_numberofMenuItems(int nargs);
 	void b_lastcharof(int nargs);
 	void b_lastitemof(int nargs);
 	void b_lastlineof(int nargs);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 6c9353b..4c47eeb 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -161,74 +161,75 @@ extern int yydebug;
     THEENTITY = 271,
     THEENTITYWITHID = 272,
     THEMENUITEMENTITY = 273,
-    FLOAT = 274,
-    BLTIN = 275,
-    FBLTIN = 276,
-    RBLTIN = 277,
-    ID = 278,
-    STRING = 279,
-    HANDLER = 280,
-    SYMBOL = 281,
-    ENDCLAUSE = 282,
-    tPLAYACCEL = 283,
-    tMETHOD = 284,
-    THEOBJECTFIELD = 285,
-    THEOBJECTREF = 286,
-    tDOWN = 287,
-    tELSE = 288,
-    tELSIF = 289,
-    tEXIT = 290,
-    tGLOBAL = 291,
-    tGO = 292,
-    tIF = 293,
-    tIN = 294,
-    tINTO = 295,
-    tLOOP = 296,
-    tMACRO = 297,
-    tMOVIE = 298,
-    tNEXT = 299,
-    tOF = 300,
-    tPREVIOUS = 301,
-    tPUT = 302,
-    tREPEAT = 303,
-    tSET = 304,
-    tTHEN = 305,
-    tTO = 306,
-    tWHEN = 307,
-    tWITH = 308,
-    tWHILE = 309,
-    tNLELSE = 310,
-    tFACTORY = 311,
-    tOPEN = 312,
-    tPLAY = 313,
-    tDONE = 314,
-    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
+    THEMENUITEMSENTITY = 274,
+    FLOAT = 275,
+    BLTIN = 276,
+    FBLTIN = 277,
+    RBLTIN = 278,
+    ID = 279,
+    STRING = 280,
+    HANDLER = 281,
+    SYMBOL = 282,
+    ENDCLAUSE = 283,
+    tPLAYACCEL = 284,
+    tMETHOD = 285,
+    THEOBJECTFIELD = 286,
+    THEOBJECTREF = 287,
+    tDOWN = 288,
+    tELSE = 289,
+    tELSIF = 290,
+    tEXIT = 291,
+    tGLOBAL = 292,
+    tGO = 293,
+    tIF = 294,
+    tIN = 295,
+    tINTO = 296,
+    tLOOP = 297,
+    tMACRO = 298,
+    tMOVIE = 299,
+    tNEXT = 300,
+    tOF = 301,
+    tPREVIOUS = 302,
+    tPUT = 303,
+    tREPEAT = 304,
+    tSET = 305,
+    tTHEN = 306,
+    tTO = 307,
+    tWHEN = 308,
+    tWITH = 309,
+    tWHILE = 310,
+    tNLELSE = 311,
+    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
   };
 #endif
 
@@ -256,7 +257,7 @@ union YYSTYPE
 		Common::String *field;
 	} objectref;
 
-#line 260 "engines/director/lingo/lingo-gr.cpp"
+#line 261 "engines/director/lingo/lingo-gr.cpp"
 
 };
 typedef union YYSTYPE YYSTYPE;
@@ -573,21 +574,21 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  127
+#define YYFINAL  128
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1654
+#define YYLAST   1725
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  102
+#define YYNTOKENS  103
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  51
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  172
+#define YYNRULES  173
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  370
+#define YYNSTATES  375
 
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   341
+#define YYMAXUTOK   342
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -600,15 +601,15 @@ union yyalloc
 static const yytype_int8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      95,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      96,     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,    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,    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,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,    99,     2,   100,     2,     2,     2,     2,     2,     2,
+       2,   100,     2,   101,     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,
@@ -633,7 +634,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
+      85,    86,    87
 };
 
 #if YYDEBUG
@@ -641,23 +642,23 @@ static const yytype_int8 yytranslate[] =
 static const yytype_int16 yyrline[] =
 {
        0,   141,   141,   142,   143,   145,   146,   147,   149,   155,
-     158,   159,   160,   166,   173,   179,   186,   192,   199,   210,
-     217,   218,   219,   221,   222,   223,   224,   226,   227,   232,
-     243,   260,   272,   283,   285,   290,   294,   299,   303,   313,
-     324,   325,   327,   334,   344,   355,   357,   363,   369,   376,
-     378,   380,   381,   382,   384,   390,   393,   396,   400,   404,
-     408,   410,   411,   412,   415,   418,   421,   429,   435,   440,
-     446,   447,   448,   449,   450,   451,   452,   453,   454,   455,
-     456,   457,   458,   459,   460,   461,   462,   463,   464,   465,
-     466,   467,   468,   469,   471,   472,   473,   474,   475,   476,
-     477,   478,   480,   483,   485,   486,   487,   488,   489,   490,
-     490,   491,   491,   492,   493,   496,   499,   500,   502,   506,
-     511,   515,   520,   524,   536,   537,   538,   539,   543,   547,
-     552,   553,   555,   556,   560,   564,   568,   568,   598,   598,
-     598,   605,   606,   606,   613,   623,   631,   631,   633,   634,
-     635,   636,   638,   639,   640,   642,   644,   652,   653,   654,
-     656,   657,   659,   661,   662,   663,   664,   666,   667,   669,
-     670,   672,   676
+     159,   170,   171,   172,   178,   185,   191,   198,   204,   211,
+     222,   229,   230,   231,   233,   234,   235,   236,   238,   239,
+     244,   255,   272,   284,   295,   297,   302,   306,   311,   315,
+     325,   336,   337,   339,   346,   356,   367,   369,   375,   381,
+     388,   390,   392,   393,   394,   396,   402,   405,   408,   412,
+     416,   420,   422,   423,   424,   427,   430,   433,   441,   447,
+     452,   458,   459,   460,   461,   462,   463,   464,   465,   466,
+     467,   468,   469,   470,   471,   472,   473,   474,   475,   476,
+     477,   478,   479,   480,   481,   483,   484,   485,   486,   487,
+     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
 };
 #endif
 
@@ -669,26 +670,26 @@ static const char *const yytname[] =
   "$end", "error", "$undefined", "UNARY", "CASTREF", "VOID", "VAR",
   "POINT", "RECT", "ARRAY", "OBJECT", "REFERENCE", "LEXERROR", "INT",
   "ARGC", "ARGCNORET", "THEENTITY", "THEENTITYWITHID", "THEMENUITEMENTITY",
-  "FLOAT", "BLTIN", "FBLTIN", "RBLTIN", "ID", "STRING", "HANDLER",
-  "SYMBOL", "ENDCLAUSE", "tPLAYACCEL", "tMETHOD", "THEOBJECTFIELD",
-  "THEOBJECTREF", "tDOWN", "tELSE", "tELSIF", "tEXIT", "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", "tPROPERTY",
-  "tON", "tENDIF", "tENDREPEAT", "tENDTELL", "'<'", "'>'", "'&'", "'+'",
-  "'-'", "'*'", "'/'", "'%'", "'\\n'", "'('", "')'", "','", "'['", "']'",
-  "':'", "$accept", "program", "programline", "asgn", "stmtoneliner",
-  "stmtonelinerwithif", "stmt", "tellstart", "ifstmt", "elseifstmtlist",
-  "elseifstmt", "ifoneliner", "repeatwhile", "repeatwith", "if", "elseif",
-  "begin", "end", "stmtlist", "when", "simpleexpr", "expr", "chunkexpr",
-  "reference", "proc", "$@1", "$@2", "globallist", "propertylist",
-  "instancelist", "gotofunc", "gotomovie", "playfunc", "$@3", "defn",
-  "$@4", "$@5", "$@6", "on", "$@7", "argdef", "endargdef", "argstore",
-  "macro", "arglist", "nonemptyarglist", "list", "valuelist", "linearlist",
-  "proplist", "proppair", YY_NULLPTR
+  "THEMENUITEMSENTITY", "FLOAT", "BLTIN", "FBLTIN", "RBLTIN", "ID",
+  "STRING", "HANDLER", "SYMBOL", "ENDCLAUSE", "tPLAYACCEL", "tMETHOD",
+  "THEOBJECTFIELD", "THEOBJECTREF", "tDOWN", "tELSE", "tELSIF", "tEXIT",
+  "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",
+  "tPROPERTY", "tON", "tENDIF", "tENDREPEAT", "tENDTELL", "'<'", "'>'",
+  "'&'", "'+'", "'-'", "'*'", "'/'", "'%'", "'\\n'", "'('", "')'", "','",
+  "'['", "']'", "':'", "$accept", "program", "programline", "asgn",
+  "stmtoneliner", "stmtonelinerwithif", "stmt", "tellstart", "ifstmt",
+  "elseifstmtlist", "elseifstmt", "ifoneliner", "repeatwhile",
+  "repeatwith", "if", "elseif", "begin", "end", "stmtlist", "when",
+  "simpleexpr", "expr", "chunkexpr", "reference", "proc", "$@1", "$@2",
+  "globallist", "propertylist", "instancelist", "gotofunc", "gotomovie",
+  "playfunc", "$@3", "defn", "$@4", "$@5", "$@6", "on", "$@7", "argdef",
+  "endargdef", "argstore", "macro", "arglist", "nonemptyarglist", "list",
+  "valuelist", "linearlist", "proplist", "proppair", YY_NULLPTR
 };
 #endif
 
@@ -705,13 +706,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,    60,    62,    38,
-      43,    45,    42,    47,    37,    10,    40,    41,    44,    91,
-      93,    58
+     335,   336,   337,   338,   339,   340,   341,   342,    60,    62,
+      38,    43,    45,    42,    47,    37,    10,    40,    41,    44,
+      91,    93,    58
 };
 # endif
 
-#define YYPACT_NINF (-270)
+#define YYPACT_NINF (-275)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -725,43 +726,44 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     283,   -74,  -270,  -270,   978,  -270,  1013,  1094,    20,  1129,
-    -270,  -270,  -270,  -270,  -270,  -270,    52,  -270,   859,  -270,
-    -270,    53,   978,    16,   146,    29,    68,   978,   897,    80,
-     978,   978,   978,   978,   978,   978,   978,  -270,  -270,   978,
-     978,   978,   367,     7,  -270,  -270,  -270,  -270,  -270,   978,
-       3,   978,   697,  -270,  1548,  -270,  -270,  -270,  -270,  -270,
-    -270,  -270,  -270,  -270,  -270,    17,   978,  1548,   978,  1548,
-      23,   978,    23,  -270,  -270,   978,  1548,    24,   978,  -270,
-    -270,    91,  -270,   978,  -270,    73,  -270,   359,  -270,    92,
-    -270,  1168,    94,  -270,     2,    20,    20,    27,    67,    70,
-    -270,   143,  -270,   359,  -270,  -270,    25,  -270,  1201,  1234,
-    1267,  1300,  1515,  1465,   101,   102,  -270,  -270,  1478,    31,
-      51,  -270,  1548,    54,    57,    58,  -270,  -270,   454,  1548,
-     978,   978,  1548,  -270,  -270,   978,  1548,  -270,  -270,   978,
-     978,   978,   978,   978,   978,   978,   978,   978,   978,   978,
-     978,   978,   978,   978,   978,   978,   135,   978,  1168,  1478,
-     -42,   978,   -37,   -17,   978,    23,   135,  -270,    61,  1548,
-     978,  -270,  -270,    18,   978,   978,  -270,   978,   978,    34,
-     116,   978,   978,   978,  -270,   978,  -270,   142,   978,   978,
-     978,   978,   978,   978,   978,   978,   978,   978,  -270,  -270,
-    -270,    69,  -270,  -270,    20,    20,  -270,   978,    72,  -270,
-    -270,  1548,  1548,   122,  -270,  1548,    15,    15,    15,    15,
-    1561,  1561,  -270,    19,    15,    15,    15,    15,    19,   -34,
-     -34,  -270,  -270,  -270,   -79,  -270,  1548,  -270,  -270,  1548,
-     -78,   152,  1548,  -270,  -270,  -270,  1548,  1548,  1548,    15,
-     978,   978,   157,  1548,    15,  1548,  1548,  -270,  1548,  1333,
-    1548,  1366,  1548,  1399,  1548,  1432,  1548,  1548,   778,  -270,
-     159,  -270,  -270,  1548,    31,    51,  -270,   616,  -270,    22,
-    -270,   133,    96,   176,    96,  -270,   135,  1548,    15,    20,
-     978,   978,   978,   978,  -270,   616,  -270,  -270,  -270,   115,
-     616,   150,   978,   616,   778,   179,  -270,  -270,  -270,   -73,
-     166,  1548,  1548,  1548,  1548,  -270,   124,  -270,   134,   978,
-    1548,  -270,  -270,  -270,   535,   616,    96,   978,  -270,  -270,
-    1548,  -270,    43,   -21,   197,  -270,  1548,  -270,   616,  -270,
-    -270,  -270,   978,   138,  -270,  -270,  -270,   125,   616,   616,
-     139,  -270,  1548,  -270,   778,   202,   141,  -270,   616,   177,
-    -270,  -270,  -270,   144,  -270,   145,  -270,   616,  -270,  -270
+     309,   -40,  -275,  -275,  1050,  -275,  1088,  1170,    -5,  1208,
+    -275,  -275,  -275,  -275,  -275,  -275,    26,  -275,   847,  -275,
+    -275,    41,   968,   -12,    37,    42,    72,  1050,   929,    78,
+    1050,  1050,  1050,  1050,  1050,  1050,  1050,  -275,  -275,  1050,
+    1050,  1050,   391,     7,  -275,  -275,  -275,  -275,  -275,  1050,
+       1,  1050,   725,  -275,  1618,  -275,  -275,  -275,  -275,  -275,
+    -275,  -275,  -275,  -275,  -275,    13,   968,  1618,  1050,  1618,
+       5,  1050,     5,  -275,  -275,  1050,  1618,    22,  1050,  -275,
+    -275,    98,  -275,  1050,  -275,    80,  -275,   173,  -275,   101,
+    -275,   102,   362,   107,  -275,   -31,    -5,    -5,     8,    82,
+     104,  -275,  1535,  -275,   173,  -275,  -275,    54,  -275,  1229,
+    1263,  1296,  1329,  1585,  1494,   132,   133,  -275,  -275,  1548,
+      57,    60,  -275,  1618,    62,    65,    66,  -275,  -275,   479,
+    1618,  1050,  1050,  1618,  -275,  -275,  1050,  1618,  -275,  -275,
+    1050,  1050,  1050,  1050,  1050,  1050,  1050,  1050,  1050,  1050,
+    1050,  1050,  1050,  1050,  1050,  1050,  1050,   142,  1050,   362,
+    1548,   -47,  1050,    17,    19,  1050,     5,   142,  -275,    69,
+    1618,  1050,  -275,  -275,    -5,    16,  1050,  1050,  -275,  1050,
+    1050,    18,   128,  1050,  1050,  1050,  -275,  1050,  -275,   154,
+    1050,  1050,  1050,  1050,  1050,  1050,  1050,  1050,  1050,  1050,
+    -275,  -275,  -275,    83,  -275,  -275,    -5,    -5,  -275,  1050,
+      58,  -275,  -275,  1618,  1618,   134,  -275,  1618,    15,    15,
+      15,    15,  1631,  1631,  -275,    20,    15,    15,    15,    15,
+      20,   -35,   -35,  -275,  -275,  -275,   -23,  -275,  1618,  -275,
+    -275,  1618,   -19,   160,  1618,  -275,   156,  -275,  -275,  1618,
+    1618,  1618,    15,  1050,  1050,   175,  1618,    15,  1618,  1618,
+    -275,  1618,  1362,  1618,  1395,  1618,  1428,  1618,  1461,  1618,
+    1618,   807,  -275,   177,  -275,  -275,  1618,    57,    60,  -275,
+     643,  -275,    -8,  -275,   151,   105,   179,   105,  -275,   142,
+    1050,  1618,    15,    -5,  1050,  1050,  1050,  1050,  -275,   643,
+    -275,  -275,  -275,   120,   643,   155,  1050,   643,   807,   184,
+    -275,  -275,  -275,     2,  1618,   159,  1618,  1618,  1618,  1618,
+    -275,   125,  -275,   127,  1050,  1618,  -275,  -275,  -275,   561,
+     643,   105,  1050,  -275,  -275,  1618,  -275,    85,   -22,   192,
+    -275,  1618,  -275,   643,  -275,  -275,  -275,  1050,   136,  -275,
+    -275,  -275,   119,   643,   643,   139,  -275,  1618,  -275,   807,
+     198,   140,  -275,   643,   176,  -275,  -275,  -275,   144,  -275,
+     146,  -275,   643,  -275,  -275
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -769,65 +771,66 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,    55,    66,     0,    56,   157,   157,     0,    59,
-      58,    57,   136,   142,    68,    69,   108,   109,     0,    47,
-     138,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   111,   146,     0,
-       0,     0,   163,     0,     3,    70,    27,     7,    28,     0,
-       0,     0,     0,    61,    21,   103,    62,    22,   105,   106,
-       6,    49,    20,    60,     4,    59,     0,    67,   157,   158,
-     115,   157,    64,    59,   102,   157,   160,   156,   157,    49,
-     107,     0,   124,     0,   125,     0,   126,   127,   129,     0,
-      33,   104,     0,    45,     0,     0,     0,     0,     0,     0,
-     141,   117,   132,   133,   135,   122,   113,    84,     0,     0,
-       0,     0,     0,     0,     0,     0,    89,    90,     0,    58,
-      57,   164,   167,     0,   165,   166,   169,     1,     5,    50,
-       0,     0,    50,    50,    26,     0,    24,    25,    23,     0,
+       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,     0,    62,    22,   104,    63,    23,   106,   107,
+       6,    50,    21,    61,     4,    60,     0,    68,   158,   159,
+     116,   158,    65,    60,   103,   158,   161,   157,   158,    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,     0,     0,    51,    51,    27,     0,    25,    26,    24,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   148,   157,     0,   158,
-       0,     0,     0,     0,     0,   137,   148,   118,   110,   131,
-       0,   128,   139,     0,     0,     0,    46,     0,     0,     0,
-       0,     0,     0,     0,    54,     0,   134,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    37,    37,
-     120,   112,   147,    91,     0,     0,   162,     0,     0,     2,
-      51,    50,    50,     0,    34,    50,    80,    81,    78,    79,
-      82,    83,    75,    86,    87,    88,    77,    76,    85,    71,
-      72,    73,    74,   149,     0,   114,   159,    63,    65,   161,
-       0,     0,   130,    49,     8,     9,    10,    11,    15,    13,
-       0,     0,     0,    14,    12,    19,   116,   123,    94,     0,
-      96,     0,    98,     0,   100,     0,    92,    93,     0,    51,
-       0,   172,   171,   168,     0,     0,   170,    50,    51,     0,
-      51,     0,   155,     0,   155,   119,   148,    16,    17,     0,
-       0,     0,     0,     0,    50,    50,   121,    52,    53,     0,
-      50,     0,     0,    50,     0,     0,    51,   150,    51,     0,
-       0,    95,    97,    99,   101,    36,     0,    29,     0,     0,
-      50,    40,    50,   151,   145,   143,   155,     0,    35,    32,
-      50,    51,    50,     0,   152,    51,    18,    51,    50,    49,
-      48,    41,     0,     0,    49,    44,   153,   144,   140,    50,
-       0,    51,    50,    38,     0,     0,     0,    30,    50,     0,
-      50,   154,    31,     0,    51,     0,    39,    50,    43,    42
+       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,    51,    51,     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,    52,     0,    52,     0,   156,     0,   156,   120,   149,
+       0,    17,    18,     0,     0,     0,     0,     0,    51,    51,
+     122,    53,    54,     0,    51,     0,     0,    51,     0,     0,
+      52,   151,    52,     0,    10,     0,    96,    98,   100,   102,
+      37,     0,    30,     0,     0,    51,    41,    51,   152,   146,
+     144,   156,     0,    36,    33,    51,    52,    51,     0,   153,
+      52,    19,    52,    51,    50,    49,    42,     0,     0,    50,
+      45,   154,   145,   141,    51,     0,    52,    51,    39,     0,
+       0,     0,    31,    51,     0,    51,   155,    32,     0,    52,
+       0,    40,    51,    44,    43
 };
 
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -270,  -270,   109,  -270,  -255,  -270,     6,    40,  -270,  -270,
-    -270,  -270,  -270,  -270,   189,  -270,   -75,   -82,    64,  -270,
-      -7,    -4,  -270,    71,   190,  -270,  -270,  -270,  -270,  -270,
-    -270,   -19,  -270,  -270,  -270,  -270,  -270,  -270,  -270,  -270,
-    -158,  -270,  -269,   191,     4,  -270,  -270,  -270,  -270,  -270,
-      37
+    -275,  -275,   103,  -275,  -262,  -275,     6,    32,  -275,  -275,
+    -275,  -275,  -275,  -275,   182,  -275,   -75,   -84,  -112,  -275,
+       3,    -4,  -275,    73,   200,  -275,  -275,  -275,  -275,  -275,
+    -275,   -18,  -275,  -275,  -275,  -275,  -275,  -275,  -275,  -275,
+    -166,  -275,  -274,   202,    10,  -275,  -275,  -275,  -275,  -275,
+      45
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    43,    44,    45,    46,   133,   298,   268,    48,   332,
-     341,   134,    49,    50,    51,   342,   156,   210,   277,    52,
-      53,    54,    55,    56,    57,    81,   114,   168,   201,   106,
-      58,    88,    59,    78,    60,    89,   243,    79,    61,   115,
-     234,   347,   306,    62,   163,    77,    63,   123,   124,   125,
-     126
+      -1,    43,    44,    45,    46,   134,   302,   271,    48,   337,
+     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,   310,    62,   164,    77,    63,   124,   125,   126,
+     127
 };
 
   /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -835,431 +838,446 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      67,    74,    69,    69,   166,    76,    47,   127,   240,   104,
-      70,    72,   344,   294,    87,   308,   282,   284,    91,   283,
-     283,    64,   326,   101,   103,   283,   107,   108,   109,   110,
-     111,   112,   113,     2,   145,   116,   117,   118,   122,     5,
-       8,   244,   130,    73,    10,   129,    11,   132,   136,   322,
-     213,   214,    99,   177,   301,   235,   161,   335,   154,   155,
-     237,   161,   158,   345,   159,   178,   131,   159,   171,    92,
-      93,   159,   160,   302,    69,   162,   339,   340,   181,   169,
-     238,   161,   165,   145,   186,   250,   146,   145,   179,   180,
-     182,   100,    31,    32,    33,    34,   274,   251,   275,   360,
-      80,    90,   128,   105,   151,   152,   153,   154,   155,   152,
-     153,   154,   155,   157,   167,   172,   170,   176,   183,    42,
-     184,   161,   164,   187,   200,   202,   211,   212,   309,   278,
-     279,   215,   204,   281,    47,   216,   217,   218,   219,   220,
-     221,   222,   223,   224,   225,   226,   227,   228,   229,   230,
-     231,   232,   205,    69,   206,   207,   208,   236,   233,   241,
-     239,   252,    94,    95,    96,   257,   242,   270,   286,    97,
-     246,   247,   280,   248,   249,   285,    98,   253,   254,   255,
-     289,   256,   296,   304,   258,   259,   260,   261,   262,   263,
-     264,   265,   266,   267,   305,   299,   185,   271,   272,   307,
-     317,   319,   323,   273,   139,   140,   141,   142,   143,   144,
-     328,   145,   315,   316,   146,   147,   148,   327,   318,   329,
-     346,   321,   353,   355,   357,   361,   362,   364,   366,   368,
-     149,   150,   151,   152,   153,   154,   155,   209,   331,   269,
-     333,   135,   137,   138,   245,   276,   287,   288,   337,     0,
-     343,     0,     0,     0,     0,     0,   350,     0,     0,     0,
-       0,     0,     0,     0,   351,     0,     0,   356,     0,   354,
-     359,     0,     0,     0,     0,     0,   363,     0,   365,     0,
-       0,     0,   310,    -5,     1,   369,   311,   312,   313,   314,
-       0,     0,     0,     0,     0,     0,     2,     0,   320,     3,
-       4,     0,     5,     6,     7,     8,     9,    10,     0,    11,
-       0,    12,    13,    14,    15,   330,     0,     0,    16,    17,
-      18,    19,     0,   336,     0,    20,     0,    21,     0,     0,
-      22,    23,    24,   295,     0,    25,     0,     0,   352,    26,
-      27,    28,   300,    29,   303,     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,
-     324,     0,   325,    39,    40,     0,     0,     0,    -5,    41,
-       2,     0,    42,     3,     4,     0,     5,     0,     7,     8,
-      65,   119,     0,   120,     0,   338,     0,    14,    15,   348,
-       0,   349,    83,     0,    85,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    66,   358,    24,     0,     0,     0,
-     139,   140,   141,   142,   143,   144,     0,   145,   367,     0,
-     146,   147,   148,     0,    30,     0,     0,     0,     0,     0,
-       0,    31,    32,    33,    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,     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,
+      67,   242,    69,    69,   167,    76,    47,   128,     2,   298,
+     105,    74,   349,   312,    87,     5,    70,    72,    92,    73,
+      10,   179,    11,   102,   104,   305,   108,   109,   110,   111,
+     112,   113,   114,   180,   146,   117,   118,   119,   123,     8,
+     247,   131,    93,    94,   306,   130,   327,   133,   137,   215,
+     216,   237,   162,    95,    96,    97,    64,   340,   155,   156,
+     183,    98,   159,   350,   160,   132,   100,   160,    99,   172,
+     253,   160,   184,   285,    69,    80,   286,   287,   161,   170,
+     286,   163,   254,   277,   146,   278,   188,   147,   166,   146,
+      90,    31,    32,    33,    34,    42,   101,   365,   331,   181,
+     182,   286,   106,   129,   162,   152,   153,   154,   155,   156,
+     158,   153,   154,   155,   156,   239,   162,   240,   162,   344,
+     345,   165,   168,   313,   171,   173,   174,   213,   214,   281,
+     282,   178,   217,   284,   185,    47,   218,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,   229,   230,   231,
+     232,   233,   234,   189,    69,   186,   202,   204,   238,   206,
+     299,   241,   207,   208,   209,   210,   235,   244,   243,   304,
+     289,   307,   249,   250,   255,   251,   252,   246,   260,   256,
+     257,   258,   273,   259,   288,   283,   261,   262,   263,   264,
+     265,   266,   267,   268,   269,   270,   303,   290,   329,   293,
+     330,   300,   308,   311,   309,   276,   322,   324,   328,   274,
+     275,   332,   333,   334,   320,   321,   351,    83,   360,    85,
+     323,   358,   366,   326,   343,   362,   367,   369,   353,   371,
+     354,   373,   211,   272,   136,   140,   141,   142,   143,   144,
+     145,   336,   146,   338,   363,   147,   148,   149,   248,   291,
+     292,   342,   138,   348,   139,   279,     0,   372,     0,   355,
+       0,   150,   151,   152,   153,   154,   155,   156,     0,   356,
+     361,     0,     0,   364,   359,     0,     0,     0,     0,   368,
+       0,   370,     0,     0,     0,     0,   314,     0,   374,     0,
+     316,   317,   318,   319,     0,     0,   315,     0,     0,     0,
+       0,     0,   325,     0,     0,     0,     0,     0,     0,    -5,
+       1,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     335,     0,     2,     0,     0,     3,     4,     0,   341,     5,
+       6,     7,     8,     9,    10,     0,    11,     0,    12,    13,
+      14,    15,     0,   357,     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,   175,     2,    -5,    41,     3,     4,    42,
+       0,     5,     0,     7,     8,    65,   120,     0,   121,     0,
+       0,     0,    14,    15,   140,   141,   142,   143,   144,   145,
+       0,   146,   176,   177,   147,   148,   149,     0,     0,    66,
+       0,    24,     0,     0,     0,     0,     0,     0,     0,     0,
+     150,   151,   152,   153,   154,   155,   156,     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,     0,     0,    41,     0,
+       0,    42,     2,   122,     0,     3,     4,     0,     0,     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,     0,    41,     3,     4,    42,
+       0,     5,     6,     7,     8,     9,    10,     0,    11,   339,
+      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,
-      26,    27,    28,     0,    29,     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,    36,    37,    38,     0,     0,
-       0,     0,     0,     0,    39,    40,     0,     0,     2,     0,
-      41,     3,     4,    42,     5,     6,     7,     8,     9,    10,
-       0,    11,   334,    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,
-     297,    41,     3,     4,    42,     5,     6,     7,     8,     9,
+      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,    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,    36,    37,     0,
+      31,    32,    33,    34,    35,     0,     0,     0,    37,     0,
        0,     0,     0,     0,     0,     0,    39,    40,     0,     0,
-       2,   297,    41,     3,     4,    42,     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,     5,     6,     7,
+       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,     0,    29,     0,
+       2,     0,     0,     3,     4,    27,    28,     5,    29,     7,
+       8,    65,    10,     0,    11,    30,     0,     0,    14,    15,
+       0,     0,    31,    32,    33,    34,    35,     0,     0,    82,
+      37,    83,    84,    85,    86,    66,     0,    24,    39,    40,
+       0,     0,     0,     0,    41,     0,     0,    42,     0,     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,     5,     0,
-       7,     8,    65,    10,     0,    11,     0,     0,     0,    14,
-      15,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      82,     0,    83,    84,    85,    86,    66,     0,    24,     0,
-       2,     0,     0,     3,     4,     0,     5,     0,     7,     8,
-      65,    10,     0,    11,     0,     0,    30,    14,    15,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    39,    40,
+       0,     0,     2,     0,    41,     3,     4,    42,     0,     5,
+       0,     7,     8,    65,    10,     0,    11,     0,     0,     0,
+      14,    15,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    83,     0,    85,     0,    66,     0,    24,
+       0,     2,     0,     0,     3,     4,     0,    91,     5,   103,
+       7,     8,    65,    10,     0,    11,     0,    30,     0,    14,
+      15,     0,     0,     0,    31,    32,    33,    34,    35,     0,
+       0,     0,     0,     0,     0,     0,    66,     0,    24,     0,
+      39,    40,     0,     0,     0,     0,    41,     0,     0,    42,
+       0,     0,     0,     0,     0,     0,    30,     0,     0,     0,
        0,     0,     0,    31,    32,    33,    34,    35,     0,     0,
-      83,     0,    85,     0,    66,     0,    24,     0,     0,    39,
-      40,     0,     0,     0,     0,    41,   102,     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,     5,     0,     7,
-       8,    65,    10,     0,    11,     0,     0,     0,    14,    15,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    66,     2,    24,     0,     3,
-       4,     0,     5,     0,     7,     8,    65,    10,     0,    11,
-       0,     0,     0,    14,    15,    30,     0,     0,     0,     0,
-       0,     0,    31,    32,    33,    34,    35,     0,     0,     0,
-      66,     0,    24,     0,     0,     0,     0,     0,    39,    40,
-       0,     0,     0,     0,    41,     0,     0,    42,     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,    68,
-       3,     4,    42,     5,     0,     7,     8,    65,    10,     0,
-      11,     0,     0,     0,    14,    15,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    66,     2,    24,     0,     3,     4,     0,     5,     0,
-       7,     8,    65,    10,     0,    11,     0,     0,     0,    14,
-      15,    30,     0,     0,     0,     0,     0,     0,    31,    32,
-      33,    34,    35,     0,     0,     0,    66,     0,    24,     0,
-       0,     0,     0,     0,    39,    40,     0,     0,     0,     0,
-      71,     0,     0,    42,     0,     0,    30,     0,     0,     0,
-       0,     0,     0,    31,    32,    33,    34,    35,   173,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,    39,
-      40,     0,     0,     0,     0,    75,     0,     0,    42,   139,
-     140,   141,   142,   143,   144,     0,   145,   174,   175,   146,
-     147,   148,     0,     0,     0,     0,   188,     0,     0,     0,
-       0,     0,   189,     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,   190,
-       0,     0,     0,     0,     0,   191,     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,   192,     0,     0,     0,     0,     0,   193,     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,   194,     0,     0,     0,     0,
-       0,   195,     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,   290,     0,
-       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,   291,     0,     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,   292,     0,     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,   293,     0,     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,   198,     0,     0,   149,
-     150,   151,   152,   153,   154,   155,   139,   140,   141,   142,
-     143,   144,     0,   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,
-     199,     0,     0,     0,     0,   149,   150,   151,   152,   153,
-     154,   155,     0,     0,     0,   203,   139,   140,   141,   142,
-     143,   144,     0,   145,     0,     0,   146,   147,   148,     0,
-       0,     0,     0,     0,   196,   197,     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,   139,   140,   141,   142,     0,     0,     0,   145,
-       0,     0,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,     0,     0,     0,     0,     0,     0,   149,   150,
-     151,   152,   153,   154,   155
+      40,     0,     0,     2,     0,    41,     3,     4,    42,     0,
+       5,     0,     7,     8,    65,    10,     0,    11,     0,     0,
+       0,    14,    15,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    66,     0,
+      24,     2,     0,     0,     3,     4,     0,     0,     5,     0,
+       7,     8,    65,    10,     0,    11,     0,     0,    30,    14,
+      15,     0,     0,     0,     0,    31,    32,    33,    34,    35,
+       0,     0,     0,     0,     0,     0,    66,     0,    24,     0,
+       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,    68,     3,     4,    42,     0,
+       5,     0,     7,     8,    65,    10,     0,    11,     0,     0,
+       0,    14,    15,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    66,     0,
+      24,     2,     0,     0,     3,     4,     0,     0,     5,     0,
+       7,     8,    65,    10,     0,    11,     0,     0,    30,    14,
+      15,     0,     0,     0,     0,    31,    32,    33,    34,    35,
+       0,     0,     0,     0,     0,     0,    66,     0,    24,     0,
+       0,    39,    40,     0,     0,     0,     0,    71,     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,    75,     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
 };
 
 static const yytype_int16 yycheck[] =
 {
-       4,     8,     6,     7,    79,     9,     0,     0,   166,    28,
-       6,     7,    33,   268,    18,   284,    95,    95,    22,    98,
-      98,    95,    95,    27,    28,    98,    30,    31,    32,    33,
-      34,    35,    36,    13,    68,    39,    40,    41,    42,    19,
-      22,    23,    39,    23,    24,    49,    26,    51,    52,   304,
-     132,   133,    23,    51,    32,    97,    98,   326,    92,    93,
-      97,    98,    66,    84,    68,    63,    63,    71,    87,    53,
-      54,    75,    68,    51,    78,    71,    33,    34,    51,    83,
-      97,    98,    78,    68,   103,    51,    71,    68,    95,    96,
-      63,    23,    74,    75,    76,    77,    24,    63,    26,   354,
-      48,    48,    95,    23,    89,    90,    91,    92,    93,    90,
-      91,    92,    93,    96,    23,    23,    43,    23,    51,    99,
-      50,    98,    98,    98,    23,    23,   130,   131,   286,   211,
-     212,   135,   101,   215,   128,   139,   140,   141,   142,   143,
+       4,   167,     6,     7,    79,     9,     0,     0,    13,   271,
+      28,     8,    34,   287,    18,    20,     6,     7,    22,    24,
+      25,    52,    27,    27,    28,    33,    30,    31,    32,    33,
+      34,    35,    36,    64,    69,    39,    40,    41,    42,    23,
+      24,    40,    54,    55,    52,    49,   308,    51,    52,   133,
+     134,    98,    99,    16,    17,    18,    96,   331,    93,    94,
+      52,    24,    66,    85,    68,    64,    24,    71,    31,    87,
+      52,    75,    64,    96,    78,    49,    99,    96,    68,    83,
+      99,    71,    64,    25,    69,    27,   104,    72,    78,    69,
+      49,    75,    76,    77,    78,   100,    24,   359,    96,    96,
+      97,    99,    24,    96,    99,    90,    91,    92,    93,    94,
+      97,    91,    92,    93,    94,    98,    99,    98,    99,    34,
+      35,    99,    24,   289,    44,    24,    24,   131,   132,   213,
+     214,    24,   136,   217,    52,   129,   140,   141,   142,   143,
      144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   101,   157,   100,    98,    98,   161,    23,    98,
-     164,    45,    16,    17,    18,    23,   170,    98,   243,    23,
-     174,   175,    50,   177,   178,    23,    30,   181,   182,   183,
-      23,   185,    23,    50,   188,   189,   190,   191,   192,   193,
-     194,   195,   196,   197,    98,   277,    53,   204,   205,    23,
-      85,    51,    23,   207,    61,    62,    63,    64,    65,    66,
-      86,    68,   294,   295,    71,    72,    73,    51,   300,    85,
-      23,   303,    84,    98,    85,    23,    85,    50,    84,    84,
-      87,    88,    89,    90,    91,    92,    93,   128,   320,   199,
-     322,    52,    52,    52,   173,   208,   250,   251,   330,    -1,
-     332,    -1,    -1,    -1,    -1,    -1,   338,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   339,    -1,    -1,   349,    -1,   344,
-     352,    -1,    -1,    -1,    -1,    -1,   358,    -1,   360,    -1,
-      -1,    -1,   289,     0,     1,   367,   290,   291,   292,   293,
-      -1,    -1,    -1,    -1,    -1,    -1,    13,    -1,   302,    16,
-      17,    -1,    19,    20,    21,    22,    23,    24,    -1,    26,
-      -1,    28,    29,    30,    31,   319,    -1,    -1,    35,    36,
-      37,    38,    -1,   327,    -1,    42,    -1,    44,    -1,    -1,
-      47,    48,    49,   269,    -1,    52,    -1,    -1,   342,    56,
-      57,    58,   278,    60,   280,    -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,
-     306,    -1,   308,    90,    91,    -1,    -1,    -1,    95,    96,
-      13,    -1,    99,    16,    17,    -1,    19,    -1,    21,    22,
-      23,    24,    -1,    26,    -1,   331,    -1,    30,    31,   335,
-      -1,   337,    43,    -1,    45,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    47,   351,    49,    -1,    -1,    -1,
-      61,    62,    63,    64,    65,    66,    -1,    68,   364,    -1,
-      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,    19,    20,    21,    22,    23,    24,    -1,
-      26,    -1,    28,    29,    30,    31,    -1,    -1,    -1,    35,
-      36,    37,    38,    -1,    -1,    -1,    42,    -1,    44,    -1,
-      -1,    47,    48,    49,    -1,    -1,    52,    -1,    -1,    -1,
-      56,    57,    58,    -1,    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,    19,    20,    21,    22,    23,    24,
-      -1,    26,    27,    28,    -1,    30,    31,    -1,    -1,    -1,
-      35,    36,    37,    38,    -1,    -1,    -1,    -1,    -1,    44,
-      -1,    -1,    47,    48,    49,    -1,    -1,    52,    -1,    -1,
-      -1,    -1,    57,    58,    -1,    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,    19,    20,    21,    22,    23,
-      24,    -1,    26,    -1,    28,    -1,    30,    31,    -1,    -1,
-      -1,    35,    36,    37,    38,    -1,    -1,    -1,    -1,    -1,
-      44,    -1,    -1,    47,    48,    49,    -1,    -1,    52,    -1,
-      -1,    -1,    -1,    57,    58,    -1,    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,    19,    20,    21,    22,
-      23,    24,    -1,    26,    -1,    28,    -1,    30,    31,    -1,
-      -1,    -1,    35,    36,    37,    38,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    47,    -1,    49,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    57,    58,    -1,    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,    19,    20,    21,
-      22,    23,    24,    -1,    26,    -1,    28,    -1,    30,    31,
-      -1,    -1,    -1,    35,    36,    37,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    47,    -1,    49,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    57,    58,    -1,    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,    19,    -1,
-      21,    22,    23,    24,    -1,    26,    -1,    -1,    -1,    30,
-      31,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      41,    -1,    43,    44,    45,    46,    47,    -1,    49,    -1,
-      13,    -1,    -1,    16,    17,    -1,    19,    -1,    21,    22,
-      23,    24,    -1,    26,    -1,    -1,    67,    30,    31,    -1,
-      -1,    -1,    -1,    74,    75,    76,    77,    78,    -1,    -1,
-      43,    -1,    45,    -1,    47,    -1,    49,    -1,    -1,    90,
-      91,    -1,    -1,    -1,    -1,    96,    59,    -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,    -1,    21,
-      22,    23,    24,    -1,    26,    -1,    -1,    -1,    30,    31,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    47,    13,    49,    -1,    16,
-      17,    -1,    19,    -1,    21,    22,    23,    24,    -1,    26,
-      -1,    -1,    -1,    30,    31,    67,    -1,    -1,    -1,    -1,
-      -1,    -1,    74,    75,    76,    77,    78,    -1,    -1,    -1,
-      47,    -1,    49,    -1,    -1,    -1,    -1,    -1,    90,    91,
-      -1,    -1,    -1,    -1,    96,    -1,    -1,    99,    -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,    -1,    21,    22,    23,    24,    -1,
-      26,    -1,    -1,    -1,    30,    31,    -1,    -1,    -1,    -1,
+     154,   155,   156,    99,   158,    51,    24,    24,   162,   102,
+     272,   165,   102,   101,    99,    99,    24,   171,    99,   281,
+     245,   283,   176,   177,    46,   179,   180,   174,    24,   183,
+     184,   185,    99,   187,    24,    51,   190,   191,   192,   193,
+     194,   195,   196,   197,   198,   199,   280,    41,   310,    24,
+     312,    24,    51,    24,    99,   209,    86,    52,    24,   206,
+     207,    52,    87,    86,   298,   299,    24,    44,    99,    46,
+     304,    85,    24,   307,   336,    86,    86,    51,   340,    85,
+     342,    85,   129,   201,    52,    62,    63,    64,    65,    66,
+      67,   325,    69,   327,   356,    72,    73,    74,   175,   253,
+     254,   335,    52,   337,    52,   210,    -1,   369,    -1,   343,
+      -1,    88,    89,    90,    91,    92,    93,    94,    -1,   344,
+     354,    -1,    -1,   357,   349,    -1,    -1,    -1,    -1,   363,
+      -1,   365,    -1,    -1,    -1,    -1,   290,    -1,   372,    -1,
+     294,   295,   296,   297,    -1,    -1,   293,    -1,    -1,    -1,
+      -1,    -1,   306,    -1,    -1,    -1,    -1,    -1,    -1,     0,
+       1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     324,    -1,    13,    -1,    -1,    16,    17,    -1,   332,    20,
+      21,    22,    23,    24,    25,    -1,    27,    -1,    29,    30,
+      31,    32,    -1,   347,    -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,    41,    13,    96,    97,    16,    17,   100,
+      -1,    20,    -1,    22,    23,    24,    25,    -1,    27,    -1,
+      -1,    -1,    31,    32,    62,    63,    64,    65,    66,    67,
+      -1,    69,    70,    71,    72,    73,    74,    -1,    -1,    48,
+      -1,    50,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      88,    89,    90,    91,    92,    93,    94,    -1,    -1,    68,
+      -1,    -1,    -1,    -1,    -1,    -1,    75,    76,    77,    78,
+      79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    91,    92,    -1,    -1,    -1,    -1,    97,    -1,
+      -1,   100,    13,   102,    -1,    16,    17,    -1,    -1,    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,    -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,    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,    -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,    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,    -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,    -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,    47,    13,    49,    -1,    16,    17,    -1,    19,    -1,
-      21,    22,    23,    24,    -1,    26,    -1,    -1,    -1,    30,
-      31,    67,    -1,    -1,    -1,    -1,    -1,    -1,    74,    75,
-      76,    77,    78,    -1,    -1,    -1,    47,    -1,    49,    -1,
-      -1,    -1,    -1,    -1,    90,    91,    -1,    -1,    -1,    -1,
-      96,    -1,    -1,    99,    -1,    -1,    67,    -1,    -1,    -1,
-      -1,    -1,    -1,    74,    75,    76,    77,    78,    40,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,
-      91,    -1,    -1,    -1,    -1,    96,    -1,    -1,    99,    61,
-      62,    63,    64,    65,    66,    -1,    68,    69,    70,    71,
-      72,    73,    -1,    -1,    -1,    -1,    45,    -1,    -1,    -1,
-      -1,    -1,    51,    -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,    45,
-      -1,    -1,    -1,    -1,    -1,    51,    -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,    45,    -1,    -1,    -1,    -1,    -1,    51,    -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,    45,    -1,    -1,    -1,    -1,
-      -1,    51,    -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,    45,    -1,
-      -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,    45,    -1,    -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,    45,    -1,    -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,    45,    -1,    -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,    51,    -1,    -1,    87,
-      88,    89,    90,    91,    92,    93,    61,    62,    63,    64,
-      65,    66,    -1,    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,    -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,    61,    62,    63,    64,    -1,    -1,    -1,    68,
-      -1,    -1,    71,    72,    73,    87,    88,    89,    90,    91,
-      92,    93,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,
-      89,    90,    91,    92,    93
+      -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
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     1,    13,    16,    17,    19,    20,    21,    22,    23,
-      24,    26,    28,    29,    30,    31,    35,    36,    37,    38,
-      42,    44,    47,    48,    49,    52,    56,    57,    58,    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,    23,    47,   123,    96,   123,
-     146,    96,   146,    23,   122,    96,   123,   147,   135,   139,
-      48,   127,    41,    43,    44,    45,    46,   123,   133,   137,
-      48,   123,    53,    54,    16,    17,    18,    23,    30,    23,
-      23,   123,    59,   123,   133,    23,   131,   123,   123,   123,
-     123,   123,   123,   123,   128,   141,   123,   123,   123,    24,
-      26,   101,   123,   149,   150,   151,   152,     0,    95,   123,
-      39,    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,    23,   129,   123,
-      43,   133,    23,    40,    69,    70,    23,    51,    63,   122,
-     122,    51,    63,    51,    50,    53,   133,    98,    45,    51,
-      45,    51,    45,    51,    45,    51,    79,    80,    51,    95,
-      23,   130,    23,    97,   101,   101,   100,    98,    98,   104,
-     119,   123,   123,   119,   119,   123,   123,   123,   123,   123,
-     123,   123,   123,   123,   123,   123,   123,   123,   123,   123,
-     123,   123,   123,    23,   142,    97,   123,    97,    97,   123,
-     142,    98,   123,   138,    23,   125,   123,   123,   123,   123,
-      51,    63,    45,   123,   123,   123,   123,    23,   123,   123,
-     123,   123,   123,   123,   123,   123,   123,   123,   109,   109,
-      98,   122,   122,   123,    24,    26,   152,   120,   119,   119,
-      50,   119,    95,    98,    95,    23,   118,   123,   123,    23,
-      45,    45,    45,    45,   106,   120,    23,    95,   108,   119,
-     120,    32,    51,   120,    50,    98,   144,    23,   144,   142,
-     122,   123,   123,   123,   123,   119,   119,    85,   119,    51,
-     123,   119,   106,    23,   120,   120,    95,    51,    86,    85,
-     123,   119,   111,   119,    27,   144,   123,   119,   120,    33,
-      34,   112,   117,   119,    33,    84,    23,   143,   120,   120,
-     119,   118,   123,    84,   118,    98,   119,    85,   120,   119,
-     106,    23,    85,   119,    50,   119,    84,   120,    84,   119
+       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,    48,   124,    97,   124,
+     147,    97,   147,    24,   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,   124,   124,   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,   120,   120,    51,   120,    96,    99,    96,    24,   119,
+      41,   124,   124,    24,    46,    46,    46,    46,   107,   121,
+      24,    96,   109,   120,   121,    33,    52,   121,    51,    99,
+     145,    24,   145,   143,   124,   123,   124,   124,   124,   124,
+     120,   120,    86,   120,    52,   124,   120,   107,    24,   121,
+     121,    96,    52,    87,    86,   124,   120,   112,   120,    28,
+     145,   124,   120,   121,    34,    35,   113,   118,   120,    34,
+      85,    24,   144,   121,   121,   120,   119,   124,    85,   119,
+      99,   120,    86,   121,   120,   107,    24,    86,   120,    51,
+     120,    85,   121,    85,   120
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   102,   103,   103,   103,   104,   104,   104,   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,   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
+       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
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
 static const yytype_int8 yyr2[] =
 {
        0,     2,     3,     1,     2,     0,     1,     1,     4,     4,
-       4,     4,     4,     4,     4,     4,     5,     5,     8,     4,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     6,
-      10,    11,     7,     2,     3,     7,     6,     0,     9,    12,
-       0,     2,     6,    11,     7,     2,     3,     1,     1,     0,
-       0,     0,     2,     2,     3,     1,     1,     1,     1,     1,
-       1,     1,     1,     4,     2,     4,     1,     2,     1,     1,
-       1,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     2,     3,     3,     3,     3,     2,
-       2,     3,     4,     4,     4,     6,     4,     6,     4,     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
+       6,     4,     4,     4,     4,     4,     4,     5,     5,     8,
+       4,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+       6,    10,    11,     7,     2,     3,     7,     6,     0,     9,
+      12,     0,     2,     6,    11,     7,     2,     3,     1,     1,
+       0,     0,     0,     2,     2,     3,     1,     1,     1,     1,
+       1,     1,     1,     1,     4,     2,     4,     1,     2,     1,
+       1,     1,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     2,     3,     3,     3,     3,
+       2,     2,     3,     4,     4,     4,     6,     4,     6,     4,
+       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
 };
 
 
@@ -1694,76 +1712,76 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
   YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
   switch (yytype)
     {
-    case 20: /* BLTIN  */
+    case 21: /* BLTIN  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1701 "engines/director/lingo/lingo-gr.cpp"
+#line 1719 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case 21: /* FBLTIN  */
+    case 22: /* FBLTIN  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1707 "engines/director/lingo/lingo-gr.cpp"
+#line 1725 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case 22: /* RBLTIN  */
+    case 23: /* RBLTIN  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1713 "engines/director/lingo/lingo-gr.cpp"
+#line 1731 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case 23: /* ID  */
+    case 24: /* ID  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1719 "engines/director/lingo/lingo-gr.cpp"
+#line 1737 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case 24: /* STRING  */
+    case 25: /* STRING  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1725 "engines/director/lingo/lingo-gr.cpp"
+#line 1743 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case 25: /* HANDLER  */
+    case 26: /* HANDLER  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1731 "engines/director/lingo/lingo-gr.cpp"
+#line 1749 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case 26: /* SYMBOL  */
+    case 27: /* SYMBOL  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1737 "engines/director/lingo/lingo-gr.cpp"
+#line 1755 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case 27: /* ENDCLAUSE  */
+    case 28: /* ENDCLAUSE  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1743 "engines/director/lingo/lingo-gr.cpp"
+#line 1761 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case 28: /* tPLAYACCEL  */
+    case 29: /* tPLAYACCEL  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1749 "engines/director/lingo/lingo-gr.cpp"
+#line 1767 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case 29: /* tMETHOD  */
+    case 30: /* tMETHOD  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1755 "engines/director/lingo/lingo-gr.cpp"
+#line 1773 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case 30: /* THEOBJECTFIELD  */
+    case 31: /* THEOBJECTFIELD  */
 #line 137 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).objectfield).os; }
-#line 1761 "engines/director/lingo/lingo-gr.cpp"
+#line 1779 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case 140: /* on  */
+    case 141: /* on  */
 #line 136 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1767 "engines/director/lingo/lingo-gr.cpp"
+#line 1785 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2033,7 +2051,7 @@ yyreduce:
   case 4:
 #line 143 "engines/director/lingo/lingo-gr.y"
                                 { yyerrok; }
-#line 2037 "engines/director/lingo/lingo-gr.cpp"
+#line 2055 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 8:
@@ -2044,7 +2062,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code);
 		delete (yyvsp[0].s); }
-#line 2048 "engines/director/lingo/lingo-gr.cpp"
+#line 2066 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 9:
@@ -2052,34 +2070,50 @@ yyreduce:
                                                 {
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code); }
-#line 2056 "engines/director/lingo/lingo-gr.cpp"
+#line 2074 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10:
-#line 158 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.code) = g_lingo->code1(LC::c_after); }
-#line 2062 "engines/director/lingo/lingo-gr.cpp"
+#line 159 "engines/director/lingo/lingo-gr.y"
+                                                                {
+		if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
+			warning("LEXER: keyword 'menu' expected");
+			YYERROR;
+		}
+
+		warning("STUB: menuItems entity");
+		g_lingo->code1(LC::c_themenuitementityassign);
+		g_lingo->codeInt((yyvsp[-4].e)[0]);
+		g_lingo->codeInt((yyvsp[-4].e)[1]);
+		(yyval.code) = (yyvsp[0].code); }
+#line 2090 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11:
-#line 159 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.code) = g_lingo->code1(LC::c_before); }
-#line 2068 "engines/director/lingo/lingo-gr.cpp"
+#line 170 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.code) = g_lingo->code1(LC::c_after); }
+#line 2096 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12:
-#line 160 "engines/director/lingo/lingo-gr.y"
+#line 171 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.code) = g_lingo->code1(LC::c_before); }
+#line 2102 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 13:
+#line 172 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2079 "engines/director/lingo/lingo-gr.cpp"
+#line 2113 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 13:
-#line 166 "engines/director/lingo/lingo-gr.y"
+  case 14:
+#line 178 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2087,22 +2121,22 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2091 "engines/director/lingo/lingo-gr.cpp"
+#line 2125 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 14:
-#line 173 "engines/director/lingo/lingo-gr.y"
+  case 15:
+#line 185 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2102 "engines/director/lingo/lingo-gr.cpp"
+#line 2136 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 15:
-#line 179 "engines/director/lingo/lingo-gr.y"
+  case 16:
+#line 191 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2110,33 +2144,33 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2114 "engines/director/lingo/lingo-gr.cpp"
+#line 2148 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 16:
-#line 186 "engines/director/lingo/lingo-gr.y"
+  case 17:
+#line 198 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_swap);
 		g_lingo->code1(LC::c_theentityassign);
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2125 "engines/director/lingo/lingo-gr.cpp"
+#line 2159 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 17:
-#line 192 "engines/director/lingo/lingo-gr.y"
+  case 18:
+#line 204 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_swap);
 		g_lingo->code1(LC::c_theentityassign);
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2136 "engines/director/lingo/lingo-gr.cpp"
+#line 2170 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 18:
-#line 199 "engines/director/lingo/lingo-gr.y"
+  case 19:
+#line 211 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
 			warning("LEXER: keyword 'menu' expected");
@@ -2148,33 +2182,33 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-6].e)[0]);
 		g_lingo->codeInt((yyvsp[-6].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2152 "engines/director/lingo/lingo-gr.cpp"
+#line 2186 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 19:
-#line 210 "engines/director/lingo/lingo-gr.y"
+  case 20:
+#line 222 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_objectfieldassign);
 		g_lingo->codeString((yyvsp[-2].objectfield).os->c_str());
 		g_lingo->codeInt((yyvsp[-2].objectfield).oe);
 		delete (yyvsp[-2].objectfield).os;
 		(yyval.code) = (yyvsp[0].code); }
-#line 2163 "engines/director/lingo/lingo-gr.cpp"
+#line 2197 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 29:
-#line 232 "engines/director/lingo/lingo-gr.y"
+  case 30:
+#line 244 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		inst body = 0, end = 0;
 		WRITE_UINT32(&body, (yyvsp[-3].code) - (yyvsp[-5].code));
 		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 2174 "engines/director/lingo/lingo-gr.cpp"
+#line 2208 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 30:
-#line 243 "engines/director/lingo/lingo-gr.y"
+  case 31:
+#line 255 "engines/director/lingo/lingo-gr.y"
                                                                                            {
 		inst init = 0, finish = 0, body = 0, end = 0, inc = 0;
 		WRITE_UINT32(&init, (yyvsp[-7].code) - (yyvsp[-9].code));
@@ -2187,11 +2221,11 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-9].code) + 3] = body;		/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-9].code) + 4] = inc;		/* increment */
 		(*g_lingo->_currentScript)[(yyvsp[-9].code) + 5] = end; }
-#line 2191 "engines/director/lingo/lingo-gr.cpp"
+#line 2225 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 31:
-#line 260 "engines/director/lingo/lingo-gr.y"
+  case 32:
+#line 272 "engines/director/lingo/lingo-gr.y"
                                                                                                  {
 		inst init = 0, finish = 0, body = 0, end = 0, inc = 0;
 		WRITE_UINT32(&init, (yyvsp[-8].code) - (yyvsp[-10].code));
@@ -2204,11 +2238,11 @@ 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 2208 "engines/director/lingo/lingo-gr.cpp"
+#line 2242 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 32:
-#line 272 "engines/director/lingo/lingo-gr.y"
+  case 33:
+#line 284 "engines/director/lingo/lingo-gr.y"
                                                                       {
 		inst list = 0, body = 0, end = 0;
 		WRITE_UINT32(&list, (yyvsp[-4].code) - (yyvsp[-6].code));
@@ -2219,54 +2253,54 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-6].code) + 3] = body;		/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-6].code) + 4] = 0;		/* increment */
 		(*g_lingo->_currentScript)[(yyvsp[-6].code) + 5] = end; }
-#line 2223 "engines/director/lingo/lingo-gr.cpp"
+#line 2257 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 33:
-#line 283 "engines/director/lingo/lingo-gr.y"
+  case 34:
+#line 295 "engines/director/lingo/lingo-gr.y"
                         {
 		g_lingo->code1(LC::c_nextRepeat); }
-#line 2230 "engines/director/lingo/lingo-gr.cpp"
+#line 2264 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 34:
-#line 285 "engines/director/lingo/lingo-gr.y"
+  case 35:
+#line 297 "engines/director/lingo/lingo-gr.y"
                                       {
 		inst end = 0;
 		WRITE_UINT32(&end, (yyvsp[0].code) - (yyvsp[-2].code));
 		g_lingo->code1(STOP);
 		(*g_lingo->_currentScript)[(yyvsp[-2].code) + 1] = end; }
-#line 2240 "engines/director/lingo/lingo-gr.cpp"
+#line 2274 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 35:
-#line 290 "engines/director/lingo/lingo-gr.y"
+  case 36:
+#line 302 "engines/director/lingo/lingo-gr.y"
                                                           {
 		inst end;
 		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-3].code));
 		(*g_lingo->_currentScript)[(yyvsp[-3].code) + 1] = end; }
-#line 2249 "engines/director/lingo/lingo-gr.cpp"
+#line 2283 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 36:
-#line 294 "engines/director/lingo/lingo-gr.y"
+  case 37:
+#line 306 "engines/director/lingo/lingo-gr.y"
                                                     {
 		inst end;
 		WRITE_UINT32(&end, (yyvsp[0].code) - (yyvsp[-2].code));
 		(*g_lingo->_currentScript)[(yyvsp[-2].code) + 1] = end; }
-#line 2258 "engines/director/lingo/lingo-gr.cpp"
+#line 2292 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 37:
-#line 299 "engines/director/lingo/lingo-gr.y"
+  case 38:
+#line 311 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.code) = g_lingo->code1(LC::c_tellcode);
 		g_lingo->code1(STOP); }
-#line 2266 "engines/director/lingo/lingo-gr.cpp"
+#line 2300 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 38:
-#line 303 "engines/director/lingo/lingo-gr.y"
+  case 39:
+#line 315 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-6].code) - (yyvsp[-8].code));
@@ -2277,11 +2311,11 @@ 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 2281 "engines/director/lingo/lingo-gr.cpp"
+#line 2315 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 39:
-#line 313 "engines/director/lingo/lingo-gr.y"
+  case 40:
+#line 325 "engines/director/lingo/lingo-gr.y"
                                                                                                               {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-9].code) - (yyvsp[-11].code));
@@ -2292,22 +2326,22 @@ 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 2296 "engines/director/lingo/lingo-gr.cpp"
+#line 2330 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 42:
-#line 327 "engines/director/lingo/lingo-gr.y"
+  case 43:
+#line 339 "engines/director/lingo/lingo-gr.y"
                                                         {
 		inst then = 0;
 		WRITE_UINT32(&then, (yyvsp[-3].code) - (yyvsp[-5].code));
 		(*g_lingo->_currentScript)[(yyvsp[-5].code) + 1] = then;	/* thenpart */
 
 		g_lingo->codeLabel((yyvsp[-5].code)); }
-#line 2307 "engines/director/lingo/lingo-gr.cpp"
+#line 2341 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 43:
-#line 334 "engines/director/lingo/lingo-gr.y"
+  case 44:
+#line 346 "engines/director/lingo/lingo-gr.y"
                                                                                                          {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-8].code) - (yyvsp[-10].code));
@@ -2318,11 +2352,11 @@ 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 2322 "engines/director/lingo/lingo-gr.cpp"
+#line 2356 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 44:
-#line 344 "engines/director/lingo/lingo-gr.y"
+  case 45:
+#line 356 "engines/director/lingo/lingo-gr.y"
                                                                    {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-4].code) - (yyvsp[-6].code));
@@ -2333,149 +2367,149 @@ 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 2337 "engines/director/lingo/lingo-gr.cpp"
+#line 2371 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 45:
-#line 355 "engines/director/lingo/lingo-gr.y"
+  case 46:
+#line 367 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = g_lingo->code3(LC::c_repeatwhilecode, STOP, STOP); }
-#line 2343 "engines/director/lingo/lingo-gr.cpp"
+#line 2377 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 46:
-#line 357 "engines/director/lingo/lingo-gr.y"
+  case 47:
+#line 369 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.code) = g_lingo->code3(LC::c_repeatwithcode, STOP, STOP);
 		g_lingo->code3(STOP, STOP, STOP);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2353 "engines/director/lingo/lingo-gr.cpp"
+#line 2387 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 47:
-#line 363 "engines/director/lingo/lingo-gr.y"
+  case 48:
+#line 375 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.code) = g_lingo->code1(LC::c_ifcode);
 		g_lingo->code3(STOP, STOP, STOP);
 		g_lingo->code1(0);  // Do not skip end
 		g_lingo->codeLabel(0); }
-#line 2363 "engines/director/lingo/lingo-gr.cpp"
+#line 2397 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 48:
-#line 369 "engines/director/lingo/lingo-gr.y"
+  case 49:
+#line 381 "engines/director/lingo/lingo-gr.y"
                                         {
 		inst skipEnd;
 		WRITE_UINT32(&skipEnd, 1); // We have to skip end to avoid multiple executions
 		(yyval.code) = g_lingo->code1(LC::c_ifcode);
 		g_lingo->code3(STOP, STOP, STOP);
 		g_lingo->code1(skipEnd); }
-#line 2374 "engines/director/lingo/lingo-gr.cpp"
+#line 2408 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 49:
-#line 376 "engines/director/lingo/lingo-gr.y"
+  case 50:
+#line 388 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2380 "engines/director/lingo/lingo-gr.cpp"
+#line 2414 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 50:
-#line 378 "engines/director/lingo/lingo-gr.y"
+  case 51:
+#line 390 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2386 "engines/director/lingo/lingo-gr.cpp"
+#line 2420 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 51:
-#line 380 "engines/director/lingo/lingo-gr.y"
+  case 52:
+#line 392 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2392 "engines/director/lingo/lingo-gr.cpp"
+#line 2426 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 54:
-#line 384 "engines/director/lingo/lingo-gr.y"
+  case 55:
+#line 396 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.code) = g_lingo->code1(LC::c_whencode);
 		g_lingo->code1(STOP);
 		g_lingo->codeString((yyvsp[-1].s)->c_str());
 		delete (yyvsp[-1].s); }
-#line 2402 "engines/director/lingo/lingo-gr.cpp"
+#line 2436 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 55:
-#line 390 "engines/director/lingo/lingo-gr.y"
+  case 56:
+#line 402 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt((yyvsp[0].i)); }
-#line 2410 "engines/director/lingo/lingo-gr.cpp"
+#line 2444 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 56:
-#line 393 "engines/director/lingo/lingo-gr.y"
+  case 57:
+#line 405 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_floatpush);
 		g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2418 "engines/director/lingo/lingo-gr.cpp"
+#line 2452 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 57:
-#line 396 "engines/director/lingo/lingo-gr.y"
+  case 58:
+#line 408 "engines/director/lingo/lingo-gr.y"
                         {											// D3
 		(yyval.code) = g_lingo->code1(LC::c_symbolpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2427 "engines/director/lingo/lingo-gr.cpp"
+#line 2461 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 58:
-#line 400 "engines/director/lingo/lingo-gr.y"
+  case 59:
+#line 412 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.code) = g_lingo->code1(LC::c_stringpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2436 "engines/director/lingo/lingo-gr.cpp"
+#line 2470 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 59:
-#line 404 "engines/director/lingo/lingo-gr.y"
+  case 60:
+#line 416 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_eval);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2445 "engines/director/lingo/lingo-gr.cpp"
+#line 2479 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 61:
-#line 410 "engines/director/lingo/lingo-gr.y"
+  case 62:
+#line 422 "engines/director/lingo/lingo-gr.y"
                  { (yyval.code) = (yyvsp[0].code); }
-#line 2451 "engines/director/lingo/lingo-gr.cpp"
+#line 2485 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 63:
-#line 412 "engines/director/lingo/lingo-gr.y"
+  case 64:
+#line 424 "engines/director/lingo/lingo-gr.y"
                                  {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2459 "engines/director/lingo/lingo-gr.cpp"
+#line 2493 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 64:
-#line 415 "engines/director/lingo/lingo-gr.y"
+  case 65:
+#line 427 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 2467 "engines/director/lingo/lingo-gr.cpp"
+#line 2501 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 65:
-#line 418 "engines/director/lingo/lingo-gr.y"
+  case 66:
+#line 430 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2475 "engines/director/lingo/lingo-gr.cpp"
+#line 2509 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 66:
-#line 421 "engines/director/lingo/lingo-gr.y"
+  case 67:
+#line 433 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2484,500 +2518,500 @@ yyreduce:
 		WRITE_UINT32(&e, (yyvsp[0].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[0].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2488 "engines/director/lingo/lingo-gr.cpp"
+#line 2522 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 67:
-#line 429 "engines/director/lingo/lingo-gr.y"
+  case 68:
+#line 441 "engines/director/lingo/lingo-gr.y"
                                {
 		(yyval.code) = g_lingo->code1(LC::c_theentitypush);
 		inst e = 0, f = 0;
 		WRITE_UINT32(&e, (yyvsp[-1].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[-1].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2499 "engines/director/lingo/lingo-gr.cpp"
+#line 2533 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 68:
-#line 435 "engines/director/lingo/lingo-gr.y"
+  case 69:
+#line 447 "engines/director/lingo/lingo-gr.y"
                          {
 		g_lingo->code1(LC::c_objectfieldpush);
 		g_lingo->codeString((yyvsp[0].objectfield).os->c_str());
 		g_lingo->codeInt((yyvsp[0].objectfield).oe);
 		delete (yyvsp[0].objectfield).os; }
-#line 2509 "engines/director/lingo/lingo-gr.cpp"
+#line 2543 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 69:
-#line 440 "engines/director/lingo/lingo-gr.y"
+  case 70:
+#line 452 "engines/director/lingo/lingo-gr.y"
                        {
 		g_lingo->code1(LC::c_objectrefpush);
 		g_lingo->codeString((yyvsp[0].objectref).obj->c_str());
 		g_lingo->codeString((yyvsp[0].objectref).field->c_str());
 		delete (yyvsp[0].objectref).obj;
 		delete (yyvsp[0].objectref).field; }
-#line 2520 "engines/director/lingo/lingo-gr.cpp"
+#line 2554 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 71:
-#line 447 "engines/director/lingo/lingo-gr.y"
+  case 72:
+#line 459 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_add); }
-#line 2526 "engines/director/lingo/lingo-gr.cpp"
+#line 2560 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 72:
-#line 448 "engines/director/lingo/lingo-gr.y"
+  case 73:
+#line 460 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_sub); }
-#line 2532 "engines/director/lingo/lingo-gr.cpp"
+#line 2566 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 73:
-#line 449 "engines/director/lingo/lingo-gr.y"
+  case 74:
+#line 461 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mul); }
-#line 2538 "engines/director/lingo/lingo-gr.cpp"
+#line 2572 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 74:
-#line 450 "engines/director/lingo/lingo-gr.y"
+  case 75:
+#line 462 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_div); }
-#line 2544 "engines/director/lingo/lingo-gr.cpp"
+#line 2578 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 75:
-#line 451 "engines/director/lingo/lingo-gr.y"
+  case 76:
+#line 463 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mod); }
-#line 2550 "engines/director/lingo/lingo-gr.cpp"
+#line 2584 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 76:
-#line 452 "engines/director/lingo/lingo-gr.y"
+  case 77:
+#line 464 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gt); }
-#line 2556 "engines/director/lingo/lingo-gr.cpp"
+#line 2590 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 77:
-#line 453 "engines/director/lingo/lingo-gr.y"
+  case 78:
+#line 465 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lt); }
-#line 2562 "engines/director/lingo/lingo-gr.cpp"
+#line 2596 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 78:
-#line 454 "engines/director/lingo/lingo-gr.y"
+  case 79:
+#line 466 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_eq); }
-#line 2568 "engines/director/lingo/lingo-gr.cpp"
+#line 2602 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 79:
-#line 455 "engines/director/lingo/lingo-gr.y"
+  case 80:
+#line 467 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_neq); }
-#line 2574 "engines/director/lingo/lingo-gr.cpp"
+#line 2608 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 80:
-#line 456 "engines/director/lingo/lingo-gr.y"
+  case 81:
+#line 468 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ge); }
-#line 2580 "engines/director/lingo/lingo-gr.cpp"
+#line 2614 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 81:
-#line 457 "engines/director/lingo/lingo-gr.y"
+  case 82:
+#line 469 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_le); }
-#line 2586 "engines/director/lingo/lingo-gr.cpp"
+#line 2620 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 82:
-#line 458 "engines/director/lingo/lingo-gr.y"
+  case 83:
+#line 470 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_and); }
-#line 2592 "engines/director/lingo/lingo-gr.cpp"
+#line 2626 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 83:
-#line 459 "engines/director/lingo/lingo-gr.y"
+  case 84:
+#line 471 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_or); }
-#line 2598 "engines/director/lingo/lingo-gr.cpp"
+#line 2632 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 84:
-#line 460 "engines/director/lingo/lingo-gr.y"
+  case 85:
+#line 472 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_not); }
-#line 2604 "engines/director/lingo/lingo-gr.cpp"
+#line 2638 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 85:
-#line 461 "engines/director/lingo/lingo-gr.y"
+  case 86:
+#line 473 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ampersand); }
-#line 2610 "engines/director/lingo/lingo-gr.cpp"
+#line 2644 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 86:
-#line 462 "engines/director/lingo/lingo-gr.y"
+  case 87:
+#line 474 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_concat); }
-#line 2616 "engines/director/lingo/lingo-gr.cpp"
+#line 2650 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 87:
-#line 463 "engines/director/lingo/lingo-gr.y"
+  case 88:
+#line 475 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_contains); }
-#line 2622 "engines/director/lingo/lingo-gr.cpp"
+#line 2656 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 88:
-#line 464 "engines/director/lingo/lingo-gr.y"
+  case 89:
+#line 476 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_starts); }
-#line 2628 "engines/director/lingo/lingo-gr.cpp"
+#line 2662 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 89:
-#line 465 "engines/director/lingo/lingo-gr.y"
+  case 90:
+#line 477 "engines/director/lingo/lingo-gr.y"
                                     { (yyval.code) = (yyvsp[0].code); }
-#line 2634 "engines/director/lingo/lingo-gr.cpp"
+#line 2668 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 90:
-#line 466 "engines/director/lingo/lingo-gr.y"
+  case 91:
+#line 478 "engines/director/lingo/lingo-gr.y"
                                     { (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 2640 "engines/director/lingo/lingo-gr.cpp"
+#line 2674 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 91:
-#line 467 "engines/director/lingo/lingo-gr.y"
+  case 92:
+#line 479 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = (yyvsp[-1].code); }
-#line 2646 "engines/director/lingo/lingo-gr.cpp"
+#line 2680 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 92:
-#line 468 "engines/director/lingo/lingo-gr.y"
+  case 93:
+#line 480 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_intersects); }
-#line 2652 "engines/director/lingo/lingo-gr.cpp"
+#line 2686 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 93:
-#line 469 "engines/director/lingo/lingo-gr.y"
+  case 94:
+#line 481 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_within); }
-#line 2658 "engines/director/lingo/lingo-gr.cpp"
+#line 2692 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 94:
-#line 471 "engines/director/lingo/lingo-gr.y"
+  case 95:
+#line 483 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_charOf); }
-#line 2664 "engines/director/lingo/lingo-gr.cpp"
+#line 2698 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 95:
-#line 472 "engines/director/lingo/lingo-gr.y"
+  case 96:
+#line 484 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_charToOf); }
-#line 2670 "engines/director/lingo/lingo-gr.cpp"
+#line 2704 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 96:
-#line 473 "engines/director/lingo/lingo-gr.y"
+  case 97:
+#line 485 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_itemOf); }
-#line 2676 "engines/director/lingo/lingo-gr.cpp"
+#line 2710 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 97:
-#line 474 "engines/director/lingo/lingo-gr.y"
+  case 98:
+#line 486 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_itemToOf); }
-#line 2682 "engines/director/lingo/lingo-gr.cpp"
+#line 2716 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 98:
-#line 475 "engines/director/lingo/lingo-gr.y"
+  case 99:
+#line 487 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_lineOf); }
-#line 2688 "engines/director/lingo/lingo-gr.cpp"
+#line 2722 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 99:
-#line 476 "engines/director/lingo/lingo-gr.y"
+  case 100:
+#line 488 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lineToOf); }
-#line 2694 "engines/director/lingo/lingo-gr.cpp"
+#line 2728 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 100:
-#line 477 "engines/director/lingo/lingo-gr.y"
+  case 101:
+#line 489 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_wordOf); }
-#line 2700 "engines/director/lingo/lingo-gr.cpp"
+#line 2734 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 101:
-#line 478 "engines/director/lingo/lingo-gr.y"
+  case 102:
+#line 490 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_wordToOf); }
-#line 2706 "engines/director/lingo/lingo-gr.cpp"
+#line 2740 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 102:
-#line 480 "engines/director/lingo/lingo-gr.y"
+  case 103:
+#line 492 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->codeFunc((yyvsp[-1].s), 1);
 		delete (yyvsp[-1].s); }
-#line 2714 "engines/director/lingo/lingo-gr.cpp"
+#line 2748 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 104:
-#line 485 "engines/director/lingo/lingo-gr.y"
+  case 105:
+#line 497 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_printtop); }
-#line 2720 "engines/director/lingo/lingo-gr.cpp"
+#line 2754 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 107:
-#line 488 "engines/director/lingo/lingo-gr.y"
+  case 108:
+#line 500 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_exitRepeat); }
-#line 2726 "engines/director/lingo/lingo-gr.cpp"
+#line 2760 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 108:
-#line 489 "engines/director/lingo/lingo-gr.y"
+  case 109:
+#line 501 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_procret); }
-#line 2732 "engines/director/lingo/lingo-gr.cpp"
+#line 2766 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 109:
-#line 490 "engines/director/lingo/lingo-gr.y"
+  case 110:
+#line 502 "engines/director/lingo/lingo-gr.y"
                   { g_lingo->_indef = kStateInArgs; }
-#line 2738 "engines/director/lingo/lingo-gr.cpp"
+#line 2772 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110:
-#line 490 "engines/director/lingo/lingo-gr.y"
+  case 111:
+#line 502 "engines/director/lingo/lingo-gr.y"
                                                                  { g_lingo->_indef = kStateNone; }
-#line 2744 "engines/director/lingo/lingo-gr.cpp"
+#line 2778 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 111:
-#line 491 "engines/director/lingo/lingo-gr.y"
+  case 112:
+#line 503 "engines/director/lingo/lingo-gr.y"
                     { g_lingo->_indef = kStateInArgs; }
-#line 2750 "engines/director/lingo/lingo-gr.cpp"
+#line 2784 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 112:
-#line 491 "engines/director/lingo/lingo-gr.y"
+  case 113:
+#line 503 "engines/director/lingo/lingo-gr.y"
                                                                      { g_lingo->_indef = kStateNone; }
-#line 2756 "engines/director/lingo/lingo-gr.cpp"
+#line 2790 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 114:
-#line 493 "engines/director/lingo/lingo-gr.y"
+  case 115:
+#line 505 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2764 "engines/director/lingo/lingo-gr.cpp"
+#line 2798 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 115:
-#line 496 "engines/director/lingo/lingo-gr.y"
+  case 116:
+#line 508 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 2772 "engines/director/lingo/lingo-gr.cpp"
+#line 2806 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 116:
-#line 499 "engines/director/lingo/lingo-gr.y"
+  case 117:
+#line 511 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_open); }
-#line 2778 "engines/director/lingo/lingo-gr.cpp"
+#line 2812 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117:
-#line 500 "engines/director/lingo/lingo-gr.y"
+  case 118:
+#line 512 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code2(LC::c_voidpush, LC::c_open); }
-#line 2784 "engines/director/lingo/lingo-gr.cpp"
+#line 2818 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 118:
-#line 502 "engines/director/lingo/lingo-gr.y"
+  case 119:
+#line 514 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_global);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2793 "engines/director/lingo/lingo-gr.cpp"
+#line 2827 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119:
-#line 506 "engines/director/lingo/lingo-gr.y"
+  case 120:
+#line 518 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_global);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2802 "engines/director/lingo/lingo-gr.cpp"
+#line 2836 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120:
-#line 511 "engines/director/lingo/lingo-gr.y"
+  case 121:
+#line 523 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_property);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2811 "engines/director/lingo/lingo-gr.cpp"
+#line 2845 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121:
-#line 515 "engines/director/lingo/lingo-gr.y"
+  case 122:
+#line 527 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_property);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2820 "engines/director/lingo/lingo-gr.cpp"
+#line 2854 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 122:
-#line 520 "engines/director/lingo/lingo-gr.y"
+  case 123:
+#line 532 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_instance);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2829 "engines/director/lingo/lingo-gr.cpp"
+#line 2863 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 123:
-#line 524 "engines/director/lingo/lingo-gr.y"
+  case 124:
+#line 536 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_instance);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2838 "engines/director/lingo/lingo-gr.cpp"
+#line 2872 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 124:
-#line 536 "engines/director/lingo/lingo-gr.y"
+  case 125:
+#line 548 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoloop); }
-#line 2844 "engines/director/lingo/lingo-gr.cpp"
+#line 2878 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 125:
-#line 537 "engines/director/lingo/lingo-gr.y"
+  case 126:
+#line 549 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_gotonext); }
-#line 2850 "engines/director/lingo/lingo-gr.cpp"
+#line 2884 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 126:
-#line 538 "engines/director/lingo/lingo-gr.y"
+  case 127:
+#line 550 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoprevious); }
-#line 2856 "engines/director/lingo/lingo-gr.cpp"
+#line 2890 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 127:
-#line 539 "engines/director/lingo/lingo-gr.y"
+  case 128:
+#line 551 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_goto); }
-#line 2865 "engines/director/lingo/lingo-gr.cpp"
+#line 2899 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 128:
-#line 543 "engines/director/lingo/lingo-gr.y"
+  case 129:
+#line 555 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_goto); }
-#line 2874 "engines/director/lingo/lingo-gr.cpp"
+#line 2908 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129:
-#line 547 "engines/director/lingo/lingo-gr.y"
+  case 130:
+#line 559 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_goto); }
-#line 2883 "engines/director/lingo/lingo-gr.cpp"
+#line 2917 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132:
-#line 555 "engines/director/lingo/lingo-gr.y"
+  case 133:
+#line 567 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_playdone); }
-#line 2889 "engines/director/lingo/lingo-gr.cpp"
+#line 2923 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 133:
-#line 556 "engines/director/lingo/lingo-gr.y"
+  case 134:
+#line 568 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_play); }
-#line 2898 "engines/director/lingo/lingo-gr.cpp"
+#line 2932 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 134:
-#line 560 "engines/director/lingo/lingo-gr.y"
+  case 135:
+#line 572 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_play); }
-#line 2907 "engines/director/lingo/lingo-gr.cpp"
+#line 2941 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135:
-#line 564 "engines/director/lingo/lingo-gr.y"
+  case 136:
+#line 576 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_play); }
-#line 2916 "engines/director/lingo/lingo-gr.cpp"
+#line 2950 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136:
-#line 568 "engines/director/lingo/lingo-gr.y"
+  case 137:
+#line 580 "engines/director/lingo/lingo-gr.y"
                      { g_lingo->codeSetImmediate(true); }
-#line 2922 "engines/director/lingo/lingo-gr.cpp"
+#line 2956 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137:
-#line 568 "engines/director/lingo/lingo-gr.y"
+  case 138:
+#line 580 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeFunc((yyvsp[-2].s), (yyvsp[0].narg));
 		delete (yyvsp[-2].s); }
-#line 2931 "engines/director/lingo/lingo-gr.cpp"
+#line 2965 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 138:
-#line 598 "engines/director/lingo/lingo-gr.y"
+  case 139:
+#line 610 "engines/director/lingo/lingo-gr.y"
              { g_lingo->_indef = kStateInArgs; }
-#line 2937 "engines/director/lingo/lingo-gr.cpp"
+#line 2971 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 139:
-#line 598 "engines/director/lingo/lingo-gr.y"
+  case 140:
+#line 610 "engines/director/lingo/lingo-gr.y"
                                                     { g_lingo->_currentFactory.clear(); }
-#line 2943 "engines/director/lingo/lingo-gr.cpp"
+#line 2977 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140:
-#line 599 "engines/director/lingo/lingo-gr.y"
+  case 141:
+#line 611 "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 2954 "engines/director/lingo/lingo-gr.cpp"
+#line 2988 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 141:
-#line 605 "engines/director/lingo/lingo-gr.y"
+  case 142:
+#line 617 "engines/director/lingo/lingo-gr.y"
                         { g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 2960 "engines/director/lingo/lingo-gr.cpp"
+#line 2994 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 142:
-#line 606 "engines/director/lingo/lingo-gr.y"
+  case 143:
+#line 618 "engines/director/lingo/lingo-gr.y"
                   { g_lingo->_indef = kStateInArgs; }
-#line 2966 "engines/director/lingo/lingo-gr.cpp"
+#line 3000 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143:
-#line 607 "engines/director/lingo/lingo-gr.y"
+  case 144:
+#line 619 "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 2977 "engines/director/lingo/lingo-gr.cpp"
+#line 3011 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144:
-#line 613 "engines/director/lingo/lingo-gr.y"
+  case 145:
+#line 625 "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));
@@ -2988,11 +3022,11 @@ yyreduce:
 		checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
 		delete (yyvsp[-7].s);
 		delete (yyvsp[-1].s); }
-#line 2992 "engines/director/lingo/lingo-gr.cpp"
+#line 3026 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 145:
-#line 623 "engines/director/lingo/lingo-gr.y"
+  case 146:
+#line 635 "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));
@@ -3000,65 +3034,65 @@ yyreduce:
 		g_lingo->clearArgStack();
 		g_lingo->_ignoreMe = false;
 		delete (yyvsp[-5].s); }
-#line 3004 "engines/director/lingo/lingo-gr.cpp"
+#line 3038 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146:
-#line 631 "engines/director/lingo/lingo-gr.y"
+  case 147:
+#line 643 "engines/director/lingo/lingo-gr.y"
          { g_lingo->_indef = kStateInArgs; }
-#line 3010 "engines/director/lingo/lingo-gr.cpp"
+#line 3044 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 147:
-#line 631 "engines/director/lingo/lingo-gr.y"
+  case 148:
+#line 643 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
-#line 3016 "engines/director/lingo/lingo-gr.cpp"
+#line 3050 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 148:
-#line 633 "engines/director/lingo/lingo-gr.y"
+  case 149:
+#line 645 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = 0; }
-#line 3022 "engines/director/lingo/lingo-gr.cpp"
+#line 3056 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149:
-#line 634 "engines/director/lingo/lingo-gr.y"
+  case 150:
+#line 646 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = 1; delete (yyvsp[0].s); }
-#line 3028 "engines/director/lingo/lingo-gr.cpp"
+#line 3062 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150:
-#line 635 "engines/director/lingo/lingo-gr.y"
+  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 3034 "engines/director/lingo/lingo-gr.cpp"
+#line 3068 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151:
-#line 636 "engines/director/lingo/lingo-gr.y"
+  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 3040 "engines/director/lingo/lingo-gr.cpp"
+#line 3074 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 153:
-#line 639 "engines/director/lingo/lingo-gr.y"
+  case 154:
+#line 651 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 3046 "engines/director/lingo/lingo-gr.cpp"
+#line 3080 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154:
-#line 640 "engines/director/lingo/lingo-gr.y"
+  case 155:
+#line 652 "engines/director/lingo/lingo-gr.y"
                                         { delete (yyvsp[0].s); }
-#line 3052 "engines/director/lingo/lingo-gr.cpp"
+#line 3086 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155:
-#line 642 "engines/director/lingo/lingo-gr.y"
+  case 156:
+#line 654 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->codeArgStore(); g_lingo->_indef = kStateInDef; }
-#line 3058 "engines/director/lingo/lingo-gr.cpp"
+#line 3092 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156:
-#line 644 "engines/director/lingo/lingo-gr.y"
+  case 157:
+#line 656 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_call);
 		g_lingo->codeString((yyvsp[-1].s)->c_str());
@@ -3066,113 +3100,113 @@ yyreduce:
 		WRITE_UINT32(&numpar, (yyvsp[0].narg));
 		g_lingo->code1(numpar);
 		delete (yyvsp[-1].s); }
-#line 3070 "engines/director/lingo/lingo-gr.cpp"
+#line 3104 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157:
-#line 652 "engines/director/lingo/lingo-gr.y"
+  case 158:
+#line 664 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = 0; }
-#line 3076 "engines/director/lingo/lingo-gr.cpp"
+#line 3110 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158:
-#line 653 "engines/director/lingo/lingo-gr.y"
+  case 159:
+#line 665 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 3082 "engines/director/lingo/lingo-gr.cpp"
+#line 3116 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159:
-#line 654 "engines/director/lingo/lingo-gr.y"
+  case 160:
+#line 666 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3088 "engines/director/lingo/lingo-gr.cpp"
+#line 3122 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160:
-#line 656 "engines/director/lingo/lingo-gr.y"
+  case 161:
+#line 668 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3094 "engines/director/lingo/lingo-gr.cpp"
+#line 3128 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161:
-#line 657 "engines/director/lingo/lingo-gr.y"
+  case 162:
+#line 669 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3100 "engines/director/lingo/lingo-gr.cpp"
+#line 3134 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162:
-#line 659 "engines/director/lingo/lingo-gr.y"
+  case 163:
+#line 671 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = (yyvsp[-1].code); }
-#line 3106 "engines/director/lingo/lingo-gr.cpp"
+#line 3140 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163:
-#line 661 "engines/director/lingo/lingo-gr.y"
+  case 164:
+#line 673 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3112 "engines/director/lingo/lingo-gr.cpp"
+#line 3146 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164:
-#line 662 "engines/director/lingo/lingo-gr.y"
+  case 165:
+#line 674 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3118 "engines/director/lingo/lingo-gr.cpp"
+#line 3152 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165:
-#line 663 "engines/director/lingo/lingo-gr.y"
+  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 3124 "engines/director/lingo/lingo-gr.cpp"
+#line 3158 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166:
-#line 664 "engines/director/lingo/lingo-gr.y"
+  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 3130 "engines/director/lingo/lingo-gr.cpp"
+#line 3164 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167:
-#line 666 "engines/director/lingo/lingo-gr.y"
+  case 168:
+#line 678 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3136 "engines/director/lingo/lingo-gr.cpp"
+#line 3170 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168:
-#line 667 "engines/director/lingo/lingo-gr.y"
+  case 169:
+#line 679 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3142 "engines/director/lingo/lingo-gr.cpp"
+#line 3176 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169:
-#line 669 "engines/director/lingo/lingo-gr.y"
+  case 170:
+#line 681 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3148 "engines/director/lingo/lingo-gr.cpp"
+#line 3182 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170:
-#line 670 "engines/director/lingo/lingo-gr.y"
+  case 171:
+#line 682 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3154 "engines/director/lingo/lingo-gr.cpp"
+#line 3188 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171:
-#line 672 "engines/director/lingo/lingo-gr.y"
+  case 172:
+#line 684 "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 3163 "engines/director/lingo/lingo-gr.cpp"
+#line 3197 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172:
-#line 676 "engines/director/lingo/lingo-gr.y"
+  case 173:
+#line 688 "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 3172 "engines/director/lingo/lingo-gr.cpp"
+#line 3206 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3176 "engines/director/lingo/lingo-gr.cpp"
+#line 3210 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3404,5 +3438,5 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 682 "engines/director/lingo/lingo-gr.y"
+#line 694 "engines/director/lingo/lingo-gr.y"
 
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 9c7fbc1..474e612 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -65,74 +65,75 @@ extern int yydebug;
     THEENTITY = 271,
     THEENTITYWITHID = 272,
     THEMENUITEMENTITY = 273,
-    FLOAT = 274,
-    BLTIN = 275,
-    FBLTIN = 276,
-    RBLTIN = 277,
-    ID = 278,
-    STRING = 279,
-    HANDLER = 280,
-    SYMBOL = 281,
-    ENDCLAUSE = 282,
-    tPLAYACCEL = 283,
-    tMETHOD = 284,
-    THEOBJECTFIELD = 285,
-    THEOBJECTREF = 286,
-    tDOWN = 287,
-    tELSE = 288,
-    tELSIF = 289,
-    tEXIT = 290,
-    tGLOBAL = 291,
-    tGO = 292,
-    tIF = 293,
-    tIN = 294,
-    tINTO = 295,
-    tLOOP = 296,
-    tMACRO = 297,
-    tMOVIE = 298,
-    tNEXT = 299,
-    tOF = 300,
-    tPREVIOUS = 301,
-    tPUT = 302,
-    tREPEAT = 303,
-    tSET = 304,
-    tTHEN = 305,
-    tTO = 306,
-    tWHEN = 307,
-    tWITH = 308,
-    tWHILE = 309,
-    tNLELSE = 310,
-    tFACTORY = 311,
-    tOPEN = 312,
-    tPLAY = 313,
-    tDONE = 314,
-    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
+    THEMENUITEMSENTITY = 274,
+    FLOAT = 275,
+    BLTIN = 276,
+    FBLTIN = 277,
+    RBLTIN = 278,
+    ID = 279,
+    STRING = 280,
+    HANDLER = 281,
+    SYMBOL = 282,
+    ENDCLAUSE = 283,
+    tPLAYACCEL = 284,
+    tMETHOD = 285,
+    THEOBJECTFIELD = 286,
+    THEOBJECTREF = 287,
+    tDOWN = 288,
+    tELSE = 289,
+    tELSIF = 290,
+    tEXIT = 291,
+    tGLOBAL = 292,
+    tGO = 293,
+    tIF = 294,
+    tIN = 295,
+    tINTO = 296,
+    tLOOP = 297,
+    tMACRO = 298,
+    tMOVIE = 299,
+    tNEXT = 300,
+    tOF = 301,
+    tPREVIOUS = 302,
+    tPUT = 303,
+    tREPEAT = 304,
+    tSET = 305,
+    tTHEN = 306,
+    tTO = 307,
+    tWHEN = 308,
+    tWITH = 309,
+    tWHILE = 310,
+    tNLELSE = 311,
+    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
   };
 #endif
 
@@ -160,7 +161,7 @@ union YYSTYPE
 		Common::String *field;
 	} objectref;
 
-#line 164 "engines/director/lingo/lingo-gr.h"
+#line 165 "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 b5613a0..f76132c 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -106,7 +106,7 @@ void checkEnd(Common::String *token, const char *expect, bool required) {
 %token UNARY
 %token CASTREF VOID VAR POINT RECT ARRAY OBJECT REFERENCE LEXERROR
 %token<i> INT ARGC ARGCNORET
-%token<e> THEENTITY THEENTITYWITHID THEMENUITEMENTITY
+%token<e> THEENTITY THEENTITYWITHID THEMENUITEMENTITY THEMENUITEMSENTITY
 %token<f> FLOAT
 %token<s> BLTIN FBLTIN RBLTIN
 %token<s> ID STRING HANDLER SYMBOL
@@ -155,6 +155,18 @@ asgn: tPUT expr tINTO ID 		{
 	| tPUT expr tINTO reference 		{
 		g_lingo->code1(LC::c_assign);
 		$$ = $expr; }
+	// {put the number of menuItems of} menu into <expr>
+	| tPUT THEMENUITEMSENTITY ID simpleexpr tINTO expr	{
+		if (!$ID->equalsIgnoreCase("menu")) {
+			warning("LEXER: keyword 'menu' expected");
+			YYERROR;
+		}
+
+		warning("STUB: menuItems entity");
+		g_lingo->code1(LC::c_themenuitementityassign);
+		g_lingo->codeInt($THEMENUITEMSENTITY[0]);
+		g_lingo->codeInt($THEMENUITEMSENTITY[1]);
+		$$ = $expr; }
 	| tPUT expr tAFTER expr 		{ $$ = g_lingo->code1(LC::c_after); }		// D3
 	| tPUT expr tBEFORE expr 		{ $$ = g_lingo->code1(LC::c_before); }		// D3
 	| tSET ID tEQ expr			{
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index cf078e8..945a62a 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -412,7 +412,7 @@ static yyconst flex_int16_t yy_accept[366] =
         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,
-       52,   48,    0,    0,    0,   56,   55,   55,   56,    0,
+        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
     } ;
@@ -1482,6 +1482,16 @@ YY_RULE_SETUP
 		while (*ptr != ' ' && *ptr != '\t')
 			field += *ptr++;
 
+		// the number of menuItems of menu <xx>
+		if (!field.compareToIgnoreCase("menuItems")) {
+			Common::String key = Common::String::format("%dnumber", kTheMenuItems);
+
+			yylval.e[0] = kTheMenuItems;
+			yylval.e[1] = g_lingo->_theEntityFields[key]->field;
+
+			return THEMENUITEMSENTITY;
+		}
+
 		yylval.s = new Common::String(Common::String::format("numberOf%s", field.c_str()));
 
 		if (g_lingo->_builtins.contains(*yylval.s)) {
@@ -1494,7 +1504,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 231 "engines/director/lingo/lingo-lex.l"
+#line 241 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1520,7 +1530,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 253 "engines/director/lingo/lingo-lex.l"
+#line 263 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1587,7 +1597,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 316 "engines/director/lingo/lingo-lex.l"
+#line 326 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1625,7 +1635,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 350 "engines/director/lingo/lingo-lex.l"
+#line 360 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1648,72 +1658,72 @@ YY_RULE_SETUP
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 369 "engines/director/lingo/lingo-lex.l"
+#line 379 "engines/director/lingo/lingo-lex.l"
 { count(); return tTHEN; }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 370 "engines/director/lingo/lingo-lex.l"
+#line 380 "engines/director/lingo/lingo-lex.l"
 { count(); return tTO; }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 371 "engines/director/lingo/lingo-lex.l"
+#line 381 "engines/director/lingo/lingo-lex.l"
 { count(); return tSPRITE; }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 372 "engines/director/lingo/lingo-lex.l"
+#line 382 "engines/director/lingo/lingo-lex.l"
 { count(); return tWITH; }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 373 "engines/director/lingo/lingo-lex.l"
+#line 383 "engines/director/lingo/lingo-lex.l"
 { count(); return tWITHIN; }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 374 "engines/director/lingo/lingo-lex.l"
+#line 384 "engines/director/lingo/lingo-lex.l"
 { count(); return tWHEN; }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 375 "engines/director/lingo/lingo-lex.l"
+#line 385 "engines/director/lingo/lingo-lex.l"
 { count(); return tWHILE; }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 376 "engines/director/lingo/lingo-lex.l"
+#line 386 "engines/director/lingo/lingo-lex.l"
 { count(); return tWORD; }
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 378 "engines/director/lingo/lingo-lex.l"
+#line 388 "engines/director/lingo/lingo-lex.l"
 { count(); return tNEQ; }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 379 "engines/director/lingo/lingo-lex.l"
+#line 389 "engines/director/lingo/lingo-lex.l"
 { count(); return tGE; }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 380 "engines/director/lingo/lingo-lex.l"
+#line 390 "engines/director/lingo/lingo-lex.l"
 { count(); return tLE; }
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 381 "engines/director/lingo/lingo-lex.l"
+#line 391 "engines/director/lingo/lingo-lex.l"
 { count(); return tCONCAT; }
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 382 "engines/director/lingo/lingo-lex.l"
+#line 392 "engines/director/lingo/lingo-lex.l"
 { count(); return tEQ; }
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 384 "engines/director/lingo/lingo-lex.l"
+#line 394 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1751,41 +1761,41 @@ YY_RULE_SETUP
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 418 "engines/director/lingo/lingo-lex.l"
+#line 428 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.f = atof(yytext); return FLOAT; }
 	YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 419 "engines/director/lingo/lingo-lex.l"
+#line 429 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
 	YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 420 "engines/director/lingo/lingo-lex.l"
+#line 430 "engines/director/lingo/lingo-lex.l"
 { count(); return *yytext; }
 	YY_BREAK
 case 75:
 /* rule 75 can match eol */
 YY_RULE_SETUP
-#line 421 "engines/director/lingo/lingo-lex.l"
+#line 431 "engines/director/lingo/lingo-lex.l"
 { count(); return '\n'; }
 	YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 422 "engines/director/lingo/lingo-lex.l"
+#line 432 "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 423 "engines/director/lingo/lingo-lex.l"
+#line 433 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 425 "engines/director/lingo/lingo-lex.l"
+#line 435 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1789 "engines/director/lingo/lingo-lex.cpp"
+#line 1799 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2745,7 +2755,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 425 "engines/director/lingo/lingo-lex.l"
+#line 435 "engines/director/lingo/lingo-lex.l"
 
 
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index a717950..ffcc5c6 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -196,7 +196,7 @@ the[ \t]+sqrt[ \t]+of[ \t]+	{
 
 		return THEENTITYWITHID;
 	}
-the[ \t]+value[ \t]+of[ \t]*	{
+the[ \t]+value[ \t]+of[ \t]+	{
 		count();
 
 		yylval.s = new Common::String("value");
@@ -219,6 +219,16 @@ the[ \t]+number[ \t]+of[ \t]+[[:alpha:]]+[ \t](in|of)[ \t]	{
 		while (*ptr != ' ' && *ptr != '\t')
 			field += *ptr++;
 
+		// the number of menuItems of menu <xx>
+		if (!field.compareToIgnoreCase("menuItems")) {
+			Common::String key = Common::String::format("%dnumber", kTheMenuItems);
+
+			yylval.e[0] = kTheMenuItems;
+			yylval.e[1] = g_lingo->_theEntityFields[key]->field;
+
+			return THEMENUITEMSENTITY;
+		}
+
 		yylval.s = new Common::String(Common::String::format("numberOf%s", field.c_str()));
 
 		if (g_lingo->_builtins.contains(*yylval.s)) {
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index fb55374..554e13a 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -248,6 +248,7 @@ TheEntityField fields[] = {
 	{ kTheMenuItem, "enabled",		kTheEnabled,	3 },//		D3 p
 	{ kTheMenuItem, "name",			kTheName,		3 },//		D3 p
 	{ kTheMenuItem, "script",		kTheScript,		3 },//		D3 p
+	{ kTheMenuItems,"number",		kTheNumber,		3 },//		D3 p 			// number of menuitems of menu <xx>
 
 	{ kTheMenu,		"name",			kTheName,		3 },//		D3 p
 


Commit: 8c88688908e50cc56fb252067ca14b364dc27801
    https://github.com/scummvm/scummvm/commit/8c88688908e50cc56fb252067ca14b364dc27801
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-01-22T17:28:01+01:00

Commit Message:
DIRECTOR: LINGO: Added test for 'the number of menuItems'

Changed paths:
    engines/director/lingo/tests/the.lingo


diff --git a/engines/director/lingo/tests/the.lingo b/engines/director/lingo/tests/the.lingo
index 19618fa..97173e7 100644
--- a/engines/director/lingo/tests/the.lingo
+++ b/engines/director/lingo/tests/the.lingo
@@ -37,3 +37,5 @@ put the volume of sound 1 into field 11
 set the checkMark of menuItem "Horizontal" of menu "The Ball" to False
 
 put the number of castMembers into field 5
+
+put the number of menuItems of menu "sam" into field 3




More information about the Scummvm-git-logs mailing list