[Scummvm-git-logs] scummvm master -> 78f616e6f8139d52fb51752c4f508bcce71dda48

sev- sev at scummvm.org
Tue May 26 23:38:59 UTC 2020


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

Summary:
892c9caae3 DIRECTOR: LINGO: Made 'if' Lingo non-recursive
78f616e6f8 DIRECTOR: LINGO: Made compiled 'if' statement relocatable


Commit: 892c9caae3dd9ae0bccdc735f375090086516aba
    https://github.com/scummvm/scummvm/commit/892c9caae3dd9ae0bccdc735f375090086516aba
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-05-27T01:14:41+02:00

Commit Message:
DIRECTOR: LINGO: Made 'if' Lingo non-recursive

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


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 7e39ac9896..abc98887c8 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -467,20 +467,16 @@ void Lingo::codeLabel(int label) {
 	debugC(4, kDebugLingoCompile, "codeLabel: Added label %d", label);
 }
 
-void Lingo::processIf(int startlabel, int endlabel, int finalElse) {
-	inst ielse1, iend;
-	int  else1 = 0;
+void Lingo::processIf(int toplabel, int endlabel) {
+	inst iend;
 
-	debugC(4, kDebugLingoCompile, "processIf(%d, %d, %d)", startlabel, endlabel, finalElse);
+	debugC(4, kDebugLingoCompile, "processIf(%d, %d)", toplabel, endlabel);
 
 	WRITE_UINT32(&iend, endlabel);
 
-	int finalElsePos = -1;
-	bool multiIf = _labelstack.size() > 1;
-
 	while (true) {
 		if (_labelstack.empty()) {
-			warning("Label stack underflow");
+			warning("Lingo::processIf(): Label stack underflow");
 			break;
 		}
 
@@ -491,28 +487,9 @@ void Lingo::processIf(int startlabel, int endlabel, int finalElse) {
 		if (!label)
 			break;
 
-		if (else1)
-			else1 = else1 - label;
-
-		// Store position of the last 'if', so we could set reference to the
-		// 'finalElse' part
-		if (finalElse && finalElsePos == -1) {
-			finalElsePos = label;
-		}
-
-		debugC(4, kDebugLingoCompile, "processIf: %d: %d %d", label, else1 + label, endlabel + label);
-
-		WRITE_UINT32(&ielse1, else1);
-		(*_currentScript)[label + 2] = ielse1;    /* elsepart */
-		(*_currentScript)[label + 3] = iend;      /* end, if cond fails */
-
-		else1 = label;
-	}
+		debugC(4, kDebugLingoCompile, "processIf: label at %d", label);
 
-	if (multiIf && finalElsePos != -1) {
-		debugC(4, kDebugLingoCompile, "processIf: storing %d to %d", finalElse - finalElsePos + startlabel, finalElsePos);
-		WRITE_UINT32(&ielse1, finalElse - finalElsePos + startlabel);
-		(*_currentScript)[finalElsePos + 2] = ielse1;
+		(*_currentScript)[label] = iend;      /* end, if cond fails */
 	}
 }
 
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index da8e7d7cb9..6ab25af009 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -417,44 +417,45 @@ enum yysymbol_kind_t
   YYSYMBOL_ifoneliner = 115,               /* ifoneliner  */
   YYSYMBOL_repeatwhile = 116,              /* repeatwhile  */
   YYSYMBOL_repeatwith = 117,               /* repeatwith  */
-  YYSYMBOL_if = 118,                       /* if  */
-  YYSYMBOL_elseif = 119,                   /* elseif  */
-  YYSYMBOL_begin = 120,                    /* begin  */
-  YYSYMBOL_end = 121,                      /* end  */
-  YYSYMBOL_stmtlist = 122,                 /* stmtlist  */
-  YYSYMBOL_when = 123,                     /* when  */
-  YYSYMBOL_simpleexpr = 124,               /* simpleexpr  */
-  YYSYMBOL_expr = 125,                     /* expr  */
-  YYSYMBOL_chunkexpr = 126,                /* chunkexpr  */
-  YYSYMBOL_reference = 127,                /* reference  */
-  YYSYMBOL_proc = 128,                     /* proc  */
-  YYSYMBOL_129_1 = 129,                    /* $@1  */
-  YYSYMBOL_130_2 = 130,                    /* $@2  */
-  YYSYMBOL_131_3 = 131,                    /* $@3  */
-  YYSYMBOL_globallist = 132,               /* globallist  */
-  YYSYMBOL_propertylist = 133,             /* propertylist  */
-  YYSYMBOL_instancelist = 134,             /* instancelist  */
-  YYSYMBOL_gotofunc = 135,                 /* gotofunc  */
-  YYSYMBOL_gotomovie = 136,                /* gotomovie  */
-  YYSYMBOL_playfunc = 137,                 /* playfunc  */
-  YYSYMBOL_138_4 = 138,                    /* $@4  */
-  YYSYMBOL_defn = 139,                     /* defn  */
-  YYSYMBOL_140_5 = 140,                    /* $@5  */
-  YYSYMBOL_141_6 = 141,                    /* $@6  */
-  YYSYMBOL_142_7 = 142,                    /* $@7  */
-  YYSYMBOL_on = 143,                       /* on  */
-  YYSYMBOL_144_8 = 144,                    /* $@8  */
-  YYSYMBOL_argdef = 145,                   /* argdef  */
-  YYSYMBOL_endargdef = 146,                /* endargdef  */
-  YYSYMBOL_argstore = 147,                 /* argstore  */
-  YYSYMBOL_macro = 148,                    /* macro  */
-  YYSYMBOL_arglist = 149,                  /* arglist  */
-  YYSYMBOL_nonemptyarglist = 150,          /* nonemptyarglist  */
-  YYSYMBOL_list = 151,                     /* list  */
-  YYSYMBOL_valuelist = 152,                /* valuelist  */
-  YYSYMBOL_linearlist = 153,               /* linearlist  */
-  YYSYMBOL_proplist = 154,                 /* proplist  */
-  YYSYMBOL_proppair = 155                  /* proppair  */
+  YYSYMBOL_jumpifz = 118,                  /* jumpifz  */
+  YYSYMBOL_jump = 119,                     /* jump  */
+  YYSYMBOL_if = 120,                       /* if  */
+  YYSYMBOL_begin = 121,                    /* begin  */
+  YYSYMBOL_end = 122,                      /* end  */
+  YYSYMBOL_stmtlist = 123,                 /* stmtlist  */
+  YYSYMBOL_when = 124,                     /* when  */
+  YYSYMBOL_simpleexpr = 125,               /* simpleexpr  */
+  YYSYMBOL_expr = 126,                     /* expr  */
+  YYSYMBOL_chunkexpr = 127,                /* chunkexpr  */
+  YYSYMBOL_reference = 128,                /* reference  */
+  YYSYMBOL_proc = 129,                     /* proc  */
+  YYSYMBOL_130_1 = 130,                    /* $@1  */
+  YYSYMBOL_131_2 = 131,                    /* $@2  */
+  YYSYMBOL_132_3 = 132,                    /* $@3  */
+  YYSYMBOL_globallist = 133,               /* globallist  */
+  YYSYMBOL_propertylist = 134,             /* propertylist  */
+  YYSYMBOL_instancelist = 135,             /* instancelist  */
+  YYSYMBOL_gotofunc = 136,                 /* gotofunc  */
+  YYSYMBOL_gotomovie = 137,                /* gotomovie  */
+  YYSYMBOL_playfunc = 138,                 /* playfunc  */
+  YYSYMBOL_139_4 = 139,                    /* $@4  */
+  YYSYMBOL_defn = 140,                     /* defn  */
+  YYSYMBOL_141_5 = 141,                    /* $@5  */
+  YYSYMBOL_142_6 = 142,                    /* $@6  */
+  YYSYMBOL_143_7 = 143,                    /* $@7  */
+  YYSYMBOL_on = 144,                       /* on  */
+  YYSYMBOL_145_8 = 145,                    /* $@8  */
+  YYSYMBOL_argdef = 146,                   /* argdef  */
+  YYSYMBOL_endargdef = 147,                /* endargdef  */
+  YYSYMBOL_argstore = 148,                 /* argstore  */
+  YYSYMBOL_macro = 149,                    /* macro  */
+  YYSYMBOL_arglist = 150,                  /* arglist  */
+  YYSYMBOL_nonemptyarglist = 151,          /* nonemptyarglist  */
+  YYSYMBOL_list = 152,                     /* list  */
+  YYSYMBOL_valuelist = 153,                /* valuelist  */
+  YYSYMBOL_linearlist = 154,               /* linearlist  */
+  YYSYMBOL_proplist = 155,                 /* proplist  */
+  YYSYMBOL_proppair = 156                  /* proppair  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -764,14 +765,14 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  128
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2389
+#define YYLAST   2388
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  104
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  52
+#define YYNNTS  53
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  173
+#define YYNRULES  174
 /* YYNSTATES -- Number of states.  */
 #define YYNSTATES  378
 
@@ -833,21 +834,21 @@ static const yytype_int16 yyrline[] =
        0,   165,   165,   166,   168,   169,   170,   172,   178,   182,
      193,   194,   195,   201,   208,   214,   221,   227,   234,   245,
      252,   253,   254,   256,   257,   258,   259,   261,   262,   267,
-     278,   295,   307,   318,   320,   325,   329,   334,   338,   348,
-     359,   360,   362,   369,   379,   390,   392,   398,   404,   411,
-     413,   415,   416,   417,   419,   425,   428,   431,   435,   439,
-     443,   451,   452,   453,   464,   465,   466,   469,   472,   475,
-     478,   484,   489,   495,   496,   497,   498,   499,   500,   501,
-     502,   503,   504,   505,   506,   507,   508,   509,   510,   511,
-     512,   513,   514,   515,   516,   517,   519,   520,   521,   522,
-     523,   524,   525,   526,   528,   531,   533,   534,   535,   536,
-     537,   538,   538,   539,   539,   540,   540,   541,   544,   547,
-     548,   550,   555,   561,   566,   572,   577,   590,   591,   592,
-     593,   597,   601,   606,   607,   609,   613,   617,   621,   621,
-     651,   651,   651,   657,   658,   658,   664,   672,   678,   678,
-     681,   682,   683,   685,   686,   687,   689,   691,   699,   700,
-     701,   703,   704,   706,   708,   709,   710,   711,   713,   714,
-     716,   717,   719,   723
+     278,   295,   307,   318,   320,   325,   329,   334,   338,   345,
+     353,   354,   356,   362,   368,   374,   376,   382,   386,   390,
+     393,   395,   397,   398,   399,   401,   407,   410,   413,   417,
+     421,   425,   433,   434,   435,   446,   447,   448,   451,   454,
+     457,   460,   466,   471,   477,   478,   479,   480,   481,   482,
+     483,   484,   485,   486,   487,   488,   489,   490,   491,   492,
+     493,   494,   495,   496,   497,   498,   499,   501,   502,   503,
+     504,   505,   506,   507,   508,   510,   513,   515,   516,   517,
+     518,   519,   520,   520,   521,   521,   522,   522,   523,   526,
+     529,   530,   532,   537,   543,   548,   554,   559,   572,   573,
+     574,   575,   579,   583,   588,   589,   591,   595,   599,   603,
+     603,   633,   633,   633,   639,   640,   640,   646,   654,   660,
+     660,   663,   664,   665,   667,   668,   669,   671,   673,   681,
+     682,   683,   685,   686,   688,   690,   691,   692,   693,   695,
+     696,   698,   699,   701,   705
 };
 #endif
 
@@ -881,13 +882,13 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "'/'", "'%'", "'\\n'", "'('", "')'", "','", "'['", "']'", "':'",
   "$accept", "program", "programline", "asgn", "stmtoneliner",
   "stmtonelinerwithif", "stmt", "tellstart", "ifstmt", "elseifstmtlist",
-  "elseifstmt", "ifoneliner", "repeatwhile", "repeatwith", "if", "elseif",
-  "begin", "end", "stmtlist", "when", "simpleexpr", "expr", "chunkexpr",
-  "reference", "proc", "$@1", "$@2", "$@3", "globallist", "propertylist",
-  "instancelist", "gotofunc", "gotomovie", "playfunc", "$@4", "defn",
-  "$@5", "$@6", "$@7", "on", "$@8", "argdef", "endargdef", "argstore",
-  "macro", "arglist", "nonemptyarglist", "list", "valuelist", "linearlist",
-  "proplist", "proppair", YY_NULLPTR
+  "elseifstmt", "ifoneliner", "repeatwhile", "repeatwith", "jumpifz",
+  "jump", "if", "begin", "end", "stmtlist", "when", "simpleexpr", "expr",
+  "chunkexpr", "reference", "proc", "$@1", "$@2", "$@3", "globallist",
+  "propertylist", "instancelist", "gotofunc", "gotomovie", "playfunc",
+  "$@4", "defn", "$@5", "$@6", "$@7", "on", "$@8", "argdef", "endargdef",
+  "argstore", "macro", "arglist", "nonemptyarglist", "list", "valuelist",
+  "linearlist", "proplist", "proppair", YY_NULLPTR
   };
   return yy_sname[yysymbol];
 }
@@ -912,12 +913,12 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-279)
+#define YYPACT_NINF (-318)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF (-165)
+#define YYTABLE_NINF (-166)
 
 #define yytable_value_is_error(Yyn) \
   0
