[Scummvm-git-logs] scummvm master -> 402a89eacdc0864cc723562a05de8ab80ea2125c

djsrv dservilla at gmail.com
Wed Jun 10 20:04:37 UTC 2020


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

Summary:
402a89eacd DIRECTOR: LINGO: Code exit/next repeat as c_jump


Commit: 402a89eacdc0864cc723562a05de8ab80ea2125c
    https://github.com/scummvm/scummvm/commit/402a89eacdc0864cc723562a05de8ab80ea2125c
Author: djsrv (dservilla at gmail.com)
Date: 2020-06-10T16:01:17-04:00

Commit Message:
DIRECTOR: LINGO: Code exit/next repeat as c_jump

Changed paths:
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo-code.h
    engines/director/lingo/lingo-gr.cpp
    engines/director/lingo/lingo-gr.h
    engines/director/lingo/lingo-gr.y
    engines/director/lingo/lingo.cpp
    engines/director/lingo/lingo.h


diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 928f02af55..dd5801fc81 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -77,7 +77,6 @@ static struct FuncDescr {
 	{ LC::c_div,			"c_div",			"" },
 	{ LC::c_eq,				"c_eq",				"" },
 	{ LC::c_eval,			"c_eval",			"s" },
-	{ LC::c_exitRepeat,		"c_exitRepeat",		"" },
 	{ LC::c_floatpush,		"c_floatpush",		"f" },
 	{ LC::c_ge,				"c_ge",				"" },
 	{ LC::c_goto,			"c_goto",			"" },
@@ -102,7 +101,6 @@ static struct FuncDescr {
 	{ LC::c_namepush,		"c_namepush",		"N" },
 	{ LC::c_negate,			"c_negate",			"" },
 	{ LC::c_neq,			"c_neq",			"" },
-	{ LC::c_nextRepeat,		"c_nextRepeat",		"" },
 	{ LC::c_not,			"c_not",			"" },
 	{ LC::c_objectfieldassign,"c_objectfieldassign","sF" },
 	{ LC::c_objectfieldpush,"c_objectfieldpush","sF" }, // object, field
@@ -1206,16 +1204,6 @@ void LC::c_jumpifz() {
 	}
 }
 
-void LC::c_nextRepeat(void) {
-	// loop body is a single instruction chunk which ends with
-	// STOP. Now we simulate end of execution of this chunk
-	g_lingo->_nextRepeat = true;
-}
-
-void LC::c_exitRepeat(void) {
-	g_lingo->_exitRepeat = true;
-}
-
 void LC::c_whencode() {
 	Common::String eventname(g_lingo->readString());
 	Datum code = g_lingo->pop();
diff --git a/engines/director/lingo/lingo-code.h b/engines/director/lingo/lingo-code.h
index 5ffe5c8d8b..2769351232 100644
--- a/engines/director/lingo/lingo-code.h
+++ b/engines/director/lingo/lingo-code.h
@@ -95,11 +95,9 @@ namespace LC {
 	void c_objectfieldassign();
 	void c_objectrefpush();
 
-	void c_nextRepeat();
 	void c_whencode();
 	void c_tell();
 	void c_telldone();
-	void c_exitRepeat();
 	Datum compareArrays(Datum (*compareFunc)(Datum, Datum), Datum d1, Datum d2, bool location = false, bool value = false);
 	Datum eqData(Datum d1, Datum d2);
 	void c_eq();
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index d78dcd6e98..acb9b15dea 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -121,6 +121,28 @@ static void endDef() {
 	inNone();
 }
 
+static void startRepeat() {
+	g_lingo->_repeatStack.push_back(new RepeatBlock);
+}
+
+static void endRepeat(uint exitPos, uint nextPos) {
+	RepeatBlock *block = g_lingo->_repeatStack.back();
+	g_lingo->_repeatStack.pop_back();
+	for (uint i = 0; i < block->exits.size(); i++) {
+		uint32 pos = block->exits[i];
+		inst exit = 0;
+		WRITE_UINT32(&exit, exitPos - (pos - 1));
+		(*g_lingo->_currentAssembly)[pos] = exit;
+	}
+	for (uint i = 0; i < block->nexts.size(); i++) {
+		uint32 pos = block->nexts[i];
+		inst next = 0;
+		WRITE_UINT32(&next, nextPos - (pos - 1));
+		(*g_lingo->_currentAssembly)[pos] = next;
+	}
+	delete block;
+}
+
 static VarType globalCheck() {
 	// If in a definition, assume variables are local unless
 	// they were declared global with `global varname`
@@ -147,7 +169,7 @@ static void mVar(Common::String *s, VarType type) {
 }
 
 
-#line 151 "engines/director/lingo/lingo-gr.cpp"
+#line 173 "engines/director/lingo/lingo-gr.cpp"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -284,7 +306,7 @@ extern int yydebug;
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 134 "engines/director/lingo/lingo-gr.y"
+#line 156 "engines/director/lingo/lingo-gr.y"
 
 	Common::String *s;
 	int i;
@@ -304,7 +326,7 @@ union YYSTYPE
 		Common::String *field;
 	} objectref;
 
-#line 308 "engines/director/lingo/lingo-gr.cpp"
+#line 330 "engines/director/lingo/lingo-gr.cpp"
 
 };
 typedef union YYSTYPE YYSTYPE;
@@ -440,49 +462,50 @@ enum yysymbol_kind_t
   YYSYMBOL_115_7 = 115,                    /* $@7  */
   YYSYMBOL_116_8 = 116,                    /* $@8  */
   YYSYMBOL_117_9 = 117,                    /* $@9  */
-  YYSYMBOL_tellstart = 118,                /* tellstart  */
-  YYSYMBOL_ifstmt = 119,                   /* ifstmt  */
-  YYSYMBOL_elseifstmtlist = 120,           /* elseifstmtlist  */
-  YYSYMBOL_elseifstmt = 121,               /* elseifstmt  */
-  YYSYMBOL_jumpifz = 122,                  /* jumpifz  */
-  YYSYMBOL_jump = 123,                     /* jump  */
-  YYSYMBOL_varassign = 124,                /* varassign  */
-  YYSYMBOL_if = 125,                       /* if  */
-  YYSYMBOL_lbl = 126,                      /* lbl  */
-  YYSYMBOL_stmtlist = 127,                 /* stmtlist  */
-  YYSYMBOL_simpleexpr = 128,               /* simpleexpr  */
-  YYSYMBOL_expr = 129,                     /* expr  */
-  YYSYMBOL_130_10 = 130,                   /* $@10  */
-  YYSYMBOL_chunkexpr = 131,                /* chunkexpr  */
-  YYSYMBOL_reference = 132,                /* reference  */
-  YYSYMBOL_proc = 133,                     /* proc  */
-  YYSYMBOL_134_11 = 134,                   /* $@11  */
-  YYSYMBOL_135_12 = 135,                   /* $@12  */
-  YYSYMBOL_136_13 = 136,                   /* $@13  */
-  YYSYMBOL_globallist = 137,               /* globallist  */
-  YYSYMBOL_propertylist = 138,             /* propertylist  */
-  YYSYMBOL_instancelist = 139,             /* instancelist  */
-  YYSYMBOL_gotofunc = 140,                 /* gotofunc  */
-  YYSYMBOL_gotomovie = 141,                /* gotomovie  */
-  YYSYMBOL_playfunc = 142,                 /* playfunc  */
-  YYSYMBOL_143_14 = 143,                   /* $@14  */
-  YYSYMBOL_defn = 144,                     /* defn  */
-  YYSYMBOL_145_15 = 145,                   /* $@15  */
-  YYSYMBOL_146_16 = 146,                   /* $@16  */
-  YYSYMBOL_147_17 = 147,                   /* $@17  */
-  YYSYMBOL_on = 148,                       /* on  */
-  YYSYMBOL_149_18 = 149,                   /* $@18  */
-  YYSYMBOL_argdef = 150,                   /* argdef  */
-  YYSYMBOL_endargdef = 151,                /* endargdef  */
-  YYSYMBOL_argstore = 152,                 /* argstore  */
-  YYSYMBOL_macro = 153,                    /* macro  */
-  YYSYMBOL_arglist = 154,                  /* arglist  */
-  YYSYMBOL_nonemptyarglist = 155,          /* nonemptyarglist  */
-  YYSYMBOL_list = 156,                     /* list  */
-  YYSYMBOL_valuelist = 157,                /* valuelist  */
-  YYSYMBOL_linearlist = 158,               /* linearlist  */
-  YYSYMBOL_proplist = 159,                 /* proplist  */
-  YYSYMBOL_proppair = 160                  /* proppair  */
+  YYSYMBOL_startrepeat = 118,              /* startrepeat  */
+  YYSYMBOL_tellstart = 119,                /* tellstart  */
+  YYSYMBOL_ifstmt = 120,                   /* ifstmt  */
+  YYSYMBOL_elseifstmtlist = 121,           /* elseifstmtlist  */
+  YYSYMBOL_elseifstmt = 122,               /* elseifstmt  */
+  YYSYMBOL_jumpifz = 123,                  /* jumpifz  */
+  YYSYMBOL_jump = 124,                     /* jump  */
+  YYSYMBOL_varassign = 125,                /* varassign  */
+  YYSYMBOL_if = 126,                       /* if  */
+  YYSYMBOL_lbl = 127,                      /* lbl  */
+  YYSYMBOL_stmtlist = 128,                 /* stmtlist  */
+  YYSYMBOL_simpleexpr = 129,               /* simpleexpr  */
+  YYSYMBOL_expr = 130,                     /* expr  */
+  YYSYMBOL_131_10 = 131,                   /* $@10  */
+  YYSYMBOL_chunkexpr = 132,                /* chunkexpr  */
+  YYSYMBOL_reference = 133,                /* reference  */
+  YYSYMBOL_proc = 134,                     /* proc  */
+  YYSYMBOL_135_11 = 135,                   /* $@11  */
+  YYSYMBOL_136_12 = 136,                   /* $@12  */
+  YYSYMBOL_137_13 = 137,                   /* $@13  */
+  YYSYMBOL_globallist = 138,               /* globallist  */
+  YYSYMBOL_propertylist = 139,             /* propertylist  */
+  YYSYMBOL_instancelist = 140,             /* instancelist  */
+  YYSYMBOL_gotofunc = 141,                 /* gotofunc  */
+  YYSYMBOL_gotomovie = 142,                /* gotomovie  */
+  YYSYMBOL_playfunc = 143,                 /* playfunc  */
+  YYSYMBOL_144_14 = 144,                   /* $@14  */
+  YYSYMBOL_defn = 145,                     /* defn  */
+  YYSYMBOL_146_15 = 146,                   /* $@15  */
+  YYSYMBOL_147_16 = 147,                   /* $@16  */
+  YYSYMBOL_148_17 = 148,                   /* $@17  */
+  YYSYMBOL_on = 149,                       /* on  */
+  YYSYMBOL_150_18 = 150,                   /* $@18  */
+  YYSYMBOL_argdef = 151,                   /* argdef  */
+  YYSYMBOL_endargdef = 152,                /* endargdef  */
+  YYSYMBOL_argstore = 153,                 /* argstore  */
+  YYSYMBOL_macro = 154,                    /* macro  */
+  YYSYMBOL_arglist = 155,                  /* arglist  */
+  YYSYMBOL_nonemptyarglist = 156,          /* nonemptyarglist  */
+  YYSYMBOL_list = 157,                     /* list  */
+  YYSYMBOL_valuelist = 158,                /* valuelist  */
+  YYSYMBOL_linearlist = 159,               /* linearlist  */
+  YYSYMBOL_proplist = 160,                 /* proplist  */
+  YYSYMBOL_proppair = 161                  /* proppair  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -792,16 +815,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  125
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2585
+#define YYLAST   2627
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  103
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  58
+#define YYNNTS  59
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  177
+#define YYNRULES  178
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  369
+#define YYNSTATES  373
 
 #define YYMAXUTOK   342
 
@@ -858,24 +881,24 @@ static const yytype_int8 yytranslate[] =
   /* YYRLINEYYN -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   193,   193,   194,   196,   197,   198,   200,   207,   211,
-     222,   223,   224,   231,   238,   245,   252,   258,   265,   276,
-     283,   284,   285,   287,   288,   293,   305,   309,   312,   304,
-     336,   340,   343,   335,   369,   376,   382,   368,   410,   412,
-     415,   416,   418,   420,   427,   435,   436,   438,   444,   448,
-     452,   456,   459,   461,   462,   463,   465,   468,   471,   475,
-     479,   483,   491,   497,   498,   499,   510,   511,   512,   515,
-     518,   524,   524,   529,   532,   535,   540,   546,   547,   548,
-     549,   550,   551,   552,   553,   554,   555,   556,   557,   558,
-     559,   560,   561,   562,   563,   564,   565,   566,   567,   568,
-     570,   571,   572,   573,   574,   575,   576,   577,   579,   582,
-     584,   585,   586,   587,   588,   589,   589,   590,   590,   591,
-     591,   592,   595,   598,   599,   601,   604,   608,   613,   619,
-     622,   633,   634,   635,   636,   640,   644,   649,   650,   652,
-     656,   660,   664,   664,   694,   694,   694,   700,   701,   701,
-     707,   715,   721,   721,   724,   725,   726,   728,   729,   730,
-     732,   734,   742,   743,   744,   746,   747,   749,   751,   752,
-     753,   754,   756,   757,   759,   760,   762,   766
+       0,   215,   215,   216,   218,   219,   220,   222,   229,   233,
+     244,   245,   246,   253,   260,   267,   274,   280,   287,   298,
+     305,   306,   307,   309,   310,   315,   328,   332,   335,   327,
+     362,   366,   369,   361,   396,   403,   409,   395,   439,   447,
+     450,   451,   453,   455,   457,   464,   472,   473,   475,   481,
+     485,   489,   493,   496,   498,   499,   500,   502,   505,   508,
+     512,   516,   520,   528,   534,   535,   536,   547,   548,   549,
+     552,   555,   561,   561,   566,   569,   572,   577,   583,   584,
+     585,   586,   587,   588,   589,   590,   591,   592,   593,   594,
+     595,   596,   597,   598,   599,   600,   601,   602,   603,   604,
+     605,   607,   608,   609,   610,   611,   612,   613,   614,   616,
+     619,   621,   622,   623,   624,   632,   633,   633,   634,   634,
+     635,   635,   636,   639,   642,   643,   645,   648,   652,   657,
+     663,   666,   677,   678,   679,   680,   684,   688,   693,   694,
+     696,   700,   704,   708,   708,   738,   738,   738,   744,   745,
+     745,   751,   759,   765,   765,   768,   769,   770,   772,   773,
+     774,   776,   778,   786,   787,   788,   790,   791,   793,   795,
+     796,   797,   798,   800,   801,   803,   804,   806,   810
 };
 #endif
 
@@ -909,13 +932,13 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "'/'", "'%'", "'\\n'", "'('", "')'", "','", "'['", "']'", "':'",
   "$accept", "program", "programline", "asgn", "stmtoneliner", "stmt",
   "$@1", "$@2", "$@3", "$@4", "$@5", "$@6", "$@7", "$@8", "$@9",
-  "tellstart", "ifstmt", "elseifstmtlist", "elseifstmt", "jumpifz", "jump",
-  "varassign", "if", "lbl", "stmtlist", "simpleexpr", "expr", "$@10",
-  "chunkexpr", "reference", "proc", "$@11", "$@12", "$@13", "globallist",
-  "propertylist", "instancelist", "gotofunc", "gotomovie", "playfunc",
-  "$@14", "defn", "$@15", "$@16", "$@17", "on", "$@18", "argdef",
-  "endargdef", "argstore", "macro", "arglist", "nonemptyarglist", "list",
-  "valuelist", "linearlist", "proplist", "proppair", YY_NULLPTR
+  "startrepeat", "tellstart", "ifstmt", "elseifstmtlist", "elseifstmt",
+  "jumpifz", "jump", "varassign", "if", "lbl", "stmtlist", "simpleexpr",
+  "expr", "$@10", "chunkexpr", "reference", "proc", "$@11", "$@12", "$@13",
+  "globallist", "propertylist", "instancelist", "gotofunc", "gotomovie",
+  "playfunc", "$@14", "defn", "$@15", "$@16", "$@17", "on", "$@18",
+  "argdef", "endargdef", "argstore", "macro", "arglist", "nonemptyarglist",
+  "list", "valuelist", "linearlist", "proplist", "proppair", YY_NULLPTR
   };
   return yy_sname[yysymbol];
 }
@@ -940,12 +963,12 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-300)
+#define YYPACT_NINF (-316)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF (-169)
+#define YYTABLE_NINF (-170)
 
 #define yytable_value_is_error(Yyn) \
   0
@@ -954,43 +977,44 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     773,   -82,  -300,  -300,    53,  -300,   597,   316,    53,    -2,
-     499,  -300,  -300,  -300,  -300,  -300,  -300,     9,  -300,  1781,
-    -300,  -300,  -300,    22,  2023,   -17,    85,    57,    63,  2053,
-    1818,  -300,  2053,  2053,  2053,  2053,  2053,  2053,  2053,  -300,
-    -300,  2053,  2053,  2053,   410,    96,     5,  -300,  -300,  -300,
-    -300,  2053,  -300,  2478,  -300,  -300,  -300,  -300,  -300,  -300,
-    -300,  -300,  -300,  -300,  -300,  -300,     8,  2023,  1899,  2478,
-      46,  1899,    46,  -300,    53,  1936,  2478,    47,   685,  -300,
-    -300,    88,  2053,  -300,    69,  -300,  2092,  -300,    95,  -300,
-     121,   402,   122,  -300,   -42,    53,    53,   -20,    97,    99,
-    -300,  2395,  2092,  -300,   128,  -300,  2125,  2158,  2191,  2224,
-    2445,   164,   130,   132,  -300,  -300,  2408,    60,    64,  -300,
-    2478,    58,    75,    89,  -300,  -300,   773,  2478,  2053,  2053,
-    2053,  2053,  2053,  2053,  2053,  2053,  2053,  2053,  2053,  2053,
-    2053,  2053,  2053,  2053,  2053,   149,  1936,   402,  2408,   -46,
-    2053,    18,  -300,   -89,    21,  2053,    46,   149,  -300,    91,
-    2478,  2053,  -300,  -300,    53,    17,  2053,  2053,   -22,  2053,
-    2053,  2053,    14,   139,  2053,  2053,  2053,  2053,  2053,  -300,
-    -300,    92,  2053,  2053,  2053,  2053,  2053,  2053,  2053,  2053,
-    2053,  2053,  -300,  -300,  -300,    93,  -300,  -300,    53,    53,
-    -300,  2053,    37,  -300,   140,    16,    16,    16,    16,  2491,
-    2491,  -300,   -36,    16,    16,    16,    16,   -36,   -44,   -44,
-    -300,  -300,  -300,   -48,  -300,  2478,  -300,  -300,  -300,  -300,
-    2478,    -9,   168,  2478,  -300,   153,  -300,  -300,  2478,  2478,
-    2053,  2053,  2478,  2478,    16,  2053,  2053,   172,  2478,    16,
-    2478,  2478,  2478,   174,  2478,  2257,  2478,  2290,  2478,  2323,
-    2478,  2356,  2478,  2478,  1700,  -300,   177,  -300,  -300,  2478,
-      60,    64,  -300,  -300,  -300,   178,  2053,  -300,  -300,   149,
-    2053,  2478,   231,  -300,  2478,    16,    53,  -300,  2053,  2053,
-    2053,  2053,  -300,  1195,  -300,  1110,  -300,  -300,    44,  -300,
-       1,  2478,  -300,  -300,  -300,  1279,   152,  2478,  2478,  2478,
-    2478,  -300,  -300,  -300,   120,  -300,   858,  -300,   942,  -300,
-    -300,  -300,  -300,   124,  2053,  -300,    76,   182,  -300,  -300,
-     157,   179,  -300,  2478,  -300,  2053,  -300,   134,  -300,   114,
-    1026,  -300,  2053,   163,  1363,  2478,  -300,   194,  -300,  2478,
-    2053,   136,   169,  -300,  1448,  -300,  2478,  -300,  -300,  -300,
-    -300,  -300,  1110,  1532,  -300,  -300,  -300,  1616,  -300
+     782,   -86,  -316,  -316,    53,  -316,   606,   325,    53,   -34,
+     508,  -316,  -316,  -316,  -316,  -316,  -316,   -17,  -316,  1790,
+    -316,  -316,  -316,    38,  2032,   -35,   179,    47,    66,  2062,
+    1827,  -316,  2062,  2062,  2062,  2062,  2062,  2062,  2062,  -316,
+    -316,  2062,  2062,  2062,   419,    97,     4,  -316,  -316,  -316,
+    -316,  2062,  -316,  2520,  -316,  -316,  -316,  -316,  -316,  -316,
+    -316,  -316,  -316,  -316,  -316,  -316,    13,  2032,  1908,  2520,
+      14,  1908,    14,  -316,    53,  1945,  2520,    20,   694,  -316,
+    -316,   119,  2062,  -316,   100,  -316,  2101,  -316,   121,  -316,
+     122,   411,   125,  -316,   -45,    53,    53,   -13,    98,   101,
+    -316,  2437,  2101,  -316,   130,  -316,  2134,  2167,  2200,  2233,
+    2487,  2398,   132,   133,  -316,  -316,  2450,    60,    64,  -316,
+    2520,    73,    88,    89,  -316,  -316,   782,  2520,  2062,  2062,
+    2062,  2062,  2062,  2062,  2062,  2062,  2062,  2062,  2062,  2062,
+    2062,  2062,  2062,  2062,  2062,   149,  1945,   411,  2450,   -39,
+    2062,    16,  -316,    10,    19,  2062,    14,   149,  -316,    92,
+    2520,  2062,  -316,  -316,    53,    18,  2062,  2062,    21,  2062,
+    2062,  2062,    -1,   144,  2062,  2062,  2062,  2062,  2062,  -316,
+    -316,    94,  2062,  2062,  2062,  2062,  2062,  2062,  2062,  2062,
+    2062,  2062,  -316,  -316,  -316,    95,  -316,  -316,    53,    53,
+    -316,  2062,    76,  -316,   150,   117,   117,   117,   117,  2533,
+    2533,  -316,   -36,   117,   117,   117,   117,   -36,   -44,   -44,
+    -316,  -316,  -316,   -93,  -316,  2520,  -316,  -316,  -316,  -316,
+    2520,    -9,   178,  2520,  -316,   169,  -316,  -316,  2520,  2520,
+    2062,  2062,  2520,  2520,   117,  2062,  2062,   188,  2520,   117,
+    2520,  2520,  2520,   191,  2520,  2266,  2520,  2299,  2520,  2332,
+    2520,  2365,  2520,  2520,  1709,  -316,   192,  -316,  -316,  2520,
+      60,    64,  -316,  -316,  -316,   193,  2062,  -316,  -316,   149,
+    2062,  2520,   164,  -316,  2520,   117,    53,  -316,  2062,  2062,
+    2062,  2062,  -316,  1204,  -316,  1119,  -316,  -316,    22,  -316,
+      -8,  2520,  -316,  -316,  -316,  -316,   166,  2520,  2520,  2520,
+    2520,  -316,  -316,  -316,   134,  -316,   867,  -316,   951,  -316,
+    -316,  -316,  -316,  1288,  2062,  -316,   106,   196,  -316,  -316,
+     170,   197,   137,  2520,  -316,  2062,  -316,   156,  -316,   143,
+    1035,  -316,  2062,   189,  -316,  1372,  2520,  -316,   218,  -316,
+    2520,  2062,   160,   194,  -316,  -316,  -316,  2520,  -316,  -316,
+    1457,  -316,  -316,  1119,  -316,  -316,  -316,  -316,  1541,  -316,
+    -316,  1625,  -316
 };
 
   /* YYDEFACTSTATE-NUM -- Default reduction number in state STATE-NUM.
@@ -998,65 +1022,66 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,    56,    61,     0,    57,     0,     0,     0,     0,
-       0,    59,    58,   142,   148,    75,    76,   114,   115,     0,
-     131,    51,   144,     0,     0,     0,     0,     0,     0,     0,
-       0,   119,     0,     0,     0,     0,     0,     0,     0,   117,
-     152,     0,     0,     0,     0,     0,     2,    77,    23,     6,
-      24,     0,    66,    21,   109,    67,    22,   111,   112,     5,
-      52,    20,    64,    65,    60,    62,    60,     0,     0,   163,
-     122,     0,    69,   108,     0,     0,   165,   161,     0,    52,
-     113,     0,     0,   132,     0,   133,   134,   136,     0,    38,
-       0,   110,     0,    52,     0,     0,     0,     0,     0,     0,
-     147,   124,   139,   141,     0,    91,     0,     0,     0,     0,
-       0,     0,     0,     0,    96,    97,     0,    59,    58,   169,
-     172,     0,   170,   171,   174,     1,     0,    48,     0,     0,
+       0,     0,    57,    62,     0,    58,     0,     0,     0,     0,
+       0,    60,    59,   143,   149,    76,    77,   115,   116,     0,
+     132,    52,   145,     0,     0,     0,     0,     0,     0,     0,
+       0,   120,     0,     0,     0,     0,     0,     0,     0,   118,
+     153,     0,     0,     0,     0,     0,     2,    78,    23,     6,
+      24,     0,    67,    21,   110,    68,    22,   112,   113,     5,
+      53,    20,    65,    66,    61,    63,    61,     0,     0,   164,
+     123,     0,    70,   109,     0,     0,   166,   162,     0,    53,
+     114,     0,     0,   133,     0,   134,   135,   137,     0,    38,
+       0,   111,     0,    53,     0,     0,     0,     0,     0,     0,
+     148,   125,   140,   142,     0,    92,     0,     0,     0,     0,
+       0,     0,     0,     0,    97,    98,     0,    60,    59,   170,
+     173,     0,   171,   172,   175,     1,     0,    49,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   154,     0,     0,   163,     0,
-       0,     0,    74,    60,     0,     0,   143,   154,   125,   116,
-     138,     0,   135,   145,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   140,
-     129,   120,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    42,    42,   127,   118,   153,    63,     0,     0,
-     167,     0,     0,     3,     0,    87,    88,    85,    86,    89,
-      90,    82,    93,    94,    95,    84,    83,    92,    78,    79,
-      80,    81,   155,     0,   121,   164,    68,    70,    71,    73,
-     166,     0,     0,   137,    52,     0,     7,     8,    10,    11,
-       0,     0,    48,    15,    13,     0,     0,     0,    14,    12,
-      19,    39,   123,     0,   100,     0,   102,     0,   104,     0,
-     106,     0,    98,    99,     0,    53,     0,   177,   176,   173,
-       0,     0,   175,    53,   160,     0,     0,   160,   126,   154,
-       0,    34,    26,    53,    16,    17,     0,   130,     0,     0,
-       0,     0,    52,     0,   128,     0,    53,   156,     0,    53,
-       0,     9,    52,    50,    50,     0,     0,   101,   103,   105,
-     107,    41,    54,    55,     0,    45,     0,    72,     0,   160,
-      35,    27,    31,     0,     0,    40,    52,   157,    53,    48,
-       0,     0,    25,    18,    53,     0,    46,     0,   158,   150,
-       0,    36,     0,     0,     0,    48,    43,     0,    53,    28,
-       0,     0,     0,   159,     0,    48,    32,    44,    53,    37,
-      53,    48,     0,     0,    53,    47,    29,     0,    33
+       0,     0,     0,     0,     0,   155,     0,     0,   164,     0,
+       0,     0,    75,    61,     0,     0,   144,   155,   126,   117,
+     139,     0,   136,   146,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   141,
+     130,   121,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    43,    43,   128,   119,   154,    64,     0,     0,
+     168,     0,     0,     3,     0,    88,    89,    86,    87,    90,
+      91,    83,    94,    95,    96,    85,    84,    93,    79,    80,
+      81,    82,   156,     0,   122,   165,    69,    71,    72,    74,
+     167,     0,     0,   138,    53,     0,     7,     8,    10,    11,
+       0,     0,    49,    15,    13,     0,     0,     0,    14,    12,
+      19,    39,   124,     0,   101,     0,   103,     0,   105,     0,
+     107,     0,    99,   100,     0,    54,     0,   178,   177,   174,
+       0,     0,   176,    54,   161,     0,     0,   161,   127,   155,
+       0,    34,    26,    42,    16,    17,     0,   131,     0,     0,
+       0,     0,    53,     0,   129,     0,    54,   157,     0,    54,
+       0,     9,    53,    51,    51,    54,     0,   102,   104,   106,
+     108,    41,    55,    56,     0,    46,     0,    73,     0,   161,
+      35,    27,    31,     0,     0,    40,    53,   158,    54,    49,
+       0,     0,     0,    18,    54,     0,    47,     0,   159,   151,
+       0,    36,     0,     0,    25,     0,    49,    44,     0,    42,
+      28,     0,     0,     0,   160,    54,    49,    32,    45,    54,
+       0,    42,    49,     0,    37,    54,    42,    48,     0,    54,
+      29,     0,    33
 };
 
   /* YYPGOTONTERM-NUM.  */
 static const yytype_int16 yypgoto[] =
 {
-    -300,    98,  -300,  -300,   -41,    15,  -300,  -300,  -300,  -300,
-    -300,  -300,  -300,  -300,  -300,    39,  -300,  -300,  -300,  -156,
-    -299,   -62,  -300,   -77,   -87,     3,    -6,  -300,  -300,    78,
-    -300,  -300,  -300,  -300,  -300,  -300,  -300,  -300,   -27,  -300,
-    -300,  -300,  -300,  -300,  -300,  -300,  -300,  -140,  -300,  -272,
-    -300,    13,   -32,  -300,  -300,  -300,  -300,    43
+    -316,   120,  -316,  -316,   -16,    15,  -316,  -316,  -316,  -316,
+    -316,  -316,  -316,  -316,  -316,  -283,    57,  -316,  -316,  -316,
+    -156,  -315,   -53,  -316,   -77,  -253,     3,    -6,  -316,  -316,
+      96,  -316,  -316,  -316,  -316,  -316,  -316,  -316,  -316,   -18,
+    -316,  -316,  -316,  -316,  -316,  -316,  -316,  -316,  -140,  -316,
+    -272,  -316,    33,   -14,  -316,  -316,  -316,  -316,    58
 };
 
   /* YYDEFGOTONTERM-NUM.  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    45,    46,    47,    48,   313,   303,   330,   355,   304,
-     331,   361,   302,   329,   348,   264,    50,   326,   336,   204,
-     315,   321,    51,   145,   293,    52,    53,   276,    54,    55,
-      56,    81,   112,   104,   159,   195,   181,    57,    87,    58,
-      78,    59,    88,   234,    79,    60,   113,   223,   339,   296,
-      61,   154,    77,    62,   121,   122,   123,   124
+      -1,    45,    46,    47,    48,   313,   303,   330,   356,   304,
+     331,   362,   302,   329,   349,   305,   264,    50,   326,   336,
+     204,   315,   321,    51,   145,   293,    52,    53,   276,    54,
+      55,    56,    81,   112,   104,   159,   195,   181,    57,    87,
+      58,    78,    59,    88,   234,    79,    60,   113,   223,   339,
+     296,    61,   154,    77,    62,   121,   122,   123,   124
 };
 
   /* YYTABLEYYPACT[STATE-NUM] -- What to do in state STATE-NUM.  If
@@ -1064,160 +1089,144 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      69,    69,   157,   103,    76,   299,   323,    65,   146,   227,
-     228,    73,   170,    86,    63,    49,   169,   231,    91,    70,
-      72,   240,   171,   101,   102,   134,   105,   106,   107,   108,
-     109,   110,   111,   134,   174,   114,   115,   116,   120,    92,
-      93,     8,   241,   236,   175,   127,    74,   328,   274,   143,
-     144,   275,   224,   150,     1,   141,   142,   143,   144,   162,
-      80,   147,   148,   365,   270,   148,   271,     2,   245,   148,
-       3,     4,    69,    89,     5,   179,   160,   152,   246,    64,
-      11,   149,    12,    99,   151,   134,   283,   277,   135,   100,
-     275,   156,    33,    34,    35,    36,   125,   319,   172,   173,
-     275,   126,    94,    95,    96,   146,   140,   141,   142,   143,
-     144,    97,   334,   335,   158,   161,   226,   150,    98,   229,
-     150,   163,   205,   206,   207,   208,   209,   210,   211,   212,
+      69,    69,   157,   274,    76,   299,   275,    65,   332,   170,
+      63,    73,   103,    86,    74,    49,   169,   231,    91,   171,
+     295,    92,    93,   101,   102,   134,   105,   106,   107,   108,
+     109,   110,   111,   134,    80,   114,   115,   116,   120,    70,
+      72,   174,     8,   316,   236,   127,   318,   328,   367,   143,
+     144,   175,   323,   245,     1,   141,   142,   143,   144,   224,
+     150,   147,   148,   246,   240,   148,   355,     2,   162,   148,
+       3,     4,    69,    99,     5,   340,   160,   152,   365,    64,
+      11,   345,    12,   369,   179,   241,   283,   277,   319,    89,
+     275,   275,   100,    33,    34,    35,    36,   125,   172,   173,
+     126,   149,   360,   270,   151,   271,   363,   146,   227,   228,
+     146,   156,   368,   150,   226,   150,   371,   229,   150,   155,
+     317,   155,   205,   206,   207,   208,   209,   210,   211,   212,
      213,   214,   215,   216,   217,   218,   219,   220,   221,   300,
-      69,    49,   317,   155,   225,   150,   155,   164,   168,   230,
-      43,   176,   177,    44,   180,   233,   194,   279,   196,   200,
+      69,    49,   334,   335,   225,   158,   161,   163,   164,   230,
+      43,   168,   176,    44,   177,   233,   180,   279,   194,   196,
      238,   239,   198,   242,   243,   244,   199,   235,   248,   249,
-     250,   251,   252,   341,   201,   222,   254,   255,   256,   257,
-     258,   259,   260,   261,   262,   263,   295,   247,   202,   352,
-     232,   253,   266,   273,   278,   269,   305,   280,   286,   360,
-     287,   267,   268,   294,   297,   364,   324,   325,   338,   316,
-     332,   342,   318,   347,   343,   311,   314,   350,   192,   346,
-     353,   357,   358,   292,   203,   320,   128,   129,   130,   131,
-     132,   133,   265,   134,   281,   282,   135,   136,   137,   284,
-     285,   340,   322,   237,   298,   272,     0,   344,     0,   337,
-       0,     0,   138,   139,   140,   141,   142,   143,   144,     0,
-     193,   354,     0,     0,     0,     0,   -30,   351,     0,     0,
-      76,   362,     0,   363,   301,     0,     0,   367,     0,     0,
+     250,   251,   252,   341,   200,   222,   254,   255,   256,   257,
+     258,   259,   260,   261,   262,   263,   134,   201,   202,   135,
+     353,   232,   247,   253,   266,   269,    94,    95,    96,   -30,
+     361,   267,   268,   273,   278,    97,   366,   140,   141,   142,
+     143,   144,    98,   280,   286,   311,   314,   287,   294,   297,
+     324,   325,   338,   344,   342,   320,   128,   129,   130,   131,
+     132,   133,   343,   134,   281,   282,   135,   136,   137,   284,
+     285,   347,   348,   351,   354,   358,   203,   359,   292,   337,
+     265,   322,   138,   139,   140,   141,   142,   143,   144,     0,
+     272,   237,   298,     0,     0,     0,     0,     0,   352,     0,
+      76,     0,     0,     0,   301,     0,     0,     0,     0,     0,
        0,     0,   307,   308,   309,   310,     0,     0,     0,   306,
-       0,     0,     0,   128,   129,   130,   131,   132,   133,     0,
-     134,     0,     0,   135,   136,   137,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,  -162,     1,   333,   138,
-     139,   140,   141,   142,   143,   144,     0,     0,     0,   345,
-       2,     0,     0,     3,     4,     0,   349,     5,  -162,     7,
-       8,     9,    66,    11,   356,    12,  -162,  -162,     0,    15,
-      16,  -162,  -162,  -162,  -162,  -162,  -162,  -162,  -162,     0,
-    -162,     0,  -162,  -162,  -162,     0,    67,  -162,    26,  -162,
-    -162,  -162,  -162,     0,     0,  -162,  -162,  -162,  -162,  -162,
-    -162,  -162,  -162,  -162,    32,  -162,  -162,  -162,  -162,  -162,
-    -162,    33,    34,    35,    36,    37,  -162,  -162,  -162,  -162,
-       0,  -162,  -162,  -162,  -162,  -162,  -162,    41,    42,  -162,
-    -162,     1,  -162,    71,  -162,  -162,    44,  -162,     0,     0,
-       0,     0,     0,     0,     2,     0,     0,     3,     4,     0,
-       0,     5,     0,     7,     8,     9,    66,   117,     0,   118,
-       0,     0,     0,    15,    16,     0,   165,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      67,     0,    26,     0,   128,   129,   130,   131,   132,   133,
-       0,   134,   166,   167,   135,   136,   137,     0,    32,     0,
-       0,     0,     0,     0,     0,    33,    34,    35,    36,    37,
-     138,   139,   140,   141,   142,   143,   144,     0,     0,   -60,
-       1,    41,    42,     0,     0,     0,     0,    43,     0,     0,
-      44,  -168,   119,     2,     0,     0,     3,     4,     0,     0,
-       5,   -60,     7,     8,     9,    66,    11,     0,    12,   -60,
-     -60,     0,    15,    16,     0,   -60,   -60,   -60,   -60,   -60,
-     -60,   -60,     0,     0,     0,     0,   -60,     0,     0,    67,
-     -60,    26,     0,     0,   -60,     0,     0,     0,   -60,   -60,
-     -60,   -60,   -60,   -60,   -60,   -60,   -60,    32,   -60,     0,
-       0,   -60,   -60,   -60,    33,    34,    35,    36,    37,     0,
-       0,   -60,   -60,     0,   -60,   -60,   -60,   -60,   -60,   -60,
-      41,    42,   -60,   -60,     0,   -60,    75,  -162,     1,    44,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     2,     0,     0,     3,     4,     0,     0,     5,  -162,
-       7,     8,     9,    66,    11,     0,    12,  -162,  -162,     0,
-      15,    16,     0,  -162,  -162,  -162,  -162,  -162,  -162,  -162,
-       0,     0,     0,     0,  -162,     0,     0,    67,  -162,    26,
-       0,     0,  -162,     0,     0,     0,  -162,  -162,  -162,     0,
-       0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
-       0,     0,    33,    34,    35,    36,    37,     0,     0,  -162,
-    -162,     0,  -162,  -162,  -162,  -162,     1,     0,    41,    42,
-       0,     0,     0,  -162,    68,     0,  -162,    44,     0,     2,
-       0,     0,     3,     4,     0,     0,     5,  -162,     7,     8,
-       9,    66,    11,     0,    12,  -162,  -162,     0,    15,    16,
-       0,  -162,  -162,  -162,  -162,  -162,  -162,  -162,     0,     0,
-       0,     0,  -162,     0,     0,    67,  -162,    26,     0,     0,
-    -162,     0,     0,     0,  -162,  -162,  -162,     0,     0,     0,
-       0,     0,     0,    32,     0,     0,     0,     0,     0,     0,
-      33,    34,    35,    36,    37,     0,     0,  -162,  -162,     0,
-    -162,  -162,  -162,    -4,     1,     0,    41,    42,     0,     0,
-       0,  -162,    43,     0,  -162,    44,     0,     2,     0,     0,
-       3,     4,     0,     0,     5,     6,     7,     8,     9,    10,
-      11,     0,    12,     0,    13,    14,    15,    16,     0,     0,
-       0,    17,    18,    19,    20,    21,     0,     0,    22,     0,
-      23,     0,     0,    24,    25,    26,     0,     0,    27,     0,
-       0,    28,    29,    30,    31,     0,     0,     0,     0,     0,
-       0,    32,     0,     0,     0,     0,     0,     0,    33,    34,
-      35,    36,    37,     0,     0,    38,    39,    40,  -151,     1,
-       0,     0,     0,     0,    41,    42,     0,     0,     0,    -4,
-      43,     0,     2,    44,     0,     3,     4,     0,     0,     5,
-       6,     7,     8,     9,    10,    11,     0,    12,   327,    13,
-       0,    15,    16,     0,     0,     0,    17,    18,    19,    20,
-      21,     0,     0,     0,     0,    23,     0,     0,    24,    25,
-      26,     0,     0,    27,     0,     0,     0,    29,    30,    31,
-       0,     0,     0,     0,     0,     0,    32,     0,     0,     0,
-       0,     0,     0,    33,    34,    35,    36,    37,     0,     0,
-      38,    39,  -149,     1,     0,     0,     0,     0,     0,    41,
-      42,     0,     0,     0,   312,    43,     2,     0,    44,     3,
+       0,     0,     0,     0,     0,     0,     0,     0,   333,     0,
+       0,     0,     0,     0,     0,  -163,     1,     0,     0,   346,
+       0,     0,     0,     0,     0,     0,   350,     0,     0,     2,
+       0,     0,     3,     4,     0,   357,     5,  -163,     7,     8,
+       9,    66,    11,     0,    12,  -163,  -163,     0,    15,    16,
+    -163,  -163,  -163,  -163,  -163,  -163,  -163,  -163,     0,  -163,
+       0,  -163,  -163,  -163,     0,    67,  -163,    26,  -163,  -163,
+    -163,  -163,     0,     0,  -163,  -163,  -163,  -163,  -163,  -163,
+    -163,  -163,  -163,    32,  -163,  -163,  -163,  -163,  -163,  -163,
+      33,    34,    35,    36,    37,  -163,  -163,  -163,  -163,     0,
+    -163,  -163,  -163,  -163,  -163,  -163,    41,    42,  -163,  -163,
+       1,  -163,    71,  -163,  -163,    44,  -163,     0,     0,     0,
+       0,     0,     0,     2,     0,     0,     3,     4,     0,     0,
+       5,     0,     7,     8,     9,    66,   117,     0,   118,     0,
+       0,     0,    15,    16,     0,   165,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    67,
+       0,    26,     0,   128,   129,   130,   131,   132,   133,     0,
+     134,   166,   167,   135,   136,   137,     0,    32,     0,     0,
+       0,     0,     0,     0,    33,    34,    35,    36,    37,   138,
+     139,   140,   141,   142,   143,   144,     0,     0,   -61,     1,
+      41,    42,     0,     0,     0,     0,    43,     0,     0,    44,
+    -169,   119,     2,     0,     0,     3,     4,     0,     0,     5,
+     -61,     7,     8,     9,    66,    11,     0,    12,   -61,   -61,
+       0,    15,    16,     0,   -61,   -61,   -61,   -61,   -61,   -61,
+     -61,     0,     0,     0,     0,   -61,     0,     0,    67,   -61,
+      26,     0,     0,   -61,     0,     0,     0,   -61,   -61,   -61,
+     -61,   -61,   -61,   -61,   -61,   -61,    32,   -61,     0,     0,
+     -61,   -61,   -61,    33,    34,    35,    36,    37,     0,     0,
+     -61,   -61,     0,   -61,   -61,   -61,   -61,   -61,   -61,    41,
+      42,   -61,   -61,     0,   -61,    75,  -163,     1,    44,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       2,     0,     0,     3,     4,     0,     0,     5,  -163,     7,
+       8,     9,    66,    11,     0,    12,  -163,  -163,     0,    15,
+      16,     0,  -163,  -163,  -163,  -163,  -163,  -163,  -163,     0,
+       0,     0,     0,  -163,     0,     0,    67,  -163,    26,     0,
+       0,  -163,     0,     0,     0,  -163,  -163,  -163,     0,     0,
+       0,     0,     0,     0,    32,     0,     0,     0,     0,     0,
+       0,    33,    34,    35,    36,    37,     0,     0,  -163,  -163,
+       0,  -163,  -163,  -163,  -163,     1,     0,    41,    42,     0,
+       0,     0,  -163,    68,     0,  -163,    44,     0,     2,     0,
+       0,     3,     4,     0,     0,     5,  -163,     7,     8,     9,
+      66,    11,     0,    12,  -163,  -163,     0,    15,    16,     0,
+    -163,  -163,  -163,  -163,  -163,  -163,  -163,     0,     0,     0,
+       0,  -163,     0,     0,    67,  -163,    26,     0,     0,  -163,
+       0,     0,     0,  -163,  -163,  -163,     0,     0,     0,     0,
+       0,     0,    32,     0,     0,     0,     0,     0,     0,    33,
+      34,    35,    36,    37,     0,     0,  -163,  -163,     0,  -163,
+    -163,  -163,    -4,     1,     0,    41,    42,     0,     0,     0,
+    -163,    43,     0,  -163,    44,     0,     2,     0,     0,     3,
        4,     0,     0,     5,     6,     7,     8,     9,    10,    11,
-       0,    12,     0,    13,     0,    15,    16,     0,     0,     0,
-      17,    18,    19,    20,    21,     0,     0,     0,     0,    23,
+       0,    12,     0,    13,    14,    15,    16,     0,     0,     0,
+      17,    18,    19,    20,    21,     0,     0,    22,     0,    23,
        0,     0,    24,    25,    26,     0,     0,    27,     0,     0,
-       0,    29,    30,    31,     0,     0,     0,     0,     0,     0,
+      28,    29,    30,    31,     0,     0,     0,     0,     0,     0,
       32,     0,     0,     0,     0,     0,     0,    33,    34,    35,
-      36,    37,     0,     0,    38,    39,  -146,     1,     0,     0,
-       0,     0,     0,    41,    42,     0,     0,     0,   312,    43,
-       2,     0,    44,     3,     4,     0,     0,     5,     6,     7,
-       8,     9,    10,    11,     0,    12,     0,    13,     0,    15,
-      16,     0,     0,     0,    17,    18,    19,    20,    21,     0,
-       0,     0,     0,    23,     0,     0,    24,    25,    26,     0,
-       0,    27,     0,     0,     0,    29,    30,    31,     0,     0,
-       0,     0,     0,     0,    32,     0,     0,     0,     0,     0,
-       0,    33,    34,    35,    36,    37,     0,     0,    38,    39,
-       0,     1,     0,     0,     0,     0,     0,    41,    42,     0,
-       0,     0,   312,    43,     2,     0,    44,     3,     4,     0,
-       0,     5,     6,     7,     8,     9,    10,    11,     0,    12,
-       0,    13,     0,    15,    16,     0,   -49,   -49,    17,    18,
-      19,    20,    21,     0,     0,     0,     0,    23,     0,     0,
-      24,    25,    26,     0,     0,    27,     0,     0,     0,    29,
-      30,    31,     0,     0,     0,     0,     0,     0,    32,     0,
-       0,     0,     0,     0,     0,    33,    34,    35,    36,    37,
-       0,     0,    38,    39,     0,   -49,     1,     0,     0,     0,
-       0,    41,    42,     0,     0,     0,   312,    43,     0,     2,
-      44,     0,     3,     4,     0,     0,     5,     6,     7,     8,
+      36,    37,     0,     0,    38,    39,    40,  -152,     1,     0,
+       0,     0,     0,    41,    42,     0,     0,     0,    -4,    43,
+       0,     2,    44,     0,     3,     4,     0,     0,     5,     6,
+       7,     8,     9,    10,    11,     0,    12,   327,    13,     0,
+      15,    16,     0,     0,     0,    17,    18,    19,    20,    21,
+       0,     0,     0,     0,    23,     0,     0,    24,    25,    26,
+       0,     0,    27,     0,     0,     0,    29,    30,    31,     0,
+       0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
+       0,     0,    33,    34,    35,    36,    37,     0,     0,    38,
+      39,  -150,     1,     0,     0,     0,     0,     0,    41,    42,
+       0,     0,     0,   312,    43,     2,     0,    44,     3,     4,
+       0,     0,     5,     6,     7,     8,     9,    10,    11,     0,
+      12,     0,    13,     0,    15,    16,     0,     0,     0,    17,
+      18,    19,    20,    21,     0,     0,     0,     0,    23,     0,
+       0,    24,    25,    26,     0,     0,    27,     0,     0,     0,
+      29,    30,    31,     0,     0,     0,     0,     0,     0,    32,
+       0,     0,     0,     0,     0,     0,    33,    34,    35,    36,
+      37,     0,     0,    38,    39,  -147,     1,     0,     0,     0,
+       0,     0,    41,    42,     0,     0,     0,   312,    43,     2,
+       0,    44,     3,     4,     0,     0,     5,     6,     7,     8,
        9,    10,    11,     0,    12,     0,    13,     0,    15,    16,
        0,     0,     0,    17,    18,    19,    20,    21,     0,     0,
        0,     0,    23,     0,     0,    24,    25,    26,     0,     0,
       27,     0,     0,     0,    29,    30,    31,     0,     0,     0,
        0,     0,     0,    32,     0,     0,     0,     0,     0,     0,
       33,    34,    35,    36,    37,     0,     0,    38,    39,     0,
-       1,     0,   -52,     0,     0,     0,    41,    42,     0,     0,
+       1,     0,     0,     0,     0,     0,    41,    42,     0,     0,
        0,   312,    43,     2,     0,    44,     3,     4,     0,     0,
        5,     6,     7,     8,     9,    10,    11,     0,    12,     0,
-      13,     0,    15,    16,     0,     0,     0,    17,    18,    19,
+      13,     0,    15,    16,     0,   -50,   -50,    17,    18,    19,
       20,    21,     0,     0,     0,     0,    23,     0,     0,    24,
       25,    26,     0,     0,    27,     0,     0,     0,    29,    30,
       31,     0,     0,     0,     0,     0,     0,    32,     0,     0,
        0,     0,     0,     0,    33,    34,    35,    36,    37,     0,
-       0,    38,    39,     0,     1,   -49,     0,     0,     0,     0,
-      41,    42,     0,     0,     0,   312,    43,     2,     0,    44,
-       3,     4,     0,     0,     5,     6,     7,     8,     9,    10,
-      11,     0,    12,     0,    13,     0,    15,    16,     0,     0,
-       0,    17,    18,    19,    20,    21,     0,     0,     0,     0,
-      23,     0,     0,    24,    25,    26,     0,     0,    27,     0,
-       0,     0,    29,    30,    31,     0,     0,     0,     0,     0,
-       0,    32,     0,     0,     0,     0,     0,     0,    33,    34,
-      35,    36,    37,     0,     0,    38,    39,     0,   -52,     1,
-       0,     0,     0,     0,    41,    42,     0,     0,     0,   312,
-      43,     0,     2,    44,     0,     3,     4,     0,     0,     5,
+       0,    38,    39,     0,   -50,     1,     0,     0,     0,     0,
+      41,    42,     0,     0,     0,   312,    43,     0,     2,    44,
+       0,     3,     4,     0,     0,     5,     6,     7,     8,     9,
+      10,    11,     0,    12,     0,    13,     0,    15,    16,     0,
+       0,     0,    17,    18,    19,    20,    21,     0,     0,     0,
+       0,    23,     0,     0,    24,    25,    26,     0,     0,    27,
+       0,     0,     0,    29,    30,    31,     0,     0,     0,     0,
+       0,     0,    32,     0,     0,     0,     0,     0,     0,    33,
+      34,    35,    36,    37,     0,     0,    38,    39,     0,     1,
+       0,   -53,     0,     0,     0,    41,    42,     0,     0,     0,
+     312,    43,     2,     0,    44,     3,     4,     0,     0,     5,
        6,     7,     8,     9,    10,    11,     0,    12,     0,    13,
        0,    15,    16,     0,     0,     0,    17,    18,    19,    20,
       21,     0,     0,     0,     0,    23,     0,     0,    24,    25,
       26,     0,     0,    27,     0,     0,     0,    29,    30,    31,
        0,     0,     0,     0,     0,     0,    32,     0,     0,     0,
        0,     0,     0,    33,    34,    35,    36,    37,     0,     0,
-      38,    39,     0,     1,   359,     0,     0,     0,     0,    41,
+      38,    39,     0,     1,   -50,     0,     0,     0,     0,    41,
       42,     0,     0,     0,   312,    43,     2,     0,    44,     3,
        4,     0,     0,     5,     6,     7,     8,     9,    10,    11,
        0,    12,     0,    13,     0,    15,    16,     0,     0,     0,
@@ -1225,255 +1234,259 @@ static const yytype_int16 yytable[] =
        0,     0,    24,    25,    26,     0,     0,    27,     0,     0,
        0,    29,    30,    31,     0,     0,     0,     0,     0,     0,
       32,     0,     0,     0,     0,     0,     0,    33,    34,    35,
-      36,    37,     0,     0,    38,    39,     0,     1,   366,     0,
+      36,    37,     0,     0,    38,    39,     0,   -53,     1,     0,
        0,     0,     0,    41,    42,     0,     0,     0,   312,    43,
-       2,     0,    44,     3,     4,     0,     0,     5,     6,     7,
-       8,     9,    10,    11,     0,    12,     0,    13,     0,    15,
-      16,     0,     0,     0,    17,    18,    19,    20,    21,     0,
-       0,     0,     0,    23,     0,     0,    24,    25,    26,     0,
-       0,    27,     0,     0,     0,    29,    30,    31,     0,     0,
-       0,     0,     0,     0,    32,     0,     0,     0,     0,     0,
-       0,    33,    34,    35,    36,    37,     0,     0,    38,    39,
-       0,     1,   368,     0,     0,     0,     0,    41,    42,     0,
-       0,     0,   312,    43,     2,     0,    44,     3,     4,     0,
-       0,     5,     6,     7,     8,     9,    10,    11,     0,    12,
-       0,    13,     0,    15,    16,     0,     0,     0,    17,    18,
-      19,    20,     0,     0,     0,     0,     0,     0,     0,     0,
-      24,     0,    26,     0,     0,     0,     0,     0,     0,    29,
-      30,    31,     0,     0,     0,     0,     0,     0,    32,     0,
-       0,     0,     0,     0,     0,    33,    34,    35,    36,    37,
-       0,     0,     1,    39,     0,     0,     0,     0,     0,     0,
-       0,    41,    42,     0,     0,     2,     0,    43,     3,     4,
-      44,     0,     5,     0,     7,     8,     9,    66,    11,     0,
-      12,     0,     0,     0,    15,    16,     0,     0,     0,     1,
-       0,     0,     0,     0,     0,     0,     0,    82,    83,    84,
-      85,    67,     2,    26,     0,     3,     4,     0,     0,     5,
-       0,     7,     8,     9,    66,    11,     0,    12,     0,    32,
-       0,    15,    16,     0,     0,     0,    33,    34,    35,    36,
-      37,     0,     0,     0,    82,     0,    84,     0,    67,     0,
-      26,     0,    41,    42,     0,     0,     0,     0,    43,     0,
-       0,    44,     0,     0,     0,     0,    32,     0,     0,     0,
+       0,     2,    44,     0,     3,     4,     0,     0,     5,     6,
+       7,     8,     9,    10,    11,     0,    12,     0,    13,     0,
+      15,    16,     0,     0,     0,    17,    18,    19,    20,    21,
+       0,     0,     0,     0,    23,     0,     0,    24,    25,    26,
+       0,     0,    27,     0,     0,     0,    29,    30,    31,     0,
+       0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
+       0,     0,    33,    34,    35,    36,    37,     0,     0,    38,
+      39,     0,     1,   364,     0,     0,     0,     0,    41,    42,
+       0,     0,     0,   312,    43,     2,     0,    44,     3,     4,
+       0,     0,     5,     6,     7,     8,     9,    10,    11,     0,
+      12,     0,    13,     0,    15,    16,     0,     0,     0,    17,
+      18,    19,    20,    21,     0,     0,     0,     0,    23,     0,
+       0,    24,    25,    26,     0,     0,    27,     0,     0,     0,
+      29,    30,    31,     0,     0,     0,     0,     0,     0,    32,
+       0,     0,     0,     0,     0,     0,    33,    34,    35,    36,
+      37,     0,     0,    38,    39,     0,     1,   370,     0,     0,
+       0,     0,    41,    42,     0,     0,     0,   312,    43,     2,
+       0,    44,     3,     4,     0,     0,     5,     6,     7,     8,
+       9,    10,    11,     0,    12,     0,    13,     0,    15,    16,
+       0,     0,     0,    17,    18,    19,    20,    21,     0,     0,
+       0,     0,    23,     0,     0,    24,    25,    26,     0,     0,
+      27,     0,     0,     0,    29,    30,    31,     0,     0,     0,
+       0,     0,     0,    32,     0,     0,     0,     0,     0,     0,
+      33,    34,    35,    36,    37,     0,     0,    38,    39,     0,
+       1,   372,     0,     0,     0,     0,    41,    42,     0,     0,
+       0,   312,    43,     2,     0,    44,     3,     4,     0,     0,
+       5,     6,     7,     8,     9,    10,    11,     0,    12,     0,
+      13,     0,    15,    16,     0,     0,     0,    17,    18,    19,
+      20,     0,     0,     0,     0,     0,     0,     0,     0,    24,
+       0,    26,     0,     0,     0,     0,     0,     0,    29,    30,
+      31,     0,     0,     0,     0,     0,     0,    32,     0,     0,
+       0,     0,     0,     0,    33,    34,    35,    36,    37,     0,
+       0,     1,    39,     0,     0,     0,     0,     0,     0,     0,
+      41,    42,     0,     0,     2,     0,    43,     3,     4,    44,
+       0,     5,     0,     7,     8,     9,    66,    11,     0,    12,
+       0,     0,     0,    15,    16,     0,     0,     0,     1,     0,
+       0,     0,     0,     0,     0,     0,    82,    83,    84,    85,
+      67,     2,    26,     0,     3,     4,     0,     0,     5,     0,
+       7,     8,     9,    66,    11,     0,    12,     0,    32,     0,
+      15,    16,     0,     0,     0,    33,    34,    35,    36,    37,
+       0,     0,     0,    82,     0,    84,     0,    67,     0,    26,
+       0,    41,    42,     0,     0,     0,     0,    43,     0,     0,
+      44,     0,     0,     0,     0,    32,     0,     0,     0,     0,
+       0,     0,    33,    34,    35,    36,    37,     0,     0,     1,
+       0,     0,     0,     0,     0,     0,     0,     0,    41,    42,
+       0,     0,     2,     0,    43,     3,     4,    44,     0,     5,
+       0,     7,     8,     9,    66,    11,     0,    12,     0,     0,
+       0,    15,    16,     0,     0,     0,     1,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    67,     2,
+      26,     0,     3,     4,     0,     0,     5,     0,     7,     8,
+       9,   153,    11,     0,    12,     0,    32,     0,    15,    16,
        0,     0,     0,    33,    34,    35,    36,    37,     0,     0,
-       1,     0,     0,     0,     0,     0,     0,     0,     0,    41,
-      42,     0,     0,     2,     0,    43,     3,     4,    44,     0,
-       5,     0,     7,     8,     9,    66,    11,     0,    12,     0,
-       0,     0,    15,    16,     0,     0,     0,     1,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    67,
-       2,    26,     0,     3,     4,     0,     0,     5,     0,     7,
-       8,     9,   153,    11,     0,    12,     0,    32,     0,    15,
-      16,     0,     0,     0,    33,    34,    35,    36,    37,     0,
-       0,     0,     0,     0,     0,     0,    67,     0,    26,     0,
-      41,    42,     0,     0,     0,     0,    43,  -162,  -162,    44,
-       0,     0,     0,     0,    32,     0,     0,     0,     0,     0,
-       0,    33,    34,    35,    36,    37,     0,     0,     0,     0,
-       0,     0,     0,     0,     1,     0,     0,    41,    42,     0,
-       0,     0,     0,    43,  -162,  -162,    44,     2,     0,     0,
-       3,     4,     0,    90,     5,     0,     7,     8,     9,    66,
-      11,     0,    12,     0,     1,     0,    15,    16,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     2,     0,     0,
-       3,     4,     0,    67,     5,    26,     7,     8,     9,    66,
-      11,     0,    12,     0,     0,     0,    15,    16,     0,     0,
-       0,    32,     0,     0,     0,     0,     0,     0,    33,    34,
-      35,    36,    37,    67,     0,    26,     0,     0,     0,     0,
-       0,     0,     0,     0,    41,    42,     0,     0,     0,     0,
-      43,    32,     0,    44,     0,     0,     0,     0,    33,    34,
-      35,    36,    37,     0,     0,     0,     0,     0,    82,     0,
-      84,     0,     0,     0,    41,    42,     0,     0,     0,     0,
-      43,     0,     0,    44,   128,   129,   130,   131,   132,   133,
-       0,   134,     0,     0,   135,   136,   137,     0,     0,     0,
-       0,     0,     0,   182,     0,     0,     0,     0,     0,   183,
-     138,   139,   140,   141,   142,   143,   144,   128,   129,   130,
-     131,   132,   133,     0,   134,     0,     0,   135,   136,   137,
-       0,     0,     0,     0,     0,     0,   184,     0,     0,     0,
-       0,     0,   185,   138,   139,   140,   141,   142,   143,   144,
-     128,   129,   130,   131,   132,   133,     0,   134,     0,     0,
-     135,   136,   137,     0,     0,     0,     0,     0,     0,   186,
-       0,     0,     0,     0,     0,   187,   138,   139,   140,   141,
-     142,   143,   144,   128,   129,   130,   131,   132,   133,     0,
+       0,     0,     0,     0,     0,    67,     0,    26,     0,    41,
+      42,     0,     0,     0,     0,    43,  -163,  -163,    44,     0,
+       0,     0,     0,    32,     0,     0,     0,     0,     0,     0,
+      33,    34,    35,    36,    37,     0,     0,     0,     0,     0,
+       0,     0,     0,     1,     0,     0,    41,    42,     0,     0,
+       0,     0,    43,  -163,  -163,    44,     2,     0,     0,     3,
+       4,     0,    90,     5,     0,     7,     8,     9,    66,    11,
+       0,    12,     0,     1,     0,    15,    16,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     2,     0,     0,     3,
+       4,     0,    67,     5,    26,     7,     8,     9,    66,    11,
+       0,    12,     0,     0,     0,    15,    16,     0,     0,     0,
+      32,     0,     0,     0,     0,     0,     0,    33,    34,    35,
+      36,    37,    67,     0,    26,     0,     0,     0,     0,     0,
+       0,     0,     0,    41,    42,     0,     0,     0,     0,    43,
+      32,     0,    44,     0,     0,     0,     0,    33,    34,    35,
+      36,    37,     0,     0,     0,     0,     0,    82,     0,    84,
+       0,     0,     0,    41,    42,     0,     0,     0,     0,    43,
+       0,     0,    44,   128,   129,   130,   131,   132,   133,     0,
      134,     0,     0,   135,   136,   137,     0,     0,     0,     0,
-       0,     0,   188,     0,     0,     0,     0,     0,   189,   138,
+       0,     0,   182,     0,     0,     0,     0,     0,   183,   138,
      139,   140,   141,   142,   143,   144,   128,   129,   130,   131,
      132,   133,     0,   134,     0,     0,   135,   136,   137,     0,
-       0,     0,     0,     0,     0,   288,     0,     0,     0,     0,
-       0,     0,   138,   139,   140,   141,   142,   143,   144,   128,
+       0,     0,     0,     0,     0,   184,     0,     0,     0,     0,
+       0,   185,   138,   139,   140,   141,   142,   143,   144,   128,
      129,   130,   131,   132,   133,     0,   134,     0,     0,   135,
-     136,   137,     0,     0,     0,     0,     0,     0,   289,     0,
-       0,     0,     0,     0,     0,   138,   139,   140,   141,   142,
+     136,   137,     0,     0,     0,     0,     0,     0,   186,     0,
+       0,     0,     0,     0,   187,   138,   139,   140,   141,   142,
      143,   144,   128,   129,   130,   131,   132,   133,     0,   134,
        0,     0,   135,   136,   137,     0,     0,     0,     0,     0,
-       0,   290,     0,     0,     0,     0,     0,     0,   138,   139,
+       0,   188,     0,     0,     0,     0,     0,   189,   138,   139,
      140,   141,   142,   143,   144,   128,   129,   130,   131,   132,
      133,     0,   134,     0,     0,   135,   136,   137,     0,     0,
-       0,     0,     0,     0,   291,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   288,     0,     0,     0,     0,     0,
        0,   138,   139,   140,   141,   142,   143,   144,   128,   129,
      130,   131,   132,   133,     0,   134,     0,     0,   135,   136,
-     137,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     137,     0,     0,     0,     0,     0,     0,   289,     0,     0,
        0,     0,     0,     0,   138,   139,   140,   141,   142,   143,
-     144,   178,     0,     0,     0,     0,     0,   128,   129,   130,
+     144,   128,   129,   130,   131,   132,   133,     0,   134,     0,
+       0,   135,   136,   137,     0,     0,     0,     0,     0,     0,
+     290,     0,     0,     0,     0,     0,     0,   138,   139,   140,
+     141,   142,   143,   144,   128,   129,   130,   131,   132,   133,
+       0,   134,     0,     0,   135,   136,   137,     0,     0,     0,
+       0,     0,     0,   291,     0,     0,     0,     0,     0,     0,
+     138,   139,   140,   141,   142,   143,   144,   128,   129,   130,
      131,   132,   133,     0,   134,     0,     0,   135,   136,   137,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   192,   138,   139,   140,   141,   142,   143,   144,
      128,   129,   130,   131,   132,   133,     0,   134,     0,     0,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     135,   136,   137,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,   138,   139,   140,   141,
-     142,   143,   144,     0,     0,     0,   197,   128,   129,   130,
-     131,   132,   133,     0,   134,     0,     0,   135,   136,   137,
-       0,     0,     0,     0,     0,   190,   191,     0,     0,     0,
-       0,     0,     0,   138,   139,   140,   141,   142,   143,   144,
-     128,   129,   130,   131,   132,   133,     0,   134,     0,     0,
-     135,   136,   137,   128,   129,   130,   131,     0,     0,     0,
-     134,     0,     0,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,     0,     0,     0,     0,     0,     0,   138,
-     139,   140,   141,   142,   143,   144
+     142,   143,   144,   178,   193,     0,     0,     0,     0,   128,
+     129,   130,   131,   132,   133,     0,   134,     0,     0,   135,
+     136,   137,   128,   129,   130,   131,   132,   133,     0,   134,
+       0,     0,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,     0,     0,     0,     0,     0,     0,   138,   139,
+     140,   141,   142,   143,   144,     0,     0,     0,   197,   128,
+     129,   130,   131,   132,   133,     0,   134,     0,     0,   135,
+     136,   137,     0,     0,     0,     0,     0,   190,   191,     0,
+       0,     0,     0,     0,     0,   138,   139,   140,   141,   142,
+     143,   144,   128,   129,   130,   131,   132,   133,     0,   134,
+       0,     0,   135,   136,   137,   128,   129,   130,   131,     0,
+       0,     0,   134,     0,     0,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,     0,     0,     0,     0,     0,
+       0,   138,   139,   140,   141,   142,   143,   144
 };
 
 static const yytype_int16 yycheck[] =
 {
-       6,     7,    79,    30,    10,   277,   305,     4,    97,    98,
-      99,     8,    54,    19,    96,     0,    93,   157,    24,     6,
-       7,    43,    64,    29,    30,    69,    32,    33,    34,    35,
-      36,    37,    38,    69,    54,    41,    42,    43,    44,    56,
-      57,    24,    64,    26,    64,    51,    48,   319,    96,    93,
-      94,    99,    98,    99,     1,    91,    92,    93,    94,    86,
-      51,    67,    68,   362,    27,    71,    29,    14,    54,    75,
-      17,    18,    78,    51,    21,   102,    82,    74,    64,    26,
-      27,    68,    29,    26,    71,    69,   242,    96,    72,    26,
-      99,    78,    75,    76,    77,    78,     0,    96,    95,    96,
-      99,    96,    17,    18,    19,    97,    90,    91,    92,    93,
-      94,    26,    36,    37,    26,    46,    98,    99,    33,    98,
-      99,    26,   128,   129,   130,   131,   132,   133,   134,   135,
+       6,     7,    79,    96,    10,   277,    99,     4,   323,    54,
+      96,     8,    30,    19,    48,     0,    93,   157,    24,    64,
+     273,    56,    57,    29,    30,    69,    32,    33,    34,    35,
+      36,    37,    38,    69,    51,    41,    42,    43,    44,     6,
+       7,    54,    24,   296,    26,    51,   299,   319,   363,    93,
+      94,    64,   305,    54,     1,    91,    92,    93,    94,    98,
+      99,    67,    68,    64,    43,    71,   349,    14,    86,    75,
+      17,    18,    78,    26,    21,   328,    82,    74,   361,    26,
+      27,   334,    29,   366,   102,    64,   242,    96,    96,    51,
+      99,    99,    26,    75,    76,    77,    78,     0,    95,    96,
+      96,    68,   355,    27,    71,    29,   359,    97,    98,    99,
+      97,    78,   365,    99,    98,    99,   369,    98,    99,    99,
+      98,    99,   128,   129,   130,   131,   132,   133,   134,   135,
      136,   137,   138,   139,   140,   141,   142,   143,   144,   279,
-     146,   126,    98,    99,   150,    99,    99,    26,    26,   155,
-      97,    54,    53,   100,    26,   161,    26,   234,    26,   101,
+     146,   126,    36,    37,   150,    26,    46,    26,    26,   155,
+      97,    26,    54,   100,    53,   161,    26,   234,    26,    26,
      166,   167,   102,   169,   170,   171,   102,   164,   174,   175,
-     176,   177,   178,   329,    99,    26,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   273,    48,    99,   345,
-      99,    99,    99,    53,    26,   201,   283,    44,    26,   355,
-      26,   198,   199,    26,    26,   361,    54,    87,    26,   296,
-      86,    54,   299,    99,    35,   292,   293,    54,    54,    85,
-      26,    85,    53,   264,   126,   302,    62,    63,    64,    65,
-      66,    67,   193,    69,   240,   241,    72,    73,    74,   245,
-     246,   328,   304,   165,   276,   202,    -1,   334,    -1,   326,
-      -1,    -1,    88,    89,    90,    91,    92,    93,    94,    -1,
-      96,   348,    -1,    -1,    -1,    -1,    35,   344,    -1,    -1,
-     276,   358,    -1,   360,   280,    -1,    -1,   364,    -1,    -1,
+     176,   177,   178,   329,   101,    26,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,    69,    99,    99,    72,
+     346,    99,    48,    99,    99,   201,    17,    18,    19,    35,
+     356,   198,   199,    53,    26,    26,   362,    90,    91,    92,
+      93,    94,    33,    44,    26,   292,   293,    26,    26,    26,
+      54,    87,    26,    86,    54,   302,    62,    63,    64,    65,
+      66,    67,    35,    69,   240,   241,    72,    73,    74,   245,
+     246,    85,    99,    54,    26,    85,   126,    53,   264,   326,
+     193,   304,    88,    89,    90,    91,    92,    93,    94,    -1,
+     202,   165,   276,    -1,    -1,    -1,    -1,    -1,   345,    -1,
+     276,    -1,    -1,    -1,   280,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,   288,   289,   290,   291,    -1,    -1,    -1,   286,
-      -1,    -1,    -1,    62,    63,    64,    65,    66,    67,    -1,
-      69,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,     0,     1,   324,    88,
-      89,    90,    91,    92,    93,    94,    -1,    -1,    -1,   335,
-      14,    -1,    -1,    17,    18,    -1,   342,    21,    22,    23,
-      24,    25,    26,    27,   350,    29,    30,    31,    -1,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    -1,
-      44,    -1,    46,    47,    48,    -1,    50,    51,    52,    53,
-      54,    55,    56,    -1,    -1,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      -1,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,     1,    96,    97,    98,    99,   100,   101,    -1,    -1,
-      -1,    -1,    -1,    -1,    14,    -1,    -1,    17,    18,    -1,
-      -1,    21,    -1,    23,    24,    25,    26,    27,    -1,    29,
-      -1,    -1,    -1,    33,    34,    -1,    44,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      50,    -1,    52,    -1,    62,    63,    64,    65,    66,    67,
-      -1,    69,    70,    71,    72,    73,    74,    -1,    68,    -1,
-      -1,    -1,    -1,    -1,    -1,    75,    76,    77,    78,    79,
-      88,    89,    90,    91,    92,    93,    94,    -1,    -1,     0,
-       1,    91,    92,    -1,    -1,    -1,    -1,    97,    -1,    -1,
-     100,   101,   102,    14,    -1,    -1,    17,    18,    -1,    -1,
-      21,    22,    23,    24,    25,    26,    27,    -1,    29,    30,
-      31,    -1,    33,    34,    -1,    36,    37,    38,    39,    40,
-      41,    42,    -1,    -1,    -1,    -1,    47,    -1,    -1,    50,
-      51,    52,    -1,    -1,    55,    -1,    -1,    -1,    59,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    -1,
-      -1,    72,    73,    74,    75,    76,    77,    78,    79,    -1,
-      -1,    82,    83,    -1,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    -1,    96,    97,     0,     1,   100,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    14,    -1,    -1,    17,    18,    -1,    -1,    21,    22,
-      23,    24,    25,    26,    27,    -1,    29,    30,    31,    -1,
-      33,    34,    -1,    36,    37,    38,    39,    40,    41,    42,
-      -1,    -1,    -1,    -1,    47,    -1,    -1,    50,    51,    52,
-      -1,    -1,    55,    -1,    -1,    -1,    59,    60,    61,    -1,
-      -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,
-      -1,    -1,    75,    76,    77,    78,    79,    -1,    -1,    82,
-      83,    -1,    85,    86,    87,     0,     1,    -1,    91,    92,
-      -1,    -1,    -1,    96,    97,    -1,    99,   100,    -1,    14,
-      -1,    -1,    17,    18,    -1,    -1,    21,    22,    23,    24,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   324,    -1,
+      -1,    -1,    -1,    -1,    -1,     0,     1,    -1,    -1,   335,
+      -1,    -1,    -1,    -1,    -1,    -1,   342,    -1,    -1,    14,
+      -1,    -1,    17,    18,    -1,   351,    21,    22,    23,    24,
       25,    26,    27,    -1,    29,    30,    31,    -1,    33,    34,
-      -1,    36,    37,    38,    39,    40,    41,    42,    -1,    -1,
-      -1,    -1,    47,    -1,    -1,    50,    51,    52,    -1,    -1,
-      55,    -1,    -1,    -1,    59,    60,    61,    -1,    -1,    -1,
-      -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,
-      75,    76,    77,    78,    79,    -1,    -1,    82,    83,    -1,
-      85,    86,    87,     0,     1,    -1,    91,    92,    -1,    -1,
-      -1,    96,    97,    -1,    99,   100,    -1,    14,    -1,    -1,
-      17,    18,    -1,    -1,    21,    22,    23,    24,    25,    26,
-      27,    -1,    29,    -1,    31,    32,    33,    34,    -1,    -1,
-      -1,    38,    39,    40,    41,    42,    -1,    -1,    45,    -1,
-      47,    -1,    -1,    50,    51,    52,    -1,    -1,    55,    -1,
-      -1,    58,    59,    60,    61,    -1,    -1,    -1,    -1,    -1,
-      -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,    75,    76,
-      77,    78,    79,    -1,    -1,    82,    83,    84,     0,     1,
-      -1,    -1,    -1,    -1,    91,    92,    -1,    -1,    -1,    96,
-      97,    -1,    14,   100,    -1,    17,    18,    -1,    -1,    21,
+      35,    36,    37,    38,    39,    40,    41,    42,    -1,    44,
+      -1,    46,    47,    48,    -1,    50,    51,    52,    53,    54,
+      55,    56,    -1,    -1,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    -1,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+       1,    96,    97,    98,    99,   100,   101,    -1,    -1,    -1,
+      -1,    -1,    -1,    14,    -1,    -1,    17,    18,    -1,    -1,
+      21,    -1,    23,    24,    25,    26,    27,    -1,    29,    -1,
+      -1,    -1,    33,    34,    -1,    44,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    50,
+      -1,    52,    -1,    62,    63,    64,    65,    66,    67,    -1,
+      69,    70,    71,    72,    73,    74,    -1,    68,    -1,    -1,
+      -1,    -1,    -1,    -1,    75,    76,    77,    78,    79,    88,
+      89,    90,    91,    92,    93,    94,    -1,    -1,     0,     1,
+      91,    92,    -1,    -1,    -1,    -1,    97,    -1,    -1,   100,
+     101,   102,    14,    -1,    -1,    17,    18,    -1,    -1,    21,
       22,    23,    24,    25,    26,    27,    -1,    29,    30,    31,
-      -1,    33,    34,    -1,    -1,    -1,    38,    39,    40,    41,
+      -1,    33,    34,    -1,    36,    37,    38,    39,    40,    41,
       42,    -1,    -1,    -1,    -1,    47,    -1,    -1,    50,    51,
       52,    -1,    -1,    55,    -1,    -1,    -1,    59,    60,    61,
-      -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    -1,
-      -1,    -1,    -1,    75,    76,    77,    78,    79,    -1,    -1,
-      82,    83,     0,     1,    -1,    -1,    -1,    -1,    -1,    91,
-      92,    -1,    -1,    -1,    96,    97,    14,    -1,   100,    17,
-      18,    -1,    -1,    21,    22,    23,    24,    25,    26,    27,
-      -1,    29,    -1,    31,    -1,    33,    34,    -1,    -1,    -1,
-      38,    39,    40,    41,    42,    -1,    -1,    -1,    -1,    47,
-      -1,    -1,    50,    51,    52,    -1,    -1,    55,    -1,    -1,
-      -1,    59,    60,    61,    -1,    -1,    -1,    -1,    -1,    -1,
-      68,    -1,    -1,    -1,    -1,    -1,    -1,    75,    76,    77,
-      78,    79,    -1,    -1,    82,    83,     0,     1,    -1,    -1,
-      -1,    -1,    -1,    91,    92,    -1,    -1,    -1,    96,    97,
-      14,    -1,   100,    17,    18,    -1,    -1,    21,    22,    23,
-      24,    25,    26,    27,    -1,    29,    -1,    31,    -1,    33,
-      34,    -1,    -1,    -1,    38,    39,    40,    41,    42,    -1,
+      62,    63,    64,    65,    66,    67,    68,    69,    -1,    -1,
+      72,    73,    74,    75,    76,    77,    78,    79,    -1,    -1,
+      82,    83,    -1,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    -1,    96,    97,     0,     1,   100,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      14,    -1,    -1,    17,    18,    -1,    -1,    21,    22,    23,
+      24,    25,    26,    27,    -1,    29,    30,    31,    -1,    33,
+      34,    -1,    36,    37,    38,    39,    40,    41,    42,    -1,
       -1,    -1,    -1,    47,    -1,    -1,    50,    51,    52,    -1,
       -1,    55,    -1,    -1,    -1,    59,    60,    61,    -1,    -1,
       -1,    -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,
       -1,    75,    76,    77,    78,    79,    -1,    -1,    82,    83,
-      -1,     1,    -1,    -1,    -1,    -1,    -1,    91,    92,    -1,
-      -1,    -1,    96,    97,    14,    -1,   100,    17,    18,    -1,
-      -1,    21,    22,    23,    24,    25,    26,    27,    -1,    29,
-      -1,    31,    -1,    33,    34,    -1,    36,    37,    38,    39,
-      40,    41,    42,    -1,    -1,    -1,    -1,    47,    -1,    -1,
-      50,    51,    52,    -1,    -1,    55,    -1,    -1,    -1,    59,
-      60,    61,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,
-      -1,    -1,    -1,    -1,    -1,    75,    76,    77,    78,    79,
-      -1,    -1,    82,    83,    -1,    85,     1,    -1,    -1,    -1,
-      -1,    91,    92,    -1,    -1,    -1,    96,    97,    -1,    14,
-     100,    -1,    17,    18,    -1,    -1,    21,    22,    23,    24,
+      -1,    85,    86,    87,     0,     1,    -1,    91,    92,    -1,
+      -1,    -1,    96,    97,    -1,    99,   100,    -1,    14,    -1,
+      -1,    17,    18,    -1,    -1,    21,    22,    23,    24,    25,
+      26,    27,    -1,    29,    30,    31,    -1,    33,    34,    -1,
+      36,    37,    38,    39,    40,    41,    42,    -1,    -1,    -1,
+      -1,    47,    -1,    -1,    50,    51,    52,    -1,    -1,    55,
+      -1,    -1,    -1,    59,    60,    61,    -1,    -1,    -1,    -1,
+      -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,    75,
+      76,    77,    78,    79,    -1,    -1,    82,    83,    -1,    85,
+      86,    87,     0,     1,    -1,    91,    92,    -1,    -1,    -1,
+      96,    97,    -1,    99,   100,    -1,    14,    -1,    -1,    17,
+      18,    -1,    -1,    21,    22,    23,    24,    25,    26,    27,
+      -1,    29,    -1,    31,    32,    33,    34,    -1,    -1,    -1,
+      38,    39,    40,    41,    42,    -1,    -1,    45,    -1,    47,
+      -1,    -1,    50,    51,    52,    -1,    -1,    55,    -1,    -1,
+      58,    59,    60,    61,    -1,    -1,    -1,    -1,    -1,    -1,
+      68,    -1,    -1,    -1,    -1,    -1,    -1,    75,    76,    77,
+      78,    79,    -1,    -1,    82,    83,    84,     0,     1,    -1,
+      -1,    -1,    -1,    91,    92,    -1,    -1,    -1,    96,    97,
+      -1,    14,   100,    -1,    17,    18,    -1,    -1,    21,    22,
+      23,    24,    25,    26,    27,    -1,    29,    30,    31,    -1,
+      33,    34,    -1,    -1,    -1,    38,    39,    40,    41,    42,
+      -1,    -1,    -1,    -1,    47,    -1,    -1,    50,    51,    52,
+      -1,    -1,    55,    -1,    -1,    -1,    59,    60,    61,    -1,
+      -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,
+      -1,    -1,    75,    76,    77,    78,    79,    -1,    -1,    82,
+      83,     0,     1,    -1,    -1,    -1,    -1,    -1,    91,    92,
+      -1,    -1,    -1,    96,    97,    14,    -1,   100,    17,    18,
+      -1,    -1,    21,    22,    23,    24,    25,    26,    27,    -1,
+      29,    -1,    31,    -1,    33,    34,    -1,    -1,    -1,    38,
+      39,    40,    41,    42,    -1,    -1,    -1,    -1,    47,    -1,
+      -1,    50,    51,    52,    -1,    -1,    55,    -1,    -1,    -1,
+      59,    60,    61,    -1,    -1,    -1,    -1,    -1,    -1,    68,
+      -1,    -1,    -1,    -1,    -1,    -1,    75,    76,    77,    78,
+      79,    -1,    -1,    82,    83,     0,     1,    -1,    -1,    -1,
+      -1,    -1,    91,    92,    -1,    -1,    -1,    96,    97,    14,
+      -1,   100,    17,    18,    -1,    -1,    21,    22,    23,    24,
       25,    26,    27,    -1,    29,    -1,    31,    -1,    33,    34,
       -1,    -1,    -1,    38,    39,    40,    41,    42,    -1,    -1,
       -1,    -1,    47,    -1,    -1,    50,    51,    52,    -1,    -1,
       55,    -1,    -1,    -1,    59,    60,    61,    -1,    -1,    -1,
       -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,
       75,    76,    77,    78,    79,    -1,    -1,    82,    83,    -1,
-       1,    -1,    87,    -1,    -1,    -1,    91,    92,    -1,    -1,
+       1,    -1,    -1,    -1,    -1,    -1,    91,    92,    -1,    -1,
       -1,    96,    97,    14,    -1,   100,    17,    18,    -1,    -1,
       21,    22,    23,    24,    25,    26,    27,    -1,    29,    -1,
-      31,    -1,    33,    34,    -1,    -1,    -1,    38,    39,    40,
+      31,    -1,    33,    34,    -1,    36,    37,    38,    39,    40,
       41,    42,    -1,    -1,    -1,    -1,    47,    -1,    -1,    50,
       51,    52,    -1,    -1,    55,    -1,    -1,    -1,    59,    60,
       61,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,
       -1,    -1,    -1,    -1,    75,    76,    77,    78,    79,    -1,
-      -1,    82,    83,    -1,     1,    86,    -1,    -1,    -1,    -1,
-      91,    92,    -1,    -1,    -1,    96,    97,    14,    -1,   100,
-      17,    18,    -1,    -1,    21,    22,    23,    24,    25,    26,
-      27,    -1,    29,    -1,    31,    -1,    33,    34,    -1,    -1,
-      -1,    38,    39,    40,    41,    42,    -1,    -1,    -1,    -1,
-      47,    -1,    -1,    50,    51,    52,    -1,    -1,    55,    -1,
-      -1,    -1,    59,    60,    61,    -1,    -1,    -1,    -1,    -1,
-      -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,    75,    76,
-      77,    78,    79,    -1,    -1,    82,    83,    -1,    85,     1,
-      -1,    -1,    -1,    -1,    91,    92,    -1,    -1,    -1,    96,
-      97,    -1,    14,   100,    -1,    17,    18,    -1,    -1,    21,
+      -1,    82,    83,    -1,    85,     1,    -1,    -1,    -1,    -1,
+      91,    92,    -1,    -1,    -1,    96,    97,    -1,    14,   100,
+      -1,    17,    18,    -1,    -1,    21,    22,    23,    24,    25,
+      26,    27,    -1,    29,    -1,    31,    -1,    33,    34,    -1,
+      -1,    -1,    38,    39,    40,    41,    42,    -1,    -1,    -1,
+      -1,    47,    -1,    -1,    50,    51,    52,    -1,    -1,    55,
+      -1,    -1,    -1,    59,    60,    61,    -1,    -1,    -1,    -1,
+      -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,    75,
+      76,    77,    78,    79,    -1,    -1,    82,    83,    -1,     1,
+      -1,    87,    -1,    -1,    -1,    91,    92,    -1,    -1,    -1,
+      96,    97,    14,    -1,   100,    17,    18,    -1,    -1,    21,
       22,    23,    24,    25,    26,    27,    -1,    29,    -1,    31,
       -1,    33,    34,    -1,    -1,    -1,    38,    39,    40,    41,
       42,    -1,    -1,    -1,    -1,    47,    -1,    -1,    50,    51,
@@ -1488,104 +1501,124 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    50,    51,    52,    -1,    -1,    55,    -1,    -1,
       -1,    59,    60,    61,    -1,    -1,    -1,    -1,    -1,    -1,
       68,    -1,    -1,    -1,    -1,    -1,    -1,    75,    76,    77,
-      78,    79,    -1,    -1,    82,    83,    -1,     1,    86,    -1,
+      78,    79,    -1,    -1,    82,    83,    -1,    85,     1,    -1,
       -1,    -1,    -1,    91,    92,    -1,    -1,    -1,    96,    97,
-      14,    -1,   100,    17,    18,    -1,    -1,    21,    22,    23,
-      24,    25,    26,    27,    -1,    29,    -1,    31,    -1,    33,
-      34,    -1,    -1,    -1,    38,    39,    40,    41,    42,    -1,
-      -1,    -1,    -1,    47,    -1,    -1,    50,    51,    52,    -1,
-      -1,    55,    -1,    -1,    -1,    59,    60,    61,    -1,    -1,
-      -1,    -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,
-      -1,    75,    76,    77,    78,    79,    -1,    -1,    82,    83,
-      -1,     1,    86,    -1,    -1,    -1,    -1,    91,    92,    -1,
-      -1,    -1,    96,    97,    14,    -1,   100,    17,    18,    -1,
-      -1,    21,    22,    23,    24,    25,    26,    27,    -1,    29,
-      -1,    31,    -1,    33,    34,    -1,    -1,    -1,    38,    39,
-      40,    41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      50,    -1,    52,    -1,    -1,    -1,    -1,    -1,    -1,    59,
-      60,    61,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,
-      -1,    -1,    -1,    -1,    -1,    75,    76,    77,    78,    79,
-      -1,    -1,     1,    83,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    91,    92,    -1,    -1,    14,    -1,    97,    17,    18,
-     100,    -1,    21,    -1,    23,    24,    25,    26,    27,    -1,
-      29,    -1,    -1,    -1,    33,    34,    -1,    -1,    -1,     1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,
-      49,    50,    14,    52,    -1,    17,    18,    -1,    -1,    21,
-      -1,    23,    24,    25,    26,    27,    -1,    29,    -1,    68,
-      -1,    33,    34,    -1,    -1,    -1,    75,    76,    77,    78,
-      79,    -1,    -1,    -1,    46,    -1,    48,    -1,    50,    -1,
-      52,    -1,    91,    92,    -1,    -1,    -1,    -1,    97,    -1,
-      -1,   100,    -1,    -1,    -1,    -1,    68,    -1,    -1,    -1,
+      -1,    14,   100,    -1,    17,    18,    -1,    -1,    21,    22,
+      23,    24,    25,    26,    27,    -1,    29,    -1,    31,    -1,
+      33,    34,    -1,    -1,    -1,    38,    39,    40,    41,    42,
+      -1,    -1,    -1,    -1,    47,    -1,    -1,    50,    51,    52,
+      -1,    -1,    55,    -1,    -1,    -1,    59,    60,    61,    -1,
+      -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,
+      -1,    -1,    75,    76,    77,    78,    79,    -1,    -1,    82,
+      83,    -1,     1,    86,    -1,    -1,    -1,    -1,    91,    92,
+      -1,    -1,    -1,    96,    97,    14,    -1,   100,    17,    18,
+      -1,    -1,    21,    22,    23,    24,    25,    26,    27,    -1,
+      29,    -1,    31,    -1,    33,    34,    -1,    -1,    -1,    38,
+      39,    40,    41,    42,    -1,    -1,    -1,    -1,    47,    -1,
+      -1,    50,    51,    52,    -1,    -1,    55,    -1,    -1,    -1,
+      59,    60,    61,    -1,    -1,    -1,    -1,    -1,    -1,    68,
+      -1,    -1,    -1,    -1,    -1,    -1,    75,    76,    77,    78,
+      79,    -1,    -1,    82,    83,    -1,     1,    86,    -1,    -1,
+      -1,    -1,    91,    92,    -1,    -1,    -1,    96,    97,    14,
+      -1,   100,    17,    18,    -1,    -1,    21,    22,    23,    24,
+      25,    26,    27,    -1,    29,    -1,    31,    -1,    33,    34,
+      -1,    -1,    -1,    38,    39,    40,    41,    42,    -1,    -1,
+      -1,    -1,    47,    -1,    -1,    50,    51,    52,    -1,    -1,
+      55,    -1,    -1,    -1,    59,    60,    61,    -1,    -1,    -1,
+      -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,
+      75,    76,    77,    78,    79,    -1,    -1,    82,    83,    -1,
+       1,    86,    -1,    -1,    -1,    -1,    91,    92,    -1,    -1,
+      -1,    96,    97,    14,    -1,   100,    17,    18,    -1,    -1,
+      21,    22,    23,    24,    25,    26,    27,    -1,    29,    -1,
+      31,    -1,    33,    34,    -1,    -1,    -1,    38,    39,    40,
+      41,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    50,
+      -1,    52,    -1,    -1,    -1,    -1,    -1,    -1,    59,    60,
+      61,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,
+      -1,    -1,    -1,    -1,    75,    76,    77,    78,    79,    -1,
+      -1,     1,    83,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      91,    92,    -1,    -1,    14,    -1,    97,    17,    18,   100,
+      -1,    21,    -1,    23,    24,    25,    26,    27,    -1,    29,
+      -1,    -1,    -1,    33,    34,    -1,    -1,    -1,     1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    46,    47,    48,    49,
+      50,    14,    52,    -1,    17,    18,    -1,    -1,    21,    -1,
+      23,    24,    25,    26,    27,    -1,    29,    -1,    68,    -1,
+      33,    34,    -1,    -1,    -1,    75,    76,    77,    78,    79,
+      -1,    -1,    -1,    46,    -1,    48,    -1,    50,    -1,    52,
+      -1,    91,    92,    -1,    -1,    -1,    -1,    97,    -1,    -1,
+     100,    -1,    -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,
+      -1,    -1,    75,    76,    77,    78,    79,    -1,    -1,     1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,
+      -1,    -1,    14,    -1,    97,    17,    18,   100,    -1,    21,
+      -1,    23,    24,    25,    26,    27,    -1,    29,    -1,    -1,
+      -1,    33,    34,    -1,    -1,    -1,     1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    50,    14,
+      52,    -1,    17,    18,    -1,    -1,    21,    -1,    23,    24,
+      25,    26,    27,    -1,    29,    -1,    68,    -1,    33,    34,
       -1,    -1,    -1,    75,    76,    77,    78,    79,    -1,    -1,
-       1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,
-      92,    -1,    -1,    14,    -1,    97,    17,    18,   100,    -1,
-      21,    -1,    23,    24,    25,    26,    27,    -1,    29,    -1,
-      -1,    -1,    33,    34,    -1,    -1,    -1,     1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    50,
-      14,    52,    -1,    17,    18,    -1,    -1,    21,    -1,    23,
-      24,    25,    26,    27,    -1,    29,    -1,    68,    -1,    33,
-      34,    -1,    -1,    -1,    75,    76,    77,    78,    79,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    50,    -1,    52,    -1,
-      91,    92,    -1,    -1,    -1,    -1,    97,    98,    99,   100,
-      -1,    -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,
-      -1,    75,    76,    77,    78,    79,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,     1,    -1,    -1,    91,    92,    -1,
-      -1,    -1,    -1,    97,    98,    99,   100,    14,    -1,    -1,
-      17,    18,    -1,    20,    21,    -1,    23,    24,    25,    26,
-      27,    -1,    29,    -1,     1,    -1,    33,    34,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    14,    -1,    -1,
-      17,    18,    -1,    50,    21,    52,    23,    24,    25,    26,
-      27,    -1,    29,    -1,    -1,    -1,    33,    34,    -1,    -1,
-      -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,    75,    76,
-      77,    78,    79,    50,    -1,    52,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    91,    92,    -1,    -1,    -1,    -1,
-      97,    68,    -1,   100,    -1,    -1,    -1,    -1,    75,    76,
-      77,    78,    79,    -1,    -1,    -1,    -1,    -1,    46,    -1,
-      48,    -1,    -1,    -1,    91,    92,    -1,    -1,    -1,    -1,
-      97,    -1,    -1,   100,    62,    63,    64,    65,    66,    67,
-      -1,    69,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,
-      -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    54,
-      88,    89,    90,    91,    92,    93,    94,    62,    63,    64,
-      65,    66,    67,    -1,    69,    -1,    -1,    72,    73,    74,
-      -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,    -1,    -1,
-      -1,    -1,    54,    88,    89,    90,    91,    92,    93,    94,
-      62,    63,    64,    65,    66,    67,    -1,    69,    -1,    -1,
-      72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    48,
-      -1,    -1,    -1,    -1,    -1,    54,    88,    89,    90,    91,
-      92,    93,    94,    62,    63,    64,    65,    66,    67,    -1,
+      -1,    -1,    -1,    -1,    -1,    50,    -1,    52,    -1,    91,
+      92,    -1,    -1,    -1,    -1,    97,    98,    99,   100,    -1,
+      -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,
+      75,    76,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,     1,    -1,    -1,    91,    92,    -1,    -1,
+      -1,    -1,    97,    98,    99,   100,    14,    -1,    -1,    17,
+      18,    -1,    20,    21,    -1,    23,    24,    25,    26,    27,
+      -1,    29,    -1,     1,    -1,    33,    34,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    14,    -1,    -1,    17,
+      18,    -1,    50,    21,    52,    23,    24,    25,    26,    27,
+      -1,    29,    -1,    -1,    -1,    33,    34,    -1,    -1,    -1,
+      68,    -1,    -1,    -1,    -1,    -1,    -1,    75,    76,    77,
+      78,    79,    50,    -1,    52,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    91,    92,    -1,    -1,    -1,    -1,    97,
+      68,    -1,   100,    -1,    -1,    -1,    -1,    75,    76,    77,
+      78,    79,    -1,    -1,    -1,    -1,    -1,    46,    -1,    48,
+      -1,    -1,    -1,    91,    92,    -1,    -1,    -1,    -1,    97,
+      -1,    -1,   100,    62,    63,    64,    65,    66,    67,    -1,
       69,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,
       -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    54,    88,
       89,    90,    91,    92,    93,    94,    62,    63,    64,    65,
       66,    67,    -1,    69,    -1,    -1,    72,    73,    74,    -1,
       -1,    -1,    -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,
-      -1,    -1,    88,    89,    90,    91,    92,    93,    94,    62,
+      -1,    54,    88,    89,    90,    91,    92,    93,    94,    62,
       63,    64,    65,    66,    67,    -1,    69,    -1,    -1,    72,
       73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,
-      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
+      -1,    -1,    -1,    -1,    54,    88,    89,    90,    91,    92,
       93,    94,    62,    63,    64,    65,    66,    67,    -1,    69,
       -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,
-      -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,
+      -1,    48,    -1,    -1,    -1,    -1,    -1,    54,    88,    89,
       90,    91,    92,    93,    94,    62,    63,    64,    65,    66,
       67,    -1,    69,    -1,    -1,    72,    73,    74,    -1,    -1,
       -1,    -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,
       -1,    88,    89,    90,    91,    92,    93,    94,    62,    63,
       64,    65,    66,    67,    -1,    69,    -1,    -1,    72,    73,
-      74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      74,    -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,    -1,
       -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,    93,
-      94,    56,    -1,    -1,    -1,    -1,    -1,    62,    63,    64,
+      94,    62,    63,    64,    65,    66,    67,    -1,    69,    -1,
+      -1,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,
+      48,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,
+      91,    92,    93,    94,    62,    63,    64,    65,    66,    67,
+      -1,    69,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,
+      -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,
+      88,    89,    90,    91,    92,    93,    94,    62,    63,    64,
       65,    66,    67,    -1,    69,    -1,    -1,    72,    73,    74,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    54,    88,    89,    90,    91,    92,    93,    94,
       62,    63,    64,    65,    66,    67,    -1,    69,    -1,    -1,
-      72,    73,    74,    88,    89,    90,    91,    92,    93,    94,
+      72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -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
+      92,    93,    94,    56,    96,    -1,    -1,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    -1,    69,    -1,    -1,    72,
+      73,    74,    62,    63,    64,    65,    66,    67,    -1,    69,
+      -1,    -1,    72,    73,    74,    88,    89,    90,    91,    92,
+      93,    94,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,
+      90,    91,    92,    93,    94,    -1,    -1,    -1,    98,    62,
+      63,    64,    65,    66,    67,    -1,    69,    -1,    -1,    72,
+      73,    74,    -1,    -1,    -1,    -1,    -1,    80,    81,    -1,
+      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
+      93,    94,    62,    63,    64,    65,    66,    67,    -1,    69,
+      -1,    -1,    72,    73,    74,    62,    63,    64,    65,    -1,
+      -1,    -1,    69,    -1,    -1,    72,    73,    74,    88,    89,
+      90,    91,    92,    93,    94,    -1,    -1,    -1,    -1,    -1,
+      -1,    88,    89,    90,    91,    92,    93,    94
 };
 
   /* YYSTOSSTATE-NUM -- The (internal number of the) accessing
@@ -1597,38 +1630,39 @@ static const yytype_uint8 yystos[] =
       41,    42,    45,    47,    50,    51,    52,    55,    58,    59,
       60,    61,    68,    75,    76,    77,    78,    79,    82,    83,
       84,    91,    92,    97,   100,   104,   105,   106,   107,   108,
-     119,   125,   128,   129,   131,   132,   133,   140,   142,   144,
-     148,   153,   156,    96,    26,   128,    26,    50,    97,   129,
-     154,    97,   154,   128,    48,    97,   129,   155,   143,   147,
-      51,   134,    46,    47,    48,    49,   129,   141,   145,    51,
-      20,   129,    56,    57,    17,    18,    19,    26,    33,    26,
-      26,   129,   129,   141,   136,   129,   129,   129,   129,   129,
-     129,   129,   135,   149,   129,   129,   129,    27,    29,   102,
-     129,   157,   158,   159,   160,     0,    96,   129,    62,    63,
+     120,   126,   129,   130,   132,   133,   134,   141,   143,   145,
+     149,   154,   157,    96,    26,   129,    26,    50,    97,   130,
+     155,    97,   155,   129,    48,    97,   130,   156,   144,   148,
+      51,   135,    46,    47,    48,    49,   130,   142,   146,    51,
+      20,   130,    56,    57,    17,    18,    19,    26,    33,    26,
+      26,   130,   130,   142,   137,   130,   130,   130,   130,   130,
+     130,   130,   136,   150,   130,   130,   130,    27,    29,   102,
+     130,   158,   159,   160,   161,     0,    96,   130,    62,    63,
       64,    65,    66,    67,    69,    72,    73,    74,    88,    89,
-      90,    91,    92,    93,    94,   126,    97,   129,   129,   154,
-      99,   154,   128,    26,   154,    99,   154,   126,    26,   137,
-     129,    46,   141,    26,    26,    44,    70,    71,    26,   126,
-      54,    64,   128,   128,    54,    64,    54,    53,    56,   141,
-      26,   139,    48,    54,    48,    54,    48,    54,    48,    54,
-      80,    81,    54,    96,    26,   138,    26,    98,   102,   102,
-     101,    99,    99,   104,   122,   129,   129,   129,   129,   129,
-     129,   129,   129,   129,   129,   129,   129,   129,   129,   129,
-     129,   129,    26,   150,    98,   129,    98,    98,    99,    98,
-     129,   150,    99,   129,   146,   128,    26,   132,   129,   129,
-      43,    64,   129,   129,   129,    54,    64,    48,   129,   129,
-     129,   129,   129,    99,   129,   129,   129,   129,   129,   129,
-     129,   129,   129,   129,   118,   118,    99,   128,   128,   129,
-      27,    29,   160,    53,    96,    99,   130,    96,    26,   126,
-      44,   129,   129,   122,   129,   129,    26,    26,    48,    48,
-      48,    48,   107,   127,    26,   127,   152,    26,   155,   152,
-     150,   129,   115,   109,   112,   127,   128,   129,   129,   129,
-     129,   126,    96,   108,   126,   123,   127,    98,   127,    96,
-     126,   124,   124,   123,    54,    87,   120,    30,   152,   116,
-     110,   113,    86,   129,    36,    37,   121,   126,    26,   151,
-     127,   122,    54,    35,   127,   129,    85,    99,   117,   129,
-      54,   126,   122,    26,   127,   111,   129,    85,    53,    86,
-     122,   114,   127,   127,   122,   123,    86,   127,    86
+      90,    91,    92,    93,    94,   127,    97,   130,   130,   155,
+      99,   155,   129,    26,   155,    99,   155,   127,    26,   138,
+     130,    46,   142,    26,    26,    44,    70,    71,    26,   127,
+      54,    64,   129,   129,    54,    64,    54,    53,    56,   142,
+      26,   140,    48,    54,    48,    54,    48,    54,    48,    54,
+      80,    81,    54,    96,    26,   139,    26,    98,   102,   102,
+     101,    99,    99,   104,   123,   130,   130,   130,   130,   130,
+     130,   130,   130,   130,   130,   130,   130,   130,   130,   130,
+     130,   130,    26,   151,    98,   130,    98,    98,    99,    98,
+     130,   151,    99,   130,   147,   129,    26,   133,   130,   130,
+      43,    64,   130,   130,   130,    54,    64,    48,   130,   130,
+     130,   130,   130,    99,   130,   130,   130,   130,   130,   130,
+     130,   130,   130,   130,   119,   119,    99,   129,   129,   130,
+      27,    29,   161,    53,    96,    99,   131,    96,    26,   127,
+      44,   130,   130,   123,   130,   130,    26,    26,    48,    48,
+      48,    48,   107,   128,    26,   128,   153,    26,   156,   153,
+     151,   130,   115,   109,   112,   118,   129,   130,   130,   130,
+     130,   127,    96,   108,   127,   124,   128,    98,   128,    96,
+     127,   125,   125,   128,    54,    87,   121,    30,   153,   116,
+     110,   113,   124,   130,    36,    37,   122,   127,    26,   152,
+     128,   123,    54,    35,    86,   128,   130,    85,    99,   117,
+     130,    54,   127,   123,    26,   118,   111,   130,    85,    53,
+     128,   123,   114,   128,    86,   118,   123,   124,   128,   118,
+      86,   128,    86
 };
 
   /* YYR1YYN -- Symbol number of symbol that rule YYN derives.  */
@@ -1638,20 +1672,20 @@ static const yytype_uint8 yyr1[] =
      106,   106,   106,   106,   106,   106,   106,   106,   106,   106,
      107,   107,   107,   108,   108,   108,   109,   110,   111,   108,
      112,   113,   114,   108,   115,   116,   117,   108,   108,   108,
-     108,   108,   118,   119,   119,   120,   120,   121,   122,   123,
-     124,   125,   126,   127,   127,   127,   128,   128,   128,   128,
-     128,   128,   128,   128,   128,   128,   129,   129,   129,   129,
-     129,   130,   129,   129,   129,   129,   129,   129,   129,   129,
-     129,   129,   129,   129,   129,   129,   129,   129,   129,   129,
-     129,   129,   129,   129,   129,   129,   129,   129,   129,   129,
-     131,   131,   131,   131,   131,   131,   131,   131,   132,   132,
-     133,   133,   133,   133,   133,   134,   133,   135,   133,   136,
-     133,   133,   133,   133,   133,   137,   137,   138,   138,   139,
-     139,   140,   140,   140,   140,   140,   140,   141,   141,   142,
-     142,   142,   143,   142,   145,   146,   144,   144,   147,   144,
-     144,   144,   149,   148,   150,   150,   150,   151,   151,   151,
-     152,   153,   154,   154,   154,   155,   155,   156,   157,   157,
-     157,   157,   158,   158,   159,   159,   160,   160
+     108,   108,   118,   119,   120,   120,   121,   121,   122,   123,
+     124,   125,   126,   127,   128,   128,   128,   129,   129,   129,
+     129,   129,   129,   129,   129,   129,   129,   130,   130,   130,
+     130,   130,   131,   130,   130,   130,   130,   130,   130,   130,
+     130,   130,   130,   130,   130,   130,   130,   130,   130,   130,
+     130,   130,   130,   130,   130,   130,   130,   130,   130,   130,
+     130,   132,   132,   132,   132,   132,   132,   132,   132,   133,
+     133,   134,   134,   134,   134,   134,   135,   134,   136,   134,
+     137,   134,   134,   134,   134,   134,   138,   138,   139,   139,
+     140,   140,   141,   141,   141,   141,   141,   141,   142,   142,
+     143,   143,   143,   144,   143,   146,   147,   145,   145,   148,
+     145,   145,   145,   150,   149,   151,   151,   151,   152,   152,
+     152,   153,   154,   155,   155,   155,   156,   156,   157,   158,
+     158,   158,   158,   159,   159,   160,   160,   161,   161
 };
 
   /* YYR2YYN -- Number of symbols on the right hand side of rule YYN.  */
@@ -1659,22 +1693,22 @@ static const yytype_int8 yyr2[] =
 {
        0,     2,     1,     3,     0,     1,     1,     4,     4,     6,
        4,     4,     4,     4,     4,     4,     5,     5,     8,     4,
-       1,     1,     1,     1,     1,     8,     0,     0,     0,    14,
-       0,     0,     0,    15,     0,     0,     0,    12,     2,     4,
-       7,     6,     0,     9,    11,     0,     2,     6,     0,     0,
-       0,     1,     0,     0,     2,     2,     1,     1,     1,     1,
-       1,     1,     2,     3,     1,     2,     1,     1,     4,     2,
-       4,     0,     7,     4,     3,     1,     1,     1,     3,     3,
+       1,     1,     1,     1,     1,     9,     0,     0,     0,    15,
+       0,     0,     0,    16,     0,     0,     0,    13,     2,     4,
+       7,     6,     0,     0,     9,    11,     0,     2,     6,     0,
+       0,     0,     1,     0,     0,     2,     2,     1,     1,     1,
+       1,     1,     1,     2,     3,     1,     2,     1,     1,     4,
+       2,     4,     0,     7,     4,     3,     1,     1,     1,     3,
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     2,     3,     3,     3,     3,     2,     2,     4,     4,
-       4,     6,     4,     6,     4,     6,     4,     6,     2,     1,
-       2,     1,     1,     2,     1,     0,     3,     0,     3,     0,
-       3,     4,     2,     4,     2,     1,     3,     1,     3,     1,
-       3,     1,     2,     2,     2,     3,     2,     3,     2,     2,
-       3,     2,     0,     3,     0,     0,     9,     2,     0,     7,
-       8,     6,     0,     3,     0,     1,     3,     0,     1,     3,
-       0,     2,     0,     1,     3,     1,     3,     3,     0,     1,
-       1,     1,     1,     3,     1,     3,     3,     3
+       3,     3,     2,     3,     3,     3,     3,     2,     2,     4,
+       4,     4,     6,     4,     6,     4,     6,     4,     6,     2,
+       1,     2,     1,     1,     2,     1,     0,     3,     0,     3,
+       0,     3,     4,     2,     4,     2,     1,     3,     1,     3,
+       1,     3,     1,     2,     2,     2,     3,     2,     3,     2,
+       2,     3,     2,     0,     3,     0,     0,     9,     2,     0,
+       7,     8,     6,     0,     3,     0,     1,     3,     0,     1,
+       3,     0,     2,     0,     1,     3,     1,     3,     3,     0,
+       1,     1,     1,     1,     3,     1,     3,     3,     3
 };
 
 
@@ -1946,81 +1980,81 @@ yydestruct (const char *yymsg,
   switch (yykind)
     {
     case 22: /* BLTIN  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1952 "engines/director/lingo/lingo-gr.cpp"
+#line 1986 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 23: /* FBLTIN  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1958 "engines/director/lingo/lingo-gr.cpp"
+#line 1992 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 24: /* RBLTIN  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1964 "engines/director/lingo/lingo-gr.cpp"
+#line 1998 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 25: /* THEFBLTIN  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1970 "engines/director/lingo/lingo-gr.cpp"
+#line 2004 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 26: /* ID  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1976 "engines/director/lingo/lingo-gr.cpp"
+#line 2010 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 27: /* STRING  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1982 "engines/director/lingo/lingo-gr.cpp"
+#line 2016 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 28: /* HANDLER  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1988 "engines/director/lingo/lingo-gr.cpp"
+#line 2022 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 29: /* SYMBOL  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1994 "engines/director/lingo/lingo-gr.cpp"
+#line 2028 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 30: /* ENDCLAUSE  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2000 "engines/director/lingo/lingo-gr.cpp"
+#line 2034 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 31: /* tPLAYACCEL  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2006 "engines/director/lingo/lingo-gr.cpp"
+#line 2040 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 32: /* tMETHOD  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2012 "engines/director/lingo/lingo-gr.cpp"
+#line 2046 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 33: /* THEOBJECTFIELD  */
-#line 189 "engines/director/lingo/lingo-gr.y"
+#line 211 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).objectfield).os; }
-#line 2018 "engines/director/lingo/lingo-gr.cpp"
+#line 2052 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case 148: /* on  */
-#line 188 "engines/director/lingo/lingo-gr.y"
+    case 149: /* on  */
+#line 210 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 2024 "engines/director/lingo/lingo-gr.cpp"
+#line 2058 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2299,7 +2333,7 @@ yyreduce:
   switch (yyn)
     {
   case 7:
-#line 200 "engines/director/lingo/lingo-gr.y"
+#line 222 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
@@ -2307,19 +2341,19 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code);
 		delete (yyvsp[0].s); }
-#line 2311 "engines/director/lingo/lingo-gr.cpp"
+#line 2345 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 8:
-#line 207 "engines/director/lingo/lingo-gr.y"
+#line 229 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code); }
-#line 2319 "engines/director/lingo/lingo-gr.cpp"
+#line 2353 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 9:
-#line 211 "engines/director/lingo/lingo-gr.y"
+#line 233 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
 			warning("LEXER: keyword 'menu' expected");
@@ -2331,23 +2365,23 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-4].e)[1]);
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2335 "engines/director/lingo/lingo-gr.cpp"
+#line 2369 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10:
-#line 222 "engines/director/lingo/lingo-gr.y"
+#line 244 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code1(LC::c_after); }
-#line 2341 "engines/director/lingo/lingo-gr.cpp"
+#line 2375 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11:
-#line 223 "engines/director/lingo/lingo-gr.y"
+#line 245 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code1(LC::c_before); }
-#line 2347 "engines/director/lingo/lingo-gr.cpp"
+#line 2381 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12:
-#line 224 "engines/director/lingo/lingo-gr.y"
+#line 246 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
@@ -2355,11 +2389,11 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2359 "engines/director/lingo/lingo-gr.cpp"
+#line 2393 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13:
-#line 231 "engines/director/lingo/lingo-gr.y"
+#line 253 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2367,11 +2401,11 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2371 "engines/director/lingo/lingo-gr.cpp"
+#line 2405 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 14:
-#line 238 "engines/director/lingo/lingo-gr.y"
+#line 260 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
@@ -2379,11 +2413,11 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2383 "engines/director/lingo/lingo-gr.cpp"
+#line 2417 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15:
-#line 245 "engines/director/lingo/lingo-gr.y"
+#line 267 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2391,33 +2425,33 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2395 "engines/director/lingo/lingo-gr.cpp"
+#line 2429 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16:
-#line 252 "engines/director/lingo/lingo-gr.y"
+#line 274 "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 2406 "engines/director/lingo/lingo-gr.cpp"
+#line 2440 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17:
-#line 258 "engines/director/lingo/lingo-gr.y"
+#line 280 "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 2417 "engines/director/lingo/lingo-gr.cpp"
+#line 2451 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 18:
-#line 265 "engines/director/lingo/lingo-gr.y"
+#line 287 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
 			warning("LEXER: keyword 'menu' expected");
