[Scummvm-git-logs] scummvm master -> e58c21d0f3f8eadf0fae192f12127e7dfe25043d

sev- sev at scummvm.org
Tue May 19 23:28:24 UTC 2020


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

Summary:
b87e0a3700 DIRECTOR: LINGO: Instances may also have clashing names
23270cd4e1 DIRECTOR: LINGO: Compactify code
1ecd174a62 JANITORIAL: Tidy up grammar code alignment
4fe97f71bc DIRECTOR: LINGO: Mark beginning and end of method definition state
bba8e2b9a0 DIRECTOR: LINGO: Store all method local vars/args into a hahsmap
271ccbcab4 DIRECTOR: LINGO: Use literals instead of number references in grammar
985371e3d0 DIRECTOR: LINGO: Make parser aware of local variables
e58c21d0f3 DIRECTOR: LINGO: Fix bug with 'end' lexing


Commit: b87e0a3700300ac3a0d1a7df4fdacbd059a716d1
    https://github.com/scummvm/scummvm/commit/b87e0a3700300ac3a0d1a7df4fdacbd059a716d1
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-05-20T01:28:02+02:00

Commit Message:
DIRECTOR: LINGO: Instances may also have clashing names

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


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index b89389087a..e0dc034366 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.6.1.  */
+/* A Bison parser, made by GNU Bison 3.6.2.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
@@ -49,7 +49,7 @@
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.6.1"
+#define YYBISON_VERSION "3.6.2"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -409,30 +409,31 @@ enum yysymbol_kind_t
   YYSYMBOL_proc = 128,                     /* proc  */
   YYSYMBOL_129_1 = 129,                    /* $@1  */
   YYSYMBOL_130_2 = 130,                    /* $@2  */
-  YYSYMBOL_globallist = 131,               /* globallist  */
-  YYSYMBOL_propertylist = 132,             /* propertylist  */
-  YYSYMBOL_instancelist = 133,             /* instancelist  */
-  YYSYMBOL_gotofunc = 134,                 /* gotofunc  */
-  YYSYMBOL_gotomovie = 135,                /* gotomovie  */
-  YYSYMBOL_playfunc = 136,                 /* playfunc  */
-  YYSYMBOL_137_3 = 137,                    /* $@3  */
-  YYSYMBOL_defn = 138,                     /* defn  */
-  YYSYMBOL_139_4 = 139,                    /* $@4  */
+  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_on = 142,                       /* on  */
-  YYSYMBOL_143_7 = 143,                    /* $@7  */
-  YYSYMBOL_argdef = 144,                   /* argdef  */
-  YYSYMBOL_endargdef = 145,                /* endargdef  */
-  YYSYMBOL_argstore = 146,                 /* argstore  */
-  YYSYMBOL_macro = 147,                    /* macro  */
-  YYSYMBOL_arglist = 148,                  /* arglist  */
-  YYSYMBOL_nonemptyarglist = 149,          /* nonemptyarglist  */
-  YYSYMBOL_list = 150,                     /* list  */
-  YYSYMBOL_valuelist = 151,                /* valuelist  */
-  YYSYMBOL_linearlist = 152,               /* linearlist  */
-  YYSYMBOL_proplist = 153,                 /* proplist  */
-  YYSYMBOL_proppair = 154                  /* proppair  */
+  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  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -740,18 +741,18 @@ union yyalloc
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  129
+#define YYFINAL  128
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2363
+#define YYLAST   2356
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  104
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  51
+#define YYNNTS  52
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  172
+#define YYNRULES  173
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  377
+#define YYNSTATES  378
 
 #define YYMAXUTOK   343
 
@@ -805,7 +806,7 @@ static const yytype_int8 yytranslate[] =
 };
 
 #if YYDEBUG
-  /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
+  /* YYRLINEYYN -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
        0,   144,   144,   145,   147,   148,   149,   151,   157,   161,
@@ -819,13 +820,13 @@ static const yytype_int16 yyrline[] =
      481,   482,   483,   484,   485,   486,   487,   488,   489,   490,
      491,   492,   493,   494,   495,   496,   498,   499,   500,   501,
      502,   503,   504,   505,   507,   510,   512,   513,   514,   515,
-     516,   517,   517,   518,   518,   519,   520,   523,   526,   527,
-     529,   533,   538,   542,   547,   551,   563,   564,   565,   566,
-     570,   574,   579,   580,   582,   586,   590,   594,   594,   624,
-     624,   624,   631,   632,   632,   639,   649,   657,   657,   659,
-     660,   661,   663,   664,   665,   667,   669,   677,   678,   679,
-     681,   682,   684,   686,   687,   688,   689,   691,   692,   694,
-     695,   697,   701
+     516,   517,   517,   518,   518,   519,   519,   520,   523,   526,
+     527,   529,   533,   538,   542,   547,   551,   563,   564,   565,
+     566,   570,   574,   579,   580,   582,   586,   590,   594,   594,
+     624,   624,   624,   631,   632,   632,   639,   649,   657,   657,
+     659,   660,   661,   663,   664,   665,   667,   669,   677,   678,
+     679,   681,   682,   684,   686,   687,   688,   689,   691,   692,
+     694,   695,   697,   701
 };
 #endif
 
@@ -861,9 +862,9 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   "stmtonelinerwithif", "stmt", "tellstart", "ifstmt", "elseifstmtlist",
   "elseifstmt", "ifoneliner", "repeatwhile", "repeatwith", "if", "elseif",
   "begin", "end", "stmtlist", "when", "simpleexpr", "expr", "chunkexpr",
-  "reference", "proc", "$@1", "$@2", "globallist", "propertylist",
-  "instancelist", "gotofunc", "gotomovie", "playfunc", "$@3", "defn",
-  "$@4", "$@5", "$@6", "on", "$@7", "argdef", "endargdef", "argstore",
+  "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
   };
@@ -890,580 +891,575 @@ static const yytype_int16 yytoknum[] =
 };
 #endif
 
-#define YYPACT_NINF (-275)
+#define YYPACT_NINF (-278)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF (-164)
+#define YYTABLE_NINF (-165)
 
 #define yytable_value_is_error(Yyn) \
   0
 
-  /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+  /* YYPACTSTATE-NUM -- Index in YYTABLE of the portion describing
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     783,   -77,  -275,  -275,    31,  -275,   605,   321,    31,   -15,
-     506,  -275,  -275,  -275,  -275,  -275,  -275,     4,  -275,  1630,
-    -275,  -275,    10,  1786,    -7,    92,    39,    44,  1868,  1667,
-      50,  1868,  1868,  1868,  1868,  1868,  1868,  1868,  -275,  -275,
-    1868,  1868,  1868,   416,    81,     0,  -275,  -275,  -275,  -275,
-    1868,   -26,  1868,  1466,  -275,  2255,  -275,  -275,  -275,  -275,
-    -275,  -275,  -275,  -275,  -275,  -275,  -275,  -275,    19,  1786,
-    1749,  2255,    26,  1749,    26,  -275,    31,  1749,  2255,    28,
-     694,  -275,  -275,    77,  -275,  1868,  -275,    60,  -275,   408,
-    -275,   104,  -275,   108,   153,   126,  -275,   -47,    31,    31,
-     -14,    59,   103,  -275,  2152,   408,  -275,  -275,    58,  -275,
-    1860,  1908,  1941,  1974,  2222,  2139,   133,   134,  -275,  -275,
-    2185,    61,    62,  -275,  2255,    64,    63,    69,  -275,  -275,
-     783,  2255,  -275,  -275,  2255,  -275,  -275,  1868,  2255,  -275,
-    -275,  1868,  1868,  1868,  1868,  1868,  1868,  1868,  1868,  1868,
-    1868,  1868,  1868,  1868,  1868,  1868,  1868,  1868,   136,  1749,
-     153,  2185,    20,  1868,    22,  -275,    24,  1868,    26,   136,
-    -275,    70,  2255,  1868,  -275,  -275,    31,    17,  1868,  1868,
-    -275,  1868,  1868,     8,   129,  1868,  1868,  1868,  -275,  1868,
-    -275,   148,  1868,  1868,  1868,  1868,  1868,  1868,  1868,  1868,
-    1868,  1868,  -275,  -275,  -275,    78,  -275,  -275,    31,    31,
-    -275,  1868,    87,  -275,  -275,  1868,  1868,   131,  -275,  2255,
-       7,     7,     7,     7,  2268,  2268,  -275,    -4,     7,     7,
-       7,     7,    -4,    13,    13,  -275,  -275,  -275,   -76,  -275,
-    2255,  -275,  -275,  2255,   -28,   159,  2255,  -275,   154,  -275,
-    -275,  2255,  2255,  2255,     7,  1868,  1868,   172,  2255,     7,
-    2255,  2255,  -275,  2255,  2007,  2255,  2040,  2255,  2073,  2255,
-    2106,  2255,  2255,  1548,  -275,   173,  -275,  -275,  2255,    61,
-      62,  -275,  1210,  2255,  2255,  -275,   147,  -275,   175,  -275,
-    -275,   136,  1868,  2255,     7,    31,  1868,  1868,  1868,  1868,
-    -275,  1295,  -275,  -275,  -275,   115,  -275,   -16,  1124,  1548,
-    -275,  -275,  -275,    15,  2255,   149,  2255,  2255,  2255,  2255,
-    -275,   116,  -275,  1210,   152,  1868,  -275,  -275,   869,   954,
-    -275,  1868,  -275,   120,  1868,  2255,   118,   -27,   182,  -275,
-    2255,  -275,  2255,  -275,  -275,  -275,  -275,  1868,   125,  -275,
-    -275,  -275,   112,  1039,  -275,  1210,  -275,  2255,  -275,  1548,
-     187,  1210,   135,  1380,   176,  -275,  -275,   143,  -275,   145,
-    -275,   146,  -275,  -275,  1124,  -275,  -275
+     776,   -86,  -278,  -278,    69,  -278,   598,   314,    69,   -29,
+     499,  -278,  -278,  -278,  -278,  -278,  -278,   -30,  -278,  1623,
+    -278,  -278,   -10,  1779,    43,   136,    47,    61,  1861,  1660,
+    -278,  1861,  1861,  1861,  1861,  1861,  1861,  1861,  -278,  -278,
+    1861,  1861,  1861,   409,    50,    -8,  -278,  -278,  -278,  -278,
+    1861,   -27,  1861,  1459,  -278,  2248,  -278,  -278,  -278,  -278,
+    -278,  -278,  -278,  -278,  -278,  -278,  -278,  -278,    -7,  1779,
+    1742,  2248,    14,  1742,    14,  -278,    69,  1742,  2248,    20,
+     687,  -278,  -278,    95,  -278,  1861,  -278,    76,  -278,   401,
+    -278,    97,  -278,    98,   168,    99,  -278,    11,    69,    69,
+      15,    72,    74,  -278,  2145,   401,  -278,   103,  -278,  1853,
+    1901,  1934,  1967,  2215,  2132,   105,   107,  -278,  -278,  2178,
+      48,    54,  -278,  2248,    56,    59,    64,  -278,  -278,   776,
+    2248,  -278,  -278,  2248,  -278,  -278,  1861,  2248,  -278,  -278,
+    1861,  1861,  1861,  1861,  1861,  1861,  1861,  1861,  1861,  1861,
+    1861,  1861,  1861,  1861,  1861,  1861,  1861,   135,  1742,   168,
+    2178,     2,  1861,     8,  -278,    10,  1861,    14,   135,  -278,
+      65,  2248,  1861,  -278,  -278,    69,   -17,  1861,  1861,  -278,
+    1861,  1861,    27,   125,  1861,  1861,  1861,  -278,  1861,  -278,
+    -278,    77,  1861,  1861,  1861,  1861,  1861,  1861,  1861,  1861,
+    1861,  1861,  -278,  -278,  -278,    83,  -278,  -278,    69,    69,
+    -278,  1861,    -9,  -278,  -278,  1861,  1861,   123,  -278,  2248,
+      24,    24,    24,    24,  2261,  2261,  -278,   -37,    24,    24,
+      24,    24,   -37,   -46,   -46,  -278,  -278,  -278,   -55,  -278,
+    2248,  -278,  -278,  2248,   -25,   158,  2248,  -278,   142,  -278,
+    -278,  2248,  2248,  2248,    24,  1861,  1861,   170,  2248,    24,
+    2248,  2248,   171,  2248,  2000,  2248,  2033,  2248,  2066,  2248,
+    2099,  2248,  2248,  1541,  -278,   172,  -278,  -278,  2248,    48,
+      54,  -278,  1203,  2248,  2248,  -278,   146,  -278,   174,  -278,
+    -278,   135,  1861,  2248,    24,    69,  -278,  1861,  1861,  1861,
+    1861,  -278,  1288,  -278,  -278,  -278,   114,  -278,    -3,  1117,
+    1541,  -278,  -278,  -278,   -12,  2248,   148,  2248,  2248,  2248,
+    2248,  -278,   115,  -278,  1203,   150,  1861,  -278,  -278,   862,
+     947,  -278,  1861,  -278,   119,  1861,  2248,    75,   -20,   181,
+    -278,  2248,  -278,  2248,  -278,  -278,  -278,  -278,  1861,   122,
+    -278,  -278,  -278,   112,  1032,  -278,  1203,  -278,  2248,  -278,
+    1541,   187,  1203,   129,  1373,   164,  -278,  -278,   131,  -278,
+     133,  -278,   134,  -278,  -278,  1117,  -278,  -278
 };
 
-  /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+  /* YYDEFACTSTATE-NUM -- Default reduction number in state STATE-NUM.
      Performed when YYTABLE does not specify something else to do.  Zero
      means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
        0,     0,    55,    60,     0,    56,     0,     0,     0,     0,
-       0,    58,    57,   137,   143,    71,    72,   110,   111,     0,
-      47,   139,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   113,   147,
+       0,    58,    57,   138,   144,    71,    72,   110,   111,     0,
+      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,   158,   117,     0,    67,   104,     0,     0,   160,   156,
-       0,    49,   109,     0,   126,     0,   127,     0,   128,   129,
-     131,     0,    33,     0,   106,     0,    45,     0,     0,     0,
-       0,     0,     0,   142,   119,   134,   136,   124,   115,    87,
-       0,     0,     0,     0,     0,     0,     0,     0,    92,    93,
-       0,    58,    57,   164,   167,     0,   165,   166,   169,     1,
-       0,    50,    49,    49,    50,    50,    26,     0,    24,    25,
-      23,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   149,     0,
-       0,   158,     0,     0,     0,    69,     0,     0,   138,   149,
-     120,   112,   133,     0,   130,   140,     0,     0,     0,     0,
-      46,     0,     0,     0,     0,     0,     0,     0,    54,     0,
-     135,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    37,    37,   122,   114,   148,    61,     0,     0,
-     162,     0,     0,     3,    51,     0,     0,     0,    34,    50,
+       0,   159,   118,     0,    67,   104,     0,     0,   161,   157,
+       0,    49,   109,     0,   127,     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,     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,   150,     0,   116,
-     159,    66,    68,   161,     0,     0,   132,    49,     0,     7,
+      80,    79,    88,    74,    75,    76,    77,   151,     0,   117,
+     160,    66,    68,   162,     0,     0,   133,    49,     0,     7,
        8,    10,    11,    15,    13,     0,     0,     0,    14,    12,
-      19,   118,   125,    96,     0,    98,     0,   100,     0,   102,
-       0,    94,    95,     0,    51,     0,   172,   171,   168,     0,
-       0,   170,     0,    50,    50,    51,     0,   155,     0,   155,
-     121,   149,     0,    16,    17,     0,     0,     0,     0,     0,
-      50,     0,   123,    52,    53,     0,    51,     0,     0,     0,
-      51,   151,    51,     0,     9,     0,    97,    99,   101,   103,
-      36,     0,    29,     0,     0,     0,    40,    50,     0,     0,
-     155,     0,    35,     0,     0,    50,    50,     0,   152,    51,
-      18,    32,    50,    51,    49,    48,    41,     0,     0,    49,
-      44,   153,   145,     0,    51,     0,    51,    50,    38,     0,
-       0,     0,     0,     0,     0,    50,   154,     0,    30,     0,
-      51,     0,    31,    39,     0,    43,    42
+      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
 };
 
-  /* YYPGOTO[NTERM-NUM].  */
+  /* YYPGOTONTERM-NUM.  */
 static const yytype_int16 yypgoto[] =
 {
-    -275,   107,  -275,  -275,  -267,  -275,     3,    30,  -275,  -275,
-    -275,  -275,  -275,  -275,   185,  -275,   -79,   -48,   630,  -275,
-       6,    -6,  -275,    74,   186,  -275,  -275,  -275,  -275,  -275,
-    -275,   -21,  -275,  -275,  -275,  -275,  -275,  -275,  -275,  -275,
-    -164,  -275,  -274,   188,     5,  -275,  -275,  -275,  -275,  -275,
-      42
+    -278,    92,  -278,  -278,  -267,  -278,     3,    19,  -278,  -278,
+    -278,  -278,  -278,  -278,   176,  -278,   -79,   -56,  1233,  -278,
+       6,    -6,  -278,    49,   177,  -278,  -278,  -278,  -278,  -278,
+    -278,  -278,   -21,  -278,  -278,  -278,  -278,  -278,  -278,  -278,
+    -278,  -163,  -278,  -277,   184,    33,  -278,  -278,  -278,  -278,
+    -278,    12
 };
 
