[Scummvm-git-logs] scummvm master -> 74f008e14e52086e5081633abe3844ec8bb872a1

sev- sev at scummvm.org
Wed Jan 11 19:26:25 CET 2017


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

Summary:
895e02e1f6 DIRECTOR: Lingo: Fixed parsing of builtins with arglist
8eb8f9b0ef DIRECTOR: Lingo: Fixed argument count for factory methods
74f008e14e DIRECTOR: Lingo: Proper processing of me() in factories


Commit: 895e02e1f61feb3cd7e9f73bc5a5de0fb7b139f2
    https://github.com/scummvm/scummvm/commit/895e02e1f61feb3cd7e9f73bc5a5de0fb7b139f2
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-01-11T19:27:19+01:00

Commit Message:
DIRECTOR: Lingo: Fixed parsing of builtins with arglist

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


diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index d1fc53a..7fca7be 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -518,18 +518,18 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  105
+#define YYFINAL  106
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1494
+#define YYLAST   1585
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  94
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  39
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  146
+#define YYNRULES  147
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  315
+#define YYNSTATES  319
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -592,11 +592,11 @@ static const yytype_uint16 yyprhs[] =
      274,   278,   282,   286,   290,   294,   298,   302,   306,   310,
      313,   317,   321,   325,   329,   333,   336,   339,   343,   348,
      353,   358,   365,   370,   377,   382,   389,   394,   401,   404,
-     406,   408,   411,   413,   416,   419,   422,   425,   427,   430,
-     435,   438,   442,   444,   448,   450,   454,   457,   460,   463,
-     466,   470,   473,   476,   478,   482,   485,   488,   491,   495,
-     498,   499,   508,   511,   512,   521,   522,   523,   534,   535,
-     537,   541,   546,   547,   551,   552,   554
+     406,   408,   411,   413,   416,   419,   422,   425,   427,   432,
+     435,   440,   443,   447,   449,   453,   455,   459,   462,   465,
+     468,   471,   475,   478,   481,   483,   487,   490,   493,   496,
+     500,   503,   504,   513,   516,   517,   526,   527,   528,   539,
+     540,   542,   546,   551,   552,   556,   557,   559
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -644,20 +644,21 @@ static const yytype_int16 yyrhs[] =
      116,    39,   116,    -1,    75,   116,    45,   116,    39,   116,
       -1,    41,   116,    -1,   120,    -1,   123,    -1,    29,    42,
       -1,    29,    -1,    31,   118,    -1,    56,   119,    -1,    18,
-     116,    -1,    17,   116,    -1,    17,    -1,    19,   132,    -1,
-      52,   116,    47,   116,    -1,    52,   116,    -1,    20,    21,
-     132,    -1,    21,    -1,   118,    93,    21,    -1,    21,    -1,
-     119,    93,    21,    -1,    32,    35,    -1,    32,    38,    -1,
-      32,    40,    -1,    32,   121,    -1,    32,   121,   122,    -1,
-      32,   122,    -1,    30,   116,    -1,   116,    -1,    39,    37,
-     116,    -1,    37,   116,    -1,    53,    54,    -1,    53,   121,
-      -1,    53,   121,   122,    -1,    53,   122,    -1,    -1,    36,
-      21,   125,   112,   129,    96,   130,   114,    -1,    50,    21,
-      -1,    -1,    51,    21,   126,   112,   129,    96,   130,   114,
-      -1,    -1,    -1,    79,    21,   127,   112,   128,   129,    96,
-     130,   114,    25,    -1,    -1,    21,    -1,   129,    93,    21,
-      -1,   129,    96,    93,    21,    -1,    -1,    21,   112,   132,
-      -1,    -1,   116,    -1,   132,    93,   116,    -1
+     116,    -1,    17,   116,    -1,    17,    -1,    19,    89,   132,
+      90,    -1,    19,   132,    -1,    52,   116,    47,   116,    -1,
+      52,   116,    -1,    20,    21,   132,    -1,    21,    -1,   118,
+      93,    21,    -1,    21,    -1,   119,    93,    21,    -1,    32,
+      35,    -1,    32,    38,    -1,    32,    40,    -1,    32,   121,
+      -1,    32,   121,   122,    -1,    32,   122,    -1,    30,   116,
+      -1,   116,    -1,    39,    37,   116,    -1,    37,   116,    -1,
+      53,    54,    -1,    53,   121,    -1,    53,   121,   122,    -1,
+      53,   122,    -1,    -1,    36,    21,   125,   112,   129,    96,
+     130,   114,    -1,    50,    21,    -1,    -1,    51,    21,   126,
+     112,   129,    96,   130,   114,    -1,    -1,    -1,    79,    21,
+     127,   112,   128,   129,    96,   130,   114,    25,    -1,    -1,
+      21,    -1,   129,    93,    21,    -1,   129,    96,    93,    21,
+      -1,    -1,    21,   112,   132,    -1,    -1,   116,    -1,   132,
+      93,   116,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -674,10 +675,10 @@ static const yytype_uint16 yyrline[] =
      431,   432,   433,   434,   435,   436,   437,   438,   439,   440,
      441,   442,   443,   444,   445,   446,   447,   448,   451,   452,
      453,   454,   455,   457,   458,   459,   462,   465,   468,   469,
-     470,   471,   474,   475,   478,   479,   490,   491,   492,   493,
-     496,   499,   504,   505,   508,   509,   512,   513,   516,   519,
-     549,   549,   555,   558,   558,   563,   564,   563,   574,   575,
-     576,   577,   579,   583,   591,   592,   593
+     470,   471,   472,   475,   476,   479,   480,   491,   492,   493,
+     494,   497,   500,   505,   506,   509,   510,   513,   514,   517,
+     520,   550,   550,   556,   559,   559,   564,   565,   564,   575,
+     576,   577,   578,   580,   584,   592,   593,   594
 };
 #endif
 
@@ -741,10 +742,10 @@ static const yytype_uint8 yyr1[] =
      116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
      116,   116,   116,   116,   116,   116,   116,   116,   117,   117,
      117,   117,   117,   117,   117,   117,   117,   117,   117,   117,
-     117,   117,   118,   118,   119,   119,   120,   120,   120,   120,
-     120,   120,   121,   121,   122,   122,   123,   123,   123,   123,
-     125,   124,   124,   126,   124,   127,   128,   124,   129,   129,
-     129,   129,   130,   131,   132,   132,   132
+     117,   117,   117,   118,   118,   119,   119,   120,   120,   120,
+     120,   120,   120,   121,   121,   122,   122,   123,   123,   123,
+     123,   125,   124,   124,   126,   124,   127,   128,   124,   129,
+     129,   129,   129,   130,   131,   132,   132,   132
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -760,11 +761,11 @@ static const yytype_uint8 yyr2[] =
        3,     3,     3,     3,     3,     3,     3,     3,     3,     2,
        3,     3,     3,     3,     3,     2,     2,     3,     4,     4,
        4,     6,     4,     6,     4,     6,     4,     6,     2,     1,
-       1,     2,     1,     2,     2,     2,     2,     1,     2,     4,
-       2,     3,     1,     3,     1,     3,     2,     2,     2,     2,
-       3,     2,     2,     1,     3,     2,     2,     2,     3,     2,
-       0,     8,     2,     0,     8,     0,     0,    10,     0,     1,
-       3,     4,     0,     3,     0,     1,     3
+       1,     2,     1,     2,     2,     2,     2,     1,     4,     2,
+       4,     2,     3,     1,     3,     1,     3,     2,     2,     2,
+       2,     3,     2,     2,     1,     3,     2,     2,     2,     3,
+       2,     0,     8,     2,     0,     8,     0,     0,    10,     0,
+       1,     3,     4,     0,     3,     0,     1,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -772,95 +773,95 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,    57,    64,     0,    58,    61,   107,     0,   144,
+       0,     0,    57,    64,     0,    58,    61,   107,     0,   145,
        0,    51,    60,    59,   102,     0,     0,    49,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     3,
       66,    23,    11,    24,     0,     0,     0,     0,    21,     8,
       99,   100,     7,     9,     5,     4,    63,     0,    66,    65,