@@ -2429,142 +2463,147 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-6].e)[0]);
 		g_lingo->codeInt((yyvsp[-6].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2433 "engines/director/lingo/lingo-gr.cpp"
+#line 2467 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19:
-#line 276 "engines/director/lingo/lingo-gr.y"
+#line 298 "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 2444 "engines/director/lingo/lingo-gr.cpp"
+#line 2478 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25:
-#line 293 "engines/director/lingo/lingo-gr.y"
-                                                                                {
+#line 315 "engines/director/lingo/lingo-gr.y"
+                                                                                                {
 		inst start = 0, end = 0;
-		WRITE_UINT32(&start, (yyvsp[-5].code) - (yyvsp[-1].code) + 1);
-		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-3].code) + 2);
-		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end;		/* end, if cond fails */
-		(*g_lingo->_currentAssembly)[(yyvsp[-1].code)] = start; }
-#line 2455 "engines/director/lingo/lingo-gr.cpp"
+		WRITE_UINT32(&start, (yyvsp[-6].code) - (yyvsp[-1].code) + 1);
+		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-4].code) + 2);
+		(*g_lingo->_currentAssembly)[(yyvsp[-4].code)] = end;		/* end, if cond fails */
+		(*g_lingo->_currentAssembly)[(yyvsp[-1].code)] = start;	/* looping back */
+		endRepeat((yyvsp[-1].code) + 1, (yyvsp[-6].code));	}
+#line 2490 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26:
-#line 305 "engines/director/lingo/lingo-gr.y"
+#line 328 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_varpush);
 				  g_lingo->codeString((yyvsp[-2].s)->c_str());
 				  mVar((yyvsp[-2].s), globalCheck()); }