-  /* YYDEFGOTO[NTERM-NUM].  */
+  /* YYDEFGOTONTERM-NUM.  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    44,    45,    46,    47,   135,   304,   273,    49,   336,
-     346,   136,    50,    51,    52,   347,   158,   214,   282,    53,
-      54,    55,    56,    57,    58,    83,   116,   171,   205,   108,
-      59,    90,    60,    80,    61,    91,   247,    81,    62,   117,
-     238,   352,   310,    63,   166,    79,    64,   125,   126,   127,
-     128
+      -1,    44,    45,    46,    47,   134,   305,   273,    49,   337,
+     347,   135,    50,    51,    52,   348,   157,   214,   282,    53,
+      54,    55,    56,    57,    58,    83,   115,   107,   170,   205,
+     191,    59,    90,    60,    80,    61,    91,   247,    81,    62,
+     116,   238,   353,   311,    63,   165,    79,    64,   124,   125,
+     126,   127
 };
 
-  /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
+  /* YYTABLEYYPACT[STATE-NUM] -- What to do in state STATE-NUM.  If
      positive, shift that token.  If negative, reduce the rule whose
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      71,    71,   169,    48,    78,   244,   300,   181,   106,   349,
-      67,    72,    74,    89,    75,   312,   132,    94,   182,   324,
-      65,   287,   104,   105,   288,   109,   110,   111,   112,   113,
-     114,   115,     1,    76,   118,   119,   120,   124,   325,   133,
-     185,     8,   327,   249,   131,     2,   134,   138,     3,    95,
-      96,   186,     5,   215,   216,    82,   339,    66,    11,   350,
-      12,    92,   255,   160,   161,   102,   147,   161,   174,   289,
-     103,   161,   288,   256,    71,   162,   107,   147,   164,   172,
-     148,   129,   165,   147,   190,   168,   217,   218,   154,   155,
-     156,   157,   365,    32,    33,    34,    35,   130,   153,   154,
-     155,   156,   157,   170,   183,   184,   173,   156,   157,    97,
-      98,    99,   330,   187,   279,   288,   280,   159,   100,   239,
-     163,   241,   163,   242,   163,   101,   163,   313,   167,    42,
-     175,   219,    43,    48,   176,   220,   221,   222,   223,   224,
-     225,   226,   227,   228,   229,   230,   231,   232,   233,   234,
-     235,   236,   180,    71,   344,   345,   188,   240,   191,   204,
-     206,   243,   237,   211,   208,   209,   210,   246,   291,   212,
-     245,   286,   251,   252,   262,   253,   254,   257,   275,   258,
-     259,   260,   248,   261,   285,   290,   263,   264,   265,   266,
-     267,   268,   269,   270,   271,   272,   177,   292,   295,   302,
-     309,   311,   322,   331,   332,   278,   334,   341,   351,   283,
-     284,   358,   360,   366,   276,   277,   141,   142,   143,   144,
-     145,   146,   368,   147,   178,   179,   148,   149,   150,   370,
-     372,   373,   375,   274,   305,   306,   307,   213,   137,   139,
-       0,   140,   151,   152,   153,   154,   155,   156,   157,   293,
-     294,   250,   320,   321,   281,     0,     0,     0,     0,     0,
-     326,     0,     0,     0,     0,   356,     0,     0,     0,     0,
-     359,     0,     0,     0,     0,   333,     0,     0,     0,   337,
-       0,     0,     0,     0,     0,     0,   314,   343,   348,     0,
-     316,   317,   318,   319,   354,     0,     0,     0,     0,     0,
-       0,   315,     0,     0,     0,     0,     0,   362,     0,   364,
-       0,     0,     0,   367,     0,   369,     0,   371,     0,   335,
-       0,  -157,     1,     0,     0,   340,   376,     0,   342,     0,
-       0,     0,     0,     0,     0,     2,     0,     0,     3,     4,
-       0,   357,     5,  -157,     7,     8,     9,    68,    11,     0,
-      12,  -157,  -157,     0,    15,    16,  -157,  -157,  -157,  -157,
-    -157,  -157,  -157,     0,  -157,     0,     0,  -157,  -157,  -157,
-       0,    69,  -157,    25,  -157,  -157,  -157,  -157,     0,     0,
-       0,  -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,  -157,
-      31,  -157,  -157,  -157,  -157,  -157,  -157,    32,    33,    34,
-      35,    36,  -157,  -157,  -157,  -157,     0,  -157,  -157,  -157,
-    -157,  -157,  -157,    40,    41,  -157,  -157,     1,  -157,    73,
-    -157,  -157,    43,  -157,     0,     0,     0,     0,     0,     0,
-       2,     0,     0,     3,     4,     0,     0,     5,     0,     7,
-       8,     9,    68,   121,     0,   122,     0,     0,     0,    15,
-      16,     0,     0,     0,    85,     0,    87,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,    69,     0,    25,     0,
-       0,   141,   142,   143,   144,   145,   146,     0,   147,     0,
-       0,   148,   149,   150,     0,    31,     0,     0,     0,     0,
-       0,     0,    32,    33,    34,    35,    36,   151,   152,   153,
-     154,   155,   156,   157,     0,     0,   -59,     1,    40,    41,
-       0,     0,     0,     0,    42,     0,     0,    43,  -163,   123,
-       2,     0,     0,     3,     4,     0,     0,     5,   -59,     7,
-       8,     9,    68,    11,     0,    12,   -59,   -59,     0,    15,
-      16,     0,   -59,   -59,   -59,   -59,   -59,   -59,     0,     0,
-       0,     0,     0,   -59,     0,     0,    69,   -59,    25,     0,
-       0,   -59,     0,     0,     0,     0,   -59,   -59,   -59,   -59,
-     -59,   -59,   -59,   -59,   -59,    31,   -59,     0,     0,   -59,
-     -59,   -59,    32,    33,    34,    35,    36,     0,     0,   -59,
-     -59,     0,   -59,   -59,   -59,   -59,   -59,   -59,    40,    41,
-     -59,   -59,     0,   -59,    77,  -157,     1,    43,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     2,
-       0,     0,     3,     4,     0,     0,     5,  -157,     7,     8,
-       9,    68,    11,     0,    12,  -157,  -157,     0,    15,    16,
-       0,  -157,  -157,  -157,  -157,  -157,  -157,     0,     0,     0,
-       0,     0,  -157,     0,     0,    69,  -157,    25,     0,     0,
-    -157,     0,     0,     0,     0,  -157,  -157,  -157,     0,     0,
-       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
-       0,    32,    33,    34,    35,    36,     0,     0,  -157,  -157,
-       0,  -157,  -157,  -157,  -157,     1,     0,    40,    41,     0,
-       0,     0,  -157,    70,     0,  -157,    43,     0,     2,     0,
-       0,     3,     4,     0,     0,     5,  -157,     7,     8,     9,
-      68,    11,     0,    12,  -157,  -157,     0,    15,    16,     0,
-    -157,  -157,  -157,  -157,  -157,  -157,     0,     0,     0,     0,
-       0,  -157,     0,     0,    69,  -157,    25,     0,     0,  -157,
-       0,     0,     0,     0,  -157,  -157,  -157,     0,     0,     0,
-       0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
-      32,    33,    34,    35,    36,     0,     0,  -157,  -157,     0,
-    -157,  -157,  -157,    -4,     1,     0,    40,    41,     0,     0,
-       0,  -157,    42,     0,  -157,    43,     0,     2,     0,     0,
+      71,    71,   168,    48,    78,   244,   301,     8,   106,   249,
+      67,    65,   313,    89,    75,   131,   350,    94,   279,    76,
+     280,    82,   104,   105,   146,   108,   109,   110,   111,   112,
+     113,   114,   325,   146,   117,   118,   119,   123,   132,    72,
+      74,    92,   287,   328,   130,   288,   133,   137,   155,   156,
+     128,   326,   215,   216,   340,   153,   154,   155,   156,    32,
+      33,    34,    35,   159,   160,   180,   351,   160,   173,   184,
+       1,   160,   289,   102,    71,   288,   181,   217,   218,   171,
+     185,   255,   164,     2,   189,   331,     3,   103,   288,   129,
+       5,   158,   256,   366,   146,    66,    11,   147,    12,    95,
+      96,   239,   162,   161,   182,   183,   163,   241,   162,   242,
+     162,   345,   346,   167,   162,   152,   153,   154,   155,   156,
+     166,   169,   172,   174,   175,   179,   186,   187,   314,   190,
+     219,   204,    48,   206,   220,   221,   222,   223,   224,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   235,
+     236,   208,    71,    97,    98,    99,   240,   209,   210,   211,
+     243,   237,   100,   286,   212,   245,   246,    42,   291,   101,
+      43,   251,   252,   257,   253,   254,   285,   262,   258,   259,
+     260,   248,   261,   275,   290,   292,   263,   264,   265,   266,
+     267,   268,   269,   270,   271,   272,   295,   296,   303,   310,
+     312,   323,   332,   333,   335,   278,   342,   352,   359,   283,
+     284,   176,   361,   367,   276,   277,   369,   371,   373,   374,
+     376,   213,   274,     0,   281,   250,   306,   307,   308,   136,
+     138,   140,   141,   142,   143,   144,   145,   139,   146,   177,
+     178,   147,   148,   149,     0,   321,   322,     0,     0,   293,
+     294,     0,     0,   327,     0,     0,     0,   150,   151,   152,
+     153,   154,   155,   156,     0,     0,   357,     0,   334,     0,
+       0,   360,   338,     0,     0,     0,     0,     0,     0,     0,
+     344,   349,     0,     0,     0,     0,   315,   355,     0,     0,
+       0,   317,   318,   319,   320,     0,     0,     0,     0,     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,
+      68,    11,   358,    12,  -158,  -158,     0,    15,    16,  -158,
+    -158,  -158,  -158,  -158,  -158,  -158,     0,  -158,     0,     0,
+    -158,  -158,  -158,     0,    69,  -158,    25,  -158,  -158,  -158,
+    -158,     0,     0,     0,  -158,  -158,  -158,  -158,  -158,  -158,
+    -158,  -158,  -158,    31,  -158,  -158,  -158,  -158,  -158,  -158,
+      32,    33,    34,    35,    36,  -158,  -158,  -158,  -158,     0,
+    -158,  -158,  -158,  -158,  -158,  -158,    40,    41,  -158,  -158,
+       1,  -158,    73,  -158,  -158,    43,  -158,     0,     0,     0,
+       0,     0,     0,     2,     0,     0,     3,     4,     0,     0,
+       5,     0,     7,     8,     9,    68,   120,     0,   121,     0,
+       0,     0,    15,    16,     0,     0,     0,    85,     0,    87,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    69,
+       0,    25,     0,     0,   140,   141,   142,   143,   144,   145,
+       0,   146,     0,     0,   147,   148,   149,     0,    31,     0,
+       0,     0,     0,     0,     0,    32,    33,    34,    35,    36,
+     150,   151,   152,   153,   154,   155,   156,     0,     0,   -59,
+       1,    40,    41,     0,     0,     0,     0,    42,     0,     0,
+      43,  -164,   122,     2,     0,     0,     3,     4,     0,     0,
+       5,   -59,     7,     8,     9,    68,    11,     0,    12,   -59,
+     -59,     0,    15,    16,     0,   -59,   -59,   -59,   -59,   -59,
+     -59,     0,     0,     0,     0,     0,   -59,     0,     0,    69,
+     -59,    25,     0,     0,   -59,     0,     0,     0,     0,   -59,
+     -59,   -59,   -59,   -59,   -59,   -59,   -59,   -59,    31,   -59,
+       0,     0,   -59,   -59,   -59,    32,    33,    34,    35,    36,
+       0,     0,   -59,   -59,     0,   -59,   -59,   -59,   -59,   -59,
+     -59,    40,    41,   -59,   -59,     0,   -59,    77,  -158,     1,
+      43,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     2,     0,     0,     3,     4,     0,     0,     5,
+    -158,     7,     8,     9,    68,    11,     0,    12,  -158,  -158,
+       0,    15,    16,     0,  -158,  -158,  -158,  -158,  -158,  -158,
+       0,     0,     0,     0,     0,  -158,     0,     0,    69,  -158,
+      25,     0,     0,  -158,     0,     0,     0,     0,  -158,  -158,
+    -158,     0,     0,     0,     0,     0,     0,    31,     0,     0,
+       0,     0,     0,     0,    32,    33,    34,    35,    36,     0,
+       0,  -158,  -158,     0,  -158,  -158,  -158,  -158,     1,     0,
+      40,    41,     0,     0,     0,  -158,    70,     0,  -158,    43,
+       0,     2,     0,     0,     3,     4,     0,     0,     5,  -158,
+       7,     8,     9,    68,    11,     0,    12,  -158,  -158,     0,
+      15,    16,     0,  -158,  -158,  -158,  -158,  -158,  -158,     0,
+       0,     0,     0,     0,  -158,     0,     0,    69,  -158,    25,
+       0,     0,  -158,     0,     0,     0,     0,  -158,  -158,  -158,
+       0,     0,     0,     0,     0,     0,    31,     0,     0,     0,
+       0,     0,     0,    32,    33,    34,    35,    36,     0,     0,
+    -158,  -158,     0,  -158,  -158,  -158,    -4,     1,     0,    40,
+      41,     0,     0,     0,  -158,    42,     0,  -158,    43,     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,     0,     0,
+       0,    21,     0,    22,     0,     0,    23,    24,    25,     0,
+       0,    26,     0,     0,     0,    27,    28,    29,    30,     0,
+       0,     0,     0,     0,     0,    31,     0,     0,     0,     0,
+       0,     0,    32,    33,    34,    35,    36,     0,     0,    37,
+      38,    39,  -147,     1,     0,     0,     0,     0,    40,    41,
+       0,     0,     0,    -4,    42,     0,     2,    43,     0,     3,
+       4,     0,     0,     5,     6,     7,     8,     9,    10,    11,
+       0,    12,   339,    13,     0,    15,    16,     0,     0,     0,
+      17,    18,    19,    20,     0,     0,     0,     0,     0,    22,
+       0,     0,    23,    24,    25,     0,     0,    26,     0,     0,
+       0,     0,    28,    29,    30,     0,     0,     0,     0,     0,
+       0,    31,     0,     0,     0,     0,     0,     0,    32,    33,
+      34,    35,    36,     0,     0,    37,    38,  -145,     1,     0,
+       0,     0,     0,     0,    40,    41,     0,     0,     0,   304,
+      42,     2,     0,    43,     3,     4,     0,     0,     5,     6,
+       7,     8,     9,    10,    11,     0,    12,     0,    13,     0,
+      15,    16,     0,     0,     0,    17,    18,    19,    20,     0,
+       0,     0,     0,     0,    22,     0,     0,    23,    24,    25,
+       0,     0,    26,     0,     0,     0,     0,    28,    29,    30,
+       0,     0,     0,     0,     0,     0,    31,     0,     0,     0,
+       0,     0,     0,    32,    33,    34,    35,    36,     0,     0,
+      37,    38,  -142,     1,     0,     0,     0,     0,     0,    40,
+      41,     0,     0,     0,   304,    42,     2,     0,    43,     3,
+       4,     0,     0,     5,     6,     7,     8,     9,    10,    11,
+       0,    12,     0,    13,     0,    15,    16,     0,     0,     0,
+      17,    18,    19,    20,     0,     0,     0,     0,     0,    22,
+       0,     0,    23,    24,    25,     0,     0,    26,     0,     0,
+       0,     0,    28,    29,    30,     0,     0,     0,     0,     0,
+       0,    31,     0,     0,     0,     0,     0,     0,    32,    33,
+      34,    35,    36,     0,     0,    37,    38,     0,     1,     0,
+       0,     0,     0,     0,    40,    41,     0,     0,     0,   304,
+      42,     2,     0,    43,     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,     0,
+       0,     0,     0,     0,    22,     0,     0,    23,    24,    25,
+       0,     0,    26,     0,     0,     0,     0,    28,    29,    30,
+       0,     0,     0,     0,     0,     0,    31,     0,     0,     0,
+       0,     0,     0,    32,    33,    34,    35,    36,     0,     0,
+      37,    38,     0,   -50,     1,     0,     0,     0,     0,    40,
+      41,     0,     0,     0,   304,    42,     0,     2,    43,     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,     0,     0,     0,     0,     0,
+      22,     0,     0,    23,    24,    25,     0,     0,    26,     0,
+       0,     0,     0,    28,    29,    30,     0,     0,     0,     0,
+       0,     0,    31,     0,     0,     0,     0,     0,     0,    32,
+      33,    34,    35,    36,     0,     0,    37,    38,     0,     1,
+     -50,     0,     0,     0,     0,    40,    41,     0,     0,     0,
+     304,    42,     2,     0,    43,     3,     4,     0,     0,     5,
+       6,     7,     8,     9,    10,    11,     0,    12,     0,    13,
+       0,    15,    16,     0,     0,     0,    17,    18,    19,    20,
+       0,     0,     0,     0,     0,    22,     0,     0,    23,    24,
+      25,     0,     0,    26,     0,     0,     0,     0,    28,    29,
+      30,     0,     0,     0,     0,     0,     0,    31,     0,     0,
+       0,     0,     0,     0,    32,    33,    34,    35,    36,     0,
+       0,    37,    38,     0,     1,     0,   -50,     0,     0,     0,
+      40,    41,     0,     0,     0,   304,    42,     2,     0,    43,
        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,     0,     0,     0,    21,     0,
+      11,     0,    12,     0,    13,     0,    15,    16,     0,     0,
+       0,    17,    18,    19,    20,     0,     0,     0,     0,     0,
       22,     0,     0,    23,    24,    25,     0,     0,    26,     0,
-       0,     0,    27,    28,    29,    30,     0,     0,     0,     0,
+       0,     0,     0,    28,    29,    30,     0,     0,     0,     0,
        0,     0,    31,     0,     0,     0,     0,     0,     0,    32,
-      33,    34,    35,    36,     0,     0,    37,    38,    39,  -146,
+      33,    34,    35,    36,     0,     0,    37,    38,     0,   -50,
        1,     0,     0,     0,     0,    40,    41,     0,     0,     0,
-      -4,    42,     0,     2,    43,     0,     3,     4,     0,     0,
-       5,     6,     7,     8,     9,    10,    11,     0,    12,   338,
-      13,     0,    15,    16,   301,     0,     0,    17,    18,    19,
-      20,     0,     0,     0,     0,   308,    22,     0,     0,    23,
-      24,    25,     0,     0,    26,     0,     0,     0,     0,    28,
-      29,    30,     0,     0,     0,     0,   323,     0,    31,     0,
-     328,     0,   329,     0,     0,    32,    33,    34,    35,    36,
-       0,     0,    37,    38,  -144,     1,     0,     0,     0,     0,
-       0,    40,    41,     0,     0,     0,   303,    42,     2,   353,
-      43,     3,     4,   355,     0,     5,     6,     7,     8,     9,
-      10,    11,     0,    12,   361,    13,   363,    15,    16,     0,
-       0,     0,    17,    18,    19,    20,     0,     0,     0,     0,
-     374,    22,     0,     0,    23,    24,    25,     0,     0,    26,
-       0,     0,     0,     0,    28,    29,    30,     0,     0,     0,
-       0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
-      32,    33,    34,    35,    36,     0,     0,    37,    38,  -141,
-       1,     0,     0,     0,     0,     0,    40,    41,     0,     0,
-       0,   303,    42,     2,     0,    43,     3,     4,     0,     0,
+     304,    42,     0,     2,    43,     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,     0,     0,     0,     0,     0,    22,     0,     0,    23,
-      24,    25,     0,     0,    26,     0,     0,     0,     0,    28,
+      20,     0,     0,     0,     0,     0,     0,   302,     0,    23,
+       0,    25,     0,     0,     0,     0,     0,     0,   309,    28,
       29,    30,     0,     0,     0,     0,     0,     0,    31,     0,
        0,     0,     0,     0,     0,    32,    33,    34,    35,    36,
-       0,     0,    37,    38,     0,     1,     0,     0,     0,     0,
-       0,    40,    41,     0,     0,     0,   303,    42,     2,     0,
-      43,     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,     0,     0,     0,     0,
-       0,    22,     0,     0,    23,    24,    25,     0,     0,    26,
-       0,     0,     0,     0,    28,    29,    30,     0,     0,     0,
-       0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
-      32,    33,    34,    35,    36,     0,     0,    37,    38,     0,
-     -50,     1,     0,     0,     0,     0,    40,    41,     0,     0,
-       0,   303,    42,     0,     2,    43,     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,     0,     0,     0,     0,     0,    22,     0,     0,
-      23,    24,    25,     0,     0,    26,     0,     0,     0,     0,
-      28,    29,    30,     0,     0,     0,     0,     0,     0,    31,
-       0,     0,     0,     0,     0,     0,    32,    33,    34,    35,
-      36,     0,     0,    37,    38,     0,     1,   -50,     0,     0,
-       0,     0,    40,    41,     0,     0,     0,   303,    42,     2,
-       0,    43,     3,     4,     0,     0,     5,     6,     7,     8,
-       9,    10,    11,     0,    12,     0,    13,     0,    15,    16,
-       0,     0,     0,    17,    18,    19,    20,     0,     0,     0,
-       0,     0,    22,     0,     0,    23,    24,    25,     0,     0,
-      26,     0,     0,     0,     0,    28,    29,    30,     0,     0,
-       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
-       0,    32,    33,    34,    35,    36,     0,     0,    37,    38,
-       0,     1,     0,   -50,     0,     0,     0,    40,    41,     0,
-       0,     0,   303,    42,     2,     0,    43,     3,     4,     0,
-       0,     5,     6,     7,     8,     9,    10,    11,     0,    12,
-       0,    13,     0,    15,    16,     0,     0,     0,    17,    18,
-      19,    20,     0,     0,     0,     0,     0,    22,     0,     0,
-      23,    24,    25,     0,     0,    26,     0,     0,     0,     0,
-      28,    29,    30,     0,     0,     0,     0,     0,     0,    31,
-       0,     0,     0,     0,     0,     0,    32,    33,    34,    35,
-      36,     0,     0,    37,    38,     0,   -50,     1,     0,     0,
-       0,     0,    40,    41,     0,     0,     0,   303,    42,     0,
-       2,    43,     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,     0,     0,
-       0,     0,     0,     0,     0,     0,    23,     0,    25,     0,
-       0,     0,     0,     0,     0,     0,    28,    29,    30,     0,
-       0,     0,     0,     0,     0,    31,     0,     0,     0,     0,
-       0,     0,    32,    33,    34,    35,    36,     0,     0,     1,
-      38,     0,     0,     0,     0,     0,     0,     0,    40,    41,
-       0,     0,     2,     0,    42,     3,     4,    43,     0,     5,
-       6,     7,     8,     9,    10,    11,     0,    12,     0,    13,
-       0,    15,    16,     0,     0,     0,    17,    18,    19,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    23,     0,
-      25,     0,     0,     0,     0,     0,     0,     0,    28,    29,
-      30,     0,     0,     0,     0,     0,     0,    31,     0,     0,
-       0,     0,     0,     0,    32,    33,    34,    35,    36,     0,
-       0,     1,    38,     0,     0,     0,     0,     0,     0,     0,
-      40,    41,     0,     0,     2,     0,    42,     3,     4,    43,
+     324,     0,     1,    38,   329,     0,   330,     0,     0,     0,
+       0,    40,    41,     0,     0,     2,     0,    42,     3,     4,
+      43,     0,     5,     6,     7,     8,     9,    10,    11,     0,
+      12,     0,    13,   354,    15,    16,     0,   356,     0,    17,
+      18,    19,     0,     0,     0,     0,     0,     0,   362,     0,
+     364,    23,     0,    25,     0,     0,     0,     0,     0,     0,
+       0,    28,    29,    30,   375,     0,     0,     0,     0,     0,
+      31,     0,     0,     0,     0,     0,     0,    32,    33,    34,
+      35,    36,     0,     0,     1,    38,     0,     0,     0,     0,
+       0,     0,     0,    40,    41,     0,     0,     2,     0,    42,
+       3,     4,    43,     0,     5,     0,     7,     8,     9,    68,
+      11,     0,    12,     0,     0,     0,    15,    16,     0,     0,
+       0,     1,     0,     0,     0,     0,     0,    84,     0,    85,
+      86,    87,    88,    69,     2,    25,     0,     3,     4,     0,
        0,     5,     0,     7,     8,     9,    68,    11,     0,    12,
-       0,     0,     0,    15,    16,     0,     0,     0,     1,     0,
-       0,     0,     0,     0,    84,     0,    85,    86,    87,    88,
-      69,     2,    25,     0,     3,     4,     0,     0,     5,     0,
-       7,     8,     9,    68,    11,     0,    12,     0,     0,    31,
-      15,    16,     0,     0,     0,     0,    32,    33,    34,    35,
-      36,     0,     0,    85,     0,    87,     0,    69,     0,    25,
-       0,     0,    40,    41,     0,     0,     0,     0,    42,     0,
-       0,    43,     0,     0,     0,     0,    31,     0,     0,     0,
-       0,     0,     0,    32,    33,    34,    35,    36,     0,     0,
-       1,     0,     0,     0,     0,     0,     0,     0,     0,    40,
-      41,     0,     0,     2,     0,    42,     3,     4,    43,     0,
+       0,     0,    31,    15,    16,     0,     0,     0,     0,    32,
+      33,    34,    35,    36,     0,     0,    85,     0,    87,     0,
+      69,     0,    25,     0,     0,    40,    41,     0,     0,     0,
+       0,    42,     0,     0,    43,     0,     0,     0,     0,    31,
+       0,     0,     0,     0,     0,     0,    32,    33,    34,    35,
+      36,     0,     0,     1,     0,     0,     0,     0,     0,     0,
+       0,     0,    40,    41,     0,     0,     2,     0,    42,     3,
+       4,    43,     0,     5,     0,     7,     8,     9,    68,    11,
+       0,    12,     0,     0,     0,    15,    16,     0,     0,     0,
+       1,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    69,     2,    25,     0,     3,     4,     0,    93,
        5,     0,     7,     8,     9,    68,    11,     0,    12,     0,
-       0,     0,    15,    16,     0,     0,     0,     1,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    69,
-       2,    25,     0,     3,     4,     0,    93,     5,     0,     7,
-       8,     9,    68,    11,     0,    12,     0,     0,    31,    15,
-      16,     0,     0,     0,     0,    32,    33,    34,    35,    36,
-       0,     0,     0,     0,     0,     0,    69,     0,    25,     0,
-       0,    40,    41,     0,     0,     0,     0,    42,  -157,  -157,
-      43,     0,     0,     0,     0,    31,     0,     0,     0,     0,
-       0,     0,    32,    33,    34,    35,    36,     0,     0,     1,
-       0,     0,     0,     0,     0,     0,     0,     0,    40,    41,
-       0,     0,     2,     0,    42,     3,     4,    43,     0,     5,
-       0,     7,     8,     9,    68,    11,     0,    12,     0,     0,
-       0,    15,    16,     0,     0,     0,     0,     0,   192,     0,
-       0,     0,     0,     0,   193,     0,     0,     0,    69,     0,
-      25,     0,     0,   141,   142,   143,   144,   145,   146,     0,
-     147,     0,     0,   148,   149,   150,     0,    31,     0,     0,
-       0,     0,     0,     0,    32,    33,    34,    35,    36,   151,
-     152,   153,   154,   155,   156,   157,   194,     0,     0,     0,
-      40,    41,   195,     0,     0,     0,    42,     0,     0,    43,
-       0,   141,   142,   143,   144,   145,   146,     0,   147,     0,
-       0,   148,   149,   150,     0,     0,     0,     0,     0,   196,
-       0,     0,     0,     0,     0,   197,     0,   151,   152,   153,
-     154,   155,   156,   157,   141,   142,   143,   144,   145,   146,
-       0,   147,     0,     0,   148,   149,   150,     0,     0,     0,
-       0,     0,   198,     0,     0,     0,     0,     0,   199,     0,
-     151,   152,   153,   154,   155,   156,   157,   141,   142,   143,
-     144,   145,   146,     0,   147,     0,     0,   148,   149,   150,
-       0,     0,     0,     0,     0,   296,     0,     0,     0,     0,
-       0,     0,     0,   151,   152,   153,   154,   155,   156,   157,
-     141,   142,   143,   144,   145,   146,     0,   147,     0,     0,
-     148,   149,   150,     0,     0,     0,     0,     0,   297,     0,
-       0,     0,     0,     0,     0,     0,   151,   152,   153,   154,
-     155,   156,   157,   141,   142,   143,   144,   145,   146,     0,
-     147,     0,     0,   148,   149,   150,     0,     0,     0,     0,
-       0,   298,     0,     0,     0,     0,     0,     0,     0,   151,
-     152,   153,   154,   155,   156,   157,   141,   142,   143,   144,
-     145,   146,     0,   147,     0,     0,   148,   149,   150,     0,
+       0,    31,    15,    16,     0,     0,     0,     0,    32,    33,
+      34,    35,    36,     0,     0,     0,     0,     0,     0,    69,
+       0,    25,     0,     0,    40,    41,     0,     0,     0,     0,
+      42,  -158,  -158,    43,     0,     0,     0,     0,    31,     0,
+       0,     0,     0,     0,     0,    32,    33,    34,    35,    36,
+       0,     0,     1,     0,     0,     0,     0,     0,     0,     0,
+       0,    40,    41,     0,     0,     2,     0,    42,     3,     4,
+      43,     0,     5,     0,     7,     8,     9,    68,    11,     0,
+      12,     0,     0,     0,    15,    16,     0,     0,     0,     0,
+       0,   192,     0,     0,     0,     0,     0,   193,     0,     0,
+       0,    69,     0,    25,     0,     0,   140,   141,   142,   143,
+     144,   145,     0,   146,     0,     0,   147,   148,   149,     0,
+      31,     0,     0,     0,     0,     0,     0,    32,    33,    34,
+      35,    36,   150,   151,   152,   153,   154,   155,   156,   194,
+       0,     0,     0,    40,    41,   195,     0,     0,     0,    42,
+       0,     0,    43,     0,   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,   146,     0,     0,
+     147,   148,   149,     0,     0,     0,     0,     0,   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,   298,     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,   299,     0,     0,     0,     0,     0,
-       0,     0,   151,   152,   153,   154,   155,   156,   157,   141,
-     142,   143,   144,   145,   146,     0,   147,     0,     0,   148,
-     149,   150,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   202,     0,   151,   152,   153,   154,   155,
-     156,   157,   141,   142,   143,   144,   145,   146,   189,   147,
-       0,     0,   148,   149,   150,   141,   142,   143,   144,   145,
-     146,     0,   147,     0,     0,   148,   149,   150,   151,   152,
-     153,   154,   155,   156,   157,     0,   203,     0,     0,     0,
-       0,   151,   152,   153,   154,   155,   156,   157,   141,   142,
-     143,   144,   145,   146,     0,   147,     0,     0,   148,   149,
-     150,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   151,   152,   153,   154,   155,   156,
-     157,     0,     0,     0,   207,   141,   142,   143,   144,   145,
-     146,     0,   147,     0,     0,   148,   149,   150,     0,     0,
-       0,     0,     0,   200,   201,     0,     0,     0,     0,     0,
-       0,   151,   152,   153,   154,   155,   156,   157,   141,   142,
-     143,   144,   145,   146,     0,   147,     0,     0,   148,   149,
-     150,   141,   142,   143,   144,     0,     0,     0,   147,     0,
-       0,   148,   149,   150,   151,   152,   153,   154,   155,   156,
-     157,     0,     0,     0,     0,     0,     0,   151,   152,   153,
-     154,   155,   156,   157
+       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,   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,    81,     0,    10,   169,   273,    54,    29,    36,
-       4,     6,     7,    19,     8,   289,    42,    23,    65,    35,
-      97,    97,    28,    29,   100,    31,    32,    33,    34,    35,
-      36,    37,     1,    48,    40,    41,    42,    43,    54,    65,
-      54,    24,   309,    26,    50,    14,    52,    53,    17,    56,
-      57,    65,    21,   132,   133,    51,   330,    26,    27,    86,
-      29,    51,    54,    69,    70,    26,    70,    73,    89,    97,
-      26,    77,   100,    65,    80,    70,    26,    70,    73,    85,
-      73,     0,    76,    70,   105,    80,   134,   135,    92,    93,
-      94,    95,   359,    76,    77,    78,    79,    97,    91,    92,
-      93,    94,    95,    26,    98,    99,    46,    94,    95,    17,
-      18,    19,    97,    54,    27,   100,    29,    98,    26,    99,
-     100,    99,   100,    99,   100,    33,   100,   291,   100,    98,
-      26,   137,   101,   130,    26,   141,   142,   143,   144,   145,
+       6,     7,    81,     0,    10,   168,   273,    24,    29,    26,
+       4,    97,   289,    19,     8,    42,    36,    23,    27,    48,
+      29,    51,    28,    29,    70,    31,    32,    33,    34,    35,
+      36,    37,    35,    70,    40,    41,    42,    43,    65,     6,
+       7,    51,    97,   310,    50,   100,    52,    53,    94,    95,
+       0,    54,   131,   132,   331,    92,    93,    94,    95,    76,
+      77,    78,    79,    69,    70,    54,    86,    73,    89,    54,
+       1,    77,    97,    26,    80,   100,    65,   133,   134,    85,
+      65,    54,    76,    14,   105,    97,    17,    26,   100,    97,
+      21,    98,    65,   360,    70,    26,    27,    73,    29,    56,
+      57,    99,   100,    70,    98,    99,    73,    99,   100,    99,
+     100,    36,    37,    80,   100,    91,    92,    93,    94,    95,
+     100,    26,    46,    26,    26,    26,    54,    53,   291,    26,
+     136,    26,   129,    26,   140,   141,   142,   143,   144,   145,
      146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,    26,   159,    36,    37,    53,   163,   100,    26,
-      26,   167,    26,   100,   103,   103,   102,   173,   247,   100,
-     100,   219,   178,   179,    26,   181,   182,    48,   100,   185,
-     186,   187,   176,   189,    53,    26,   192,   193,   194,   195,
-     196,   197,   198,   199,   200,   201,    43,    43,    26,    26,
-      53,    26,    87,    54,    88,   211,    54,    87,    26,   215,
-     216,    86,   100,    26,   208,   209,    63,    64,    65,    66,
-      67,    68,    87,    70,    71,    72,    73,    74,    75,    53,
-      87,    86,    86,   203,   282,   283,   284,   130,    53,    53,
-      -1,    53,    89,    90,    91,    92,    93,    94,    95,   255,
-     256,   177,   300,   301,   212,    -1,    -1,    -1,    -1,    -1,
-     308,    -1,    -1,    -1,    -1,   344,    -1,    -1,    -1,    -1,
-     349,    -1,    -1,    -1,    -1,   323,    -1,    -1,    -1,   327,
-      -1,    -1,    -1,    -1,    -1,    -1,   292,   335,   336,    -1,
-     296,   297,   298,   299,   342,    -1,    -1,    -1,    -1,    -1,
-      -1,   295,    -1,    -1,    -1,    -1,    -1,   355,    -1,   357,
-      -1,    -1,    -1,   361,    -1,   363,    -1,   365,    -1,   325,
-      -1,     0,     1,    -1,    -1,   331,   374,    -1,   334,    -1,
-      -1,    -1,    -1,    -1,    -1,    14,    -1,    -1,    17,    18,
-      -1,   347,    21,    22,    23,    24,    25,    26,    27,    -1,
-      29,    30,    31,    -1,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,    -1,    43,    -1,    -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,    -1,    17,    18,    -1,    -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,    -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,    -1,    -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,    22,    23,    24,
-      25,    26,    27,    -1,    29,    30,    31,    -1,    33,    34,
-      -1,    36,    37,    38,    39,    40,    41,    -1,    -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,
+     156,   103,   158,    17,    18,    19,   162,   103,   102,   100,
+     166,    26,    26,   219,   100,   100,   172,    98,   247,    33,
+     101,   177,   178,    48,   180,   181,    53,   100,   184,   185,
+     186,   175,   188,   100,    26,    43,   192,   193,   194,   195,
+     196,   197,   198,   199,   200,   201,    26,    26,    26,    53,
+      26,    87,    54,    88,    54,   211,    87,    26,    86,   215,
+     216,    43,   100,    26,   208,   209,    87,    53,    87,    86,
+      86,   129,   203,    -1,   212,   176,   282,   283,   284,    53,
+      53,    63,    64,    65,    66,    67,    68,    53,    70,    71,
+      72,    73,    74,    75,    -1,   301,   302,    -1,    -1,   255,
+     256,    -1,    -1,   309,    -1,    -1,    -1,    89,    90,    91,
+      92,    93,    94,    95,    -1,    -1,   345,    -1,   324,    -1,
+      -1,   350,   328,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     336,   337,    -1,    -1,    -1,    -1,   292,   343,    -1,    -1,
+      -1,   297,   298,   299,   300,    -1,    -1,    -1,    -1,    -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,    -1,    29,    30,    31,    -1,    33,    34,    -1,
-      36,    37,    38,    39,    40,    41,    -1,    -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,
+      26,    27,   348,    29,    30,    31,    -1,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    -1,    43,    -1,    -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,    -1,    17,    18,    -1,    -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,    -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,    -1,    -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,
+      22,    23,    24,    25,    26,    27,    -1,    29,    30,    31,
+      -1,    33,    34,    -1,    36,    37,    38,    39,    40,    41,
+      -1,    -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,    30,    31,    -1,
+      33,    34,    -1,    36,    37,    38,    39,    40,    41,    -1,
+      -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,    -1,    -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,    -1,    -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,    -1,
+      -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,    -1,    -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,    -1,
+      -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,    -1,    -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,
+      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,    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,    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,    32,    33,    34,    -1,    -1,
-      -1,    38,    39,    40,    41,    -1,    -1,    -1,    45,    -1,
+      27,    -1,    29,    -1,    31,    -1,    33,    34,    -1,    -1,
+      -1,    38,    39,    40,    41,    -1,    -1,    -1,    -1,    -1,
       47,    -1,    -1,    50,    51,    52,    -1,    -1,    55,    -1,
-      -1,    -1,    59,    60,    61,    62,    -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,    85,     0,
+      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,    30,
-      31,    -1,    33,    34,   274,    -1,    -1,    38,    39,    40,
-      41,    -1,    -1,    -1,    -1,   285,    47,    -1,    -1,    50,
-      51,    52,    -1,    -1,    55,    -1,    -1,    -1,    -1,    60,
-      61,    62,    -1,    -1,    -1,    -1,   306,    -1,    69,    -1,
-     310,    -1,   312,    -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,   339,
-     101,    17,    18,   343,    -1,    21,    22,    23,    24,    25,
-      26,    27,    -1,    29,   354,    31,   356,    33,    34,    -1,
-      -1,    -1,    38,    39,    40,    41,    -1,    -1,    -1,    -1,
-     370,    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,    -1,    -1,    -1,    -1,    -1,    47,    -1,    -1,    50,
-      51,    52,    -1,    -1,    55,    -1,    -1,    -1,    -1,    60,
+      41,    -1,    -1,    -1,    -1,    -1,    -1,   274,    -1,    50,
+      -1,    52,    -1,    -1,    -1,    -1,    -1,    -1,   285,    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,    -1,    -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,    -1,    -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,    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,    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,    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,    -1,    -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,    -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,
-      22,    23,    24,    25,    26,    27,    -1,    29,    -1,    31,
-      -1,    33,    34,    -1,    -1,    -1,    38,    39,    40,    -1,
-      -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,
+     307,    -1,     1,    84,   311,    -1,   313,    -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,   340,    33,    34,    -1,   344,    -1,    38,
+      39,    40,    -1,    -1,    -1,    -1,    -1,    -1,   355,    -1,
+     357,    50,    -1,    52,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    60,    61,    62,   371,    -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,    44,    -1,    46,
+      47,    48,    49,    50,    14,    52,    -1,    17,    18,    -1,
       -1,    21,    -1,    23,    24,    25,    26,    27,    -1,    29,
-      -1,    -1,    -1,    33,    34,    -1,    -1,    -1,     1,    -1,
-      -1,    -1,    -1,    -1,    44,    -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,    -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,
+      -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,    -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,
+       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,    -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,    -1,    -1,    48,    -1,
-      -1,    -1,    -1,    -1,    54,    -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,    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,    -1,
+      -1,    48,    -1,    -1,    -1,    -1,    -1,    54,    -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,    -1,    -1,    89,    90,    91,    92,    93,    94,    95,
+      -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,
@@ -1475,28 +1471,31 @@ static const yytype_int16 yycheck[] =
       -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,    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,
+      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,    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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      75,    89,    90,    91,    92,    93,    94,    95,    -1,    97,
       -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,
+      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,    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
+      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
 };
 
-  /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+  /* YYSTOSSTATE-NUM -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
@@ -1505,42 +1504,42 @@ static const yytype_uint8 yystos[] =
       41,    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,   134,
-     136,   138,   142,   147,   150,    97,    26,   124,    26,    50,
-      98,   125,   148,    98,   148,   124,    48,    98,   125,   149,
-     137,   141,    51,   129,    44,    46,    47,    48,    49,   125,
-     135,   139,    51,    20,   125,    56,    57,    17,    18,    19,
-      26,    33,    26,    26,   125,   125,   135,    26,   133,   125,
-     125,   125,   125,   125,   125,   125,   130,   143,   125,   125,
-     125,    27,    29,   103,   125,   151,   152,   153,   154,     0,
-      97,   125,    42,    65,   125,   109,   115,   118,   125,   128,
-     147,    63,    64,    65,    66,    67,    68,    70,    73,    74,
-      75,    89,    90,    91,    92,    93,    94,    95,   120,    98,
-     125,   125,   148,   100,   148,   124,   148,   100,   148,   120,
-      26,   131,   125,    46,   135,    26,    26,    43,    71,    72,
-      26,    54,    65,   124,   124,    54,    65,    54,    53,    56,
-     135,   100,    48,    54,    48,    54,    48,    54,    48,    54,
-      81,    82,    54,    97,    26,   132,    26,    99,   103,   103,
+     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,    44,    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,    42,    65,   125,   109,   115,   118,   125,   128,   148,
+      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,    43,    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,   144,    99,
-     125,    99,    99,   125,   144,   100,   125,   140,   124,    26,
+     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,    26,   125,   125,   125,   125,   125,   125,   125,
+     125,   125,   100,   125,   125,   125,   125,   125,   125,   125,
      125,   125,   125,   111,   111,   100,   124,   124,   125,    27,
-      29,   154,   122,   125,   125,    53,   121,    97,   100,    97,
-      26,   120,    43,   125,   125,    26,    48,    48,    48,    48,
-     108,   122,    26,    97,   110,   121,   121,   121,   122,    53,
-     146,    26,   146,   144,   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,   146,
-     125,    87,   125,   121,    36,    37,   114,   119,   121,    36,
-      86,    26,   145,   122,   121,   122,   120,   125,    86,   120,
-     100,   122,   121,   122,   121,   108,    26,   121,    87,   121,
-      53,   121,    87,    86,   122,    86,   121
+      29,   155,   122,   125,   125,    53,   121,    97,   100,    97,
+      26,   120,    43,   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
 };
 
-  /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+  /* YYR1YYN -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
        0,   104,   105,   105,   106,   106,   106,   107,   107,   107,
@@ -1554,16 +1553,16 @@ static const yytype_uint8 yyr1[] =
      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,   128,   128,   128,   128,   128,
-     131,   131,   132,   132,   133,   133,   134,   134,   134,   134,
-     134,   134,   135,   135,   136,   136,   136,   137,   136,   139,
-     140,   138,   138,   141,   138,   138,   138,   143,   142,   144,
-     144,   144,   145,   145,   145,   146,   147,   148,   148,   148,
-     149,   149,   150,   151,   151,   151,   151,   152,   152,   153,
-     153,   154,   154
+     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
 };
 
-  /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
+  /* YYR2YYN -- Number of symbols on the right hand side of rule YYN.  */
 static const yytype_int8 yyr2[] =
 {
        0,     2,     1,     3,     0,     1,     1,     4,     4,     6,
@@ -1577,13 +1576,13 @@ static const yytype_int8 yyr2[] =
        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,     2,     4,     2,     4,     2,
-       1,     3,     1,     3,     1,     3,     2,     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
+       1,     0,     3,     0,     3,     0,     3,     4,     2,     4,
+       2,     1,     3,     1,     3,     1,     3,     2,     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
 };
 
 
@@ -1857,79 +1856,79 @@ yydestruct (const char *yymsg,
     case 22: /* BLTIN  */
 #line 139 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1861 "engines/director/lingo/lingo-gr.cpp"
+#line 1860 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 23: /* FBLTIN  */
 #line 139 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1867 "engines/director/lingo/lingo-gr.cpp"
+#line 1866 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 24: /* RBLTIN  */
 #line 139 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1873 "engines/director/lingo/lingo-gr.cpp"
+#line 1872 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 25: /* THEFBLTIN  */
 #line 139 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1879 "engines/director/lingo/lingo-gr.cpp"
+#line 1878 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 26: /* ID  */
 #line 139 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1885 "engines/director/lingo/lingo-gr.cpp"
+#line 1884 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 27: /* STRING  */
 #line 139 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1891 "engines/director/lingo/lingo-gr.cpp"
+#line 1890 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 28: /* HANDLER  */
 #line 139 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1897 "engines/director/lingo/lingo-gr.cpp"
+#line 1896 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 29: /* SYMBOL  */
 #line 139 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1903 "engines/director/lingo/lingo-gr.cpp"
+#line 1902 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 30: /* ENDCLAUSE  */
 #line 139 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1909 "engines/director/lingo/lingo-gr.cpp"
+#line 1908 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 31: /* tPLAYACCEL  */
 #line 139 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1915 "engines/director/lingo/lingo-gr.cpp"
+#line 1914 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 32: /* tMETHOD  */
 #line 139 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1921 "engines/director/lingo/lingo-gr.cpp"
+#line 1920 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 33: /* THEOBJECTFIELD  */
 #line 140 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).objectfield).os; }
-#line 1927 "engines/director/lingo/lingo-gr.cpp"
+#line 1926 "engines/director/lingo/lingo-gr.cpp"
         break;
 
-    case 142: /* on  */
+    case 143: /* on  */
 #line 139 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1933 "engines/director/lingo/lingo-gr.cpp"
+#line 1932 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2215,7 +2214,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code);
 		delete (yyvsp[0].s); }
-#line 2219 "engines/director/lingo/lingo-gr.cpp"
+#line 2218 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 8:
@@ -2223,7 +2222,7 @@ yyreduce:
                                                 {
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code); }
-#line 2227 "engines/director/lingo/lingo-gr.cpp"
+#line 2226 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 9:
@@ -2239,19 +2238,19 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-4].e)[1]);
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2243 "engines/director/lingo/lingo-gr.cpp"
+#line 2242 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10:
 #line 172 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code1(LC::c_after); }
-#line 2249 "engines/director/lingo/lingo-gr.cpp"
+#line 2248 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11:
 #line 173 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code1(LC::c_before); }
-#line 2255 "engines/director/lingo/lingo-gr.cpp"
+#line 2254 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12:
@@ -2262,7 +2261,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2266 "engines/director/lingo/lingo-gr.cpp"
+#line 2265 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13:
@@ -2274,7 +2273,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2278 "engines/director/lingo/lingo-gr.cpp"
+#line 2277 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 14:
@@ -2285,7 +2284,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2289 "engines/director/lingo/lingo-gr.cpp"
+#line 2288 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15:
@@ -2297,7 +2296,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2301 "engines/director/lingo/lingo-gr.cpp"
+#line 2300 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16:
@@ -2308,7 +2307,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2312 "engines/director/lingo/lingo-gr.cpp"
+#line 2311 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17:
@@ -2319,7 +2318,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2323 "engines/director/lingo/lingo-gr.cpp"
+#line 2322 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 18:
@@ -2335,7 +2334,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-6].e)[0]);
 		g_lingo->codeInt((yyvsp[-6].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2339 "engines/director/lingo/lingo-gr.cpp"
+#line 2338 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19:
@@ -2346,7 +2345,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].objectfield).oe);
 		delete (yyvsp[-2].objectfield).os;
 		(yyval.code) = (yyvsp[0].code); }
-#line 2350 "engines/director/lingo/lingo-gr.cpp"
+#line 2349 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29:
@@ -2357,7 +2356,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 2361 "engines/director/lingo/lingo-gr.cpp"
+#line 2360 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30:
@@ -2374,7 +2373,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 2378 "engines/director/lingo/lingo-gr.cpp"
+#line 2377 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31:
@@ -2391,7 +2390,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 2395 "engines/director/lingo/lingo-gr.cpp"
+#line 2394 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32:
@@ -2406,14 +2405,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 2410 "engines/director/lingo/lingo-gr.cpp"
+#line 2409 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33:
 #line 297 "engines/director/lingo/lingo-gr.y"
                         {
 		g_lingo->code1(LC::c_nextRepeat); }
-#line 2417 "engines/director/lingo/lingo-gr.cpp"
+#line 2416 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34:
@@ -2423,7 +2422,7 @@ yyreduce:
 		WRITE_UINT32(&end, (yyvsp[0].code) - (yyvsp[-2].code));
 		g_lingo->code1(STOP);
 		(*g_lingo->_currentScript)[(yyvsp[-2].code) + 1] = end; }
-#line 2427 "engines/director/lingo/lingo-gr.cpp"
+#line 2426 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35:
@@ -2432,7 +2431,7 @@ yyreduce:
 		inst end;
 		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-3].code));
 		(*g_lingo->_currentScript)[(yyvsp[-3].code) + 1] = end; }
-#line 2436 "engines/director/lingo/lingo-gr.cpp"
+#line 2435 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36:
@@ -2441,7 +2440,7 @@ yyreduce:
 		inst end;
 		WRITE_UINT32(&end, (yyvsp[0].code) - (yyvsp[-2].code));
 		(*g_lingo->_currentScript)[(yyvsp[-2].code) + 1] = end; }