-     106,   105,   145,   108,   144,   144,   144,   101,   112,   103,
-       0,   116,     0,   117,     0,   118,   123,   119,   121,   130,
-      98,     0,    47,     0,     0,     0,     0,   132,   133,   110,
-     126,   127,   129,   114,   104,    79,     0,     0,     0,     0,
-       0,   135,    85,    86,     0,     1,     6,     0,     0,     0,
-       0,    44,    52,     0,     0,     0,     0,     0,     0,     0,
+     106,   105,   145,   146,   109,   145,   145,   145,   101,   113,
+     103,     0,   117,     0,   118,     0,   119,   124,   120,   122,
+     131,    98,     0,    47,     0,     0,     0,     0,   133,   134,
+     111,   127,   128,   130,   115,   104,    79,     0,     0,     0,
+       0,     0,   136,    85,    86,     0,     1,     6,     0,     0,
+       0,     0,    44,    52,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   111,     0,   143,     0,   122,   125,     0,   120,
-      51,     0,     0,     0,    48,     0,     0,     0,     0,     0,
-      56,    51,     0,   128,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    51,    87,     2,     0,    52,
-       0,     0,    51,     0,    28,    75,    76,    74,    77,    78,
-      71,    81,    82,    83,    84,    80,    67,    68,    69,    70,
-      72,    73,   146,    62,   113,   124,   138,    12,    13,    14,
-      19,    16,     0,     0,    18,    15,   138,   109,   115,    90,
-       0,    92,     0,    94,     0,    96,     0,    88,    89,   136,
-      53,     0,    46,    53,     0,    45,   139,     0,    20,    17,
-       0,     0,     0,     0,     0,   138,    52,     0,     0,    52,
-      52,    22,     0,   142,   142,    91,    93,    95,    97,     0,
-      54,    55,     0,     0,    52,    51,    32,   140,     0,    53,
-      53,   142,    25,    52,    53,    29,    53,     0,    50,    51,
-      52,    40,     0,   141,   131,   134,    53,    53,    52,    52,
-      52,    42,    38,     0,     0,    39,    35,     0,     0,    52,
-       0,     0,    37,     0,     0,    52,    51,    52,    51,   137,
-       0,    26,    30,    31,    51,    33,     0,    34,     0,    27,
-      52,    36,    52,    43,    41
+       0,     0,   146,     0,     0,   112,     0,   144,     0,   123,
+     126,     0,   121,    51,     0,     0,     0,    48,     0,     0,
+       0,     0,     0,    56,    51,     0,   129,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    51,    87,
+       2,     0,    52,     0,     0,    51,     0,    28,    75,    76,
+      74,    77,    78,    71,    81,    82,    83,    84,    80,    67,
+      68,    69,    70,    72,    73,   108,   147,    62,   114,   125,
+     139,    12,    13,    14,    19,    16,     0,     0,    18,    15,
+     139,   110,   116,    90,     0,    92,     0,    94,     0,    96,
+       0,    88,    89,   137,    53,     0,    46,    53,     0,    45,
+     140,     0,    20,    17,     0,     0,     0,     0,     0,   139,
+      52,     0,     0,    52,    52,    22,     0,   143,   143,    91,
+      93,    95,    97,     0,    54,    55,     0,     0,    52,    51,
+      32,   141,     0,    53,    53,   143,    25,    52,    53,    29,
+      53,     0,    50,    51,    52,    40,     0,   142,   132,   135,
+      53,    53,    52,    52,    52,    42,    38,     0,     0,    39,
+      35,     0,     0,    52,     0,     0,    37,     0,     0,    52,
+      51,    52,    51,   138,     0,    26,    30,    31,    51,    33,
+       0,    34,     0,    27,    52,    36,    52,    43,    41
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    38,   250,    39,    58,    41,   251,    43,   297,   280,
-     281,   271,   282,   110,    44,    45,    46,   272,   308,   174,
-     236,    47,    48,   241,    69,    94,    50,    77,    78,    51,
-      52,   140,   151,   165,   235,   227,   259,    53,    63
+      -1,    38,   254,    39,    58,    41,   255,    43,   301,   284,
+     285,   275,   286,   111,    44,    45,    46,   276,   312,   177,
+     240,    47,    48,   245,    70,    95,    50,    78,    79,    51,
+      52,   143,   154,   168,   239,   231,   263,    53,    64
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -244
+#define YYPACT_NINF -255
 static const yytype_int16 yypact[] =
 {
-     318,   -73,  -244,  -244,   871,  -244,  -244,   871,   871,   871,
-      26,  1402,  -244,  -244,    19,    49,   769,  -244,    53,   871,
-      17,    89,    70,    73,    77,   871,   835,    78,   871,   871,
-     871,   871,   871,   871,    90,   871,   871,   871,     4,  -244,
-       5,  -244,  -244,  -244,    29,    40,   909,   871,  1371,  -244,
-    -244,  -244,  -244,  -244,  -244,  -244,    36,   871,  -244,  1371,
-    1371,  1371,  1371,    35,   871,   871,   871,  -244,  -244,    38,
-     871,  -244,   871,  -244,    95,  -244,  1371,    80,  -244,  -244,
-     933,   112,  -244,   -32,   871,   -13,    91,  -244,  -244,   -41,
-    -244,    80,  -244,  -244,    43,    21,   158,   969,  1005,  1041,
-    1247,  -244,    21,    21,  1309,  -244,   397,   909,   871,   909,
-      93,  1340,  1371,   871,   871,   871,   871,   871,   871,   871,
-     871,   871,   871,   871,   871,   871,   871,   871,   871,   871,
-     933,   871,    35,   -59,    35,   117,  1371,  1371,   871,  -244,
-    -244,   118,   871,   871,  -244,   871,   871,  1216,   871,   871,
-    -244,  -244,   871,  -244,   119,   871,   871,   871,   871,   871,
-     871,   871,   871,   871,   871,  -244,  -244,  -244,    57,  1371,
-      58,  1278,   -73,   871,  -244,    60,    60,    60,    21,    21,
-      21,  1371,  1371,    60,    60,   465,   313,   313,    21,    21,
-    1371,  1371,  1371,  -244,  -244,  1371,   128,  -244,  1371,  1371,
-    1371,  1371,   871,   871,  1371,  1371,   128,  1371,  -244,  1371,
-    1077,  1371,  1113,  1371,  1149,  1371,  1185,  1371,  1371,  -244,
-    -244,     7,  -244,  -244,   703,  1371,  -244,   -53,  1371,  1371,
-     -53,   871,   871,   871,   871,   128,   550,   105,   871,   550,
-    -244,  -244,   132,    61,    61,  1371,  1371,  1371,  1371,   -53,
-    -244,  -244,   131,   871,  1371,   -11,    -1,  -244,   139,  -244,
-    -244,    61,  -244,  1371,  -244,  -244,  -244,   133,  -244,  -244,
-     133,  -244,   909,  -244,   550,   550,  -244,  -244,   550,   550,
-     133,   133,  -244,   909,   703,  -244,   136,   138,   471,   550,
-     161,   162,  -244,   164,   146,  -244,  -244,  -244,  -244,  -244,
-     166,  -244,  -244,  -244,   -17,  -244,   703,  -244,   629,  -244,
-     550,  -244,  -244,  -244,  -244
+     306,   -63,  -255,  -255,   859,  -255,  -255,   859,   859,   897,
+       6,  1493,  -255,  -255,    11,    37,   757,  -255,    47,   859,
+      -2,    90,    54,    59,    61,   859,   823,    64,   859,   859,
+     859,   859,   859,   859,    76,   859,   859,   859,     4,  -255,
+       8,  -255,  -255,  -255,    12,    19,   933,   859,  1462,  -255,
+    -255,  -255,  -255,  -255,  -255,  -255,    17,   859,  -255,  1462,
+    1462,  1462,   859,  1462,    15,   859,   859,   859,  -255,  -255,
+      21,   859,  -255,   859,  -255,    75,  -255,  1462,    42,  -255,
+    -255,   957,    98,  -255,   -40,   859,   -38,    77,  -255,  -255,
+    1307,  -255,    42,  -255,  -255,    29,   -56,   993,  1029,  1065,
+    1101,  1338,  -255,   -56,   -56,  1400,  -255,   385,   933,   859,
+     933,    82,  1431,  1462,   859,   859,   859,   859,   859,   859,
+     859,   859,   859,   859,   859,   859,   859,   859,   859,   859,
+     859,   957,  1400,   -30,   859,    15,   -20,    15,   106,  1462,
+    1462,   859,  -255,  -255,   107,   859,   859,  -255,   859,   859,
+    1276,   859,   859,  -255,  -255,   859,  -255,   109,   859,   859,
+     859,   859,   859,   859,   859,   859,   859,   859,  -255,  -255,
+    -255,    46,  1462,    49,  1369,   -63,   859,  -255,   -35,   -35,
+     -35,   -56,   -56,   -56,  1462,  1462,   -35,   -35,    71,   301,
+     301,   -56,   -56,  1462,  1462,  -255,  1462,  -255,  -255,  1462,
+     111,  -255,  1462,  1462,  1462,  1462,   859,   859,  1462,  1462,
+     111,  1462,  -255,  1462,  1137,  1462,  1173,  1462,  1209,  1462,
+    1245,  1462,  1462,  -255,  -255,    -3,  -255,  -255,   691,  1462,
+    -255,   -67,  1462,  1462,   -67,   859,   859,   859,   859,   111,
+     538,    96,   859,   538,  -255,  -255,   121,    52,    52,  1462,
+    1462,  1462,  1462,   -67,  -255,  -255,   122,   859,  1462,   -11,
+      -9,  -255,   125,  -255,  -255,    52,  -255,  1462,  -255,  -255,
+    -255,   120,  -255,  -255,   120,  -255,   933,  -255,   538,   538,
+    -255,  -255,   538,   538,   120,   120,  -255,   933,   691,  -255,
+     100,   108,   459,   538,   126,   128,  -255,   134,   117,  -255,
+    -255,  -255,  -255,  -255,   139,  -255,  -255,  -255,   -19,  -255,
+     691,  -255,   617,  -255,   538,  -255,  -255,  -255,  -255
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -244,  -244,     8,    94,     2,  -217,     0,  -244,  -244,  -244,
-     -55,  -186,   -76,   -89,  -244,  -244,  -244,  -243,   -10,    15,
-    -204,  -244,    50,     3,  -244,  -244,  -244,   191,   -14,  -244,
-    -244,  -244,  -244,  -244,  -244,  -196,  -208,  -244,    39
+    -255,  -255,    14,    43,     2,  -212,     0,  -255,  -255,  -255,
+     -91,  -241,  -114,   -86,  -255,  -255,  -255,  -254,   -10,   -12,
+    -209,  -255,    58,     3,  -255,  -255,  -255,   145,   -14,  -255,
+    -255,  -255,  -255,  -255,  -255,  -200,  -228,  -255,    51
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -870,261 +871,276 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -64
 static const yytype_int16 yytable[] =
 {
-      42,    66,    40,    49,   105,   -10,   152,   240,   -53,    55,
-     230,   -53,    92,   145,   265,    54,   113,   114,   168,   239,
-     170,   115,   116,   117,   283,   118,   119,   268,   120,   121,
-     122,   193,   148,   237,   131,    54,   260,   283,   266,   249,
-     242,   123,   124,   125,   126,   127,   106,    64,   269,   146,
-     128,   129,   238,   276,    59,   274,   275,    60,    61,    62,
-     278,    67,   279,   139,    81,    82,    76,   295,   149,    80,
-      68,   -53,   288,   289,    79,    89,    76,   153,    95,    96,
-      97,    98,    99,   100,   285,   102,   103,   104,   119,   311,
-     120,    86,    54,   -10,    87,   285,   111,   112,    88,    93,
-     310,    83,    84,   132,   133,   134,    42,   130,    40,    49,
-      85,   101,   128,   129,    62,    62,    62,    72,   107,    74,
-     136,   108,   137,   116,   117,    65,   118,   119,   131,   120,
-     196,   135,   138,   144,   147,   150,   154,   172,   194,   197,
-     208,   206,   123,   124,   125,   126,   127,   220,   222,   226,
-     253,   128,   129,   257,   258,   219,   262,   111,   169,   171,
-     273,   268,   224,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     223,   192,   298,   287,   221,   296,   301,   302,   195,   303,
-     304,   309,   198,   199,   294,   200,   201,   155,   204,   205,
-     167,   270,   207,   156,   292,   209,   210,   211,   212,   213,
-     214,   215,   216,   217,   218,   113,   114,    91,     0,     0,
-     115,   116,   117,   225,   118,   119,     0,   120,   121,   122,
-       0,     0,     0,     0,     0,   243,     0,     0,   244,     0,
-     123,   124,   125,   126,   127,   267,     0,     0,     0,   128,
-     129,   252,   228,   229,   255,   256,     0,   261,     0,   284,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   264,
-       0,     0,     0,     0,     0,     0,     0,     0,   277,     0,
-       0,   245,   246,   247,   248,   286,   306,     0,   254,     0,
-       0,     0,     0,   290,   291,   293,     0,     0,     0,     0,
-       0,     0,     0,   263,   300,     0,     0,     0,   312,     0,
-     305,     0,   307,     0,     0,     0,     0,     0,    -6,     1,
-       0,     0,   111,     0,     0,   313,     0,   314,     0,     2,
-       3,     4,     5,   111,     6,     7,     8,     9,    10,    11,
-      12,     0,    13,     0,     0,     0,     0,    14,     0,    15,
-      16,    17,     0,     0,    18,     0,     0,     0,     0,    19,
-      20,    21,     0,     0,    22,     0,     0,     0,    23,    24,
-      25,    26,     0,     0,    27,     0,   116,   117,     0,   118,
-     119,     0,   120,    28,     0,     0,     0,     0,     0,     0,
-      29,    30,    31,    32,    33,     0,     0,    34,   126,   127,
-       0,    35,    36,     0,   128,   129,    -6,    37,     2,     3,
-       4,     5,     0,     6,     7,     8,     9,    10,    11,    12,
-       0,    13,     0,     0,     0,     0,    14,     0,    15,    16,
-      17,     0,     0,    18,     0,     0,     0,     0,    19,    20,
-      21,     0,     0,    22,     0,     0,     0,    23,    24,    25,
-      26,     0,     0,    27,     0,     0,     0,     0,     0,     0,
-       0,     0,    28,     0,     0,     0,     0,     0,     0,    29,
-      30,    31,    32,    33,     0,     0,    34,     0,     0,     0,
-      35,    36,     2,     3,     4,     5,    37,     6,     7,     8,
-       9,    10,    56,    12,     0,    13,   299,     0,     0,     0,
-      14,     0,    15,    16,    17,     0,     0,     0,     0,     0,
-       0,     0,    19,    20,    21,     0,     0,    22,     0,     0,
-       0,     0,     0,    25,    26,     0,     0,    27,   116,   117,
-       0,   118,   119,     0,   120,     0,    28,     0,     0,     0,
-       0,     0,     0,    29,    30,    31,    32,    33,   124,   125,
-     126,   127,     0,     0,    35,    36,   128,   129,     0,    54,
-      37,     2,     3,     4,     5,     0,     6,     7,     8,     9,
-      10,    56,    12,     0,    13,     0,     0,     0,     0,    14,
-       0,    15,    16,    17,     0,     0,     0,     0,     0,     0,
-       0,    19,    20,    21,     0,     0,    22,     0,     0,     0,
-       0,     0,    25,    26,     0,     0,    27,     0,     0,     0,
-       0,     0,     0,     0,     0,    28,     0,     0,     0,     0,
-       0,     0,    29,    30,    31,    32,    33,     0,     0,     0,
-       0,     0,     0,    35,    36,     0,     0,     0,    54,    37,
-       2,     3,     4,     5,     0,     6,     7,     8,     9,    10,
-      56,    12,     0,    13,     0,     0,     0,     0,    14,     0,
+      42,    67,    40,    49,   106,   148,   -53,   151,   -10,   -53,
+     234,   120,    93,   121,   269,    55,   244,   287,   243,   272,
+     264,    54,   171,   241,   173,    54,   246,    65,   117,   118,
+     287,   119,   120,   289,   121,   129,   130,   280,   270,   253,
+     273,   149,   242,   152,   289,    82,    83,   124,   125,   126,
+     127,   128,   107,    68,   278,   279,   129,   130,    69,   282,
+     195,   283,    59,   134,   142,    60,    61,    63,    80,   -53,
+     197,   292,   293,   134,    77,    87,   299,    81,   156,    73,
+      88,    75,    89,    90,    77,    94,    96,    97,    98,    99,
+     100,   101,    54,   103,   104,   105,   -10,   102,   315,   314,
+     109,   108,    84,    85,   112,   113,    66,    42,   134,    40,
+      49,    86,   141,   133,   138,   131,   135,   136,   137,   147,
+     132,   153,   157,    63,    63,    63,   175,   198,   201,   139,
+     212,   140,   230,   200,   117,   118,   224,   119,   120,   226,
+     121,   257,   261,   150,   210,   262,   277,   266,   272,   300,
+     170,   305,   302,   306,   125,   126,   127,   128,   223,   307,
+     225,   308,   129,   130,   313,   228,   112,   172,   174,   274,
+     296,    92,   178,   179,   180,   181,   182,   183,   184,   185,
+     186,   187,   188,   189,   190,   191,   192,   193,   194,   227,
+     291,     0,   196,     0,     0,     0,     0,     0,     0,   199,
+       0,   298,     0,   202,   203,     0,   204,   205,     0,   208,
+     209,     0,     0,   211,     0,     0,   213,   214,   215,   216,
+     217,   218,   219,   220,   221,   222,     0,     0,   256,     0,
+       0,   259,   260,     0,   229,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   247,   268,     0,   248,   271,
+       0,     0,     0,     0,     0,   281,     0,     0,     0,     0,
+       0,     0,   290,   288,   232,   233,     0,   265,     0,     0,
+     294,   295,   297,     0,     0,     0,     0,     0,     0,     0,
+       0,   304,     0,     0,     0,     0,     0,   309,     0,   311,
+     310,     0,     0,   249,   250,   251,   252,     0,     0,     0,
+     258,     0,   317,     0,   318,     0,    -6,     1,     0,     0,
+       0,     0,   316,     0,     0,   267,     0,     2,     3,     4,
+       5,     0,     6,     7,     8,     9,    10,    11,    12,     0,
+      13,     0,     0,     0,   112,    14,     0,    15,    16,    17,
+       0,     0,    18,     0,     0,   112,     0,    19,    20,    21,
+       0,     0,    22,     0,     0,     0,    23,    24,    25,    26,
+       0,     0,    27,     0,   117,   118,     0,   119,   120,     0,
+     121,    28,     0,     0,     0,     0,     0,     0,    29,    30,
+      31,    32,    33,     0,     0,    34,   127,   128,     0,    35,
+      36,     0,   129,   130,    -6,    37,     2,     3,     4,     5,
+       0,     6,     7,     8,     9,    10,    11,    12,     0,    13,
+       0,     0,     0,     0,    14,     0,    15,    16,    17,     0,
+       0,    18,     0,     0,     0,     0,    19,    20,    21,     0,
+       0,    22,     0,     0,     0,    23,    24,    25,    26,     0,
+       0,    27,     0,     0,     0,     0,     0,     0,     0,     0,
+      28,     0,     0,     0,     0,     0,     0,    29,    30,    31,
+      32,    33,     0,     0,    34,     0,     0,     0,    35,    36,
+       2,     3,     4,     5,    37,     6,     7,     8,     9,    10,
+      56,    12,     0,    13,   303,     0,     0,     0,    14,     0,
       15,    16,    17,     0,     0,     0,     0,     0,     0,     0,
       19,    20,    21,     0,     0,    22,     0,     0,     0,     0,
        0,    25,    26,     0,     0,    27,     0,     0,     0,     0,
        0,     0,     0,     0,    28,     0,     0,     0,     0,     0,
        0,    29,    30,    31,    32,    33,     0,     0,     0,     0,
-       0,     0,    35,    36,     2,     3,     4,     5,    37,     6,
-       7,     8,     9,    10,    56,    12,     0,    13,     0,     0,
-       0,     0,    14,     0,    15,    16,     0,     0,     0,     0,
-       0,     0,     0,     0,    19,     0,    21,     0,     0,     0,
-       0,     0,     0,     0,     0,    25,    26,     0,     0,    27,
-       0,     0,     0,     0,     0,     0,     0,     0,    28,     0,
-       0,     0,     0,     0,     0,    29,    30,    31,    32,    33,
-       2,     3,     4,     5,     0,     6,    35,    36,     0,     0,
-      56,    12,    37,    13,     0,     0,     0,     0,     0,    70,
-       0,     0,     0,     0,    71,     0,    72,    73,    74,    75,
-      57,     0,    21,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    35,    36,     0,     0,     0,    54,    37,     2,
+       3,     4,     5,     0,     6,     7,     8,     9,    10,    56,
+      12,     0,    13,     0,     0,     0,     0,    14,     0,    15,
+      16,    17,     0,     0,     0,     0,     0,     0,     0,    19,
+      20,    21,     0,     0,    22,     0,     0,     0,     0,     0,
+      25,    26,     0,     0,    27,     0,     0,     0,     0,     0,
+       0,     0,     0,    28,     0,     0,     0,     0,     0,     0,
+      29,    30,    31,    32,    33,     0,     0,     0,     0,     0,
+       0,    35,    36,     0,     0,     0,    54,    37,     2,     3,
+       4,     5,     0,     6,     7,     8,     9,    10,    56,    12,
+       0,    13,     0,     0,     0,     0,    14,     0,    15,    16,
+      17,     0,     0,     0,     0,     0,     0,     0,    19,    20,
+      21,     0,     0,    22,     0,     0,     0,     0,     0,    25,
+      26,     0,     0,    27,     0,     0,     0,     0,     0,     0,
+       0,     0,    28,     0,     0,     0,     0,     0,     0,    29,
+      30,    31,    32,    33,     0,     0,     0,     0,     0,     0,
+      35,    36,     2,     3,     4,     5,    37,     6,     7,     8,
+       9,    10,    56,    12,     0,    13,     0,     0,     0,     0,
+      14,     0,    15,    16,     0,     0,     0,     0,     0,     0,
+       0,     0,    19,     0,    21,     0,     0,     0,     0,     0,
+       0,     0,     0,    25,    26,     0,     0,    27,     0,     0,
+       0,     0,     0,     0,     0,     0,    28,     0,     0,     0,
+       0,     0,     0,    29,    30,    31,    32,    33,     2,     3,
+       4,     5,     0,     6,    35,    36,     0,     0,    56,    12,
+      37,    13,     0,     0,     0,     0,     0,    71,     0,     0,
+       0,     0,    72,     0,    73,    74,    75,    76,    57,     0,
+      21,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    28,     0,     0,     0,     0,     0,
-       0,    29,    30,    31,    32,    33,     2,     3,     4,     5,
-       0,     6,    35,    36,     0,     0,    56,    12,    37,    13,
-       0,     0,     0,     0,     0,    70,     0,     0,     0,     0,
-       0,     0,    72,     0,    74,     0,    57,     0,    21,     0,
-       0,     0,     2,     3,     4,     5,     0,     6,     0,    90,
-       0,     0,    56,    12,     0,    13,     0,     0,     0,     0,
-      28,     0,     0,     0,     0,     0,     0,    29,    30,    31,
-      32,    33,    57,     0,    21,     0,     0,     0,    35,    36,
-       2,     3,     4,     5,    37,     6,     0,     0,     0,     0,
-      56,    12,     0,    13,     0,     0,    28,     0,     0,     0,
-       0,     0,     0,    29,    30,    31,    32,    33,     0,     0,
-      57,     0,    21,     0,    35,    36,     0,     0,     0,     0,
-      37,     0,     0,     0,     0,     0,     0,   141,     0,     0,
-       0,     0,     0,     0,    28,     0,     0,     0,     0,     0,
-       0,    29,    30,    31,    32,    33,     0,     0,     0,     0,
-     113,   114,    35,    36,     0,   115,   116,   117,   109,   118,
-     142,   143,   120,   121,   122,     0,     0,     0,   157,     0,
-       0,     0,     0,     0,   158,   123,   124,   125,   126,   127,
-       0,     0,     0,     0,   128,   129,   113,   114,     0,     0,
-       0,   115,   116,   117,     0,   118,   119,     0,   120,   121,
-     122,     0,     0,     0,   159,     0,     0,     0,     0,     0,
-     160,   123,   124,   125,   126,   127,     0,     0,     0,     0,
-     128,   129,   113,   114,     0,     0,     0,   115,   116,   117,
-       0,   118,   119,     0,   120,   121,   122,     0,     0,     0,
-     161,     0,     0,     0,     0,     0,   162,   123,   124,   125,
-     126,   127,     0,     0,     0,     0,   128,   129,   113,   114,
-       0,     0,     0,   115,   116,   117,     0,   118,   119,     0,
-     120,   121,   122,     0,     0,     0,   231,     0,     0,     0,
-       0,     0,     0,   123,   124,   125,   126,   127,     0,     0,
-       0,     0,   128,   129,   113,   114,     0,     0,     0,   115,
-     116,   117,     0,   118,   119,     0,   120,   121,   122,     0,
-       0,     0,   232,     0,     0,     0,     0,     0,     0,   123,
-     124,   125,   126,   127,     0,     0,     0,     0,   128,   129,
-     113,   114,     0,     0,     0,   115,   116,   117,     0,   118,
-     119,     0,   120,   121,   122,     0,     0,     0,   233,     0,
-       0,     0,     0,     0,     0,   123,   124,   125,   126,   127,
-       0,     0,     0,     0,   128,   129,   113,   114,     0,     0,
-       0,   115,   116,   117,     0,   118,   119,     0,   120,   121,
-     122,     0,     0,     0,   234,     0,     0,     0,     0,     0,
-       0,   123,   124,   125,   126,   127,     0,     0,     0,     0,
-     128,   129,   113,   114,     0,     0,     0,   115,   116,   117,
-       0,   118,   119,     0,   120,   121,   122,     0,     0,     0,
-       0,   202,     0,     0,     0,     0,     0,   123,   124,   125,
-     126,   127,     0,   113,   114,     0,   128,   129,   115,   116,
-     117,     0,   118,   119,     0,   120,   121,   122,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   203,   123,   124,
-     125,   126,   127,     0,   113,   114,     0,   128,   129,   115,
-     116,   117,     0,   118,   119,     0,   120,   121,   122,     0,
-       0,     0,     0,     0,   163,   164,     0,     0,     0,   123,
-     124,   125,   126,   127,     0,   113,   114,     0,   128,   129,
-     115,   116,   117,     0,   118,   119,     0,   120,   121,   122,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   173,
-     123,   124,   125,   126,   127,     0,   113,   114,   166,   128,
-     129,   115,   116,   117,     0,   118,   119,     0,   120,   121,
-     122,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   123,   124,   125,   126,   127,     0,   113,   114,   166,
-     128,   129,   115,   116,   117,     0,   118,   119,     0,   120,
-     121,   122,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   173,   123,   124,   125,   126,   127,     0,   113,   114,
-       0,   128,   129,   115,   116,   117,     0,   118,   119,     0,
-     120,   121,   122,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   123,   124,   125,   126,   127,     0,   -63,
-     -63,     0,   128,   129,   -63,   -63,   -63,     0,   -63,   -63,
-       0,   -63,   -63,   -63,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   -63,     0,     0,   -63,   -63,     0,
-       0,    65,     0,   -63,   -63
+       0,     0,    28,     0,     0,     0,     0,     0,     0,    29,
+      30,    31,    32,    33,     2,     3,     4,     5,     0,     6,
+      35,    36,     0,     0,    56,    12,    37,    13,     0,     0,
+       0,     0,     0,    71,     0,     0,     0,     0,     0,     0,
+      73,     0,    75,     0,    57,     0,    21,     0,     0,     0,
+       2,     3,     4,     5,     0,     6,     0,    91,     0,     0,
+      56,    12,     0,    13,     0,     0,     0,     0,    28,     0,
+       0,     0,     0,     0,     0,    29,    30,    31,    32,    33,
+      57,     0,    21,     0,     0,     0,    35,    36,     2,     3,
+       4,     5,    37,     6,     0,     0,     0,     0,    56,    12,
+       0,    13,     0,     0,    28,     0,     0,     0,     0,     0,
+       0,    29,    30,    31,    32,    33,     0,     0,    57,     0,
+      21,     0,    35,    36,     2,     3,     4,     5,    37,     6,
+       0,     0,     0,     0,    56,    12,     0,    13,     0,     0,
+       0,     0,    28,     0,     0,     0,     0,     0,     0,    29,
+      30,    31,    32,    33,    57,     0,    21,     0,     0,     0,
+      35,    36,     0,     0,     0,     0,    62,     0,     0,     0,
+       0,   144,     0,     0,     0,     0,     0,     0,    28,     0,
+       0,     0,     0,     0,     0,    29,    30,    31,    32,    33,
+       0,     0,     0,     0,   114,   115,    35,    36,     0,   116,
+     117,   118,   110,   119,   145,   146,   121,   122,   123,     0,
+       0,     0,   158,     0,     0,     0,     0,     0,   159,   124,
+     125,   126,   127,   128,     0,     0,     0,     0,   129,   130,
+     114,   115,     0,     0,     0,   116,   117,   118,     0,   119,
+     120,     0,   121,   122,   123,     0,     0,     0,   160,     0,
+       0,     0,     0,     0,   161,   124,   125,   126,   127,   128,
+       0,     0,     0,     0,   129,   130,   114,   115,     0,     0,
+       0,   116,   117,   118,     0,   119,   120,     0,   121,   122,
+     123,     0,     0,     0,   162,     0,     0,     0,     0,     0,
+     163,   124,   125,   126,   127,   128,     0,     0,     0,     0,
+     129,   130,   114,   115,     0,     0,     0,   116,   117,   118,
+       0,   119,   120,     0,   121,   122,   123,     0,     0,     0,
+     164,     0,     0,     0,     0,     0,   165,   124,   125,   126,
+     127,   128,     0,     0,     0,     0,   129,   130,   114,   115,
+       0,     0,     0,   116,   117,   118,     0,   119,   120,     0,
+     121,   122,   123,     0,     0,     0,   235,     0,     0,     0,
+       0,     0,     0,   124,   125,   126,   127,   128,     0,     0,
+       0,     0,   129,   130,   114,   115,     0,     0,     0,   116,
+     117,   118,     0,   119,   120,     0,   121,   122,   123,     0,
+       0,     0,   236,     0,     0,     0,     0,     0,     0,   124,
+     125,   126,   127,   128,     0,     0,     0,     0,   129,   130,
+     114,   115,     0,     0,     0,   116,   117,   118,     0,   119,
+     120,     0,   121,   122,   123,     0,     0,     0,   237,     0,
+       0,     0,     0,     0,     0,   124,   125,   126,   127,   128,
+       0,     0,     0,     0,   129,   130,   114,   115,     0,     0,
+       0,   116,   117,   118,     0,   119,   120,     0,   121,   122,
+     123,     0,     0,     0,   238,     0,     0,     0,     0,     0,
+       0,   124,   125,   126,   127,   128,     0,     0,     0,     0,
+     129,   130,   114,   115,     0,     0,     0,   116,   117,   118,
+       0,   119,   120,     0,   121,   122,   123,     0,     0,     0,
+       0,   206,     0,     0,     0,     0,     0,   124,   125,   126,
+     127,   128,     0,   114,   115,     0,   129,   130,   116,   117,
+     118,     0,   119,   120,     0,   121,   122,   123,     0,     0,
+       0,     0,     0,     0,   155,     0,     0,   207,   124,   125,
+     126,   127,   128,     0,   114,   115,     0,   129,   130,   116,
+     117,   118,     0,   119,   120,     0,   121,   122,   123,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   124,
+     125,   126,   127,   128,     0,   114,   115,     0,   129,   130,
+     116,   117,   118,     0,   119,   120,     0,   121,   122,   123,
+       0,     0,     0,     0,     0,   166,   167,     0,     0,     0,
+     124,   125,   126,   127,   128,     0,   114,   115,     0,   129,
+     130,   116,   117,   118,     0,   119,   120,     0,   121,   122,
+     123,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     176,   124,   125,   126,   127,   128,     0,   114,   115,   169,
+     129,   130,   116,   117,   118,     0,   119,   120,     0,   121,
+     122,   123,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   124,   125,   126,   127,   128,     0,   114,   115,
+     169,   129,   130,   116,   117,   118,     0,   119,   120,     0,
+     121,   122,   123,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   176,   124,   125,   126,   127,   128,     0,   114,
+     115,     0,   129,   130,   116,   117,   118,     0,   119,   120,
+       0,   121,   122,   123,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   124,   125,   126,   127,   128,     0,
+     -63,   -63,     0,   129,   130,   -63,   -63,   -63,     0,   -63,
+     -63,     0,   -63,   -63,   -63,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   -63,     0,     0,   -63,   -63,
+       0,     0,    66,     0,   -63,   -63
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    11,     0,     0,     0,     0,    47,   224,    25,     1,
-     206,    28,    26,    45,    25,    88,    57,    58,   107,   223,
-     109,    62,    63,    64,   267,    66,    67,    28,    69,    70,
-      71,    90,    45,    26,    93,    88,   244,   280,    49,   235,
-      93,    82,    83,    84,    85,    86,    38,    21,    49,    81,
-      91,    92,    45,   261,     4,   259,   260,     7,     8,     9,
-     264,    42,   266,    77,    47,    48,    16,   284,    81,    19,
-      21,    88,   276,   277,    21,    25,    26,    91,    28,    29,
-      30,    31,    32,    33,   270,    35,    36,    37,    67,   306,
-      69,    21,    88,    88,    21,   281,    46,    47,    21,    21,
-     304,    12,    13,    64,    65,    66,   106,    57,   106,   106,
-      21,    21,    91,    92,    64,    65,    66,    37,    89,    39,
-      70,    81,    72,    63,    64,    89,    66,    67,    93,    69,
-     140,    93,    37,    21,    84,    44,    93,    44,    21,    21,
-      21,   151,    82,    83,    84,    85,    86,    90,    90,    21,
-      45,    91,    92,    21,    93,   165,    25,   107,   108,   109,
-      21,    28,   172,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     172,   131,    44,   272,   169,    49,    25,    25,   138,    25,
-      44,    25,   142,   143,   283,   145,   146,    39,   148,   149,
-     106,   256,   152,    45,   280,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,    57,    58,    26,    -1,    -1,
-      62,    63,    64,   173,    66,    67,    -1,    69,    70,    71,
-      -1,    -1,    -1,    -1,    -1,   227,    -1,    -1,   230,    -1,
-      82,    83,    84,    85,    86,   255,    -1,    -1,    -1,    91,
-      92,   236,   202,   203,   239,   240,    -1,   249,    -1,   269,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   254,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   263,    -1,
-      -1,   231,   232,   233,   234,   270,   296,    -1,   238,    -1,
-      -1,    -1,    -1,   278,   279,   280,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   253,   289,    -1,    -1,    -1,   308,    -1,
-     295,    -1,   297,    -1,    -1,    -1,    -1,    -1,     0,     1,
-      -1,    -1,   272,    -1,    -1,   310,    -1,   312,    -1,    11,
-      12,    13,    14,   283,    16,    17,    18,    19,    20,    21,
+       0,    11,     0,     0,     0,    45,    25,    45,     0,    28,
+     210,    67,    26,    69,    25,     1,   228,   271,   227,    28,
+     248,    88,   108,    26,   110,    88,    93,    21,    63,    64,
+     284,    66,    67,   274,    69,    91,    92,   265,    49,   239,
+      49,    81,    45,    81,   285,    47,    48,    82,    83,    84,
+      85,    86,    38,    42,   263,   264,    91,    92,    21,   268,
+      90,   270,     4,    93,    78,     7,     8,     9,    21,    88,
+      90,   280,   281,    93,    16,    21,   288,    19,    92,    37,
+      21,    39,    21,    25,    26,    21,    28,    29,    30,    31,
+      32,    33,    88,    35,    36,    37,    88,    21,   310,   308,
+      81,    89,    12,    13,    46,    47,    89,   107,    93,   107,
+     107,    21,    37,    62,    93,    57,    65,    66,    67,    21,
+      62,    44,    93,    65,    66,    67,    44,    21,    21,    71,
+      21,    73,    21,   143,    63,    64,    90,    66,    67,    90,
+      69,    45,    21,    85,   154,    93,    21,    25,    28,    49,
+     107,    25,    44,    25,    83,    84,    85,    86,   168,    25,
+     172,    44,    91,    92,    25,   175,   108,   109,   110,   260,
+     284,    26,   114,   115,   116,   117,   118,   119,   120,   121,
+     122,   123,   124,   125,   126,   127,   128,   129,   130,   175,
+     276,    -1,   134,    -1,    -1,    -1,    -1,    -1,    -1,   141,
+      -1,   287,    -1,   145,   146,    -1,   148,   149,    -1,   151,
+     152,    -1,    -1,   155,    -1,    -1,   158,   159,   160,   161,
+     162,   163,   164,   165,   166,   167,    -1,    -1,   240,    -1,
+      -1,   243,   244,    -1,   176,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   231,   258,    -1,   234,   259,
+      -1,    -1,    -1,    -1,    -1,   267,    -1,    -1,    -1,    -1,
+      -1,    -1,   274,   273,   206,   207,    -1,   253,    -1,    -1,
+     282,   283,   284,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   293,    -1,    -1,    -1,    -1,    -1,   299,    -1,   301,
+     300,    -1,    -1,   235,   236,   237,   238,    -1,    -1,    -1,
+     242,    -1,   314,    -1,   316,    -1,     0,     1,    -1,    -1,
+      -1,    -1,   312,    -1,    -1,   257,    -1,    11,    12,    13,
+      14,    -1,    16,    17,    18,    19,    20,    21,    22,    -1,
+      24,    -1,    -1,    -1,   276,    29,    -1,    31,    32,    33,
+      -1,    -1,    36,    -1,    -1,   287,    -1,    41,    42,    43,
+      -1,    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,
+      -1,    -1,    56,    -1,    63,    64,    -1,    66,    67,    -1,
+      69,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    73,
+      74,    75,    76,    -1,    -1,    79,    85,    86,    -1,    83,
+      84,    -1,    91,    92,    88,    89,    11,    12,    13,    14,
+      -1,    16,    17,    18,    19,    20,    21,    22,    -1,    24,
+      -1,    -1,    -1,    -1,    29,    -1,    31,    32,    33,    -1,
+      -1,    36,    -1,    -1,    -1,    -1,    41,    42,    43,    -1,
+      -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,    -1,
+      -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    73,    74,
+      75,    76,    -1,    -1,    79,    -1,    -1,    -1,    83,    84,
+      11,    12,    13,    14,    89,    16,    17,    18,    19,    20,
+      21,    22,    -1,    24,    25,    -1,    -1,    -1,    29,    -1,
+      31,    32,    33,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      41,    42,    43,    -1,    -1,    46,    -1,    -1,    -1,    -1,
+      -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
+      -1,    72,    73,    74,    75,    76,    -1,    -1,    -1,    -1,
+      -1,    -1,    83,    84,    -1,    -1,    -1,    88,    89,    11,
+      12,    13,    14,    -1,    16,    17,    18,    19,    20,    21,
       22,    -1,    24,    -1,    -1,    -1,    -1,    29,    -1,    31,
-      32,    33,    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,
-      42,    43,    -1,    -1,    46,    -1,    -1,    -1,    50,    51,
-      52,    53,    -1,    -1,    56,    -1,    63,    64,    -1,    66,
-      67,    -1,    69,    65,    -1,    -1,    -1,    -1,    -1,    -1,
-      72,    73,    74,    75,    76,    -1,    -1,    79,    85,    86,
-      -1,    83,    84,    -1,    91,    92,    88,    89,    11,    12,
+      32,    33,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,
+      42,    43,    -1,    -1,    46,    -1,    -1,    -1,    -1,    -1,
+      52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,
+      72,    73,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,
+      -1,    83,    84,    -1,    -1,    -1,    88,    89,    11,    12,
       13,    14,    -1,    16,    17,    18,    19,    20,    21,    22,
       -1,    24,    -1,    -1,    -1,    -1,    29,    -1,    31,    32,
-      33,    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,    42,
-      43,    -1,    -1,    46,    -1,    -1,    -1,    50,    51,    52,
+      33,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,    42,
+      43,    -1,    -1,    46,    -1,    -1,    -1,    -1,    -1,    52,
       53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,
-      73,    74,    75,    76,    -1,    -1,    79,    -1,    -1,    -1,
+      73,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,
       83,    84,    11,    12,    13,    14,    89,    16,    17,    18,
-      19,    20,    21,    22,    -1,    24,    25,    -1,    -1,    -1,
-      29,    -1,    31,    32,    33,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    41,    42,    43,    -1,    -1,    46,    -1,    -1,
-      -1,    -1,    -1,    52,    53,    -1,    -1,    56,    63,    64,
-      -1,    66,    67,    -1,    69,    -1,    65,    -1,    -1,    -1,
-      -1,    -1,    -1,    72,    73,    74,    75,    76,    83,    84,
-      85,    86,    -1,    -1,    83,    84,    91,    92,    -1,    88,
-      89,    11,    12,    13,    14,    -1,    16,    17,    18,    19,
-      20,    21,    22,    -1,    24,    -1,    -1,    -1,    -1,    29,
-      -1,    31,    32,    33,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    41,    42,    43,    -1,    -1,    46,    -1,    -1,    -1,
-      -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,
-      -1,    -1,    72,    73,    74,    75,    76,    -1,    -1,    -1,
-      -1,    -1,    -1,    83,    84,    -1,    -1,    -1,    88,    89,
-      11,    12,    13,    14,    -1,    16,    17,    18,    19,    20,
-      21,    22,    -1,    24,    -1,    -1,    -1,    -1,    29,    -1,
-      31,    32,    33,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      41,    42,    43,    -1,    -1,    46,    -1,    -1,    -1,    -1,
-      -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
-      -1,    72,    73,    74,    75,    76,    -1,    -1,    -1,    -1,
-      -1,    -1,    83,    84,    11,    12,    13,    14,    89,    16,
-      17,    18,    19,    20,    21,    22,    -1,    24,    -1,    -1,
-      -1,    -1,    29,    -1,    31,    32,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    41,    -1,    43,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    52,    53,    -1,    -1,    56,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,    -1,
-      -1,    -1,    -1,    -1,    -1,    72,    73,    74,    75,    76,
-      11,    12,    13,    14,    -1,    16,    83,    84,    -1,    -1,
-      21,    22,    89,    24,    -1,    -1,    -1,    -1,    -1,    30,
-      -1,    -1,    -1,    -1,    35,    -1,    37,    38,    39,    40,
-      41,    -1,    43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      19,    20,    21,    22,    -1,    24,    -1,    -1,    -1,    -1,
+      29,    -1,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    41,    -1,    43,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,
+      -1,    -1,    -1,    72,    73,    74,    75,    76,    11,    12,
+      13,    14,    -1,    16,    83,    84,    -1,    -1,    21,    22,
+      89,    24,    -1,    -1,    -1,    -1,    -1,    30,    -1,    -1,
+      -1,    -1,    35,    -1,    37,    38,    39,    40,    41,    -1,
+      43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
-      -1,    72,    73,    74,    75,    76,    11,    12,    13,    14,
-      -1,    16,    83,    84,    -1,    -1,    21,    22,    89,    24,
-      -1,    -1,    -1,    -1,    -1,    30,    -1,    -1,    -1,    -1,
-      -1,    -1,    37,    -1,    39,    -1,    41,    -1,    43,    -1,
-      -1,    -1,    11,    12,    13,    14,    -1,    16,    -1,    54,
-      -1,    -1,    21,    22,    -1,    24,    -1,    -1,    -1,    -1,
-      65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    73,    74,
-      75,    76,    41,    -1,    43,    -1,    -1,    -1,    83,    84,
-      11,    12,    13,    14,    89,    16,    -1,    -1,    -1,    -1,
-      21,    22,    -1,    24,    -1,    -1,    65,    -1,    -1,    -1,
-      -1,    -1,    -1,    72,    73,    74,    75,    76,    -1,    -1,
-      41,    -1,    43,    -1,    83,    84,    -1,    -1,    -1,    -1,
-      89,    -1,    -1,    -1,    -1,    -1,    -1,    34,    -1,    -1,
-      -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
-      -1,    72,    73,    74,    75,    76,    -1,    -1,    -1,    -1,
-      57,    58,    83,    84,    -1,    62,    63,    64,    89,    66,
-      67,    68,    69,    70,    71,    -1,    -1,    -1,    39,    -1,
+      -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,
+      73,    74,    75,    76,    11,    12,    13,    14,    -1,    16,
+      83,    84,    -1,    -1,    21,    22,    89,    24,    -1,    -1,
+      -1,    -1,    -1,    30,    -1,    -1,    -1,    -1,    -1,    -1,
+      37,    -1,    39,    -1,    41,    -1,    43,    -1,    -1,    -1,
+      11,    12,    13,    14,    -1,    16,    -1,    54,    -1,    -1,
+      21,    22,    -1,    24,    -1,    -1,    -1,    -1,    65,    -1,
+      -1,    -1,    -1,    -1,    -1,    72,    73,    74,    75,    76,
+      41,    -1,    43,    -1,    -1,    -1,    83,    84,    11,    12,
+      13,    14,    89,    16,    -1,    -1,    -1,    -1,    21,    22,
+      -1,    24,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
+      -1,    72,    73,    74,    75,    76,    -1,    -1,    41,    -1,
+      43,    -1,    83,    84,    11,    12,    13,    14,    89,    16,
+      -1,    -1,    -1,    -1,    21,    22,    -1,    24,    -1,    -1,
+      -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,
+      73,    74,    75,    76,    41,    -1,    43,    -1,    -1,    -1,
+      83,    84,    -1,    -1,    -1,    -1,    89,    -1,    -1,    -1,
+      -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,    65,    -1,
+      -1,    -1,    -1,    -1,    -1,    72,    73,    74,    75,    76,
+      -1,    -1,    -1,    -1,    57,    58,    83,    84,    -1,    62,
+      63,    64,    89,    66,    67,    68,    69,    70,    71,    -1,
+      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    82,
+      83,    84,    85,    86,    -1,    -1,    -1,    -1,    91,    92,
+      57,    58,    -1,    -1,    -1,    62,    63,    64,    -1,    66,
+      67,    -1,    69,    70,    71,    -1,    -1,    -1,    39,    -1,
       -1,    -1,    -1,    -1,    45,    82,    83,    84,    85,    86,
       -1,    -1,    -1,    -1,    91,    92,    57,    58,    -1,    -1,
       -1,    62,    63,    64,    -1,    66,    67,    -1,    69,    70,
@@ -1153,27 +1169,30 @@ static const yytype_int16 yycheck[] =
       -1,    45,    -1,    -1,    -1,    -1,    -1,    82,    83,    84,
       85,    86,    -1,    57,    58,    -1,    91,    92,    62,    63,
       64,    -1,    66,    67,    -1,    69,    70,    71,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,    82,    83,
+      -1,    -1,    -1,    -1,    47,    -1,    -1,    81,    82,    83,
       84,    85,    86,    -1,    57,    58,    -1,    91,    92,    62,
       63,    64,    -1,    66,    67,    -1,    69,    70,    71,    -1,
-      -1,    -1,    -1,    -1,    77,    78,    -1,    -1,    -1,    82,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
       83,    84,    85,    86,    -1,    57,    58,    -1,    91,    92,
       62,    63,    64,    -1,    66,    67,    -1,    69,    70,    71,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    81,
-      82,    83,    84,    85,    86,    -1,    57,    58,    90,    91,
+      -1,    -1,    -1,    -1,    -1,    77,    78,    -1,    -1,    -1,
+      82,    83,    84,    85,    86,    -1,    57,    58,    -1,    91,
       92,    62,    63,    64,    -1,    66,    67,    -1,    69,    70,
       71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    82,    83,    84,    85,    86,    -1,    57,    58,    90,
+      81,    82,    83,    84,    85,    86,    -1,    57,    58,    90,
       91,    92,    62,    63,    64,    -1,    66,    67,    -1,    69,
       70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    81,    82,    83,    84,    85,    86,    -1,    57,    58,
-      -1,    91,    92,    62,    63,    64,    -1,    66,    67,    -1,
+      -1,    -1,    82,    83,    84,    85,    86,    -1,    57,    58,
+      90,    91,    92,    62,    63,    64,    -1,    66,    67,    -1,
       69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    82,    83,    84,    85,    86,    -1,    57,
+      -1,    -1,    81,    82,    83,    84,    85,    86,    -1,    57,
       58,    -1,    91,    92,    62,    63,    64,    -1,    66,    67,
       -1,    69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,    -1,
-      -1,    89,    -1,    91,    92
+      -1,    -1,    -1,    -1,    82,    83,    84,    85,    86,    -1,
+      57,    58,    -1,    91,    92,    62,    63,    64,    -1,    66,
+      67,    -1,    69,    70,    71,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,
+      -1,    -1,    89,    -1,    91,    92
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1186,32 +1205,32 @@ static const yytype_uint8 yystos[] =
       73,    74,    75,    76,    79,    83,    84,    89,    95,    97,
       98,    99,   100,   101,   108,   109,   110,   115,   116,   117,
      120,   123,   124,   131,    88,    96,    21,    41,    98,   116,
-     116,   116,   116,   132,    21,    89,   112,    42,    21,   118,
-      30,    35,    37,    38,    39,    40,   116,   121,   122,    21,
-     116,    47,    48,    12,    13,    21,    21,    21,    21,   116,
-      54,   121,   122,    21,   119,   116,   116,   116,   116,   116,
-     116,    21,   116,   116,   116,     0,    96,    89,    81,    89,
-     107,   116,   116,    57,    58,    62,    63,    64,    66,    67,
-      69,    70,    71,    82,    83,    84,    85,    86,    91,    92,
-     116,    93,   132,   132,   132,    93,   116,   116,    37,   122,
-     125,    34,    67,    68,    21,    45,    81,   116,    45,    81,
-      44,   126,    47,   122,    93,    39,    45,    39,    45,    39,
-      45,    39,    45,    77,    78,   127,    90,    97,   107,   116,
-     107,   116,    44,    81,   113,   116,   116,   116,   116,   116,
+     116,   116,    89,   116,   132,    21,    89,   112,    42,    21,
+     118,    30,    35,    37,    38,    39,    40,   116,   121,   122,
+      21,   116,    47,    48,    12,    13,    21,    21,    21,    21,
+     116,    54,   121,   122,    21,   119,   116,   116,   116,   116,
+     116,   116,    21,   116,   116,   116,     0,    96,    89,    81,
+      89,   107,   116,   116,    57,    58,    62,    63,    64,    66,
+      67,    69,    70,    71,    82,    83,    84,    85,    86,    91,
+      92,   116,   116,   132,    93,   132,   132,   132,    93,   116,
+     116,    37,   122,   125,    34,    67,    68,    21,    45,    81,
+     116,    45,    81,    44,   126,    47,   122,    93,    39,    45,
+      39,    45,    39,    45,    39,    45,    77,    78,   127,    90,
+      97,   107,   116,   107,   116,    44,    81,   113,   116,   116,
      116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
-     116,   116,   116,    90,    21,   116,   112,    21,   116,   116,
-     116,   116,    45,    81,   116,   116,   112,   116,    21,   116,
-     116,   116,   116,   116,   116,   116,   116,   116,   116,   112,
-      90,   113,    90,    96,   112,   116,    21,   129,   116,   116,
-     129,    39,    39,    39,    39,   128,   114,    26,    45,   114,
-      99,   117,    93,    96,    96,   116,   116,   116,   116,   129,
-      96,   100,   113,    45,   116,   113,   113,    21,    93,   130,
-     130,    96,    25,   116,   113,    25,    49,   112,    28,    49,
-     104,   105,   111,    21,   114,   114,   130,   113,   114,   114,
-     103,   104,   106,   111,   112,   105,   113,   107,   114,   114,
-     113,   113,   106,   113,   107,    99,    49,   102,    44,    25,
-     113,    25,    25,    25,    44,   113,   112,   113,   112,    25,
-     114,    99,   100,   113,   113
+     116,   116,   116,   116,   116,    90,   116,    90,    21,   116,
+     112,    21,   116,   116,   116,   116,    45,    81,   116,   116,
+     112,   116,    21,   116,   116,   116,   116,   116,   116,   116,
+     116,   116,   116,   112,    90,   113,    90,    96,   112,   116,
+      21,   129,   116,   116,   129,    39,    39,    39,    39,   128,
+     114,    26,    45,   114,    99,   117,    93,    96,    96,   116,
+     116,   116,   116,   129,    96,   100,   113,    45,   116,   113,
+     113,    21,    93,   130,   130,    96,    25,   116,   113,    25,
+      49,   112,    28,    49,   104,   105,   111,    21,   114,   114,
+     130,   113,   114,   114,   103,   104,   106,   111,   112,   105,
+     113,   107,   114,   114,   113,   113,   106,   113,   107,    99,
+      49,   102,    44,    25,   113,    25,    25,    25,    44,   113,
+     112,   113,   112,    25,   114,    99,   100,   113,   113
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2642,113 +2661,118 @@ yyreduce:
 
   case 108:
 #line 468 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->codeFunc((yyvsp[(1) - (2)].s), (yyvsp[(2) - (2)].narg)); ;}
+    { g_lingo->codeFunc((yyvsp[(1) - (4)].s), (yyvsp[(3) - (4)].narg)); ;}
     break;
 
   case 109:
 #line 469 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_open); ;}
+    { g_lingo->codeFunc((yyvsp[(1) - (2)].s), (yyvsp[(2) - (2)].narg)); ;}
     break;
 
   case 110:
 #line 470 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code2(g_lingo->c_voidpush, g_lingo->c_open); ;}
+    { g_lingo->code1(g_lingo->c_open); ;}
     break;
 
   case 111:
 #line 471 "engines/director/lingo/lingo-gr.y"
-    { Common::String s(*(yyvsp[(1) - (3)].s)); s += '-'; s += *(yyvsp[(2) - (3)].s); g_lingo->codeFunc(&s, (yyvsp[(3) - (3)].narg)); ;}
+    { g_lingo->code2(g_lingo->c_voidpush, g_lingo->c_open); ;}
     break;
 
   case 112:
-#line 474 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
+#line 472 "engines/director/lingo/lingo-gr.y"
+    { Common::String s(*(yyvsp[(1) - (3)].s)); s += '-'; s += *(yyvsp[(2) - (3)].s); g_lingo->codeFunc(&s, (yyvsp[(3) - (3)].narg)); ;}
     break;
 
   case 113:
 #line 475 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
+    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
   case 114:
-#line 478 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
+#line 476 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
     break;
 
   case 115:
 #line 479 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
+    { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
   case 116:
-#line 490 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotoloop); ;}
+#line 480 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
     break;
 
   case 117:
 #line 491 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotonext); ;}
+    { g_lingo->code1(g_lingo->c_gotoloop); ;}
     break;
 
   case 118:
 #line 492 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotoprevious); ;}
+    { g_lingo->code1(g_lingo->c_gotonext); ;}
     break;
 
   case 119:
 #line 493 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_gotoprevious); ;}
+    break;
+
+  case 120:
+#line 494 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(1);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 120:
-#line 496 "engines/director/lingo/lingo-gr.y"
+  case 121:
+#line 497 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(3);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 121:
-#line 499 "engines/director/lingo/lingo-gr.y"
+  case 122:
+#line 500 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(2);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 126:
-#line 512 "engines/director/lingo/lingo-gr.y"
+  case 127:
+#line 513 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_playdone); ;}
     break;
 
-  case 127:
-#line 513 "engines/director/lingo/lingo-gr.y"
+  case 128:
+#line 514 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(1);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 128:
-#line 516 "engines/director/lingo/lingo-gr.y"
+  case 129:
+#line 517 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(3);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 129:
-#line 519 "engines/director/lingo/lingo-gr.y"
+  case 130:
+#line 520 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(2);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 130:
-#line 549 "engines/director/lingo/lingo-gr.y"
+  case 131:
+#line 550 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 131:
-#line 550 "engines/director/lingo/lingo-gr.y"
+  case 132:
+#line 551 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeConst(0); // Push fake value on stack
 			g_lingo->code1(g_lingo->c_procret);
@@ -2756,38 +2780,38 @@ yyreduce:
 			g_lingo->_indef = false; ;}
     break;
 
-  case 132:
-#line 555 "engines/director/lingo/lingo-gr.y"
+  case 133:
+#line 556 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeFactory(*(yyvsp[(2) - (2)].s));
 		;}
     break;
 
-  case 133:
-#line 558 "engines/director/lingo/lingo-gr.y"
+  case 134:
+#line 559 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; ;}
     break;
 
-  case 134:
-#line 559 "engines/director/lingo/lingo-gr.y"
+  case 135:
+#line 560 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->code1(g_lingo->c_procret);
 			g_lingo->define(*(yyvsp[(2) - (8)].s), (yyvsp[(4) - (8)].code), (yyvsp[(5) - (8)].narg) + 1, &g_lingo->_currentFactory);
 			g_lingo->_indef = false; ;}
     break;
 