-#line 2463 "engines/director/lingo/lingo-gr.cpp"
+#line 2498 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27:
-#line 309 "engines/director/lingo/lingo-gr.y"
+#line 332 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_eval);
 				  g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2470 "engines/director/lingo/lingo-gr.cpp"
+#line 2505 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28:
-#line 312 "engines/director/lingo/lingo-gr.y"
+#line 335 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_le); }
-#line 2476 "engines/director/lingo/lingo-gr.cpp"
+#line 2511 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29:
-#line 312 "engines/director/lingo/lingo-gr.y"
-                                                                                          {
+#line 335 "engines/director/lingo/lingo-gr.y"
+                                                                                                      {
 
+		int nextPos = g_lingo->_currentAssembly->size();
 		g_lingo->code1(LC::c_eval);
-		g_lingo->codeString((yyvsp[-11].s)->c_str());
+		g_lingo->codeString((yyvsp[-12].s)->c_str());
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_add);
 		g_lingo->code1(LC::c_varpush);
-		g_lingo->codeString((yyvsp[-11].s)->c_str());
+		g_lingo->codeString((yyvsp[-12].s)->c_str());
 		g_lingo->code1(LC::c_assign);
 		g_lingo->code2(LC::c_jump, 0);
 		int pos = g_lingo->_currentAssembly->size() - 1;
 
 		inst loop = 0, end = 0;
-		WRITE_UINT32(&loop, (yyvsp[-7].code) - pos + 2);
-		WRITE_UINT32(&end, pos - (yyvsp[-2].code) + 2);
+		WRITE_UINT32(&loop, (yyvsp[-8].code) - pos + 2);
+		WRITE_UINT32(&end, pos - (yyvsp[-3].code) + 2);
 		(*g_lingo->_currentAssembly)[pos] = loop;		/* final count value */
-		(*g_lingo->_currentAssembly)[(yyvsp[-2].code)] = end;	}
-#line 2499 "engines/director/lingo/lingo-gr.cpp"
+		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end;	/* end, if cond fails */
+		endRepeat(pos + 1, nextPos); }
+#line 2536 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30:
-#line 336 "engines/director/lingo/lingo-gr.y"
+#line 362 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_varpush);
 				  g_lingo->codeString((yyvsp[-2].s)->c_str());
 				  mVar((yyvsp[-2].s), globalCheck()); }