-#line 2445 "engines/director/lingo/lingo-gr.cpp"
+#line 2444 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37:
@@ -2449,7 +2448,7 @@ yyreduce:
                                                         {
 		(yyval.code) = g_lingo->code1(LC::c_tellcode);
 		g_lingo->code1(STOP); }
-#line 2453 "engines/director/lingo/lingo-gr.cpp"
+#line 2452 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38:
@@ -2464,7 +2463,7 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-8].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-8].code), (yyvsp[-1].code) - (yyvsp[-8].code), 0); }
-#line 2468 "engines/director/lingo/lingo-gr.cpp"
+#line 2467 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39:
@@ -2479,7 +2478,7 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-11].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-11].code), (yyvsp[-1].code) - (yyvsp[-11].code), (yyvsp[-3].code) - (yyvsp[-11].code)); }
-#line 2483 "engines/director/lingo/lingo-gr.cpp"
+#line 2482 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42:
@@ -2490,7 +2489,7 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-5].code) + 1] = then;	/* thenpart */
 
 		g_lingo->codeLabel((yyvsp[-5].code)); }
-#line 2494 "engines/director/lingo/lingo-gr.cpp"
+#line 2493 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43:
@@ -2505,7 +2504,7 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-10].code), (yyvsp[-1].code) - (yyvsp[-10].code), (yyvsp[-3].code) - (yyvsp[-10].code)); }
-#line 2509 "engines/director/lingo/lingo-gr.cpp"
+#line 2508 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44:
@@ -2520,13 +2519,13 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-6].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-6].code), (yyvsp[-1].code) - (yyvsp[-6].code), (yyvsp[-1].code) - (yyvsp[-6].code)); }
-#line 2524 "engines/director/lingo/lingo-gr.cpp"
+#line 2523 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45:
 #line 369 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = g_lingo->code3(LC::c_repeatwhilecode, STOP, STOP); }
-#line 2530 "engines/director/lingo/lingo-gr.cpp"
+#line 2529 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46:
@@ -2536,7 +2535,7 @@ yyreduce:
 		g_lingo->code3(STOP, STOP, STOP);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2540 "engines/director/lingo/lingo-gr.cpp"
+#line 2539 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47:
@@ -2546,7 +2545,7 @@ yyreduce:
 		g_lingo->code3(STOP, STOP, STOP);
 		g_lingo->code1(0);  // Do not skip end
 		g_lingo->codeLabel(0); }
-#line 2550 "engines/director/lingo/lingo-gr.cpp"
+#line 2549 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48:
@@ -2557,25 +2556,25 @@ yyreduce:
 		(yyval.code) = g_lingo->code1(LC::c_ifcode);
 		g_lingo->code3(STOP, STOP, STOP);
 		g_lingo->code1(skipEnd); }
-#line 2561 "engines/director/lingo/lingo-gr.cpp"
+#line 2560 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49:
 #line 390 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2567 "engines/director/lingo/lingo-gr.cpp"
+#line 2566 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50:
 #line 392 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2573 "engines/director/lingo/lingo-gr.cpp"
+#line 2572 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51:
 #line 394 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2579 "engines/director/lingo/lingo-gr.cpp"
+#line 2578 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54:
@@ -2585,7 +2584,7 @@ yyreduce:
 		g_lingo->code1(STOP);
 		g_lingo->codeString((yyvsp[-1].s)->c_str());
 		delete (yyvsp[-1].s); }
-#line 2589 "engines/director/lingo/lingo-gr.cpp"
+#line 2588 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55:
@@ -2593,7 +2592,7 @@ yyreduce:
                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt((yyvsp[0].i)); }
-#line 2597 "engines/director/lingo/lingo-gr.cpp"
+#line 2596 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56:
@@ -2601,7 +2600,7 @@ yyreduce:
                         {
 		(yyval.code) = g_lingo->code1(LC::c_floatpush);
 		g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2605 "engines/director/lingo/lingo-gr.cpp"
+#line 2604 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57:
@@ -2610,7 +2609,7 @@ yyreduce:
 		(yyval.code) = g_lingo->code1(LC::c_symbolpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2614 "engines/director/lingo/lingo-gr.cpp"
+#line 2613 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58:
@@ -2619,7 +2618,7 @@ yyreduce:
 		(yyval.code) = g_lingo->code1(LC::c_stringpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2623 "engines/director/lingo/lingo-gr.cpp"
+#line 2622 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59:
@@ -2628,7 +2627,7 @@ yyreduce:
 		(yyval.code) = g_lingo->code1(LC::c_eval);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2632 "engines/director/lingo/lingo-gr.cpp"
+#line 2631 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60:
@@ -2641,13 +2640,13 @@ yyreduce:
 		WRITE_UINT32(&e, (yyvsp[0].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[0].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2645 "engines/director/lingo/lingo-gr.cpp"
+#line 2644 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61:
 #line 430 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = (yyvsp[-1].code); }
-#line 2651 "engines/director/lingo/lingo-gr.cpp"
+#line 2650 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63:
@@ -2662,13 +2661,13 @@ yyreduce:
 			yyerrok;
 		}
 	}
-#line 2666 "engines/director/lingo/lingo-gr.cpp"
+#line 2665 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64:
 #line 443 "engines/director/lingo/lingo-gr.y"
                  { (yyval.code) = (yyvsp[0].code); }
-#line 2672 "engines/director/lingo/lingo-gr.cpp"
+#line 2671 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66:
@@ -2676,7 +2675,7 @@ yyreduce:
                                  {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2680 "engines/director/lingo/lingo-gr.cpp"
+#line 2679 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67:
@@ -2684,7 +2683,7 @@ yyreduce:
                                 {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 2688 "engines/director/lingo/lingo-gr.cpp"
+#line 2687 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68:
@@ -2692,7 +2691,7 @@ yyreduce:
                                 {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2696 "engines/director/lingo/lingo-gr.cpp"
+#line 2695 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69:
@@ -2700,7 +2699,7 @@ yyreduce:
                                         {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-2].s), 1);
 		delete (yyvsp[-2].s); }
-#line 2704 "engines/director/lingo/lingo-gr.cpp"
+#line 2703 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70:
@@ -2711,7 +2710,7 @@ yyreduce:
 		WRITE_UINT32(&e, (yyvsp[-1].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[-1].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2715 "engines/director/lingo/lingo-gr.cpp"
+#line 2714 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71:
@@ -2721,7 +2720,7 @@ yyreduce:
 		g_lingo->codeString((yyvsp[0].objectfield).os->c_str());
 		g_lingo->codeInt((yyvsp[0].objectfield).oe);
 		delete (yyvsp[0].objectfield).os; }
-#line 2725 "engines/director/lingo/lingo-gr.cpp"
+#line 2724 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72:
@@ -2732,187 +2731,187 @@ yyreduce:
 		g_lingo->codeString((yyvsp[0].objectref).field->c_str());
 		delete (yyvsp[0].objectref).obj;
 		delete (yyvsp[0].objectref).field; }
-#line 2736 "engines/director/lingo/lingo-gr.cpp"
+#line 2735 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74:
 #line 475 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_add); }
-#line 2742 "engines/director/lingo/lingo-gr.cpp"
+#line 2741 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75:
 #line 476 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_sub); }
-#line 2748 "engines/director/lingo/lingo-gr.cpp"
+#line 2747 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76:
 #line 477 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mul); }
-#line 2754 "engines/director/lingo/lingo-gr.cpp"
+#line 2753 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77:
 #line 478 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_div); }
-#line 2760 "engines/director/lingo/lingo-gr.cpp"
+#line 2759 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78:
 #line 479 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mod); }
-#line 2766 "engines/director/lingo/lingo-gr.cpp"
+#line 2765 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79:
 #line 480 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gt); }
-#line 2772 "engines/director/lingo/lingo-gr.cpp"
+#line 2771 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80:
 #line 481 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lt); }
-#line 2778 "engines/director/lingo/lingo-gr.cpp"
+#line 2777 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81:
 #line 482 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_eq); }
-#line 2784 "engines/director/lingo/lingo-gr.cpp"
+#line 2783 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82:
 #line 483 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_neq); }
-#line 2790 "engines/director/lingo/lingo-gr.cpp"
+#line 2789 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83:
 #line 484 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ge); }
-#line 2796 "engines/director/lingo/lingo-gr.cpp"
+#line 2795 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84:
 #line 485 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_le); }
-#line 2802 "engines/director/lingo/lingo-gr.cpp"
+#line 2801 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85:
 #line 486 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_and); }
-#line 2808 "engines/director/lingo/lingo-gr.cpp"
+#line 2807 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86:
 #line 487 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_or); }
-#line 2814 "engines/director/lingo/lingo-gr.cpp"
+#line 2813 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87:
 #line 488 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_not); }
-#line 2820 "engines/director/lingo/lingo-gr.cpp"
+#line 2819 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88:
 #line 489 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ampersand); }
-#line 2826 "engines/director/lingo/lingo-gr.cpp"
+#line 2825 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89:
 #line 490 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_concat); }
-#line 2832 "engines/director/lingo/lingo-gr.cpp"
+#line 2831 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90:
 #line 491 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_contains); }
-#line 2838 "engines/director/lingo/lingo-gr.cpp"
+#line 2837 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91:
 #line 492 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_starts); }
-#line 2844 "engines/director/lingo/lingo-gr.cpp"
+#line 2843 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92:
 #line 493 "engines/director/lingo/lingo-gr.y"
                                     { (yyval.code) = (yyvsp[0].code); }
-#line 2850 "engines/director/lingo/lingo-gr.cpp"
+#line 2849 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93:
 #line 494 "engines/director/lingo/lingo-gr.y"
                                     { (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 2856 "engines/director/lingo/lingo-gr.cpp"
+#line 2855 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94:
 #line 495 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_intersects); }
-#line 2862 "engines/director/lingo/lingo-gr.cpp"
+#line 2861 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95:
 #line 496 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_within); }
-#line 2868 "engines/director/lingo/lingo-gr.cpp"
+#line 2867 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 96:
 #line 498 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_charOf); }
-#line 2874 "engines/director/lingo/lingo-gr.cpp"
+#line 2873 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97:
 #line 499 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_charToOf); }
-#line 2880 "engines/director/lingo/lingo-gr.cpp"
+#line 2879 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98:
 #line 500 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_itemOf); }
-#line 2886 "engines/director/lingo/lingo-gr.cpp"
+#line 2885 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99:
 #line 501 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_itemToOf); }
-#line 2892 "engines/director/lingo/lingo-gr.cpp"
+#line 2891 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 100:
 #line 502 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_lineOf); }
-#line 2898 "engines/director/lingo/lingo-gr.cpp"
+#line 2897 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101:
 #line 503 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lineToOf); }
-#line 2904 "engines/director/lingo/lingo-gr.cpp"
+#line 2903 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 102:
 #line 504 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_wordOf); }
-#line 2910 "engines/director/lingo/lingo-gr.cpp"
+#line 2909 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 103:
 #line 505 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_wordToOf); }
-#line 2916 "engines/director/lingo/lingo-gr.cpp"
+#line 2915 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 104:
@@ -2920,233 +2919,245 @@ yyreduce:
                                         {
 		g_lingo->codeFunc((yyvsp[-1].s), 1);
 		delete (yyvsp[-1].s); }
-#line 2924 "engines/director/lingo/lingo-gr.cpp"
+#line 2923 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 106:
 #line 512 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_printtop); }
-#line 2930 "engines/director/lingo/lingo-gr.cpp"
+#line 2929 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 109:
 #line 515 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_exitRepeat); }
-#line 2936 "engines/director/lingo/lingo-gr.cpp"
+#line 2935 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110:
 #line 516 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_procret); }
-#line 2942 "engines/director/lingo/lingo-gr.cpp"
+#line 2941 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111:
 #line 517 "engines/director/lingo/lingo-gr.y"
                   { g_lingo->_indef = kStateInArgs; }
-#line 2948 "engines/director/lingo/lingo-gr.cpp"
+#line 2947 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112:
 #line 517 "engines/director/lingo/lingo-gr.y"
                                                                  { g_lingo->_indef = kStateNone; }
-#line 2954 "engines/director/lingo/lingo-gr.cpp"
+#line 2953 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113:
 #line 518 "engines/director/lingo/lingo-gr.y"
                     { g_lingo->_indef = kStateInArgs; }
-#line 2960 "engines/director/lingo/lingo-gr.cpp"
+#line 2959 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114:
 #line 518 "engines/director/lingo/lingo-gr.y"
                                                                      { g_lingo->_indef = kStateNone; }
-#line 2966 "engines/director/lingo/lingo-gr.cpp"
+#line 2965 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 115:
+#line 519 "engines/director/lingo/lingo-gr.y"
+                    { g_lingo->_indef = kStateInArgs; }
+#line 2971 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 116:
+#line 519 "engines/director/lingo/lingo-gr.y"
+                                                                     { g_lingo->_indef = kStateNone; }
+#line 2977 "engines/director/lingo/lingo-gr.cpp"
+    break;
+
+  case 117:
 #line 520 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2974 "engines/director/lingo/lingo-gr.cpp"
+#line 2985 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 117:
+  case 118:
 #line 523 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 2982 "engines/director/lingo/lingo-gr.cpp"
+#line 2993 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 118:
+  case 119:
 #line 526 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_open); }
-#line 2988 "engines/director/lingo/lingo-gr.cpp"
+#line 2999 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 119:
+  case 120:
 #line 527 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code2(LC::c_voidpush, LC::c_open); }
-#line 2994 "engines/director/lingo/lingo-gr.cpp"
+#line 3005 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 120:
+  case 121:
 #line 529 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_global);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 3003 "engines/director/lingo/lingo-gr.cpp"
+#line 3014 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 121:
+  case 122:
 #line 533 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_global);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 3012 "engines/director/lingo/lingo-gr.cpp"
+#line 3023 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 122:
+  case 123:
 #line 538 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_property);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 3021 "engines/director/lingo/lingo-gr.cpp"
+#line 3032 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 123:
+  case 124:
 #line 542 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_property);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 3030 "engines/director/lingo/lingo-gr.cpp"
+#line 3041 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 124:
+  case 125:
 #line 547 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_instance);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 3039 "engines/director/lingo/lingo-gr.cpp"
+#line 3050 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 125:
+  case 126:
 #line 551 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_instance);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 3048 "engines/director/lingo/lingo-gr.cpp"
+#line 3059 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 126:
+  case 127:
 #line 563 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoloop); }
-#line 3054 "engines/director/lingo/lingo-gr.cpp"
+#line 3065 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 127:
+  case 128:
 #line 564 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_gotonext); }
-#line 3060 "engines/director/lingo/lingo-gr.cpp"
+#line 3071 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 128:
+  case 129:
 #line 565 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoprevious); }
-#line 3066 "engines/director/lingo/lingo-gr.cpp"
+#line 3077 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 129:
+  case 130:
 #line 566 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_goto); }
-#line 3075 "engines/director/lingo/lingo-gr.cpp"
+#line 3086 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 130:
+  case 131:
 #line 570 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_goto); }
-#line 3084 "engines/director/lingo/lingo-gr.cpp"
+#line 3095 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 131:
+  case 132:
 #line 574 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_goto); }
-#line 3093 "engines/director/lingo/lingo-gr.cpp"
+#line 3104 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 134:
+  case 135:
 #line 582 "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 3102 "engines/director/lingo/lingo-gr.cpp"
+#line 3113 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 135:
+  case 136:
 #line 586 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_play); }
-#line 3111 "engines/director/lingo/lingo-gr.cpp"
+#line 3122 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 136:
+  case 137:
 #line 590 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_play); }
-#line 3120 "engines/director/lingo/lingo-gr.cpp"
+#line 3131 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 137:
+  case 138:
 #line 594 "engines/director/lingo/lingo-gr.y"
                      { g_lingo->codeSetImmediate(true); }
-#line 3126 "engines/director/lingo/lingo-gr.cpp"
+#line 3137 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 138:
+  case 139:
 #line 594 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeFunc((yyvsp[-2].s), (yyvsp[0].narg));
 		delete (yyvsp[-2].s); }
-#line 3135 "engines/director/lingo/lingo-gr.cpp"
+#line 3146 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 139:
+  case 140:
 #line 624 "engines/director/lingo/lingo-gr.y"
              { g_lingo->_indef = kStateInArgs; }
-#line 3141 "engines/director/lingo/lingo-gr.cpp"
+#line 3152 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 140:
+  case 141:
 #line 624 "engines/director/lingo/lingo-gr.y"
                                                     { g_lingo->_currentFactory.clear(); }
-#line 3147 "engines/director/lingo/lingo-gr.cpp"
+#line 3158 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 141:
+  case 142:
 #line 625 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->code1(LC::c_procret);
@@ -3154,22 +3165,22 @@ yyreduce:
 		g_lingo->clearArgStack();
 		g_lingo->_indef = kStateNone;
 		delete (yyvsp[-6].s); }
-#line 3158 "engines/director/lingo/lingo-gr.cpp"
+#line 3169 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 142:
+  case 143:
 #line 631 "engines/director/lingo/lingo-gr.y"
                         { g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 3164 "engines/director/lingo/lingo-gr.cpp"
+#line 3175 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 143:
+  case 144:
 #line 632 "engines/director/lingo/lingo-gr.y"
                   { g_lingo->_indef = kStateInArgs; }
-#line 3170 "engines/director/lingo/lingo-gr.cpp"
+#line 3181 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 144:
+  case 145:
 #line 633 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->code1(LC::c_procret);
@@ -3177,10 +3188,10 @@ yyreduce:
 		g_lingo->clearArgStack();
 		g_lingo->_indef = kStateNone;
 		delete (yyvsp[-6].s); }
-#line 3181 "engines/director/lingo/lingo-gr.cpp"
+#line 3192 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 145:
+  case 146:
 #line 639 "engines/director/lingo/lingo-gr.y"
                                                                      {	// D3
 		g_lingo->code1(LC::c_procret);
@@ -3192,10 +3203,10 @@ yyreduce:
 		checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
 		delete (yyvsp[-7].s);
 		delete (yyvsp[-1].s); }
-#line 3196 "engines/director/lingo/lingo-gr.cpp"
+#line 3207 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 146:
+  case 147:
 #line 649 "engines/director/lingo/lingo-gr.y"
                                                  {	// D4. No 'end' clause
 		g_lingo->code1(LC::c_procret);
@@ -3204,58 +3215,58 @@ yyreduce:
 		g_lingo->clearArgStack();
 		g_lingo->_ignoreMe = false;
 		delete (yyvsp[-5].s); }
-#line 3208 "engines/director/lingo/lingo-gr.cpp"
+#line 3219 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 147:
+  case 148:
 #line 657 "engines/director/lingo/lingo-gr.y"
          { g_lingo->_indef = kStateInArgs; }
-#line 3214 "engines/director/lingo/lingo-gr.cpp"
+#line 3225 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 148:
+  case 149:
 #line 657 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
-#line 3220 "engines/director/lingo/lingo-gr.cpp"
+#line 3231 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 149:
+  case 150:
 #line 659 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = 0; }
-#line 3226 "engines/director/lingo/lingo-gr.cpp"
+#line 3237 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 150:
+  case 151:
 #line 660 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = 1; delete (yyvsp[0].s); }
-#line 3232 "engines/director/lingo/lingo-gr.cpp"
+#line 3243 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 151:
+  case 152:
 #line 661 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
-#line 3238 "engines/director/lingo/lingo-gr.cpp"
+#line 3249 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 153:
+  case 154:
 #line 664 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 3244 "engines/director/lingo/lingo-gr.cpp"
+#line 3255 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 154:
+  case 155:
 #line 665 "engines/director/lingo/lingo-gr.y"
                                         { delete (yyvsp[0].s); }
-#line 3250 "engines/director/lingo/lingo-gr.cpp"
+#line 3261 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 155:
+  case 156:
 #line 667 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->codeArgStore(); g_lingo->_indef = kStateInDef; }
-#line 3256 "engines/director/lingo/lingo-gr.cpp"
+#line 3267 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 156:
+  case 157:
 #line 669 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_call);
@@ -3264,113 +3275,113 @@ yyreduce:
 		WRITE_UINT32(&numpar, (yyvsp[0].narg));
 		g_lingo->code1(numpar);
 		delete (yyvsp[-1].s); }
-#line 3268 "engines/director/lingo/lingo-gr.cpp"
+#line 3279 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 157:
+  case 158:
 #line 677 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = 0; }
-#line 3274 "engines/director/lingo/lingo-gr.cpp"
+#line 3285 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 158:
+  case 159:
 #line 678 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 3280 "engines/director/lingo/lingo-gr.cpp"
+#line 3291 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 159:
+  case 160:
 #line 679 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3286 "engines/director/lingo/lingo-gr.cpp"
+#line 3297 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 160:
+  case 161:
 #line 681 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3292 "engines/director/lingo/lingo-gr.cpp"
+#line 3303 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 161:
+  case 162:
 #line 682 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3298 "engines/director/lingo/lingo-gr.cpp"
+#line 3309 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 162:
+  case 163:
 #line 684 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = (yyvsp[-1].code); }
-#line 3304 "engines/director/lingo/lingo-gr.cpp"
+#line 3315 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 163:
+  case 164:
 #line 686 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3310 "engines/director/lingo/lingo-gr.cpp"
+#line 3321 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 164:
+  case 165:
 #line 687 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3316 "engines/director/lingo/lingo-gr.cpp"
+#line 3327 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 165:
+  case 166:
 #line 688 "engines/director/lingo/lingo-gr.y"
                      { (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3322 "engines/director/lingo/lingo-gr.cpp"
+#line 3333 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 166:
+  case 167:
 #line 689 "engines/director/lingo/lingo-gr.y"
                          { (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3328 "engines/director/lingo/lingo-gr.cpp"
+#line 3339 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 167:
+  case 168:
 #line 691 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3334 "engines/director/lingo/lingo-gr.cpp"
+#line 3345 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 168:
+  case 169:
 #line 692 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3340 "engines/director/lingo/lingo-gr.cpp"
+#line 3351 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 169:
+  case 170:
 #line 694 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3346 "engines/director/lingo/lingo-gr.cpp"
+#line 3357 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 170:
+  case 171:
 #line 695 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3352 "engines/director/lingo/lingo-gr.cpp"
+#line 3363 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 171:
+  case 172:
 #line 697 "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 3361 "engines/director/lingo/lingo-gr.cpp"
+#line 3372 "engines/director/lingo/lingo-gr.cpp"
     break;
 
-  case 172:
+  case 173:
 #line 701 "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 3370 "engines/director/lingo/lingo-gr.cpp"
+#line 3381 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3374 "engines/director/lingo/lingo-gr.cpp"
+#line 3385 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index faf65d30be..77569e5f2b 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.6.1.  */
+/* A Bison parser, made by GNU Bison 3.6.2.  */
 
 /* Bison interface for Yacc-like parsers in C
 
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 7986a128c0..8803ceaf81 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -516,7 +516,7 @@ proc: tPUT expr				{ g_lingo->code1(LC::c_printtop); }
 	| tEXIT					{ g_lingo->code1(LC::c_procret); }
 	| tGLOBAL { g_lingo->_indef = kStateInArgs; } globallist { g_lingo->_indef = kStateNone; }
 	| tPROPERTY { g_lingo->_indef = kStateInArgs; } propertylist { g_lingo->_indef = kStateNone; }
-	| tINSTANCE instancelist
+	| tINSTANCE { g_lingo->_indef = kStateInArgs; } instancelist { g_lingo->_indef = kStateNone; }
 	| BLTIN '(' arglist ')'			{
 		g_lingo->codeFunc($BLTIN, $arglist);
 		delete $BLTIN; }


Commit: 23270cd4e1ea8d220c9db1cc987a90826ff84af0
    https://github.com/scummvm/scummvm/commit/23270cd4e1ea8d220c9db1cc987a90826ff84af0
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-05-20T01:28:02+02:00

Commit Message:
DIRECTOR: LINGO: Compactify code

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


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index e0dc034366..dc7bbbc92b 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -87,12 +87,12 @@ extern bool lex_check_parens();
 
 using namespace Director;
 
-void yyerror(const char *s) {
+static void yyerror(const char *s) {
 	g_lingo->_hadError = true;
 	warning("######################  LINGO: %s at line %d col %d", s, g_lingo->_linenumber, g_lingo->_colnumber);
 }
 
-void checkEnd(Common::String *token, const char *expect, bool required) {
+static void checkEnd(Common::String *token, const char *expect, bool required) {
 	if (required) {
 		if (token->compareToIgnoreCase(expect)) {
 			Common::String err = Common::String::format("end mismatch. Expected %s but got %s", expect, token->c_str());
@@ -101,8 +101,12 @@ void checkEnd(Common::String *token, const char *expect, bool required) {
 	}
 }
 
+static void inArgs() { g_lingo->_indef = kStateInArgs; }
+static void inDef()  { g_lingo->_indef = kStateInDef; }
+static void inNone() { g_lingo->_indef = kStateNone; }
 
-#line 106 "engines/director/lingo/lingo-gr.cpp"
+
+#line 110 "engines/director/lingo/lingo-gr.cpp"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -240,7 +244,7 @@ extern int yydebug;
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 89 "engines/director/lingo/lingo-gr.y"
+#line 93 "engines/director/lingo/lingo-gr.y"
 
 	Common::String *s;
 	int i;
@@ -260,7 +264,7 @@ union YYSTYPE
 		Common::String *field;
 	} objectref;
 
-#line 264 "engines/director/lingo/lingo-gr.cpp"
+#line 268 "engines/director/lingo/lingo-gr.cpp"
 
 };
 typedef union YYSTYPE YYSTYPE;
@@ -809,24 +813,24 @@ static const yytype_int8 yytranslate[] =
   /* YYRLINEYYN -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   144,   144,   145,   147,   148,   149,   151,   157,   161,
-     172,   173,   174,   180,   187,   193,   200,   206,   213,   224,
-     231,   232,   233,   235,   236,   237,   238,   240,   241,   246,
-     257,   274,   286,   297,   299,   304,   308,   313,   317,   327,
-     338,   339,   341,   348,   358,   369,   371,   377,   383,   390,
-     392,   394,   395,   396,   398,   404,   407,   410,   414,   418,
-     422,   430,   431,   432,   443,   444,   445,   448,   451,   454,
-     457,   463,   468,   474,   475,   476,   477,   478,   479,   480,
-     481,   482,   483,   484,   485,   486,   487,   488,   489,   490,
-     491,   492,   493,   494,   495,   496,   498,   499,   500,   501,
-     502,   503,   504,   505,   507,   510,   512,   513,   514,   515,
-     516,   517,   517,   518,   518,   519,   519,   520,   523,   526,
-     527,   529,   533,   538,   542,   547,   551,   563,   564,   565,
-     566,   570,   574,   579,   580,   582,   586,   590,   594,   594,
-     624,   624,   624,   631,   632,   632,   639,   649,   657,   657,
-     659,   660,   661,   663,   664,   665,   667,   669,   677,   678,
-     679,   681,   682,   684,   686,   687,   688,   689,   691,   692,
-     694,   695,   697,   701
+       0,   148,   148,   149,   151,   152,   153,   155,   161,   165,
+     176,   177,   178,   184,   191,   197,   204,   210,   217,   228,
+     235,   236,   237,   239,   240,   241,   242,   244,   245,   250,
+     261,   278,   290,   301,   303,   308,   312,   317,   321,   331,
+     342,   343,   345,   352,   362,   373,   375,   381,   387,   394,
+     396,   398,   399,   400,   402,   408,   411,   414,   418,   422,
+     426,   434,   435,   436,   447,   448,   449,   452,   455,   458,
+     461,   467,   472,   478,   479,   480,   481,   482,   483,   484,
+     485,   486,   487,   488,   489,   490,   491,   492,   493,   494,
+     495,   496,   497,   498,   499,   500,   502,   503,   504,   505,
+     506,   507,   508,   509,   511,   514,   516,   517,   518,   519,
+     520,   521,   521,   522,   522,   523,   523,   524,   527,   530,
+     531,   533,   537,   542,   546,   551,   555,   567,   568,   569,
+     570,   574,   578,   583,   584,   586,   590,   594,   598,   598,
+     628,   628,   628,   635,   636,   636,   643,   653,   661,   661,
+     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
 
@@ -1854,81 +1858,81 @@ yydestruct (const char *yymsg,
   switch (yykind)
     {
     case 22: /* BLTIN  */
-#line 139 "engines/director/lingo/lingo-gr.y"
+#line 143 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1860 "engines/director/lingo/lingo-gr.cpp"
+#line 1864 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 23: /* FBLTIN  */
-#line 139 "engines/director/lingo/lingo-gr.y"
+#line 143 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1866 "engines/director/lingo/lingo-gr.cpp"
+#line 1870 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 24: /* RBLTIN  */
-#line 139 "engines/director/lingo/lingo-gr.y"
+#line 143 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1872 "engines/director/lingo/lingo-gr.cpp"
+#line 1876 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 25: /* THEFBLTIN  */
-#line 139 "engines/director/lingo/lingo-gr.y"
+#line 143 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1878 "engines/director/lingo/lingo-gr.cpp"
+#line 1882 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 26: /* ID  */
-#line 139 "engines/director/lingo/lingo-gr.y"
+#line 143 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1884 "engines/director/lingo/lingo-gr.cpp"
+#line 1888 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 27: /* STRING  */
-#line 139 "engines/director/lingo/lingo-gr.y"
+#line 143 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1890 "engines/director/lingo/lingo-gr.cpp"
+#line 1894 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 28: /* HANDLER  */
-#line 139 "engines/director/lingo/lingo-gr.y"
+#line 143 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1896 "engines/director/lingo/lingo-gr.cpp"
+#line 1900 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 29: /* SYMBOL  */
-#line 139 "engines/director/lingo/lingo-gr.y"
+#line 143 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1902 "engines/director/lingo/lingo-gr.cpp"
+#line 1906 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 30: /* ENDCLAUSE  */
-#line 139 "engines/director/lingo/lingo-gr.y"
+#line 143 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1908 "engines/director/lingo/lingo-gr.cpp"
+#line 1912 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 31: /* tPLAYACCEL  */
-#line 139 "engines/director/lingo/lingo-gr.y"
+#line 143 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1914 "engines/director/lingo/lingo-gr.cpp"
+#line 1918 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 32: /* tMETHOD  */
-#line 139 "engines/director/lingo/lingo-gr.y"
+#line 143 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1920 "engines/director/lingo/lingo-gr.cpp"
+#line 1924 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 33: /* THEOBJECTFIELD  */
-#line 140 "engines/director/lingo/lingo-gr.y"
+#line 144 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).objectfield).os; }
-#line 1926 "engines/director/lingo/lingo-gr.cpp"
+#line 1930 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 143: /* on  */
-#line 139 "engines/director/lingo/lingo-gr.y"
+#line 143 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1932 "engines/director/lingo/lingo-gr.cpp"
+#line 1936 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2207,26 +2211,26 @@ yyreduce:
   switch (yyn)
     {
   case 7:
-#line 151 "engines/director/lingo/lingo-gr.y"
+#line 155 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code);
 		delete (yyvsp[0].s); }
-#line 2218 "engines/director/lingo/lingo-gr.cpp"
+#line 2222 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 8:
-#line 157 "engines/director/lingo/lingo-gr.y"
+#line 161 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code); }
-#line 2226 "engines/director/lingo/lingo-gr.cpp"
+#line 2230 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 9:
-#line 161 "engines/director/lingo/lingo-gr.y"
+#line 165 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
 			warning("LEXER: keyword 'menu' expected");
@@ -2238,34 +2242,34 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-4].e)[1]);
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2242 "engines/director/lingo/lingo-gr.cpp"
+#line 2246 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10:
-#line 172 "engines/director/lingo/lingo-gr.y"
+#line 176 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code1(LC::c_after); }
-#line 2248 "engines/director/lingo/lingo-gr.cpp"
+#line 2252 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11:
-#line 173 "engines/director/lingo/lingo-gr.y"
+#line 177 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code1(LC::c_before); }
-#line 2254 "engines/director/lingo/lingo-gr.cpp"
+#line 2258 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12:
-#line 174 "engines/director/lingo/lingo-gr.y"
+#line 178 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2265 "engines/director/lingo/lingo-gr.cpp"
+#line 2269 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13:
-#line 180 "engines/director/lingo/lingo-gr.y"
+#line 184 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2273,22 +2277,22 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2277 "engines/director/lingo/lingo-gr.cpp"
+#line 2281 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 14:
-#line 187 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2288 "engines/director/lingo/lingo-gr.cpp"
+#line 2292 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15:
-#line 193 "engines/director/lingo/lingo-gr.y"
+#line 197 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2296,33 +2300,33 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2300 "engines/director/lingo/lingo-gr.cpp"
+#line 2304 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16:
-#line 200 "engines/director/lingo/lingo-gr.y"
+#line 204 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_swap);
 		g_lingo->code1(LC::c_theentityassign);
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2311 "engines/director/lingo/lingo-gr.cpp"
+#line 2315 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17:
-#line 206 "engines/director/lingo/lingo-gr.y"
+#line 210 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_swap);
 		g_lingo->code1(LC::c_theentityassign);
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2322 "engines/director/lingo/lingo-gr.cpp"
+#line 2326 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 18:
-#line 213 "engines/director/lingo/lingo-gr.y"
+#line 217 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
 			warning("LEXER: keyword 'menu' expected");
@@ -2334,33 +2338,33 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-6].e)[0]);
 		g_lingo->codeInt((yyvsp[-6].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2338 "engines/director/lingo/lingo-gr.cpp"
+#line 2342 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19:
-#line 224 "engines/director/lingo/lingo-gr.y"
+#line 228 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_objectfieldassign);
 		g_lingo->codeString((yyvsp[-2].objectfield).os->c_str());
 		g_lingo->codeInt((yyvsp[-2].objectfield).oe);
 		delete (yyvsp[-2].objectfield).os;
 		(yyval.code) = (yyvsp[0].code); }
-#line 2349 "engines/director/lingo/lingo-gr.cpp"
+#line 2353 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29:
-#line 246 "engines/director/lingo/lingo-gr.y"
+#line 250 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		inst body = 0, end = 0;
 		WRITE_UINT32(&body, (yyvsp[-3].code) - (yyvsp[-5].code));
 		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-5].code));
 		(*g_lingo->_currentScript)[(yyvsp[-5].code) + 1] = body;	/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-5].code) + 2] = end; }