@@ -926,44 +927,44 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     776,   -82,  -279,  -279,    72,  -279,   598,   314,    72,   -27,
-     499,  -279,  -279,  -279,  -279,  -279,  -279,    -9,  -279,  1623,
-    -279,  -279,  -279,    -2,  1779,    46,    43,    33,    37,  1861,
-    1660,  -279,  1861,  1861,  1861,  1861,  1861,  1861,  1861,  -279,
-    -279,  1861,  1861,  1861,   409,    74,   -17,  -279,  -279,  -279,
-    -279,  1861,   -24,  1861,  1459,  -279,  2281,  -279,  -279,  -279,
-    -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,   -16,
-    1779,  1742,  2281,   -10,  1742,   -10,  -279,    72,  1742,  2281,
-      -3,   687,  -279,  -279,    86,  1861,  -279,    54,  -279,  1853,
-    -279,   103,  -279,   105,   381,   107,  -279,   -15,    72,    72,
-      -8,    97,   100,  -279,  2178,  1853,  -279,   128,  -279,  1901,
-    1934,  1967,  2000,  2248,  2165,   129,   131,  -279,  -279,  2211,
-      55,    56,  -279,  2281,    59,    62,    64,  -279,  -279,   776,
-    2281,  -279,  -279,  2281,  -279,  -279,  1861,  2281,  -279,  -279,
-    1861,  1861,  1861,  1861,  1861,  1861,  1861,  1861,  1861,  1861,
-    1861,  1861,  1861,  1861,  1861,  1861,  1861,   139,  1742,   381,
-    2211,    11,  1861,    23,  -279,    25,  1861,   -10,   139,  -279,
-      68,  2281,  1861,  -279,  -279,    72,    30,  1861,  1861,  -279,
-    1861,  1861,     1,   121,  1861,  1861,  1861,  -279,  1861,  -279,
-    -279,    76,  1861,  1861,  1861,  1861,  1861,  1861,  1861,  1861,
-    1861,  1861,  -279,  -279,  -279,    77,  -279,  -279,    72,    72,
-    -279,  1861,    -7,  -279,  -279,  1861,  1861,   130,  -279,  2281,
-      22,    22,    22,    22,  2294,  2294,  -279,    26,    22,    22,
-      22,    22,    26,   -61,   -61,  -279,  -279,  -279,   -57,  -279,
-    2281,  -279,  -279,  2281,   -30,   158,  2281,  -279,   141,  -279,
-    -279,  2281,  2281,  2281,    22,  1861,  1861,   170,  2281,    22,
-    2281,  2281,   171,  2281,  2033,  2281,  2066,  2281,  2099,  2281,
-    2132,  2281,  2281,  1541,  -279,   172,  -279,  -279,  2281,    55,
-      56,  -279,  1203,  2281,  2281,  -279,   146,  -279,   174,  -279,
-    -279,   139,  1861,  2281,    22,    72,  -279,  1861,  1861,  1861,
-    1861,  -279,  1288,  -279,  -279,  -279,   115,  -279,   -29,  1117,
-    1541,  -279,  -279,  -279,   -12,  2281,   149,  2281,  2281,  2281,
-    2281,  -279,   116,  -279,  1203,   152,  1861,  -279,  -279,   862,
-     947,  -279,  1861,  -279,   120,  1861,  2281,    90,   -28,   182,
-    -279,  2281,  -279,  2281,  -279,  -279,  -279,  -279,  1861,   125,
-    -279,  -279,  -279,   113,  1032,  -279,  1203,  -279,  2281,  -279,
-    1541,   190,  1203,   132,  1373,   164,  -279,  -279,   133,  -279,
-     135,  -279,   136,  -279,  -279,  1117,  -279,  -279
+     775,   -63,  -318,  -318,   199,  -318,   597,   313,   199,    25,
+     498,  -318,  -318,  -318,  -318,  -318,  -318,    41,  -318,  1622,
+    -318,  -318,  -318,    52,  1778,   -36,    43,    80,    83,  1860,
+    1659,  -318,  1860,  1860,  1860,  1860,  1860,  1860,  1860,  -318,
+    -318,  1860,  1860,  1860,   408,   114,    19,  -318,  -318,  -318,
+    -318,  1860,   -24,  1860,  1458,  -318,  2280,  -318,  -318,  -318,
+    -318,  -318,  -318,  -318,  -318,  -318,  -318,  -318,  -318,    17,
+    1778,  1741,  2280,    20,  1741,    20,  -318,   199,  1741,  2280,
+      21,   686,  -318,  -318,    91,  1860,  -318,    72,  -318,  1852,
+    -318,    93,  -318,    96,   380,    97,  -318,    -8,   199,   199,
+       5,    70,    74,  -318,  2177,  1852,  -318,    99,  -318,  1900,
+    1933,  1966,  1999,  2247,  2164,   102,   103,  -318,  -318,  2210,
+      29,    30,  -318,  2280,    51,    54,    55,  -318,  -318,   775,
+    2280,  -318,  -318,  2280,  -318,  -318,  1860,  2280,  -318,  -318,
+    1860,  1860,  1860,  1860,  1860,  1860,  1860,  1860,  1860,  1860,
+    1860,  1860,  1860,  1860,  1860,  1860,  1860,   135,  1741,   380,
+    2210,   -10,  1860,     8,  -318,    11,  1860,    20,   135,  -318,
+      62,  2280,  1860,  -318,  -318,   199,    18,  1860,  1860,  -318,
+    1860,  1860,    13,   115,  1860,  1860,  1860,  -318,  1860,  -318,
+    -318,    64,  1860,  1860,  1860,  1860,  1860,  1860,  1860,  1860,
+    1860,  1860,  -318,  -318,  -318,    65,  -318,  -318,   199,   199,
+    -318,  1860,    22,  -318,  -318,  1860,  1860,   116,  -318,  2280,
+       7,     7,     7,     7,  2293,  2293,  -318,    -7,     7,     7,
+       7,     7,    -7,   -55,   -55,  -318,  -318,  -318,   -75,  -318,
+    2280,  -318,  -318,  2280,   -44,   141,  2280,  -318,   124,  -318,
+    -318,  2280,  2280,  2280,     7,  1860,  1860,   147,  2280,     7,
+    2280,  2280,   157,  2280,  2032,  2280,  2065,  2280,  2098,  2280,
+    2131,  2280,  2280,  1540,  -318,   158,  -318,  -318,  2280,    29,
+      30,  -318,  1202,  2280,  2280,  -318,   144,  -318,   172,  -318,
+    -318,   135,  1860,  2280,     7,   199,  -318,  1860,  1860,  1860,
+    1860,  -318,  1287,  -318,  -318,  -318,   117,  -318,    -2,  1116,
+    1540,  -318,  -318,  -318,   -26,  2280,   148,  2280,  2280,  2280,
+    2280,  -318,   113,  -318,  1202,   149,  1860,  -318,   120,   861,
+     946,  -318,  1860,  -318,   121,  1860,  2280,    76,   171,   126,
+     191,  -318,  2280,  -318,  2280,  -318,  -318,  1860,  -318,   137,
+    -318,  -318,  -318,   127,  1031,  -318,  1202,  -318,  2280,  -318,
+    1540,   195,  1202,   142,  1372,   177,  -318,  -318,   145,  -318,
+     150,  -318,   152,  -318,  -318,  1116,  -318,  -318
 };
 
   /* YYDEFACTSTATE-NUM -- Default reduction number in state STATE-NUM.
@@ -971,66 +972,66 @@ static const yytype_int16 yypact[] =
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,    55,    60,     0,    56,     0,     0,     0,     0,
-       0,    58,    57,   138,   144,    71,    72,   110,   111,     0,
-     127,    47,   140,     0,     0,     0,     0,     0,     0,     0,
-       0,   115,     0,     0,     0,     0,     0,     0,     0,   113,
-     148,     0,     0,     0,     0,     0,     2,    73,    27,     6,
-      28,     0,     0,     0,     0,    64,    21,   105,    65,    22,
-     107,   108,     5,    49,    20,    62,    63,    59,    70,    59,
-       0,     0,   159,   118,     0,    67,   104,     0,     0,   161,
-     157,     0,    49,   109,     0,     0,   128,     0,   129,   130,
-     132,     0,    33,     0,   106,     0,    45,     0,     0,     0,
-       0,     0,     0,   143,   120,   135,   137,     0,    87,     0,
-       0,     0,     0,     0,     0,     0,     0,    92,    93,     0,
-      58,    57,   165,   168,     0,   166,   167,   170,     1,     0,
-      50,    49,    49,    50,    50,    26,     0,    24,    25,    23,
+       0,     0,    56,    61,     0,    57,     0,     0,     0,     0,
+       0,    59,    58,   139,   145,    72,    73,   111,   112,     0,
+     128,    49,   141,     0,     0,     0,     0,     0,     0,     0,
+       0,   116,     0,     0,     0,     0,     0,     0,     0,   114,
+     149,     0,     0,     0,     0,     0,     2,    74,    27,     6,
+      28,     0,     0,     0,     0,    65,    21,   106,    66,    22,
+     108,   109,     5,    50,    20,    63,    64,    60,    71,    60,
+       0,     0,   160,   119,     0,    68,   105,     0,     0,   162,
+     158,     0,    50,   110,     0,     0,   129,     0,   130,   131,
+     133,     0,    33,     0,   107,     0,    45,     0,     0,     0,
+       0,     0,     0,   144,   121,   136,   138,     0,    88,     0,
+       0,     0,     0,     0,     0,     0,     0,    93,    94,     0,
+      59,    58,   166,   169,     0,   167,   168,   171,     1,     0,
+      51,    50,    50,    47,    51,    26,     0,    24,    25,    23,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   150,     0,     0,
-     159,     0,     0,     0,    69,     0,     0,   139,   150,   121,
-     112,   134,     0,   131,   141,     0,     0,     0,     0,    46,
-       0,     0,     0,     0,     0,     0,     0,    54,     0,   136,
-     125,   116,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    37,    37,   123,   114,   149,    61,     0,     0,
-     163,     0,     0,     3,    51,     0,     0,     0,    34,    50,
-      83,    84,    81,    82,    85,    86,    78,    89,    90,    91,
-      80,    79,    88,    74,    75,    76,    77,   151,     0,   117,
-     160,    66,    68,   162,     0,     0,   133,    49,     0,     7,
+       0,     0,     0,     0,     0,     0,     0,   151,     0,     0,
+     160,     0,     0,     0,    70,     0,     0,   140,   151,   122,
+     113,   135,     0,   132,   142,     0,     0,     0,     0,    46,
+       0,     0,     0,     0,     0,     0,     0,    55,     0,   137,
+     126,   117,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    37,    37,   124,   115,   150,    62,     0,     0,
+     164,     0,     0,     3,    52,     0,     0,     0,    34,    47,
+      84,    85,    82,    83,    86,    87,    79,    90,    91,    92,
+      81,    80,    89,    75,    76,    77,    78,   152,     0,   118,
+     161,    67,    69,   163,     0,     0,   134,    50,     0,     7,
        8,    10,    11,    15,    13,     0,     0,     0,    14,    12,
-      19,   119,     0,    96,     0,    98,     0,   100,     0,   102,
-       0,    94,    95,     0,    51,     0,   173,   172,   169,     0,
-       0,   171,     0,    50,    50,    51,     0,   156,     0,   156,
-     122,   150,     0,    16,    17,     0,   126,     0,     0,     0,
-       0,    50,     0,   124,    52,    53,     0,    51,     0,     0,
-       0,    51,   152,    51,     0,     9,     0,    97,    99,   101,
-     103,    36,     0,    29,     0,     0,     0,    40,    50,     0,
-       0,   156,     0,    35,     0,     0,    50,    50,     0,   153,
-      51,    18,    32,    50,    51,    49,    48,    41,     0,     0,
-      49,    44,   154,   146,     0,    51,     0,    51,    50,    38,
-       0,     0,     0,     0,     0,     0,    50,   155,     0,    30,
-       0,    51,     0,    31,    39,     0,    43,    42
+      19,   120,     0,    97,     0,    99,     0,   101,     0,   103,
+       0,    95,    96,     0,    52,     0,   174,   173,   170,     0,
+       0,   172,     0,    51,    51,    52,     0,   157,     0,   157,
+     123,   151,     0,    16,    17,     0,   127,     0,     0,     0,
+       0,    51,     0,   125,    53,    54,     0,    52,     0,     0,
+       0,    52,   153,    52,     0,     9,     0,    98,   100,   102,
+     104,    36,     0,    29,     0,     0,     0,    40,    48,     0,
+       0,   157,     0,    35,     0,     0,    51,    50,     0,     0,
+     154,    52,    18,    32,    51,    52,    50,     0,    41,     0,
+      50,    44,   155,   147,     0,    52,     0,    52,    47,    38,
+       0,     0,     0,     0,     0,     0,    50,   156,     0,    30,
+       0,    52,     0,    31,    39,     0,    43,    42
 };
 
   /* YYPGOTONTERM-NUM.  */
 static const yytype_int16 yypgoto[] =
 {
-    -279,    89,  -279,  -279,  -266,  -279,     3,    20,  -279,  -279,
-    -279,  -279,  -279,  -279,   175,  -279,   -80,   -56,   -73,  -279,
-       6,    -6,  -279,    48,   176,  -279,  -279,  -279,  -279,  -279,
-    -279,  -279,   -18,  -279,  -279,  -279,  -279,  -279,  -279,  -279,
-    -279,  -163,  -279,  -278,   177,    10,  -279,  -279,  -279,  -279,
-    -279,    13
+    -318,   104,  -318,  -318,  -267,  -318,     2,    31,  -318,  -318,
+    -318,  -318,  -318,  -318,  -207,  -317,   181,   -77,  -125,   -89,
+    -318,     6,    -6,  -318,    63,   186,  -318,  -318,  -318,  -318,
+    -318,  -318,  -318,   -23,  -318,  -318,  -318,  -318,  -318,  -318,
+    -318,  -318,  -165,  -318,  -281,   187,    10,  -318,  -318,  -318,
+    -318,  -318,    32
 };
 
   /* YYDEFGOTONTERM-NUM.  */
 static const yytype_int16 yydefgoto[] =
 {
       -1,    45,    46,    47,    48,   134,   305,   273,    50,   337,
-     347,   135,    51,    52,    53,   348,   157,   214,   282,    54,
-      55,    56,    57,    58,    59,    84,   115,   107,   170,   205,
-     191,    60,    90,    61,    81,    62,    91,   247,    82,    63,
-     116,   238,   353,   311,    64,   165,    80,    65,   124,   125,
-     126,   127
+     348,   135,    51,    52,   217,   327,    53,   157,   214,   282,
+      54,    55,    56,    57,    58,    59,    84,   115,   107,   170,
+     205,   191,    60,    90,    61,    81,    62,    91,   247,    82,
+      63,   116,   238,   353,   311,    64,   165,    80,    65,   124,
+     125,   126,   127
 };
 
   /* YYTABLEYYPACT[STATE-NUM] -- What to do in state STATE-NUM.  If
@@ -1038,101 +1039,135 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      72,    72,   168,    49,    79,   244,   325,   301,   350,   146,
-      68,   313,   106,    89,    76,    66,    73,    75,    94,   131,
-     279,    77,   280,   104,   105,   326,   108,   109,   110,   111,
-     112,   113,   114,   155,   156,   117,   118,   119,   123,   180,
-     287,   132,    83,   288,   328,   130,   184,   133,   137,    92,
-     181,   215,   216,   340,     8,   255,   249,   185,   351,   102,
-      97,    98,    99,   103,   159,   160,   256,   289,   160,   100,
-     288,   173,   160,     1,   128,    72,   101,   217,   218,   171,
-     129,   161,   158,   164,   163,   331,     2,   189,   288,     3,
-     162,   167,   146,     5,   366,   147,   146,   166,    67,    11,
-     172,    12,    95,    96,   182,   183,    33,    34,    35,    36,
-     239,   162,   169,   152,   153,   154,   155,   156,   153,   154,
-     155,   156,   241,   162,   242,   162,   345,   346,   314,   174,
-     219,   175,    49,   179,   220,   221,   222,   223,   224,   225,
+      72,    72,    49,   244,    79,   168,   301,   106,   313,   218,
+      68,   338,   286,    89,    76,   146,    73,    75,    94,   131,
+      95,    96,   287,   104,   105,   288,   108,   109,   110,   111,
+     112,   113,   114,   325,    66,   117,   118,   119,   123,   155,
+     156,   132,     8,   328,   249,   130,   180,   133,   137,   279,
+     341,   280,   326,   289,   215,   216,   288,   181,   377,   184,
+      97,    98,    99,   146,   159,   160,   173,   255,   160,   100,
+     185,   331,   160,    77,   288,    72,   101,   146,   256,   171,
+     147,   161,   189,   164,   163,   153,   154,   155,   156,   239,
+     162,   167,    83,   366,    33,    34,    35,    36,   152,   153,
+     154,   155,   156,    92,   182,   183,   102,   241,   162,   103,
+     242,   162,   346,   347,   128,   158,   129,   169,   172,   174,
+     162,   166,   175,   179,   186,   190,   314,   187,   204,   206,
+     219,    49,   208,   209,   220,   221,   222,   223,   224,   225,
      226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
-     236,   186,    72,   187,   190,   204,   240,   206,   208,   209,
-     243,   210,   211,   286,   212,   237,   246,   291,   245,   257,
-      43,   251,   252,    44,   253,   254,   262,   275,   258,   259,
-     260,   248,   261,   285,   290,   292,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   295,   296,   303,   310,
-     312,   302,   323,   332,   333,   278,   335,   342,   352,   283,
-     284,   359,   309,   361,   276,   277,   367,   371,   213,   369,
-     373,   374,   376,   274,   250,   281,   306,   307,   308,   136,
-     138,   139,     0,     0,   324,     0,     0,     0,   329,     0,
-     330,     0,     0,     0,     0,   321,   322,     0,     0,   293,
-     294,     0,     0,   327,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   357,     0,   354,   334,     0,
-     360,   356,   338,     0,     0,     0,     0,     0,     0,     0,
-     344,   349,   362,     0,   364,     0,   315,   355,     0,     0,
-       0,   317,   318,   319,   320,     0,     0,     0,   375,     0,
-     363,   316,   365,     0,     0,     0,   368,     0,   370,     0,
-     372,     0,     0,     0,  -158,     1,     0,     0,     0,   377,
-     336,     0,     0,     0,     0,     0,   341,     0,     2,   343,
-       0,     3,     4,     0,     0,     5,  -158,     7,     8,     9,
-      69,    11,   358,    12,  -158,  -158,     0,    15,    16,  -158,
-    -158,  -158,  -158,  -158,  -158,  -158,  -158,     0,  -158,     0,
-    -158,  -158,  -158,     0,    70,  -158,    26,  -158,  -158,  -158,
-    -158,     0,     0,     0,  -158,  -158,  -158,  -158,  -158,  -158,
-    -158,  -158,  -158,    32,  -158,  -158,  -158,  -158,  -158,  -158,
-      33,    34,    35,    36,    37,  -158,  -158,  -158,  -158,     0,
-    -158,  -158,  -158,  -158,  -158,  -158,    41,    42,  -158,  -158,
-       1,  -158,    74,  -158,  -158,    44,  -158,     0,     0,     0,
-       0,     0,     0,     2,     0,   176,     3,     4,     0,     0,
-       5,     0,     7,     8,     9,    69,   120,     0,   121,     0,
-       0,     0,    15,    16,   140,   141,   142,   143,   144,   145,
-       0,   146,   177,   178,   147,   148,   149,     0,     0,    70,
-       0,    26,     0,     0,     0,     0,     0,     0,     0,     0,
-     150,   151,   152,   153,   154,   155,   156,     0,    32,     0,
-       0,     0,     0,     0,     0,    33,    34,    35,    36,    37,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   -59,
-       1,    41,    42,     0,     0,     0,     0,    43,     0,     0,
-      44,  -164,   122,     2,     0,     0,     3,     4,     0,     0,
-       5,   -59,     7,     8,     9,    69,    11,     0,    12,   -59,
-     -59,     0,    15,    16,     0,   -59,   -59,   -59,   -59,   -59,
-     -59,   -59,     0,     0,     0,     0,   -59,     0,     0,    70,
-     -59,    26,     0,     0,   -59,     0,     0,     0,     0,   -59,
-     -59,   -59,   -59,   -59,   -59,   -59,   -59,   -59,    32,   -59,
-       0,     0,   -59,   -59,   -59,    33,    34,    35,    36,    37,
-       0,     0,   -59,   -59,     0,   -59,   -59,   -59,   -59,   -59,
-     -59,    41,    42,   -59,   -59,     0,   -59,    78,  -158,     1,
-      44,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     2,     0,     0,     3,     4,     0,     0,     5,
-    -158,     7,     8,     9,    69,    11,     0,    12,  -158,  -158,
-       0,    15,    16,     0,  -158,  -158,  -158,  -158,  -158,  -158,
-    -158,     0,     0,     0,     0,  -158,     0,     0,    70,  -158,
-      26,     0,     0,  -158,     0,     0,     0,     0,  -158,  -158,
-    -158,     0,     0,     0,     0,     0,     0,    32,     0,     0,
+     236,   365,    72,   210,   211,   212,   240,   306,   307,   308,
+     243,   237,   245,   257,   262,   275,   246,   290,   292,   285,
+     291,   251,   252,   295,   253,   254,   321,   322,   258,   259,
+     260,   248,   261,   296,   303,   302,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   309,   310,   312,   334,
+       1,   333,   332,   335,   323,   278,   -50,   350,   343,   283,
+     284,   345,   351,     2,   276,   277,     3,   352,   324,   355,
+       5,   367,   329,   359,   330,    67,    11,   361,    12,   369,
+     371,   363,   373,   213,   274,   136,   374,   368,   376,   250,
+     138,   139,     0,     0,   281,     0,     0,     0,     0,   293,
+     294,   339,   354,     0,     0,     0,   356,     0,     0,     0,
+     349,     0,     0,     0,     0,     0,   362,     0,   364,   357,
+       0,     0,     0,   360,     0,     0,     0,     0,     0,     0,
+       0,     0,   375,     0,     0,     0,   315,   370,     0,   372,
+       0,   317,   318,   319,   320,     0,     0,    43,     0,     0,
+      44,   316,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,  -159,     1,     0,     0,     0,     0,     0,
+     336,     0,     0,     0,     0,     0,   342,     2,     0,   344,
+       3,     4,     0,     0,     5,  -159,     7,     8,     9,    69,
+      11,   358,    12,  -159,  -159,     0,    15,    16,  -159,  -159,
+    -159,  -159,  -159,  -159,  -159,  -159,     0,  -159,     0,  -159,
+    -159,  -159,     0,    70,  -159,    26,  -159,  -159,  -159,  -159,
+       0,     0,     0,  -159,  -159,  -159,  -159,  -159,  -159,  -159,
+    -159,  -159,    32,  -159,  -159,  -159,  -159,  -159,  -159,    33,
+      34,    35,    36,    37,  -159,  -159,  -159,  -159,     0,  -159,
+    -159,  -159,  -159,  -159,  -159,    41,    42,  -159,  -159,     1,
+    -159,    74,  -159,  -159,    44,  -159,     0,     0,     0,     0,
+       0,     0,     2,     0,   176,     3,     4,     0,     0,     5,
+       0,     7,     8,     9,    69,   120,     0,   121,     0,     0,
+       0,    15,    16,   140,   141,   142,   143,   144,   145,     0,
+     146,   177,   178,   147,   148,   149,     0,     0,    70,     0,
+      26,     0,     0,     0,     0,     0,     0,     0,     0,   150,
+     151,   152,   153,   154,   155,   156,     0,    32,     0,     0,
        0,     0,     0,     0,    33,    34,    35,    36,    37,     0,
-       0,  -158,  -158,     0,  -158,  -158,  -158,  -158,     1,     0,
-      41,    42,     0,     0,     0,  -158,    71,     0,  -158,    44,
-       0,     2,     0,     0,     3,     4,     0,     0,     5,  -158,
-       7,     8,     9,    69,    11,     0,    12,  -158,  -158,     0,
-      15,    16,     0,  -158,  -158,  -158,  -158,  -158,  -158,  -158,
-       0,     0,     0,     0,  -158,     0,     0,    70,  -158,    26,
-       0,     0,  -158,     0,     0,     0,     0,  -158,  -158,  -158,
+       0,     0,     0,     0,     0,     0,     0,     0,   -60,     1,
+      41,    42,     0,     0,     0,     0,    43,     0,     0,    44,
+    -165,   122,     2,     0,     0,     3,     4,     0,     0,     5,
+     -60,     7,     8,     9,    69,    11,     0,    12,   -60,   -60,
+       0,    15,    16,     0,   -60,   -60,   -60,   -60,   -60,   -60,
+     -60,     0,     0,     0,     0,   -60,     0,     0,    70,   -60,
+      26,     0,     0,   -60,     0,     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,    78,  -159,     1,    44,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     2,     0,     0,     3,     4,     0,     0,     5,  -159,
+       7,     8,     9,    69,    11,     0,    12,  -159,  -159,     0,
+      15,    16,     0,  -159,  -159,  -159,  -159,  -159,  -159,  -159,
+       0,     0,     0,     0,  -159,     0,     0,    70,  -159,    26,
+       0,     0,  -159,     0,     0,     0,     0,  -159,  -159,  -159,
        0,     0,     0,     0,     0,     0,    32,     0,     0,     0,
        0,     0,     0,    33,    34,    35,    36,    37,     0,     0,
-    -158,  -158,     0,  -158,  -158,  -158,    -4,     1,     0,    41,
-      42,     0,     0,     0,  -158,    43,     0,  -158,    44,     0,
-       2,     0,     0,     3,     4,     0,     0,     5,     6,     7,
-       8,     9,    10,    11,     0,    12,     0,    13,    14,    15,
+    -159,  -159,     0,  -159,  -159,  -159,  -159,     1,     0,    41,
+      42,     0,     0,     0,  -159,    71,     0,  -159,    44,     0,
+       2,     0,     0,     3,     4,     0,     0,     5,  -159,     7,
+       8,     9,    69,    11,     0,    12,  -159,  -159,     0,    15,
+      16,     0,  -159,  -159,  -159,  -159,  -159,  -159,  -159,     0,
+       0,     0,     0,  -159,     0,     0,    70,  -159,    26,     0,
+       0,  -159,     0,     0,     0,     0,  -159,  -159,  -159,     0,
+       0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
+       0,     0,    33,    34,    35,    36,    37,     0,     0,  -159,
+    -159,     0,  -159,  -159,  -159,    -4,     1,     0,    41,    42,
+       0,     0,     0,  -159,    43,     0,  -159,    44,     0,     2,
+       0,     0,     3,     4,     0,     0,     5,     6,     7,     8,
+       9,    10,    11,     0,    12,     0,    13,    14,    15,    16,
+       0,     0,     0,    17,    18,    19,    20,    21,     0,     0,
+      22,     0,    23,     0,     0,    24,    25,    26,     0,     0,
+      27,     0,     0,     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,  -148,     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,   340,    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,
+       0,    29,    30,    31,     0,     0,     0,     0,     0,     0,
+      32,     0,     0,     0,     0,     0,     0,    33,    34,    35,
+      36,    37,     0,     0,    38,    39,  -146,     1,     0,     0,
+       0,     0,     0,    41,    42,     0,     0,     0,   304,    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,    22,     0,    23,     0,     0,    24,    25,    26,     0,
-       0,    27,     0,     0,     0,    28,    29,    30,    31,     0,
+       0,     0,     0,    23,     0,     0,    24,    25,    26,     0,
+       0,    27,     0,     0,     0,     0,    29,    30,    31,     0,
+       0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
+       0,     0,    33,    34,    35,    36,    37,     0,     0,    38,
+      39,  -143,     1,     0,     0,     0,     0,     0,    41,    42,
+       0,     0,     0,   304,    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,
+       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,   304,    43,
+       2,     0,    44,     3,     4,     0,     0,     5,     6,     7,
+       8,     9,    10,    11,     0,    12,     0,    13,     0,    15,
+      16,     0,   -48,   -48,    17,    18,    19,    20,    21,     0,
+       0,     0,     0,    23,     0,     0,    24,    25,    26,     0,
+       0,    27,     0,     0,     0,     0,    29,    30,    31,     0,
        0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
        0,     0,    33,    34,    35,    36,    37,     0,     0,    38,
-      39,    40,  -147,     1,     0,     0,     0,     0,    41,    42,
-       0,     0,     0,    -4,    43,     0,     2,    44,     0,     3,
+      39,     0,   -48,     1,     0,     0,     0,     0,    41,    42,
+       0,     0,     0,   304,    43,     0,     2,    44,     0,     3,
        4,     0,     0,     5,     6,     7,     8,     9,    10,    11,
-       0,    12,   339,    13,     0,    15,    16,     0,     0,     0,
+       0,    12,     0,    13,     0,    15,    16,     0,     0,     0,
       17,    18,    19,    20,    21,     0,     0,     0,     0,    23,
        0,     0,    24,    25,    26,     0,     0,    27,     0,     0,
        0,     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,  -145,     1,     0,
+      35,    36,    37,     0,     0,    38,    39,     0,     1,   -51,
        0,     0,     0,     0,    41,    42,     0,     0,     0,   304,
       43,     2,     0,    44,     3,     4,     0,     0,     5,     6,
        7,     8,     9,    10,    11,     0,    12,     0,    13,     0,
@@ -1141,7 +1176,7 @@ static const yytype_int16 yytable[] =
        0,     0,    27,     0,     0,     0,     0,    29,    30,    31,
        0,     0,     0,     0,     0,     0,    32,     0,     0,     0,
        0,     0,     0,    33,    34,    35,    36,    37,     0,     0,
-      38,    39,  -142,     1,     0,     0,     0,     0,     0,    41,
+      38,    39,     0,     1,     0,   -51,     0,     0,     0,    41,
       42,     0,     0,     0,   304,    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,
@@ -1149,208 +1184,165 @@ static const yytype_int16 yytable[] =
        0,     0,    24,    25,    26,     0,     0,    27,     0,     0,
        0,     0,    29,    30,    31,     0,     0,     0,     0,     0,
        0,    32,     0,     0,     0,     0,     0,     0,    33,    34,
-      35,    36,    37,     0,     0,    38,    39,     0,     1,     0,
+      35,    36,    37,     0,     0,    38,    39,     0,   -50,     1,
        0,     0,     0,     0,    41,    42,     0,     0,     0,   304,
-      43,     2,     0,    44,     3,     4,     0,     0,     5,     6,
-       7,     8,     9,    10,    11,     0,    12,     0,    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,     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,   -50,     1,     0,     0,     0,     0,    41,
-      42,     0,     0,     0,   304,    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,     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,
-     -50,     0,     0,     0,     0,    41,    42,     0,     0,     0,
-     304,    43,     2,     0,    44,     3,     4,     0,     0,     5,
+      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,     0,    29,    30,
+      21,     0,     0,     0,     0,     0,     0,     0,    24,     0,
+      26,     0,     0,     0,     0,     0,     0,     0,    29,    30,
       31,     0,     0,     0,     0,     0,     0,    32,     0,     0,
        0,     0,     0,     0,    33,    34,    35,    36,    37,     0,
-       0,    38,    39,     0,     1,     0,   -50,     0,     0,     0,
-      41,    42,     0,     0,     0,   304,    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,     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,   -50,
-       1,     0,     0,     0,     0,    41,    42,     0,     0,     0,
-     304,    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,     0,     0,     0,    24,
-       0,    26,     0,     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,     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,
-       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,    69,
-      11,     0,    12,     0,     0,     0,    15,    16,     0,     0,
-       0,     1,     0,     0,     0,     0,     0,     0,     0,    85,
-      86,    87,    88,    70,     2,    26,     0,     3,     4,     0,
-       0,     5,     0,     7,     8,     9,    69,    11,     0,    12,
-       0,     0,    32,    15,    16,     0,     0,     0,     0,    33,
-      34,    35,    36,    37,     0,     0,    85,     0,    87,     0,
-      70,     0,    26,     0,     0,    41,    42,     0,     0,     0,
-       0,    43,     0,     0,    44,     0,     0,     0,     0,    32,
+       0,     1,    39,     0,     0,     0,     0,     0,     0,     0,
+      41,    42,     0,     0,     2,     0,    43,     3,     4,    44,
+       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,     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,     0,     0,     0,     0,     0,     0,
+      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,    69,    11,
        0,    12,     0,     0,     0,    15,    16,     0,     0,     0,
-       1,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    70,     2,    26,     0,     3,     4,     0,    93,
+       1,     0,     0,     0,     0,     0,     0,     0,    85,    86,
+      87,    88,    70,     2,    26,     0,     3,     4,     0,     0,
        5,     0,     7,     8,     9,    69,    11,     0,    12,     0,
        0,    32,    15,    16,     0,     0,     0,     0,    33,    34,
-      35,    36,    37,     0,     0,     0,     0,     0,     0,    70,
+      35,    36,    37,     0,     0,    85,     0,    87,     0,    70,
        0,    26,     0,     0,    41,    42,     0,     0,     0,     0,
-      43,  -158,  -158,    44,     0,     0,     0,     0,    32,     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,    69,    11,     0,
-      12,     0,     0,     0,    15,    16,     0,     0,     0,    85,
-       0,    87,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    70,     0,    26,     0,     0,   140,   141,   142,   143,
-     144,   145,     0,   146,     0,     0,   147,   148,   149,     0,
-      32,     0,     0,     0,     0,     0,     0,    33,    34,    35,
-      36,    37,   150,   151,   152,   153,   154,   155,   156,   192,
-       0,     0,     0,    41,    42,   193,     0,     0,     0,    43,
-       0,     0,    44,     0,   140,   141,   142,   143,   144,   145,
-       0,   146,     0,     0,   147,   148,   149,     0,     0,     0,
-       0,     0,   194,     0,     0,     0,     0,     0,   195,     0,
-     150,   151,   152,   153,   154,   155,   156,   140,   141,   142,
-     143,   144,   145,     0,   146,     0,     0,   147,   148,   149,
-       0,     0,     0,     0,     0,   196,     0,     0,     0,     0,
-       0,   197,     0,   150,   151,   152,   153,   154,   155,   156,
-     140,   141,   142,   143,   144,   145,     0,   146,     0,     0,
-     147,   148,   149,     0,     0,     0,     0,     0,   198,     0,
-       0,     0,     0,     0,   199,     0,   150,   151,   152,   153,
-     154,   155,   156,   140,   141,   142,   143,   144,   145,     0,
+      12,     0,     0,     0,    15,    16,     0,     0,     0,     1,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    70,     2,    26,     0,     3,     4,     0,    93,     5,
+       0,     7,     8,     9,    69,    11,     0,    12,     0,     0,
+      32,    15,    16,     0,     0,     0,     0,    33,    34,    35,
+      36,    37,     0,     0,     0,     0,     0,     0,    70,     0,
+      26,     0,     0,    41,    42,     0,     0,     0,     0,    43,
+    -159,  -159,    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,    69,    11,     0,    12,
+       0,     0,     0,    15,    16,     0,     0,     0,    85,     0,
+      87,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      70,     0,    26,     0,     0,   140,   141,   142,   143,   144,
+     145,     0,   146,     0,     0,   147,   148,   149,     0,    32,
+       0,     0,     0,     0,     0,     0,    33,    34,    35,    36,
+      37,   150,   151,   152,   153,   154,   155,   156,   192,     0,
+       0,     0,    41,    42,   193,     0,     0,     0,    43,     0,
+       0,    44,     0,   140,   141,   142,   143,   144,   145,     0,
      146,     0,     0,   147,   148,   149,     0,     0,     0,     0,
-       0,   297,     0,     0,     0,     0,     0,     0,     0,   150,
+       0,   194,     0,     0,     0,     0,     0,   195,     0,   150,
      151,   152,   153,   154,   155,   156,   140,   141,   142,   143,
      144,   145,     0,   146,     0,     0,   147,   148,   149,     0,
-       0,     0,     0,     0,   298,     0,     0,     0,     0,     0,
-       0,     0,   150,   151,   152,   153,   154,   155,   156,   140,
+       0,     0,     0,     0,   196,     0,     0,     0,     0,     0,
+     197,     0,   150,   151,   152,   153,   154,   155,   156,   140,
      141,   142,   143,   144,   145,     0,   146,     0,     0,   147,
-     148,   149,     0,     0,     0,     0,     0,   299,     0,     0,
-       0,     0,     0,     0,     0,   150,   151,   152,   153,   154,
+     148,   149,     0,     0,     0,     0,     0,   198,     0,     0,
+       0,     0,     0,   199,     0,   150,   151,   152,   153,   154,
      155,   156,   140,   141,   142,   143,   144,   145,     0,   146,
        0,     0,   147,   148,   149,     0,     0,     0,     0,     0,
-     300,     0,     0,     0,     0,     0,     0,     0,   150,   151,
+     297,     0,     0,     0,     0,     0,     0,     0,   150,   151,
      152,   153,   154,   155,   156,   140,   141,   142,   143,   144,
      145,     0,   146,     0,     0,   147,   148,   149,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   202,
+       0,     0,     0,   298,     0,     0,     0,     0,     0,     0,
        0,   150,   151,   152,   153,   154,   155,   156,   140,   141,
-     142,   143,   144,   145,   188,   146,     0,     0,   147,   148,
-     149,   140,   141,   142,   143,   144,   145,     0,   146,     0,
-       0,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,     0,   203,     0,     0,     0,     0,   150,   151,   152,
+     142,   143,   144,   145,     0,   146,     0,     0,   147,   148,
+     149,     0,     0,     0,     0,     0,   299,     0,     0,     0,
+       0,     0,     0,     0,   150,   151,   152,   153,   154,   155,
+     156,   140,   141,   142,   143,   144,   145,     0,   146,     0,
+       0,   147,   148,   149,     0,     0,     0,     0,     0,   300,
+       0,     0,     0,     0,     0,     0,     0,   150,   151,   152,
      153,   154,   155,   156,   140,   141,   142,   143,   144,   145,
        0,   146,     0,     0,   147,   148,   149,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     150,   151,   152,   153,   154,   155,   156,     0,     0,     0,
-     207,   140,   141,   142,   143,   144,   145,     0,   146,     0,
-       0,   147,   148,   149,     0,     0,     0,     0,     0,   200,
-     201,     0,     0,     0,     0,     0,     0,   150,   151,   152,
-     153,   154,   155,   156,   140,   141,   142,   143,   144,   145,
-       0,   146,     0,     0,   147,   148,   149,   140,   141,   142,
-     143,     0,     0,     0,   146,     0,     0,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,     0,     0,     0,
-       0,     0,     0,   150,   151,   152,   153,   154,   155,   156
+       0,     0,     0,     0,     0,     0,     0,     0,   202,     0,
+     150,   151,   152,   153,   154,   155,   156,   140,   141,   142,
+     143,   144,   145,   188,   146,     0,     0,   147,   148,   149,
+     140,   141,   142,   143,   144,   145,     0,   146,     0,     0,
+     147,   148,   149,   150,   151,   152,   153,   154,   155,   156,
+       0,   203,     0,     0,     0,     0,   150,   151,   152,   153,
+     154,   155,   156,   140,   141,   142,   143,   144,   145,     0,
+     146,     0,     0,   147,   148,   149,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   150,
+     151,   152,   153,   154,   155,   156,     0,     0,     0,   207,
+     140,   141,   142,   143,   144,   145,     0,   146,     0,     0,
+     147,   148,   149,     0,     0,     0,     0,     0,   200,   201,
+       0,     0,     0,     0,     0,     0,   150,   151,   152,   153,
+     154,   155,   156,   140,   141,   142,   143,   144,   145,     0,
+     146,     0,     0,   147,   148,   149,   140,   141,   142,   143,
+       0,     0,     0,   146,     0,     0,   147,   148,   149,   150,
+     151,   152,   153,   154,   155,   156,     0,     0,     0,     0,
+       0,     0,   150,   151,   152,   153,   154,   155,   156
 };
 
 static const yytype_int16 yycheck[] =
 {
-       6,     7,    82,     0,    10,   168,    35,   273,    36,    70,
-       4,   289,    30,    19,     8,    97,     6,     7,    24,    43,
-      27,    48,    29,    29,    30,    54,    32,    33,    34,    35,
-      36,    37,    38,    94,    95,    41,    42,    43,    44,    54,
-      97,    65,    51,   100,   310,    51,    54,    53,    54,    51,
-      65,   131,   132,   331,    24,    54,    26,    65,    86,    26,
-      17,    18,    19,    26,    70,    71,    65,    97,    74,    26,
-     100,    89,    78,     1,     0,    81,    33,   133,   134,    85,
-      97,    71,    98,    77,    74,    97,    14,   105,   100,    17,
-     100,    81,    70,    21,   360,    73,    70,   100,    26,    27,
-      46,    29,    56,    57,    98,    99,    76,    77,    78,    79,
-      99,   100,    26,    91,    92,    93,    94,    95,    92,    93,
-      94,    95,    99,   100,    99,   100,    36,    37,   291,    26,
-     136,    26,   129,    26,   140,   141,   142,   143,   144,   145,
+       6,     7,     0,   168,    10,    82,   273,    30,   289,   134,
+       4,   328,   219,    19,     8,    70,     6,     7,    24,    43,
+      56,    57,    97,    29,    30,   100,    32,    33,    34,    35,
+      36,    37,    38,    35,    97,    41,    42,    43,    44,    94,
+      95,    65,    24,   310,    26,    51,    54,    53,    54,    27,
+     331,    29,    54,    97,   131,   132,   100,    65,   375,    54,
+      17,    18,    19,    70,    70,    71,    89,    54,    74,    26,
+      65,    97,    78,    48,   100,    81,    33,    70,    65,    85,
+      73,    71,   105,    77,    74,    92,    93,    94,    95,    99,
+     100,    81,    51,   360,    76,    77,    78,    79,    91,    92,
+      93,    94,    95,    51,    98,    99,    26,    99,   100,    26,
+      99,   100,    36,    37,     0,    98,    97,    26,    46,    26,
+     100,   100,    26,    26,    54,    26,   291,    53,    26,    26,
+     136,   129,   103,   103,   140,   141,   142,   143,   144,   145,
      146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,    54,   158,    53,    26,    26,   162,    26,   103,   103,
-     166,   102,   100,   219,   100,    26,   172,   247,   100,    48,
-      98,   177,   178,   101,   180,   181,   100,   100,   184,   185,
-     186,   175,   188,    53,    26,    44,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,    26,    26,    26,    53,
-      26,   274,    87,    54,    88,   211,    54,    87,    26,   215,
-     216,    86,   285,   100,   208,   209,    26,    53,   129,    87,
-      87,    86,    86,   203,   176,   212,   282,   283,   284,    54,
-      54,    54,    -1,    -1,   307,    -1,    -1,    -1,   311,    -1,
-     313,    -1,    -1,    -1,    -1,   301,   302,    -1,    -1,   255,
-     256,    -1,    -1,   309,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   345,    -1,   340,   324,    -1,
-     350,   344,   328,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     336,   337,   355,    -1,   357,    -1,   292,   343,    -1,    -1,
-      -1,   297,   298,   299,   300,    -1,    -1,    -1,   371,    -1,
-     356,   295,   358,    -1,    -1,    -1,   362,    -1,   364,    -1,
-     366,    -1,    -1,    -1,     0,     1,    -1,    -1,    -1,   375,
-     326,    -1,    -1,    -1,    -1,    -1,   332,    -1,    14,   335,
-      -1,    17,    18,    -1,    -1,    21,    22,    23,    24,    25,
-      26,    27,   348,    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,    -1,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    -1,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-       1,    97,    98,    99,   100,   101,   102,    -1,    -1,    -1,
-      -1,    -1,    -1,    14,    -1,    44,    17,    18,    -1,    -1,
-      21,    -1,    23,    24,    25,    26,    27,    -1,    29,    -1,
-      -1,    -1,    33,    34,    63,    64,    65,    66,    67,    68,
-      -1,    70,    71,    72,    73,    74,    75,    -1,    -1,    50,
-      -1,    52,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      89,    90,    91,    92,    93,    94,    95,    -1,    69,    -1,
-      -1,    -1,    -1,    -1,    -1,    76,    77,    78,    79,    80,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,
-       1,    92,    93,    -1,    -1,    -1,    -1,    98,    -1,    -1,
-     101,   102,   103,    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,    -1,    60,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      -1,    -1,    73,    74,    75,    76,    77,    78,    79,    80,
-      -1,    -1,    83,    84,    -1,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    -1,    97,    98,     0,     1,
-     101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    14,    -1,    -1,    17,    18,    -1,    -1,    21,
+     156,   358,   158,   102,   100,   100,   162,   282,   283,   284,
+     166,    26,   100,    48,   100,   100,   172,    26,    44,    53,
+     247,   177,   178,    26,   180,   181,   301,   302,   184,   185,
+     186,   175,   188,    26,    26,   274,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,   285,    53,    26,   324,
+       1,    88,    54,    54,    87,   211,    86,    36,    87,   215,
+     216,   336,    86,    14,   208,   209,    17,    26,   307,   344,
+      21,    26,   311,    86,   313,    26,    27,   100,    29,    87,
+      53,   356,    87,   129,   203,    54,    86,   362,    86,   176,
+      54,    54,    -1,    -1,   212,    -1,    -1,    -1,    -1,   255,
+     256,   328,   341,    -1,    -1,    -1,   345,    -1,    -1,    -1,
+     337,    -1,    -1,    -1,    -1,    -1,   355,    -1,   357,   346,
+      -1,    -1,    -1,   350,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   371,    -1,    -1,    -1,   292,   364,    -1,   366,
+      -1,   297,   298,   299,   300,    -1,    -1,    98,    -1,    -1,
+     101,   295,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,     0,     1,    -1,    -1,    -1,    -1,    -1,
+     326,    -1,    -1,    -1,    -1,    -1,   332,    14,    -1,   335,
+      17,    18,    -1,    -1,    21,    22,    23,    24,    25,    26,
+      27,   347,    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,    -1,    60,    61,    62,    63,    64,    65,    66,
+      67,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    81,    82,    83,    84,    -1,    86,
+      87,    88,    89,    90,    91,    92,    93,    94,    95,     1,
+      97,    98,    99,   100,   101,   102,    -1,    -1,    -1,    -1,
+      -1,    -1,    14,    -1,    44,    17,    18,    -1,    -1,    21,
+      -1,    23,    24,    25,    26,    27,    -1,    29,    -1,    -1,
+      -1,    33,    34,    63,    64,    65,    66,    67,    68,    -1,
+      70,    71,    72,    73,    74,    75,    -1,    -1,    50,    -1,
+      52,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    69,    -1,    -1,
+      -1,    -1,    -1,    -1,    76,    77,    78,    79,    80,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     0,     1,
+      92,    93,    -1,    -1,    -1,    -1,    98,    -1,    -1,   101,
+     102,   103,    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,    -1,    60,    61,
-      62,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,
-      -1,    -1,    -1,    -1,    76,    77,    78,    79,    80,    -1,
-      -1,    83,    84,    -1,    86,    87,    88,     0,     1,    -1,
-      92,    93,    -1,    -1,    -1,    97,    98,    -1,   100,   101,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      -1,    73,    74,    75,    76,    77,    78,    79,    80,    -1,
+      -1,    83,    84,    -1,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    -1,    97,    98,     0,     1,   101,
+      -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,
@@ -1361,21 +1353,64 @@ static const yytype_int16 yycheck[] =
       83,    84,    -1,    86,    87,    88,     0,     1,    -1,    92,
       93,    -1,    -1,    -1,    97,    98,    -1,   100,   101,    -1,
       14,    -1,    -1,    17,    18,    -1,    -1,    21,    22,    23,
-      24,    25,    26,    27,    -1,    29,    -1,    31,    32,    33,
+      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,    -1,    60,    61,    62,    -1,
+      -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,
+      -1,    -1,    76,    77,    78,    79,    80,    -1,    -1,    83,
+      84,    -1,    86,    87,    88,     0,     1,    -1,    92,    93,
+      -1,    -1,    -1,    97,    98,    -1,   100,   101,    -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,    -1,    59,    60,    61,    62,    -1,    -1,
+      -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,    -1,
+      -1,    76,    77,    78,    79,    80,    -1,    -1,    83,    84,
+      85,     0,     1,    -1,    -1,    -1,    -1,    92,    93,    -1,
+      -1,    -1,    97,    98,    -1,    14,   101,    -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,
+      -1,    60,    61,    62,    -1,    -1,    -1,    -1,    -1,    -1,
+      69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    78,
+      79,    80,    -1,    -1,    83,    84,     0,     1,    -1,    -1,
+      -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    97,    98,
+      14,    -1,   101,    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,    45,    -1,    47,    -1,    -1,    50,    51,    52,    -1,
-      -1,    55,    -1,    -1,    -1,    59,    60,    61,    62,    -1,
+      -1,    -1,    -1,    47,    -1,    -1,    50,    51,    52,    -1,
+      -1,    55,    -1,    -1,    -1,    -1,    60,    61,    62,    -1,
+      -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,
+      -1,    -1,    76,    77,    78,    79,    80,    -1,    -1,    83,
+      84,     0,     1,    -1,    -1,    -1,    -1,    -1,    92,    93,
+      -1,    -1,    -1,    97,    98,    14,    -1,   101,    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,
+      -1,    60,    61,    62,    -1,    -1,    -1,    -1,    -1,    -1,
+      69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    78,
+      79,    80,    -1,    -1,    83,    84,    -1,     1,    -1,    -1,
+      -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    97,    98,
+      14,    -1,   101,    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,    -1,    60,    61,    62,    -1,
       -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,
       -1,    -1,    76,    77,    78,    79,    80,    -1,    -1,    83,
-      84,    85,     0,     1,    -1,    -1,    -1,    -1,    92,    93,
+      84,    -1,    86,     1,    -1,    -1,    -1,    -1,    92,    93,
       -1,    -1,    -1,    97,    98,    -1,    14,   101,    -1,    17,
       18,    -1,    -1,    21,    22,    23,    24,    25,    26,    27,
-      -1,    29,    30,    31,    -1,    33,    34,    -1,    -1,    -1,
+      -1,    29,    -1,    31,    -1,    33,    34,    -1,    -1,    -1,
       38,    39,    40,    41,    42,    -1,    -1,    -1,    -1,    47,
       -1,    -1,    50,    51,    52,    -1,    -1,    55,    -1,    -1,
       -1,    -1,    60,    61,    62,    -1,    -1,    -1,    -1,    -1,
       -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,
-      78,    79,    80,    -1,    -1,    83,    84,     0,     1,    -1,
+      78,    79,    80,    -1,    -1,    83,    84,    -1,     1,    87,
       -1,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    97,
       98,    14,    -1,   101,    17,    18,    -1,    -1,    21,    22,
       23,    24,    25,    26,    27,    -1,    29,    -1,    31,    -1,
@@ -1384,7 +1419,7 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    55,    -1,    -1,    -1,    -1,    60,    61,    62,
       -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,
       -1,    -1,    -1,    76,    77,    78,    79,    80,    -1,    -1,
-      83,    84,     0,     1,    -1,    -1,    -1,    -1,    -1,    92,
+      83,    84,    -1,     1,    -1,    88,    -1,    -1,    -1,    92,
       93,    -1,    -1,    -1,    97,    98,    14,    -1,   101,    17,
       18,    -1,    -1,    21,    22,    23,    24,    25,    26,    27,
       -1,    29,    -1,    31,    -1,    33,    34,    -1,    -1,    -1,
@@ -1392,134 +1427,100 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    50,    51,    52,    -1,    -1,    55,    -1,    -1,
       -1,    -1,    60,    61,    62,    -1,    -1,    -1,    -1,    -1,
       -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,
-      78,    79,    80,    -1,    -1,    83,    84,    -1,     1,    -1,
+      78,    79,    80,    -1,    -1,    83,    84,    -1,    86,     1,
       -1,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,    97,
-      98,    14,    -1,   101,    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,    -1,    60,    61,    62,
-      -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,
-      -1,    -1,    -1,    76,    77,    78,    79,    80,    -1,    -1,
-      83,    84,    -1,    86,     1,    -1,    -1,    -1,    -1,    92,
-      93,    -1,    -1,    -1,    97,    98,    -1,    14,   101,    -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,    -1,    60,    61,    62,    -1,    -1,    -1,    -1,
-      -1,    -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,    76,
-      77,    78,    79,    80,    -1,    -1,    83,    84,    -1,     1,
-      87,    -1,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,
-      97,    98,    14,    -1,   101,    17,    18,    -1,    -1,    21,
+      98,    -1,    14,   101,    -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,    -1,    60,    61,
+      42,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    50,    -1,
+      52,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,    61,
       62,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,
       -1,    -1,    -1,    -1,    76,    77,    78,    79,    80,    -1,
-      -1,    83,    84,    -1,     1,    -1,    88,    -1,    -1,    -1,
-      92,    93,    -1,    -1,    -1,    97,    98,    14,    -1,   101,
-      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,    -1,    60,    61,    62,    -1,    -1,    -1,    -1,
-      -1,    -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,    76,
-      77,    78,    79,    80,    -1,    -1,    83,    84,    -1,    86,
-       1,    -1,    -1,    -1,    -1,    92,    93,    -1,    -1,    -1,
-      97,    98,    -1,    14,   101,    -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,    -1,    -1,    -1,    50,
-      -1,    52,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    60,
-      61,    62,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,
-      -1,    -1,    -1,    -1,    -1,    76,    77,    78,    79,    80,
-      -1,    -1,     1,    84,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    92,    93,    -1,    -1,    14,    -1,    98,    17,    18,
-     101,    -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,
-      -1,    60,    61,    62,    -1,    -1,    -1,    -1,    -1,    -1,
-      69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    78,
-      79,    80,    -1,    -1,     1,    84,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    92,    93,    -1,    -1,    14,    -1,    98,
-      17,    18,   101,    -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,    -1,    69,    33,    34,    -1,    -1,    -1,    -1,    76,
-      77,    78,    79,    80,    -1,    -1,    46,    -1,    48,    -1,
-      50,    -1,    52,    -1,    -1,    92,    93,    -1,    -1,    -1,
-      -1,    98,    -1,    -1,   101,    -1,    -1,    -1,    -1,    69,
+      -1,     1,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      92,    93,    -1,    -1,    14,    -1,    98,    17,    18,   101,
+      -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,    -1,
+      60,    61,    62,    -1,    -1,    -1,    -1,    -1,    -1,    69,
       -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    78,    79,
-      80,    -1,    -1,     1,    -1,    -1,    -1,    -1,    -1,    -1,
+      80,    -1,    -1,     1,    84,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    92,    93,    -1,    -1,    14,    -1,    98,    17,
       18,   101,    -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,    20,
+       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,
       -1,    69,    33,    34,    -1,    -1,    -1,    -1,    76,    77,
-      78,    79,    80,    -1,    -1,    -1,    -1,    -1,    -1,    50,
+      78,    79,    80,    -1,    -1,    46,    -1,    48,    -1,    50,
       -1,    52,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,
-      98,    99,   100,   101,    -1,    -1,    -1,    -1,    69,    -1,
+      98,    -1,    -1,   101,    -1,    -1,    -1,    -1,    69,    -1,
       -1,    -1,    -1,    -1,    -1,    76,    77,    78,    79,    80,
       -1,    -1,     1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    92,    93,    -1,    -1,    14,    -1,    98,    17,    18,
      101,    -1,    21,    -1,    23,    24,    25,    26,    27,    -1,
-      29,    -1,    -1,    -1,    33,    34,    -1,    -1,    -1,    46,
-      -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    50,    -1,    52,    -1,    -1,    63,    64,    65,    66,
-      67,    68,    -1,    70,    -1,    -1,    73,    74,    75,    -1,
-      69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    78,
-      79,    80,    89,    90,    91,    92,    93,    94,    95,    48,
-      -1,    -1,    -1,    92,    93,    54,    -1,    -1,    -1,    98,
-      -1,    -1,   101,    -1,    63,    64,    65,    66,    67,    68,
-      -1,    70,    -1,    -1,    73,    74,    75,    -1,    -1,    -1,
-      -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    54,    -1,
-      89,    90,    91,    92,    93,    94,    95,    63,    64,    65,
-      66,    67,    68,    -1,    70,    -1,    -1,    73,    74,    75,
-      -1,    -1,    -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,
-      -1,    54,    -1,    89,    90,    91,    92,    93,    94,    95,
-      63,    64,    65,    66,    67,    68,    -1,    70,    -1,    -1,
-      73,    74,    75,    -1,    -1,    -1,    -1,    -1,    48,    -1,
-      -1,    -1,    -1,    -1,    54,    -1,    89,    90,    91,    92,
-      93,    94,    95,    63,    64,    65,    66,    67,    68,    -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,    20,    21,
+      -1,    23,    24,    25,    26,    27,    -1,    29,    -1,    -1,
+      69,    33,    34,    -1,    -1,    -1,    -1,    76,    77,    78,
+      79,    80,    -1,    -1,    -1,    -1,    -1,    -1,    50,    -1,
+      52,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,    98,
+      99,   100,   101,    -1,    -1,    -1,    -1,    69,    -1,    -1,
+      -1,    -1,    -1,    -1,    76,    77,    78,    79,    80,    -1,
+      -1,     1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      92,    93,    -1,    -1,    14,    -1,    98,    17,    18,   101,
+      -1,    21,    -1,    23,    24,    25,    26,    27,    -1,    29,
+      -1,    -1,    -1,    33,    34,    -1,    -1,    -1,    46,    -1,
+      48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      50,    -1,    52,    -1,    -1,    63,    64,    65,    66,    67,
+      68,    -1,    70,    -1,    -1,    73,    74,    75,    -1,    69,
+      -1,    -1,    -1,    -1,    -1,    -1,    76,    77,    78,    79,
+      80,    89,    90,    91,    92,    93,    94,    95,    48,    -1,
+      -1,    -1,    92,    93,    54,    -1,    -1,    -1,    98,    -1,
+      -1,   101,    -1,    63,    64,    65,    66,    67,    68,    -1,
       70,    -1,    -1,    73,    74,    75,    -1,    -1,    -1,    -1,
-      -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
+      -1,    48,    -1,    -1,    -1,    -1,    -1,    54,    -1,    89,
       90,    91,    92,    93,    94,    95,    63,    64,    65,    66,
       67,    68,    -1,    70,    -1,    -1,    73,    74,    75,    -1,
       -1,    -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    89,    90,    91,    92,    93,    94,    95,    63,
+      54,    -1,    89,    90,    91,    92,    93,    94,    95,    63,
       64,    65,    66,    67,    68,    -1,    70,    -1,    -1,    73,
       74,    75,    -1,    -1,    -1,    -1,    -1,    48,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
+      -1,    -1,    -1,    54,    -1,    89,    90,    91,    92,    93,
       94,    95,    63,    64,    65,    66,    67,    68,    -1,    70,
       -1,    -1,    73,    74,    75,    -1,    -1,    -1,    -1,    -1,
       48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,
       91,    92,    93,    94,    95,    63,    64,    65,    66,    67,
       68,    -1,    70,    -1,    -1,    73,    74,    75,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    54,
+      -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    89,    90,    91,    92,    93,    94,    95,    63,    64,
-      65,    66,    67,    68,    56,    70,    -1,    -1,    73,    74,
-      75,    63,    64,    65,    66,    67,    68,    -1,    70,    -1,
-      -1,    73,    74,    75,    89,    90,    91,    92,    93,    94,
-      95,    -1,    97,    -1,    -1,    -1,    -1,    89,    90,    91,
+      65,    66,    67,    68,    -1,    70,    -1,    -1,    73,    74,
+      75,    -1,    -1,    -1,    -1,    -1,    48,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,    94,
+      95,    63,    64,    65,    66,    67,    68,    -1,    70,    -1,
+      -1,    73,    74,    75,    -1,    -1,    -1,    -1,    -1,    48,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
       92,    93,    94,    95,    63,    64,    65,    66,    67,    68,
       -1,    70,    -1,    -1,    73,    74,    75,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    -1,
-      99,    63,    64,    65,    66,    67,    68,    -1,    70,    -1,
-      -1,    73,    74,    75,    -1,    -1,    -1,    -1,    -1,    81,
-      82,    -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,
-      92,    93,    94,    95,    63,    64,    65,    66,    67,    68,
-      -1,    70,    -1,    -1,    73,    74,    75,    63,    64,    65,
-      66,    -1,    -1,    -1,    70,    -1,    -1,    73,    74,    75,
-      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    -1,
-      -1,    -1,    -1,    89,    90,    91,    92,    93,    94,    95
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,
+      89,    90,    91,    92,    93,    94,    95,    63,    64,    65,
+      66,    67,    68,    56,    70,    -1,    -1,    73,    74,    75,
+      63,    64,    65,    66,    67,    68,    -1,    70,    -1,    -1,
+      73,    74,    75,    89,    90,    91,    92,    93,    94,    95,
+      -1,    97,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    63,    64,    65,    66,    67,    68,    -1,
+      70,    -1,    -1,    73,    74,    75,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    95,    -1,    -1,    -1,    99,
+      63,    64,    65,    66,    67,    68,    -1,    70,    -1,    -1,
+      73,    74,    75,    -1,    -1,    -1,    -1,    -1,    81,    82,
+      -1,    -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,
+      93,    94,    95,    63,    64,    65,    66,    67,    68,    -1,
+      70,    -1,    -1,    73,    74,    75,    63,    64,    65,    66,
+      -1,    -1,    -1,    70,    -1,    -1,    73,    74,    75,    89,
+      90,    91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,
+      -1,    -1,    89,    90,    91,    92,    93,    94,    95
 };
 
   /* YYSTOSSTATE-NUM -- The (internal number of the) accessing
@@ -1531,39 +1532,39 @@ static const yytype_uint8 yystos[] =
       41,    42,    45,    47,    50,    51,    52,    55,    59,    60,
       61,    62,    69,    76,    77,    78,    79,    80,    83,    84,
       85,    92,    93,    98,   101,   105,   106,   107,   108,   110,
-     112,   116,   117,   118,   123,   124,   125,   126,   127,   128,
-     135,   137,   139,   143,   148,   151,    97,    26,   124,    26,
-      50,    98,   125,   149,    98,   149,   124,    48,    98,   125,
-     150,   138,   142,    51,   129,    46,    47,    48,    49,   125,
-     136,   140,    51,    20,   125,    56,    57,    17,    18,    19,
-      26,    33,    26,    26,   125,   125,   136,   131,   125,   125,
-     125,   125,   125,   125,   125,   130,   144,   125,   125,   125,
-      27,    29,   103,   125,   152,   153,   154,   155,     0,    97,
-     125,    43,    65,   125,   109,   115,   118,   125,   128,   148,
+     112,   116,   117,   120,   124,   125,   126,   127,   128,   129,
+     136,   138,   140,   144,   149,   152,    97,    26,   125,    26,
+      50,    98,   126,   150,    98,   150,   125,    48,    98,   126,
+     151,   139,   143,    51,   130,    46,    47,    48,    49,   126,
+     137,   141,    51,    20,   126,    56,    57,    17,    18,    19,
+      26,    33,    26,    26,   126,   126,   137,   132,   126,   126,
+     126,   126,   126,   126,   126,   131,   145,   126,   126,   126,
+      27,    29,   103,   126,   153,   154,   155,   156,     0,    97,
+     126,    43,    65,   126,   109,   115,   120,   126,   129,   149,
       63,    64,    65,    66,    67,    68,    70,    73,    74,    75,
-      89,    90,    91,    92,    93,    94,    95,   120,    98,   125,
-     125,   149,   100,   149,   124,   149,   100,   149,   120,    26,
-     132,   125,    46,   136,    26,    26,    44,    71,    72,    26,
-      54,    65,   124,   124,    54,    65,    54,    53,    56,   136,
-      26,   134,    48,    54,    48,    54,    48,    54,    48,    54,
-      81,    82,    54,    97,    26,   133,    26,    99,   103,   103,
-     102,   100,   100,   105,   121,   120,   120,   121,   121,   125,
-     125,   125,   125,   125,   125,   125,   125,   125,   125,   125,
-     125,   125,   125,   125,   125,   125,   125,    26,   145,    99,
-     125,    99,    99,   125,   145,   100,   125,   141,   124,    26,
-     127,   125,   125,   125,   125,    54,    65,    48,   125,   125,
-     125,   125,   100,   125,   125,   125,   125,   125,   125,   125,
-     125,   125,   125,   111,   111,   100,   124,   124,   125,    27,
-      29,   155,   122,   125,   125,    53,   121,    97,   100,    97,
-      26,   120,    44,   125,   125,    26,    26,    48,    48,    48,
-      48,   108,   122,    26,    97,   110,   121,   121,   121,   122,
-      53,   147,    26,   147,   145,   125,   124,   125,   125,   125,
-     125,   121,   121,    87,   122,    35,    54,   121,   108,   122,
-     122,    97,    54,    88,   121,    54,   125,   113,   121,    30,
-     147,   125,    87,   125,   121,    36,    37,   114,   119,   121,
-      36,    86,    26,   146,   122,   121,   122,   120,   125,    86,
-     120,   100,   122,   121,   122,   121,   108,    26,   121,    87,
-     121,    53,   121,    87,    86,   122,    86,   121
+      89,    90,    91,    92,    93,    94,    95,   121,    98,   126,
+     126,   150,   100,   150,   125,   150,   100,   150,   121,    26,
+     133,   126,    46,   137,    26,    26,    44,    71,    72,    26,
+      54,    65,   125,   125,    54,    65,    54,    53,    56,   137,
+      26,   135,    48,    54,    48,    54,    48,    54,    48,    54,
+      81,    82,    54,    97,    26,   134,    26,    99,   103,   103,
+     102,   100,   100,   105,   122,   121,   121,   118,   122,   126,
+     126,   126,   126,   126,   126,   126,   126,   126,   126,   126,
+     126,   126,   126,   126,   126,   126,   126,    26,   146,    99,
+     126,    99,    99,   126,   146,   100,   126,   142,   125,    26,
+     128,   126,   126,   126,   126,    54,    65,    48,   126,   126,
+     126,   126,   100,   126,   126,   126,   126,   126,   126,   126,
+     126,   126,   126,   111,   111,   100,   125,   125,   126,    27,
+      29,   156,   123,   126,   126,    53,   118,    97,   100,    97,
+      26,   121,    44,   126,   126,    26,    26,    48,    48,    48,
+      48,   108,   123,    26,    97,   110,   122,   122,   122,   123,
+      53,   148,    26,   148,   146,   126,   125,   126,   126,   126,
+     126,   122,   122,    87,   123,    35,    54,   119,   108,   123,
+     123,    97,    54,    88,   122,    54,   126,   113,   119,   121,
+      30,   148,   126,    87,   126,   122,    36,    37,   114,   121,
+      36,    86,    26,   147,   123,   122,   123,   121,   126,    86,
+     121,   100,   123,   122,   123,   118,   108,    26,   122,    87,
+     121,    53,   121,    87,    86,   123,    86,   119
 };
 
   /* YYR1YYN -- Symbol number of symbol that rule YYN derives.  */