-#line 2507 "engines/director/lingo/lingo-gr.cpp"
+#line 2544 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31:
-#line 340 "engines/director/lingo/lingo-gr.y"
+#line 366 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_eval);
 				  g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2514 "engines/director/lingo/lingo-gr.cpp"
+#line 2551 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32:
-#line 343 "engines/director/lingo/lingo-gr.y"
+#line 369 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_ge); }
-#line 2520 "engines/director/lingo/lingo-gr.cpp"
+#line 2557 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33:
-#line 344 "engines/director/lingo/lingo-gr.y"
-                                                    {
+#line 370 "engines/director/lingo/lingo-gr.y"
+                                                                {
 
+		int nextPos = g_lingo->_currentAssembly->size();
 		g_lingo->code1(LC::c_eval);
-		g_lingo->codeString((yyvsp[-12].s)->c_str());
+		g_lingo->codeString((yyvsp[-13].s)->c_str());
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_sub);
 		g_lingo->code1(LC::c_varpush);
-		g_lingo->codeString((yyvsp[-12].s)->c_str());
+		g_lingo->codeString((yyvsp[-13].s)->c_str());
 		g_lingo->code1(LC::c_assign);
 		g_lingo->code2(LC::c_jump, 0);
 		int pos = g_lingo->_currentAssembly->size() - 1;
 
 		inst loop = 0, end = 0;
-		WRITE_UINT32(&loop, (yyvsp[-8].code) - pos + 2);
-		WRITE_UINT32(&end, pos - (yyvsp[-2].code) + 2);
+		WRITE_UINT32(&loop, (yyvsp[-9].code) - pos + 2);
+		WRITE_UINT32(&end, pos - (yyvsp[-3].code) + 2);
 		(*g_lingo->_currentAssembly)[pos] = loop;		/* final count value */
-		(*g_lingo->_currentAssembly)[(yyvsp[-2].code)] = end;	}
-#line 2543 "engines/director/lingo/lingo-gr.cpp"
+		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end;	/* end, if cond fails */
+		endRepeat(pos + 1, nextPos); }
+#line 2582 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34:
-#line 369 "engines/director/lingo/lingo-gr.y"
+#line 396 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_stackpeek);
 				  g_lingo->codeInt(0);
 				  Common::String count("count");
 				  g_lingo->codeFunc(&count, 1);
 				  g_lingo->code1(LC::c_intpush);	// start counter
 				  g_lingo->codeInt(1); }