-#line 2360 "engines/director/lingo/lingo-gr.cpp"
+#line 2364 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30:
-#line 257 "engines/director/lingo/lingo-gr.y"
+#line 261 "engines/director/lingo/lingo-gr.y"
                                                                                                  {
 		inst init = 0, finish = 0, body = 0, end = 0, inc = 0;
 		WRITE_UINT32(&init, (yyvsp[-8].code) - (yyvsp[-10].code));
@@ -2373,11 +2377,11 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 3] = body;		/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 4] = inc;		/* increment */
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 5] = end; }
-#line 2377 "engines/director/lingo/lingo-gr.cpp"
+#line 2381 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31:
-#line 274 "engines/director/lingo/lingo-gr.y"
+#line 278 "engines/director/lingo/lingo-gr.y"
                                                                                                        {
 		inst init = 0, finish = 0, body = 0, end = 0, inc = 0;
 		WRITE_UINT32(&init, (yyvsp[-9].code) - (yyvsp[-11].code));
@@ -2390,11 +2394,11 @@ 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 2394 "engines/director/lingo/lingo-gr.cpp"
+#line 2398 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32:
-#line 286 "engines/director/lingo/lingo-gr.y"
+#line 290 "engines/director/lingo/lingo-gr.y"
                                                                             {
 		inst list = 0, body = 0, end = 0;
 		WRITE_UINT32(&list, (yyvsp[-5].code) - (yyvsp[-7].code));
@@ -2405,54 +2409,54 @@ 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 2409 "engines/director/lingo/lingo-gr.cpp"
+#line 2413 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33:
-#line 297 "engines/director/lingo/lingo-gr.y"
+#line 301 "engines/director/lingo/lingo-gr.y"
                         {
 		g_lingo->code1(LC::c_nextRepeat); }
-#line 2416 "engines/director/lingo/lingo-gr.cpp"
+#line 2420 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34:
-#line 299 "engines/director/lingo/lingo-gr.y"
+#line 303 "engines/director/lingo/lingo-gr.y"
                                       {
 		inst end = 0;
 		WRITE_UINT32(&end, (yyvsp[0].code) - (yyvsp[-2].code));
 		g_lingo->code1(STOP);
 		(*g_lingo->_currentScript)[(yyvsp[-2].code) + 1] = end; }
-#line 2426 "engines/director/lingo/lingo-gr.cpp"
+#line 2430 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35:
-#line 304 "engines/director/lingo/lingo-gr.y"
+#line 308 "engines/director/lingo/lingo-gr.y"
                                                           {
 		inst end;
 		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-3].code));
 		(*g_lingo->_currentScript)[(yyvsp[-3].code) + 1] = end; }
-#line 2435 "engines/director/lingo/lingo-gr.cpp"
+#line 2439 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36:
-#line 308 "engines/director/lingo/lingo-gr.y"
+#line 312 "engines/director/lingo/lingo-gr.y"
                                                     {
 		inst end;
 		WRITE_UINT32(&end, (yyvsp[0].code) - (yyvsp[-2].code));
 		(*g_lingo->_currentScript)[(yyvsp[-2].code) + 1] = end; }
-#line 2444 "engines/director/lingo/lingo-gr.cpp"
+#line 2448 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37:
-#line 313 "engines/director/lingo/lingo-gr.y"
+#line 317 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.code) = g_lingo->code1(LC::c_tellcode);
 		g_lingo->code1(STOP); }
-#line 2452 "engines/director/lingo/lingo-gr.cpp"
+#line 2456 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38:
-#line 317 "engines/director/lingo/lingo-gr.y"
+#line 321 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-6].code) - (yyvsp[-8].code));
@@ -2463,11 +2467,11 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-8].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-8].code), (yyvsp[-1].code) - (yyvsp[-8].code), 0); }
-#line 2467 "engines/director/lingo/lingo-gr.cpp"
+#line 2471 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39:
-#line 327 "engines/director/lingo/lingo-gr.y"
+#line 331 "engines/director/lingo/lingo-gr.y"
                                                                                                               {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-9].code) - (yyvsp[-11].code));
@@ -2478,22 +2482,22 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-11].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-11].code), (yyvsp[-1].code) - (yyvsp[-11].code), (yyvsp[-3].code) - (yyvsp[-11].code)); }
-#line 2482 "engines/director/lingo/lingo-gr.cpp"
+#line 2486 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42:
-#line 341 "engines/director/lingo/lingo-gr.y"
+#line 345 "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 2493 "engines/director/lingo/lingo-gr.cpp"
+#line 2497 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43:
-#line 348 "engines/director/lingo/lingo-gr.y"
+#line 352 "engines/director/lingo/lingo-gr.y"
                                                                                                          {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-8].code) - (yyvsp[-10].code));
@@ -2504,11 +2508,11 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-10].code), (yyvsp[-1].code) - (yyvsp[-10].code), (yyvsp[-3].code) - (yyvsp[-10].code)); }
-#line 2508 "engines/director/lingo/lingo-gr.cpp"
+#line 2512 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44:
-#line 358 "engines/director/lingo/lingo-gr.y"
+#line 362 "engines/director/lingo/lingo-gr.y"
                                                                    {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-4].code) - (yyvsp[-6].code));
@@ -2519,119 +2523,119 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-6].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-6].code), (yyvsp[-1].code) - (yyvsp[-6].code), (yyvsp[-1].code) - (yyvsp[-6].code)); }
-#line 2523 "engines/director/lingo/lingo-gr.cpp"
+#line 2527 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45:
-#line 369 "engines/director/lingo/lingo-gr.y"
+#line 373 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = g_lingo->code3(LC::c_repeatwhilecode, STOP, STOP); }
-#line 2529 "engines/director/lingo/lingo-gr.cpp"
+#line 2533 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46:
-#line 371 "engines/director/lingo/lingo-gr.y"
+#line 375 "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 2539 "engines/director/lingo/lingo-gr.cpp"
+#line 2543 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47:
-#line 377 "engines/director/lingo/lingo-gr.y"
+#line 381 "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 2549 "engines/director/lingo/lingo-gr.cpp"
+#line 2553 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48:
-#line 383 "engines/director/lingo/lingo-gr.y"
+#line 387 "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 2560 "engines/director/lingo/lingo-gr.cpp"
+#line 2564 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49:
-#line 390 "engines/director/lingo/lingo-gr.y"
+#line 394 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2566 "engines/director/lingo/lingo-gr.cpp"
+#line 2570 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50:
-#line 392 "engines/director/lingo/lingo-gr.y"
+#line 396 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2572 "engines/director/lingo/lingo-gr.cpp"
+#line 2576 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51:
-#line 394 "engines/director/lingo/lingo-gr.y"
+#line 398 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2578 "engines/director/lingo/lingo-gr.cpp"
+#line 2582 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54:
-#line 398 "engines/director/lingo/lingo-gr.y"
+#line 402 "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 2588 "engines/director/lingo/lingo-gr.cpp"
+#line 2592 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55:
-#line 404 "engines/director/lingo/lingo-gr.y"
+#line 408 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt((yyvsp[0].i)); }
-#line 2596 "engines/director/lingo/lingo-gr.cpp"
+#line 2600 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56:
-#line 407 "engines/director/lingo/lingo-gr.y"
+#line 411 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_floatpush);
 		g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2604 "engines/director/lingo/lingo-gr.cpp"
+#line 2608 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57:
-#line 410 "engines/director/lingo/lingo-gr.y"
+#line 414 "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 2613 "engines/director/lingo/lingo-gr.cpp"
+#line 2617 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58:
-#line 414 "engines/director/lingo/lingo-gr.y"
+#line 418 "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 2622 "engines/director/lingo/lingo-gr.cpp"
+#line 2626 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59:
-#line 418 "engines/director/lingo/lingo-gr.y"
+#line 422 "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 2631 "engines/director/lingo/lingo-gr.cpp"
+#line 2635 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60:
-#line 422 "engines/director/lingo/lingo-gr.y"
+#line 426 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2640,17 +2644,17 @@ yyreduce:
 		WRITE_UINT32(&e, (yyvsp[0].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[0].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2644 "engines/director/lingo/lingo-gr.cpp"
+#line 2648 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61:
-#line 430 "engines/director/lingo/lingo-gr.y"
+#line 434 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = (yyvsp[-1].code); }
-#line 2650 "engines/director/lingo/lingo-gr.cpp"
+#line 2654 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63:
-#line 432 "engines/director/lingo/lingo-gr.y"
+#line 436 "engines/director/lingo/lingo-gr.y"
                                 {
 		// Director parser till D3 was forgiving for any hanging parentheses
 		if (g_lingo->_ignoreError) {
@@ -2661,613 +2665,613 @@ yyreduce:
 			yyerrok;
 		}
 	}
-#line 2665 "engines/director/lingo/lingo-gr.cpp"
+#line 2669 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64:
-#line 443 "engines/director/lingo/lingo-gr.y"
+#line 447 "engines/director/lingo/lingo-gr.y"
                  { (yyval.code) = (yyvsp[0].code); }
-#line 2671 "engines/director/lingo/lingo-gr.cpp"
+#line 2675 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66:
-#line 445 "engines/director/lingo/lingo-gr.y"
+#line 449 "engines/director/lingo/lingo-gr.y"
                                  {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2679 "engines/director/lingo/lingo-gr.cpp"
+#line 2683 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67:
-#line 448 "engines/director/lingo/lingo-gr.y"
+#line 452 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 2687 "engines/director/lingo/lingo-gr.cpp"
+#line 2691 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68:
-#line 451 "engines/director/lingo/lingo-gr.y"
+#line 455 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2695 "engines/director/lingo/lingo-gr.cpp"
+#line 2699 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69:
-#line 454 "engines/director/lingo/lingo-gr.y"
+#line 458 "engines/director/lingo/lingo-gr.y"
                                         {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-2].s), 1);
 		delete (yyvsp[-2].s); }
-#line 2703 "engines/director/lingo/lingo-gr.cpp"
+#line 2707 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70:
-#line 457 "engines/director/lingo/lingo-gr.y"
+#line 461 "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 2714 "engines/director/lingo/lingo-gr.cpp"
+#line 2718 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71:
-#line 463 "engines/director/lingo/lingo-gr.y"
+#line 467 "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 2724 "engines/director/lingo/lingo-gr.cpp"
+#line 2728 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72:
-#line 468 "engines/director/lingo/lingo-gr.y"
+#line 472 "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 2735 "engines/director/lingo/lingo-gr.cpp"
+#line 2739 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74:
-#line 475 "engines/director/lingo/lingo-gr.y"
+#line 479 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_add); }
-#line 2741 "engines/director/lingo/lingo-gr.cpp"
+#line 2745 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75:
-#line 476 "engines/director/lingo/lingo-gr.y"
+#line 480 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_sub); }
-#line 2747 "engines/director/lingo/lingo-gr.cpp"
+#line 2751 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76:
-#line 477 "engines/director/lingo/lingo-gr.y"
+#line 481 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mul); }
-#line 2753 "engines/director/lingo/lingo-gr.cpp"
+#line 2757 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77:
-#line 478 "engines/director/lingo/lingo-gr.y"
+#line 482 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_div); }
-#line 2759 "engines/director/lingo/lingo-gr.cpp"
+#line 2763 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78:
-#line 479 "engines/director/lingo/lingo-gr.y"
+#line 483 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mod); }
-#line 2765 "engines/director/lingo/lingo-gr.cpp"
+#line 2769 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79:
-#line 480 "engines/director/lingo/lingo-gr.y"
+#line 484 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gt); }
-#line 2771 "engines/director/lingo/lingo-gr.cpp"
+#line 2775 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80:
-#line 481 "engines/director/lingo/lingo-gr.y"
+#line 485 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lt); }
-#line 2777 "engines/director/lingo/lingo-gr.cpp"
+#line 2781 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81:
-#line 482 "engines/director/lingo/lingo-gr.y"
+#line 486 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_eq); }
-#line 2783 "engines/director/lingo/lingo-gr.cpp"
+#line 2787 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82:
-#line 483 "engines/director/lingo/lingo-gr.y"
+#line 487 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_neq); }
-#line 2789 "engines/director/lingo/lingo-gr.cpp"
+#line 2793 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83:
-#line 484 "engines/director/lingo/lingo-gr.y"
+#line 488 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ge); }
-#line 2795 "engines/director/lingo/lingo-gr.cpp"
+#line 2799 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84:
-#line 485 "engines/director/lingo/lingo-gr.y"
+#line 489 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_le); }
-#line 2801 "engines/director/lingo/lingo-gr.cpp"
+#line 2805 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85:
-#line 486 "engines/director/lingo/lingo-gr.y"
+#line 490 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_and); }
-#line 2807 "engines/director/lingo/lingo-gr.cpp"
+#line 2811 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86:
-#line 487 "engines/director/lingo/lingo-gr.y"
+#line 491 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_or); }
-#line 2813 "engines/director/lingo/lingo-gr.cpp"
+#line 2817 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87:
-#line 488 "engines/director/lingo/lingo-gr.y"
+#line 492 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_not); }
-#line 2819 "engines/director/lingo/lingo-gr.cpp"
+#line 2823 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88:
-#line 489 "engines/director/lingo/lingo-gr.y"
+#line 493 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ampersand); }
-#line 2825 "engines/director/lingo/lingo-gr.cpp"
+#line 2829 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89:
-#line 490 "engines/director/lingo/lingo-gr.y"
+#line 494 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_concat); }
-#line 2831 "engines/director/lingo/lingo-gr.cpp"
+#line 2835 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90:
-#line 491 "engines/director/lingo/lingo-gr.y"
+#line 495 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_contains); }
-#line 2837 "engines/director/lingo/lingo-gr.cpp"
+#line 2841 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91:
-#line 492 "engines/director/lingo/lingo-gr.y"
+#line 496 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_starts); }
-#line 2843 "engines/director/lingo/lingo-gr.cpp"
+#line 2847 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92:
-#line 493 "engines/director/lingo/lingo-gr.y"
+#line 497 "engines/director/lingo/lingo-gr.y"
                                     { (yyval.code) = (yyvsp[0].code); }
-#line 2849 "engines/director/lingo/lingo-gr.cpp"
+#line 2853 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93:
-#line 494 "engines/director/lingo/lingo-gr.y"
+#line 498 "engines/director/lingo/lingo-gr.y"
                                     { (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 2855 "engines/director/lingo/lingo-gr.cpp"
+#line 2859 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94:
-#line 495 "engines/director/lingo/lingo-gr.y"
+#line 499 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_intersects); }
-#line 2861 "engines/director/lingo/lingo-gr.cpp"
+#line 2865 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95:
-#line 496 "engines/director/lingo/lingo-gr.y"
+#line 500 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_within); }
-#line 2867 "engines/director/lingo/lingo-gr.cpp"
+#line 2871 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 96:
-#line 498 "engines/director/lingo/lingo-gr.y"
+#line 502 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_charOf); }
-#line 2873 "engines/director/lingo/lingo-gr.cpp"
+#line 2877 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97:
-#line 499 "engines/director/lingo/lingo-gr.y"
+#line 503 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_charToOf); }
-#line 2879 "engines/director/lingo/lingo-gr.cpp"
+#line 2883 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98:
-#line 500 "engines/director/lingo/lingo-gr.y"
+#line 504 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_itemOf); }
-#line 2885 "engines/director/lingo/lingo-gr.cpp"
+#line 2889 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99:
-#line 501 "engines/director/lingo/lingo-gr.y"
+#line 505 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_itemToOf); }
-#line 2891 "engines/director/lingo/lingo-gr.cpp"
+#line 2895 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 100:
-#line 502 "engines/director/lingo/lingo-gr.y"
+#line 506 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_lineOf); }
-#line 2897 "engines/director/lingo/lingo-gr.cpp"
+#line 2901 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101:
-#line 503 "engines/director/lingo/lingo-gr.y"
+#line 507 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lineToOf); }
-#line 2903 "engines/director/lingo/lingo-gr.cpp"
+#line 2907 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 102:
-#line 504 "engines/director/lingo/lingo-gr.y"
+#line 508 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_wordOf); }
-#line 2909 "engines/director/lingo/lingo-gr.cpp"
+#line 2913 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 103:
-#line 505 "engines/director/lingo/lingo-gr.y"
+#line 509 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_wordToOf); }
-#line 2915 "engines/director/lingo/lingo-gr.cpp"
+#line 2919 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 104:
-#line 507 "engines/director/lingo/lingo-gr.y"
+#line 511 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->codeFunc((yyvsp[-1].s), 1);
 		delete (yyvsp[-1].s); }
-#line 2923 "engines/director/lingo/lingo-gr.cpp"
+#line 2927 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 106:
-#line 512 "engines/director/lingo/lingo-gr.y"
+#line 516 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_printtop); }
-#line 2929 "engines/director/lingo/lingo-gr.cpp"
+#line 2933 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 109:
-#line 515 "engines/director/lingo/lingo-gr.y"
+#line 519 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_exitRepeat); }
-#line 2935 "engines/director/lingo/lingo-gr.cpp"
+#line 2939 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110:
-#line 516 "engines/director/lingo/lingo-gr.y"
+#line 520 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_procret); }
-#line 2941 "engines/director/lingo/lingo-gr.cpp"
+#line 2945 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111:
-#line 517 "engines/director/lingo/lingo-gr.y"
-                  { g_lingo->_indef = kStateInArgs; }
-#line 2947 "engines/director/lingo/lingo-gr.cpp"
+#line 521 "engines/director/lingo/lingo-gr.y"
+                  { inArgs(); }
+#line 2951 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112:
-#line 517 "engines/director/lingo/lingo-gr.y"
-                                                                 { g_lingo->_indef = kStateNone; }
-#line 2953 "engines/director/lingo/lingo-gr.cpp"
+#line 521 "engines/director/lingo/lingo-gr.y"
+                                           { inNone(); }
+#line 2957 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113:
-#line 518 "engines/director/lingo/lingo-gr.y"
-                    { g_lingo->_indef = kStateInArgs; }
-#line 2959 "engines/director/lingo/lingo-gr.cpp"
+#line 522 "engines/director/lingo/lingo-gr.y"
+                    { inArgs(); }
+#line 2963 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114:
-#line 518 "engines/director/lingo/lingo-gr.y"
-                                                                     { g_lingo->_indef = kStateNone; }
-#line 2965 "engines/director/lingo/lingo-gr.cpp"
+#line 522 "engines/director/lingo/lingo-gr.y"
+                                               { inNone(); }
+#line 2969 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115:
-#line 519 "engines/director/lingo/lingo-gr.y"
-                    { g_lingo->_indef = kStateInArgs; }
-#line 2971 "engines/director/lingo/lingo-gr.cpp"
+#line 523 "engines/director/lingo/lingo-gr.y"
+                    { inArgs(); }
+#line 2975 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 116:
-#line 519 "engines/director/lingo/lingo-gr.y"
-                                                                     { g_lingo->_indef = kStateNone; }
-#line 2977 "engines/director/lingo/lingo-gr.cpp"
+#line 523 "engines/director/lingo/lingo-gr.y"
+                                               { inNone(); }
+#line 2981 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117:
-#line 520 "engines/director/lingo/lingo-gr.y"
+#line 524 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2985 "engines/director/lingo/lingo-gr.cpp"
+#line 2989 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118:
-#line 523 "engines/director/lingo/lingo-gr.y"
+#line 527 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 2993 "engines/director/lingo/lingo-gr.cpp"
+#line 2997 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119:
-#line 526 "engines/director/lingo/lingo-gr.y"
+#line 530 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_open); }
-#line 2999 "engines/director/lingo/lingo-gr.cpp"
+#line 3003 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 120:
-#line 527 "engines/director/lingo/lingo-gr.y"
+#line 531 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code2(LC::c_voidpush, LC::c_open); }
-#line 3005 "engines/director/lingo/lingo-gr.cpp"
+#line 3009 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121:
-#line 529 "engines/director/lingo/lingo-gr.y"
+#line 533 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_global);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 3014 "engines/director/lingo/lingo-gr.cpp"
+#line 3018 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 122:
-#line 533 "engines/director/lingo/lingo-gr.y"
+#line 537 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_global);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 3023 "engines/director/lingo/lingo-gr.cpp"
+#line 3027 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 123:
-#line 538 "engines/director/lingo/lingo-gr.y"
+#line 542 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_property);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 3032 "engines/director/lingo/lingo-gr.cpp"
+#line 3036 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124:
-#line 542 "engines/director/lingo/lingo-gr.y"
+#line 546 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_property);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 3041 "engines/director/lingo/lingo-gr.cpp"
+#line 3045 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125:
-#line 547 "engines/director/lingo/lingo-gr.y"
+#line 551 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_instance);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 3050 "engines/director/lingo/lingo-gr.cpp"
+#line 3054 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126:
-#line 551 "engines/director/lingo/lingo-gr.y"
+#line 555 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_instance);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 3059 "engines/director/lingo/lingo-gr.cpp"
+#line 3063 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 127:
-#line 563 "engines/director/lingo/lingo-gr.y"
+#line 567 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoloop); }
-#line 3065 "engines/director/lingo/lingo-gr.cpp"
+#line 3069 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 128:
-#line 564 "engines/director/lingo/lingo-gr.y"
+#line 568 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_gotonext); }
-#line 3071 "engines/director/lingo/lingo-gr.cpp"
+#line 3075 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 129:
-#line 565 "engines/director/lingo/lingo-gr.y"
+#line 569 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoprevious); }
-#line 3077 "engines/director/lingo/lingo-gr.cpp"
+#line 3081 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 130:
-#line 566 "engines/director/lingo/lingo-gr.y"
+#line 570 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_goto); }
-#line 3086 "engines/director/lingo/lingo-gr.cpp"
+#line 3090 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 131:
-#line 570 "engines/director/lingo/lingo-gr.y"
+#line 574 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_goto); }
-#line 3095 "engines/director/lingo/lingo-gr.cpp"
+#line 3099 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 132:
-#line 574 "engines/director/lingo/lingo-gr.y"
+#line 578 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_goto); }
-#line 3104 "engines/director/lingo/lingo-gr.cpp"
+#line 3108 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 135:
-#line 582 "engines/director/lingo/lingo-gr.y"
+#line 586 "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 3113 "engines/director/lingo/lingo-gr.cpp"
+#line 3117 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 136:
-#line 586 "engines/director/lingo/lingo-gr.y"
+#line 590 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_play); }
-#line 3122 "engines/director/lingo/lingo-gr.cpp"
+#line 3126 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 137:
-#line 590 "engines/director/lingo/lingo-gr.y"
+#line 594 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_play); }
-#line 3131 "engines/director/lingo/lingo-gr.cpp"
+#line 3135 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 138:
-#line 594 "engines/director/lingo/lingo-gr.y"
+#line 598 "engines/director/lingo/lingo-gr.y"
                      { g_lingo->codeSetImmediate(true); }
-#line 3137 "engines/director/lingo/lingo-gr.cpp"
+#line 3141 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 139:
-#line 594 "engines/director/lingo/lingo-gr.y"
+#line 598 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeFunc((yyvsp[-2].s), (yyvsp[0].narg));
 		delete (yyvsp[-2].s); }
-#line 3146 "engines/director/lingo/lingo-gr.cpp"
+#line 3150 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 140:
-#line 624 "engines/director/lingo/lingo-gr.y"
-             { g_lingo->_indef = kStateInArgs; }
-#line 3152 "engines/director/lingo/lingo-gr.cpp"
+#line 628 "engines/director/lingo/lingo-gr.y"
+             { inArgs(); }
+#line 3156 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 141:
-#line 624 "engines/director/lingo/lingo-gr.y"
-                                                    { g_lingo->_currentFactory.clear(); }
-#line 3158 "engines/director/lingo/lingo-gr.cpp"
+#line 628 "engines/director/lingo/lingo-gr.y"
+                              { g_lingo->_currentFactory.clear(); }
+#line 3162 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 142:
-#line 625 "engines/director/lingo/lingo-gr.y"
+#line 629 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg));
 		g_lingo->clearArgStack();
-		g_lingo->_indef = kStateNone;
+		inNone();
 		delete (yyvsp[-6].s); }
-#line 3169 "engines/director/lingo/lingo-gr.cpp"
+#line 3173 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 143:
-#line 631 "engines/director/lingo/lingo-gr.y"
+#line 635 "engines/director/lingo/lingo-gr.y"
                         { g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 3175 "engines/director/lingo/lingo-gr.cpp"
+#line 3179 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 144:
-#line 632 "engines/director/lingo/lingo-gr.y"
-                  { g_lingo->_indef = kStateInArgs; }
-#line 3181 "engines/director/lingo/lingo-gr.cpp"
+#line 636 "engines/director/lingo/lingo-gr.y"
+                  { inArgs(); }
+#line 3185 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 145:
-#line 633 "engines/director/lingo/lingo-gr.y"
+#line 637 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg) + 1, &g_lingo->_currentFactory);
 		g_lingo->clearArgStack();
-		g_lingo->_indef = kStateNone;
+		inNone();
 		delete (yyvsp[-6].s); }
-#line 3192 "engines/director/lingo/lingo-gr.cpp"
+#line 3196 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 146:
-#line 639 "engines/director/lingo/lingo-gr.y"
+#line 643 "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));
 		g_lingo->clearArgStack();
-		g_lingo->_indef = kStateNone;
+		inNone();
 		g_lingo->_ignoreMe = false;
 
 		checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
 		delete (yyvsp[-7].s);
 		delete (yyvsp[-1].s); }
-#line 3207 "engines/director/lingo/lingo-gr.cpp"
+#line 3211 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 147:
-#line 649 "engines/director/lingo/lingo-gr.y"
+#line 653 "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));
-		g_lingo->_indef = kStateNone;
+		inNone();
 		g_lingo->clearArgStack();
 		g_lingo->_ignoreMe = false;
 		delete (yyvsp[-5].s); }