@@ -1574,19 +1575,19 @@ static const yytype_uint8 yyr1[] =
      108,   108,   108,   109,   109,   109,   109,   110,   110,   110,
      110,   110,   110,   110,   110,   110,   110,   111,   112,   112,
      113,   113,   114,   115,   115,   116,   117,   118,   119,   120,
-     121,   122,   122,   122,   123,   124,   124,   124,   124,   124,
-     124,   124,   124,   124,   125,   125,   125,   125,   125,   125,
-     125,   125,   125,   125,   125,   125,   125,   125,   125,   125,
-     125,   125,   125,   125,   125,   125,   125,   125,   125,   125,
-     125,   125,   125,   125,   125,   125,   126,   126,   126,   126,
-     126,   126,   126,   126,   127,   127,   128,   128,   128,   128,
-     128,   129,   128,   130,   128,   131,   128,   128,   128,   128,
-     128,   132,   132,   133,   133,   134,   134,   135,   135,   135,
-     135,   135,   135,   136,   136,   137,   137,   137,   138,   137,
-     140,   141,   139,   139,   142,   139,   139,   139,   144,   143,
-     145,   145,   145,   146,   146,   146,   147,   148,   149,   149,
-     149,   150,   150,   151,   152,   152,   152,   152,   153,   153,
-     154,   154,   155,   155
+     121,   122,   123,   123,   123,   124,   125,   125,   125,   125,
+     125,   125,   125,   125,   125,   126,   126,   126,   126,   126,
+     126,   126,   126,   126,   126,   126,   126,   126,   126,   126,
+     126,   126,   126,   126,   126,   126,   126,   126,   126,   126,
+     126,   126,   126,   126,   126,   126,   126,   127,   127,   127,
+     127,   127,   127,   127,   127,   128,   128,   129,   129,   129,
+     129,   129,   130,   129,   131,   129,   132,   129,   129,   129,
+     129,   129,   133,   133,   134,   134,   135,   135,   136,   136,
+     136,   136,   136,   136,   137,   137,   138,   138,   138,   139,
+     138,   141,   142,   140,   140,   143,   140,   140,   140,   145,
+     144,   146,   146,   146,   147,   147,   147,   148,   149,   150,
+     150,   150,   151,   151,   152,   153,   153,   153,   153,   154,
+     154,   155,   155,   156,   156
 };
 
   /* YYR2YYN -- Number of symbols on the right hand side of rule YYN.  */