-#line 2554 "engines/director/lingo/lingo-gr.cpp"
+#line 2593 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35:
-#line 376 "engines/director/lingo/lingo-gr.y"
+#line 403 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_stackpeek);	// get counter
 				  g_lingo->codeInt(0);
 				  g_lingo->code1(LC::c_stackpeek);	// get array size
 				  g_lingo->codeInt(2);
 				  g_lingo->code1(LC::c_le); }
-#line 2564 "engines/director/lingo/lingo-gr.cpp"
+#line 2603 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36:
-#line 382 "engines/director/lingo/lingo-gr.y"
+#line 409 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_stackpeek);	// get list
 				  g_lingo->codeInt(2);
 				  g_lingo->code1(LC::c_stackpeek);	// get counter
@@ -2575,13 +2614,14 @@ yyreduce:
 				  g_lingo->codeString((yyvsp[-6].s)->c_str());
 				  mVar((yyvsp[-6].s), globalCheck());
 				  g_lingo->code1(LC::c_assign); }
-#line 2579 "engines/director/lingo/lingo-gr.cpp"
+#line 2618 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37:
-#line 392 "engines/director/lingo/lingo-gr.y"
-                                            {
+#line 419 "engines/director/lingo/lingo-gr.y"
+                                                        {
 
+		int nextPos = g_lingo->_currentAssembly->size();
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_add);			// Increment counter
@@ -2592,49 +2632,62 @@ yyreduce:
 		g_lingo->codeInt(3);
 
 		inst loop = 0, end = 0;
-		WRITE_UINT32(&loop, (yyvsp[-5].code) - jump);
-		WRITE_UINT32(&end, end2 - (yyvsp[-3].code) + 1);
+		WRITE_UINT32(&loop, (yyvsp[-6].code) - jump);
+		WRITE_UINT32(&end, end2 - (yyvsp[-4].code) + 1);
 
 		(*g_lingo->_currentAssembly)[jump + 1] = loop;		/* final count value */
-		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end;	}
-#line 2601 "engines/director/lingo/lingo-gr.cpp"
+		(*g_lingo->_currentAssembly)[(yyvsp[-4].code)] = end;		/* end, if cond fails */
+		endRepeat(end2, nextPos); }
+#line 2642 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38:
-#line 410 "engines/director/lingo/lingo-gr.y"
+#line 439 "engines/director/lingo/lingo-gr.y"
                         {
-		g_lingo->code1(LC::c_nextRepeat); }
-#line 2608 "engines/director/lingo/lingo-gr.cpp"
+		if (g_lingo->_repeatStack.size()) {
+			g_lingo->code2(LC::c_jump, 0);
+			int pos = g_lingo->_currentAssembly->size() - 1;
+			g_lingo->_repeatStack.back()->nexts.push_back(pos);
+		} else {
+			warning("# LINGO: next repeat not inside repeat block");
+		} }
+#line 2655 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39:
-#line 412 "engines/director/lingo/lingo-gr.y"
+#line 447 "engines/director/lingo/lingo-gr.y"
                               {
 		g_lingo->code1(LC::c_whencode);
 		g_lingo->codeString((yyvsp[-2].s)->c_str()); }