-  case 135:
-#line 563 "engines/director/lingo/lingo-gr.y"
+  case 136:
+#line 564 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 136:
-#line 564 "engines/director/lingo/lingo-gr.y"
+  case 137:
+#line 565 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_ignoreMe = true; ;}
     break;
 
-  case 137:
-#line 564 "engines/director/lingo/lingo-gr.y"
+  case 138:
+#line 565 "engines/director/lingo/lingo-gr.y"
     {
 				g_lingo->codeConst(0); // Push fake value on stack
 				g_lingo->code1(g_lingo->c_procret);
@@ -2799,33 +2823,33 @@ yyreduce:
 			;}
     break;
 
-  case 138:
-#line 574 "engines/director/lingo/lingo-gr.y"
-    { (yyval.narg) = 0; ;}
-    break;
-
   case 139:
 #line 575 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;}
+    { (yyval.narg) = 0; ;}
     break;
 
   case 140:
 #line 576 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
+    { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;}
     break;
 
   case 141:
 #line 577 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;}
+    { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
   case 142:
-#line 579 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->codeArgStore(); ;}
+#line 578 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;}
     break;
 
   case 143:
-#line 583 "engines/director/lingo/lingo-gr.y"
+#line 580 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->codeArgStore(); ;}
+    break;
+
+  case 144:
+#line 584 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_call);
 		g_lingo->codeString((yyvsp[(1) - (3)].s)->c_str());
@@ -2834,24 +2858,24 @@ yyreduce:
 		g_lingo->code1(numpar); ;}
     break;
 