@@ -1596,20 +1597,20 @@ static const yytype_int8 yyr2[] =
        4,     4,     4,     4,     4,     4,     5,     5,     8,     4,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     6,
       11,    12,     8,     2,     3,     7,     6,     0,     9,    12,
-       0,     2,     6,    11,     7,     2,     3,     1,     1,     0,
-       0,     0,     2,     2,     3,     1,     1,     1,     1,     1,
-       1,     3,     1,     2,     1,     1,     4,     2,     4,     3,
-       2,     1,     1,     1,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     3,     3,     3,     3,     2,     3,     3,
-       3,     3,     2,     2,     4,     4,     4,     6,     4,     6,
-       4,     6,     4,     6,     2,     1,     2,     1,     1,     2,
-       1,     0,     3,     0,     3,     0,     3,     4,     2,     4,
-       2,     1,     3,     1,     3,     1,     3,     1,     2,     2,
-       2,     3,     2,     3,     2,     2,     3,     2,     0,     3,
-       0,     0,     9,     2,     0,     7,     8,     6,     0,     3,
-       0,     1,     3,     0,     1,     3,     0,     2,     0,     1,
-       3,     1,     3,     3,     0,     1,     1,     1,     1,     3,
-       1,     3,     3,     3
+       0,     2,     6,    11,     7,     2,     3,     0,     0,     1,
+       0,     0,     0,     2,     2,     3,     1,     1,     1,     1,
+       1,     1,     3,     1,     2,     1,     1,     4,     2,     4,
+       3,     2,     1,     1,     1,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     2,     3,
+       3,     3,     3,     2,     2,     4,     4,     4,     6,     4,
+       6,     4,     6,     4,     6,     2,     1,     2,     1,     1,
+       2,     1,     0,     3,     0,     3,     0,     3,     4,     2,
+       4,     2,     1,     3,     1,     3,     1,     3,     1,     2,
+       2,     2,     3,     2,     3,     2,     2,     3,     2,     0,
+       3,     0,     0,     9,     2,     0,     7,     8,     6,     0,
+       3,     0,     1,     3,     0,     1,     3,     0,     2,     0,
+       1,     3,     1,     3,     3,     0,     1,     1,     1,     1,
+       3,     1,     3,     3,     3
 };
 
 