-#line 2616 "engines/director/lingo/lingo-gr.cpp"
+#line 2663 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40:
-#line 415 "engines/director/lingo/lingo-gr.y"
+#line 450 "engines/director/lingo/lingo-gr.y"
                                                           { g_lingo->code1(LC::c_telldone); }
-#line 2622 "engines/director/lingo/lingo-gr.cpp"
+#line 2669 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41:
-#line 416 "engines/director/lingo/lingo-gr.y"
+#line 451 "engines/director/lingo/lingo-gr.y"
                                                     { g_lingo->code1(LC::c_telldone); }
-#line 2628 "engines/director/lingo/lingo-gr.cpp"
+#line 2675 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42:
-#line 418 "engines/director/lingo/lingo-gr.y"
-                                { g_lingo->code1(LC::c_tell); }
-#line 2634 "engines/director/lingo/lingo-gr.cpp"
+#line 453 "engines/director/lingo/lingo-gr.y"
+                                { startRepeat(); }
+#line 2681 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43:
-#line 420 "engines/director/lingo/lingo-gr.y"
+#line 455 "engines/director/lingo/lingo-gr.y"
+                                { g_lingo->code1(LC::c_tell); }
+#line 2687 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 44:
+#line 457 "engines/director/lingo/lingo-gr.y"
                                                                                          {
 		inst else1 = 0, end3 = 0;
 		WRITE_UINT32(&else1, (yyvsp[-3].code) + 1 - (yyvsp[-6].code) + 1);
@@ -2642,11 +2695,11 @@ yyreduce:
 		(*g_lingo->_currentAssembly)[(yyvsp[-6].code)] = else1;		/* elsepart */
 		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end3;		/* end, if cond fails */
 		g_lingo->processIf((yyvsp[-3].code), (yyvsp[-1].code)); }