-  case 144:
-#line 591 "engines/director/lingo/lingo-gr.y"
-    { (yyval.narg) = 0; ;}
-    break;
-
   case 145:
 #line 592 "engines/director/lingo/lingo-gr.y"
-    { (yyval.narg) = 1; ;}
+    { (yyval.narg) = 0; ;}
     break;
 
   case 146:
 #line 593 "engines/director/lingo/lingo-gr.y"
+    { (yyval.narg) = 1; ;}
+    break;
+
+  case 147:
+#line 594 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 2855 "engines/director/lingo/lingo-gr.cpp"
+#line 2879 "engines/director/lingo/lingo-gr.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -3065,6 +3089,6 @@ yyreturn:
 }
 
 
-#line 596 "engines/director/lingo/lingo-gr.y"
+#line 597 "engines/director/lingo/lingo-gr.y"
 
 
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 6439cea..38bd2ed 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -465,6 +465,7 @@ func: tPUT expr				{ g_lingo->code1(g_lingo->c_printtop); }
 	| BLTINNOARGSORONE 		{
 		g_lingo->code2(g_lingo->c_voidpush, g_lingo->_handlers[*$1]->u.func);
 		delete $1; }
+	| BLTINARGLIST '(' arglist ')'	{ g_lingo->codeFunc($1, $3); }
 	| BLTINARGLIST arglist	{ g_lingo->codeFunc($1, $2); }
 	| tOPEN expr tWITH expr	{ g_lingo->code1(g_lingo->c_open); }
 	| tOPEN expr 			{ g_lingo->code2(g_lingo->c_voidpush, g_lingo->c_open); }
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index f3c498b..afc5670 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -1437,12 +1437,6 @@ YY_RULE_SETUP
 		if (g_lingo->_twoWordBuiltins.contains(yytext))
 			return TWOWORDBUILTIN;
 