@@ -1883,79 +1884,79 @@ yydestruct (const char *yymsg,
     case 22: /* BLTIN  */
 #line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1887 "engines/director/lingo/lingo-gr.cpp"
+#line 1888 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 23: /* FBLTIN  */
 #line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1893 "engines/director/lingo/lingo-gr.cpp"
+#line 1894 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 24: /* RBLTIN  */
 #line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1899 "engines/director/lingo/lingo-gr.cpp"
+#line 1900 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 25: /* THEFBLTIN  */
 #line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1905 "engines/director/lingo/lingo-gr.cpp"
+#line 1906 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 26: /* ID  */
 #line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1911 "engines/director/lingo/lingo-gr.cpp"
+#line 1912 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 27: /* STRING  */
 #line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1917 "engines/director/lingo/lingo-gr.cpp"
+#line 1918 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 28: /* HANDLER  */
 #line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1923 "engines/director/lingo/lingo-gr.cpp"
+#line 1924 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 29: /* SYMBOL  */
 #line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1929 "engines/director/lingo/lingo-gr.cpp"
+#line 1930 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 30: /* ENDCLAUSE  */
 #line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1935 "engines/director/lingo/lingo-gr.cpp"
+#line 1936 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 31: /* tPLAYACCEL  */
 #line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1941 "engines/director/lingo/lingo-gr.cpp"
+#line 1942 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 32: /* tMETHOD  */
 #line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1947 "engines/director/lingo/lingo-gr.cpp"
+#line 1948 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 33: /* THEOBJECTFIELD  */
 #line 161 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).objectfield).os; }
-#line 1953 "engines/director/lingo/lingo-gr.cpp"
+#line 1954 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case 143: /* on  */
+    case 144: /* on  */
 #line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1959 "engines/director/lingo/lingo-gr.cpp"
+#line 1960 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2241,7 +2242,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code);
 		delete (yyvsp[0].s); }
-#line 2245 "engines/director/lingo/lingo-gr.cpp"
+#line 2246 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 8:
@@ -2249,7 +2250,7 @@ yyreduce:
                                                 {
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code); }
-#line 2253 "engines/director/lingo/lingo-gr.cpp"
+#line 2254 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 9:
@@ -2265,19 +2266,19 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-4].e)[1]);
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2269 "engines/director/lingo/lingo-gr.cpp"
+#line 2270 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10:
 #line 193 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code1(LC::c_after); }
-#line 2275 "engines/director/lingo/lingo-gr.cpp"
+#line 2276 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11:
 #line 194 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code1(LC::c_before); }
-#line 2281 "engines/director/lingo/lingo-gr.cpp"
+#line 2282 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12:
@@ -2288,7 +2289,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2292 "engines/director/lingo/lingo-gr.cpp"
+#line 2293 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13:
@@ -2300,7 +2301,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2304 "engines/director/lingo/lingo-gr.cpp"
+#line 2305 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 14:
@@ -2311,7 +2312,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2315 "engines/director/lingo/lingo-gr.cpp"
+#line 2316 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15:
@@ -2323,7 +2324,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2327 "engines/director/lingo/lingo-gr.cpp"
+#line 2328 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16:
@@ -2334,7 +2335,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2338 "engines/director/lingo/lingo-gr.cpp"
+#line 2339 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17:
@@ -2345,7 +2346,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2349 "engines/director/lingo/lingo-gr.cpp"
+#line 2350 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 18:
@@ -2361,7 +2362,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-6].e)[0]);
 		g_lingo->codeInt((yyvsp[-6].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2365 "engines/director/lingo/lingo-gr.cpp"
+#line 2366 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19:
@@ -2372,7 +2373,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].objectfield).oe);
 		delete (yyvsp[-2].objectfield).os;
 		(yyval.code) = (yyvsp[0].code); }
-#line 2376 "engines/director/lingo/lingo-gr.cpp"
+#line 2377 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29:
@@ -2383,7 +2384,7 @@ yyreduce:
 		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-5].code));
 		(*g_lingo->_currentScript)[(yyvsp[-5].code) + 1] = body;	/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-5].code) + 2] = end; }
-#line 2387 "engines/director/lingo/lingo-gr.cpp"
+#line 2388 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30:
@@ -2400,7 +2401,7 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 3] = body;		/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 4] = inc;		/* increment */
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 5] = end; }
-#line 2404 "engines/director/lingo/lingo-gr.cpp"
+#line 2405 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31:
@@ -2417,7 +2418,7 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-11].code) + 3] = body;		/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-11].code) + 4] = inc;		/* increment */
 		(*g_lingo->_currentScript)[(yyvsp[-11].code) + 5] = end; }
-#line 2421 "engines/director/lingo/lingo-gr.cpp"
+#line 2422 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32:
@@ -2432,14 +2433,14 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-7].code) + 3] = body;		/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-7].code) + 4] = 0;		/* increment */
 		(*g_lingo->_currentScript)[(yyvsp[-7].code) + 5] = end; }
-#line 2436 "engines/director/lingo/lingo-gr.cpp"
+#line 2437 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33:
 #line 318 "engines/director/lingo/lingo-gr.y"
                         {
 		g_lingo->code1(LC::c_nextRepeat); }
-#line 2443 "engines/director/lingo/lingo-gr.cpp"
+#line 2444 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34:
@@ -2449,7 +2450,7 @@ yyreduce:
 		WRITE_UINT32(&end, (yyvsp[0].code) - (yyvsp[-2].code));
 		g_lingo->code1(STOP);
 		(*g_lingo->_currentScript)[(yyvsp[-2].code) + 1] = end; }
-#line 2453 "engines/director/lingo/lingo-gr.cpp"
+#line 2454 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35:
@@ -2458,7 +2459,7 @@ yyreduce:
 		inst end;
 		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-3].code));
 		(*g_lingo->_currentScript)[(yyvsp[-3].code) + 1] = end; }
-#line 2462 "engines/director/lingo/lingo-gr.cpp"
+#line 2463 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36:
@@ -2467,7 +2468,7 @@ yyreduce:
 		inst end;
 		WRITE_UINT32(&end, (yyvsp[0].code) - (yyvsp[-2].code));
 		(*g_lingo->_currentScript)[(yyvsp[-2].code) + 1] = end; }
-#line 2471 "engines/director/lingo/lingo-gr.cpp"
+#line 2472 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37:
@@ -2475,190 +2476,176 @@ yyreduce:
                                                         {
 		(yyval.code) = g_lingo->code1(LC::c_tellcode);
 		g_lingo->code1(STOP); }
-#line 2479 "engines/director/lingo/lingo-gr.cpp"
+#line 2480 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38:
 #line 338 "engines/director/lingo/lingo-gr.y"