-#line 2646 "engines/director/lingo/lingo-gr.cpp"
+#line 2699 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 44:
-#line 427 "engines/director/lingo/lingo-gr.y"
+  case 45:
+#line 464 "engines/director/lingo/lingo-gr.y"
                                                                                                           {
 		inst else1 = 0, end = 0;
 		WRITE_UINT32(&else1, (yyvsp[-5].code) + 1 - (yyvsp[-8].code) + 1);
@@ -2654,107 +2707,107 @@ yyreduce:
 		(*g_lingo->_currentAssembly)[(yyvsp[-8].code)] = else1;		/* elsepart */
 		(*g_lingo->_currentAssembly)[(yyvsp[-5].code)] = end;		/* end, if cond fails */
 		g_lingo->processIf((yyvsp[-5].code), (yyvsp[-1].code)); }
-#line 2658 "engines/director/lingo/lingo-gr.cpp"
+#line 2711 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 47:
-#line 438 "engines/director/lingo/lingo-gr.y"
+  case 48:
+#line 475 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		inst else1 = 0;
 		WRITE_UINT32(&else1, (yyvsp[0].code) + 1 - (yyvsp[-3].code) + 1);
 		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = else1;	/* end, if cond fails */
 		g_lingo->codeLabel((yyvsp[0].code)); }
-#line 2668 "engines/director/lingo/lingo-gr.cpp"
+#line 2721 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 48:
-#line 444 "engines/director/lingo/lingo-gr.y"
+  case 49:
+#line 481 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code2(LC::c_jumpifz, 0);
 		(yyval.code) = g_lingo->_currentAssembly->size() - 1; }
-#line 2676 "engines/director/lingo/lingo-gr.cpp"
+#line 2729 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 49:
-#line 448 "engines/director/lingo/lingo-gr.y"
+  case 50:
+#line 485 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code2(LC::c_jump, 0);
 		(yyval.code) = g_lingo->_currentAssembly->size() - 1; }
-#line 2684 "engines/director/lingo/lingo-gr.cpp"
+#line 2737 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 50:
-#line 452 "engines/director/lingo/lingo-gr.y"
+  case 51:
+#line 489 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = g_lingo->_currentAssembly->size() - 1; }
-#line 2692 "engines/director/lingo/lingo-gr.cpp"
+#line 2745 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 51:
-#line 456 "engines/director/lingo/lingo-gr.y"
+  case 52:
+#line 493 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->codeLabel(0); }
-#line 2699 "engines/director/lingo/lingo-gr.cpp"
+#line 2752 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 52:
-#line 459 "engines/director/lingo/lingo-gr.y"
+  case 53:
+#line 496 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = g_lingo->_currentAssembly->size(); }
-#line 2705 "engines/director/lingo/lingo-gr.cpp"
+#line 2758 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 53:
-#line 461 "engines/director/lingo/lingo-gr.y"
+  case 54:
+#line 498 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->_currentAssembly->size(); }
-#line 2711 "engines/director/lingo/lingo-gr.cpp"
+#line 2764 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 56:
-#line 465 "engines/director/lingo/lingo-gr.y"
+  case 57:
+#line 502 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt((yyvsp[0].i)); }
-#line 2719 "engines/director/lingo/lingo-gr.cpp"
+#line 2772 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 57:
-#line 468 "engines/director/lingo/lingo-gr.y"
+  case 58:
+#line 505 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_floatpush);
 		g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2727 "engines/director/lingo/lingo-gr.cpp"
+#line 2780 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 58:
-#line 471 "engines/director/lingo/lingo-gr.y"
+  case 59:
+#line 508 "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 2736 "engines/director/lingo/lingo-gr.cpp"
+#line 2789 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 59:
-#line 475 "engines/director/lingo/lingo-gr.y"
+  case 60:
+#line 512 "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 2745 "engines/director/lingo/lingo-gr.cpp"
+#line 2798 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 60:
-#line 479 "engines/director/lingo/lingo-gr.y"
+  case 61:
+#line 516 "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 2754 "engines/director/lingo/lingo-gr.cpp"
+#line 2807 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 61:
-#line 483 "engines/director/lingo/lingo-gr.y"
+  case 62:
+#line 520 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2763,28 +2816,28 @@ yyreduce:
 		WRITE_UINT32(&e, (yyvsp[0].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[0].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2767 "engines/director/lingo/lingo-gr.cpp"
+#line 2820 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 62:
-#line 491 "engines/director/lingo/lingo-gr.y"
+  case 63:
+#line 528 "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 2778 "engines/director/lingo/lingo-gr.cpp"
+#line 2831 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 63:
-#line 497 "engines/director/lingo/lingo-gr.y"
+  case 64:
+#line 534 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = (yyvsp[-1].code); }
-#line 2784 "engines/director/lingo/lingo-gr.cpp"
+#line 2837 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 65:
-#line 499 "engines/director/lingo/lingo-gr.y"
+  case 66:
+#line 536 "engines/director/lingo/lingo-gr.y"
                                 {
 		// Director parser till D3 was forgiving for any hanging parentheses
 		if (g_lingo->_ignoreError) {
@@ -2795,549 +2848,556 @@ yyreduce:
 			yyerrok;
 		}
 	}
-#line 2799 "engines/director/lingo/lingo-gr.cpp"
+#line 2852 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 66:
-#line 510 "engines/director/lingo/lingo-gr.y"
+  case 67:
+#line 547 "engines/director/lingo/lingo-gr.y"
                  { (yyval.code) = (yyvsp[0].code); }
-#line 2805 "engines/director/lingo/lingo-gr.cpp"
+#line 2858 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 68:
-#line 512 "engines/director/lingo/lingo-gr.y"
+  case 69:
+#line 549 "engines/director/lingo/lingo-gr.y"
                                  {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2813 "engines/director/lingo/lingo-gr.cpp"
+#line 2866 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 69:
-#line 515 "engines/director/lingo/lingo-gr.y"
+  case 70:
+#line 552 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 2821 "engines/director/lingo/lingo-gr.cpp"
+#line 2874 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 70:
-#line 518 "engines/director/lingo/lingo-gr.y"
+  case 71:
+#line 555 "engines/director/lingo/lingo-gr.y"
                                       {
 			g_lingo->code1(LC::c_lazyeval);
 			g_lingo->codeString((yyvsp[-1].s)->c_str());
 			g_lingo->codeFunc((yyvsp[-3].s), 1);
 			delete (yyvsp[-3].s);
 			delete (yyvsp[-1].s); }
-#line 2832 "engines/director/lingo/lingo-gr.cpp"
+#line 2885 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 71:
-#line 524 "engines/director/lingo/lingo-gr.y"
+  case 72:
+#line 561 "engines/director/lingo/lingo-gr.y"
                                       { g_lingo->code1(LC::c_lazyeval); g_lingo->codeString((yyvsp[-1].s)->c_str()); }
-#line 2838 "engines/director/lingo/lingo-gr.cpp"
+#line 2891 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 72:
-#line 525 "engines/director/lingo/lingo-gr.y"
+  case 73:
+#line 562 "engines/director/lingo/lingo-gr.y"
                                                     {
 			g_lingo->codeFunc((yyvsp[-6].s), (yyvsp[-1].narg) + 1);
 			delete (yyvsp[-6].s);
 			delete (yyvsp[-4].s); }
-#line 2847 "engines/director/lingo/lingo-gr.cpp"
+#line 2900 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 73:
-#line 529 "engines/director/lingo/lingo-gr.y"
+  case 74:
+#line 566 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2855 "engines/director/lingo/lingo-gr.cpp"
+#line 2908 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 74:
-#line 532 "engines/director/lingo/lingo-gr.y"
+  case 75:
+#line 569 "engines/director/lingo/lingo-gr.y"
                                         {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-2].s), 1);
 		delete (yyvsp[-2].s); }
-#line 2863 "engines/director/lingo/lingo-gr.cpp"
+#line 2916 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 75:
-#line 535 "engines/director/lingo/lingo-gr.y"
+  case 76:
+#line 572 "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 2873 "engines/director/lingo/lingo-gr.cpp"
+#line 2926 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 76:
-#line 540 "engines/director/lingo/lingo-gr.y"
+  case 77:
+#line 577 "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 2884 "engines/director/lingo/lingo-gr.cpp"
+#line 2937 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 78:
-#line 547 "engines/director/lingo/lingo-gr.y"
+  case 79:
+#line 584 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_add); }
-#line 2890 "engines/director/lingo/lingo-gr.cpp"
+#line 2943 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 79:
-#line 548 "engines/director/lingo/lingo-gr.y"
+  case 80:
+#line 585 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_sub); }
-#line 2896 "engines/director/lingo/lingo-gr.cpp"
+#line 2949 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 80:
-#line 549 "engines/director/lingo/lingo-gr.y"
+  case 81:
+#line 586 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mul); }
-#line 2902 "engines/director/lingo/lingo-gr.cpp"
+#line 2955 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 81:
-#line 550 "engines/director/lingo/lingo-gr.y"
+  case 82:
+#line 587 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_div); }
-#line 2908 "engines/director/lingo/lingo-gr.cpp"
+#line 2961 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 82:
-#line 551 "engines/director/lingo/lingo-gr.y"
+  case 83:
+#line 588 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mod); }
-#line 2914 "engines/director/lingo/lingo-gr.cpp"
+#line 2967 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 83:
-#line 552 "engines/director/lingo/lingo-gr.y"
+  case 84:
+#line 589 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gt); }
-#line 2920 "engines/director/lingo/lingo-gr.cpp"
+#line 2973 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 84:
-#line 553 "engines/director/lingo/lingo-gr.y"
+  case 85:
+#line 590 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lt); }
-#line 2926 "engines/director/lingo/lingo-gr.cpp"
+#line 2979 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 85:
-#line 554 "engines/director/lingo/lingo-gr.y"
+  case 86:
+#line 591 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_eq); }
-#line 2932 "engines/director/lingo/lingo-gr.cpp"
+#line 2985 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 86:
-#line 555 "engines/director/lingo/lingo-gr.y"
+  case 87:
+#line 592 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_neq); }
-#line 2938 "engines/director/lingo/lingo-gr.cpp"
+#line 2991 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 87:
-#line 556 "engines/director/lingo/lingo-gr.y"
+  case 88:
+#line 593 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ge); }
-#line 2944 "engines/director/lingo/lingo-gr.cpp"
+#line 2997 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 88:
-#line 557 "engines/director/lingo/lingo-gr.y"
+  case 89:
+#line 594 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_le); }
-#line 2950 "engines/director/lingo/lingo-gr.cpp"
+#line 3003 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 89:
-#line 558 "engines/director/lingo/lingo-gr.y"
+  case 90:
+#line 595 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_and); }
-#line 2956 "engines/director/lingo/lingo-gr.cpp"
+#line 3009 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 90:
-#line 559 "engines/director/lingo/lingo-gr.y"
+  case 91:
+#line 596 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_or); }
-#line 2962 "engines/director/lingo/lingo-gr.cpp"
+#line 3015 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 91:
-#line 560 "engines/director/lingo/lingo-gr.y"
+  case 92:
+#line 597 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_not); }
-#line 2968 "engines/director/lingo/lingo-gr.cpp"
+#line 3021 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 92:
-#line 561 "engines/director/lingo/lingo-gr.y"
+  case 93:
+#line 598 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ampersand); }
-#line 2974 "engines/director/lingo/lingo-gr.cpp"
+#line 3027 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 93:
-#line 562 "engines/director/lingo/lingo-gr.y"
+  case 94:
+#line 599 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_concat); }
-#line 2980 "engines/director/lingo/lingo-gr.cpp"
+#line 3033 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 94:
-#line 563 "engines/director/lingo/lingo-gr.y"
+  case 95:
+#line 600 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_contains); }
-#line 2986 "engines/director/lingo/lingo-gr.cpp"
+#line 3039 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 95:
-#line 564 "engines/director/lingo/lingo-gr.y"
+  case 96:
+#line 601 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_starts); }
-#line 2992 "engines/director/lingo/lingo-gr.cpp"
+#line 3045 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 96:
-#line 565 "engines/director/lingo/lingo-gr.y"
+  case 97:
+#line 602 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = (yyvsp[0].code); }
-#line 2998 "engines/director/lingo/lingo-gr.cpp"
+#line 3051 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 97:
-#line 566 "engines/director/lingo/lingo-gr.y"
+  case 98:
+#line 603 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 3004 "engines/director/lingo/lingo-gr.cpp"
+#line 3057 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 98:
-#line 567 "engines/director/lingo/lingo-gr.y"
+  case 99:
+#line 604 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_intersects); }
-#line 3010 "engines/director/lingo/lingo-gr.cpp"
+#line 3063 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 99:
-#line 568 "engines/director/lingo/lingo-gr.y"
+  case 100:
+#line 605 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_within); }
-#line 3016 "engines/director/lingo/lingo-gr.cpp"
+#line 3069 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 100:
-#line 570 "engines/director/lingo/lingo-gr.y"
+  case 101:
+#line 607 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_charOf); }
-#line 3022 "engines/director/lingo/lingo-gr.cpp"
+#line 3075 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 101:
-#line 571 "engines/director/lingo/lingo-gr.y"
+  case 102:
+#line 608 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_charToOf); }
-#line 3028 "engines/director/lingo/lingo-gr.cpp"
+#line 3081 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 102:
-#line 572 "engines/director/lingo/lingo-gr.y"
+  case 103:
+#line 609 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_itemOf); }
-#line 3034 "engines/director/lingo/lingo-gr.cpp"
+#line 3087 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 103:
-#line 573 "engines/director/lingo/lingo-gr.y"
+  case 104:
+#line 610 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_itemToOf); }
-#line 3040 "engines/director/lingo/lingo-gr.cpp"
+#line 3093 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 104:
-#line 574 "engines/director/lingo/lingo-gr.y"
+  case 105:
+#line 611 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lineOf); }
-#line 3046 "engines/director/lingo/lingo-gr.cpp"
+#line 3099 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 105:
-#line 575 "engines/director/lingo/lingo-gr.y"
+  case 106:
+#line 612 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_lineToOf); }
-#line 3052 "engines/director/lingo/lingo-gr.cpp"
+#line 3105 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 106:
-#line 576 "engines/director/lingo/lingo-gr.y"
+  case 107:
+#line 613 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_wordOf); }
-#line 3058 "engines/director/lingo/lingo-gr.cpp"
+#line 3111 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 107:
-#line 577 "engines/director/lingo/lingo-gr.y"
+  case 108:
+#line 614 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_wordToOf); }
-#line 3064 "engines/director/lingo/lingo-gr.cpp"
+#line 3117 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 108:
-#line 579 "engines/director/lingo/lingo-gr.y"
+  case 109:
+#line 616 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->codeFunc((yyvsp[-1].s), 1);
 		delete (yyvsp[-1].s); }
-#line 3072 "engines/director/lingo/lingo-gr.cpp"
+#line 3125 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110:
-#line 584 "engines/director/lingo/lingo-gr.y"
+  case 111:
+#line 621 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_printtop); }
-#line 3078 "engines/director/lingo/lingo-gr.cpp"
+#line 3131 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 113:
-#line 587 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_exitRepeat); }
-#line 3084 "engines/director/lingo/lingo-gr.cpp"
+  case 114:
+#line 624 "engines/director/lingo/lingo-gr.y"
+                                                {
+		if (g_lingo->_repeatStack.size()) {
+			g_lingo->code2(LC::c_jump, 0);
+			int pos = g_lingo->_currentAssembly->size() - 1;
+			g_lingo->_repeatStack.back()->exits.push_back(pos);
+		} else {
+			warning("# LINGO: exit repeat not inside repeat block");
+		} }
+#line 3144 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 114:
-#line 588 "engines/director/lingo/lingo-gr.y"
+  case 115:
+#line 632 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_procret); }
-#line 3090 "engines/director/lingo/lingo-gr.cpp"
+#line 3150 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 115:
-#line 589 "engines/director/lingo/lingo-gr.y"
+  case 116:
+#line 633 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 3096 "engines/director/lingo/lingo-gr.cpp"
+#line 3156 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 116:
-#line 589 "engines/director/lingo/lingo-gr.y"
+  case 117:
+#line 633 "engines/director/lingo/lingo-gr.y"
                                                                                  { inLast(); }
-#line 3102 "engines/director/lingo/lingo-gr.cpp"
+#line 3162 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117:
-#line 590 "engines/director/lingo/lingo-gr.y"
+  case 118:
+#line 634 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 3108 "engines/director/lingo/lingo-gr.cpp"
+#line 3168 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 118:
-#line 590 "engines/director/lingo/lingo-gr.y"
+  case 119:
+#line 634 "engines/director/lingo/lingo-gr.y"
                                                                                    { inLast(); }
-#line 3114 "engines/director/lingo/lingo-gr.cpp"
+#line 3174 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119:
-#line 591 "engines/director/lingo/lingo-gr.y"
+  case 120:
+#line 635 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 3120 "engines/director/lingo/lingo-gr.cpp"
+#line 3180 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120:
-#line 591 "engines/director/lingo/lingo-gr.y"
+  case 121:
+#line 635 "engines/director/lingo/lingo-gr.y"
                                                                                    { inLast(); }
-#line 3126 "engines/director/lingo/lingo-gr.cpp"
+#line 3186 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121:
-#line 592 "engines/director/lingo/lingo-gr.y"
+  case 122:
+#line 636 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 3134 "engines/director/lingo/lingo-gr.cpp"
+#line 3194 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 122:
-#line 595 "engines/director/lingo/lingo-gr.y"
+  case 123:
+#line 639 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 3142 "engines/director/lingo/lingo-gr.cpp"
+#line 3202 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 123:
-#line 598 "engines/director/lingo/lingo-gr.y"
+  case 124:
+#line 642 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_open); }
-#line 3148 "engines/director/lingo/lingo-gr.cpp"
+#line 3208 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 124:
-#line 599 "engines/director/lingo/lingo-gr.y"
+  case 125:
+#line 643 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code2(LC::c_voidpush, LC::c_open); }
-#line 3154 "engines/director/lingo/lingo-gr.cpp"
+#line 3214 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 125:
-#line 601 "engines/director/lingo/lingo-gr.y"
+  case 126:
+#line 645 "engines/director/lingo/lingo-gr.y"
                                                 {
 		mVar((yyvsp[0].s), kVarGlobal);
 		delete (yyvsp[0].s); }
-#line 3162 "engines/director/lingo/lingo-gr.cpp"
+#line 3222 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 126:
-#line 604 "engines/director/lingo/lingo-gr.y"
+  case 127:
+#line 648 "engines/director/lingo/lingo-gr.y"
                                                 {
 		mVar((yyvsp[0].s), kVarGlobal);
 		delete (yyvsp[0].s); }
-#line 3170 "engines/director/lingo/lingo-gr.cpp"
+#line 3230 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 127:
-#line 608 "engines/director/lingo/lingo-gr.y"
+  case 128:
+#line 652 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_property);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		mVar((yyvsp[0].s), kVarProperty);
 		delete (yyvsp[0].s); }
-#line 3180 "engines/director/lingo/lingo-gr.cpp"
+#line 3240 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 128:
-#line 613 "engines/director/lingo/lingo-gr.y"
+  case 129:
+#line 657 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_property);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		mVar((yyvsp[0].s), kVarProperty);
 		delete (yyvsp[0].s); }
-#line 3190 "engines/director/lingo/lingo-gr.cpp"
+#line 3250 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129:
-#line 619 "engines/director/lingo/lingo-gr.y"
+  case 130:
+#line 663 "engines/director/lingo/lingo-gr.y"
                                                 {
 		mVar((yyvsp[0].s), kVarInstance);
 		delete (yyvsp[0].s); }
-#line 3198 "engines/director/lingo/lingo-gr.cpp"
+#line 3258 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 130:
-#line 622 "engines/director/lingo/lingo-gr.y"
+  case 131:
+#line 666 "engines/director/lingo/lingo-gr.y"
                                         {
 		mVar((yyvsp[0].s), kVarInstance);
 		delete (yyvsp[0].s); }