-#line 3219 "engines/director/lingo/lingo-gr.cpp"
+#line 3223 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 148:
-#line 657 "engines/director/lingo/lingo-gr.y"
-         { g_lingo->_indef = kStateInArgs; }
-#line 3225 "engines/director/lingo/lingo-gr.cpp"
+#line 661 "engines/director/lingo/lingo-gr.y"
+         { inArgs(); }
+#line 3229 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 149:
-#line 657 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
-#line 3231 "engines/director/lingo/lingo-gr.cpp"
+#line 661 "engines/director/lingo/lingo-gr.y"
+                          { (yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
+#line 3235 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 150:
-#line 659 "engines/director/lingo/lingo-gr.y"
+#line 663 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = 0; }
-#line 3237 "engines/director/lingo/lingo-gr.cpp"
+#line 3241 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 151:
-#line 660 "engines/director/lingo/lingo-gr.y"
+#line 664 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = 1; delete (yyvsp[0].s); }
-#line 3243 "engines/director/lingo/lingo-gr.cpp"
+#line 3247 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 152:
-#line 661 "engines/director/lingo/lingo-gr.y"
+#line 665 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
-#line 3249 "engines/director/lingo/lingo-gr.cpp"
+#line 3253 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 154:
-#line 664 "engines/director/lingo/lingo-gr.y"
+#line 668 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 3255 "engines/director/lingo/lingo-gr.cpp"
+#line 3259 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 155:
-#line 665 "engines/director/lingo/lingo-gr.y"
+#line 669 "engines/director/lingo/lingo-gr.y"
                                         { delete (yyvsp[0].s); }
-#line 3261 "engines/director/lingo/lingo-gr.cpp"
+#line 3265 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 156:
-#line 667 "engines/director/lingo/lingo-gr.y"
-                                        { g_lingo->codeArgStore(); g_lingo->_indef = kStateInDef; }
-#line 3267 "engines/director/lingo/lingo-gr.cpp"
+#line 671 "engines/director/lingo/lingo-gr.y"
+                                        { g_lingo->codeArgStore(); inDef(); }
+#line 3271 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 157:
-#line 669 "engines/director/lingo/lingo-gr.y"
+#line 673 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->code1(LC::c_call);
 		g_lingo->codeString((yyvsp[-1].s)->c_str());
@@ -3275,113 +3279,113 @@ yyreduce:
 		WRITE_UINT32(&numpar, (yyvsp[0].narg));
 		g_lingo->code1(numpar);
 		delete (yyvsp[-1].s); }
-#line 3279 "engines/director/lingo/lingo-gr.cpp"
+#line 3283 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 158:
-#line 677 "engines/director/lingo/lingo-gr.y"
+#line 681 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = 0; }
-#line 3285 "engines/director/lingo/lingo-gr.cpp"
+#line 3289 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 159:
-#line 678 "engines/director/lingo/lingo-gr.y"
+#line 682 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 3291 "engines/director/lingo/lingo-gr.cpp"
+#line 3295 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 160:
-#line 679 "engines/director/lingo/lingo-gr.y"
+#line 683 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3297 "engines/director/lingo/lingo-gr.cpp"
+#line 3301 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 161:
-#line 681 "engines/director/lingo/lingo-gr.y"
+#line 685 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3303 "engines/director/lingo/lingo-gr.cpp"
+#line 3307 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 162:
-#line 682 "engines/director/lingo/lingo-gr.y"
+#line 686 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3309 "engines/director/lingo/lingo-gr.cpp"
+#line 3313 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 163:
-#line 684 "engines/director/lingo/lingo-gr.y"
+#line 688 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = (yyvsp[-1].code); }
-#line 3315 "engines/director/lingo/lingo-gr.cpp"
+#line 3319 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 164:
-#line 686 "engines/director/lingo/lingo-gr.y"
+#line 690 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3321 "engines/director/lingo/lingo-gr.cpp"
+#line 3325 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 165:
-#line 687 "engines/director/lingo/lingo-gr.y"
+#line 691 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3327 "engines/director/lingo/lingo-gr.cpp"
+#line 3331 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 166:
-#line 688 "engines/director/lingo/lingo-gr.y"
+#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 3333 "engines/director/lingo/lingo-gr.cpp"
+#line 3337 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 167:
-#line 689 "engines/director/lingo/lingo-gr.y"
+#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 3339 "engines/director/lingo/lingo-gr.cpp"
+#line 3343 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 168:
-#line 691 "engines/director/lingo/lingo-gr.y"
+#line 695 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3345 "engines/director/lingo/lingo-gr.cpp"
+#line 3349 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 169:
-#line 692 "engines/director/lingo/lingo-gr.y"
+#line 696 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3351 "engines/director/lingo/lingo-gr.cpp"
+#line 3355 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 170:
-#line 694 "engines/director/lingo/lingo-gr.y"
+#line 698 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3357 "engines/director/lingo/lingo-gr.cpp"
+#line 3361 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 171:
-#line 695 "engines/director/lingo/lingo-gr.y"
+#line 699 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3363 "engines/director/lingo/lingo-gr.cpp"
+#line 3367 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 172:
-#line 697 "engines/director/lingo/lingo-gr.y"
+#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 3372 "engines/director/lingo/lingo-gr.cpp"
+#line 3376 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 173:
-#line 701 "engines/director/lingo/lingo-gr.y"
+#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 3381 "engines/director/lingo/lingo-gr.cpp"
+#line 3385 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3385 "engines/director/lingo/lingo-gr.cpp"
+#line 3389 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3580,7 +3584,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 707 "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.h b/engines/director/lingo/lingo-gr.h
index 77569e5f2b..7c603e767e 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -148,7 +148,7 @@ extern int yydebug;
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 89 "engines/director/lingo/lingo-gr.y"
+#line 93 "engines/director/lingo/lingo-gr.y"
 
 	Common::String *s;
 	int i;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 8803ceaf81..3c8fa2d9d5 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -70,12 +70,12 @@ extern bool lex_check_parens();
 
 using namespace Director;
 
-void yyerror(const char *s) {
+static void yyerror(const char *s) {
 	g_lingo->_hadError = true;
 	warning("######################  LINGO: %s at line %d col %d", s, g_lingo->_linenumber, g_lingo->_colnumber);
 }
 
-void checkEnd(Common::String *token, const char *expect, bool required) {
+static void checkEnd(Common::String *token, const char *expect, bool required) {
 	if (required) {
 		if (token->compareToIgnoreCase(expect)) {
 			Common::String err = Common::String::format("end mismatch. Expected %s but got %s", expect, token->c_str());
@@ -84,6 +84,10 @@ void checkEnd(Common::String *token, const char *expect, bool required) {
 	}
 }
 
+static void inArgs() { g_lingo->_indef = kStateInArgs; }
+static void inDef()  { g_lingo->_indef = kStateInDef; }
+static void inNone() { g_lingo->_indef = kStateNone; }
+
 %}
 
 %union {
@@ -514,9 +518,9 @@ proc: tPUT expr				{ g_lingo->code1(LC::c_printtop); }
 	| playfunc
 	| tEXIT tREPEAT			{ g_lingo->code1(LC::c_exitRepeat); }
 	| tEXIT					{ g_lingo->code1(LC::c_procret); }
-	| tGLOBAL { g_lingo->_indef = kStateInArgs; } globallist { g_lingo->_indef = kStateNone; }
-	| tPROPERTY { g_lingo->_indef = kStateInArgs; } propertylist { g_lingo->_indef = kStateNone; }
-	| tINSTANCE { g_lingo->_indef = kStateInArgs; } instancelist { g_lingo->_indef = kStateNone; }
+	| tGLOBAL { inArgs(); } globallist { inNone(); }
+	| tPROPERTY { inArgs(); } propertylist { inNone(); }
+	| tINSTANCE { inArgs(); } instancelist { inNone(); }
 	| BLTIN '(' arglist ')'			{
 		g_lingo->codeFunc($BLTIN, $arglist);
 		delete $BLTIN; }
@@ -621,26 +625,26 @@ playfunc: tPLAY expr 			{ // "play #done" is also caught by this
 //
 // See also:
 //   on keyword
-defn: tMACRO { g_lingo->_indef = kStateInArgs; } ID { g_lingo->_currentFactory.clear(); }
+defn: tMACRO { inArgs(); } ID { g_lingo->_currentFactory.clear(); }
 			begin argdef '\n' argstore stmtlist 		{
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*$ID, $begin, $argdef);
 		g_lingo->clearArgStack();
-		g_lingo->_indef = kStateNone;
+		inNone();
 		delete $ID; }
 	| tFACTORY ID	{ g_lingo->codeFactory(*$2); delete $ID; }
-	| tMETHOD { g_lingo->_indef = kStateInArgs; }
+	| tMETHOD { inArgs(); }
 			begin argdef '\n' argstore stmtlist 		{
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*$tMETHOD, $begin, $argdef + 1, &g_lingo->_currentFactory);
 		g_lingo->clearArgStack();
-		g_lingo->_indef = kStateNone;
+		inNone();
 		delete $tMETHOD; }
 	| on begin argdef '\n' argstore stmtlist ENDCLAUSE endargdef {	// D3
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*$on, $begin, $argdef);
 		g_lingo->clearArgStack();
-		g_lingo->_indef = kStateNone;
+		inNone();
 		g_lingo->_ignoreMe = false;
 
 		checkEnd($ENDCLAUSE, $on->c_str(), false);
@@ -649,12 +653,12 @@ defn: tMACRO { g_lingo->_indef = kStateInArgs; } ID { g_lingo->_currentFactory.c
 	| on begin argdef '\n' argstore stmtlist {	// D4. No 'end' clause
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*$on, $begin, $argdef);
-		g_lingo->_indef = kStateNone;
+		inNone();
 		g_lingo->clearArgStack();
 		g_lingo->_ignoreMe = false;
 		delete $on; }
 
-on:  tON { g_lingo->_indef = kStateInArgs; } ID { $$ = $ID; g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
+on:  tON { inArgs(); } ID { $$ = $ID; g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
 
 argdef:  /* nothing */ 		{ $$ = 0; }
 	| ID					{ g_lingo->codeArg($ID); $$ = 1; delete $ID; }
@@ -664,7 +668,7 @@ endargdef:	/* nothing */
 	| ID					{ delete $ID; }
 	| endargdef ',' ID		{ delete $ID; }
 
-argstore:	  /* nothing */		{ g_lingo->codeArgStore(); g_lingo->_indef = kStateInDef; }
+argstore:	  /* nothing */		{ g_lingo->codeArgStore(); inDef(); }
 
 macro: ID nonemptyarglist	{
 		g_lingo->code1(LC::c_call);


Commit: 1ecd174a62279d3134e937bba0e425c45009b400
    https://github.com/scummvm/scummvm/commit/1ecd174a62279d3134e937bba0e425c45009b400
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-05-20T01:28:02+02:00

Commit Message:
JANITORIAL: Tidy up grammar code alignment

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


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index dc7bbbc92b..11dce2b248 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -828,9 +828,9 @@ static const yytype_int16 yyrline[] =
      531,   533,   537,   542,   546,   551,   555,   567,   568,   569,
      570,   574,   578,   583,   584,   586,   590,   594,   598,   598,
      628,   628,   628,   635,   636,   636,   643,   653,   661,   661,
-     663,   664,   665,   667,   668,   669,   671,   673,   681,   682,
-     683,   685,   686,   688,   690,   691,   692,   693,   695,   696,
-     698,   699,   701,   705
+     664,   665,   666,   668,   669,   670,   672,   674,   682,   683,
+     684,   686,   687,   689,   691,   692,   693,   694,   696,   697,
+     699,   700,   702,   706
 };
 #endif
 
@@ -2848,73 +2848,73 @@ yyreduce:
 
   case 92:
 #line 497 "engines/director/lingo/lingo-gr.y"
-                                    { (yyval.code) = (yyvsp[0].code); }
+                                        { (yyval.code) = (yyvsp[0].code); }
 #line 2853 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93:
 #line 498 "engines/director/lingo/lingo-gr.y"
-                                    { (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
+                                        { (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
 #line 2859 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94:
 #line 499 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_intersects); }
+                                        { g_lingo->code1(LC::c_intersects); }
 #line 2865 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95:
 #line 500 "engines/director/lingo/lingo-gr.y"
-                                                        { g_lingo->code1(LC::c_within); }
+                                                { g_lingo->code1(LC::c_within); }
 #line 2871 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 96:
 #line 502 "engines/director/lingo/lingo-gr.y"
-                                                        { g_lingo->code1(LC::c_charOf); }
+                                                { g_lingo->code1(LC::c_charOf); }
 #line 2877 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97:
 #line 503 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_charToOf); }
+                                        { g_lingo->code1(LC::c_charToOf); }
 #line 2883 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98:
 #line 504 "engines/director/lingo/lingo-gr.y"
-                                                        { g_lingo->code1(LC::c_itemOf); }
+                                                { g_lingo->code1(LC::c_itemOf); }
 #line 2889 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99:
 #line 505 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_itemToOf); }
+                                        { g_lingo->code1(LC::c_itemToOf); }
 #line 2895 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 100:
 #line 506 "engines/director/lingo/lingo-gr.y"
-                                                        { g_lingo->code1(LC::c_lineOf); }
+                                                { g_lingo->code1(LC::c_lineOf); }
 #line 2901 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101:
 #line 507 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_lineToOf); }
+                                        { g_lingo->code1(LC::c_lineToOf); }
 #line 2907 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 102:
 #line 508 "engines/director/lingo/lingo-gr.y"
-                                                        { g_lingo->code1(LC::c_wordOf); }
+                                                { g_lingo->code1(LC::c_wordOf); }
 #line 2913 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 103:
 #line 509 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_wordToOf); }
+                                        { g_lingo->code1(LC::c_wordToOf); }
 #line 2919 "engines/director/lingo/lingo-gr.cpp"
     break;
 
@@ -2928,61 +2928,61 @@ yyreduce:
 
   case 106:
 #line 516 "engines/director/lingo/lingo-gr.y"
-                                        { g_lingo->code1(LC::c_printtop); }
+                                                { g_lingo->code1(LC::c_printtop); }
 #line 2933 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 109:
 #line 519 "engines/director/lingo/lingo-gr.y"
-                                        { g_lingo->code1(LC::c_exitRepeat); }
+                                                { g_lingo->code1(LC::c_exitRepeat); }
 #line 2939 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110:
 #line 520 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->code1(LC::c_procret); }
+                                                        { g_lingo->code1(LC::c_procret); }
 #line 2945 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111:
 #line 521 "engines/director/lingo/lingo-gr.y"
-                  { inArgs(); }
+                                                        { inArgs(); }
 #line 2951 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112:
 #line 521 "engines/director/lingo/lingo-gr.y"
-                                           { inNone(); }
+                                                                                 { inNone(); }
 #line 2957 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113:
 #line 522 "engines/director/lingo/lingo-gr.y"
-                    { inArgs(); }
+                                                        { inArgs(); }
 #line 2963 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114:
 #line 522 "engines/director/lingo/lingo-gr.y"
-                                               { inNone(); }
+                                                                                   { inNone(); }
 #line 2969 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115:
 #line 523 "engines/director/lingo/lingo-gr.y"
-                    { inArgs(); }
+                                                        { inArgs(); }
 #line 2975 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 116:
 #line 523 "engines/director/lingo/lingo-gr.y"
-                                               { inNone(); }
+                                                                                   { inNone(); }
 #line 2981 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117:
 #line 524 "engines/director/lingo/lingo-gr.y"
-                                                {
+                                        {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
 #line 2989 "engines/director/lingo/lingo-gr.cpp"
@@ -2990,7 +2990,7 @@ yyreduce:
 
   case 118:
 #line 527 "engines/director/lingo/lingo-gr.y"
-                                        {
+                                                {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
 #line 2997 "engines/director/lingo/lingo-gr.cpp"
@@ -2998,13 +2998,13 @@ yyreduce:
 
   case 119:
 #line 530 "engines/director/lingo/lingo-gr.y"
-                                { g_lingo->code1(LC::c_open); }
+                                        { g_lingo->code1(LC::c_open); }
 #line 3003 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 120:
 #line 531 "engines/director/lingo/lingo-gr.y"
-                                        { g_lingo->code2(LC::c_voidpush, LC::c_open); }
+                                                { g_lingo->code2(LC::c_voidpush, LC::c_open); }
 #line 3009 "engines/director/lingo/lingo-gr.cpp"
     break;
 
@@ -3082,7 +3082,7 @@ yyreduce:
 
   case 130:
 #line 570 "engines/director/lingo/lingo-gr.y"
-                                        {
+                                                        {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_goto); }
@@ -3091,7 +3091,7 @@ yyreduce:
 
   case 131:
 #line 574 "engines/director/lingo/lingo-gr.y"
-                                {
+                                        {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_goto); }
@@ -3118,7 +3118,7 @@ yyreduce:
 
   case 136:
 #line 590 "engines/director/lingo/lingo-gr.y"
-                                {
+                                        {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_play); }
@@ -3127,7 +3127,7 @@ yyreduce:
 
   case 137:
 #line 594 "engines/director/lingo/lingo-gr.y"
-                                                        {
+                                                {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_play); }
@@ -3142,7 +3142,7 @@ yyreduce:
 
   case 139:
 #line 598 "engines/director/lingo/lingo-gr.y"
-                                                                        {
+                                                                  {
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeFunc((yyvsp[-2].s), (yyvsp[0].narg));
 		delete (yyvsp[-2].s); }
@@ -3230,162 +3230,163 @@ yyreduce:
 
   case 149:
 #line 661 "engines/director/lingo/lingo-gr.y"
-                          { (yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
-#line 3235 "engines/director/lingo/lingo-gr.cpp"
+                                        {
+		(yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
+#line 3236 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 150:
-#line 663 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.narg) = 0; }
-#line 3241 "engines/director/lingo/lingo-gr.cpp"
+#line 664 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.narg) = 0; }
+#line 3242 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 151:
-#line 664 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = 1; delete (yyvsp[0].s); }
-#line 3247 "engines/director/lingo/lingo-gr.cpp"
+#line 665 "engines/director/lingo/lingo-gr.y"
+                                                        { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = 1; delete (yyvsp[0].s); }
+#line 3248 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 152:
-#line 665 "engines/director/lingo/lingo-gr.y"
-                                        { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
-#line 3253 "engines/director/lingo/lingo-gr.cpp"
+#line 666 "engines/director/lingo/lingo-gr.y"
+                                                { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
+#line 3254 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 154:
-#line 668 "engines/director/lingo/lingo-gr.y"
-                                                { delete (yyvsp[0].s); }
-#line 3259 "engines/director/lingo/lingo-gr.cpp"
+#line 669 "engines/director/lingo/lingo-gr.y"
+                                                        { delete (yyvsp[0].s); }
+#line 3260 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 155:
-#line 669 "engines/director/lingo/lingo-gr.y"
-                                        { delete (yyvsp[0].s); }
-#line 3265 "engines/director/lingo/lingo-gr.cpp"
+#line 670 "engines/director/lingo/lingo-gr.y"
+                                                { delete (yyvsp[0].s); }
+#line 3266 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 156:
-#line 671 "engines/director/lingo/lingo-gr.y"
+#line 672 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->codeArgStore(); inDef(); }
-#line 3271 "engines/director/lingo/lingo-gr.cpp"
+#line 3272 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 157:
-#line 673 "engines/director/lingo/lingo-gr.y"
-                                {
+#line 674 "engines/director/lingo/lingo-gr.y"
+                                        {
 		g_lingo->code1(LC::c_call);
 		g_lingo->codeString((yyvsp[-1].s)->c_str());
 		inst numpar = 0;
 		WRITE_UINT32(&numpar, (yyvsp[0].narg));
 		g_lingo->code1(numpar);
 		delete (yyvsp[-1].s); }
-#line 3283 "engines/director/lingo/lingo-gr.cpp"
+#line 3284 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 158:
-#line 681 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.narg) = 0; }
-#line 3289 "engines/director/lingo/lingo-gr.cpp"
+#line 682 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.narg) = 0; }
+#line 3290 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 159:
-#line 682 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.narg) = 1; }
-#line 3295 "engines/director/lingo/lingo-gr.cpp"
+#line 683 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.narg) = 1; }
+#line 3296 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 160:
-#line 683 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3301 "engines/director/lingo/lingo-gr.cpp"
+#line 684 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.narg) = (yyvsp[-2].narg) + 1; }
+#line 3302 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 161:
-#line 685 "engines/director/lingo/lingo-gr.y"
+#line 686 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3307 "engines/director/lingo/lingo-gr.cpp"
+#line 3308 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 162:
-#line 686 "engines/director/lingo/lingo-gr.y"
+#line 687 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3313 "engines/director/lingo/lingo-gr.cpp"
+#line 3314 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 163:
-#line 688 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.code) = (yyvsp[-1].code); }
-#line 3319 "engines/director/lingo/lingo-gr.cpp"
+#line 689 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.code) = (yyvsp[-1].code); }
+#line 3320 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 164:
-#line 690 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3325 "engines/director/lingo/lingo-gr.cpp"
+#line 691 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
+#line 3326 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 165:
-#line 691 "engines/director/lingo/lingo-gr.y"
-                                                { (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3331 "engines/director/lingo/lingo-gr.cpp"
+#line 692 "engines/director/lingo/lingo-gr.y"
+                                                        { (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
+#line 3332 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 166:
-#line 692 "engines/director/lingo/lingo-gr.y"
+#line 693 "engines/director/lingo/lingo-gr.y"
                      { (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3337 "engines/director/lingo/lingo-gr.cpp"
+#line 3338 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 167:
-#line 693 "engines/director/lingo/lingo-gr.y"
+#line 694 "engines/director/lingo/lingo-gr.y"
                          { (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3343 "engines/director/lingo/lingo-gr.cpp"
+#line 3344 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 168:
-#line 695 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.narg) = 1; }
-#line 3349 "engines/director/lingo/lingo-gr.cpp"
+#line 696 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.narg) = 1; }
+#line 3350 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 169:
-#line 696 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3355 "engines/director/lingo/lingo-gr.cpp"
+#line 697 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.narg) = (yyvsp[-2].narg) + 1; }
+#line 3356 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 170:
-#line 698 "engines/director/lingo/lingo-gr.y"
-                                        { (yyval.narg) = 1; }
-#line 3361 "engines/director/lingo/lingo-gr.cpp"
+#line 699 "engines/director/lingo/lingo-gr.y"
+                                                { (yyval.narg) = 1; }
+#line 3362 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 171:
-#line 699 "engines/director/lingo/lingo-gr.y"
-                                { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3367 "engines/director/lingo/lingo-gr.cpp"
+#line 700 "engines/director/lingo/lingo-gr.y"
+                                        { (yyval.narg) = (yyvsp[-2].narg) + 1; }
+#line 3368 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 172:
-#line 701 "engines/director/lingo/lingo-gr.y"
+#line 702 "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 3376 "engines/director/lingo/lingo-gr.cpp"
+#line 3377 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 173:
-#line 705 "engines/director/lingo/lingo-gr.y"
-                                {
+#line 706 "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 3385 "engines/director/lingo/lingo-gr.cpp"
+#line 3386 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3389 "engines/director/lingo/lingo-gr.cpp"
+#line 3390 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3584,7 +3585,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 711 "engines/director/lingo/lingo-gr.y"
+#line 712 "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 3c8fa2d9d5..d90ed19b0a 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -494,41 +494,41 @@ expr: simpleexpr { $$ = $simpleexpr; }
 	| expr tCONCAT expr			{ g_lingo->code1(LC::c_concat); }
 	| expr tCONTAINS expr		{ g_lingo->code1(LC::c_contains); }
 	| expr tSTARTS expr			{ g_lingo->code1(LC::c_starts); }
-	| '+' expr[arg]  %prec UNARY{ $$ = $arg; }
-	| '-' expr[arg]  %prec UNARY{ $$ = $arg; g_lingo->code1(LC::c_negate); }
-	| tSPRITE expr tINTERSECTS expr 	{ g_lingo->code1(LC::c_intersects); }
-	| tSPRITE expr tWITHIN expr		 	{ g_lingo->code1(LC::c_within); }
-
-chunkexpr: 	tCHAR expr tOF expr			{ g_lingo->code1(LC::c_charOf); }
-	| tCHAR expr tTO expr tOF expr		{ g_lingo->code1(LC::c_charToOf); }
-	| tITEM expr tOF expr				{ g_lingo->code1(LC::c_itemOf); }
-	| tITEM expr tTO expr tOF expr		{ g_lingo->code1(LC::c_itemToOf); }
-	| tLINE expr tOF expr				{ g_lingo->code1(LC::c_lineOf); }
-	| tLINE expr tTO expr tOF expr		{ g_lingo->code1(LC::c_lineToOf); }
-	| tWORD expr tOF expr				{ g_lingo->code1(LC::c_wordOf); }
-	| tWORD expr tTO expr tOF expr		{ g_lingo->code1(LC::c_wordToOf); }
+	| '+' expr[arg]  %prec UNARY	{ $$ = $arg; }
+	| '-' expr[arg]  %prec UNARY	{ $$ = $arg; g_lingo->code1(LC::c_negate); }
+	| tSPRITE expr tINTERSECTS expr { g_lingo->code1(LC::c_intersects); }
+	| tSPRITE expr tWITHIN expr		{ g_lingo->code1(LC::c_within); }
+
+chunkexpr: 	tCHAR expr tOF expr		{ g_lingo->code1(LC::c_charOf); }
+	| tCHAR expr tTO expr tOF expr	{ g_lingo->code1(LC::c_charToOf); }
+	| tITEM expr tOF expr			{ g_lingo->code1(LC::c_itemOf); }
+	| tITEM expr tTO expr tOF expr	{ g_lingo->code1(LC::c_itemToOf); }
+	| tLINE expr tOF expr			{ g_lingo->code1(LC::c_lineOf); }
+	| tLINE expr tTO expr tOF expr	{ g_lingo->code1(LC::c_lineToOf); }
+	| tWORD expr tOF expr			{ g_lingo->code1(LC::c_wordOf); }
+	| tWORD expr tTO expr tOF expr	{ g_lingo->code1(LC::c_wordToOf); }
 
 reference: 	RBLTIN simpleexpr	{
 		g_lingo->codeFunc($RBLTIN, 1);
 		delete $RBLTIN; }
 	| chunkexpr
 
-proc: tPUT expr				{ g_lingo->code1(LC::c_printtop); }
+proc: tPUT expr					{ g_lingo->code1(LC::c_printtop); }
 	| gotofunc
 	| playfunc
-	| tEXIT tREPEAT			{ g_lingo->code1(LC::c_exitRepeat); }
-	| tEXIT					{ g_lingo->code1(LC::c_procret); }
-	| tGLOBAL { inArgs(); } globallist { inNone(); }
-	| tPROPERTY { inArgs(); } propertylist { inNone(); }
-	| tINSTANCE { inArgs(); } instancelist { inNone(); }
-	| BLTIN '(' arglist ')'			{
+	| tEXIT tREPEAT				{ g_lingo->code1(LC::c_exitRepeat); }
+	| tEXIT						{ g_lingo->code1(LC::c_procret); }
+	| tGLOBAL					{ inArgs(); } globallist { inNone(); }
+	| tPROPERTY					{ inArgs(); } propertylist { inNone(); }
+	| tINSTANCE					{ inArgs(); } instancelist { inNone(); }
+	| BLTIN '(' arglist ')'		{
 		g_lingo->codeFunc($BLTIN, $arglist);
 		delete $BLTIN; }
-	| BLTIN arglist			{
+	| BLTIN arglist				{
 		g_lingo->codeFunc($BLTIN, $arglist);
 		delete $BLTIN; }
-	| tOPEN expr tWITH expr	{ g_lingo->code1(LC::c_open); }
-	| tOPEN expr 			{ g_lingo->code2(LC::c_voidpush, LC::c_open); }
+	| tOPEN expr tWITH expr		{ g_lingo->code1(LC::c_open); }
+	| tOPEN expr 				{ g_lingo->code2(LC::c_voidpush, LC::c_open); }
 
 globallist: ID					{
 		g_lingo->code1(LC::c_global);
@@ -567,11 +567,11 @@ instancelist: ID				{
 gotofunc: tGO tLOOP				{ g_lingo->code1(LC::c_gotoloop); }
 	| tGO tNEXT					{ g_lingo->code1(LC::c_gotonext); }
 	| tGO tPREVIOUS				{ g_lingo->code1(LC::c_gotoprevious); }
-	| tGO expr 			{
+	| tGO expr 					{
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_goto); }
-	| tGO expr gotomovie	{
+	| tGO expr gotomovie		{
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_goto); }
@@ -587,15 +587,15 @@ playfunc: tPLAY expr 			{ // "play #done" is also caught by this
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_play); }
-	| tPLAY expr gotomovie	{
+	| tPLAY expr gotomovie		{
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_play); }
-	| tPLAY gotomovie				{
+	| tPLAY gotomovie			{
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_play); }
-	| tPLAYACCEL { g_lingo->codeSetImmediate(true); } arglist	{
+	| tPLAYACCEL { g_lingo->codeSetImmediate(true); } arglist {
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeFunc($tPLAYACCEL, $arglist);
 		delete $tPLAYACCEL; }
@@ -658,19 +658,20 @@ defn: tMACRO { inArgs(); } ID { g_lingo->_currentFactory.clear(); }
 		g_lingo->_ignoreMe = false;
 		delete $on; }
 
-on:  tON { inArgs(); } ID { $$ = $ID; g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
+on:  tON { inArgs(); } ID 		{
+		$$ = $ID; g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
 
-argdef:  /* nothing */ 		{ $$ = 0; }
-	| ID					{ g_lingo->codeArg($ID); $$ = 1; delete $ID; }
-	| argdef ',' ID			{ g_lingo->codeArg($ID); $$ = $1 + 1; delete $ID; }
+argdef:  /* nothing */ 			{ $$ = 0; }
+	| ID						{ g_lingo->codeArg($ID); $$ = 1; delete $ID; }
+	| argdef ',' ID				{ g_lingo->codeArg($ID); $$ = $1 + 1; delete $ID; }
 
 endargdef:	/* nothing */
-	| ID					{ delete $ID; }
-	| endargdef ',' ID		{ delete $ID; }
+	| ID						{ delete $ID; }
+	| endargdef ',' ID			{ delete $ID; }
 
 argstore:	  /* nothing */		{ g_lingo->codeArgStore(); inDef(); }
 
-macro: ID nonemptyarglist	{
+macro: ID nonemptyarglist		{
 		g_lingo->code1(LC::c_call);
 		g_lingo->codeString($ID->c_str());
 		inst numpar = 0;
@@ -678,31 +679,31 @@ macro: ID nonemptyarglist	{
 		g_lingo->code1(numpar);
 		delete $ID; }
 
-arglist:  /* nothing */ 	{ $$ = 0; }
-	| expr					{ $$ = 1; }
-	| arglist ',' expr		{ $$ = $1 + 1; }
+arglist:  /* nothing */ 		{ $$ = 0; }
+	| expr						{ $$ = 1; }
+	| arglist ',' expr			{ $$ = $1 + 1; }
 
 nonemptyarglist:  expr			{ $$ = 1; }
 	| nonemptyarglist ',' expr	{ $$ = $1 + 1; }
 
-list: '[' valuelist ']'		{ $$ = $valuelist; }
+list: '[' valuelist ']'			{ $$ = $valuelist; }
 
-valuelist:	/* nothing */	{ $$ = g_lingo->code2(LC::c_arraypush, 0); }
-	| ':'					{ $$ = g_lingo->code2(LC::c_proparraypush, 0); }
+valuelist:	/* nothing */		{ $$ = g_lingo->code2(LC::c_arraypush, 0); }
+	| ':'						{ $$ = g_lingo->code2(LC::c_proparraypush, 0); }
 	| linearlist { $$ = g_lingo->code1(LC::c_arraypush); $$ = g_lingo->codeInt($linearlist); }
 	| proplist	 { $$ = g_lingo->code1(LC::c_proparraypush); $$ = g_lingo->codeInt($proplist); }
 
-linearlist: expr			{ $$ = 1; }
-	| linearlist ',' expr	{ $$ = $1 + 1; }
+linearlist: expr				{ $$ = 1; }
+	| linearlist ',' expr		{ $$ = $1 + 1; }
 
-proplist:  proppair			{ $$ = 1; }
-	| proplist ',' proppair	{ $$ = $1 + 1; }
+proplist:  proppair				{ $$ = 1; }
+	| proplist ',' proppair		{ $$ = $1 + 1; }
 
 proppair: SYMBOL ':' simpleexpr {
 		g_lingo->code1(LC::c_symbolpush);
 		g_lingo->codeString($SYMBOL->c_str());
 		delete $SYMBOL; }
-	| STRING ':' simpleexpr {
+	| STRING ':' simpleexpr 	{
 		g_lingo->code1(LC::c_stringpush);
 		g_lingo->codeString($STRING->c_str());
 		delete $STRING; }


Commit: 4fe97f71bcbb1e58c13e3f28d2ef5eb50e0862ea
    https://github.com/scummvm/scummvm/commit/4fe97f71bcbb1e58c13e3f28d2ef5eb50e0862ea
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-05-20T01:28:02+02:00

Commit Message:
DIRECTOR: LINGO: Mark beginning and end of method definition state

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


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 11dce2b248..29a8d850c2 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -105,8 +105,15 @@ static void inArgs() { g_lingo->_indef = kStateInArgs; }
 static void inDef()  { g_lingo->_indef = kStateInDef; }
 static void inNone() { g_lingo->_indef = kStateNone; }
 
+static void startDef() { inArgs(); }
+static void endDef() {
+	g_lingo->clearArgStack();
+	inNone();
+	g_lingo->_ignoreMe = false;
+}
+
 
-#line 110 "engines/director/lingo/lingo-gr.cpp"
+#line 117 "engines/director/lingo/lingo-gr.cpp"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -244,7 +251,7 @@ extern int yydebug;
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 93 "engines/director/lingo/lingo-gr.y"
+#line 100 "engines/director/lingo/lingo-gr.y"
 
 	Common::String *s;
 	int i;
@@ -264,7 +271,7 @@ union YYSTYPE
 		Common::String *field;
 	} objectref;
 
-#line 268 "engines/director/lingo/lingo-gr.cpp"
+#line 275 "engines/director/lingo/lingo-gr.cpp"
 
 };
 typedef union YYSTYPE YYSTYPE;
@@ -813,24 +820,24 @@ static const yytype_int8 yytranslate[] =
   /* YYRLINEYYN -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   148,   148,   149,   151,   152,   153,   155,   161,   165,
-     176,   177,   178,   184,   191,   197,   204,   210,   217,   228,
-     235,   236,   237,   239,   240,   241,   242,   244,   245,   250,
-     261,   278,   290,   301,   303,   308,   312,   317,   321,   331,
-     342,   343,   345,   352,   362,   373,   375,   381,   387,   394,
-     396,   398,   399,   400,   402,   408,   411,   414,   418,   422,
-     426,   434,   435,   436,   447,   448,   449,   452,   455,   458,
-     461,   467,   472,   478,   479,   480,   481,   482,   483,   484,
-     485,   486,   487,   488,   489,   490,   491,   492,   493,   494,
-     495,   496,   497,   498,   499,   500,   502,   503,   504,   505,
-     506,   507,   508,   509,   511,   514,   516,   517,   518,   519,
-     520,   521,   521,   522,   522,   523,   523,   524,   527,   530,
-     531,   533,   537,   542,   546,   551,   555,   567,   568,   569,
-     570,   574,   578,   583,   584,   586,   590,   594,   598,   598,
-     628,   628,   628,   635,   636,   636,   643,   653,   661,   661,
-     664,   665,   666,   668,   669,   670,   672,   674,   682,   683,
-     684,   686,   687,   689,   691,   692,   693,   694,   696,   697,
-     699,   700,   702,   706
+       0,   155,   155,   156,   158,   159,   160,   162,   168,   172,
+     183,   184,   185,   191,   198,   204,   211,   217,   224,   235,
+     242,   243,   244,   246,   247,   248,   249,   251,   252,   257,
+     268,   285,   297,   308,   310,   315,   319,   324,   328,   338,
+     349,   350,   352,   359,   369,   380,   382,   388,   394,   401,
+     403,   405,   406,   407,   409,   415,   418,   421,   425,   429,
+     433,   441,   442,   443,   454,   455,   456,   459,   462,   465,
+     468,   474,   479,   485,   486,   487,   488,   489,   490,   491,
+     492,   493,   494,   495,   496,   497,   498,   499,   500,   501,
+     502,   503,   504,   505,   506,   507,   509,   510,   511,   512,
+     513,   514,   515,   516,   518,   521,   523,   524,   525,   526,
+     527,   528,   528,   529,   529,   530,   530,   531,   534,   537,
+     538,   540,   544,   549,   553,   558,   562,   574,   575,   576,
+     577,   581,   585,   590,   591,   593,   597,   601,   605,   605,
+     635,   635,   635,   641,   642,   642,   648,   656,   662,   662,
+     665,   666,   667,   669,   670,   671,   673,   675,   683,   684,
+     685,   687,   688,   690,   692,   693,   694,   695,   697,   698,
+     700,   701,   703,   707
 };
 #endif
 
@@ -1858,81 +1865,81 @@ yydestruct (const char *yymsg,
   switch (yykind)
     {
     case 22: /* BLTIN  */
-#line 143 "engines/director/lingo/lingo-gr.y"
+#line 150 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1864 "engines/director/lingo/lingo-gr.cpp"
+#line 1871 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 23: /* FBLTIN  */
-#line 143 "engines/director/lingo/lingo-gr.y"
+#line 150 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1870 "engines/director/lingo/lingo-gr.cpp"
+#line 1877 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 24: /* RBLTIN  */
-#line 143 "engines/director/lingo/lingo-gr.y"
+#line 150 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1876 "engines/director/lingo/lingo-gr.cpp"
+#line 1883 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 25: /* THEFBLTIN  */
-#line 143 "engines/director/lingo/lingo-gr.y"
+#line 150 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1882 "engines/director/lingo/lingo-gr.cpp"
+#line 1889 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 26: /* ID  */
-#line 143 "engines/director/lingo/lingo-gr.y"
+#line 150 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1888 "engines/director/lingo/lingo-gr.cpp"
+#line 1895 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 27: /* STRING  */
-#line 143 "engines/director/lingo/lingo-gr.y"
+#line 150 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1894 "engines/director/lingo/lingo-gr.cpp"
+#line 1901 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 28: /* HANDLER  */
-#line 143 "engines/director/lingo/lingo-gr.y"
+#line 150 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1900 "engines/director/lingo/lingo-gr.cpp"
+#line 1907 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 29: /* SYMBOL  */
-#line 143 "engines/director/lingo/lingo-gr.y"
+#line 150 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1906 "engines/director/lingo/lingo-gr.cpp"
+#line 1913 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 30: /* ENDCLAUSE  */
-#line 143 "engines/director/lingo/lingo-gr.y"
+#line 150 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1912 "engines/director/lingo/lingo-gr.cpp"
+#line 1919 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 31: /* tPLAYACCEL  */
-#line 143 "engines/director/lingo/lingo-gr.y"
+#line 150 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1918 "engines/director/lingo/lingo-gr.cpp"
+#line 1925 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 32: /* tMETHOD  */
-#line 143 "engines/director/lingo/lingo-gr.y"
+#line 150 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1924 "engines/director/lingo/lingo-gr.cpp"
+#line 1931 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 33: /* THEOBJECTFIELD  */
-#line 144 "engines/director/lingo/lingo-gr.y"
+#line 151 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).objectfield).os; }
-#line 1930 "engines/director/lingo/lingo-gr.cpp"
+#line 1937 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 143: /* on  */
-#line 143 "engines/director/lingo/lingo-gr.y"
+#line 150 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1936 "engines/director/lingo/lingo-gr.cpp"
+#line 1943 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2211,26 +2218,26 @@ yyreduce:
   switch (yyn)
     {
   case 7:
-#line 155 "engines/director/lingo/lingo-gr.y"
+#line 162 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code);
 		delete (yyvsp[0].s); }
-#line 2222 "engines/director/lingo/lingo-gr.cpp"
+#line 2229 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 8:
-#line 161 "engines/director/lingo/lingo-gr.y"
+#line 168 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code); }
-#line 2230 "engines/director/lingo/lingo-gr.cpp"
+#line 2237 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 9:
-#line 165 "engines/director/lingo/lingo-gr.y"
+#line 172 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
 			warning("LEXER: keyword 'menu' expected");
@@ -2242,34 +2249,34 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-4].e)[1]);
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2246 "engines/director/lingo/lingo-gr.cpp"
+#line 2253 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10:
-#line 176 "engines/director/lingo/lingo-gr.y"
+#line 183 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code1(LC::c_after); }
-#line 2252 "engines/director/lingo/lingo-gr.cpp"
+#line 2259 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11:
-#line 177 "engines/director/lingo/lingo-gr.y"
+#line 184 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code1(LC::c_before); }
-#line 2258 "engines/director/lingo/lingo-gr.cpp"
+#line 2265 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12:
-#line 178 "engines/director/lingo/lingo-gr.y"
+#line 185 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2269 "engines/director/lingo/lingo-gr.cpp"
+#line 2276 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13:
-#line 184 "engines/director/lingo/lingo-gr.y"
+#line 191 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2277,22 +2284,22 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2281 "engines/director/lingo/lingo-gr.cpp"
+#line 2288 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 14:
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 198 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2292 "engines/director/lingo/lingo-gr.cpp"
+#line 2299 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15:
-#line 197 "engines/director/lingo/lingo-gr.y"
+#line 204 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2300,33 +2307,33 @@ 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 2311 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16:
-#line 204 "engines/director/lingo/lingo-gr.y"
+#line 211 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_swap);
 		g_lingo->code1(LC::c_theentityassign);
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2315 "engines/director/lingo/lingo-gr.cpp"
+#line 2322 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17:
-#line 210 "engines/director/lingo/lingo-gr.y"
+#line 217 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_swap);
 		g_lingo->code1(LC::c_theentityassign);
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2326 "engines/director/lingo/lingo-gr.cpp"
+#line 2333 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 18:
-#line 217 "engines/director/lingo/lingo-gr.y"
+#line 224 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
 			warning("LEXER: keyword 'menu' expected");
@@ -2338,33 +2345,33 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-6].e)[0]);
 		g_lingo->codeInt((yyvsp[-6].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2342 "engines/director/lingo/lingo-gr.cpp"
+#line 2349 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19:
-#line 228 "engines/director/lingo/lingo-gr.y"
+#line 235 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_objectfieldassign);
 		g_lingo->codeString((yyvsp[-2].objectfield).os->c_str());
 		g_lingo->codeInt((yyvsp[-2].objectfield).oe);
 		delete (yyvsp[-2].objectfield).os;
 		(yyval.code) = (yyvsp[0].code); }
-#line 2353 "engines/director/lingo/lingo-gr.cpp"
+#line 2360 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29:
-#line 250 "engines/director/lingo/lingo-gr.y"
+#line 257 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		inst body = 0, end = 0;
 		WRITE_UINT32(&body, (yyvsp[-3].code) - (yyvsp[-5].code));
 		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-5].code));
 		(*g_lingo->_currentScript)[(yyvsp[-5].code) + 1] = body;	/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-5].code) + 2] = end; }
-#line 2364 "engines/director/lingo/lingo-gr.cpp"
+#line 2371 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30:
-#line 261 "engines/director/lingo/lingo-gr.y"
+#line 268 "engines/director/lingo/lingo-gr.y"
                                                                                                  {
 		inst init = 0, finish = 0, body = 0, end = 0, inc = 0;
 		WRITE_UINT32(&init, (yyvsp[-8].code) - (yyvsp[-10].code));
@@ -2377,11 +2384,11 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 3] = body;		/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 4] = inc;		/* increment */
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 5] = end; }
-#line 2381 "engines/director/lingo/lingo-gr.cpp"
+#line 2388 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31:
-#line 278 "engines/director/lingo/lingo-gr.y"
+#line 285 "engines/director/lingo/lingo-gr.y"
                                                                                                        {
 		inst init = 0, finish = 0, body = 0, end = 0, inc = 0;
 		WRITE_UINT32(&init, (yyvsp[-9].code) - (yyvsp[-11].code));
@@ -2394,11 +2401,11 @@ 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 2398 "engines/director/lingo/lingo-gr.cpp"
+#line 2405 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32:
-#line 290 "engines/director/lingo/lingo-gr.y"
+#line 297 "engines/director/lingo/lingo-gr.y"
                                                                             {
 		inst list = 0, body = 0, end = 0;
 		WRITE_UINT32(&list, (yyvsp[-5].code) - (yyvsp[-7].code));
@@ -2409,54 +2416,54 @@ 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 2413 "engines/director/lingo/lingo-gr.cpp"
+#line 2420 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33:
-#line 301 "engines/director/lingo/lingo-gr.y"
+#line 308 "engines/director/lingo/lingo-gr.y"
                         {
 		g_lingo->code1(LC::c_nextRepeat); }
-#line 2420 "engines/director/lingo/lingo-gr.cpp"
+#line 2427 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34:
-#line 303 "engines/director/lingo/lingo-gr.y"
+#line 310 "engines/director/lingo/lingo-gr.y"
                                       {
 		inst end = 0;
 		WRITE_UINT32(&end, (yyvsp[0].code) - (yyvsp[-2].code));
 		g_lingo->code1(STOP);
 		(*g_lingo->_currentScript)[(yyvsp[-2].code) + 1] = end; }
-#line 2430 "engines/director/lingo/lingo-gr.cpp"
+#line 2437 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35:
-#line 308 "engines/director/lingo/lingo-gr.y"
+#line 315 "engines/director/lingo/lingo-gr.y"
                                                           {
 		inst end;
 		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-3].code));
 		(*g_lingo->_currentScript)[(yyvsp[-3].code) + 1] = end; }
-#line 2439 "engines/director/lingo/lingo-gr.cpp"
+#line 2446 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36:
-#line 312 "engines/director/lingo/lingo-gr.y"
+#line 319 "engines/director/lingo/lingo-gr.y"
                                                     {
 		inst end;
 		WRITE_UINT32(&end, (yyvsp[0].code) - (yyvsp[-2].code));
 		(*g_lingo->_currentScript)[(yyvsp[-2].code) + 1] = end; }
-#line 2448 "engines/director/lingo/lingo-gr.cpp"
+#line 2455 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37:
-#line 317 "engines/director/lingo/lingo-gr.y"
+#line 324 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.code) = g_lingo->code1(LC::c_tellcode);
 		g_lingo->code1(STOP); }
-#line 2456 "engines/director/lingo/lingo-gr.cpp"
+#line 2463 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38:
-#line 321 "engines/director/lingo/lingo-gr.y"
+#line 328 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-6].code) - (yyvsp[-8].code));
@@ -2467,11 +2474,11 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-8].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-8].code), (yyvsp[-1].code) - (yyvsp[-8].code), 0); }
-#line 2471 "engines/director/lingo/lingo-gr.cpp"
+#line 2478 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39:
-#line 331 "engines/director/lingo/lingo-gr.y"
+#line 338 "engines/director/lingo/lingo-gr.y"
                                                                                                               {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-9].code) - (yyvsp[-11].code));
@@ -2482,22 +2489,22 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-11].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-11].code), (yyvsp[-1].code) - (yyvsp[-11].code), (yyvsp[-3].code) - (yyvsp[-11].code)); }
-#line 2486 "engines/director/lingo/lingo-gr.cpp"
+#line 2493 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42:
-#line 345 "engines/director/lingo/lingo-gr.y"
+#line 352 "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 2497 "engines/director/lingo/lingo-gr.cpp"
+#line 2504 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43:
-#line 352 "engines/director/lingo/lingo-gr.y"
+#line 359 "engines/director/lingo/lingo-gr.y"
                                                                                                          {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-8].code) - (yyvsp[-10].code));
@@ -2508,11 +2515,11 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-10].code), (yyvsp[-1].code) - (yyvsp[-10].code), (yyvsp[-3].code) - (yyvsp[-10].code)); }
-#line 2512 "engines/director/lingo/lingo-gr.cpp"
+#line 2519 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44:
-#line 362 "engines/director/lingo/lingo-gr.y"
+#line 369 "engines/director/lingo/lingo-gr.y"
                                                                    {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-4].code) - (yyvsp[-6].code));
@@ -2523,119 +2530,119 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-6].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-6].code), (yyvsp[-1].code) - (yyvsp[-6].code), (yyvsp[-1].code) - (yyvsp[-6].code)); }
-#line 2527 "engines/director/lingo/lingo-gr.cpp"
+#line 2534 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45:
-#line 373 "engines/director/lingo/lingo-gr.y"
+#line 380 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = g_lingo->code3(LC::c_repeatwhilecode, STOP, STOP); }
-#line 2533 "engines/director/lingo/lingo-gr.cpp"
+#line 2540 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46:
-#line 375 "engines/director/lingo/lingo-gr.y"
+#line 382 "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 2543 "engines/director/lingo/lingo-gr.cpp"
+#line 2550 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47:
-#line 381 "engines/director/lingo/lingo-gr.y"
+#line 388 "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 2553 "engines/director/lingo/lingo-gr.cpp"
+#line 2560 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48:
-#line 387 "engines/director/lingo/lingo-gr.y"
+#line 394 "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 2564 "engines/director/lingo/lingo-gr.cpp"
+#line 2571 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49:
-#line 394 "engines/director/lingo/lingo-gr.y"
+#line 401 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2570 "engines/director/lingo/lingo-gr.cpp"
+#line 2577 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50:
-#line 396 "engines/director/lingo/lingo-gr.y"
+#line 403 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2576 "engines/director/lingo/lingo-gr.cpp"
+#line 2583 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51:
-#line 398 "engines/director/lingo/lingo-gr.y"
+#line 405 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2582 "engines/director/lingo/lingo-gr.cpp"
+#line 2589 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54:
-#line 402 "engines/director/lingo/lingo-gr.y"
+#line 409 "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 2592 "engines/director/lingo/lingo-gr.cpp"
+#line 2599 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55:
-#line 408 "engines/director/lingo/lingo-gr.y"
+#line 415 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt((yyvsp[0].i)); }
-#line 2600 "engines/director/lingo/lingo-gr.cpp"
+#line 2607 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56:
-#line 411 "engines/director/lingo/lingo-gr.y"
+#line 418 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_floatpush);
 		g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2608 "engines/director/lingo/lingo-gr.cpp"