-                                                                                       {
-		inst then = 0, else1 = 0, end = 0;
-		WRITE_UINT32(&then, (yyvsp[-6].code) - (yyvsp[-8].code));
-		WRITE_UINT32(&else1, (yyvsp[-3].code) - (yyvsp[-8].code));
-		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-8].code));
-		(*g_lingo->_currentScript)[(yyvsp[-8].code) + 1] = then;	/* thenpart */
-		(*g_lingo->_currentScript)[(yyvsp[-8].code) + 2] = else1;/* elsepart */
-		(*g_lingo->_currentScript)[(yyvsp[-8].code) + 3] = end;	/* end, if cond fails */
-
-		g_lingo->processIf((yyvsp[-8].code), (yyvsp[-1].code) - (yyvsp[-8].code), 0); }
-#line 2494 "engines/director/lingo/lingo-gr.cpp"
+                                                                                           {
+		inst else1 = 0, end3 = 0;
+		WRITE_UINT32(&else1, (yyvsp[-3].narg) + 1);
+		WRITE_UINT32(&end3, (yyvsp[-1].code));
+		(*g_lingo->_currentScript)[(yyvsp[-6].narg)] = else1;		/* elsepart */
+		(*g_lingo->_currentScript)[(yyvsp[-3].narg)] = end3;		/* end, if cond fails */
+		g_lingo->processIf((yyvsp[-3].narg), (yyvsp[-1].code)); }
+#line 2492 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39:
-#line 348 "engines/director/lingo/lingo-gr.y"
-                                                                                                              {
-		inst then = 0, else1 = 0, end = 0;
-		WRITE_UINT32(&then, (yyvsp[-9].code) - (yyvsp[-11].code));
-		WRITE_UINT32(&else1, (yyvsp[-6].code) - (yyvsp[-11].code));
-		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-11].code));
-		(*g_lingo->_currentScript)[(yyvsp[-11].code) + 1] = then;	/* thenpart */
-		(*g_lingo->_currentScript)[(yyvsp[-11].code) + 2] = else1;/* elsepart */
-		(*g_lingo->_currentScript)[(yyvsp[-11].code) + 3] = end;	/* end, if cond fails */
-
-		g_lingo->processIf((yyvsp[-11].code), (yyvsp[-1].code) - (yyvsp[-11].code), (yyvsp[-3].code) - (yyvsp[-11].code)); }
-#line 2509 "engines/director/lingo/lingo-gr.cpp"
+#line 345 "engines/director/lingo/lingo-gr.y"
+                                                                                                                  {
+		inst else1 = 0, end = 0;
+		WRITE_UINT32(&else1, (yyvsp[-6].narg) +1);
+		WRITE_UINT32(&end, (yyvsp[-1].code));
+		(*g_lingo->_currentScript)[(yyvsp[-9].narg)] = else1;		/* elsepart */
+		(*g_lingo->_currentScript)[(yyvsp[-6].narg)] = end;		/* end, if cond fails */
+		g_lingo->processIf((yyvsp[-6].narg), (yyvsp[-1].code)); }
+#line 2504 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42:
-#line 362 "engines/director/lingo/lingo-gr.y"
-                                                        {
-		inst then = 0;
-		WRITE_UINT32(&then, (yyvsp[-3].code) - (yyvsp[-5].code));
-		(*g_lingo->_currentScript)[(yyvsp[-5].code) + 1] = then;	/* thenpart */
-
-		g_lingo->codeLabel((yyvsp[-5].code)); }
-#line 2520 "engines/director/lingo/lingo-gr.cpp"
+#line 356 "engines/director/lingo/lingo-gr.y"
+                                                                {
+		inst else1 = 0;
+		WRITE_UINT32(&else1, (yyvsp[0].narg) + 1);
+		(*g_lingo->_currentScript)[(yyvsp[-3].narg)] = else1;	/* end, if cond fails */
+		g_lingo->codeLabel((yyvsp[0].narg)); }
+#line 2514 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43:
-#line 369 "engines/director/lingo/lingo-gr.y"
-                                                                                                         {
-		inst then = 0, else1 = 0, end = 0;
-		WRITE_UINT32(&then, (yyvsp[-8].code) - (yyvsp[-10].code));
-		WRITE_UINT32(&else1, (yyvsp[-5].code) - (yyvsp[-10].code));
-		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-10].code));
-		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 1] = then;	/* thenpart */
-		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 2] = else1;/* elsepart */
-		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 3] = end;	/* end, if cond fails */
-
-		g_lingo->processIf((yyvsp[-10].code), (yyvsp[-1].code) - (yyvsp[-10].code), (yyvsp[-3].code) - (yyvsp[-10].code)); }
-#line 2535 "engines/director/lingo/lingo-gr.cpp"
+#line 362 "engines/director/lingo/lingo-gr.y"
+                                                                                                             {
+		inst else1 = 0, end = 0;
+		WRITE_UINT32(&else1, (yyvsp[-5].narg) + 1);
+		WRITE_UINT32(&end, (yyvsp[-1].code));
+		(*g_lingo->_currentScript)[(yyvsp[-8].narg)] = else1;		/* elsepart */
+		(*g_lingo->_currentScript)[(yyvsp[-5].narg)] = end;	}
+#line 2525 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44:
-#line 379 "engines/director/lingo/lingo-gr.y"
-                                                                   {
-		inst then = 0, else1 = 0, end = 0;
-		WRITE_UINT32(&then, (yyvsp[-4].code) - (yyvsp[-6].code));
-		WRITE_UINT32(&else1, 0);
-		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-6].code));
-		(*g_lingo->_currentScript)[(yyvsp[-6].code) + 1] = then;	/* thenpart */
-		(*g_lingo->_currentScript)[(yyvsp[-6].code) + 2] = else1;/* elsepart */
-		(*g_lingo->_currentScript)[(yyvsp[-6].code) + 3] = end;	/* end, if cond fails */
+#line 368 "engines/director/lingo/lingo-gr.y"
+                                                                      {
+		inst end = 0;
+		WRITE_UINT32(&end, (yyvsp[-1].code));
 
-		g_lingo->processIf((yyvsp[-6].code), (yyvsp[-1].code) - (yyvsp[-6].code), (yyvsp[-1].code) - (yyvsp[-6].code)); }
-#line 2550 "engines/director/lingo/lingo-gr.cpp"
+		(*g_lingo->_currentScript)[(yyvsp[-4].narg)] = end; }
+#line 2535 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45:
-#line 390 "engines/director/lingo/lingo-gr.y"
+#line 374 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = g_lingo->code3(LC::c_repeatwhilecode, STOP, STOP); }
-#line 2556 "engines/director/lingo/lingo-gr.cpp"
+#line 2541 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46:
-#line 392 "engines/director/lingo/lingo-gr.y"
+#line 376 "engines/director/lingo/lingo-gr.y"
                                                 {
 		(yyval.code) = g_lingo->code3(LC::c_repeatwithcode, STOP, STOP);
 		g_lingo->code3(STOP, STOP, STOP);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2566 "engines/director/lingo/lingo-gr.cpp"
+#line 2551 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47:
-#line 398 "engines/director/lingo/lingo-gr.y"
-                                                {
-		(yyval.code) = g_lingo->code1(LC::c_ifcode);
-		g_lingo->code3(STOP, STOP, STOP);
-		g_lingo->code1(0);  // Do not skip end
-		g_lingo->codeLabel(0); }
-#line 2576 "engines/director/lingo/lingo-gr.cpp"
+#line 382 "engines/director/lingo/lingo-gr.y"
+                                {
+		g_lingo->code2(LC::c_jumpifz, STOP);
+		(yyval.narg) = g_lingo->_currentScript->size() - 1; }
+#line 2559 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48:
-#line 404 "engines/director/lingo/lingo-gr.y"
-                                        {
-		inst skipEnd;
-		WRITE_UINT32(&skipEnd, 1); // We have to skip end to avoid multiple executions
-		(yyval.code) = g_lingo->code1(LC::c_ifcode);
-		g_lingo->code3(STOP, STOP, STOP);
-		g_lingo->code1(skipEnd); }
-#line 2587 "engines/director/lingo/lingo-gr.cpp"
+#line 386 "engines/director/lingo/lingo-gr.y"
+                                {
+		g_lingo->code2(LC::c_jump, STOP);
+		(yyval.narg) = g_lingo->_currentScript->size() - 1; }
+#line 2567 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49:
-#line 411 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2593 "engines/director/lingo/lingo-gr.cpp"
+#line 390 "engines/director/lingo/lingo-gr.y"
+                                                {
+		g_lingo->codeLabel(0); }
+#line 2574 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50:
-#line 413 "engines/director/lingo/lingo-gr.y"
-                                { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2599 "engines/director/lingo/lingo-gr.cpp"
+#line 393 "engines/director/lingo/lingo-gr.y"
+                                { (yyval.code) = g_lingo->_currentScript->size(); }
+#line 2580 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51:
-#line 415 "engines/director/lingo/lingo-gr.y"
+#line 395 "engines/director/lingo/lingo-gr.y"
+                                { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); }
+#line 2586 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 52:
+#line 397 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2605 "engines/director/lingo/lingo-gr.cpp"
+#line 2592 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 54:
-#line 419 "engines/director/lingo/lingo-gr.y"
+  case 55:
+#line 401 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.code) = g_lingo->code1(LC::c_whencode);
 		g_lingo->code1(STOP);
 		g_lingo->codeString((yyvsp[-1].s)->c_str());
 		delete (yyvsp[-1].s); }
-#line 2615 "engines/director/lingo/lingo-gr.cpp"
+#line 2602 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 55:
-#line 425 "engines/director/lingo/lingo-gr.y"
+  case 56:
+#line 407 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt((yyvsp[0].i)); }
-#line 2623 "engines/director/lingo/lingo-gr.cpp"
+#line 2610 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 56:
-#line 428 "engines/director/lingo/lingo-gr.y"
+  case 57:
+#line 410 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_floatpush);
 		g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2631 "engines/director/lingo/lingo-gr.cpp"
+#line 2618 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 57:
-#line 431 "engines/director/lingo/lingo-gr.y"
+  case 58:
+#line 413 "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 2640 "engines/director/lingo/lingo-gr.cpp"
+#line 2627 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 58:
-#line 435 "engines/director/lingo/lingo-gr.y"
+  case 59:
+#line 417 "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 2649 "engines/director/lingo/lingo-gr.cpp"
+#line 2636 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 59:
-#line 439 "engines/director/lingo/lingo-gr.y"
+  case 60:
+#line 421 "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 2658 "engines/director/lingo/lingo-gr.cpp"
+#line 2645 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 60:
-#line 443 "engines/director/lingo/lingo-gr.y"
+  case 61:
+#line 425 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2667,17 +2654,17 @@ yyreduce:
 		WRITE_UINT32(&e, (yyvsp[0].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[0].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2671 "engines/director/lingo/lingo-gr.cpp"
+#line 2658 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 61:
-#line 451 "engines/director/lingo/lingo-gr.y"
+  case 62:
+#line 433 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = (yyvsp[-1].code); }
-#line 2677 "engines/director/lingo/lingo-gr.cpp"
+#line 2664 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 63:
-#line 453 "engines/director/lingo/lingo-gr.y"
+  case 64:
+#line 435 "engines/director/lingo/lingo-gr.y"
                                 {
 		// Director parser till D3 was forgiving for any hanging parentheses
 		if (g_lingo->_ignoreError) {
@@ -2688,542 +2675,542 @@ yyreduce:
 			yyerrok;
 		}
 	}
-#line 2692 "engines/director/lingo/lingo-gr.cpp"
+#line 2679 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 64:
-#line 464 "engines/director/lingo/lingo-gr.y"
+  case 65:
+#line 446 "engines/director/lingo/lingo-gr.y"
                  { (yyval.code) = (yyvsp[0].code); }
-#line 2698 "engines/director/lingo/lingo-gr.cpp"
+#line 2685 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 66:
-#line 466 "engines/director/lingo/lingo-gr.y"
+  case 67:
+#line 448 "engines/director/lingo/lingo-gr.y"
                                  {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2706 "engines/director/lingo/lingo-gr.cpp"
+#line 2693 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 67:
-#line 469 "engines/director/lingo/lingo-gr.y"
+  case 68:
+#line 451 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 2714 "engines/director/lingo/lingo-gr.cpp"
+#line 2701 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 68:
-#line 472 "engines/director/lingo/lingo-gr.y"
+  case 69:
+#line 454 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2722 "engines/director/lingo/lingo-gr.cpp"
+#line 2709 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 69:
-#line 475 "engines/director/lingo/lingo-gr.y"
+  case 70:
+#line 457 "engines/director/lingo/lingo-gr.y"
                                         {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-2].s), 1);
 		delete (yyvsp[-2].s); }
-#line 2730 "engines/director/lingo/lingo-gr.cpp"
+#line 2717 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 70:
-#line 478 "engines/director/lingo/lingo-gr.y"
+  case 71:
+#line 460 "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 2741 "engines/director/lingo/lingo-gr.cpp"
+#line 2728 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 71:
-#line 484 "engines/director/lingo/lingo-gr.y"
+  case 72:
+#line 466 "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 2751 "engines/director/lingo/lingo-gr.cpp"
+#line 2738 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 72:
-#line 489 "engines/director/lingo/lingo-gr.y"
+  case 73:
+#line 471 "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 2762 "engines/director/lingo/lingo-gr.cpp"
+#line 2749 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 74:
-#line 496 "engines/director/lingo/lingo-gr.y"
+  case 75:
+#line 478 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_add); }
-#line 2768 "engines/director/lingo/lingo-gr.cpp"
+#line 2755 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 75:
-#line 497 "engines/director/lingo/lingo-gr.y"
+  case 76:
+#line 479 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_sub); }
-#line 2774 "engines/director/lingo/lingo-gr.cpp"
+#line 2761 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 76:
-#line 498 "engines/director/lingo/lingo-gr.y"
+  case 77:
+#line 480 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mul); }
-#line 2780 "engines/director/lingo/lingo-gr.cpp"
+#line 2767 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 77:
-#line 499 "engines/director/lingo/lingo-gr.y"
+  case 78:
+#line 481 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_div); }
-#line 2786 "engines/director/lingo/lingo-gr.cpp"
+#line 2773 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 78:
-#line 500 "engines/director/lingo/lingo-gr.y"
+  case 79:
+#line 482 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mod); }
-#line 2792 "engines/director/lingo/lingo-gr.cpp"
+#line 2779 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 79:
-#line 501 "engines/director/lingo/lingo-gr.y"
+  case 80:
+#line 483 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gt); }
-#line 2798 "engines/director/lingo/lingo-gr.cpp"
+#line 2785 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 80:
-#line 502 "engines/director/lingo/lingo-gr.y"
+  case 81:
+#line 484 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lt); }
-#line 2804 "engines/director/lingo/lingo-gr.cpp"
+#line 2791 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 81:
-#line 503 "engines/director/lingo/lingo-gr.y"
+  case 82:
+#line 485 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_eq); }
-#line 2810 "engines/director/lingo/lingo-gr.cpp"
+#line 2797 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 82:
-#line 504 "engines/director/lingo/lingo-gr.y"
+  case 83:
+#line 486 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_neq); }
-#line 2816 "engines/director/lingo/lingo-gr.cpp"
+#line 2803 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 83:
-#line 505 "engines/director/lingo/lingo-gr.y"
+  case 84:
+#line 487 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ge); }
-#line 2822 "engines/director/lingo/lingo-gr.cpp"
+#line 2809 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 84:
-#line 506 "engines/director/lingo/lingo-gr.y"
+  case 85:
+#line 488 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_le); }
-#line 2828 "engines/director/lingo/lingo-gr.cpp"
+#line 2815 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 85:
-#line 507 "engines/director/lingo/lingo-gr.y"
+  case 86:
+#line 489 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_and); }
-#line 2834 "engines/director/lingo/lingo-gr.cpp"
+#line 2821 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 86:
-#line 508 "engines/director/lingo/lingo-gr.y"
+  case 87:
+#line 490 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_or); }
-#line 2840 "engines/director/lingo/lingo-gr.cpp"
+#line 2827 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 87:
-#line 509 "engines/director/lingo/lingo-gr.y"
+  case 88:
+#line 491 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_not); }
-#line 2846 "engines/director/lingo/lingo-gr.cpp"
+#line 2833 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 88:
-#line 510 "engines/director/lingo/lingo-gr.y"
+  case 89:
+#line 492 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ampersand); }
-#line 2852 "engines/director/lingo/lingo-gr.cpp"
+#line 2839 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 89:
-#line 511 "engines/director/lingo/lingo-gr.y"
+  case 90:
+#line 493 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_concat); }
-#line 2858 "engines/director/lingo/lingo-gr.cpp"
+#line 2845 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 90:
-#line 512 "engines/director/lingo/lingo-gr.y"
+  case 91:
+#line 494 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_contains); }
-#line 2864 "engines/director/lingo/lingo-gr.cpp"
+#line 2851 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 91:
-#line 513 "engines/director/lingo/lingo-gr.y"
+  case 92:
+#line 495 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_starts); }
-#line 2870 "engines/director/lingo/lingo-gr.cpp"
+#line 2857 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 92:
-#line 514 "engines/director/lingo/lingo-gr.y"
+  case 93:
+#line 496 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = (yyvsp[0].code); }
-#line 2876 "engines/director/lingo/lingo-gr.cpp"
+#line 2863 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 93:
-#line 515 "engines/director/lingo/lingo-gr.y"
+  case 94:
+#line 497 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 2882 "engines/director/lingo/lingo-gr.cpp"
+#line 2869 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 94:
-#line 516 "engines/director/lingo/lingo-gr.y"
+  case 95:
+#line 498 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_intersects); }
-#line 2888 "engines/director/lingo/lingo-gr.cpp"
+#line 2875 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 95:
-#line 517 "engines/director/lingo/lingo-gr.y"
+  case 96:
+#line 499 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_within); }
-#line 2894 "engines/director/lingo/lingo-gr.cpp"
+#line 2881 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 96:
-#line 519 "engines/director/lingo/lingo-gr.y"
+  case 97:
+#line 501 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_charOf); }
-#line 2900 "engines/director/lingo/lingo-gr.cpp"
+#line 2887 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 97:
-#line 520 "engines/director/lingo/lingo-gr.y"
+  case 98:
+#line 502 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_charToOf); }
-#line 2906 "engines/director/lingo/lingo-gr.cpp"
+#line 2893 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 98:
-#line 521 "engines/director/lingo/lingo-gr.y"
+  case 99:
+#line 503 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_itemOf); }
-#line 2912 "engines/director/lingo/lingo-gr.cpp"
+#line 2899 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 99:
-#line 522 "engines/director/lingo/lingo-gr.y"
+  case 100:
+#line 504 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_itemToOf); }
-#line 2918 "engines/director/lingo/lingo-gr.cpp"
+#line 2905 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 100:
-#line 523 "engines/director/lingo/lingo-gr.y"
+  case 101:
+#line 505 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lineOf); }
-#line 2924 "engines/director/lingo/lingo-gr.cpp"
+#line 2911 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 101:
-#line 524 "engines/director/lingo/lingo-gr.y"
+  case 102:
+#line 506 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_lineToOf); }
-#line 2930 "engines/director/lingo/lingo-gr.cpp"
+#line 2917 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 102:
-#line 525 "engines/director/lingo/lingo-gr.y"
+  case 103:
+#line 507 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_wordOf); }
-#line 2936 "engines/director/lingo/lingo-gr.cpp"
+#line 2923 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 103:
-#line 526 "engines/director/lingo/lingo-gr.y"
+  case 104:
+#line 508 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_wordToOf); }
-#line 2942 "engines/director/lingo/lingo-gr.cpp"
+#line 2929 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 104:
-#line 528 "engines/director/lingo/lingo-gr.y"
+  case 105:
+#line 510 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->codeFunc((yyvsp[-1].s), 1);
 		delete (yyvsp[-1].s); }