-#line 3206 "engines/director/lingo/lingo-gr.cpp"
+#line 3266 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 131:
-#line 633 "engines/director/lingo/lingo-gr.y"
+  case 132:
+#line 677 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoloop); }
-#line 3212 "engines/director/lingo/lingo-gr.cpp"
+#line 3272 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132:
-#line 634 "engines/director/lingo/lingo-gr.y"
+  case 133:
+#line 678 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_gotonext); }
-#line 3218 "engines/director/lingo/lingo-gr.cpp"
+#line 3278 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 133:
-#line 635 "engines/director/lingo/lingo-gr.y"
+  case 134:
+#line 679 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoprevious); }
-#line 3224 "engines/director/lingo/lingo-gr.cpp"
+#line 3284 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 134:
-#line 636 "engines/director/lingo/lingo-gr.y"
+  case 135:
+#line 680 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_goto); }
-#line 3233 "engines/director/lingo/lingo-gr.cpp"
+#line 3293 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135:
-#line 640 "engines/director/lingo/lingo-gr.y"
+  case 136:
+#line 684 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_goto); }
-#line 3242 "engines/director/lingo/lingo-gr.cpp"
+#line 3302 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136:
-#line 644 "engines/director/lingo/lingo-gr.y"
+  case 137:
+#line 688 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_goto); }
-#line 3251 "engines/director/lingo/lingo-gr.cpp"
+#line 3311 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 139:
-#line 652 "engines/director/lingo/lingo-gr.y"
+  case 140:
+#line 696 "engines/director/lingo/lingo-gr.y"
                                         { // "play #done" is also caught by this
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_play); }
-#line 3260 "engines/director/lingo/lingo-gr.cpp"
+#line 3320 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140:
-#line 656 "engines/director/lingo/lingo-gr.y"
+  case 141:
+#line 700 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_play); }
-#line 3269 "engines/director/lingo/lingo-gr.cpp"
+#line 3329 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 141:
-#line 660 "engines/director/lingo/lingo-gr.y"
+  case 142:
+#line 704 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_play); }
-#line 3278 "engines/director/lingo/lingo-gr.cpp"
+#line 3338 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 142:
-#line 664 "engines/director/lingo/lingo-gr.y"
+  case 143:
+#line 708 "engines/director/lingo/lingo-gr.y"
                      { g_lingo->codeSetImmediate(true); }
-#line 3284 "engines/director/lingo/lingo-gr.cpp"
+#line 3344 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143:
-#line 664 "engines/director/lingo/lingo-gr.y"
+  case 144:
+#line 708 "engines/director/lingo/lingo-gr.y"
                                                                   {
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeFunc((yyvsp[-2].s), (yyvsp[0].narg));
 		delete (yyvsp[-2].s); }
-#line 3293 "engines/director/lingo/lingo-gr.cpp"
+#line 3353 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144:
-#line 694 "engines/director/lingo/lingo-gr.y"
+  case 145:
+#line 738 "engines/director/lingo/lingo-gr.y"
              { startDef(); }
-#line 3299 "engines/director/lingo/lingo-gr.cpp"
+#line 3359 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 145:
-#line 694 "engines/director/lingo/lingo-gr.y"
+  case 146:
+#line 738 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->_currentFactory = NULL; }
-#line 3305 "engines/director/lingo/lingo-gr.cpp"
+#line 3365 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146:
-#line 695 "engines/director/lingo/lingo-gr.y"
+  case 147:
+#line 739 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->code1(LC::c_procret);
 		g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg));
 		endDef();
 		delete (yyvsp[-6].s); }
-#line 3315 "engines/director/lingo/lingo-gr.cpp"
+#line 3375 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 147:
-#line 700 "engines/director/lingo/lingo-gr.y"
+  case 148:
+#line 744 "engines/director/lingo/lingo-gr.y"
                         { g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 3321 "engines/director/lingo/lingo-gr.cpp"
+#line 3381 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 148:
-#line 701 "engines/director/lingo/lingo-gr.y"
+  case 149:
+#line 745 "engines/director/lingo/lingo-gr.y"
                   { startDef(); }
-#line 3327 "engines/director/lingo/lingo-gr.cpp"
+#line 3387 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149:
-#line 702 "engines/director/lingo/lingo-gr.y"
+  case 150:
+#line 746 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->code1(LC::c_procret);
 		g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg), g_lingo->_currentFactory);
 		endDef();
 		delete (yyvsp[-6].s); }
-#line 3337 "engines/director/lingo/lingo-gr.cpp"
+#line 3397 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150:
-#line 707 "engines/director/lingo/lingo-gr.y"
+  case 151:
+#line 751 "engines/director/lingo/lingo-gr.y"
                                                                    {	// D3
 		g_lingo->code1(LC::c_procret);
 		g_lingo->codeDefine(*(yyvsp[-7].s), (yyvsp[-6].code), (yyvsp[-5].narg));
@@ -3346,70 +3406,70 @@ yyreduce:
 		checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
 		delete (yyvsp[-7].s);
 		delete (yyvsp[-1].s); }
-#line 3350 "engines/director/lingo/lingo-gr.cpp"
+#line 3410 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151:
-#line 715 "engines/director/lingo/lingo-gr.y"
+  case 152:
+#line 759 "engines/director/lingo/lingo-gr.y"
                                                {	// D4. No 'end' clause
 		g_lingo->code1(LC::c_procret);
 		g_lingo->codeDefine(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
 		endDef();
 		delete (yyvsp[-5].s); }
-#line 3360 "engines/director/lingo/lingo-gr.cpp"
+#line 3420 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152:
-#line 721 "engines/director/lingo/lingo-gr.y"
+  case 153:
+#line 765 "engines/director/lingo/lingo-gr.y"
          { startDef(); }
-#line 3366 "engines/director/lingo/lingo-gr.cpp"
+#line 3426 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 153:
-#line 721 "engines/director/lingo/lingo-gr.y"
+  case 154:
+#line 765 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory = NULL; }
-#line 3373 "engines/director/lingo/lingo-gr.cpp"
+#line 3433 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154:
-#line 724 "engines/director/lingo/lingo-gr.y"
+  case 155:
+#line 768 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 0; }
-#line 3379 "engines/director/lingo/lingo-gr.cpp"
+#line 3439 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155:
-#line 725 "engines/director/lingo/lingo-gr.y"
+  case 156:
+#line 769 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); (yyval.narg) = 1; delete (yyvsp[0].s); }
-#line 3385 "engines/director/lingo/lingo-gr.cpp"
+#line 3445 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156:
-#line 726 "engines/director/lingo/lingo-gr.y"
+  case 157:
+#line 770 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
-#line 3391 "engines/director/lingo/lingo-gr.cpp"
+#line 3451 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158:
-#line 729 "engines/director/lingo/lingo-gr.y"
+  case 159:
+#line 773 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 3397 "engines/director/lingo/lingo-gr.cpp"
+#line 3457 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159:
-#line 730 "engines/director/lingo/lingo-gr.y"
+  case 160:
+#line 774 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 3403 "engines/director/lingo/lingo-gr.cpp"
+#line 3463 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160:
-#line 732 "engines/director/lingo/lingo-gr.y"
+  case 161:
+#line 776 "engines/director/lingo/lingo-gr.y"
                                         { inDef(); }
-#line 3409 "engines/director/lingo/lingo-gr.cpp"
+#line 3469 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161:
-#line 734 "engines/director/lingo/lingo-gr.y"
+  case 162:
+#line 778 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_call);
 		g_lingo->codeString((yyvsp[-1].s)->c_str());
@@ -3417,113 +3477,113 @@ yyreduce:
 		WRITE_UINT32(&numpar, (yyvsp[0].narg));
 		g_lingo->code1(numpar);
 		delete (yyvsp[-1].s); }
-#line 3421 "engines/director/lingo/lingo-gr.cpp"
+#line 3481 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162:
-#line 742 "engines/director/lingo/lingo-gr.y"
+  case 163:
+#line 786 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 0; }
-#line 3427 "engines/director/lingo/lingo-gr.cpp"
+#line 3487 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163:
-#line 743 "engines/director/lingo/lingo-gr.y"
+  case 164:
+#line 787 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.narg) = 1; }
-#line 3433 "engines/director/lingo/lingo-gr.cpp"
+#line 3493 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164:
-#line 744 "engines/director/lingo/lingo-gr.y"
+  case 165:
+#line 788 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3439 "engines/director/lingo/lingo-gr.cpp"
+#line 3499 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165:
-#line 746 "engines/director/lingo/lingo-gr.y"
+  case 166:
+#line 790 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3445 "engines/director/lingo/lingo-gr.cpp"
+#line 3505 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166:
-#line 747 "engines/director/lingo/lingo-gr.y"
+  case 167:
+#line 791 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3451 "engines/director/lingo/lingo-gr.cpp"
+#line 3511 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167:
-#line 749 "engines/director/lingo/lingo-gr.y"
+  case 168:
+#line 793 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = (yyvsp[-1].code); }
-#line 3457 "engines/director/lingo/lingo-gr.cpp"
+#line 3517 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168:
-#line 751 "engines/director/lingo/lingo-gr.y"
+  case 169:
+#line 795 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3463 "engines/director/lingo/lingo-gr.cpp"
+#line 3523 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169:
-#line 752 "engines/director/lingo/lingo-gr.y"
+  case 170:
+#line 796 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3469 "engines/director/lingo/lingo-gr.cpp"
+#line 3529 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170:
-#line 753 "engines/director/lingo/lingo-gr.y"
+  case 171:
+#line 797 "engines/director/lingo/lingo-gr.y"
                      { (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3475 "engines/director/lingo/lingo-gr.cpp"
+#line 3535 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171:
-#line 754 "engines/director/lingo/lingo-gr.y"
+  case 172:
+#line 798 "engines/director/lingo/lingo-gr.y"
                          { (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3481 "engines/director/lingo/lingo-gr.cpp"
+#line 3541 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172:
-#line 756 "engines/director/lingo/lingo-gr.y"
+  case 173:
+#line 800 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 3487 "engines/director/lingo/lingo-gr.cpp"
+#line 3547 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 173:
-#line 757 "engines/director/lingo/lingo-gr.y"
+  case 174:
+#line 801 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3493 "engines/director/lingo/lingo-gr.cpp"
+#line 3553 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 174:
-#line 759 "engines/director/lingo/lingo-gr.y"
+  case 175:
+#line 803 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 3499 "engines/director/lingo/lingo-gr.cpp"
+#line 3559 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 175:
-#line 760 "engines/director/lingo/lingo-gr.y"
+  case 176:
+#line 804 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3505 "engines/director/lingo/lingo-gr.cpp"
+#line 3565 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 176:
-#line 762 "engines/director/lingo/lingo-gr.y"
+  case 177:
+#line 806 "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 3514 "engines/director/lingo/lingo-gr.cpp"
+#line 3574 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 177:
-#line 766 "engines/director/lingo/lingo-gr.y"
+  case 178:
+#line 810 "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 3523 "engines/director/lingo/lingo-gr.cpp"
+#line 3583 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3527 "engines/director/lingo/lingo-gr.cpp"
+#line 3587 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3722,7 +3782,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 772 "engines/director/lingo/lingo-gr.y"
+#line 816 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index acc9da4c70..9d2da20e4e 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -147,7 +147,7 @@ extern int yydebug;
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 134 "engines/director/lingo/lingo-gr.y"
+#line 156 "engines/director/lingo/lingo-gr.y"
 
 	Common::String *s;
 	int i;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index fcd6ba2111..8366d22c78 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -104,6 +104,28 @@ static void endDef() {
 	inNone();
 }
 
+static void startRepeat() {
+	g_lingo->_repeatStack.push_back(new RepeatBlock);
+}
+
+static void endRepeat(uint exitPos, uint nextPos) {
+	RepeatBlock *block = g_lingo->_repeatStack.back();
+	g_lingo->_repeatStack.pop_back();
+	for (uint i = 0; i < block->exits.size(); i++) {
+		uint32 pos = block->exits[i];
+		inst exit = 0;
+		WRITE_UINT32(&exit, exitPos - (pos - 1));
+		(*g_lingo->_currentAssembly)[pos] = exit;
+	}
+	for (uint i = 0; i < block->nexts.size(); i++) {
+		uint32 pos = block->nexts[i];
+		inst next = 0;
+		WRITE_UINT32(&next, nextPos - (pos - 1));
+		(*g_lingo->_currentAssembly)[pos] = next;
+	}
+	delete block;
+}
+
 static VarType globalCheck() {
 	// If in a definition, assume variables are local unless
 	// they were declared global with `global varname`
@@ -290,12 +312,13 @@ stmt: stmtoneliner
 	//   statements
 	// end repeat
 	//
-	| tREPEAT tWHILE lbl expr jumpifz[body] stmtlist jump[end2] tENDREPEAT	{
+	| tREPEAT tWHILE lbl expr jumpifz[body] startrepeat stmtlist jump[end2] tENDREPEAT	{
 		inst start = 0, end = 0;
 		WRITE_UINT32(&start, $lbl - $end2 + 1);
 		WRITE_UINT32(&end, $end2 - $body + 2);
 		(*g_lingo->_currentAssembly)[$body] = end;		/* end, if cond fails */
-		(*g_lingo->_currentAssembly)[$end2] = start; }	/* looping back */
+		(*g_lingo->_currentAssembly)[$end2] = start;	/* looping back */
+		endRepeat($end2 + 1, $lbl);	}	/* code any exit/next repeats */
 
 	// repeat with index = start to end
 	//   statements
@@ -309,8 +332,9 @@ stmt: stmtoneliner
 				{ g_lingo->code1(LC::c_eval);
 				  g_lingo->codeString($ID->c_str()); }
 			tTO expr[finish]
-				{ g_lingo->code1(LC::c_le); } jumpifz stmtlist tENDREPEAT {
+				{ g_lingo->code1(LC::c_le); } jumpifz startrepeat stmtlist tENDREPEAT {
 
+		int nextPos = g_lingo->_currentAssembly->size();
 		g_lingo->code1(LC::c_eval);
 		g_lingo->codeString($ID->c_str());
 		g_lingo->code1(LC::c_intpush);
@@ -326,7 +350,9 @@ stmt: stmtoneliner
 		WRITE_UINT32(&loop, $varassign - pos + 2);
 		WRITE_UINT32(&end, pos - $jumpifz + 2);
 		(*g_lingo->_currentAssembly)[pos] = loop;		/* final count value */
-		(*g_lingo->_currentAssembly)[$jumpifz] = end;	}	/* end, if cond fails */
+		(*g_lingo->_currentAssembly)[$jumpifz] = end;	/* end, if cond fails */
+		endRepeat(pos + 1, nextPos); }	/* code any exit/next repeats */
+
 
 	// repeat with index = high down to low
 	//   statements
@@ -341,8 +367,9 @@ stmt: stmtoneliner
 				  g_lingo->codeString($ID->c_str()); }
 			tDOWN tTO expr[finish]
 				{ g_lingo->code1(LC::c_ge); }
-			jumpifz stmtlist tENDREPEAT {
+			jumpifz startrepeat stmtlist tENDREPEAT {
 
+		int nextPos = g_lingo->_currentAssembly->size();
 		g_lingo->code1(LC::c_eval);
 		g_lingo->codeString($ID->c_str());
 		g_lingo->code1(LC::c_intpush);
@@ -358,8 +385,8 @@ stmt: stmtoneliner
 		WRITE_UINT32(&loop, $varassign - pos + 2);
 		WRITE_UINT32(&end, pos - $jumpifz + 2);
 		(*g_lingo->_currentAssembly)[pos] = loop;		/* final count value */
-		(*g_lingo->_currentAssembly)[$jumpifz] = end;	}	/* end, if cond fails */
-
+		(*g_lingo->_currentAssembly)[$jumpifz] = end;	/* end, if cond fails */
+		endRepeat(pos + 1, nextPos); }	/* code any exit/next repeats */
 
 	// repeat with index in list
 	//   statements
@@ -389,8 +416,9 @@ stmt: stmtoneliner
 				  g_lingo->codeString($ID->c_str());
 				  mVar($ID, globalCheck());
 				  g_lingo->code1(LC::c_assign); }
-			stmtlist tENDREPEAT {
+			startrepeat stmtlist tENDREPEAT {
 
+		int nextPos = g_lingo->_currentAssembly->size();
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_add);			// Increment counter
@@ -405,16 +433,25 @@ stmt: stmtoneliner
 		WRITE_UINT32(&end, end2 - $jumpifz + 1);
 
 		(*g_lingo->_currentAssembly)[jump + 1] = loop;		/* final count value */
-		(*g_lingo->_currentAssembly)[$jumpifz] = end;	}	/* end, if cond fails */
+		(*g_lingo->_currentAssembly)[$jumpifz] = end;		/* end, if cond fails */
+		endRepeat(end2, nextPos); }	/* code any exit/next repeats */
 
 	| tNEXT tREPEAT {
-		g_lingo->code1(LC::c_nextRepeat); }
+		if (g_lingo->_repeatStack.size()) {
+			g_lingo->code2(LC::c_jump, 0);
+			int pos = g_lingo->_currentAssembly->size() - 1;
+			g_lingo->_repeatStack.back()->nexts.push_back(pos);
+		} else {
+			warning("# LINGO: next repeat not inside repeat block");
+		} }
 	| tWHEN ID tTHEN expr {
 		g_lingo->code1(LC::c_whencode);
 		g_lingo->codeString($ID->c_str()); }
 	| tTELL expr '\n' tellstart stmtlist lbl tENDTELL { g_lingo->code1(LC::c_telldone); }
 	| tTELL expr tTO tellstart stmtoneliner lbl { g_lingo->code1(LC::c_telldone); }
 
+startrepeat:	/* nothing */	{ startRepeat(); }
+
 tellstart:	  /* empty */	{ g_lingo->code1(LC::c_tell); }
 
 ifstmt: if expr jumpifz[then] tTHEN stmtlist jump[else1] elseifstmtlist lbl[end3] tENDIF {
@@ -584,7 +621,14 @@ reference: 	RBLTIN simpleexpr	{
 proc: tPUT expr					{ g_lingo->code1(LC::c_printtop); }
 	| gotofunc
 	| playfunc
-	| tEXIT tREPEAT				{ g_lingo->code1(LC::c_exitRepeat); }
+	| tEXIT tREPEAT				{
+		if (g_lingo->_repeatStack.size()) {
+			g_lingo->code2(LC::c_jump, 0);
+			int pos = g_lingo->_currentAssembly->size() - 1;
+			g_lingo->_repeatStack.back()->exits.push_back(pos);
+		} else {
+			warning("# LINGO: exit repeat not inside repeat block");
+		} }
 	| tEXIT						{ g_lingo->code1(LC::c_procret); }
 	| tGLOBAL					{ inArgs(); } globallist { inLast(); }
 	| tPROPERTY					{ inArgs(); } propertylist { inLast(); }
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 6325b26091..31fc9f991d 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -159,7 +159,6 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
 	_currentChannelId = -1;
 	_pc = 0;
 	_abort = false;
-	_nextRepeat = false;
 	_indef = kStateNone;
 	_indef = kStateNone;
 	_immediateMode = false;
@@ -177,8 +176,6 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
 
 	_cursorOnStack = false;
 
-	_exitRepeat = false;
-
 	_localvars = NULL;
 
 	_dontPassEvent = false;
@@ -561,7 +558,7 @@ Common::String Lingo::decodeInstruction(ScriptData *sd, uint pc, uint *newPc) {
 void Lingo::execute(uint pc) {
 	int counter = 0;
 
-	for (_pc = pc; !_abort && (*_currentScript)[_pc] != STOP && !_nextRepeat;) {
+	for (_pc = pc; !_abort && (*_currentScript)[_pc] != STOP;) {
 		Common::String instr = decodeInstruction(_currentScript, _pc);
 		uint current = _pc;
 
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 253359087c..621f9ca7db 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -303,6 +303,11 @@ struct LingoArchive {
 	SymbolHash functionHandlers;
 };
 
+struct RepeatBlock {
+	Common::Array<uint32> exits;
+	Common::Array<uint32> nexts;
+};
+
 class Lingo {
 
 public:
@@ -475,6 +480,7 @@ public:
 	bool _ignoreError;
 	bool _inFactory;
 	Object *_currentFactory;
+	Common::Array<RepeatBlock *> _repeatStack;
 
 	Common::Array<Common::String *> _argstack;
 	Common::HashMap<Common::String, VarType, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> *_methodVars;
@@ -488,7 +494,6 @@ public:
 	Object *_currentMeObj;
 
 	bool _abort;
-	bool _nextRepeat;
 	bool _immediateMode;
 
 	Common::Array<CFrame *> _callstack;
@@ -509,8 +514,6 @@ public:
 
 	bool _inCond;
 
-	bool _exitRepeat;
-
 	bool _cursorOnStack;
 
 private:




More information about the Scummvm-git-logs mailing list