+#line 2615 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57:
-#line 414 "engines/director/lingo/lingo-gr.y"
+#line 421 "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 2617 "engines/director/lingo/lingo-gr.cpp"
+#line 2624 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58:
-#line 418 "engines/director/lingo/lingo-gr.y"
+#line 425 "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 2626 "engines/director/lingo/lingo-gr.cpp"
+#line 2633 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59:
-#line 422 "engines/director/lingo/lingo-gr.y"
+#line 429 "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 2635 "engines/director/lingo/lingo-gr.cpp"
+#line 2642 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60:
-#line 426 "engines/director/lingo/lingo-gr.y"
+#line 433 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2644,17 +2651,17 @@ yyreduce:
 		WRITE_UINT32(&e, (yyvsp[0].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[0].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2648 "engines/director/lingo/lingo-gr.cpp"
+#line 2655 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61:
-#line 434 "engines/director/lingo/lingo-gr.y"
+#line 441 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = (yyvsp[-1].code); }
-#line 2654 "engines/director/lingo/lingo-gr.cpp"
+#line 2661 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63:
-#line 436 "engines/director/lingo/lingo-gr.y"
+#line 443 "engines/director/lingo/lingo-gr.y"
                                 {
 		// Director parser till D3 was forgiving for any hanging parentheses
 		if (g_lingo->_ignoreError) {
@@ -2665,614 +2672,608 @@ yyreduce:
 			yyerrok;
 		}
 	}
-#line 2669 "engines/director/lingo/lingo-gr.cpp"
+#line 2676 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64:
-#line 447 "engines/director/lingo/lingo-gr.y"
+#line 454 "engines/director/lingo/lingo-gr.y"
                  { (yyval.code) = (yyvsp[0].code); }
-#line 2675 "engines/director/lingo/lingo-gr.cpp"
+#line 2682 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66:
-#line 449 "engines/director/lingo/lingo-gr.y"
+#line 456 "engines/director/lingo/lingo-gr.y"
                                  {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2683 "engines/director/lingo/lingo-gr.cpp"
+#line 2690 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67:
-#line 452 "engines/director/lingo/lingo-gr.y"
+#line 459 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 2691 "engines/director/lingo/lingo-gr.cpp"
+#line 2698 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68:
-#line 455 "engines/director/lingo/lingo-gr.y"
+#line 462 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2699 "engines/director/lingo/lingo-gr.cpp"
+#line 2706 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69:
-#line 458 "engines/director/lingo/lingo-gr.y"
+#line 465 "engines/director/lingo/lingo-gr.y"
                                         {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-2].s), 1);
 		delete (yyvsp[-2].s); }
-#line 2707 "engines/director/lingo/lingo-gr.cpp"
+#line 2714 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70:
-#line 461 "engines/director/lingo/lingo-gr.y"
+#line 468 "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 2718 "engines/director/lingo/lingo-gr.cpp"
+#line 2725 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71:
-#line 467 "engines/director/lingo/lingo-gr.y"
+#line 474 "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 2728 "engines/director/lingo/lingo-gr.cpp"
+#line 2735 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72:
-#line 472 "engines/director/lingo/lingo-gr.y"
+#line 479 "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 2739 "engines/director/lingo/lingo-gr.cpp"
+#line 2746 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74:
-#line 479 "engines/director/lingo/lingo-gr.y"
+#line 486 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_add); }
-#line 2745 "engines/director/lingo/lingo-gr.cpp"
+#line 2752 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75:
-#line 480 "engines/director/lingo/lingo-gr.y"
+#line 487 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_sub); }
-#line 2751 "engines/director/lingo/lingo-gr.cpp"
+#line 2758 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76:
-#line 481 "engines/director/lingo/lingo-gr.y"
+#line 488 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mul); }
-#line 2757 "engines/director/lingo/lingo-gr.cpp"
+#line 2764 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77:
-#line 482 "engines/director/lingo/lingo-gr.y"
+#line 489 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_div); }
-#line 2763 "engines/director/lingo/lingo-gr.cpp"
+#line 2770 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78:
-#line 483 "engines/director/lingo/lingo-gr.y"
+#line 490 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mod); }
-#line 2769 "engines/director/lingo/lingo-gr.cpp"
+#line 2776 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79:
-#line 484 "engines/director/lingo/lingo-gr.y"
+#line 491 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gt); }
-#line 2775 "engines/director/lingo/lingo-gr.cpp"
+#line 2782 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80:
-#line 485 "engines/director/lingo/lingo-gr.y"
+#line 492 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lt); }
-#line 2781 "engines/director/lingo/lingo-gr.cpp"
+#line 2788 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81:
-#line 486 "engines/director/lingo/lingo-gr.y"
+#line 493 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_eq); }
-#line 2787 "engines/director/lingo/lingo-gr.cpp"
+#line 2794 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82:
-#line 487 "engines/director/lingo/lingo-gr.y"
+#line 494 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_neq); }
-#line 2793 "engines/director/lingo/lingo-gr.cpp"
+#line 2800 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83:
-#line 488 "engines/director/lingo/lingo-gr.y"
+#line 495 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ge); }
-#line 2799 "engines/director/lingo/lingo-gr.cpp"
+#line 2806 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84:
-#line 489 "engines/director/lingo/lingo-gr.y"
+#line 496 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_le); }
-#line 2805 "engines/director/lingo/lingo-gr.cpp"
+#line 2812 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85:
-#line 490 "engines/director/lingo/lingo-gr.y"
+#line 497 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_and); }
-#line 2811 "engines/director/lingo/lingo-gr.cpp"
+#line 2818 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86:
-#line 491 "engines/director/lingo/lingo-gr.y"
+#line 498 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_or); }
-#line 2817 "engines/director/lingo/lingo-gr.cpp"
+#line 2824 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87:
-#line 492 "engines/director/lingo/lingo-gr.y"
+#line 499 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_not); }
-#line 2823 "engines/director/lingo/lingo-gr.cpp"
+#line 2830 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88:
-#line 493 "engines/director/lingo/lingo-gr.y"
+#line 500 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ampersand); }
-#line 2829 "engines/director/lingo/lingo-gr.cpp"
+#line 2836 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89:
-#line 494 "engines/director/lingo/lingo-gr.y"
+#line 501 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_concat); }
-#line 2835 "engines/director/lingo/lingo-gr.cpp"
+#line 2842 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90:
-#line 495 "engines/director/lingo/lingo-gr.y"
+#line 502 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_contains); }
-#line 2841 "engines/director/lingo/lingo-gr.cpp"
+#line 2848 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91:
-#line 496 "engines/director/lingo/lingo-gr.y"
+#line 503 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_starts); }
-#line 2847 "engines/director/lingo/lingo-gr.cpp"
+#line 2854 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92:
-#line 497 "engines/director/lingo/lingo-gr.y"
+#line 504 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = (yyvsp[0].code); }
-#line 2853 "engines/director/lingo/lingo-gr.cpp"
+#line 2860 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93:
-#line 498 "engines/director/lingo/lingo-gr.y"
+#line 505 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 2859 "engines/director/lingo/lingo-gr.cpp"
+#line 2866 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94:
-#line 499 "engines/director/lingo/lingo-gr.y"
+#line 506 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_intersects); }
-#line 2865 "engines/director/lingo/lingo-gr.cpp"
+#line 2872 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95:
-#line 500 "engines/director/lingo/lingo-gr.y"
+#line 507 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_within); }
-#line 2871 "engines/director/lingo/lingo-gr.cpp"
+#line 2878 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 96:
-#line 502 "engines/director/lingo/lingo-gr.y"
+#line 509 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_charOf); }
-#line 2877 "engines/director/lingo/lingo-gr.cpp"
+#line 2884 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97:
-#line 503 "engines/director/lingo/lingo-gr.y"
+#line 510 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_charToOf); }
-#line 2883 "engines/director/lingo/lingo-gr.cpp"
+#line 2890 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98:
-#line 504 "engines/director/lingo/lingo-gr.y"
+#line 511 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_itemOf); }
-#line 2889 "engines/director/lingo/lingo-gr.cpp"
+#line 2896 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99:
-#line 505 "engines/director/lingo/lingo-gr.y"
+#line 512 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_itemToOf); }
-#line 2895 "engines/director/lingo/lingo-gr.cpp"
+#line 2902 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 100:
-#line 506 "engines/director/lingo/lingo-gr.y"
+#line 513 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lineOf); }
-#line 2901 "engines/director/lingo/lingo-gr.cpp"
+#line 2908 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101:
-#line 507 "engines/director/lingo/lingo-gr.y"
+#line 514 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_lineToOf); }
-#line 2907 "engines/director/lingo/lingo-gr.cpp"
+#line 2914 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 102:
-#line 508 "engines/director/lingo/lingo-gr.y"
+#line 515 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_wordOf); }
-#line 2913 "engines/director/lingo/lingo-gr.cpp"
+#line 2920 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 103:
-#line 509 "engines/director/lingo/lingo-gr.y"
+#line 516 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_wordToOf); }
-#line 2919 "engines/director/lingo/lingo-gr.cpp"
+#line 2926 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 104:
-#line 511 "engines/director/lingo/lingo-gr.y"
+#line 518 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->codeFunc((yyvsp[-1].s), 1);
 		delete (yyvsp[-1].s); }
-#line 2927 "engines/director/lingo/lingo-gr.cpp"
+#line 2934 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 106:
-#line 516 "engines/director/lingo/lingo-gr.y"
+#line 523 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_printtop); }
-#line 2933 "engines/director/lingo/lingo-gr.cpp"
+#line 2940 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 109:
-#line 519 "engines/director/lingo/lingo-gr.y"
+#line 526 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_exitRepeat); }
-#line 2939 "engines/director/lingo/lingo-gr.cpp"
+#line 2946 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110:
-#line 520 "engines/director/lingo/lingo-gr.y"
+#line 527 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_procret); }
-#line 2945 "engines/director/lingo/lingo-gr.cpp"
+#line 2952 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111:
-#line 521 "engines/director/lingo/lingo-gr.y"
+#line 528 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 2951 "engines/director/lingo/lingo-gr.cpp"
+#line 2958 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112:
-#line 521 "engines/director/lingo/lingo-gr.y"
+#line 528 "engines/director/lingo/lingo-gr.y"
                                                                                  { inNone(); }
-#line 2957 "engines/director/lingo/lingo-gr.cpp"
+#line 2964 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113:
-#line 522 "engines/director/lingo/lingo-gr.y"
+#line 529 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 2963 "engines/director/lingo/lingo-gr.cpp"
+#line 2970 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114:
-#line 522 "engines/director/lingo/lingo-gr.y"
+#line 529 "engines/director/lingo/lingo-gr.y"
                                                                                    { inNone(); }
-#line 2969 "engines/director/lingo/lingo-gr.cpp"
+#line 2976 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115:
-#line 523 "engines/director/lingo/lingo-gr.y"
+#line 530 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 2975 "engines/director/lingo/lingo-gr.cpp"
+#line 2982 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 116:
-#line 523 "engines/director/lingo/lingo-gr.y"
+#line 530 "engines/director/lingo/lingo-gr.y"
                                                                                    { inNone(); }
-#line 2981 "engines/director/lingo/lingo-gr.cpp"
+#line 2988 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117:
-#line 524 "engines/director/lingo/lingo-gr.y"
+#line 531 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2989 "engines/director/lingo/lingo-gr.cpp"
+#line 2996 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118:
-#line 527 "engines/director/lingo/lingo-gr.y"
+#line 534 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 2997 "engines/director/lingo/lingo-gr.cpp"
+#line 3004 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119:
-#line 530 "engines/director/lingo/lingo-gr.y"
+#line 537 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_open); }
-#line 3003 "engines/director/lingo/lingo-gr.cpp"
+#line 3010 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 120:
-#line 531 "engines/director/lingo/lingo-gr.y"
+#line 538 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code2(LC::c_voidpush, LC::c_open); }
-#line 3009 "engines/director/lingo/lingo-gr.cpp"
+#line 3016 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121:
-#line 533 "engines/director/lingo/lingo-gr.y"
+#line 540 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_global);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 3018 "engines/director/lingo/lingo-gr.cpp"
+#line 3025 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 122:
-#line 537 "engines/director/lingo/lingo-gr.y"
+#line 544 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_global);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 3027 "engines/director/lingo/lingo-gr.cpp"
+#line 3034 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 123:
-#line 542 "engines/director/lingo/lingo-gr.y"
+#line 549 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_property);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 3036 "engines/director/lingo/lingo-gr.cpp"
+#line 3043 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124:
-#line 546 "engines/director/lingo/lingo-gr.y"
+#line 553 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_property);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 3045 "engines/director/lingo/lingo-gr.cpp"
+#line 3052 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125:
-#line 551 "engines/director/lingo/lingo-gr.y"
+#line 558 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_instance);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 3054 "engines/director/lingo/lingo-gr.cpp"
+#line 3061 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126:
-#line 555 "engines/director/lingo/lingo-gr.y"
+#line 562 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_instance);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 3063 "engines/director/lingo/lingo-gr.cpp"
+#line 3070 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 127:
-#line 567 "engines/director/lingo/lingo-gr.y"
+#line 574 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoloop); }
-#line 3069 "engines/director/lingo/lingo-gr.cpp"
+#line 3076 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 128:
-#line 568 "engines/director/lingo/lingo-gr.y"
+#line 575 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_gotonext); }
-#line 3075 "engines/director/lingo/lingo-gr.cpp"
+#line 3082 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 129:
-#line 569 "engines/director/lingo/lingo-gr.y"
+#line 576 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoprevious); }
-#line 3081 "engines/director/lingo/lingo-gr.cpp"
+#line 3088 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 130:
-#line 570 "engines/director/lingo/lingo-gr.y"
+#line 577 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_goto); }
-#line 3090 "engines/director/lingo/lingo-gr.cpp"
+#line 3097 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 131:
-#line 574 "engines/director/lingo/lingo-gr.y"
+#line 581 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_goto); }
-#line 3099 "engines/director/lingo/lingo-gr.cpp"
+#line 3106 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 132:
-#line 578 "engines/director/lingo/lingo-gr.y"
+#line 585 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_goto); }
-#line 3108 "engines/director/lingo/lingo-gr.cpp"
+#line 3115 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 135:
-#line 586 "engines/director/lingo/lingo-gr.y"
+#line 593 "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 3117 "engines/director/lingo/lingo-gr.cpp"
+#line 3124 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 136:
-#line 590 "engines/director/lingo/lingo-gr.y"
+#line 597 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_play); }
-#line 3126 "engines/director/lingo/lingo-gr.cpp"
+#line 3133 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 137:
-#line 594 "engines/director/lingo/lingo-gr.y"
+#line 601 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_play); }
-#line 3135 "engines/director/lingo/lingo-gr.cpp"
+#line 3142 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 138:
-#line 598 "engines/director/lingo/lingo-gr.y"
+#line 605 "engines/director/lingo/lingo-gr.y"
                      { g_lingo->codeSetImmediate(true); }
-#line 3141 "engines/director/lingo/lingo-gr.cpp"
+#line 3148 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 139:
-#line 598 "engines/director/lingo/lingo-gr.y"
+#line 605 "engines/director/lingo/lingo-gr.y"
                                                                   {
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeFunc((yyvsp[-2].s), (yyvsp[0].narg));
 		delete (yyvsp[-2].s); }
-#line 3150 "engines/director/lingo/lingo-gr.cpp"
+#line 3157 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 140:
-#line 628 "engines/director/lingo/lingo-gr.y"
-             { inArgs(); }
-#line 3156 "engines/director/lingo/lingo-gr.cpp"
+#line 635 "engines/director/lingo/lingo-gr.y"
+             { startDef(); }
+#line 3163 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 141:
-#line 628 "engines/director/lingo/lingo-gr.y"
-                              { g_lingo->_currentFactory.clear(); }
-#line 3162 "engines/director/lingo/lingo-gr.cpp"
+#line 635 "engines/director/lingo/lingo-gr.y"
+                                { g_lingo->_currentFactory.clear(); }
+#line 3169 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 142:
-#line 629 "engines/director/lingo/lingo-gr.y"
+#line 636 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg));
-		g_lingo->clearArgStack();
-		inNone();
+		endDef();
 		delete (yyvsp[-6].s); }
-#line 3173 "engines/director/lingo/lingo-gr.cpp"
+#line 3179 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 143:
-#line 635 "engines/director/lingo/lingo-gr.y"
+#line 641 "engines/director/lingo/lingo-gr.y"
                         { g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 3179 "engines/director/lingo/lingo-gr.cpp"
+#line 3185 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 144:
-#line 636 "engines/director/lingo/lingo-gr.y"
-                  { inArgs(); }
-#line 3185 "engines/director/lingo/lingo-gr.cpp"
+#line 642 "engines/director/lingo/lingo-gr.y"
+                  { startDef(); }
+#line 3191 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 145:
-#line 637 "engines/director/lingo/lingo-gr.y"
+#line 643 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg) + 1, &g_lingo->_currentFactory);
-		g_lingo->clearArgStack();
-		inNone();
+		endDef();
 		delete (yyvsp[-6].s); }
-#line 3196 "engines/director/lingo/lingo-gr.cpp"
+#line 3201 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 146:
-#line 643 "engines/director/lingo/lingo-gr.y"
+#line 648 "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));
-		g_lingo->clearArgStack();
-		inNone();
-		g_lingo->_ignoreMe = false;
+		endDef();
 
 		checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
 		delete (yyvsp[-7].s);
 		delete (yyvsp[-1].s); }
-#line 3211 "engines/director/lingo/lingo-gr.cpp"
+#line 3214 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 147:
-#line 653 "engines/director/lingo/lingo-gr.y"
+#line 656 "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));
-		inNone();
-		g_lingo->clearArgStack();
-		g_lingo->_ignoreMe = false;
+		endDef();
 		delete (yyvsp[-5].s); }