-		// Special treatment of 'me'. First parameter is method name
-		if (!g_lingo->_currentFactory.empty()) {
-			if (yylval.s->equalsIgnoreCase("me"))
-				return tME;
-		}
-
 		if (g_lingo->_handlers.contains(yytext)) {
 			if (g_lingo->_handlers[yytext]->type == BLTIN && g_lingo->_handlers[yytext]->parens == false) {
 				if (g_lingo->_handlers[yytext]->nargs == 0) {
@@ -1468,41 +1462,41 @@ YY_RULE_SETUP
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 277 "engines/director/lingo/lingo-lex.l"
+#line 271 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.f = atof(yytext); return FLOAT; }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 278 "engines/director/lingo/lingo-lex.l"
+#line 272 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 279 "engines/director/lingo/lingo-lex.l"
+#line 273 "engines/director/lingo/lingo-lex.l"
 { count(); return *yytext; }
 	YY_BREAK
 case 65:
 /* rule 65 can match eol */
 YY_RULE_SETUP
-#line 280 "engines/director/lingo/lingo-lex.l"
+#line 274 "engines/director/lingo/lingo-lex.l"
 { return '\n'; }
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 281 "engines/director/lingo/lingo-lex.l"
+#line 275 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 282 "engines/director/lingo/lingo-lex.l"
+#line 276 "engines/director/lingo/lingo-lex.l"
 
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 284 "engines/director/lingo/lingo-lex.l"
+#line 278 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1506 "engines/director/lingo/lingo-lex.cpp"
+#line 1500 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2502,7 +2496,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 284 "engines/director/lingo/lingo-lex.l"
+#line 278 "engines/director/lingo/lingo-lex.l"
 
 
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index 9d9dba7..afd90ae 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -246,12 +246,6 @@ whitespace [\t ]
 		if (g_lingo->_twoWordBuiltins.contains(yytext))
 			return TWOWORDBUILTIN;
 
-		// Special treatment of 'me'. First parameter is method name
-		if (!g_lingo->_currentFactory.empty()) {
-			if (yylval.s->equalsIgnoreCase("me"))
-				return tME;
-		}
-
 		if (g_lingo->_handlers.contains(yytext)) {
 			if (g_lingo->_handlers[yytext]->type == BLTIN && g_lingo->_handlers[yytext]->parens == false) {
 				if (g_lingo->_handlers[yytext]->nargs == 0) {


Commit: 8eb8f9b0ef79b47fc8e149d5b86034bf99e2c9ce
    https://github.com/scummvm/scummvm/commit/8eb8f9b0ef79b47fc8e149d5b86034bf99e2c9ce
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-01-11T19:27:19+01:00

Commit Message:
DIRECTOR: Lingo: Fixed argument count for factory methods

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


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 71d7d3f..335dad2 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -227,6 +227,7 @@ void Lingo::define(Common::String &name, int start, int nargs, Common::String *p
 
 	sym->u.defn = new ScriptData(&(*_currentScript)[start], end - start + 1);
 	sym->nargs = nargs;
+	sym->maxArgs = nargs;
 }
 
 int Lingo::codeString(const char *str) {


Commit: 74f008e14e52086e5081633abe3844ec8bb872a1
    https://github.com/scummvm/scummvm/commit/74f008e14e52086e5081633abe3844ec8bb872a1
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-01-11T19:27:19+01:00

Commit Message:
DIRECTOR: Lingo: Proper processing of me() in factories

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


diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 335dad2..930e992 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -298,17 +298,24 @@ void Lingo::codeArgStore() {
 int Lingo::codeFunc(Common::String *s, int numpar) {
 	int ret = g_lingo->code1(g_lingo->c_call);
 
-	if (!_currentFactory.empty() && s->equalsIgnoreCase("me")) {
-		if (!g_lingo->_currentFactory.empty()) {
-			g_lingo->codeString(g_lingo->_currentFactory.c_str());
-			debugC(2, kDebugLingoCompile, "Replaced 'me' with %s", g_lingo->_currentFactory.c_str());
-		} else {
-			warning("'me' out of factory method");
-			g_lingo->codeString(s->c_str());
-		}
-	} else {
-		g_lingo->codeString(s->c_str());
-	}
+	g_lingo->codeString(s->c_str());
+
+	inst num = 0;
+	WRITE_UINT32(&num, numpar);
+	g_lingo->code1(num);
+
+	return ret;
+}
+
+int Lingo::codeMe(Common::String *method, int numpar) {
+	int ret = g_lingo->code1(g_lingo->c_call);
+
+	Common::String m(g_lingo->_currentFactory);
+
+	m += '-';
+	m += *method;
+
+	g_lingo->codeString(m.c_str());
 
 	inst num = 0;
 	WRITE_UINT32(&num, numpar);
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 7fca7be..916072f 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -518,18 +518,18 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  106
+#define YYFINAL  108
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1585
+#define YYLAST   1596
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  94
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  39
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  147
+#define YYNRULES  149
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  319
+#define YYNSTATES  326
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -593,10 +593,10 @@ static const yytype_uint16 yyprhs[] =
      313,   317,   321,   325,   329,   333,   336,   339,   343,   348,
      353,   358,   365,   370,   377,   382,   389,   394,   401,   404,
      406,   408,   411,   413,   416,   419,   422,   425,   427,   432,
-     435,   440,   443,   447,   449,   453,   455,   459,   462,   465,
-     468,   471,   475,   478,   481,   483,   487,   490,   493,   496,
-     500,   503,   504,   513,   516,   517,   526,   527,   528,   539,
-     540,   542,   546,   551,   552,   556,   557,   559
+     435,   440,   447,   452,   455,   459,   461,   465,   467,   471,
+     474,   477,   480,   483,   487,   490,   493,   495,   499,   502,
+     505,   508,   512,   515,   516,   525,   528,   529,   538,   539,
+     540,   551,   552,   554,   558,   563,   564,   568,   569,   571
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -645,20 +645,21 @@ static const yytype_int16 yyrhs[] =
       -1,    41,   116,    -1,   120,    -1,   123,    -1,    29,    42,
       -1,    29,    -1,    31,   118,    -1,    56,   119,    -1,    18,
      116,    -1,    17,   116,    -1,    17,    -1,    19,    89,   132,
-      90,    -1,    19,   132,    -1,    52,   116,    47,   116,    -1,
-      52,   116,    -1,    20,    21,   132,    -1,    21,    -1,   118,
-      93,    21,    -1,    21,    -1,   119,    93,    21,    -1,    32,
-      35,    -1,    32,    38,    -1,    32,    40,    -1,    32,   121,
-      -1,    32,   121,   122,    -1,    32,   122,    -1,    30,   116,
-      -1,   116,    -1,    39,    37,   116,    -1,    37,   116,    -1,
-      53,    54,    -1,    53,   121,    -1,    53,   121,   122,    -1,
-      53,   122,    -1,    -1,    36,    21,   125,   112,   129,    96,
-     130,   114,    -1,    50,    21,    -1,    -1,    51,    21,   126,
-     112,   129,    96,   130,   114,    -1,    -1,    -1,    79,    21,
-     127,   112,   128,   129,    96,   130,   114,    25,    -1,    -1,
-      21,    -1,   129,    93,    21,    -1,   129,    96,    93,    21,
-      -1,    -1,    21,   112,   132,    -1,    -1,   116,    -1,   132,
-      93,   116,    -1
+      90,    -1,    19,   132,    -1,    80,    89,    21,    90,    -1,
+      80,    89,    21,    93,   132,    90,    -1,    52,   116,    47,
+     116,    -1,    52,   116,    -1,    20,    21,   132,    -1,    21,
+      -1,   118,    93,    21,    -1,    21,    -1,   119,    93,    21,
+      -1,    32,    35,    -1,    32,    38,    -1,    32,    40,    -1,
+      32,   121,    -1,    32,   121,   122,    -1,    32,   122,    -1,
+      30,   116,    -1,   116,    -1,    39,    37,   116,    -1,    37,
+     116,    -1,    53,    54,    -1,    53,   121,    -1,    53,   121,
+     122,    -1,    53,   122,    -1,    -1,    36,    21,   125,   112,
+     129,    96,   130,   114,    -1,    50,    21,    -1,    -1,    51,
+      21,   126,   112,   129,    96,   130,   114,    -1,    -1,    -1,
+      79,    21,   127,   112,   128,   129,    96,   130,   114,    25,
+      -1,    -1,    21,    -1,   129,    93,    21,    -1,   129,    96,
+      93,    21,    -1,    -1,    21,   112,   132,    -1,    -1,   116,
+      -1,   132,    93,   116,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -675,10 +676,10 @@ static const yytype_uint16 yyrline[] =
      431,   432,   433,   434,   435,   436,   437,   438,   439,   440,
      441,   442,   443,   444,   445,   446,   447,   448,   451,   452,
      453,   454,   455,   457,   458,   459,   462,   465,   468,   469,
-     470,   471,   472,   475,   476,   479,   480,   491,   492,   493,
-     494,   497,   500,   505,   506,   509,   510,   513,   514,   517,
-     520,   550,   550,   556,   559,   559,   564,   565,   564,   575,
-     576,   577,   578,   580,   584,   592,   593,   594
+     470,   471,   472,   473,   474,   477,   478,   481,   482,   493,
+     494,   495,   496,   499,   502,   507,   508,   511,   512,   515,
+     516,   519,   522,   552,   552,   558,   561,   561,   566,   567,
+     566,   577,   578,   579,   580,   582,   586,   594,   595,   596
 };
 #endif
 
@@ -742,10 +743,10 @@ static const yytype_uint8 yyr1[] =
      116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
      116,   116,   116,   116,   116,   116,   116,   116,   117,   117,
      117,   117,   117,   117,   117,   117,   117,   117,   117,   117,
-     117,   117,   117,   118,   118,   119,   119,   120,   120,   120,
-     120,   120,   120,   121,   121,   122,   122,   123,   123,   123,
-     123,   125,   124,   124,   126,   124,   127,   128,   124,   129,
-     129,   129,   129,   130,   131,   132,   132,   132
+     117,   117,   117,   117,   117,   118,   118,   119,   119,   120,
+     120,   120,   120,   120,   120,   121,   121,   122,   122,   123,
+     123,   123,   123,   125,   124,   124,   126,   124,   127,   128,
+     124,   129,   129,   129,   129,   130,   131,   132,   132,   132
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -762,10 +763,10 @@ static const yytype_uint8 yyr2[] =
        3,     3,     3,     3,     3,     2,     2,     3,     4,     4,
        4,     6,     4,     6,     4,     6,     4,     6,     2,     1,
        1,     2,     1,     2,     2,     2,     2,     1,     4,     2,
-       4,     2,     3,     1,     3,     1,     3,     2,     2,     2,
-       2,     3,     2,     2,     1,     3,     2,     2,     2,     3,
-       2,     0,     8,     2,     0,     8,     0,     0,    10,     0,
-       1,     3,     4,     0,     3,     0,     1,     3
+       4,     6,     4,     2,     3,     1,     3,     1,     3,     2,
+       2,     2,     2,     3,     2,     2,     1,     3,     2,     2,
+       2,     3,     2,     0,     8,     2,     0,     8,     0,     0,
+      10,     0,     1,     3,     4,     0,     3,     0,     1,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -773,95 +774,97 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,    57,    64,     0,    58,    61,   107,     0,   145,
+       0,     0,    57,    64,     0,    58,    61,   107,     0,   147,
        0,    51,    60,    59,   102,     0,     0,    49,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     3,
-      66,    23,    11,    24,     0,     0,     0,     0,    21,     8,
-      99,   100,     7,     9,     5,     4,    63,     0,    66,    65,
-     106,   105,   145,   146,   109,   145,   145,   145,   101,   113,
-     103,     0,   117,     0,   118,     0,   119,   124,   120,   122,
-     131,    98,     0,    47,     0,     0,     0,     0,   133,   134,
-     111,   127,   128,   130,   115,   104,    79,     0,     0,     0,
-       0,     0,   136,    85,    86,     0,     1,     6,     0,     0,
-       0,     0,    44,    52,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   146,     0,     0,   112,     0,   144,     0,   123,
-     126,     0,   121,    51,     0,     0,     0,    48,     0,     0,
-       0,     0,     0,    56,    51,     0,   129,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    51,    87,
-       2,     0,    52,     0,     0,    51,     0,    28,    75,    76,
-      74,    77,    78,    71,    81,    82,    83,    84,    80,    67,
-      68,    69,    70,    72,    73,   108,   147,    62,   114,   125,
-     139,    12,    13,    14,    19,    16,     0,     0,    18,    15,
-     139,   110,   116,    90,     0,    92,     0,    94,     0,    96,
-       0,    88,    89,   137,    53,     0,    46,    53,     0,    45,
-     140,     0,    20,    17,     0,     0,     0,     0,     0,   139,
-      52,     0,     0,    52,    52,    22,     0,   143,   143,    91,
-      93,    95,    97,     0,    54,    55,     0,     0,    52,    51,
-      32,   141,     0,    53,    53,   143,    25,    52,    53,    29,
-      53,     0,    50,    51,    52,    40,     0,   142,   132,   135,
-      53,    53,    52,    52,    52,    42,    38,     0,     0,    39,
-      35,     0,     0,    52,     0,     0,    37,     0,     0,    52,
-      51,    52,    51,   138,     0,    26,    30,    31,    51,    33,
-       0,    34,     0,    27,    52,    36,    52,    43,    41
+       3,    66,    23,    11,    24,     0,     0,     0,     0,    21,
+       8,    99,   100,     7,     9,     5,     4,    63,     0,    66,
+      65,   106,   105,   147,   148,   109,   147,   147,   147,   101,
+     115,   103,     0,   119,     0,   120,     0,   121,   126,   122,
+     124,   133,    98,     0,    47,     0,     0,     0,     0,   135,
+     136,   113,   129,   130,   132,   117,   104,    79,     0,     0,
+       0,     0,     0,   138,     0,    85,    86,     0,     1,     6,
+       0,     0,     0,     0,    44,    52,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   148,     0,     0,   114,     0,   146,
+       0,   125,   128,     0,   123,    51,     0,     0,     0,    48,
+       0,     0,     0,     0,     0,    56,    51,     0,   131,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      51,     0,    87,     2,     0,    52,     0,     0,    51,     0,
+      28,    75,    76,    74,    77,    78,    71,    81,    82,    83,
+      84,    80,    67,    68,    69,    70,    72,    73,   108,   149,
+      62,   116,   127,   141,    12,    13,    14,    19,    16,     0,
+       0,    18,    15,   141,   112,   118,    90,     0,    92,     0,
+      94,     0,    96,     0,    88,    89,   139,   110,   147,    53,
+       0,    46,    53,     0,    45,   142,     0,    20,    17,     0,
+       0,     0,     0,     0,   141,     0,    52,     0,     0,    52,
+      52,    22,     0,   145,   145,    91,    93,    95,    97,     0,
+     111,    54,    55,     0,     0,    52,    51,    32,   143,     0,
+      53,    53,   145,    25,    52,    53,    29,    53,     0,    50,
+      51,    52,    40,     0,   144,   134,   137,    53,    53,    52,
+      52,    52,    42,    38,     0,     0,    39,    35,     0,     0,
+      52,     0,     0,    37,     0,     0,    52,    51,    52,    51,
+     140,     0,    26,    30,    31,    51,    33,     0,    34,     0,
+      27,    52,    36,    52,    43,    41
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    38,   254,    39,    58,    41,   255,    43,   301,   284,
-     285,   275,   286,   111,    44,    45,    46,   276,   312,   177,
-     240,    47,    48,   245,    70,    95,    50,    78,    79,    51,
-      52,   143,   154,   168,   239,   231,   263,    53,    64
+      -1,    39,   261,    40,    59,    42,   262,    44,   308,   291,
+     292,   282,   293,   113,    45,    46,    47,   283,   319,   180,
+     246,    48,    49,   251,    71,    96,    51,    79,    80,    52,
+      53,   145,   156,   170,   244,   236,   270,    54,    65
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -255
+#define YYPACT_NINF -256
 static const yytype_int16 yypact[] =
 {
-     306,   -63,  -255,  -255,   859,  -255,  -255,   859,   859,   897,
-       6,  1493,  -255,  -255,    11,    37,   757,  -255,    47,   859,
-      -2,    90,    54,    59,    61,   859,   823,    64,   859,   859,
-     859,   859,   859,   859,    76,   859,   859,   859,     4,  -255,
-       8,  -255,  -255,  -255,    12,    19,   933,   859,  1462,  -255,
-    -255,  -255,  -255,  -255,  -255,  -255,    17,   859,  -255,  1462,
-    1462,  1462,   859,  1462,    15,   859,   859,   859,  -255,  -255,
-      21,   859,  -255,   859,  -255,    75,  -255,  1462,    42,  -255,
-    -255,   957,    98,  -255,   -40,   859,   -38,    77,  -255,  -255,
-    1307,  -255,    42,  -255,  -255,    29,   -56,   993,  1029,  1065,
-    1101,  1338,  -255,   -56,   -56,  1400,  -255,   385,   933,   859,
-     933,    82,  1431,  1462,   859,   859,   859,   859,   859,   859,
-     859,   859,   859,   859,   859,   859,   859,   859,   859,   859,
-     859,   957,  1400,   -30,   859,    15,   -20,    15,   106,  1462,
-    1462,   859,  -255,  -255,   107,   859,   859,  -255,   859,   859,
-    1276,   859,   859,  -255,  -255,   859,  -255,   109,   859,   859,
-     859,   859,   859,   859,   859,   859,   859,   859,  -255,  -255,
-    -255,    46,  1462,    49,  1369,   -63,   859,  -255,   -35,   -35,
-     -35,   -56,   -56,   -56,  1462,  1462,   -35,   -35,    71,   301,
-     301,   -56,   -56,  1462,  1462,  -255,  1462,  -255,  -255,  1462,
-     111,  -255,  1462,  1462,  1462,  1462,   859,   859,  1462,  1462,
-     111,  1462,  -255,  1462,  1137,  1462,  1173,  1462,  1209,  1462,
-    1245,  1462,  1462,  -255,  -255,    -3,  -255,  -255,   691,  1462,
-    -255,   -67,  1462,  1462,   -67,   859,   859,   859,   859,   111,
-     538,    96,   859,   538,  -255,  -255,   121,    52,    52,  1462,
-    1462,  1462,  1462,   -67,  -255,  -255,   122,   859,  1462,   -11,
-      -9,  -255,   125,  -255,  -255,    52,  -255,  1462,  -255,  -255,
-    -255,   120,  -255,  -255,   120,  -255,   933,  -255,   538,   538,
-    -255,  -255,   538,   538,   120,   120,  -255,   933,   691,  -255,
-     100,   108,   459,   538,   126,   128,  -255,   134,   117,  -255,
-    -255,  -255,  -255,  -255,   139,  -255,  -255,  -255,   -19,  -255,
-     691,  -255,   617,  -255,   538,  -255,  -255,  -255,  -255
+     309,   -63,  -256,  -256,   870,  -256,  -256,   870,   870,   908,
+      14,  1504,  -256,  -256,    -2,    25,   768,  -256,    33,   870,
+     -14,    17,    52,    67,    73,   870,   834,    75,   870,   870,
+     870,   870,   870,   870,    76,   -15,   870,   870,   870,    10,
+    -256,    11,  -256,  -256,  -256,   -12,    21,   944,   870,  1473,
+    -256,  -256,  -256,  -256,  -256,  -256,  -256,    15,   870,  -256,
+    1473,  1473,  1473,   870,  1473,    12,   870,   870,   870,  -256,
+    -256,    13,   870,  -256,   870,  -256,    70,  -256,  1473,    56,
+    -256,  -256,   968,    87,  -256,   -33,   870,   -30,    66,  -256,
+    -256,  1318,  -256,    56,  -256,  -256,    22,   -50,  1004,  1040,
+    1076,  1112,  1349,  -256,    93,   -50,   -50,  1411,  -256,   388,
+     944,   870,   944,    74,  1442,  1473,   870,   870,   870,   870,
+     870,   870,   870,   870,   870,   870,   870,   870,   870,   870,
+     870,   870,   870,   968,  1411,   -38,   870,    12,   -37,    12,
+      96,  1473,  1473,   870,  -256,  -256,   101,   870,   870,  -256,
+     870,   870,  1287,   870,   870,  -256,  -256,   870,  -256,   102,
+     870,   870,   870,   870,   870,   870,   870,   870,   870,   870,
+    -256,   -26,  -256,  -256,    34,  1473,    36,  1380,   -63,   870,
+    -256,    65,    65,    65,   -50,   -50,   -50,  1473,  1473,    65,
+      65,   730,   160,   160,   -50,   -50,  1473,  1473,  -256,  1473,
+    -256,  -256,  1473,   109,  -256,  1473,  1473,  1473,  1473,   870,
+     870,  1473,  1473,   109,  1473,  -256,  1473,  1148,  1473,  1184,
+    1473,  1220,  1473,  1256,  1473,  1473,  -256,  -256,   870,  -256,
+       5,  -256,  -256,   694,  1473,  -256,   -56,  1473,  1473,   -56,
+     870,   870,   870,   870,   109,   -22,   541,    88,   870,   541,
+    -256,  -256,   115,    44,    44,  1473,  1473,  1473,  1473,   -56,
+    -256,  -256,  -256,   113,   870,  1473,    -4,    -6,  -256,   119,
+    -256,  -256,    44,  -256,  1473,  -256,  -256,  -256,   114,  -256,
+    -256,   114,  -256,   944,  -256,   541,   541,  -256,  -256,   541,
+     541,   114,   114,  -256,   944,   694,  -256,    92,    99,   462,
+     541,   120,   127,  -256,   128,   100,  -256,  -256,  -256,  -256,
+    -256,   129,  -256,  -256,  -256,    -1,  -256,   694,  -256,   620,
+    -256,   541,  -256,  -256,  -256,  -256
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -255,  -255,    14,    43,     2,  -212,     0,  -255,  -255,  -255,
-     -91,  -241,  -114,   -86,  -255,  -255,  -255,  -254,   -10,   -12,
-    -209,  -255,    58,     3,  -255,  -255,  -255,   145,   -14,  -255,
-    -255,  -255,  -255,  -255,  -255,  -200,  -228,  -255,    51
+    -256,  -256,     8,    46,     3,  -225,     0,  -256,  -256,  -256,
+    -109,  -253,  -130,   -96,  -256,  -256,  -256,  -255,   -10,   -16,
+    -212,  -256,    53,     4,  -256,  -256,  -256,   136,   -13,  -256,
+    -256,  -256,  -256,  -256,  -256,  -195,  -228,  -256,   -61
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -871,328 +874,330 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -64
 static const yytype_int16 yytable[] =
 {
-      42,    67,    40,    49,   106,   148,   -53,   151,   -10,   -53,
-     234,   120,    93,   121,   269,    55,   244,   287,   243,   272,
-     264,    54,   171,   241,   173,    54,   246,    65,   117,   118,
-     287,   119,   120,   289,   121,   129,   130,   280,   270,   253,
-     273,   149,   242,   152,   289,    82,    83,   124,   125,   126,
-     127,   128,   107,    68,   278,   279,   129,   130,    69,   282,
-     195,   283,    59,   134,   142,    60,    61,    63,    80,   -53,
-     197,   292,   293,   134,    77,    87,   299,    81,   156,    73,
-      88,    75,    89,    90,    77,    94,    96,    97,    98,    99,
-     100,   101,    54,   103,   104,   105,   -10,   102,   315,   314,
-     109,   108,    84,    85,   112,   113,    66,    42,   134,    40,
-      49,    86,   141,   133,   138,   131,   135,   136,   137,   147,
-     132,   153,   157,    63,    63,    63,   175,   198,   201,   139,
-     212,   140,   230,   200,   117,   118,   224,   119,   120,   226,
-     121,   257,   261,   150,   210,   262,   277,   266,   272,   300,
-     170,   305,   302,   306,   125,   126,   127,   128,   223,   307,
-     225,   308,   129,   130,   313,   228,   112,   172,   174,   274,
-     296,    92,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   194,   227,
-     291,     0,   196,     0,     0,     0,     0,     0,     0,   199,
-       0,   298,     0,   202,   203,     0,   204,   205,     0,   208,
-     209,     0,     0,   211,     0,     0,   213,   214,   215,   216,
-     217,   218,   219,   220,   221,   222,     0,     0,   256,     0,
-       0,   259,   260,     0,   229,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   247,   268,     0,   248,   271,
-       0,     0,     0,     0,     0,   281,     0,     0,     0,     0,
-       0,     0,   290,   288,   232,   233,     0,   265,     0,     0,
-     294,   295,   297,     0,     0,     0,     0,     0,     0,     0,
-       0,   304,     0,     0,     0,     0,     0,   309,     0,   311,
-     310,     0,     0,   249,   250,   251,   252,     0,     0,     0,
-     258,     0,   317,     0,   318,     0,    -6,     1,     0,     0,
-       0,     0,   316,     0,     0,   267,     0,     2,     3,     4,
-       5,     0,     6,     7,     8,     9,    10,    11,    12,     0,
-      13,     0,     0,     0,   112,    14,     0,    15,    16,    17,
-       0,     0,    18,     0,     0,   112,     0,    19,    20,    21,
-       0,     0,    22,     0,     0,     0,    23,    24,    25,    26,
-       0,     0,    27,     0,   117,   118,     0,   119,   120,     0,
-     121,    28,     0,     0,     0,     0,     0,     0,    29,    30,
-      31,    32,    33,     0,     0,    34,   127,   128,     0,    35,
-      36,     0,   129,   130,    -6,    37,     2,     3,     4,     5,
-       0,     6,     7,     8,     9,    10,    11,    12,     0,    13,
-       0,     0,     0,     0,    14,     0,    15,    16,    17,     0,
-       0,    18,     0,     0,     0,     0,    19,    20,    21,     0,
-       0,    22,     0,     0,     0,    23,    24,    25,    26,     0,
-       0,    27,     0,     0,     0,     0,     0,     0,     0,     0,
-      28,     0,     0,     0,     0,     0,     0,    29,    30,    31,
-      32,    33,     0,     0,    34,     0,     0,     0,    35,    36,
-       2,     3,     4,     5,    37,     6,     7,     8,     9,    10,
-      56,    12,     0,    13,   303,     0,     0,     0,    14,     0,
-      15,    16,    17,     0,     0,     0,     0,     0,     0,     0,
-      19,    20,    21,     0,     0,    22,     0,     0,     0,     0,
-       0,    25,    26,     0,     0,    27,     0,     0,     0,     0,
+      43,    68,   135,    41,    50,   137,   138,   139,   250,    56,
+     108,   -10,   150,    94,   174,   153,   176,   122,   239,   123,
+     249,   276,   279,   294,   -53,    55,   271,   -53,   296,    85,
+      86,   247,    55,    83,    84,    66,   294,   252,    87,   296,
+      69,   131,   132,   280,   287,   277,    70,   109,   151,   259,
+     248,   154,   198,   200,    81,   136,   136,    60,   285,   286,
+      61,    62,    64,   289,   227,   290,   144,   228,   260,    78,
+     306,   136,    82,    88,   104,   299,   300,   110,    91,    78,
+     158,    97,    98,    99,   100,   101,   102,   -53,    89,   105,
+     106,   107,   322,    74,    90,    76,    95,   103,    55,   -10,
+     114,   115,   111,   321,    67,   136,   140,   143,   149,    43,
+     155,   133,    41,    50,   171,   159,   134,   201,   178,    64,
+      64,    64,   204,   215,   229,   141,   231,   142,   119,   120,
+     235,   121,   122,   264,   123,   203,   268,   269,   273,   152,
+     284,   307,   279,   309,   315,   312,   213,   126,   127,   128,
+     129,   130,   313,   314,   320,   173,   131,   132,   281,   230,
+     226,   303,    93,   114,   175,   177,     0,   245,   233,   181,
+     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   232,   298,     0,   199,
+       0,     0,     0,     0,     0,     0,   202,     0,   305,     0,
+     205,   206,     0,   207,   208,     0,   211,   212,     0,     0,
+     214,     0,     0,   216,   217,   218,   219,   220,   221,   222,
+     223,   224,   225,   119,   120,     0,   121,   122,     0,   123,
+     263,     0,   234,   266,   267,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   253,   129,   130,   254,     0,   275,
+       0,   131,   132,     0,     0,     0,   278,     0,   288,     0,
+       0,     0,   237,   238,     0,   297,     0,   272,     0,     0,
+     295,     0,     0,   301,   302,   304,     0,     0,     0,     0,
+       0,    64,     0,     0,   311,     0,     0,     0,     0,     0,
+     316,     0,   318,   255,   256,   257,   258,   317,     0,     0,
+       0,   265,     0,     0,     0,   324,     0,   325,     0,    -6,
+       1,     0,     0,     0,     0,     0,     0,   274,     0,   323,
+       2,     3,     4,     5,     0,     6,     7,     8,     9,    10,
+      11,    12,     0,    13,     0,     0,   114,     0,    14,     0,
+      15,    16,    17,     0,     0,    18,     0,   114,     0,     0,
+      19,    20,    21,     0,     0,    22,     0,     0,     0,    23,
+      24,    25,    26,     0,     0,    27,     0,     0,     0,     0,
        0,     0,     0,     0,    28,     0,     0,     0,     0,     0,
-       0,    29,    30,    31,    32,    33,     0,     0,     0,     0,
-       0,     0,    35,    36,     0,     0,     0,    54,    37,     2,
-       3,     4,     5,     0,     6,     7,     8,     9,    10,    56,
+       0,    29,    30,    31,    32,    33,     0,     0,    34,    35,
+       0,     0,    36,    37,     0,     0,     0,    -6,    38,     2,
+       3,     4,     5,     0,     6,     7,     8,     9,    10,    11,
       12,     0,    13,     0,     0,     0,     0,    14,     0,    15,
-      16,    17,     0,     0,     0,     0,     0,     0,     0,    19,
-      20,    21,     0,     0,    22,     0,     0,     0,     0,     0,
+      16,    17,     0,     0,    18,     0,     0,     0,     0,    19,
+      20,    21,     0,     0,    22,     0,     0,     0,    23,    24,
       25,    26,     0,     0,    27,     0,     0,     0,     0,     0,
        0,     0,     0,    28,     0,     0,     0,     0,     0,     0,
-      29,    30,    31,    32,    33,     0,     0,     0,     0,     0,
-       0,    35,    36,     0,     0,     0,    54,    37,     2,     3,
-       4,     5,     0,     6,     7,     8,     9,    10,    56,    12,
-       0,    13,     0,     0,     0,     0,    14,     0,    15,    16,
-      17,     0,     0,     0,     0,     0,     0,     0,    19,    20,
-      21,     0,     0,    22,     0,     0,     0,     0,     0,    25,
-      26,     0,     0,    27,     0,     0,     0,     0,     0,     0,
-       0,     0,    28,     0,     0,     0,     0,     0,     0,    29,
-      30,    31,    32,    33,     0,     0,     0,     0,     0,     0,
-      35,    36,     2,     3,     4,     5,    37,     6,     7,     8,
-       9,    10,    56,    12,     0,    13,     0,     0,     0,     0,
-      14,     0,    15,    16,     0,     0,     0,     0,     0,     0,
-       0,     0,    19,     0,    21,     0,     0,     0,     0,     0,
+      29,    30,    31,    32,    33,     0,     0,    34,    35,     0,
+       0,    36,    37,     2,     3,     4,     5,    38,     6,     7,
+       8,     9,    10,    57,    12,     0,    13,   310,     0,     0,
+       0,    14,     0,    15,    16,    17,     0,     0,     0,     0,
+       0,     0,     0,    19,    20,    21,     0,     0,    22,     0,
+       0,     0,     0,     0,    25,    26,     0,     0,    27,     0,
+       0,     0,     0,     0,     0,     0,     0,    28,     0,     0,
+       0,     0,     0,     0,    29,    30,    31,    32,    33,     0,
+       0,     0,    35,     0,     0,    36,    37,     0,     0,     0,
+      55,    38,     2,     3,     4,     5,     0,     6,     7,     8,
+       9,    10,    57,    12,     0,    13,     0,     0,     0,     0,
+      14,     0,    15,    16,    17,     0,     0,     0,     0,     0,
+       0,     0,    19,    20,    21,     0,     0,    22,     0,     0,
        0,     0,     0,    25,    26,     0,     0,    27,     0,     0,
        0,     0,     0,     0,     0,     0,    28,     0,     0,     0,
-       0,     0,     0,    29,    30,    31,    32,    33,     2,     3,
-       4,     5,     0,     6,    35,    36,     0,     0,    56,    12,
-      37,    13,     0,     0,     0,     0,     0,    71,     0,     0,
-       0,     0,    72,     0,    73,    74,    75,    76,    57,     0,
-      21,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    29,    30,    31,    32,    33,     0,     0,
+       0,    35,     0,     0,    36,    37,     0,     0,     0,    55,
+      38,     2,     3,     4,     5,     0,     6,     7,     8,     9,
+      10,    57,    12,     0,    13,     0,     0,     0,     0,    14,
+       0,    15,    16,    17,     0,     0,     0,     0,     0,     0,
+       0,    19,    20,    21,     0,     0,    22,     0,     0,     0,
+       0,     0,    25,    26,     0,     0,    27,     0,     0,     0,
+       0,     0,     0,     0,     0,    28,     0,     0,     0,     0,
+       0,     0,    29,    30,    31,    32,    33,     0,     0,     0,
+      35,     0,     0,    36,    37,     2,     3,     4,     5,    38,
+       6,     7,     8,     9,    10,    57,    12,     0,    13,     0,
+       0,     0,     0,    14,     0,    15,    16,     0,     0,     0,
+       0,     0,     0,     0,     0,    19,     0,    21,     0,     0,
+       0,     0,     0,     0,     0,     0,    25,    26,     0,     0,
+      27,     0,     0,     0,     0,     0,     0,     0,     0,    28,
+       0,     0,     0,     0,     0,     0,    29,    30,    31,    32,
+      33,     0,     0,     0,    35,     0,     0,    36,    37,     2,
+       3,     4,     5,    38,     6,     0,     0,     0,     0,    57,
+      12,     0,    13,   119,   120,     0,   121,   122,    72,   123,
+       0,     0,     0,    73,     0,    74,    75,    76,    77,    58,
+       0,    21,     0,   127,   128,   129,   130,     0,     0,     0,
+       0,   131,   132,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    28,     0,     0,     0,     0,     0,     0,
+      29,    30,    31,    32,    33,     2,     3,     4,     5,     0,
+       6,    36,    37,     0,     0,    57,    12,    38,    13,     0,
+       0,     0,     0,     0,    72,     0,     0,     0,     0,     0,
+       0,    74,     0,    76,     0,    58,     0,    21,     0,     0,
+       0,     2,     3,     4,     5,     0,     6,     0,    92,     0,
+       0,    57,    12,     0,    13,     0,     0,     0,     0,    28,
+       0,     0,     0,     0,     0,     0,    29,    30,    31,    32,
+      33,    58,     0,    21,     0,     0,     0,    36,    37,     2,
+       3,     4,     5,    38,     6,     0,     0,     0,     0,    57,
+      12,     0,    13,     0,     0,    28,     0,     0,     0,     0,
+       0,     0,    29,    30,    31,    32,    33,     0,     0,    58,
+       0,    21,     0,    36,    37,     2,     3,     4,     5,    38,
+       6,     0,     0,     0,     0,    57,    12,     0,    13,     0,
+       0,     0,     0,    28,     0,     0,     0,     0,     0,     0,
+      29,    30,    31,    32,    33,    58,     0,    21,     0,     0,
+       0,    36,    37,     0,     0,     0,     0,    63,     0,     0,
+       0,     0,   146,     0,     0,     0,     0,     0,     0,    28,
+       0,     0,     0,     0,     0,     0,    29,    30,    31,    32,
+      33,     0,     0,     0,     0,   116,   117,    36,    37,     0,
+     118,   119,   120,   112,   121,   147,   148,   123,   124,   125,
+       0,     0,     0,   160,     0,     0,     0,     0,     0,   161,
+     126,   127,   128,   129,   130,     0,     0,     0,     0,   131,
+     132,   116,   117,     0,     0,     0,   118,   119,   120,     0,
+     121,   122,     0,   123,   124,   125,     0,     0,     0,   162,
+       0,     0,     0,     0,     0,   163,   126,   127,   128,   129,
+     130,     0,     0,     0,     0,   131,   132,   116,   117,     0,
+       0,     0,   118,   119,   120,     0,   121,   122,     0,   123,
+     124,   125,     0,     0,     0,   164,     0,     0,     0,     0,
+       0,   165,   126,   127,   128,   129,   130,     0,     0,     0,
+       0,   131,   132,   116,   117,     0,     0,     0,   118,   119,
+     120,     0,   121,   122,     0,   123,   124,   125,     0,     0,
+       0,   166,     0,     0,     0,     0,     0,   167,   126,   127,
+     128,   129,   130,     0,     0,     0,     0,   131,   132,   116,
+     117,     0,     0,     0,   118,   119,   120,     0,   121,   122,
+       0,   123,   124,   125,     0,     0,     0,   240,     0,     0,
+       0,     0,     0,     0,   126,   127,   128,   129,   130,     0,
+       0,     0,     0,   131,   132,   116,   117,     0,     0,     0,
+     118,   119,   120,     0,   121,   122,     0,   123,   124,   125,
+       0,     0,     0,   241,     0,     0,     0,     0,     0,     0,
+     126,   127,   128,   129,   130,     0,     0,     0,     0,   131,
+     132,   116,   117,     0,     0,     0,   118,   119,   120,     0,
+     121,   122,     0,   123,   124,   125,     0,     0,     0,   242,
+       0,     0,     0,     0,     0,     0,   126,   127,   128,   129,
+     130,     0,     0,     0,     0,   131,   132,   116,   117,     0,
+       0,     0,   118,   119,   120,     0,   121,   122,     0,   123,
+     124,   125,     0,     0,     0,   243,     0,     0,     0,     0,
+       0,     0,   126,   127,   128,   129,   130,     0,     0,     0,
+       0,   131,   132,   116,   117,     0,     0,     0,   118,   119,
+     120,     0,   121,   122,     0,   123,   124,   125,     0,     0,
+       0,     0,   209,     0,     0,     0,     0,     0,   126,   127,
+     128,   129,   130,     0,   116,   117,     0,   131,   132,   118,
+     119,   120,     0,   121,   122,     0,   123,   124,   125,     0,
+       0,     0,     0,     0,     0,   157,     0,     0,   210,   126,
+     127,   128,   129,   130,     0,   116,   117,     0,   131,   132,
+     118,   119,   120,     0,   121,   122,     0,   123,   124,   125,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    28,     0,     0,     0,     0,     0,     0,    29,
-      30,    31,    32,    33,     2,     3,     4,     5,     0,     6,
-      35,    36,     0,     0,    56,    12,    37,    13,     0,     0,
-       0,     0,     0,    71,     0,     0,     0,     0,     0,     0,
-      73,     0,    75,     0,    57,     0,    21,     0,     0,     0,
-       2,     3,     4,     5,     0,     6,     0,    91,     0,     0,
-      56,    12,     0,    13,     0,     0,     0,     0,    28,     0,
-       0,     0,     0,     0,     0,    29,    30,    31,    32,    33,
-      57,     0,    21,     0,     0,     0,    35,    36,     2,     3,
-       4,     5,    37,     6,     0,     0,     0,     0,    56,    12,
-       0,    13,     0,     0,    28,     0,     0,     0,     0,     0,
-       0,    29,    30,    31,    32,    33,     0,     0,    57,     0,
-      21,     0,    35,    36,     2,     3,     4,     5,    37,     6,
-       0,     0,     0,     0,    56,    12,     0,    13,     0,     0,
-       0,     0,    28,     0,     0,     0,     0,     0,     0,    29,
-      30,    31,    32,    33,    57,     0,    21,     0,     0,     0,
-      35,    36,     0,     0,     0,     0,    62,     0,     0,     0,
-       0,   144,     0,     0,     0,     0,     0,     0,    28,     0,
-       0,     0,     0,     0,     0,    29,    30,    31,    32,    33,
-       0,     0,     0,     0,   114,   115,    35,    36,     0,   116,
-     117,   118,   110,   119,   145,   146,   121,   122,   123,     0,
-       0,     0,   158,     0,     0,     0,     0,     0,   159,   124,
-     125,   126,   127,   128,     0,     0,     0,     0,   129,   130,
-     114,   115,     0,     0,     0,   116,   117,   118,     0,   119,
-     120,     0,   121,   122,   123,     0,     0,     0,   160,     0,
-       0,     0,     0,     0,   161,   124,   125,   126,   127,   128,
-       0,     0,     0,     0,   129,   130,   114,   115,     0,     0,
-       0,   116,   117,   118,     0,   119,   120,     0,   121,   122,
-     123,     0,     0,     0,   162,     0,     0,     0,     0,     0,
-     163,   124,   125,   126,   127,   128,     0,     0,     0,     0,
-     129,   130,   114,   115,     0,     0,     0,   116,   117,   118,
-       0,   119,   120,     0,   121,   122,   123,     0,     0,     0,
-     164,     0,     0,     0,     0,     0,   165,   124,   125,   126,
-     127,   128,     0,     0,     0,     0,   129,   130,   114,   115,
-       0,     0,     0,   116,   117,   118,     0,   119,   120,     0,
-     121,   122,   123,     0,     0,     0,   235,     0,     0,     0,
-       0,     0,     0,   124,   125,   126,   127,   128,     0,     0,
-       0,     0,   129,   130,   114,   115,     0,     0,     0,   116,
-     117,   118,     0,   119,   120,     0,   121,   122,   123,     0,
-       0,     0,   236,     0,     0,     0,     0,     0,     0,   124,
-     125,   126,   127,   128,     0,     0,     0,     0,   129,   130,
-     114,   115,     0,     0,     0,   116,   117,   118,     0,   119,
-     120,     0,   121,   122,   123,     0,     0,     0,   237,     0,
-       0,     0,     0,     0,     0,   124,   125,   126,   127,   128,
-       0,     0,     0,     0,   129,   130,   114,   115,     0,     0,
-       0,   116,   117,   118,     0,   119,   120,     0,   121,   122,
-     123,     0,     0,     0,   238,     0,     0,     0,     0,     0,
-       0,   124,   125,   126,   127,   128,     0,     0,     0,     0,
-     129,   130,   114,   115,     0,     0,     0,   116,   117,   118,
-       0,   119,   120,     0,   121,   122,   123,     0,     0,     0,
-       0,   206,     0,     0,     0,     0,     0,   124,   125,   126,
-     127,   128,     0,   114,   115,     0,   129,   130,   116,   117,
-     118,     0,   119,   120,     0,   121,   122,   123,     0,     0,
-       0,     0,     0,     0,   155,     0,     0,   207,   124,   125,
-     126,   127,   128,     0,   114,   115,     0,   129,   130,   116,
-     117,   118,     0,   119,   120,     0,   121,   122,   123,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   124,
-     125,   126,   127,   128,     0,   114,   115,     0,   129,   130,
-     116,   117,   118,     0,   119,   120,     0,   121,   122,   123,
-       0,     0,     0,     0,     0,   166,   167,     0,     0,     0,
-     124,   125,   126,   127,   128,     0,   114,   115,     0,   129,
-     130,   116,   117,   118,     0,   119,   120,     0,   121,   122,
-     123,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     176,   124,   125,   126,   127,   128,     0,   114,   115,   169,
-     129,   130,   116,   117,   118,     0,   119,   120,     0,   121,
-     122,   123,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   124,   125,   126,   127,   128,     0,   114,   115,
-     169,   129,   130,   116,   117,   118,     0,   119,   120,     0,
-     121,   122,   123,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   176,   124,   125,   126,   127,   128,     0,   114,
-     115,     0,   129,   130,   116,   117,   118,     0,   119,   120,
-       0,   121,   122,   123,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   124,   125,   126,   127,   128,     0,
-     -63,   -63,     0,   129,   130,   -63,   -63,   -63,     0,   -63,
-     -63,     0,   -63,   -63,   -63,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   -63,     0,     0,   -63,   -63,
-       0,     0,    66,     0,   -63,   -63
+     126,   127,   128,   129,   130,     0,   116,   117,     0,   131,
+     132,   118,   119,   120,     0,   121,   122,     0,   123,   124,
+     125,     0,     0,     0,     0,     0,   168,   169,     0,     0,
+       0,   126,   127,   128,   129,   130,     0,   116,   117,     0,
+     131,   132,   118,   119,   120,     0,   121,   122,     0,   123,
+     124,   125,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   179,   126,   127,   128,   129,   130,     0,   116,   117,
+     172,   131,   132,   118,   119,   120,     0,   121,   122,     0,
+     123,   124,   125,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   126,   127,   128,   129,   130,     0,   116,
+     117,   172,   131,   132,   118,   119,   120,     0,   121,   122,
+       0,   123,   124,   125,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   179,   126,   127,   128,   129,   130,     0,
+     116,   117,     0,   131,   132,   118,   119,   120,     0,   121,
+     122,     0,   123,   124,   125,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   126,   127,   128,   129,   130,
+       0,   -63,   -63,     0,   131,   132,   -63,   -63,   -63,     0,
+     -63,   -63,     0,   -63,   -63,   -63,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   -63,     0,     0,   -63,
+     -63,     0,     0,    67,     0,   -63,   -63
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    11,     0,     0,     0,    45,    25,    45,     0,    28,
-     210,    67,    26,    69,    25,     1,   228,   271,   227,    28,
-     248,    88,   108,    26,   110,    88,    93,    21,    63,    64,
-     284,    66,    67,   274,    69,    91,    92,   265,    49,   239,
-      49,    81,    45,    81,   285,    47,    48,    82,    83,    84,
-      85,    86,    38,    42,   263,   264,    91,    92,    21,   268,
-      90,   270,     4,    93,    78,     7,     8,     9,    21,    88,
-      90,   280,   281,    93,    16,    21,   288,    19,    92,    37,
-      21,    39,    21,    25,    26,    21,    28,    29,    30,    31,
-      32,    33,    88,    35,    36,    37,    88,    21,   310,   308,
-      81,    89,    12,    13,    46,    47,    89,   107,    93,   107,
-     107,    21,    37,    62,    93,    57,    65,    66,    67,    21,
-      62,    44,    93,    65,    66,    67,    44,    21,    21,    71,
-      21,    73,    21,   143,    63,    64,    90,    66,    67,    90,
-      69,    45,    21,    85,   154,    93,    21,    25,    28,    49,
-     107,    25,    44,    25,    83,    84,    85,    86,   168,    25,
-     172,    44,    91,    92,    25,   175,   108,   109,   110,   260,
-     284,    26,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   175,
-     276,    -1,   134,    -1,    -1,    -1,    -1,    -1,    -1,   141,
-      -1,   287,    -1,   145,   146,    -1,   148,   149,    -1,   151,
-     152,    -1,    -1,   155,    -1,    -1,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,    -1,    -1,   240,    -1,
-      -1,   243,   244,    -1,   176,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   231,   258,    -1,   234,   259,
-      -1,    -1,    -1,    -1,    -1,   267,    -1,    -1,    -1,    -1,
-      -1,    -1,   274,   273,   206,   207,    -1,   253,    -1,    -1,
-     282,   283,   284,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   293,    -1,    -1,    -1,    -1,    -1,   299,    -1,   301,
-     300,    -1,    -1,   235,   236,   237,   238,    -1,    -1,    -1,
-     242,    -1,   314,    -1,   316,    -1,     0,     1,    -1,    -1,
-      -1,    -1,   312,    -1,    -1,   257,    -1,    11,    12,    13,
-      14,    -1,    16,    17,    18,    19,    20,    21,    22,    -1,
-      24,    -1,    -1,    -1,   276,    29,    -1,    31,    32,    33,
-      -1,    -1,    36,    -1,    -1,   287,    -1,    41,    42,    43,
-      -1,    -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,
-      -1,    -1,    56,    -1,    63,    64,    -1,    66,    67,    -1,
-      69,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    73,
-      74,    75,    76,    -1,    -1,    79,    85,    86,    -1,    83,
-      84,    -1,    91,    92,    88,    89,    11,    12,    13,    14,
-      -1,    16,    17,    18,    19,    20,    21,    22,    -1,    24,
-      -1,    -1,    -1,    -1,    29,    -1,    31,    32,    33,    -1,
-      -1,    36,    -1,    -1,    -1,    -1,    41,    42,    43,    -1,
-      -1,    46,    -1,    -1,    -1,    50,    51,    52,    53,    -1,
-      -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      65,    -1,    -1,    -1,    -1,    -1,    -1,    72,    73,    74,
-      75,    76,    -1,    -1,    79,    -1,    -1,    -1,    83,    84,
-      11,    12,    13,    14,    89,    16,    17,    18,    19,    20,
-      21,    22,    -1,    24,    25,    -1,    -1,    -1,    29,    -1,
-      31,    32,    33,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      41,    42,    43,    -1,    -1,    46,    -1,    -1,    -1,    -1,
-      -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,
+       0,    11,    63,     0,     0,    66,    67,    68,   233,     1,
+       0,     0,    45,    26,   110,    45,   112,    67,   213,    69,
+     232,    25,    28,   278,    25,    88,   254,    28,   281,    12,
+      13,    26,    88,    47,    48,    21,   291,    93,    21,   292,
+      42,    91,    92,    49,   272,    49,    21,    39,    81,   244,
+      45,    81,    90,    90,    21,    93,    93,     4,   270,   271,
+       7,     8,     9,   275,    90,   277,    79,    93,    90,    16,
+     295,    93,    19,    21,    89,   287,   288,    89,    25,    26,
+      93,    28,    29,    30,    31,    32,    33,    88,    21,    36,
+      37,    38,   317,    37,    21,    39,    21,    21,    88,    88,
+      47,    48,    81,   315,    89,    93,    93,    37,    21,   109,
+      44,    58,   109,   109,    21,    93,    63,    21,    44,    66,
+      67,    68,    21,    21,    90,    72,    90,    74,    63,    64,
+      21,    66,    67,    45,    69,   145,    21,    93,    25,    86,
+      21,    49,    28,    44,    44,    25,   156,    82,    83,    84,
+      85,    86,    25,    25,    25,   109,    91,    92,   267,   175,
+     170,   291,    26,   110,   111,   112,    -1,   228,   178,   116,
+     117,   118,   119,   120,   121,   122,   123,   124,   125,   126,
+     127,   128,   129,   130,   131,   132,   178,   283,    -1,   136,
+      -1,    -1,    -1,    -1,    -1,    -1,   143,    -1,   294,    -1,
+     147,   148,    -1,   150,   151,    -1,   153,   154,    -1,    -1,
+     157,    -1,    -1,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,    63,    64,    -1,    66,    67,    -1,    69,
+     246,    -1,   179,   249,   250,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   236,    85,    86,   239,    -1,   265,
+      -1,    91,    92,    -1,    -1,    -1,   266,    -1,   274,    -1,
+      -1,    -1,   209,   210,    -1,   281,    -1,   259,    -1,    -1,
+     280,    -1,    -1,   289,   290,   291,    -1,    -1,    -1,    -1,
+      -1,   228,    -1,    -1,   300,    -1,    -1,    -1,    -1,    -1,
+     306,    -1,   308,   240,   241,   242,   243,   307,    -1,    -1,
+      -1,   248,    -1,    -1,    -1,   321,    -1,   323,    -1,     0,
+       1,    -1,    -1,    -1,    -1,    -1,    -1,   264,    -1,   319,
+      11,    12,    13,    14,    -1,    16,    17,    18,    19,    20,
+      21,    22,    -1,    24,    -1,    -1,   283,    -1,    29,    -1,
+      31,    32,    33,    -1,    -1,    36,    -1,   294,    -1,    -1,
+      41,    42,    43,    -1,    -1,    46,    -1,    -1,    -1,    50,
+      51,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
-      -1,    72,    73,    74,    75,    76,    -1,    -1,    -1,    -1,
+      -1,    72,    73,    74,    75,    76,    -1,    -1,    79,    80,
       -1,    -1,    83,    84,    -1,    -1,    -1,    88,    89,    11,
       12,    13,    14,    -1,    16,    17,    18,    19,    20,    21,
       22,    -1,    24,    -1,    -1,    -1,    -1,    29,    -1,    31,
-      32,    33,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,
-      42,    43,    -1,    -1,    46,    -1,    -1,    -1,    -1,    -1,
+      32,    33,    -1,    -1,    36,    -1,    -1,    -1,    -1,    41,
+      42,    43,    -1,    -1,    46,    -1,    -1,    -1,    50,    51,
       52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,
-      72,    73,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,
-      -1,    83,    84,    -1,    -1,    -1,    88,    89,    11,    12,
-      13,    14,    -1,    16,    17,    18,    19,    20,    21,    22,
-      -1,    24,    -1,    -1,    -1,    -1,    29,    -1,    31,    32,
-      33,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    41,    42,
-      43,    -1,    -1,    46,    -1,    -1,    -1,    -1,    -1,    52,
-      53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,
-      73,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,
-      83,    84,    11,    12,    13,    14,    89,    16,    17,    18,
+      72,    73,    74,    75,    76,    -1,    -1,    79,    80,    -1,
+      -1,    83,    84,    11,    12,    13,    14,    89,    16,    17,
+      18,    19,    20,    21,    22,    -1,    24,    25,    -1,    -1,
+      -1,    29,    -1,    31,    32,    33,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    41,    42,    43,    -1,    -1,    46,    -1,
+      -1,    -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,
+      -1,    -1,    -1,    -1,    72,    73,    74,    75,    76,    -1,
+      -1,    -1,    80,    -1,    -1,    83,    84,    -1,    -1,    -1,
+      88,    89,    11,    12,    13,    14,    -1,    16,    17,    18,
       19,    20,    21,    22,    -1,    24,    -1,    -1,    -1,    -1,
-      29,    -1,    31,    32,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    41,    -1,    43,    -1,    -1,    -1,    -1,    -1,
+      29,    -1,    31,    32,    33,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    41,    42,    43,    -1,    -1,    46,    -1,    -1,
       -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,
-      -1,    -1,    -1,    72,    73,    74,    75,    76,    11,    12,
-      13,    14,    -1,    16,    83,    84,    -1,    -1,    21,    22,
-      89,    24,    -1,    -1,    -1,    -1,    -1,    30,    -1,    -1,
-      -1,    -1,    35,    -1,    37,    38,    39,    40,    41,    -1,
-      43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,
-      73,    74,    75,    76,    11,    12,    13,    14,    -1,    16,
-      83,    84,    -1,    -1,    21,    22,    89,    24,    -1,    -1,
-      -1,    -1,    -1,    30,    -1,    -1,    -1,    -1,    -1,    -1,
-      37,    -1,    39,    -1,    41,    -1,    43,    -1,    -1,    -1,
-      11,    12,    13,    14,    -1,    16,    -1,    54,    -1,    -1,
-      21,    22,    -1,    24,    -1,    -1,    -1,    -1,    65,    -1,
-      -1,    -1,    -1,    -1,    -1,    72,    73,    74,    75,    76,
-      41,    -1,    43,    -1,    -1,    -1,    83,    84,    11,    12,
-      13,    14,    89,    16,    -1,    -1,    -1,    -1,    21,    22,
-      -1,    24,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
-      -1,    72,    73,    74,    75,    76,    -1,    -1,    41,    -1,
-      43,    -1,    83,    84,    11,    12,    13,    14,    89,    16,
-      -1,    -1,    -1,    -1,    21,    22,    -1,    24,    -1,    -1,
-      -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,    72,
-      73,    74,    75,    76,    41,    -1,    43,    -1,    -1,    -1,
-      83,    84,    -1,    -1,    -1,    -1,    89,    -1,    -1,    -1,
-      -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,    65,    -1,
-      -1,    -1,    -1,    -1,    -1,    72,    73,    74,    75,    76,
-      -1,    -1,    -1,    -1,    57,    58,    83,    84,    -1,    62,
-      63,    64,    89,    66,    67,    68,    69,    70,    71,    -1,
-      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    82,
-      83,    84,    85,    86,    -1,    -1,    -1,    -1,    91,    92,
-      57,    58,    -1,    -1,    -1,    62,    63,    64,    -1,    66,
-      67,    -1,    69,    70,    71,    -1,    -1,    -1,    39,    -1,
-      -1,    -1,    -1,    -1,    45,    82,    83,    84,    85,    86,
-      -1,    -1,    -1,    -1,    91,    92,    57,    58,    -1,    -1,
-      -1,    62,    63,    64,    -1,    66,    67,    -1,    69,    70,
-      71,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
-      45,    82,    83,    84,    85,    86,    -1,    -1,    -1,    -1,
-      91,    92,    57,    58,    -1,    -1,    -1,    62,    63,    64,
-      -1,    66,    67,    -1,    69,    70,    71,    -1,    -1,    -1,
-      39,    -1,    -1,    -1,    -1,    -1,    45,    82,    83,    84,
-      85,    86,    -1,    -1,    -1,    -1,    91,    92,    57,    58,
-      -1,    -1,    -1,    62,    63,    64,    -1,    66,    67,    -1,
-      69,    70,    71,    -1,    -1,    -1,    39,    -1,    -1,    -1,
-      -1,    -1,    -1,    82,    83,    84,    85,    86,    -1,    -1,
-      -1,    -1,    91,    92,    57,    58,    -1,    -1,    -1,    62,
-      63,    64,    -1,    66,    67,    -1,    69,    70,    71,    -1,
-      -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    82,
-      83,    84,    85,    86,    -1,    -1,    -1,    -1,    91,    92,
-      57,    58,    -1,    -1,    -1,    62,    63,    64,    -1,    66,
-      67,    -1,    69,    70,    71,    -1,    -1,    -1,    39,    -1,
-      -1,    -1,    -1,    -1,    -1,    82,    83,    84,    85,    86,
-      -1,    -1,    -1,    -1,    91,    92,    57,    58,    -1,    -1,
-      -1,    62,    63,    64,    -1,    66,    67,    -1,    69,    70,
-      71,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
-      -1,    82,    83,    84,    85,    86,    -1,    -1,    -1,    -1,
-      91,    92,    57,    58,    -1,    -1,    -1,    62,    63,    64,
-      -1,    66,    67,    -1,    69,    70,    71,    -1,    -1,    -1,
-      -1,    45,    -1,    -1,    -1,    -1,    -1,    82,    83,    84,
-      85,    86,    -1,    57,    58,    -1,    91,    92,    62,    63,
+      -1,    -1,    -1,    72,    73,    74,    75,    76,    -1,    -1,
+      -1,    80,    -1,    -1,    83,    84,    -1,    -1,    -1,    88,
+      89,    11,    12,    13,    14,    -1,    16,    17,    18,    19,
+      20,    21,    22,    -1,    24,    -1,    -1,    -1,    -1,    29,
+      -1,    31,    32,    33,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    41,    42,    43,    -1,    -1,    46,    -1,    -1,    -1,
+      -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,
+      -1,    -1,    72,    73,    74,    75,    76,    -1,    -1,    -1,
+      80,    -1,    -1,    83,    84,    11,    12,    13,    14,    89,
+      16,    17,    18,    19,    20,    21,    22,    -1,    24,    -1,
+      -1,    -1,    -1,    29,    -1,    31,    32,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    41,    -1,    43,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    52,    53,    -1,    -1,
+      56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    65,
+      -1,    -1,    -1,    -1,    -1,    -1,    72,    73,    74,    75,
+      76,    -1,    -1,    -1,    80,    -1,    -1,    83,    84,    11,
+      12,    13,    14,    89,    16,    -1,    -1,    -1,    -1,    21,
+      22,    -1,    24,    63,    64,    -1,    66,    67,    30,    69,
+      -1,    -1,    -1,    35,    -1,    37,    38,    39,    40,    41,
+      -1,    43,    -1,    83,    84,    85,    86,    -1,    -1,    -1,
+      -1,    91,    92,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,
+      72,    73,    74,    75,    76,    11,    12,    13,    14,    -1,
+      16,    83,    84,    -1,    -1,    21,    22,    89,    24,    -1,
+      -1,    -1,    -1,    -1,    30,    -1,    -1,    -1,    -1,    -1,
+      -1,    37,    -1,    39,    -1,    41,    -1,    43,    -1,    -1,
+      -1,    11,    12,    13,    14,    -1,    16,    -1,    54,    -1,
+      -1,    21,    22,    -1,    24,    -1,    -1,    -1,    -1,    65,
+      -1,    -1,    -1,    -1,    -1,    -1,    72,    73,    74,    75,
+      76,    41,    -1,    43,    -1,    -1,    -1,    83,    84,    11,
+      12,    13,    14,    89,    16,    -1,    -1,    -1,    -1,    21,
+      22,    -1,    24,    -1,    -1,    65,    -1,    -1,    -1,    -1,
+      -1,    -1,    72,    73,    74,    75,    76,    -1,    -1,    41,
+      -1,    43,    -1,    83,    84,    11,    12,    13,    14,    89,
+      16,    -1,    -1,    -1,    -1,    21,    22,    -1,    24,    -1,
+      -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,    -1,
+      72,    73,    74,    75,    76,    41,    -1,    43,    -1,    -1,
+      -1,    83,    84,    -1,    -1,    -1,    -1,    89,    -1,    -1,
+      -1,    -1,    34,    -1,    -1,    -1,    -1,    -1,    -1,    65,
+      -1,    -1,    -1,    -1,    -1,    -1,    72,    73,    74,    75,
+      76,    -1,    -1,    -1,    -1,    57,    58,    83,    84,    -1,
+      62,    63,    64,    89,    66,    67,    68,    69,    70,    71,
+      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
+      82,    83,    84,    85,    86,    -1,    -1,    -1,    -1,    91,
+      92,    57,    58,    -1,    -1,    -1,    62,    63,    64,    -1,
+      66,    67,    -1,    69,    70,    71,    -1,    -1,    -1,    39,
+      -1,    -1,    -1,    -1,    -1,    45,    82,    83,    84,    85,
+      86,    -1,    -1,    -1,    -1,    91,    92,    57,    58,    -1,
+      -1,    -1,    62,    63,    64,    -1,    66,    67,    -1,    69,
+      70,    71,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,
+      -1,    45,    82,    83,    84,    85,    86,    -1,    -1,    -1,
+      -1,    91,    92,    57,    58,    -1,    -1,    -1,    62,    63,
+      64,    -1,    66,    67,    -1,    69,    70,    71,    -1,    -1,
+      -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    82,    83,
+      84,    85,    86,    -1,    -1,    -1,    -1,    91,    92,    57,
+      58,    -1,    -1,    -1,    62,    63,    64,    -1,    66,    67,
+      -1,    69,    70,    71,    -1,    -1,    -1,    39,    -1,    -1,
+      -1,    -1,    -1,    -1,    82,    83,    84,    85,    86,    -1,
+      -1,    -1,    -1,    91,    92,    57,    58,    -1,    -1,    -1,
+      62,    63,    64,    -1,    66,    67,    -1,    69,    70,    71,
+      -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
+      82,    83,    84,    85,    86,    -1,    -1,    -1,    -1,    91,
+      92,    57,    58,    -1,    -1,    -1,    62,    63,    64,    -1,
+      66,    67,    -1,    69,    70,    71,    -1,    -1,    -1,    39,
+      -1,    -1,    -1,    -1,    -1,    -1,    82,    83,    84,    85,
+      86,    -1,    -1,    -1,    -1,    91,    92,    57,    58,    -1,
+      -1,    -1,    62,    63,    64,    -1,    66,    67,    -1,    69,
+      70,    71,    -1,    -1,    -1,    39,    -1,    -1,    -1,    -1,
+      -1,    -1,    82,    83,    84,    85,    86,    -1,    -1,    -1,
+      -1,    91,    92,    57,    58,    -1,    -1,    -1,    62,    63,
       64,    -1,    66,    67,    -1,    69,    70,    71,    -1,    -1,
-      -1,    -1,    -1,    -1,    47,    -1,    -1,    81,    82,    83,
+      -1,    -1,    45,    -1,    -1,    -1,    -1,    -1,    82,    83,
       84,    85,    86,    -1,    57,    58,    -1,    91,    92,    62,
       63,    64,    -1,    66,    67,    -1,    69,    70,    71,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
+      -1,    -1,    -1,    -1,    -1,    47,    -1,    -1,    81,    82,
       83,    84,    85,    86,    -1,    57,    58,    -1,    91,    92,
       62,    63,    64,    -1,    66,    67,    -1,    69,    70,    71,
-      -1,    -1,    -1,    -1,    -1,    77,    78,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       82,    83,    84,    85,    86,    -1,    57,    58,    -1,    91,
       92,    62,    63,    64,    -1,    66,    67,    -1,    69,    70,
-      71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      81,    82,    83,    84,    85,    86,    -1,    57,    58,    90,
+      71,    -1,    -1,    -1,    -1,    -1,    77,    78,    -1,    -1,
+      -1,    82,    83,    84,    85,    86,    -1,    57,    58,    -1,
       91,    92,    62,    63,    64,    -1,    66,    67,    -1,    69,
       70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    82,    83,    84,    85,    86,    -1,    57,    58,
+      -1,    81,    82,    83,    84,    85,    86,    -1,    57,    58,
       90,    91,    92,    62,    63,    64,    -1,    66,    67,    -1,
       69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    81,    82,    83,    84,    85,    86,    -1,    57,
-      58,    -1,    91,    92,    62,    63,    64,    -1,    66,    67,
+      -1,    -1,    -1,    82,    83,    84,    85,    86,    -1,    57,
+      58,    90,    91,    92,    62,    63,    64,    -1,    66,    67,
       -1,    69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    82,    83,    84,    85,    86,    -1,
+      -1,    -1,    -1,    81,    82,    83,    84,    85,    86,    -1,
       57,    58,    -1,    91,    92,    62,    63,    64,    -1,    66,
       67,    -1,    69,    70,    71,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,    86,
-      -1,    -1,    89,    -1,    91,    92
+      -1,    -1,    -1,    -1,    -1,    82,    83,    84,    85,    86,
+      -1,    57,    58,    -1,    91,    92,    62,    63,    64,    -1,
+      66,    67,    -1,    69,    70,    71,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    82,    -1,    -1,    85,
+      86,    -1,    -1,    89,    -1,    91,    92
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1202,35 +1207,36 @@ static const yytype_uint8 yystos[] =
        0,     1,    11,    12,    13,    14,    16,    17,    18,    19,
       20,    21,    22,    24,    29,    31,    32,    33,    36,    41,
       42,    43,    46,    50,    51,    52,    53,    56,    65,    72,
-      73,    74,    75,    76,    79,    83,    84,    89,    95,    97,
-      98,    99,   100,   101,   108,   109,   110,   115,   116,   117,
-     120,   123,   124,   131,    88,    96,    21,    41,    98,   116,
-     116,   116,    89,   116,   132,    21,    89,   112,    42,    21,
-     118,    30,    35,    37,    38,    39,    40,   116,   121,   122,
-      21,   116,    47,    48,    12,    13,    21,    21,    21,    21,
-     116,    54,   121,   122,    21,   119,   116,   116,   116,   116,
-     116,   116,    21,   116,   116,   116,     0,    96,    89,    81,
-      89,   107,   116,   116,    57,    58,    62,    63,    64,    66,
-      67,    69,    70,    71,    82,    83,    84,    85,    86,    91,
-      92,   116,   116,   132,    93,   132,   132,   132,    93,   116,
-     116,    37,   122,   125,    34,    67,    68,    21,    45,    81,
-     116,    45,    81,    44,   126,    47,   122,    93,    39,    45,
-      39,    45,    39,    45,    39,    45,    77,    78,   127,    90,
-      97,   107,   116,   107,   116,    44,    81,   113,   116,   116,
-     116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
-     116,   116,   116,   116,   116,    90,   116,    90,    21,   116,
-     112,    21,   116,   116,   116,   116,    45,    81,   116,   116,
-     112,   116,    21,   116,   116,   116,   116,   116,   116,   116,
-     116,   116,   116,   112,    90,   113,    90,    96,   112,   116,
-      21,   129,   116,   116,   129,    39,    39,    39,    39,   128,
-     114,    26,    45,   114,    99,   117,    93,    96,    96,   116,
-     116,   116,   116,   129,    96,   100,   113,    45,   116,   113,
-     113,    21,    93,   130,   130,    96,    25,   116,   113,    25,
-      49,   112,    28,    49,   104,   105,   111,    21,   114,   114,
-     130,   113,   114,   114,   103,   104,   106,   111,   112,   105,
-     113,   107,   114,   114,   113,   113,   106,   113,   107,    99,
-      49,   102,    44,    25,   113,    25,    25,    25,    44,   113,
-     112,   113,   112,    25,   114,    99,   100,   113,   113
+      73,    74,    75,    76,    79,    80,    83,    84,    89,    95,
+      97,    98,    99,   100,   101,   108,   109,   110,   115,   116,
+     117,   120,   123,   124,   131,    88,    96,    21,    41,    98,
+     116,   116,   116,    89,   116,   132,    21,    89,   112,    42,
+      21,   118,    30,    35,    37,    38,    39,    40,   116,   121,
+     122,    21,   116,    47,    48,    12,    13,    21,    21,    21,
+      21,   116,    54,   121,   122,    21,   119,   116,   116,   116,
+     116,   116,   116,    21,    89,   116,   116,   116,     0,    96,
+      89,    81,    89,   107,   116,   116,    57,    58,    62,    63,
+      64,    66,    67,    69,    70,    71,    82,    83,    84,    85,
+      86,    91,    92,   116,   116,   132,    93,   132,   132,   132,
+      93,   116,   116,    37,   122,   125,    34,    67,    68,    21,
+      45,    81,   116,    45,    81,    44,   126,    47,   122,    93,
+      39,    45,    39,    45,    39,    45,    39,    45,    77,    78,
+     127,    21,    90,    97,   107,   116,   107,   116,    44,    81,
+     113,   116,   116,   116,   116,   116,   116,   116,   116,   116,
+     116,   116,   116,   116,   116,   116,   116,   116,    90,   116,
+      90,    21,   116,   112,    21,   116,   116,   116,   116,    45,
+      81,   116,   116,   112,   116,    21,   116,   116,   116,   116,
+     116,   116,   116,   116,   116,   116,   112,    90,    93,    90,
+     113,    90,    96,   112,   116,    21,   129,   116,   116,   129,
+      39,    39,    39,    39,   128,   132,   114,    26,    45,   114,
+      99,   117,    93,    96,    96,   116,   116,   116,   116,   129,
+      90,    96,   100,   113,    45,   116,   113,   113,    21,    93,
+     130,   130,    96,    25,   116,   113,    25,    49,   112,    28,
+      49,   104,   105,   111,    21,   114,   114,   130,   113,   114,
+     114,   103,   104,   106,   111,   112,   105,   113,   107,   114,
+     114,   113,   113,   106,   113,   107,    99,    49,   102,    44,
+      25,   113,    25,    25,    25,    44,   113,   112,   113,   112,
+      25,   114,    99,   100,   113,   113
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2671,108 +2677,118 @@ yyreduce:
 
   case 110:
 #line 470 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_open); ;}
+    { g_lingo->codeMe((yyvsp[(3) - (4)].s), 0); ;}
     break;
 
   case 111:
 #line 471 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code2(g_lingo->c_voidpush, g_lingo->c_open); ;}
+    { g_lingo->codeMe((yyvsp[(3) - (6)].s), (yyvsp[(5) - (6)].narg)); ;}
     break;
 
   case 112:
 #line 472 "engines/director/lingo/lingo-gr.y"
-    { Common::String s(*(yyvsp[(1) - (3)].s)); s += '-'; s += *(yyvsp[(2) - (3)].s); g_lingo->codeFunc(&s, (yyvsp[(3) - (3)].narg)); ;}
+    { g_lingo->code1(g_lingo->c_open); ;}
     break;
 
   case 113:
-#line 475 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
+#line 473 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code2(g_lingo->c_voidpush, g_lingo->c_open); ;}
     break;
 
   case 114:
-#line 476 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
+#line 474 "engines/director/lingo/lingo-gr.y"
+    { Common::String s(*(yyvsp[(1) - (3)].s)); s += '-'; s += *(yyvsp[(2) - (3)].s); g_lingo->codeFunc(&s, (yyvsp[(3) - (3)].narg)); ;}
     break;
 
   case 115:
-#line 479 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
+#line 477 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
   case 116:
-#line 480 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
+#line 478 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
     break;
 
   case 117:
-#line 491 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotoloop); ;}
+#line 481 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
   case 118:
-#line 492 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotonext); ;}
+#line 482 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
     break;
 
   case 119:
 #line 493 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotoprevious); ;}
+    { g_lingo->code1(g_lingo->c_gotoloop); ;}
     break;
 
   case 120:
 #line 494 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_gotonext); ;}
+    break;
+
+  case 121:
+#line 495 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_gotoprevious); ;}
+    break;
+
+  case 122:
+#line 496 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(1);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 121:
-#line 497 "engines/director/lingo/lingo-gr.y"
+  case 123:
+#line 499 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(3);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 122:
-#line 500 "engines/director/lingo/lingo-gr.y"
+  case 124:
+#line 502 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(2);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 127:
-#line 513 "engines/director/lingo/lingo-gr.y"
+  case 129:
+#line 515 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_playdone); ;}
     break;
 
-  case 128:
-#line 514 "engines/director/lingo/lingo-gr.y"
+  case 130:
+#line 516 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(1);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 129:
-#line 517 "engines/director/lingo/lingo-gr.y"
+  case 131:
+#line 519 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(3);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 130:
-#line 520 "engines/director/lingo/lingo-gr.y"
+  case 132:
+#line 522 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(2);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 131:
-#line 550 "engines/director/lingo/lingo-gr.y"
+  case 133:
+#line 552 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 132:
-#line 551 "engines/director/lingo/lingo-gr.y"
+  case 134:
+#line 553 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeConst(0); // Push fake value on stack
 			g_lingo->code1(g_lingo->c_procret);
@@ -2780,38 +2796,38 @@ yyreduce:
 			g_lingo->_indef = false; ;}
     break;
 
-  case 133:
-#line 556 "engines/director/lingo/lingo-gr.y"
+  case 135:
+#line 558 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeFactory(*(yyvsp[(2) - (2)].s));
 		;}
     break;
 
-  case 134:
-#line 559 "engines/director/lingo/lingo-gr.y"
+  case 136:
+#line 561 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; ;}
     break;
 
-  case 135:
-#line 560 "engines/director/lingo/lingo-gr.y"
+  case 137:
+#line 562 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->code1(g_lingo->c_procret);
 			g_lingo->define(*(yyvsp[(2) - (8)].s), (yyvsp[(4) - (8)].code), (yyvsp[(5) - (8)].narg) + 1, &g_lingo->_currentFactory);
 			g_lingo->_indef = false; ;}
     break;
 
-  case 136:
-#line 564 "engines/director/lingo/lingo-gr.y"
+  case 138:
+#line 566 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 137:
-#line 565 "engines/director/lingo/lingo-gr.y"
+  case 139:
+#line 567 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_ignoreMe = true; ;}
     break;
 
-  case 138:
-#line 565 "engines/director/lingo/lingo-gr.y"
+  case 140:
+#line 567 "engines/director/lingo/lingo-gr.y"
     {
 				g_lingo->codeConst(0); // Push fake value on stack
 				g_lingo->code1(g_lingo->c_procret);
@@ -2823,33 +2839,33 @@ yyreduce:
 			;}
     break;
 
-  case 139:
-#line 575 "engines/director/lingo/lingo-gr.y"
+  case 141:
+#line 577 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
-  case 140:
-#line 576 "engines/director/lingo/lingo-gr.y"
+  case 142:
+#line 578 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;}
     break;
 
-  case 141:
-#line 577 "engines/director/lingo/lingo-gr.y"
+  case 143:
+#line 579 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
-  case 142:
-#line 578 "engines/director/lingo/lingo-gr.y"
+  case 144:
+#line 580 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;}
     break;
 
-  case 143:
-#line 580 "engines/director/lingo/lingo-gr.y"
+  case 145:
+#line 582 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArgStore(); ;}
     break;
 
-  case 144:
-#line 584 "engines/director/lingo/lingo-gr.y"
+  case 146:
+#line 586 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_call);
 		g_lingo->codeString((yyvsp[(1) - (3)].s)->c_str());
@@ -2858,24 +2874,24 @@ yyreduce:
 		g_lingo->code1(numpar); ;}
     break;
 
-  case 145:
-#line 592 "engines/director/lingo/lingo-gr.y"
+  case 147:
+#line 594 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
-  case 146:
-#line 593 "engines/director/lingo/lingo-gr.y"
+  case 148:
+#line 595 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 1; ;}
     break;
 
-  case 147:
-#line 594 "engines/director/lingo/lingo-gr.y"
+  case 149:
+#line 596 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 2879 "engines/director/lingo/lingo-gr.cpp"
+#line 2895 "engines/director/lingo/lingo-gr.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -3089,6 +3105,6 @@ yyreturn:
 }
 
 
-#line 597 "engines/director/lingo/lingo-gr.y"
+#line 599 "engines/director/lingo/lingo-gr.y"
 
 
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 38bd2ed..60e780d 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -467,6 +467,8 @@ func: tPUT expr				{ g_lingo->code1(g_lingo->c_printtop); }
 		delete $1; }
 	| BLTINARGLIST '(' arglist ')'	{ g_lingo->codeFunc($1, $3); }
 	| BLTINARGLIST arglist	{ g_lingo->codeFunc($1, $2); }
+	| tME '(' ID ')'				{ g_lingo->codeMe($3, 0); }
+	| tME '(' ID ',' arglist ')'	{ g_lingo->codeMe($3, $5); }
 	| tOPEN expr tWITH expr	{ g_lingo->code1(g_lingo->c_open); }
 	| tOPEN expr 			{ g_lingo->code2(g_lingo->c_voidpush, g_lingo->c_open); }
 	| TWOWORDBUILTIN ID arglist	{ Common::String s(*$1); s += '-'; s += *$2; g_lingo->codeFunc(&s, $3); }
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index afc5670..f3c498b 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -1437,6 +1437,12 @@ YY_RULE_SETUP
 		if (g_lingo->_twoWordBuiltins.contains(yytext))
 			return TWOWORDBUILTIN;
 
+		// Special treatment of 'me'. First parameter is method name
+		if (!g_lingo->_currentFactory.empty()) {
+			if (yylval.s->equalsIgnoreCase("me"))
+				return tME;
+		}
+
 		if (g_lingo->_handlers.contains(yytext)) {
 			if (g_lingo->_handlers[yytext]->type == BLTIN && g_lingo->_handlers[yytext]->parens == false) {
 				if (g_lingo->_handlers[yytext]->nargs == 0) {
@@ -1462,41 +1468,41 @@ YY_RULE_SETUP
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 271 "engines/director/lingo/lingo-lex.l"
+#line 277 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.f = atof(yytext); return FLOAT; }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 272 "engines/director/lingo/lingo-lex.l"
+#line 278 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 273 "engines/director/lingo/lingo-lex.l"
+#line 279 "engines/director/lingo/lingo-lex.l"
 { count(); return *yytext; }
 	YY_BREAK
 case 65:
 /* rule 65 can match eol */
 YY_RULE_SETUP
-#line 274 "engines/director/lingo/lingo-lex.l"
+#line 280 "engines/director/lingo/lingo-lex.l"
 { return '\n'; }
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 275 "engines/director/lingo/lingo-lex.l"
+#line 281 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 276 "engines/director/lingo/lingo-lex.l"
+#line 282 "engines/director/lingo/lingo-lex.l"
 
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 278 "engines/director/lingo/lingo-lex.l"
+#line 284 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1500 "engines/director/lingo/lingo-lex.cpp"
+#line 1506 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2496,7 +2502,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 278 "engines/director/lingo/lingo-lex.l"
+#line 284 "engines/director/lingo/lingo-lex.l"
 
 
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index afd90ae..9d9dba7 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -246,6 +246,12 @@ whitespace [\t ]
 		if (g_lingo->_twoWordBuiltins.contains(yytext))
 			return TWOWORDBUILTIN;
 
+		// Special treatment of 'me'. First parameter is method name
+		if (!g_lingo->_currentFactory.empty()) {
+			if (yylval.s->equalsIgnoreCase("me"))
+				return tME;
+		}
+
 		if (g_lingo->_handlers.contains(yytext)) {
 			if (g_lingo->_handlers[yytext]->type == BLTIN && g_lingo->_handlers[yytext]->parens == false) {
 				if (g_lingo->_handlers[yytext]->nargs == 0) {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index f2d315e..a1daeaa 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -221,6 +221,7 @@ public:
 	void codeArg(Common::String *s);
 	void codeArgStore();
 	int codeFunc(Common::String *s, int numpar);
+	int codeMe(Common::String *method, int numpar);
 	int codeFloat(double f);
 	void codeFactory(Common::String &s);
 





More information about the Scummvm-git-logs mailing list