-#line 2950 "engines/director/lingo/lingo-gr.cpp"
+#line 2937 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 106:
-#line 533 "engines/director/lingo/lingo-gr.y"
+  case 107:
+#line 515 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_printtop); }
-#line 2956 "engines/director/lingo/lingo-gr.cpp"
+#line 2943 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 109:
-#line 536 "engines/director/lingo/lingo-gr.y"
+  case 110:
+#line 518 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_exitRepeat); }
-#line 2962 "engines/director/lingo/lingo-gr.cpp"
+#line 2949 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 110:
-#line 537 "engines/director/lingo/lingo-gr.y"
+  case 111:
+#line 519 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_procret); }
-#line 2968 "engines/director/lingo/lingo-gr.cpp"
+#line 2955 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 111:
-#line 538 "engines/director/lingo/lingo-gr.y"
+  case 112:
+#line 520 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 2974 "engines/director/lingo/lingo-gr.cpp"
+#line 2961 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 112:
-#line 538 "engines/director/lingo/lingo-gr.y"
+  case 113:
+#line 520 "engines/director/lingo/lingo-gr.y"
                                                                                  { inNone(); }
-#line 2980 "engines/director/lingo/lingo-gr.cpp"
+#line 2967 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 113:
-#line 539 "engines/director/lingo/lingo-gr.y"
+  case 114:
+#line 521 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 2986 "engines/director/lingo/lingo-gr.cpp"
+#line 2973 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 114:
-#line 539 "engines/director/lingo/lingo-gr.y"
+  case 115:
+#line 521 "engines/director/lingo/lingo-gr.y"
                                                                                    { inNone(); }
-#line 2992 "engines/director/lingo/lingo-gr.cpp"
+#line 2979 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 115:
-#line 540 "engines/director/lingo/lingo-gr.y"
+  case 116:
+#line 522 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 2998 "engines/director/lingo/lingo-gr.cpp"
+#line 2985 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 116:
-#line 540 "engines/director/lingo/lingo-gr.y"
+  case 117:
+#line 522 "engines/director/lingo/lingo-gr.y"
                                                                                    { inNone(); }
-#line 3004 "engines/director/lingo/lingo-gr.cpp"
+#line 2991 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117:
-#line 541 "engines/director/lingo/lingo-gr.y"
+  case 118:
+#line 523 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 3012 "engines/director/lingo/lingo-gr.cpp"
+#line 2999 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 118:
-#line 544 "engines/director/lingo/lingo-gr.y"
+  case 119:
+#line 526 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 3020 "engines/director/lingo/lingo-gr.cpp"
+#line 3007 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119:
-#line 547 "engines/director/lingo/lingo-gr.y"
+  case 120:
+#line 529 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_open); }
-#line 3026 "engines/director/lingo/lingo-gr.cpp"
+#line 3013 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120:
-#line 548 "engines/director/lingo/lingo-gr.y"
+  case 121:
+#line 530 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code2(LC::c_voidpush, LC::c_open); }
-#line 3032 "engines/director/lingo/lingo-gr.cpp"
+#line 3019 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121:
-#line 550 "engines/director/lingo/lingo-gr.y"
+  case 122:
+#line 532 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_global);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		mArg((yyvsp[0].s));
 		delete (yyvsp[0].s); }
-#line 3042 "engines/director/lingo/lingo-gr.cpp"
+#line 3029 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 122:
-#line 555 "engines/director/lingo/lingo-gr.y"
+  case 123:
+#line 537 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_global);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		mArg((yyvsp[0].s));
 		delete (yyvsp[0].s); }
-#line 3052 "engines/director/lingo/lingo-gr.cpp"
+#line 3039 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 123:
-#line 561 "engines/director/lingo/lingo-gr.y"
+  case 124:
+#line 543 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_property);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		mArg((yyvsp[0].s));
 		delete (yyvsp[0].s); }
-#line 3062 "engines/director/lingo/lingo-gr.cpp"
+#line 3049 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 124:
-#line 566 "engines/director/lingo/lingo-gr.y"
+  case 125:
+#line 548 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_property);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		mArg((yyvsp[0].s));
 		delete (yyvsp[0].s); }
-#line 3072 "engines/director/lingo/lingo-gr.cpp"
+#line 3059 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 125:
-#line 572 "engines/director/lingo/lingo-gr.y"
+  case 126:
+#line 554 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_instance);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		mArg((yyvsp[0].s));
 		delete (yyvsp[0].s); }
-#line 3082 "engines/director/lingo/lingo-gr.cpp"
+#line 3069 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 126:
-#line 577 "engines/director/lingo/lingo-gr.y"
+  case 127:
+#line 559 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_instance);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		mArg((yyvsp[0].s));
 		delete (yyvsp[0].s); }
-#line 3092 "engines/director/lingo/lingo-gr.cpp"
+#line 3079 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 127:
-#line 590 "engines/director/lingo/lingo-gr.y"
+  case 128:
+#line 572 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoloop); }
-#line 3098 "engines/director/lingo/lingo-gr.cpp"
+#line 3085 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 128:
-#line 591 "engines/director/lingo/lingo-gr.y"
+  case 129:
+#line 573 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_gotonext); }
-#line 3104 "engines/director/lingo/lingo-gr.cpp"
+#line 3091 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129:
-#line 592 "engines/director/lingo/lingo-gr.y"
+  case 130:
+#line 574 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoprevious); }
-#line 3110 "engines/director/lingo/lingo-gr.cpp"
+#line 3097 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 130:
-#line 593 "engines/director/lingo/lingo-gr.y"
+  case 131:
+#line 575 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_goto); }
-#line 3119 "engines/director/lingo/lingo-gr.cpp"
+#line 3106 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 131:
-#line 597 "engines/director/lingo/lingo-gr.y"
+  case 132:
+#line 579 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_goto); }
-#line 3128 "engines/director/lingo/lingo-gr.cpp"
+#line 3115 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 132:
-#line 601 "engines/director/lingo/lingo-gr.y"
+  case 133:
+#line 583 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_goto); }
-#line 3137 "engines/director/lingo/lingo-gr.cpp"
+#line 3124 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135:
-#line 609 "engines/director/lingo/lingo-gr.y"
+  case 136:
+#line 591 "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 3146 "engines/director/lingo/lingo-gr.cpp"
+#line 3133 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136:
-#line 613 "engines/director/lingo/lingo-gr.y"
+  case 137:
+#line 595 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_play); }
-#line 3155 "engines/director/lingo/lingo-gr.cpp"
+#line 3142 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137:
-#line 617 "engines/director/lingo/lingo-gr.y"
+  case 138:
+#line 599 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_play); }
-#line 3164 "engines/director/lingo/lingo-gr.cpp"
+#line 3151 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 138:
-#line 621 "engines/director/lingo/lingo-gr.y"
+  case 139:
+#line 603 "engines/director/lingo/lingo-gr.y"
                      { g_lingo->codeSetImmediate(true); }
-#line 3170 "engines/director/lingo/lingo-gr.cpp"
+#line 3157 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 139:
-#line 621 "engines/director/lingo/lingo-gr.y"
+  case 140:
+#line 603 "engines/director/lingo/lingo-gr.y"
                                                                   {
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeFunc((yyvsp[-2].s), (yyvsp[0].narg));
 		delete (yyvsp[-2].s); }
-#line 3179 "engines/director/lingo/lingo-gr.cpp"
+#line 3166 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140:
-#line 651 "engines/director/lingo/lingo-gr.y"
+  case 141:
+#line 633 "engines/director/lingo/lingo-gr.y"
              { startDef(); }
-#line 3185 "engines/director/lingo/lingo-gr.cpp"
+#line 3172 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 141:
-#line 651 "engines/director/lingo/lingo-gr.y"
+  case 142:
+#line 633 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->_currentFactory.clear(); }
-#line 3191 "engines/director/lingo/lingo-gr.cpp"
+#line 3178 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 142:
-#line 652 "engines/director/lingo/lingo-gr.y"
+  case 143:
+#line 634 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg));
 		endDef();
 		delete (yyvsp[-6].s); }
-#line 3201 "engines/director/lingo/lingo-gr.cpp"
+#line 3188 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143:
-#line 657 "engines/director/lingo/lingo-gr.y"
+  case 144:
+#line 639 "engines/director/lingo/lingo-gr.y"
                         { g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 3207 "engines/director/lingo/lingo-gr.cpp"
+#line 3194 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144:
-#line 658 "engines/director/lingo/lingo-gr.y"
+  case 145:
+#line 640 "engines/director/lingo/lingo-gr.y"
                   { startDef(); }
-#line 3213 "engines/director/lingo/lingo-gr.cpp"
+#line 3200 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 145:
-#line 659 "engines/director/lingo/lingo-gr.y"
+  case 146:
+#line 641 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg) + 1, &g_lingo->_currentFactory);
 		endDef();
 		delete (yyvsp[-6].s); }
-#line 3223 "engines/director/lingo/lingo-gr.cpp"
+#line 3210 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146:
-#line 664 "engines/director/lingo/lingo-gr.y"
+  case 147:
+#line 646 "engines/director/lingo/lingo-gr.y"
                                                                      {	// D3
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-7].s), (yyvsp[-6].code), (yyvsp[-5].narg));
@@ -3232,70 +3219,70 @@ yyreduce:
 		checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
 		delete (yyvsp[-7].s);
 		delete (yyvsp[-1].s); }
-#line 3236 "engines/director/lingo/lingo-gr.cpp"
+#line 3223 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 147:
-#line 672 "engines/director/lingo/lingo-gr.y"
+  case 148:
+#line 654 "engines/director/lingo/lingo-gr.y"
                                                  {	// D4. No 'end' clause
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
 		endDef();
 		delete (yyvsp[-5].s); }
-#line 3246 "engines/director/lingo/lingo-gr.cpp"
+#line 3233 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 148:
-#line 678 "engines/director/lingo/lingo-gr.y"
+  case 149:
+#line 660 "engines/director/lingo/lingo-gr.y"
          { startDef(); }
-#line 3252 "engines/director/lingo/lingo-gr.cpp"
+#line 3239 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149:
-#line 678 "engines/director/lingo/lingo-gr.y"
+  case 150:
+#line 660 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
-#line 3259 "engines/director/lingo/lingo-gr.cpp"
+#line 3246 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150:
-#line 681 "engines/director/lingo/lingo-gr.y"
+  case 151:
+#line 663 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 0; }
-#line 3265 "engines/director/lingo/lingo-gr.cpp"
+#line 3252 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151:
-#line 682 "engines/director/lingo/lingo-gr.y"
+  case 152:
+#line 664 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->codeArg((yyvsp[0].s)); mArg((yyvsp[0].s)); (yyval.narg) = 1; delete (yyvsp[0].s); }
-#line 3271 "engines/director/lingo/lingo-gr.cpp"
+#line 3258 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 152:
-#line 683 "engines/director/lingo/lingo-gr.y"
+  case 153:
+#line 665 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->codeArg((yyvsp[0].s)); mArg((yyvsp[0].s)); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
-#line 3277 "engines/director/lingo/lingo-gr.cpp"
+#line 3264 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154:
-#line 686 "engines/director/lingo/lingo-gr.y"
+  case 155:
+#line 668 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 3283 "engines/director/lingo/lingo-gr.cpp"
+#line 3270 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155:
-#line 687 "engines/director/lingo/lingo-gr.y"
+  case 156:
+#line 669 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 3289 "engines/director/lingo/lingo-gr.cpp"
+#line 3276 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156:
-#line 689 "engines/director/lingo/lingo-gr.y"
+  case 157:
+#line 671 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->codeArgStore(); inDef(); }
-#line 3295 "engines/director/lingo/lingo-gr.cpp"
+#line 3282 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157:
-#line 691 "engines/director/lingo/lingo-gr.y"
+  case 158:
+#line 673 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_call);
 		g_lingo->codeString((yyvsp[-1].s)->c_str());
@@ -3303,113 +3290,113 @@ yyreduce:
 		WRITE_UINT32(&numpar, (yyvsp[0].narg));
 		g_lingo->code1(numpar);
 		delete (yyvsp[-1].s); }