-#line 3223 "engines/director/lingo/lingo-gr.cpp"
+#line 3224 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 148:
-#line 661 "engines/director/lingo/lingo-gr.y"
-         { inArgs(); }
-#line 3229 "engines/director/lingo/lingo-gr.cpp"
+#line 662 "engines/director/lingo/lingo-gr.y"
+         { startDef(); }
+#line 3230 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 149:
-#line 661 "engines/director/lingo/lingo-gr.y"
-                                        {
+#line 662 "engines/director/lingo/lingo-gr.y"
+                                {
 		(yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
-#line 3236 "engines/director/lingo/lingo-gr.cpp"
+#line 3237 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 150:
-#line 664 "engines/director/lingo/lingo-gr.y"
+#line 665 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 0; }
-#line 3242 "engines/director/lingo/lingo-gr.cpp"
+#line 3243 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 151:
-#line 665 "engines/director/lingo/lingo-gr.y"
+#line 666 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = 1; delete (yyvsp[0].s); }
-#line 3248 "engines/director/lingo/lingo-gr.cpp"
+#line 3249 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 152:
-#line 666 "engines/director/lingo/lingo-gr.y"
+#line 667 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
-#line 3254 "engines/director/lingo/lingo-gr.cpp"
+#line 3255 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 154:
-#line 669 "engines/director/lingo/lingo-gr.y"
+#line 670 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 3260 "engines/director/lingo/lingo-gr.cpp"
+#line 3261 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 155:
-#line 670 "engines/director/lingo/lingo-gr.y"
+#line 671 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 3266 "engines/director/lingo/lingo-gr.cpp"
+#line 3267 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 156:
-#line 672 "engines/director/lingo/lingo-gr.y"
+#line 673 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->codeArgStore(); inDef(); }
-#line 3272 "engines/director/lingo/lingo-gr.cpp"
+#line 3273 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 157:
-#line 674 "engines/director/lingo/lingo-gr.y"
+#line 675 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_call);
 		g_lingo->codeString((yyvsp[-1].s)->c_str());
@@ -3280,113 +3281,113 @@ yyreduce:
 		WRITE_UINT32(&numpar, (yyvsp[0].narg));
 		g_lingo->code1(numpar);
 		delete (yyvsp[-1].s); }
-#line 3284 "engines/director/lingo/lingo-gr.cpp"
+#line 3285 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 158:
-#line 682 "engines/director/lingo/lingo-gr.y"
+#line 683 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 0; }
-#line 3290 "engines/director/lingo/lingo-gr.cpp"
+#line 3291 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 159:
-#line 683 "engines/director/lingo/lingo-gr.y"
+#line 684 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.narg) = 1; }
-#line 3296 "engines/director/lingo/lingo-gr.cpp"
+#line 3297 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 160:
-#line 684 "engines/director/lingo/lingo-gr.y"
+#line 685 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3302 "engines/director/lingo/lingo-gr.cpp"
+#line 3303 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 161:
-#line 686 "engines/director/lingo/lingo-gr.y"
+#line 687 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3308 "engines/director/lingo/lingo-gr.cpp"
+#line 3309 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 162:
-#line 687 "engines/director/lingo/lingo-gr.y"
+#line 688 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3314 "engines/director/lingo/lingo-gr.cpp"
+#line 3315 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 163:
-#line 689 "engines/director/lingo/lingo-gr.y"
+#line 690 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = (yyvsp[-1].code); }
-#line 3320 "engines/director/lingo/lingo-gr.cpp"
+#line 3321 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 164:
-#line 691 "engines/director/lingo/lingo-gr.y"
+#line 692 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3326 "engines/director/lingo/lingo-gr.cpp"
+#line 3327 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 165:
-#line 692 "engines/director/lingo/lingo-gr.y"
+#line 693 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3332 "engines/director/lingo/lingo-gr.cpp"
+#line 3333 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 166:
-#line 693 "engines/director/lingo/lingo-gr.y"
+#line 694 "engines/director/lingo/lingo-gr.y"
                      { (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3338 "engines/director/lingo/lingo-gr.cpp"
+#line 3339 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 167:
-#line 694 "engines/director/lingo/lingo-gr.y"
+#line 695 "engines/director/lingo/lingo-gr.y"
                          { (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3344 "engines/director/lingo/lingo-gr.cpp"
+#line 3345 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 168:
-#line 696 "engines/director/lingo/lingo-gr.y"
+#line 697 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 3350 "engines/director/lingo/lingo-gr.cpp"
+#line 3351 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 169:
-#line 697 "engines/director/lingo/lingo-gr.y"
+#line 698 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3356 "engines/director/lingo/lingo-gr.cpp"
+#line 3357 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 170:
-#line 699 "engines/director/lingo/lingo-gr.y"
+#line 700 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 3362 "engines/director/lingo/lingo-gr.cpp"
+#line 3363 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 171:
-#line 700 "engines/director/lingo/lingo-gr.y"
+#line 701 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3368 "engines/director/lingo/lingo-gr.cpp"
+#line 3369 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 172:
-#line 702 "engines/director/lingo/lingo-gr.y"
+#line 703 "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 3377 "engines/director/lingo/lingo-gr.cpp"
+#line 3378 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 173:
-#line 706 "engines/director/lingo/lingo-gr.y"
+#line 707 "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 3386 "engines/director/lingo/lingo-gr.cpp"
+#line 3387 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3390 "engines/director/lingo/lingo-gr.cpp"
+#line 3391 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3585,7 +3586,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 712 "engines/director/lingo/lingo-gr.y"
+#line 713 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 7c603e767e..3011ead9bc 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -148,7 +148,7 @@ extern int yydebug;
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 93 "engines/director/lingo/lingo-gr.y"
+#line 100 "engines/director/lingo/lingo-gr.y"
 
 	Common::String *s;
 	int i;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index d90ed19b0a..726c74f6a3 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -88,6 +88,13 @@ static void inArgs() { g_lingo->_indef = kStateInArgs; }
 static void inDef()  { g_lingo->_indef = kStateInDef; }
 static void inNone() { g_lingo->_indef = kStateNone; }
 
+static void startDef() { inArgs(); }
+static void endDef() {
+	g_lingo->clearArgStack();
+	inNone();
+	g_lingo->_ignoreMe = false;
+}
+
 %}
 
 %union {
@@ -625,27 +632,23 @@ playfunc: tPLAY expr 			{ // "play #done" is also caught by this
 //
 // See also:
 //   on keyword
-defn: tMACRO { inArgs(); } ID { g_lingo->_currentFactory.clear(); }
+defn: tMACRO { startDef(); } ID { g_lingo->_currentFactory.clear(); }
 			begin argdef '\n' argstore stmtlist 		{
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*$ID, $begin, $argdef);
-		g_lingo->clearArgStack();
-		inNone();
+		endDef();
 		delete $ID; }
 	| tFACTORY ID	{ g_lingo->codeFactory(*$2); delete $ID; }
-	| tMETHOD { inArgs(); }
+	| tMETHOD { startDef(); }
 			begin argdef '\n' argstore stmtlist 		{
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*$tMETHOD, $begin, $argdef + 1, &g_lingo->_currentFactory);
-		g_lingo->clearArgStack();
-		inNone();
+		endDef();
 		delete $tMETHOD; }
 	| on begin argdef '\n' argstore stmtlist ENDCLAUSE endargdef {	// D3
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*$on, $begin, $argdef);
-		g_lingo->clearArgStack();
-		inNone();
-		g_lingo->_ignoreMe = false;
+		endDef();
 
 		checkEnd($ENDCLAUSE, $on->c_str(), false);
 		delete $on;
@@ -653,12 +656,10 @@ defn: tMACRO { inArgs(); } ID { g_lingo->_currentFactory.clear(); }
 	| on begin argdef '\n' argstore stmtlist {	// D4. No 'end' clause
 		g_lingo->code1(LC::c_procret);
 		g_lingo->define(*$on, $begin, $argdef);
-		inNone();
-		g_lingo->clearArgStack();
-		g_lingo->_ignoreMe = false;
+		endDef();
 		delete $on; }
 
-on:  tON { inArgs(); } ID 		{
+on:  tON { startDef(); } ID 	{
 		$$ = $ID; g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
 
 argdef:  /* nothing */ 			{ $$ = 0; }


Commit: bba8e2b9a049f062c091e55e12fb4ae6a0f46cf7
    https://github.com/scummvm/scummvm/commit/bba8e2b9a049f062c091e55e12fb4ae6a0f46cf7
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-05-20T01:28:03+02:00

Commit Message:
DIRECTOR: LINGO: Store all method local vars/args into a hahsmap

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


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 29a8d850c2..fcf388420d 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -105,15 +105,25 @@ static void inArgs() { g_lingo->_indef = kStateInArgs; }
 static void inDef()  { g_lingo->_indef = kStateInDef; }
 static void inNone() { g_lingo->_indef = kStateNone; }
 
-static void startDef() { inArgs(); }
+static void startDef() {
+	inArgs();
+	g_lingo->_methodVars.clear();
+}
+
 static void endDef() {
 	g_lingo->clearArgStack();
 	inNone();
 	g_lingo->_ignoreMe = false;
+
+	g_lingo->_methodVars.clear();
+}
+
+static void mArg(Common::String *s) {
+	g_lingo->_methodVars[*s] = true;
 }
 
 
-#line 117 "engines/director/lingo/lingo-gr.cpp"
+#line 127 "engines/director/lingo/lingo-gr.cpp"
 
 # ifndef YY_CAST
 #  ifdef __cplusplus
@@ -251,7 +261,7 @@ extern int yydebug;
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 100 "engines/director/lingo/lingo-gr.y"
+#line 110 "engines/director/lingo/lingo-gr.y"
 
 	Common::String *s;
 	int i;
@@ -271,7 +281,7 @@ union YYSTYPE
 		Common::String *field;
 	} objectref;
 
-#line 275 "engines/director/lingo/lingo-gr.cpp"
+#line 285 "engines/director/lingo/lingo-gr.cpp"
 
 };
 typedef union YYSTYPE YYSTYPE;
@@ -820,24 +830,24 @@ static const yytype_int8 yytranslate[] =
   /* YYRLINEYYN -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   155,   155,   156,   158,   159,   160,   162,   168,   172,
-     183,   184,   185,   191,   198,   204,   211,   217,   224,   235,
-     242,   243,   244,   246,   247,   248,   249,   251,   252,   257,
-     268,   285,   297,   308,   310,   315,   319,   324,   328,   338,
-     349,   350,   352,   359,   369,   380,   382,   388,   394,   401,
-     403,   405,   406,   407,   409,   415,   418,   421,   425,   429,
-     433,   441,   442,   443,   454,   455,   456,   459,   462,   465,
-     468,   474,   479,   485,   486,   487,   488,   489,   490,   491,
-     492,   493,   494,   495,   496,   497,   498,   499,   500,   501,
-     502,   503,   504,   505,   506,   507,   509,   510,   511,   512,
-     513,   514,   515,   516,   518,   521,   523,   524,   525,   526,
-     527,   528,   528,   529,   529,   530,   530,   531,   534,   537,
-     538,   540,   544,   549,   553,   558,   562,   574,   575,   576,
-     577,   581,   585,   590,   591,   593,   597,   601,   605,   605,
-     635,   635,   635,   641,   642,   642,   648,   656,   662,   662,
-     665,   666,   667,   669,   670,   671,   673,   675,   683,   684,
-     685,   687,   688,   690,   692,   693,   694,   695,   697,   698,
-     700,   701,   703,   707
+       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
 };
 #endif
 
@@ -1865,81 +1875,81 @@ yydestruct (const char *yymsg,
   switch (yykind)
     {
     case 22: /* BLTIN  */
-#line 150 "engines/director/lingo/lingo-gr.y"
+#line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1871 "engines/director/lingo/lingo-gr.cpp"
+#line 1881 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 23: /* FBLTIN  */
-#line 150 "engines/director/lingo/lingo-gr.y"
+#line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1877 "engines/director/lingo/lingo-gr.cpp"
+#line 1887 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 24: /* RBLTIN  */
-#line 150 "engines/director/lingo/lingo-gr.y"
+#line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1883 "engines/director/lingo/lingo-gr.cpp"
+#line 1893 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 25: /* THEFBLTIN  */
-#line 150 "engines/director/lingo/lingo-gr.y"
+#line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1889 "engines/director/lingo/lingo-gr.cpp"
+#line 1899 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 26: /* ID  */
-#line 150 "engines/director/lingo/lingo-gr.y"
+#line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1895 "engines/director/lingo/lingo-gr.cpp"
+#line 1905 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 27: /* STRING  */
-#line 150 "engines/director/lingo/lingo-gr.y"
+#line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1901 "engines/director/lingo/lingo-gr.cpp"
+#line 1911 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 28: /* HANDLER  */
-#line 150 "engines/director/lingo/lingo-gr.y"
+#line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1907 "engines/director/lingo/lingo-gr.cpp"
+#line 1917 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 29: /* SYMBOL  */
-#line 150 "engines/director/lingo/lingo-gr.y"
+#line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1913 "engines/director/lingo/lingo-gr.cpp"
+#line 1923 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 30: /* ENDCLAUSE  */
-#line 150 "engines/director/lingo/lingo-gr.y"
+#line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1919 "engines/director/lingo/lingo-gr.cpp"
+#line 1929 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 31: /* tPLAYACCEL  */
-#line 150 "engines/director/lingo/lingo-gr.y"
+#line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1925 "engines/director/lingo/lingo-gr.cpp"
+#line 1935 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 32: /* tMETHOD  */
-#line 150 "engines/director/lingo/lingo-gr.y"
+#line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1931 "engines/director/lingo/lingo-gr.cpp"
+#line 1941 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 33: /* THEOBJECTFIELD  */
-#line 151 "engines/director/lingo/lingo-gr.y"
+#line 161 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).objectfield).os; }
-#line 1937 "engines/director/lingo/lingo-gr.cpp"
+#line 1947 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case 143: /* on  */
-#line 150 "engines/director/lingo/lingo-gr.y"
+#line 160 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1943 "engines/director/lingo/lingo-gr.cpp"
+#line 1953 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2218,26 +2228,26 @@ yyreduce:
   switch (yyn)
     {
   case 7:
-#line 162 "engines/director/lingo/lingo-gr.y"
+#line 172 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code);
 		delete (yyvsp[0].s); }
-#line 2229 "engines/director/lingo/lingo-gr.cpp"
+#line 2239 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 8:
-#line 168 "engines/director/lingo/lingo-gr.y"
+#line 178 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code); }
-#line 2237 "engines/director/lingo/lingo-gr.cpp"
+#line 2247 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 9:
-#line 172 "engines/director/lingo/lingo-gr.y"
+#line 182 "engines/director/lingo/lingo-gr.y"
                                                                 {
 		if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
 			warning("LEXER: keyword 'menu' expected");
@@ -2249,34 +2259,34 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-4].e)[1]);
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2253 "engines/director/lingo/lingo-gr.cpp"
+#line 2263 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10:
-#line 183 "engines/director/lingo/lingo-gr.y"
+#line 193 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code1(LC::c_after); }
-#line 2259 "engines/director/lingo/lingo-gr.cpp"
+#line 2269 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11:
-#line 184 "engines/director/lingo/lingo-gr.y"
+#line 194 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->code1(LC::c_before); }
-#line 2265 "engines/director/lingo/lingo-gr.cpp"
+#line 2275 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12:
-#line 185 "engines/director/lingo/lingo-gr.y"
+#line 195 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2276 "engines/director/lingo/lingo-gr.cpp"
+#line 2286 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13:
-#line 191 "engines/director/lingo/lingo-gr.y"
+#line 201 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2284,22 +2294,22 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2288 "engines/director/lingo/lingo-gr.cpp"
+#line 2298 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 14:
-#line 198 "engines/director/lingo/lingo-gr.y"
+#line 208 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_varpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2299 "engines/director/lingo/lingo-gr.cpp"
+#line 2309 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15:
-#line 204 "engines/director/lingo/lingo-gr.y"
+#line 214 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2307,33 +2317,33 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2311 "engines/director/lingo/lingo-gr.cpp"
+#line 2321 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16:
-#line 211 "engines/director/lingo/lingo-gr.y"
+#line 221 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_swap);
 		g_lingo->code1(LC::c_theentityassign);
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2322 "engines/director/lingo/lingo-gr.cpp"
+#line 2332 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17:
-#line 217 "engines/director/lingo/lingo-gr.y"
+#line 227 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_swap);
 		g_lingo->code1(LC::c_theentityassign);
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2333 "engines/director/lingo/lingo-gr.cpp"
+#line 2343 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 18:
-#line 224 "engines/director/lingo/lingo-gr.y"
+#line 234 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		if (!(yyvsp[-3].s)->equalsIgnoreCase("menu")) {
 			warning("LEXER: keyword 'menu' expected");
@@ -2345,33 +2355,33 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-6].e)[0]);
 		g_lingo->codeInt((yyvsp[-6].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2349 "engines/director/lingo/lingo-gr.cpp"
+#line 2359 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19:
-#line 235 "engines/director/lingo/lingo-gr.y"
+#line 245 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_objectfieldassign);
 		g_lingo->codeString((yyvsp[-2].objectfield).os->c_str());
 		g_lingo->codeInt((yyvsp[-2].objectfield).oe);
 		delete (yyvsp[-2].objectfield).os;
 		(yyval.code) = (yyvsp[0].code); }
-#line 2360 "engines/director/lingo/lingo-gr.cpp"
+#line 2370 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 29:
-#line 257 "engines/director/lingo/lingo-gr.y"
+#line 267 "engines/director/lingo/lingo-gr.y"
                                                                         {
 		inst body = 0, end = 0;
 		WRITE_UINT32(&body, (yyvsp[-3].code) - (yyvsp[-5].code));
 		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-5].code));
 		(*g_lingo->_currentScript)[(yyvsp[-5].code) + 1] = body;	/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-5].code) + 2] = end; }
-#line 2371 "engines/director/lingo/lingo-gr.cpp"
+#line 2381 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 30:
-#line 268 "engines/director/lingo/lingo-gr.y"
+#line 278 "engines/director/lingo/lingo-gr.y"
                                                                                                  {
 		inst init = 0, finish = 0, body = 0, end = 0, inc = 0;
 		WRITE_UINT32(&init, (yyvsp[-8].code) - (yyvsp[-10].code));
@@ -2384,11 +2394,11 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 3] = body;		/* body of loop */
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 4] = inc;		/* increment */
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 5] = end; }
-#line 2388 "engines/director/lingo/lingo-gr.cpp"
+#line 2398 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 31:
-#line 285 "engines/director/lingo/lingo-gr.y"
+#line 295 "engines/director/lingo/lingo-gr.y"
                                                                                                        {
 		inst init = 0, finish = 0, body = 0, end = 0, inc = 0;
 		WRITE_UINT32(&init, (yyvsp[-9].code) - (yyvsp[-11].code));
@@ -2401,11 +2411,11 @@ 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 2405 "engines/director/lingo/lingo-gr.cpp"
+#line 2415 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 32:
-#line 297 "engines/director/lingo/lingo-gr.y"
+#line 307 "engines/director/lingo/lingo-gr.y"
                                                                             {
 		inst list = 0, body = 0, end = 0;
 		WRITE_UINT32(&list, (yyvsp[-5].code) - (yyvsp[-7].code));
@@ -2416,54 +2426,54 @@ 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 2420 "engines/director/lingo/lingo-gr.cpp"
+#line 2430 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33:
-#line 308 "engines/director/lingo/lingo-gr.y"
+#line 318 "engines/director/lingo/lingo-gr.y"
                         {
 		g_lingo->code1(LC::c_nextRepeat); }
-#line 2427 "engines/director/lingo/lingo-gr.cpp"
+#line 2437 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34:
-#line 310 "engines/director/lingo/lingo-gr.y"
+#line 320 "engines/director/lingo/lingo-gr.y"
                                       {
 		inst end = 0;
 		WRITE_UINT32(&end, (yyvsp[0].code) - (yyvsp[-2].code));
 		g_lingo->code1(STOP);
 		(*g_lingo->_currentScript)[(yyvsp[-2].code) + 1] = end; }
-#line 2437 "engines/director/lingo/lingo-gr.cpp"
+#line 2447 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35:
-#line 315 "engines/director/lingo/lingo-gr.y"
+#line 325 "engines/director/lingo/lingo-gr.y"
                                                           {
 		inst end;
 		WRITE_UINT32(&end, (yyvsp[-1].code) - (yyvsp[-3].code));
 		(*g_lingo->_currentScript)[(yyvsp[-3].code) + 1] = end; }
-#line 2446 "engines/director/lingo/lingo-gr.cpp"
+#line 2456 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36:
-#line 319 "engines/director/lingo/lingo-gr.y"
+#line 329 "engines/director/lingo/lingo-gr.y"
                                                     {
 		inst end;
 		WRITE_UINT32(&end, (yyvsp[0].code) - (yyvsp[-2].code));
 		(*g_lingo->_currentScript)[(yyvsp[-2].code) + 1] = end; }
-#line 2455 "engines/director/lingo/lingo-gr.cpp"
+#line 2465 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37:
-#line 324 "engines/director/lingo/lingo-gr.y"
+#line 334 "engines/director/lingo/lingo-gr.y"
                                                         {
 		(yyval.code) = g_lingo->code1(LC::c_tellcode);
 		g_lingo->code1(STOP); }
-#line 2463 "engines/director/lingo/lingo-gr.cpp"
+#line 2473 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38:
-#line 328 "engines/director/lingo/lingo-gr.y"
+#line 338 "engines/director/lingo/lingo-gr.y"
                                                                                        {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-6].code) - (yyvsp[-8].code));
@@ -2474,11 +2484,11 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-8].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-8].code), (yyvsp[-1].code) - (yyvsp[-8].code), 0); }
-#line 2478 "engines/director/lingo/lingo-gr.cpp"
+#line 2488 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39:
-#line 338 "engines/director/lingo/lingo-gr.y"
+#line 348 "engines/director/lingo/lingo-gr.y"
                                                                                                               {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-9].code) - (yyvsp[-11].code));
@@ -2489,22 +2499,22 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-11].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-11].code), (yyvsp[-1].code) - (yyvsp[-11].code), (yyvsp[-3].code) - (yyvsp[-11].code)); }
-#line 2493 "engines/director/lingo/lingo-gr.cpp"
+#line 2503 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42:
-#line 352 "engines/director/lingo/lingo-gr.y"
+#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 2504 "engines/director/lingo/lingo-gr.cpp"
+#line 2514 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43:
-#line 359 "engines/director/lingo/lingo-gr.y"
+#line 369 "engines/director/lingo/lingo-gr.y"
                                                                                                          {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-8].code) - (yyvsp[-10].code));
@@ -2515,11 +2525,11 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-10].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-10].code), (yyvsp[-1].code) - (yyvsp[-10].code), (yyvsp[-3].code) - (yyvsp[-10].code)); }
-#line 2519 "engines/director/lingo/lingo-gr.cpp"
+#line 2529 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44:
-#line 369 "engines/director/lingo/lingo-gr.y"
+#line 379 "engines/director/lingo/lingo-gr.y"
                                                                    {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[-4].code) - (yyvsp[-6].code));
@@ -2530,119 +2540,119 @@ yyreduce:
 		(*g_lingo->_currentScript)[(yyvsp[-6].code) + 3] = end;	/* end, if cond fails */
 
 		g_lingo->processIf((yyvsp[-6].code), (yyvsp[-1].code) - (yyvsp[-6].code), (yyvsp[-1].code) - (yyvsp[-6].code)); }
-#line 2534 "engines/director/lingo/lingo-gr.cpp"
+#line 2544 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45:
-#line 380 "engines/director/lingo/lingo-gr.y"
+#line 390 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = g_lingo->code3(LC::c_repeatwhilecode, STOP, STOP); }
-#line 2540 "engines/director/lingo/lingo-gr.cpp"
+#line 2550 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46:
-#line 382 "engines/director/lingo/lingo-gr.y"
+#line 392 "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 2550 "engines/director/lingo/lingo-gr.cpp"
+#line 2560 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47:
-#line 388 "engines/director/lingo/lingo-gr.y"
+#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 2560 "engines/director/lingo/lingo-gr.cpp"
+#line 2570 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48:
-#line 394 "engines/director/lingo/lingo-gr.y"
+#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 2571 "engines/director/lingo/lingo-gr.cpp"
+#line 2581 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49:
-#line 401 "engines/director/lingo/lingo-gr.y"
+#line 411 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2577 "engines/director/lingo/lingo-gr.cpp"
+#line 2587 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50:
-#line 403 "engines/director/lingo/lingo-gr.y"
+#line 413 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2583 "engines/director/lingo/lingo-gr.cpp"
+#line 2593 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51:
-#line 405 "engines/director/lingo/lingo-gr.y"
+#line 415 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = g_lingo->_currentScript->size(); }
-#line 2589 "engines/director/lingo/lingo-gr.cpp"
+#line 2599 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54:
-#line 409 "engines/director/lingo/lingo-gr.y"
+#line 419 "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 2599 "engines/director/lingo/lingo-gr.cpp"
+#line 2609 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 55:
-#line 415 "engines/director/lingo/lingo-gr.y"
+#line 425 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt((yyvsp[0].i)); }
-#line 2607 "engines/director/lingo/lingo-gr.cpp"
+#line 2617 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 56:
-#line 418 "engines/director/lingo/lingo-gr.y"
+#line 428 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_floatpush);
 		g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2615 "engines/director/lingo/lingo-gr.cpp"
+#line 2625 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57:
-#line 421 "engines/director/lingo/lingo-gr.y"
+#line 431 "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 2624 "engines/director/lingo/lingo-gr.cpp"
+#line 2634 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58:
-#line 425 "engines/director/lingo/lingo-gr.y"
+#line 435 "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 2633 "engines/director/lingo/lingo-gr.cpp"
+#line 2643 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59:
-#line 429 "engines/director/lingo/lingo-gr.y"
+#line 439 "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 2642 "engines/director/lingo/lingo-gr.cpp"
+#line 2652 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60:
-#line 433 "engines/director/lingo/lingo-gr.y"
+#line 443 "engines/director/lingo/lingo-gr.y"
                         {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(0); // Put dummy id
@@ -2651,17 +2661,17 @@ yyreduce:
 		WRITE_UINT32(&e, (yyvsp[0].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[0].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2655 "engines/director/lingo/lingo-gr.cpp"
+#line 2665 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61:
-#line 441 "engines/director/lingo/lingo-gr.y"
+#line 451 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = (yyvsp[-1].code); }
-#line 2661 "engines/director/lingo/lingo-gr.cpp"
+#line 2671 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 63:
-#line 443 "engines/director/lingo/lingo-gr.y"
+#line 453 "engines/director/lingo/lingo-gr.y"
                                 {
 		// Director parser till D3 was forgiving for any hanging parentheses
 		if (g_lingo->_ignoreError) {
@@ -2672,536 +2682,542 @@ yyreduce:
 			yyerrok;
 		}
 	}
-#line 2676 "engines/director/lingo/lingo-gr.cpp"
+#line 2686 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 64:
-#line 454 "engines/director/lingo/lingo-gr.y"
+#line 464 "engines/director/lingo/lingo-gr.y"
                  { (yyval.code) = (yyvsp[0].code); }
-#line 2682 "engines/director/lingo/lingo-gr.cpp"
+#line 2692 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 66:
-#line 456 "engines/director/lingo/lingo-gr.y"
+#line 466 "engines/director/lingo/lingo-gr.y"
                                  {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2690 "engines/director/lingo/lingo-gr.cpp"
+#line 2700 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67:
-#line 459 "engines/director/lingo/lingo-gr.y"
+#line 469 "engines/director/lingo/lingo-gr.y"
                                 {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 2698 "engines/director/lingo/lingo-gr.cpp"
+#line 2708 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68:
-#line 462 "engines/director/lingo/lingo-gr.y"
+#line 472 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2706 "engines/director/lingo/lingo-gr.cpp"
+#line 2716 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69:
-#line 465 "engines/director/lingo/lingo-gr.y"
+#line 475 "engines/director/lingo/lingo-gr.y"
                                         {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-2].s), 1);
 		delete (yyvsp[-2].s); }
-#line 2714 "engines/director/lingo/lingo-gr.cpp"
+#line 2724 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70:
-#line 468 "engines/director/lingo/lingo-gr.y"
+#line 478 "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 2725 "engines/director/lingo/lingo-gr.cpp"
+#line 2735 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71:
-#line 474 "engines/director/lingo/lingo-gr.y"
+#line 484 "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 2735 "engines/director/lingo/lingo-gr.cpp"
+#line 2745 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72:
-#line 479 "engines/director/lingo/lingo-gr.y"
+#line 489 "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 2746 "engines/director/lingo/lingo-gr.cpp"
+#line 2756 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 74:
-#line 486 "engines/director/lingo/lingo-gr.y"
+#line 496 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_add); }
-#line 2752 "engines/director/lingo/lingo-gr.cpp"
+#line 2762 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75:
-#line 487 "engines/director/lingo/lingo-gr.y"
+#line 497 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_sub); }
-#line 2758 "engines/director/lingo/lingo-gr.cpp"
+#line 2768 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76:
-#line 488 "engines/director/lingo/lingo-gr.y"
+#line 498 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mul); }
-#line 2764 "engines/director/lingo/lingo-gr.cpp"
+#line 2774 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77:
-#line 489 "engines/director/lingo/lingo-gr.y"
+#line 499 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_div); }
-#line 2770 "engines/director/lingo/lingo-gr.cpp"
+#line 2780 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78:
-#line 490 "engines/director/lingo/lingo-gr.y"
+#line 500 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mod); }
-#line 2776 "engines/director/lingo/lingo-gr.cpp"
+#line 2786 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79:
-#line 491 "engines/director/lingo/lingo-gr.y"
+#line 501 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gt); }
-#line 2782 "engines/director/lingo/lingo-gr.cpp"
+#line 2792 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80:
-#line 492 "engines/director/lingo/lingo-gr.y"
+#line 502 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lt); }
-#line 2788 "engines/director/lingo/lingo-gr.cpp"
+#line 2798 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81:
-#line 493 "engines/director/lingo/lingo-gr.y"
+#line 503 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_eq); }
-#line 2794 "engines/director/lingo/lingo-gr.cpp"
+#line 2804 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 82:
-#line 494 "engines/director/lingo/lingo-gr.y"
+#line 504 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_neq); }
-#line 2800 "engines/director/lingo/lingo-gr.cpp"
+#line 2810 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83:
-#line 495 "engines/director/lingo/lingo-gr.y"
+#line 505 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ge); }
-#line 2806 "engines/director/lingo/lingo-gr.cpp"
+#line 2816 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84:
-#line 496 "engines/director/lingo/lingo-gr.y"
+#line 506 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_le); }
-#line 2812 "engines/director/lingo/lingo-gr.cpp"
+#line 2822 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85:
-#line 497 "engines/director/lingo/lingo-gr.y"
+#line 507 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_and); }
-#line 2818 "engines/director/lingo/lingo-gr.cpp"
+#line 2828 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86:
-#line 498 "engines/director/lingo/lingo-gr.y"
+#line 508 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_or); }
-#line 2824 "engines/director/lingo/lingo-gr.cpp"
+#line 2834 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87:
-#line 499 "engines/director/lingo/lingo-gr.y"
+#line 509 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_not); }
-#line 2830 "engines/director/lingo/lingo-gr.cpp"
+#line 2840 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 88:
-#line 500 "engines/director/lingo/lingo-gr.y"
+#line 510 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ampersand); }
-#line 2836 "engines/director/lingo/lingo-gr.cpp"
+#line 2846 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89:
-#line 501 "engines/director/lingo/lingo-gr.y"
+#line 511 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_concat); }
-#line 2842 "engines/director/lingo/lingo-gr.cpp"
+#line 2852 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90:
-#line 502 "engines/director/lingo/lingo-gr.y"
+#line 512 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_contains); }
-#line 2848 "engines/director/lingo/lingo-gr.cpp"
+#line 2858 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91:
-#line 503 "engines/director/lingo/lingo-gr.y"
+#line 513 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_starts); }
-#line 2854 "engines/director/lingo/lingo-gr.cpp"
+#line 2864 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92:
-#line 504 "engines/director/lingo/lingo-gr.y"
+#line 514 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = (yyvsp[0].code); }
-#line 2860 "engines/director/lingo/lingo-gr.cpp"
+#line 2870 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93:
-#line 505 "engines/director/lingo/lingo-gr.y"
+#line 515 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 2866 "engines/director/lingo/lingo-gr.cpp"
+#line 2876 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94:
-#line 506 "engines/director/lingo/lingo-gr.y"
+#line 516 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_intersects); }
-#line 2872 "engines/director/lingo/lingo-gr.cpp"
+#line 2882 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95:
-#line 507 "engines/director/lingo/lingo-gr.y"
+#line 517 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_within); }
-#line 2878 "engines/director/lingo/lingo-gr.cpp"
+#line 2888 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 96:
-#line 509 "engines/director/lingo/lingo-gr.y"
+#line 519 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_charOf); }
-#line 2884 "engines/director/lingo/lingo-gr.cpp"
+#line 2894 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97:
-#line 510 "engines/director/lingo/lingo-gr.y"
+#line 520 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_charToOf); }
-#line 2890 "engines/director/lingo/lingo-gr.cpp"
+#line 2900 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98:
-#line 511 "engines/director/lingo/lingo-gr.y"
+#line 521 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_itemOf); }
-#line 2896 "engines/director/lingo/lingo-gr.cpp"
+#line 2906 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99:
-#line 512 "engines/director/lingo/lingo-gr.y"
+#line 522 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_itemToOf); }
-#line 2902 "engines/director/lingo/lingo-gr.cpp"
+#line 2912 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 100:
-#line 513 "engines/director/lingo/lingo-gr.y"
+#line 523 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lineOf); }
-#line 2908 "engines/director/lingo/lingo-gr.cpp"
+#line 2918 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101:
-#line 514 "engines/director/lingo/lingo-gr.y"
+#line 524 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_lineToOf); }
-#line 2914 "engines/director/lingo/lingo-gr.cpp"
+#line 2924 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 102:
-#line 515 "engines/director/lingo/lingo-gr.y"
+#line 525 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_wordOf); }
-#line 2920 "engines/director/lingo/lingo-gr.cpp"
+#line 2930 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 103:
-#line 516 "engines/director/lingo/lingo-gr.y"
+#line 526 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_wordToOf); }
-#line 2926 "engines/director/lingo/lingo-gr.cpp"
+#line 2936 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 104:
-#line 518 "engines/director/lingo/lingo-gr.y"
+#line 528 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->codeFunc((yyvsp[-1].s), 1);
 		delete (yyvsp[-1].s); }
-#line 2934 "engines/director/lingo/lingo-gr.cpp"
+#line 2944 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 106:
-#line 523 "engines/director/lingo/lingo-gr.y"
+#line 533 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_printtop); }
-#line 2940 "engines/director/lingo/lingo-gr.cpp"
+#line 2950 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 109:
-#line 526 "engines/director/lingo/lingo-gr.y"
+#line 536 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_exitRepeat); }
-#line 2946 "engines/director/lingo/lingo-gr.cpp"
+#line 2956 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110:
-#line 527 "engines/director/lingo/lingo-gr.y"
+#line 537 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_procret); }
-#line 2952 "engines/director/lingo/lingo-gr.cpp"
+#line 2962 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111:
-#line 528 "engines/director/lingo/lingo-gr.y"
+#line 538 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 2958 "engines/director/lingo/lingo-gr.cpp"
+#line 2968 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112:
-#line 528 "engines/director/lingo/lingo-gr.y"
+#line 538 "engines/director/lingo/lingo-gr.y"
                                                                                  { inNone(); }
-#line 2964 "engines/director/lingo/lingo-gr.cpp"
+#line 2974 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113:
-#line 529 "engines/director/lingo/lingo-gr.y"
+#line 539 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 2970 "engines/director/lingo/lingo-gr.cpp"
+#line 2980 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114:
-#line 529 "engines/director/lingo/lingo-gr.y"
+#line 539 "engines/director/lingo/lingo-gr.y"
                                                                                    { inNone(); }
-#line 2976 "engines/director/lingo/lingo-gr.cpp"
+#line 2986 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115:
-#line 530 "engines/director/lingo/lingo-gr.y"
+#line 540 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 2982 "engines/director/lingo/lingo-gr.cpp"
+#line 2992 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 116:
-#line 530 "engines/director/lingo/lingo-gr.y"
+#line 540 "engines/director/lingo/lingo-gr.y"
                                                                                    { inNone(); }
-#line 2988 "engines/director/lingo/lingo-gr.cpp"
+#line 2998 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117:
-#line 531 "engines/director/lingo/lingo-gr.y"
+#line 541 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2996 "engines/director/lingo/lingo-gr.cpp"
+#line 3006 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 118:
-#line 534 "engines/director/lingo/lingo-gr.y"
+#line 544 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->codeFunc((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 3004 "engines/director/lingo/lingo-gr.cpp"
+#line 3014 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119:
-#line 537 "engines/director/lingo/lingo-gr.y"
+#line 547 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_open); }
-#line 3010 "engines/director/lingo/lingo-gr.cpp"
+#line 3020 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 120:
-#line 538 "engines/director/lingo/lingo-gr.y"
+#line 548 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code2(LC::c_voidpush, LC::c_open); }
-#line 3016 "engines/director/lingo/lingo-gr.cpp"
+#line 3026 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121:
-#line 540 "engines/director/lingo/lingo-gr.y"
+#line 550 "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 3025 "engines/director/lingo/lingo-gr.cpp"
+#line 3036 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 122:
-#line 544 "engines/director/lingo/lingo-gr.y"
+#line 555 "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 3034 "engines/director/lingo/lingo-gr.cpp"
+#line 3046 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 123:
-#line 549 "engines/director/lingo/lingo-gr.y"
+#line 561 "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 3043 "engines/director/lingo/lingo-gr.cpp"
+#line 3056 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124:
-#line 553 "engines/director/lingo/lingo-gr.y"
+#line 566 "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 3052 "engines/director/lingo/lingo-gr.cpp"
+#line 3066 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125:
-#line 558 "engines/director/lingo/lingo-gr.y"
+#line 572 "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 3061 "engines/director/lingo/lingo-gr.cpp"
+#line 3076 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126:
-#line 562 "engines/director/lingo/lingo-gr.y"
+#line 577 "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 3070 "engines/director/lingo/lingo-gr.cpp"
+#line 3086 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 127:
-#line 574 "engines/director/lingo/lingo-gr.y"
+#line 590 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoloop); }
-#line 3076 "engines/director/lingo/lingo-gr.cpp"
+#line 3092 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 128:
-#line 575 "engines/director/lingo/lingo-gr.y"
+#line 591 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_gotonext); }
-#line 3082 "engines/director/lingo/lingo-gr.cpp"
+#line 3098 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 129:
-#line 576 "engines/director/lingo/lingo-gr.y"
+#line 592 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoprevious); }
-#line 3088 "engines/director/lingo/lingo-gr.cpp"
+#line 3104 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 130:
-#line 577 "engines/director/lingo/lingo-gr.y"
+#line 593 "engines/director/lingo/lingo-gr.y"
                                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_goto); }
-#line 3097 "engines/director/lingo/lingo-gr.cpp"
+#line 3113 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 131:
-#line 581 "engines/director/lingo/lingo-gr.y"
+#line 597 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_goto); }
-#line 3106 "engines/director/lingo/lingo-gr.cpp"
+#line 3122 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 132:
-#line 585 "engines/director/lingo/lingo-gr.y"
+#line 601 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_goto); }
-#line 3115 "engines/director/lingo/lingo-gr.cpp"
+#line 3131 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 135:
-#line 593 "engines/director/lingo/lingo-gr.y"
+#line 609 "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 3124 "engines/director/lingo/lingo-gr.cpp"
+#line 3140 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 136:
-#line 597 "engines/director/lingo/lingo-gr.y"
+#line 613 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_play); }
-#line 3133 "engines/director/lingo/lingo-gr.cpp"
+#line 3149 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 137:
-#line 601 "engines/director/lingo/lingo-gr.y"
+#line 617 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_play); }
-#line 3142 "engines/director/lingo/lingo-gr.cpp"
+#line 3158 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 138:
-#line 605 "engines/director/lingo/lingo-gr.y"
+#line 621 "engines/director/lingo/lingo-gr.y"
                      { g_lingo->codeSetImmediate(true); }
-#line 3148 "engines/director/lingo/lingo-gr.cpp"
+#line 3164 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 139:
-#line 605 "engines/director/lingo/lingo-gr.y"
+#line 621 "engines/director/lingo/lingo-gr.y"
                                                                   {
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeFunc((yyvsp[-2].s), (yyvsp[0].narg));
 		delete (yyvsp[-2].s); }
-#line 3157 "engines/director/lingo/lingo-gr.cpp"
+#line 3173 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 140:
-#line 635 "engines/director/lingo/lingo-gr.y"
+#line 651 "engines/director/lingo/lingo-gr.y"
              { startDef(); }
-#line 3163 "engines/director/lingo/lingo-gr.cpp"
+#line 3179 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 141:
-#line 635 "engines/director/lingo/lingo-gr.y"
+#line 651 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->_currentFactory.clear(); }
-#line 3169 "engines/director/lingo/lingo-gr.cpp"
+#line 3185 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 142:
-#line 636 "engines/director/lingo/lingo-gr.y"
+#line 652 "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 3179 "engines/director/lingo/lingo-gr.cpp"
+#line 3195 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 143:
-#line 641 "engines/director/lingo/lingo-gr.y"
+#line 657 "engines/director/lingo/lingo-gr.y"
                         { g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 3185 "engines/director/lingo/lingo-gr.cpp"
+#line 3201 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 144:
-#line 642 "engines/director/lingo/lingo-gr.y"
+#line 658 "engines/director/lingo/lingo-gr.y"
                   { startDef(); }
-#line 3191 "engines/director/lingo/lingo-gr.cpp"
+#line 3207 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 145:
-#line 643 "engines/director/lingo/lingo-gr.y"
+#line 659 "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 3201 "engines/director/lingo/lingo-gr.cpp"
+#line 3217 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 146:
-#line 648 "engines/director/lingo/lingo-gr.y"
+#line 664 "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));
@@ -3210,70 +3226,70 @@ yyreduce:
 		checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
 		delete (yyvsp[-7].s);
 		delete (yyvsp[-1].s); }
-#line 3214 "engines/director/lingo/lingo-gr.cpp"
+#line 3230 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 147:
-#line 656 "engines/director/lingo/lingo-gr.y"
+#line 672 "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 3224 "engines/director/lingo/lingo-gr.cpp"
+#line 3240 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 148:
-#line 662 "engines/director/lingo/lingo-gr.y"
+#line 678 "engines/director/lingo/lingo-gr.y"
          { startDef(); }
-#line 3230 "engines/director/lingo/lingo-gr.cpp"
+#line 3246 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 149:
-#line 662 "engines/director/lingo/lingo-gr.y"
+#line 678 "engines/director/lingo/lingo-gr.y"
                                 {
 		(yyval.s) = (yyvsp[0].s); g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
-#line 3237 "engines/director/lingo/lingo-gr.cpp"
+#line 3253 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 150:
-#line 665 "engines/director/lingo/lingo-gr.y"
+#line 681 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 0; }
-#line 3243 "engines/director/lingo/lingo-gr.cpp"
+#line 3259 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 151:
-#line 666 "engines/director/lingo/lingo-gr.y"
-                                                        { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = 1; delete (yyvsp[0].s); }
-#line 3249 "engines/director/lingo/lingo-gr.cpp"
+#line 682 "engines/director/lingo/lingo-gr.y"
+                                                        { g_lingo->codeArg((yyvsp[0].s)); mArg((yyvsp[0].s)); (yyval.narg) = 1; delete (yyvsp[0].s); }
+#line 3265 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 152:
-#line 667 "engines/director/lingo/lingo-gr.y"
-                                                { g_lingo->codeArg((yyvsp[0].s)); (yyval.narg) = (yyvsp[-2].narg) + 1; delete (yyvsp[0].s); }
-#line 3255 "engines/director/lingo/lingo-gr.cpp"
+#line 683 "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 3271 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 154:
-#line 670 "engines/director/lingo/lingo-gr.y"
+#line 686 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 3261 "engines/director/lingo/lingo-gr.cpp"
+#line 3277 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 155:
-#line 671 "engines/director/lingo/lingo-gr.y"
+#line 687 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 3267 "engines/director/lingo/lingo-gr.cpp"
+#line 3283 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 156:
-#line 673 "engines/director/lingo/lingo-gr.y"
+#line 689 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->codeArgStore(); inDef(); }
-#line 3273 "engines/director/lingo/lingo-gr.cpp"
+#line 3289 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 157:
-#line 675 "engines/director/lingo/lingo-gr.y"
+#line 691 "engines/director/lingo/lingo-gr.y"
                                         {
 		g_lingo->code1(LC::c_call);
 		g_lingo->codeString((yyvsp[-1].s)->c_str());
@@ -3281,113 +3297,113 @@ yyreduce:
 		WRITE_UINT32(&numpar, (yyvsp[0].narg));
 		g_lingo->code1(numpar);
 		delete (yyvsp[-1].s); }
-#line 3285 "engines/director/lingo/lingo-gr.cpp"
+#line 3301 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 158:
-#line 683 "engines/director/lingo/lingo-gr.y"
+#line 699 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 0; }
-#line 3291 "engines/director/lingo/lingo-gr.cpp"
+#line 3307 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 159:
-#line 684 "engines/director/lingo/lingo-gr.y"
+#line 700 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.narg) = 1; }
-#line 3297 "engines/director/lingo/lingo-gr.cpp"
+#line 3313 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 160:
-#line 685 "engines/director/lingo/lingo-gr.y"
+#line 701 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3303 "engines/director/lingo/lingo-gr.cpp"
+#line 3319 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 161:
-#line 687 "engines/director/lingo/lingo-gr.y"
+#line 703 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3309 "engines/director/lingo/lingo-gr.cpp"
+#line 3325 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 162:
-#line 688 "engines/director/lingo/lingo-gr.y"
+#line 704 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3315 "engines/director/lingo/lingo-gr.cpp"
+#line 3331 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 163:
-#line 690 "engines/director/lingo/lingo-gr.y"
+#line 706 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = (yyvsp[-1].code); }
-#line 3321 "engines/director/lingo/lingo-gr.cpp"
+#line 3337 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 164:
-#line 692 "engines/director/lingo/lingo-gr.y"
+#line 708 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3327 "engines/director/lingo/lingo-gr.cpp"
+#line 3343 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 165:
-#line 693 "engines/director/lingo/lingo-gr.y"
+#line 709 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3333 "engines/director/lingo/lingo-gr.cpp"
+#line 3349 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 166:
-#line 694 "engines/director/lingo/lingo-gr.y"
+#line 710 "engines/director/lingo/lingo-gr.y"
                      { (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3339 "engines/director/lingo/lingo-gr.cpp"
+#line 3355 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 167:
-#line 695 "engines/director/lingo/lingo-gr.y"
+#line 711 "engines/director/lingo/lingo-gr.y"
                          { (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3345 "engines/director/lingo/lingo-gr.cpp"
+#line 3361 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 168:
-#line 697 "engines/director/lingo/lingo-gr.y"
+#line 713 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 3351 "engines/director/lingo/lingo-gr.cpp"
+#line 3367 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 169:
-#line 698 "engines/director/lingo/lingo-gr.y"
+#line 714 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3357 "engines/director/lingo/lingo-gr.cpp"
+#line 3373 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 170:
-#line 700 "engines/director/lingo/lingo-gr.y"
+#line 716 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 3363 "engines/director/lingo/lingo-gr.cpp"
+#line 3379 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 171:
-#line 701 "engines/director/lingo/lingo-gr.y"
+#line 717 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3369 "engines/director/lingo/lingo-gr.cpp"
+#line 3385 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 172:
-#line 703 "engines/director/lingo/lingo-gr.y"
+#line 719 "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 3378 "engines/director/lingo/lingo-gr.cpp"
+#line 3394 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 173:
-#line 707 "engines/director/lingo/lingo-gr.y"
+#line 723 "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 3387 "engines/director/lingo/lingo-gr.cpp"
+#line 3403 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3391 "engines/director/lingo/lingo-gr.cpp"
+#line 3407 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
@@ -3586,7 +3602,7 @@ yyreturn:
   return yyresult;
 }
 
-#line 713 "engines/director/lingo/lingo-gr.y"
+#line 729 "engines/director/lingo/lingo-gr.y"
 
 
 int yyreport_syntax_error(const yypcontext_t *ctx) {
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 3011ead9bc..0f41bc201c 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -148,7 +148,7 @@ extern int yydebug;
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
 union YYSTYPE
 {
-#line 100 "engines/director/lingo/lingo-gr.y"
+#line 110 "engines/director/lingo/lingo-gr.y"
 
 	Common::String *s;
 	int i;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 726c74f6a3..9712689d34 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -88,11 +88,21 @@ static void inArgs() { g_lingo->_indef = kStateInArgs; }
 static void inDef()  { g_lingo->_indef = kStateInDef; }
 static void inNone() { g_lingo->_indef = kStateNone; }
 
-static void startDef() { inArgs(); }
+static void startDef() {
+	inArgs();
+	g_lingo->_methodVars.clear();
+}
+
 static void endDef() {
 	g_lingo->clearArgStack();
 	inNone();
 	g_lingo->_ignoreMe = false;
+
+	g_lingo->_methodVars.clear();
+}
+
+static void mArg(Common::String *s) {
+	g_lingo->_methodVars[*s] = true;
 }
 
 %}
@@ -540,28 +550,34 @@ proc: tPUT expr					{ g_lingo->code1(LC::c_printtop); }
 globallist: ID					{
 		g_lingo->code1(LC::c_global);
 		g_lingo->codeString($1->c_str());
+		mArg($1);
 		delete $ID; }
 	| globallist ',' ID			{
 		g_lingo->code1(LC::c_global);
 		g_lingo->codeString($3->c_str());
+		mArg($3);
 		delete $ID; }
 
 propertylist: ID				{
 		g_lingo->code1(LC::c_property);
 		g_lingo->codeString($1->c_str());
+		mArg($1);
 		delete $ID; }
 	| propertylist ',' ID		{
 		g_lingo->code1(LC::c_property);
 		g_lingo->codeString($3->c_str());
+		mArg($3);
 		delete $ID; }
 
 instancelist: ID				{
 		g_lingo->code1(LC::c_instance);
 		g_lingo->codeString($1->c_str());
+		mArg($1);
 		delete $ID; }
 	| instancelist ',' ID		{
 		g_lingo->code1(LC::c_instance);
 		g_lingo->codeString($3->c_str());
+		mArg($3);
 		delete $ID; }
 
 // go {to} {frame} whichFrame {of movie whichMovie}
@@ -663,8 +679,8 @@ on:  tON { startDef(); } ID 	{
 		$$ = $ID; g_lingo->_currentFactory.clear(); g_lingo->_ignoreMe = true; }
 
 argdef:  /* nothing */ 			{ $$ = 0; }
-	| ID						{ g_lingo->codeArg($ID); $$ = 1; delete $ID; }
-	| argdef ',' ID				{ g_lingo->codeArg($ID); $$ = $1 + 1; delete $ID; }
+	| ID						{ g_lingo->codeArg($ID); mArg($ID); $$ = 1; delete $ID; }
+	| argdef ',' ID				{ g_lingo->codeArg($ID); mArg($ID); $$ = $1 + 1; delete $ID; }
 
 endargdef:	/* nothing */
 	| ID						{ delete $ID; }
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 2a46d9c8e9..c31487a257 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -419,6 +419,7 @@ public:
 	LexerDefineState _indef;
 	bool _ignoreMe;
 	bool _immediateMode;
+	Common::HashMap<Common::String, bool, Common::IgnoreCase_Hash, Common::IgnoreCase_EqualTo> _methodVars;
 
 	Common::Array<CFrame *> _callstack;
 	Common::Array<Common::String *> _argstack;


Commit: 271ccbcab4a2dc8399d13eb075a6223ae700abc1
    https://github.com/scummvm/scummvm/commit/271ccbcab4a2dc8399d13eb075a6223ae700abc1
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-05-20T01:28:03+02:00

Commit Message:
DIRECTOR: LINGO: Use literals instead of number references in grammar

Changed paths:
    engines/director/lingo/lingo-gr.y


diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 9712689d34..5829f35fde 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -549,35 +549,35 @@ proc: tPUT expr					{ g_lingo->code1(LC::c_printtop); }
 
 globallist: ID					{
 		g_lingo->code1(LC::c_global);
-		g_lingo->codeString($1->c_str());
-		mArg($1);
+		g_lingo->codeString($ID->c_str());
+		mArg($ID);
 		delete $ID; }
 	| globallist ',' ID			{
 		g_lingo->code1(LC::c_global);
-		g_lingo->codeString($3->c_str());
-		mArg($3);
+		g_lingo->codeString($ID->c_str());
+		mArg($ID);
 		delete $ID; }
 
 propertylist: ID				{
 		g_lingo->code1(LC::c_property);
-		g_lingo->codeString($1->c_str());
-		mArg($1);
+		g_lingo->codeString($ID->c_str());
+		mArg($ID);
 		delete $ID; }
 	| propertylist ',' ID		{
 		g_lingo->code1(LC::c_property);
-		g_lingo->codeString($3->c_str());
-		mArg($3);
+		g_lingo->codeString($ID->c_str());
+		mArg($ID);
 		delete $ID; }
 
 instancelist: ID				{
 		g_lingo->code1(LC::c_instance);
-		g_lingo->codeString($1->c_str());
-		mArg($1);
+		g_lingo->codeString($ID->c_str());
+		mArg($ID);
 		delete $ID; }
 	| instancelist ',' ID		{
 		g_lingo->code1(LC::c_instance);
-		g_lingo->codeString($3->c_str());
-		mArg($3);
+		g_lingo->codeString($ID->c_str());
+		mArg($ID);
 		delete $ID; }
 
 // go {to} {frame} whichFrame {of movie whichMovie}
@@ -654,7 +654,7 @@ defn: tMACRO { startDef(); } ID { g_lingo->_currentFactory.clear(); }
 		g_lingo->define(*$ID, $begin, $argdef);
 		endDef();
 		delete $ID; }
-	| tFACTORY ID	{ g_lingo->codeFactory(*$2); delete $ID; }
+	| tFACTORY ID	{ g_lingo->codeFactory(*$ID); delete $ID; }
 	| tMETHOD { startDef(); }
 			begin argdef '\n' argstore stmtlist 		{
 		g_lingo->code1(LC::c_procret);


Commit: 985371e3d03c23441f5baa091e609819c6c69fd3
    https://github.com/scummvm/scummvm/commit/985371e3d03c23441f5baa091e609819c6c69fd3
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-05-20T01:28:03+02:00

Commit Message:
DIRECTOR: LINGO: Make parser aware of local variables

Changed paths:
    engines/director/lingo/lingo-lex.cpp
    engines/director/lingo/lingo-lex.l


diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index 9c24268235..01d38ba80b 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -778,7 +778,8 @@ static void count() {
 }
 
 static int checkImmediate(int token) {
-	if (g_lingo->_immediateMode) {
+	if (g_lingo->_immediateMode || g_lingo->_indef == kStateInArgs ||
+			g_lingo->_methodVars.contains(yytext)) {
 		yylval.s = new Common::String(yytext);
 
 		return ID;
@@ -803,7 +804,17 @@ static Common::String *cleanupString(const char *s) {
 	return res;
 }
 
-#line 807 "engines/director/lingo/lingo-lex.cpp"
+static int varCheck(int token, const char *name) {
+	if (g_lingo->_indef == kStateInArgs || g_lingo->_methodVars.contains(name)) {
+		yylval.s = new Common::String(name);
+
+		return ID;
+	}
+
+	return token;
+}
+
+#line 818 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -988,10 +999,10 @@ YY_DECL
 	register char *yy_cp, *yy_bp;
 	register int yy_act;
     
-#line 108 "engines/director/lingo/lingo-lex.l"
+#line 119 "engines/director/lingo/lingo-lex.l"
 
 
-#line 995 "engines/director/lingo/lingo-lex.cpp"
+#line 1006 "engines/director/lingo/lingo-lex.cpp"
 
 	if ( !(yy_init) )
 		{
@@ -1073,62 +1084,62 @@ do_action:	/* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 110 "engines/director/lingo/lingo-lex.l"
+#line 121 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 112 "engines/director/lingo/lingo-lex.l"
+#line 123 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = new Common::String(yytext + 1); return SYMBOL; }	// D3, skip '#'
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 114 "engines/director/lingo/lingo-lex.l"
-{ count(); return tAFTER; }		// D3
+#line 125 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tAFTER, "after"); }		// D3
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 115 "engines/director/lingo/lingo-lex.l"
-{ count(); return tAND; }
+#line 126 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tAND, "and"); }
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 116 "engines/director/lingo/lingo-lex.l"
-{ count(); return tBEFORE; }	// D3
+#line 127 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tBEFORE, "before"); }	// D3
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 117 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCHAR; }		// D3
+#line 128 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tCHAR, "char"); }		// D3
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 118 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCONTAINS; }
+#line 129 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tCONTAINS, "contains"); }
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 119 "engines/director/lingo/lingo-lex.l"
-{ count(); return tDOWN; }
+#line 130 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tDOWN, "down"); }
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 120 "engines/director/lingo/lingo-lex.l"
+#line 131 "engines/director/lingo/lingo-lex.l"
 { count(); return tIF; }
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 121 "engines/director/lingo/lingo-lex.l"
+#line 132 "engines/director/lingo/lingo-lex.l"
 { count(); return tELSIF; }
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 122 "engines/director/lingo/lingo-lex.l"
+#line 133 "engines/director/lingo/lingo-lex.l"
 { count(); return tELSE; }
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 123 "engines/director/lingo/lingo-lex.l"
+#line 134 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1143,6 +1154,11 @@ YY_RULE_SETUP
 		else if (!scumm_stricmp(ptr, "tell"))
 			return tENDTELL;
 
+		if (!*ptr) {	// If it is stale "end", check it
+			if (varCheck(ENDCLAUSE, "end") == ID)
+				return ID;
+		}
+
 		yylval.s = new Common::String(ptr);
 
 		return ENDCLAUSE;
@@ -1150,72 +1166,72 @@ YY_RULE_SETUP
 	YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 141 "engines/director/lingo/lingo-lex.l"
+#line 157 "engines/director/lingo/lingo-lex.l"
 { count(); return tFACTORY; }
 	YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 142 "engines/director/lingo/lingo-lex.l"
-{ count(); return tEXIT; }
+#line 158 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tEXIT, "exit"); }
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 143 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGLOBAL; }
+#line 159 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tGLOBAL, "global"); }
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 144 "engines/director/lingo/lingo-lex.l"
+#line 160 "engines/director/lingo/lingo-lex.l"
 { count(); return tGO; }
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 145 "engines/director/lingo/lingo-lex.l"
+#line 161 "engines/director/lingo/lingo-lex.l"
 { count(); return tGO; }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 146 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINSTANCE; }
+#line 162 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tINSTANCE, "instance"); }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 147 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTERSECTS; }
+#line 163 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tINTERSECTS, "intersects"); }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 148 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTO; }
+#line 164 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tINTO, "into"); }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 149 "engines/director/lingo/lingo-lex.l"
-{ count(); return tIN; }
+#line 165 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tIN, "in"); }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 150 "engines/director/lingo/lingo-lex.l"
-{ count(); return tITEM; }
+#line 166 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tITEM, "item"); }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 151 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLINE; }
+#line 167 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tLINE, "line"); }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 152 "engines/director/lingo/lingo-lex.l"
+#line 168 "engines/director/lingo/lingo-lex.l"
 { count(); return checkImmediate(tLOOP); }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 153 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMACRO; }
+#line 169 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tMACRO, "macro"); }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 154 "engines/director/lingo/lingo-lex.l"
+#line 170 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1230,97 +1246,97 @@ YY_RULE_SETUP
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 165 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMOD; }
+#line 181 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tMOD, "mod"); }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 166 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMOVIE; }
+#line 182 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tMOVIE, "movie"); }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 167 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEXT; }
+#line 183 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tNEXT, "next"); }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 168 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNOT; }
+#line 184 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tNOT, "not"); }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 169 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOF; }
+#line 185 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tOF, "of"); }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 170 "engines/director/lingo/lingo-lex.l"
-{ count(); return tON; }		// D3
+#line 186 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tON, "on"); }		// D3
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 171 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOPEN; }
+#line 187 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tOPEN, "open"); }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 172 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOR; }
+#line 188 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tOR, "or"); }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 173 "engines/director/lingo/lingo-lex.l"
+#line 189 "engines/director/lingo/lingo-lex.l"
 { count(); return tPLAY; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 174 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPLAY; }
+#line 190 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tPLAY, "play"); }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 175 "engines/director/lingo/lingo-lex.l"
+#line 191 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = new Common::String(yytext); return tPLAYACCEL; }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 176 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPREVIOUS; }
+#line 192 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tPREVIOUS, "previous"); }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 177 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPROPERTY; }	// D4
+#line 193 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tPROPERTY, "property"); }	// D4
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 178 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPUT; }
+#line 194 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tPUT, "put"); }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 179 "engines/director/lingo/lingo-lex.l"
+#line 195 "engines/director/lingo/lingo-lex.l"
 { count(); return checkImmediate(tREPEAT); }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 180 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSET; }
+#line 196 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tSET, "set"); }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 181 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSTARTS; }
+#line 197 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tSTARTS, "starts"); }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 182 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTELL; }
+#line 198 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tTELL, "tell"); }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 183 "engines/director/lingo/lingo-lex.l"
+#line 199 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1359,7 +1375,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 218 "engines/director/lingo/lingo-lex.l"
+#line 234 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1385,7 +1401,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 240 "engines/director/lingo/lingo-lex.l"
+#line 256 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1452,7 +1468,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 303 "engines/director/lingo/lingo-lex.l"
+#line 319 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1490,7 +1506,7 @@ YY_RULE_SETUP
 	YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 337 "engines/director/lingo/lingo-lex.l"
+#line 353 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1521,72 +1537,72 @@ YY_RULE_SETUP
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 364 "engines/director/lingo/lingo-lex.l"
+#line 380 "engines/director/lingo/lingo-lex.l"
 { count(); return tTHEN; }
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 365 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTO; }
+#line 381 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tTO, "to"); }
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 366 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSPRITE; }
+#line 382 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tSPRITE, "sprite"); }
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 367 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITH; }
+#line 383 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tWITH, "with"); }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 368 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITHIN; }
+#line 384 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tWITHIN, "within"); }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 369 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHEN; }
+#line 385 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tWHEN, "when"); }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 370 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHILE; }
+#line 386 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tWHILE, "while"); }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 371 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWORD; }
+#line 387 "engines/director/lingo/lingo-lex.l"
+{ count(); return varCheck(tWORD, "word"); }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 373 "engines/director/lingo/lingo-lex.l"
+#line 389 "engines/director/lingo/lingo-lex.l"
 { count(); return tNEQ; }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 374 "engines/director/lingo/lingo-lex.l"
+#line 390 "engines/director/lingo/lingo-lex.l"
 { count(); return tGE; }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 375 "engines/director/lingo/lingo-lex.l"
+#line 391 "engines/director/lingo/lingo-lex.l"
 { count(); return tLE; }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 376 "engines/director/lingo/lingo-lex.l"
+#line 392 "engines/director/lingo/lingo-lex.l"
 { count(); return tCONCAT; }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 377 "engines/director/lingo/lingo-lex.l"
+#line 393 "engines/director/lingo/lingo-lex.l"
 { count(); return tEQ; }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 379 "engines/director/lingo/lingo-lex.l"
+#line 395 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1598,6 +1614,11 @@ YY_RULE_SETUP
 		if (g_lingo->_indef == kStateInArgs)
 			return ID;
 
+		// Check that this is one of locally used names:
+		// argument, propery, instance or global
+		if (g_lingo->_methodVars.contains(yytext))
+			return ID;
+
 		// First of all, match against argument list
 		if (g_lingo->_indef == kStateInDef)
 			if (g_lingo->isInArgStack(yylval.s))
@@ -1624,41 +1645,41 @@ YY_RULE_SETUP
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 413 "engines/director/lingo/lingo-lex.l"
+#line 434 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.f = atof(yytext); return FLOAT; }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 414 "engines/director/lingo/lingo-lex.l"
+#line 435 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 415 "engines/director/lingo/lingo-lex.l"
+#line 436 "engines/director/lingo/lingo-lex.l"
 { count(); return *yytext; }
 	YY_BREAK
 case 67:
 /* rule 67 can match eol */
 YY_RULE_SETUP
-#line 416 "engines/director/lingo/lingo-lex.l"
+#line 437 "engines/director/lingo/lingo-lex.l"
 { count(); return '\n'; }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 417 "engines/director/lingo/lingo-lex.l"
+#line 438 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = cleanupString(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 418 "engines/director/lingo/lingo-lex.l"
+#line 439 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 420 "engines/director/lingo/lingo-lex.l"
+#line 441 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1662 "engines/director/lingo/lingo-lex.cpp"
+#line 1683 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2655,7 +2676,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 420 "engines/director/lingo/lingo-lex.l"
+#line 441 "engines/director/lingo/lingo-lex.l"
 
 
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index b06c1c27f3..e8868ec818 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -70,7 +70,8 @@ static void count() {
 }
 
 static int checkImmediate(int token) {
-	if (g_lingo->_immediateMode) {
+	if (g_lingo->_immediateMode || g_lingo->_indef == kStateInArgs ||
+			g_lingo->_methodVars.contains(yytext)) {
 		yylval.s = new Common::String(yytext);
 
 		return ID;
@@ -95,6 +96,16 @@ static Common::String *cleanupString(const char *s) {
 	return res;
 }
 
+static int varCheck(int token, const char *name) {
+	if (g_lingo->_indef == kStateInArgs || g_lingo->_methodVars.contains(name)) {
+		yylval.s = new Common::String(name);
+
+		return ID;
+	}
+
+	return token;
+}
+
 %}
 
 identifier [_[:alpha:]][_[:alnum:]]*
@@ -111,12 +122,12 @@ spc [ \t\xC2]
 
 [#]{identifier}	{ count(); yylval.s = new Common::String(yytext + 1); return SYMBOL; }	// D3, skip '#'
 
-after		{ count(); return tAFTER; }		// D3
-and			{ count(); return tAND; }
-before		{ count(); return tBEFORE; }	// D3
-char		{ count(); return tCHAR; }		// D3
-contains	{ count(); return tCONTAINS; }
-down		{ count(); return tDOWN; }
+after		{ count(); return varCheck(tAFTER, "after"); }		// D3
+and			{ count(); return varCheck(tAND, "and"); }
+before		{ count(); return varCheck(tBEFORE, "before"); }	// D3
+char		{ count(); return varCheck(tCHAR, "char"); }		// D3
+contains	{ count(); return varCheck(tCONTAINS, "contains"); }
+down		{ count(); return varCheck(tDOWN, "down"); }
 if			{ count(); return tIF; }
 else{spc}+if { count(); return tELSIF; }
 else		{ count(); return tELSE; }
@@ -134,23 +145,28 @@ end({spc}+{identifier})?	{
 		else if (!scumm_stricmp(ptr, "tell"))
 			return tENDTELL;
 
+		if (!*ptr) {	// If it is stale "end", check it
+			if (varCheck(ENDCLAUSE, "end") == ID)
+				return ID;
+		}
+
 		yylval.s = new Common::String(ptr);
 
 		return ENDCLAUSE;
 	}
 ^{spc}*factory { count(); return tFACTORY; }
-exit		{ count(); return tEXIT; }
-global		{ count(); return tGLOBAL; }
+exit		{ count(); return varCheck(tEXIT, "exit"); }
+global		{ count(); return varCheck(tGLOBAL, "global"); }
 go{spc}+(to{spc}+)?frame	{ count(); return tGO; }
 go{spc}+(to)?	{ count(); return tGO; }
-instance	{ count(); return tINSTANCE; }
-intersects	{ count(); return tINTERSECTS; }
-into		{ count(); return tINTO; }
-in			{ count(); return tIN; }
-item		{ count(); return tITEM; }
-line		{ count(); return tLINE; }
+instance	{ count(); return varCheck(tINSTANCE, "instance"); }
+intersects	{ count(); return varCheck(tINTERSECTS, "intersects"); }
+into		{ count(); return varCheck(tINTO, "into"); }
+in			{ count(); return varCheck(tIN, "in"); }
+item		{ count(); return varCheck(tITEM, "item"); }
+line		{ count(); return varCheck(tLINE, "line"); }
 loop		{ count(); return checkImmediate(tLOOP); }
-macro		{ count(); return tMACRO; }
+macro		{ count(); return varCheck(tMACRO, "macro"); }
 method{spc}+{identifier}		{
 		count();
 
@@ -162,24 +178,24 @@ method{spc}+{identifier}		{
 
 		return tMETHOD;
 	}
-mod			{ count(); return tMOD; }
-movie		{ count(); return tMOVIE; }
-next		{ count(); return tNEXT; }
-not			{ count(); return tNOT; }
-of			{ count(); return tOF; }
-on			{ count(); return tON; }		// D3
-open		{ count(); return tOPEN; }
-or			{ count(); return tOR; }
+mod			{ count(); return varCheck(tMOD, "mod"); }
+movie		{ count(); return varCheck(tMOVIE, "movie"); }
+next		{ count(); return varCheck(tNEXT, "next"); }
+not			{ count(); return varCheck(tNOT, "not"); }
+of			{ count(); return varCheck(tOF, "of"); }
+on			{ count(); return varCheck(tON, "on"); }		// D3
+open		{ count(); return varCheck(tOPEN, "open"); }
+or			{ count(); return varCheck(tOR, "or"); }
 play{spc}+frame	{ count(); return tPLAY; }
-play		{ count(); return tPLAY; }
+play		{ count(); return varCheck(tPLAY, "play"); }
 playAccel	{ count(); yylval.s = new Common::String(yytext); return tPLAYACCEL; }
-previous	{ count(); return tPREVIOUS; }
-property	{ count(); return tPROPERTY; }	// D4
-put			{ count(); return tPUT; }
+previous	{ count(); return varCheck(tPREVIOUS, "previous"); }
+property	{ count(); return varCheck(tPROPERTY, "property"); }	// D4
+put			{ count(); return varCheck(tPUT, "put"); }
 repeat		{ count(); return checkImmediate(tREPEAT); }
-set			{ count(); return tSET; }
-starts		{ count(); return tSTARTS; }
-tell		{ count(); return tTELL; }
+set			{ count(); return varCheck(tSET, "set"); }
+starts		{ count(); return varCheck(tSTARTS, "starts"); }
+tell		{ count(); return varCheck(tTELL, "tell"); }
 the{spc}+number{spc}+of{spc}+[[:alpha:]]+{spc}+(in|of){spc}+ {
 		count();
 
@@ -362,13 +378,13 @@ the{spc}+[[:alpha:]]+		{
 		warning("LEXER: Unhandled the entity '%s'", ptr);
 	}
 then			{ count(); return tTHEN; }
-to				{ count(); return tTO; }
-sprite			{ count(); return tSPRITE; }
-with			{ count(); return tWITH; }
-within			{ count(); return tWITHIN; }
-when			{ count(); return tWHEN; }
-while			{ count(); return tWHILE; }
-word			{ count(); return tWORD; }
+to				{ count(); return varCheck(tTO, "to"); }
+sprite			{ count(); return varCheck(tSPRITE, "sprite"); }
+with			{ count(); return varCheck(tWITH, "with"); }
+within			{ count(); return varCheck(tWITHIN, "within"); }
+when			{ count(); return varCheck(tWHEN, "when"); }
+while			{ count(); return varCheck(tWHILE, "while"); }
+word			{ count(); return varCheck(tWORD, "word"); }
 
 [<][>]			{ count(); return tNEQ; }
 [>][=]			{ count(); return tGE; }
@@ -387,6 +403,11 @@ word			{ count(); return tWORD; }
 		if (g_lingo->_indef == kStateInArgs)
 			return ID;
 
+		// Check that this is one of locally used names:
+		// argument, propery, instance or global
+		if (g_lingo->_methodVars.contains(yytext))
+			return ID;
+
 		// First of all, match against argument list
 		if (g_lingo->_indef == kStateInDef)
 			if (g_lingo->isInArgStack(yylval.s))


Commit: e58c21d0f3f8eadf0fae192f12127e7dfe25043d
    https://github.com/scummvm/scummvm/commit/e58c21d0f3f8eadf0fae192f12127e7dfe25043d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2020-05-20T01:28:03+02:00

Commit Message:
DIRECTOR: LINGO: Fix bug with 'end' lexing

Changed paths:
    engines/director/lingo/lingo-lex.cpp
    engines/director/lingo/lingo-lex.l


diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index 01d38ba80b..a30190991d 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -1143,7 +1143,7 @@ YY_RULE_SETUP
 {
 		count();
 
-		const char *ptr = &yytext[4]; // Skip 'end '
+		const char *ptr = &yytext[3]; // Skip 'end '
 		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2')
 			ptr++;
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index e8868ec818..d5d0dcba5b 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -134,7 +134,7 @@ else		{ count(); return tELSE; }
 end({spc}+{identifier})?	{
 		count();
 
-		const char *ptr = &yytext[4]; // Skip 'end '
+		const char *ptr = &yytext[3]; // Skip 'end '
 		while (*ptr == ' ' || *ptr == '\t' || *ptr == '\xC2')
 			ptr++;
 




More information about the Scummvm-git-logs mailing list