-#line 3307 "engines/director/lingo/lingo-gr.cpp"
+#line 3294 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158:
-#line 699 "engines/director/lingo/lingo-gr.y"
+  case 159:
+#line 681 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 0; }
-#line 3313 "engines/director/lingo/lingo-gr.cpp"
+#line 3300 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159:
-#line 700 "engines/director/lingo/lingo-gr.y"
+  case 160:
+#line 682 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.narg) = 1; }
-#line 3319 "engines/director/lingo/lingo-gr.cpp"
+#line 3306 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160:
-#line 701 "engines/director/lingo/lingo-gr.y"
+  case 161:
+#line 683 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3325 "engines/director/lingo/lingo-gr.cpp"
+#line 3312 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161:
-#line 703 "engines/director/lingo/lingo-gr.y"
+  case 162:
+#line 685 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3331 "engines/director/lingo/lingo-gr.cpp"
+#line 3318 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162:
-#line 704 "engines/director/lingo/lingo-gr.y"
+  case 163:
+#line 686 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3337 "engines/director/lingo/lingo-gr.cpp"
+#line 3324 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163:
-#line 706 "engines/director/lingo/lingo-gr.y"
+  case 164:
+#line 688 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = (yyvsp[-1].code); }
-#line 3343 "engines/director/lingo/lingo-gr.cpp"
+#line 3330 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164:
-#line 708 "engines/director/lingo/lingo-gr.y"
+  case 165:
+#line 690 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3349 "engines/director/lingo/lingo-gr.cpp"
+#line 3336 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165:
-#line 709 "engines/director/lingo/lingo-gr.y"
+  case 166:
+#line 691 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3355 "engines/director/lingo/lingo-gr.cpp"
+#line 3342 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166:
-#line 710 "engines/director/lingo/lingo-gr.y"
+  case 167:
+#line 692 "engines/director/lingo/lingo-gr.y"
                      { (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3361 "engines/director/lingo/lingo-gr.cpp"
+#line 3348 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167:
-#line 711 "engines/director/lingo/lingo-gr.y"
+  case 168:
+#line 693 "engines/director/lingo/lingo-gr.y"
                          { (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3367 "engines/director/lingo/lingo-gr.cpp"
+#line 3354 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168:
-#line 713 "engines/director/lingo/lingo-gr.y"
+  case 169:
+#line 695 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 3373 "engines/director/lingo/lingo-gr.cpp"
+#line 3360 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169:
-#line 714 "engines/director/lingo/lingo-gr.y"
+  case 170:
+#line 696 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3379 "engines/director/lingo/lingo-gr.cpp"
+#line 3366 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170:
-#line 716 "engines/director/lingo/lingo-gr.y"
+  case 171:
+#line 698 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 3385 "engines/director/lingo/lingo-gr.cpp"
+#line 3372 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171:
-#line 717 "engines/director/lingo/lingo-gr.y"
+  case 172:
+#line 699 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3391 "engines/director/lingo/lingo-gr.cpp"
+#line 3378 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172:
-#line 719 "engines/director/lingo/lingo-gr.y"
+  case 173:
+#line 701 "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 3400 "engines/director/lingo/lingo-gr.cpp"
+#line 3387 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 173:
-#line 723 "engines/director/lingo/lingo-gr.y"
+  case 174:
+#line 705 "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 3409 "engines/director/lingo/lingo-gr.cpp"
+#line 3396 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3413 "engines/director/lingo/lingo-gr.cpp"
+#line 3400 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3608,7 +3595,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 729 "engines/director/lingo/lingo-gr.y"
+#line 711 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 81cfd237c7..da87822ede 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -145,9 +145,9 @@ static void mArg(Common::String *s) {
 %token tSPRITE tINTERSECTS tWITHIN tTELL tPROPERTY
 %token tON tENDIF tENDREPEAT tENDTELL
 
-%type<code> asgn begin elseif end expr if when repeatwhile chunkexpr
+%type<code> asgn begin end expr if when repeatwhile chunkexpr
 %type<code> repeatwith stmtlist tellstart reference simpleexpr list valuelist
-%type<narg> argdef arglist nonemptyarglist linearlist proplist
+%type<narg> argdef arglist nonemptyarglist linearlist proplist jump jumpifz
 %type<s> on
 
 %left tAND tOR
@@ -335,57 +335,41 @@ tellstart:	  /* empty */				{
 		$$ = g_lingo->code1(LC::c_tellcode);
 		g_lingo->code1(STOP); }
 
-ifstmt: if expr end[endexpr] tTHEN stmtlist end[else1] elseifstmtlist end[end3] tENDIF {
-		inst then = 0, else1 = 0, end = 0;
-		WRITE_UINT32(&then, $endexpr - $if);
-		WRITE_UINT32(&else1, $else1 - $if);
-		WRITE_UINT32(&end, $end3 - $if);
-		(*g_lingo->_currentScript)[$if + 1] = then;	/* thenpart */
-		(*g_lingo->_currentScript)[$if + 2] = else1;/* elsepart */
-		(*g_lingo->_currentScript)[$if + 3] = end;	/* end, if cond fails */
-
-		g_lingo->processIf($if, $end3 - $if, 0); }
-	| if expr end[endexpr] tTHEN stmtlist end[else1] elseifstmtlist tELSE begin stmtlist end[end3] tENDIF {
-		inst then = 0, else1 = 0, end = 0;
-		WRITE_UINT32(&then, $endexpr - $if);
-		WRITE_UINT32(&else1, $else1 - $if);
-		WRITE_UINT32(&end, $end3 - $if);
-		(*g_lingo->_currentScript)[$if + 1] = then;	/* thenpart */
-		(*g_lingo->_currentScript)[$if + 2] = else1;/* elsepart */
-		(*g_lingo->_currentScript)[$if + 3] = end;	/* end, if cond fails */
-
-		g_lingo->processIf($if, $end3 - $if, $begin - $if); }
+ifstmt: if expr jumpifz[then] tTHEN stmtlist jump[else1] elseifstmtlist begin[end3] tENDIF {
+		inst else1 = 0, end3 = 0;
+		WRITE_UINT32(&else1, $else1 + 1);
+		WRITE_UINT32(&end3, $end3);
+		(*g_lingo->_currentScript)[$then] = else1;		/* elsepart */
+		(*g_lingo->_currentScript)[$else1] = end3;		/* end, if cond fails */
+		g_lingo->processIf($else1, $end3); }
+	| if expr jumpifz[then] tTHEN stmtlist jump[else1] elseifstmtlist tELSE begin stmtlist begin[end3] tENDIF {
+		inst else1 = 0, end = 0;
+		WRITE_UINT32(&else1, $else1 +1);
+		WRITE_UINT32(&end, $end3);
+		(*g_lingo->_currentScript)[$then] = else1;		/* elsepart */
+		(*g_lingo->_currentScript)[$else1] = end;		/* end, if cond fails */
+		g_lingo->processIf($else1, $end3); }
 
 elseifstmtlist:	/* nothing */
 	| elseifstmtlist elseifstmt
 
-elseifstmt: elseif expr end[endexpr] tTHEN stmtlist end {
-		inst then = 0;
-		WRITE_UINT32(&then, $endexpr - $elseif);
-		(*g_lingo->_currentScript)[$elseif + 1] = then;	/* thenpart */
-
-		g_lingo->codeLabel($elseif); }
-
-ifoneliner: if expr end[endexpr] tTHEN stmtoneliner end[else1] tELSE begin stmtoneliner end[end3] tENDIF {
-		inst then = 0, else1 = 0, end = 0;
-		WRITE_UINT32(&then, $endexpr - $if);
-		WRITE_UINT32(&else1, $else1 - $if);
-		WRITE_UINT32(&end, $end3 - $if);
-		(*g_lingo->_currentScript)[$if + 1] = then;	/* thenpart */
-		(*g_lingo->_currentScript)[$if + 2] = else1;/* elsepart */
-		(*g_lingo->_currentScript)[$if + 3] = end;	/* end, if cond fails */
-
-		g_lingo->processIf($if, $end3 - $if, $begin - $if); }
-	| if expr end[endexpr] tTHEN stmtoneliner end[end3] tENDIF {
-		inst then = 0, else1 = 0, end = 0;
-		WRITE_UINT32(&then, $endexpr - $if);
-		WRITE_UINT32(&else1, 0);
-		WRITE_UINT32(&end, $end3 - $if);
-		(*g_lingo->_currentScript)[$if + 1] = then;	/* thenpart */
-		(*g_lingo->_currentScript)[$if + 2] = else1;/* elsepart */
-		(*g_lingo->_currentScript)[$if + 3] = end;	/* end, if cond fails */
-
-		g_lingo->processIf($if, $end3 - $if, $end3 - $if); }
+elseifstmt: tELSIF expr jumpifz[then] tTHEN stmtlist jump[end3] {
+		inst else1 = 0;
+		WRITE_UINT32(&else1, $end3 + 1);
+		(*g_lingo->_currentScript)[$then] = else1;	/* end, if cond fails */
+		g_lingo->codeLabel($end3); }
+
+ifoneliner: if expr jumpifz[then] tTHEN stmtoneliner jump[else1] tELSE begin stmtoneliner begin[end3] tENDIF {
+		inst else1 = 0, end = 0;
+		WRITE_UINT32(&else1, $else1 + 1);
+		WRITE_UINT32(&end, $end3);
+		(*g_lingo->_currentScript)[$then] = else1;		/* elsepart */
+		(*g_lingo->_currentScript)[$else1] = end;	}	/* end, if cond fails */
+	| if expr jumpifz[then] tTHEN stmtoneliner begin[end3] tENDIF {
+		inst end = 0;
+		WRITE_UINT32(&end, $end3);
+
+		(*g_lingo->_currentScript)[$then] = end; }		/* end, if cond fails */
 
 repeatwhile:	tREPEAT tWHILE		{ $$ = g_lingo->code3(LC::c_repeatwhilecode, STOP, STOP); }
 
@@ -395,19 +379,17 @@ repeatwith:		tREPEAT tWITH ID	{
 		g_lingo->codeString($ID->c_str());
 		delete $ID; }
 
+jumpifz:	/* nothing */	{
+		g_lingo->code2(LC::c_jumpifz, STOP);
+		$$ = g_lingo->_currentScript->size() - 1; }
+
+jump:		/* nothing */	{
+		g_lingo->code2(LC::c_jump, STOP);
+		$$ = g_lingo->_currentScript->size() - 1; }
+
 if:	  tIF					{
-		$$ = g_lingo->code1(LC::c_ifcode);
-		g_lingo->code3(STOP, STOP, STOP);
-		g_lingo->code1(0);  // Do not skip end
 		g_lingo->codeLabel(0); } // Mark beginning of the if() statement
 
-elseif:	  tELSIF			{
-		inst skipEnd;
-		WRITE_UINT32(&skipEnd, 1); // We have to skip end to avoid multiple executions
-		$$ = g_lingo->code1(LC::c_ifcode);
-		g_lingo->code3(STOP, STOP, STOP);
-		g_lingo->code1(skipEnd); }
-
 begin:	  /* nothing */		{ $$ = g_lingo->_currentScript->size(); }
 
 end:	  /* nothing */		{ g_lingo->code1(STOP); $$ = g_lingo->_currentScript->size(); }
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index d5c0087161..00cb1fd26e 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -324,7 +324,7 @@ public:
 	void cleanLocalVars();
 	Symbol *define(Common::String &s, int nargs, ScriptData *code);
 	Symbol *define(Common::String &s, int start, int nargs, Common::String *prefix = NULL, int end = -1, bool removeCode = true);
-	void processIf(int elselabel, int endlabel, int finalElse);
+	void processIf(int toplabel, int endlabel);
 	int castIdFetch(Datum &var);
 	void varAssign(Datum &var, Datum &value);
 	Datum varFetch(Datum &var);


Commit: 78f616e6f8139d52fb51752c4f508bcce71dda48
    https://github.com/scummvm/scummvm/commit/78f616e6f8139d52fb51752c4f508bcce71dda48
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-05-27T01:38:24+02:00

Commit Message:
DIRECTOR: LINGO: Made compiled 'if' statement relocatable

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


diff --git a/engines/director/lingo/lingo-bytecode.cpp b/engines/director/lingo/lingo-bytecode.cpp
index d883f24e23..e0ad531967 100644
--- a/engines/director/lingo/lingo-bytecode.cpp
+++ b/engines/director/lingo/lingo-bytecode.cpp
@@ -80,9 +80,9 @@ static LingoV4Bytecode lingoV4[] = {
 	{ 0x50, LC::cb_theassign,	"b" },
 	{ 0x51, LC::cb_varassign,	"bpa" },
 	{ 0x52, LC::cb_varassign,	"bpv" },
-	{ 0x53, LC::c_jump,			"jb" },
-	{ 0x54, LC::c_jump,			"jbn" },
-	{ 0x55, LC::c_jumpifz,		"jb" },
+	{ 0x53, LC::cb_jump,		"jb" },
+	{ 0x54, LC::cb_jump,		"jbn" },
+	{ 0x55, LC::cb_jumpifz,		"jb" },
 	{ 0x56, LC::cb_localcall,	"b" },
 	{ 0x57, LC::cb_call,		"b" },
 	{ 0x58, LC::cb_methodcall,  "b" },
@@ -112,9 +112,9 @@ static LingoV4Bytecode lingoV4[] = {
 	{ 0x90, LC::cb_theassign, 	"w" },
 	{ 0x91, LC::cb_varassign,	"wpa" },
 	{ 0x92, LC::cb_varassign,	"wpv" },
-	{ 0x93, LC::c_jump,			"jw" },
-	{ 0x94, LC::c_jump,			"jwn" },
-	{ 0x95, LC::c_jumpifz,		"jw" },
+	{ 0x93, LC::cb_jump,		"jw" },
+	{ 0x94, LC::cb_jump,		"jwn" },
+	{ 0x95, LC::cb_jumpifz,		"jw" },
 	{ 0x96, LC::cb_localcall,	"w" },
 	{ 0x97, LC::cb_call,		"w" },
 	{ 0x98, LC::cb_methodcall,  "w" },
@@ -323,6 +323,19 @@ void LC::cb_methodcall() {
 }
 
 
+void LC::cb_jump() {
+	uint jump = g_lingo->readInt();
+	g_lingo->_pc = jump;
+}
+
+void LC::cb_jumpifz() {
+	uint jump = g_lingo->readInt();
+	int test = g_lingo->pop().asInt();
+	if (test == 0) {
+		g_lingo->_pc = jump;
+	}
+}
+
 void LC::cb_v4assign() {
 	int op = g_lingo->readInt();
 
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index e9e3acacff..895862d5bd 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -93,8 +93,8 @@ static struct FuncDescr {
 	{ LC::c_intpush,		"c_intpush",		"i" },
 	{ LC::c_itemOf,			"c_itemOf",			"" },	// D3
 	{ LC::c_itemToOf,		"c_itemToOf",		"" },	// D3
-	{ LC::c_jump,			"c_jump",			"i" },
-	{ LC::c_jumpifz,		"c_jumpifz",		"i" },
+	{ LC::c_jump,			"c_jump",			"o" },
+	{ LC::c_jumpifz,		"c_jumpifz",		"o" },
 	{ LC::c_le,				"c_le",				"" },
 	{ LC::c_lineOf,			"c_lineOf",			"" },	// D3
 	{ LC::c_lineToOf,		"c_lineToOf",		"" },	// D3
@@ -144,6 +144,8 @@ static struct FuncDescr {
 	{ LC::cb_field,			"cb_field",			"" },
 	{ LC::cb_globalassign,	"cb_globalassign",	"N" },
 	{ LC::cb_globalpush,	"cb_globalpush",	"N" },
+	{ LC::cb_jump,			"cb_jump",			"i" },
+	{ LC::cb_jumpifz,		"cb_jumpifz",		"i" },
 	{ LC::cb_list,			"cb_list",			"" },
 	{ LC::cb_proplist,		"cb_proplist",		"" },
 	{ LC::cb_localcall,		"cb_localcall",		"i" },
@@ -1151,15 +1153,15 @@ void LC::c_le() {
 }
 
 void LC::c_jump() {
-	uint jump = g_lingo->readInt();
-	g_lingo->_pc = jump;
+	int jump = g_lingo->readInt();
+	g_lingo->_pc = g_lingo->_pc + jump - 2;
 }
 
 void LC::c_jumpifz() {
-	uint jump = g_lingo->readInt();
+	int jump = g_lingo->readInt();
 	int test = g_lingo->pop().asInt();
 	if (test == 0) {
-		g_lingo->_pc = jump;
+		g_lingo->_pc = g_lingo->_pc + jump - 2;
 	}
 }
 
diff --git a/engines/director/lingo/lingo-code.h b/engines/director/lingo/lingo-code.h
index 1ee29385b9..926e937065 100644
--- a/engines/director/lingo/lingo-code.h
+++ b/engines/director/lingo/lingo-code.h
@@ -171,6 +171,8 @@ namespace LC {
 	void cb_v4theentitynamepush();
 	void cb_v4theentityassign();
 	void cb_zeropush();
+	void cb_jump();
+	void cb_jumpifz();
 
 } // End of namespace LC
 
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index abc98887c8..1809322ca0 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -472,8 +472,6 @@ void Lingo::processIf(int toplabel, int endlabel) {
 
 	debugC(4, kDebugLingoCompile, "processIf(%d, %d)", toplabel, endlabel);
 
-	WRITE_UINT32(&iend, endlabel);
-
 	while (true) {
 		if (_labelstack.empty()) {
 			warning("Lingo::processIf(): Label stack underflow");
@@ -489,6 +487,8 @@ void Lingo::processIf(int toplabel, int endlabel) {
 
 		debugC(4, kDebugLingoCompile, "processIf: label at %d", label);
 
+		WRITE_UINT32(&iend, endlabel - label + 1);
+
 		(*_currentScript)[label] = iend;      /* end, if cond fails */
 	}
 }
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 6ab25af009..f6da07363b 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -2483,8 +2483,8 @@ yyreduce:
 #line 338 "engines/director/lingo/lingo-gr.y"
                                                                                            {
 		inst else1 = 0, end3 = 0;
-		WRITE_UINT32(&else1, (yyvsp[-3].narg) + 1);
-		WRITE_UINT32(&end3, (yyvsp[-1].code));
+		WRITE_UINT32(&else1, (yyvsp[-3].narg) + 1 - (yyvsp[-6].narg) + 1);
+		WRITE_UINT32(&end3, (yyvsp[-1].code) - (yyvsp[-3].narg) + 1);
 		(*g_lingo->_currentScript)[(yyvsp[-6].narg)] = else1;		/* elsepart */
 		(*g_lingo->_currentScript)[(yyvsp[-3].narg)] = end3;		/* end, if cond fails */
 		g_lingo->processIf((yyvsp[-3].narg), (yyvsp[-1].code)); }
@@ -2495,8 +2495,8 @@ yyreduce:
 #line 345 "engines/director/lingo/lingo-gr.y"
                                                                                                                   {
 		inst else1 = 0, end = 0;
-		WRITE_UINT32(&else1, (yyvsp[-6].narg) +1);
-		WRITE_UINT32(&end, (yyvsp[-1].code));
+		WRITE_UINT32(&else1, (yyvsp[-6].narg) + 1 - (yyvsp[-9].narg) + 1);
+		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-6].narg) + 1);
 		(*g_lingo->_currentScript)[(yyvsp[-9].narg)] = else1;		/* elsepart */
 		(*g_lingo->_currentScript)[(yyvsp[-6].narg)] = end;		/* end, if cond fails */
 		g_lingo->processIf((yyvsp[-6].narg), (yyvsp[-1].code)); }
@@ -2507,7 +2507,7 @@ yyreduce:
 #line 356 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		inst else1 = 0;
-		WRITE_UINT32(&else1, (yyvsp[0].narg) + 1);
+		WRITE_UINT32(&else1, (yyvsp[0].narg) + 1 - (yyvsp[-3].narg) + 1);
 		(*g_lingo->_currentScript)[(yyvsp[-3].narg)] = else1;	/* end, if cond fails */
 		g_lingo->codeLabel((yyvsp[0].narg)); }
 #line 2514 "engines/director/lingo/lingo-gr.cpp"
@@ -2517,8 +2517,8 @@ yyreduce:
 #line 362 "engines/director/lingo/lingo-gr.y"
                                                                                                              {
 		inst else1 = 0, end = 0;
-		WRITE_UINT32(&else1, (yyvsp[-5].narg) + 1);
-		WRITE_UINT32(&end, (yyvsp[-1].code));
+		WRITE_UINT32(&else1, (yyvsp[-5].narg) + 1 - (yyvsp[-8].narg) + 1);
+		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-5].narg) + 1);
 		(*g_lingo->_currentScript)[(yyvsp[-8].narg)] = else1;		/* elsepart */
 		(*g_lingo->_currentScript)[(yyvsp[-5].narg)] = end;	}
 #line 2525 "engines/director/lingo/lingo-gr.cpp"
@@ -2528,7 +2528,7 @@ yyreduce:
 #line 368 "engines/director/lingo/lingo-gr.y"
                                                                       {
 		inst end = 0;
-		WRITE_UINT32(&end, (yyvsp[-1].code));
+		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-4].narg) + 1);
 
 		(*g_lingo->_currentScript)[(yyvsp[-4].narg)] = end; }
 #line 2535 "engines/director/lingo/lingo-gr.cpp"
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index da87822ede..f501badf3c 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -337,15 +337,15 @@ tellstart:	  /* empty */				{
 
 ifstmt: if expr jumpifz[then] tTHEN stmtlist jump[else1] elseifstmtlist begin[end3] tENDIF {
 		inst else1 = 0, end3 = 0;
-		WRITE_UINT32(&else1, $else1 + 1);
-		WRITE_UINT32(&end3, $end3);
+		WRITE_UINT32(&else1, $else1 + 1 - $then + 1);
+		WRITE_UINT32(&end3, $end3 - $else1 + 1);
 		(*g_lingo->_currentScript)[$then] = else1;		/* elsepart */
 		(*g_lingo->_currentScript)[$else1] = end3;		/* end, if cond fails */
 		g_lingo->processIf($else1, $end3); }
 	| if expr jumpifz[then] tTHEN stmtlist jump[else1] elseifstmtlist tELSE begin stmtlist begin[end3] tENDIF {
 		inst else1 = 0, end = 0;
-		WRITE_UINT32(&else1, $else1 +1);
-		WRITE_UINT32(&end, $end3);
+		WRITE_UINT32(&else1, $else1 + 1 - $then + 1);
+		WRITE_UINT32(&end, $end3 - $else1 + 1);
 		(*g_lingo->_currentScript)[$then] = else1;		/* elsepart */
 		(*g_lingo->_currentScript)[$else1] = end;		/* end, if cond fails */
 		g_lingo->processIf($else1, $end3); }
@@ -355,19 +355,19 @@ elseifstmtlist:	/* nothing */
 
 elseifstmt: tELSIF expr jumpifz[then] tTHEN stmtlist jump[end3] {
 		inst else1 = 0;
-		WRITE_UINT32(&else1, $end3 + 1);
+		WRITE_UINT32(&else1, $end3 + 1 - $then + 1);
 		(*g_lingo->_currentScript)[$then] = else1;	/* end, if cond fails */
 		g_lingo->codeLabel($end3); }
 
 ifoneliner: if expr jumpifz[then] tTHEN stmtoneliner jump[else1] tELSE begin stmtoneliner begin[end3] tENDIF {
 		inst else1 = 0, end = 0;
-		WRITE_UINT32(&else1, $else1 + 1);
-		WRITE_UINT32(&end, $end3);
+		WRITE_UINT32(&else1, $else1 + 1 - $then + 1);
+		WRITE_UINT32(&end, $end3 - $else1 + 1);
 		(*g_lingo->_currentScript)[$then] = else1;		/* elsepart */
 		(*g_lingo->_currentScript)[$else1] = end;	}	/* end, if cond fails */
 	| if expr jumpifz[then] tTHEN stmtoneliner begin[end3] tENDIF {
 		inst end = 0;
-		WRITE_UINT32(&end, $end3);
+		WRITE_UINT32(&end, $end3 - $then + 1);
 
 		(*g_lingo->_currentScript)[$then] = end; }		/* end, if cond fails */
 




More information about the Scummvm-git-logs mailing list