[Scummvm-git-logs] scummvm master -> 08cdd94973234a2ce49e5383304ecdabb6b7e03c

sev- sev at scummvm.org
Fri Jan 13 11:09:36 CET 2017


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

Summary:
08cdd94973 DIRECTOR: Lingo: Implemented grammar for arrays


Commit: 08cdd94973234a2ce49e5383304ecdabb6b7e03c
    https://github.com/scummvm/scummvm/commit/08cdd94973234a2ce49e5383304ecdabb6b7e03c
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-01-13T09:51:26+01:00

Commit Message:
DIRECTOR: Lingo: Implemented grammar for arrays

Changed paths:
  A engines/director/lingo/tests/arrays.lingo
    engines/director/lingo/lingo-code.cpp
    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-code.cpp b/engines/director/lingo/lingo-code.cpp
index 82c7d27..f55c694 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -55,6 +55,7 @@ static struct FuncDescr {
 } funcDescr[] = {
 	{ 0,					"STOP",			"" },
 	{ Lingo::c_xpop,		"c_xpop",		"" },
+	{ Lingo::c_arraypush,	"c_arraypush",		"i" },
 	{ Lingo::c_printtop,	"c_printtop",	"" },
 	{ Lingo::c_constpush,	"c_constpush",	"i" },
 	{ Lingo::c_voidpush,	"c_voidpush",	"" },
@@ -233,6 +234,21 @@ void Lingo::c_symbolpush() {
 	g_lingo->push(Datum(new Common::String(s)));
 }
 
+void Lingo::c_arraypush() {
+	Datum d;
+	inst v = (*g_lingo->_currentScript)[g_lingo->_pc++];
+	int arraySize = READ_UINT32(&v);
+
+	warning("STUB: c_arraypush()");
+
+	for (int i = 0; i < arraySize; i++)
+		g_lingo->pop();
+
+	d.u.i = arraySize;
+	d.type = INT;
+	g_lingo->push(d);
+}
+
 void Lingo::c_varpush() {
 	Common::String name((char *)&(*g_lingo->_currentScript)[g_lingo->_pc]);
 	Datum d;
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 1d72aec..b30bf03 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -272,6 +272,15 @@ int Lingo::codeConst(int val) {
 	return res;
 }
 
+int Lingo::codeArray(int arraySize) {
+	int res = g_lingo->code1(g_lingo->c_arraypush);
+	inst i = 0;
+	WRITE_UINT32(&i, arraySize);
+	g_lingo->code1(i);
+
+	return res;
+}
+
 void Lingo::codeArg(Common::String *s) {
 	_argstack.push_back(s);
 }
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 89e64cc..03ac16c 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  108
+#define YYFINAL  110
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1596
+#define YYLAST   1648
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  94
+#define YYNTOKENS  96
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  39
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  149
+#define YYNRULES  150
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  326
+#define YYNSTATES  329
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -545,12 +545,12 @@ static const yytype_uint8 yytranslate[] =
       88,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,    87,    82,     2,
-      89,    90,    85,    83,    93,    84,     2,    86,     2,     2,
+      89,    90,    85,    83,    95,    84,     2,    86,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       92,    81,    91,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,    93,     2,    94,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -590,76 +590,77 @@ static const yytype_uint16 yyprhs[] =
      223,   225,   226,   227,   228,   231,   234,   238,   240,   242,
      244,   246,   248,   253,   255,   257,   260,   262,   266,   270,
      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,   432,
-     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
+     313,   317,   321,   325,   329,   333,   336,   339,   343,   347,
+     352,   357,   362,   369,   374,   381,   386,   393,   398,   405,
+     408,   410,   412,   415,   417,   420,   423,   426,   429,   431,
+     436,   439,   444,   451,   456,   459,   463,   465,   469,   471,
+     475,   478,   481,   484,   487,   491,   494,   497,   499,   503,
+     506,   509,   512,   516,   519,   520,   529,   532,   533,   542,
+     543,   544,   555,   556,   558,   562,   567,   568,   572,   573,
+     575
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-      95,     0,    -1,    95,    96,    97,    -1,    97,    -1,     1,
-      96,    -1,    88,    -1,    -1,   124,    -1,   117,    -1,   131,
-      -1,    98,    -1,   100,    -1,    41,   116,    34,    21,    -1,
-      41,   116,    67,   116,    -1,    41,   116,    68,   116,    -1,
-      43,    21,    81,   116,    -1,    43,    12,    81,   116,    -1,
-      43,    13,   116,    81,   116,    -1,    43,    21,    45,   116,
-      -1,    43,    12,    45,   116,    -1,    43,    13,   116,    45,
-     116,    -1,   116,    -1,   117,    -1,    99,    -1,   101,    -1,
-     108,    89,   107,    90,   114,   113,    25,    -1,   109,    81,
-     116,   113,    45,   116,   113,   114,   113,    25,    -1,   109,
-      81,   116,   113,    26,    45,   116,   113,   114,   113,    25,
-      -1,   115,   116,   113,    -1,   110,   107,    44,    96,   114,
-     113,    25,    -1,   110,   107,    44,    96,   114,   113,    49,
-     114,   113,    25,    -1,   110,   107,    44,    96,   114,   113,
-     112,   103,   113,    25,    -1,   110,   107,    44,   112,    99,
-     113,    -1,   110,   107,    44,   112,    99,   113,    49,   112,
-      99,   113,    -1,   110,   107,    44,   112,    99,   113,   104,
-     113,   102,   113,    -1,    -1,    49,   112,    99,    -1,   103,
-     106,    -1,   106,    -1,   104,   105,    -1,   105,    -1,   111,
-     107,    44,   112,   100,   113,    -1,   104,    -1,   111,   107,
-      44,   114,   113,    -1,   116,    -1,   116,    81,   116,    -1,
-      89,   107,    90,    -1,    42,    48,    -1,    42,    47,    21,
-      -1,    33,    -1,    28,    -1,    -1,    -1,    -1,   114,    96,
-      -1,   114,   100,    -1,    46,    21,    44,    -1,    11,    -1,
+      97,     0,    -1,    97,    98,    99,    -1,    99,    -1,     1,
+      98,    -1,    88,    -1,    -1,   126,    -1,   119,    -1,   133,
+      -1,   100,    -1,   102,    -1,    41,   118,    34,    21,    -1,
+      41,   118,    67,   118,    -1,    41,   118,    68,   118,    -1,
+      43,    21,    81,   118,    -1,    43,    12,    81,   118,    -1,
+      43,    13,   118,    81,   118,    -1,    43,    21,    45,   118,
+      -1,    43,    12,    45,   118,    -1,    43,    13,   118,    45,
+     118,    -1,   118,    -1,   119,    -1,   101,    -1,   103,    -1,
+     110,    89,   109,    90,   116,   115,    25,    -1,   111,    81,
+     118,   115,    45,   118,   115,   116,   115,    25,    -1,   111,
+      81,   118,   115,    26,    45,   118,   115,   116,   115,    25,
+      -1,   117,   118,   115,    -1,   112,   109,    44,    98,   116,
+     115,    25,    -1,   112,   109,    44,    98,   116,   115,    49,
+     116,   115,    25,    -1,   112,   109,    44,    98,   116,   115,
+     114,   105,   115,    25,    -1,   112,   109,    44,   114,   101,
+     115,    -1,   112,   109,    44,   114,   101,   115,    49,   114,
+     101,   115,    -1,   112,   109,    44,   114,   101,   115,   106,
+     115,   104,   115,    -1,    -1,    49,   114,   101,    -1,   105,
+     108,    -1,   108,    -1,   106,   107,    -1,   107,    -1,   113,
+     109,    44,   114,   102,   115,    -1,   106,    -1,   113,   109,
+      44,   116,   115,    -1,   118,    -1,   118,    81,   118,    -1,
+      89,   109,    90,    -1,    42,    48,    -1,    42,    47,    21,
+      -1,    33,    -1,    28,    -1,    -1,    -1,    -1,   116,    98,
+      -1,   116,   102,    -1,    46,    21,    44,    -1,    11,    -1,
       14,    -1,    24,    -1,    22,    -1,    16,    -1,    21,    89,
-     132,    90,    -1,    21,    -1,    12,    -1,    13,   116,    -1,
-      98,    -1,   116,    83,   116,    -1,   116,    84,   116,    -1,
-     116,    85,   116,    -1,   116,    86,   116,    -1,   116,    66,
-     116,    -1,   116,    91,   116,    -1,   116,    92,   116,    -1,
-     116,    62,   116,    -1,   116,    57,   116,    -1,   116,    58,
-     116,    -1,   116,    63,   116,    -1,   116,    64,   116,    -1,
-      65,   116,    -1,   116,    82,   116,    -1,   116,    67,   116,
-      -1,   116,    69,   116,    -1,   116,    70,   116,    -1,   116,
-      71,   116,    -1,    83,   116,    -1,    84,   116,    -1,    89,
-     116,    90,    -1,    76,   116,    77,   116,    -1,    76,   116,
-      78,   116,    -1,    72,   116,    39,   116,    -1,    72,   116,
-      45,   116,    39,   116,    -1,    73,   116,    39,   116,    -1,
-      73,   116,    45,   116,    39,   116,    -1,    74,   116,    39,
-     116,    -1,    74,   116,    45,   116,    39,   116,    -1,    75,
-     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,    89,   132,
-      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
+     134,    90,    -1,    21,    -1,    12,    -1,    13,   118,    -1,
+     100,    -1,   118,    83,   118,    -1,   118,    84,   118,    -1,
+     118,    85,   118,    -1,   118,    86,   118,    -1,   118,    66,
+     118,    -1,   118,    91,   118,    -1,   118,    92,   118,    -1,
+     118,    62,   118,    -1,   118,    57,   118,    -1,   118,    58,
+     118,    -1,   118,    63,   118,    -1,   118,    64,   118,    -1,
+      65,   118,    -1,   118,    82,   118,    -1,   118,    67,   118,
+      -1,   118,    69,   118,    -1,   118,    70,   118,    -1,   118,
+      71,   118,    -1,    83,   118,    -1,    84,   118,    -1,    89,
+     118,    90,    -1,    93,   134,    94,    -1,    76,   118,    77,
+     118,    -1,    76,   118,    78,   118,    -1,    72,   118,    39,
+     118,    -1,    72,   118,    45,   118,    39,   118,    -1,    73,
+     118,    39,   118,    -1,    73,   118,    45,   118,    39,   118,
+      -1,    74,   118,    39,   118,    -1,    74,   118,    45,   118,
+      39,   118,    -1,    75,   118,    39,   118,    -1,    75,   118,
+      45,   118,    39,   118,    -1,    41,   118,    -1,   122,    -1,
+     125,    -1,    29,    42,    -1,    29,    -1,    31,   120,    -1,
+      56,   121,    -1,    18,   118,    -1,    17,   118,    -1,    17,
+      -1,    19,    89,   134,    90,    -1,    19,   134,    -1,    80,
+      89,    21,    90,    -1,    80,    89,    21,    95,   134,    90,
+      -1,    52,   118,    47,   118,    -1,    52,   118,    -1,    20,
+      21,   134,    -1,    21,    -1,   120,    95,    21,    -1,    21,
+      -1,   121,    95,    21,    -1,    32,    35,    -1,    32,    38,
+      -1,    32,    40,    -1,    32,   123,    -1,    32,   123,   124,
+      -1,    32,   124,    -1,    30,   118,    -1,   118,    -1,    39,
+      37,   118,    -1,    37,   118,    -1,    53,    54,    -1,    53,
+     123,    -1,    53,   123,   124,    -1,    53,   124,    -1,    -1,
+      36,    21,   127,   114,   131,    98,   132,   116,    -1,    50,
+      21,    -1,    -1,    51,    21,   128,   114,   131,    98,   132,
+     116,    -1,    -1,    -1,    79,    21,   129,   114,   130,   131,
+      98,   132,   116,    25,    -1,    -1,    21,    -1,   131,    95,
+      21,    -1,   131,    98,    95,    21,    -1,    -1,    21,   114,
+     134,    -1,    -1,   118,    -1,   134,    95,   118,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -674,12 +675,13 @@ static const yytype_uint16 yyrline[] =
      391,   394,   397,   400,   404,   411,   417,   418,   419,   420,
      421,   422,   423,   424,   425,   426,   427,   428,   429,   430,
      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,   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
+     441,   442,   443,   444,   445,   446,   447,   448,   449,   452,
+     453,   454,   455,   456,   458,   459,   460,   463,   466,   469,
+     470,   471,   472,   473,   474,   475,   478,   479,   482,   483,
+     494,   495,   496,   497,   500,   503,   508,   509,   512,   513,
+     516,   517,   520,   523,   553,   553,   559,   562,   562,   567,
+     568,   567,   578,   579,   580,   581,   583,   587,   595,   596,
+     597
 };
 #endif
 
@@ -700,14 +702,14 @@ static const char *const yytname[] =
   "tEQ", "tNEQ", "tAND", "tOR", "tNOT", "tMOD", "tAFTER", "tBEFORE",
   "tCONCAT", "tCONTAINS", "tSTARTS", "tCHAR", "tITEM", "tLINE", "tWORD",
   "tSPRITE", "tINTERSECTS", "tWITHIN", "tON", "tME", "'='", "'&'", "'+'",
-  "'-'", "'*'", "'/'", "'%'", "'\\n'", "'('", "')'", "'>'", "'<'", "','",
-  "$accept", "program", "nl", "programline", "asgn", "stmtoneliner",
-  "stmt", "ifstmt", "elsestmtoneliner", "elseifstmt", "elseifstmtoneliner",
-  "elseifstmtoneliner1", "elseifstmt1", "cond", "repeatwhile",
-  "repeatwith", "if", "elseif", "begin", "end", "stmtlist", "when", "expr",
-  "func", "globallist", "instancelist", "gotofunc", "gotoframe",
-  "gotomovie", "playfunc", "defn", "@1", "@2", "@3", "@4", "argdef",
-  "argstore", "macro", "arglist", 0
+  "'-'", "'*'", "'/'", "'%'", "'\\n'", "'('", "')'", "'>'", "'<'", "'['",
+  "']'", "','", "$accept", "program", "nl", "programline", "asgn",
+  "stmtoneliner", "stmt", "ifstmt", "elsestmtoneliner", "elseifstmt",
+  "elseifstmtoneliner", "elseifstmtoneliner1", "elseifstmt1", "cond",
+  "repeatwhile", "repeatwith", "if", "elseif", "begin", "end", "stmtlist",
+  "when", "expr", "func", "globallist", "instancelist", "gotofunc",
+  "gotoframe", "gotomovie", "playfunc", "defn", "@1", "@2", "@3", "@4",
+  "argdef", "argstore", "macro", "arglist", 0
 };
 #endif
 
@@ -725,28 +727,29 @@ static const yytype_uint16 yytoknum[] =
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
      335,    61,    38,    43,    45,    42,    47,    37,    10,    40,
-      41,    62,    60,    44
+      41,    62,    60,    91,    93,    44
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    94,    95,    95,    95,    96,    97,    97,    97,    97,
-      97,    97,    98,    98,    98,    98,    98,    98,    98,    98,
-      98,    99,    99,   100,   100,   100,   100,   100,   100,   101,
-     101,   101,   101,   101,   101,   102,   102,   103,   103,   104,
-     104,   105,   106,   106,   107,   107,   107,   108,   109,   110,
-     111,   112,   113,   114,   114,   114,   115,   116,   116,   116,
-     116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
-     116,   116,   116,   116,   116,   116,   116,   116,   116,   116,
-     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,   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
+       0,    96,    97,    97,    97,    98,    99,    99,    99,    99,
+      99,    99,   100,   100,   100,   100,   100,   100,   100,   100,
+     100,   101,   101,   102,   102,   102,   102,   102,   102,   103,
+     103,   103,   103,   103,   103,   104,   104,   105,   105,   106,
+     106,   107,   108,   108,   109,   109,   109,   110,   111,   112,
+     113,   114,   115,   116,   116,   116,   117,   118,   118,   118,
+     118,   118,   118,   118,   118,   118,   118,   118,   118,   118,
+     118,   118,   118,   118,   118,   118,   118,   118,   118,   118,
+     118,   118,   118,   118,   118,   118,   118,   118,   118,   118,
+     118,   118,   118,   118,   118,   118,   118,   118,   118,   119,
+     119,   119,   119,   119,   119,   119,   119,   119,   119,   119,
+     119,   119,   119,   119,   119,   119,   120,   120,   121,   121,
+     122,   122,   122,   122,   122,   122,   123,   123,   124,   124,
+     125,   125,   125,   125,   127,   126,   126,   128,   126,   129,
+     130,   126,   131,   131,   131,   131,   132,   133,   134,   134,
+     134
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -760,13 +763,14 @@ static const yytype_uint8 yyr2[] =
        1,     0,     0,     0,     2,     2,     3,     1,     1,     1,
        1,     1,     4,     1,     1,     2,     1,     3,     3,     3,
        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,     4,     2,
-       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
+       3,     3,     3,     3,     3,     2,     2,     3,     3,     4,
+       4,     4,     6,     4,     6,     4,     6,     4,     6,     2,
+       1,     1,     2,     1,     2,     2,     2,     2,     1,     4,
+       2,     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
@@ -774,97 +778,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,   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,     0,
-       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,    57,    64,     0,    58,    61,   108,     0,   148,
+       0,    51,    60,    59,   103,     0,     0,    49,     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,   148,
+       0,     3,    66,    23,    11,    24,     0,     0,     0,     0,
+      21,     8,   100,   101,     7,     9,     5,     4,    63,     0,
+      66,    65,   107,   106,   148,   149,   110,   148,   148,   148,
+     102,   116,   104,     0,   120,     0,   121,     0,   122,   127,
+     123,   125,   134,    99,     0,    47,     0,     0,     0,     0,
+     136,   137,   114,   130,   131,   133,   118,   105,    79,     0,
+       0,     0,     0,     0,   139,     0,    85,    86,     0,     0,
+       1,     6,     0,     0,     0,     0,    44,    52,     0,     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
+       0,     0,     0,     0,     0,     0,   149,     0,     0,   115,
+       0,   147,     0,   126,   129,     0,   124,    51,     0,     0,
+       0,    48,     0,     0,     0,     0,     0,    56,    51,     0,
+     132,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    51,     0,    87,    88,     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,   109,   150,    62,   117,   128,   142,    12,    13,    14,
+      19,    16,     0,     0,    18,    15,   142,   113,   119,    91,
+       0,    93,     0,    95,     0,    97,     0,    89,    90,   140,
+     111,   148,    53,     0,    46,    53,     0,    45,   143,     0,
+      20,    17,     0,     0,     0,     0,     0,   142,     0,    52,
+       0,     0,    52,    52,    22,     0,   146,   146,    92,    94,
+      96,    98,     0,   112,    54,    55,     0,     0,    52,    51,
+      32,   144,     0,    53,    53,   146,    25,    52,    53,    29,
+      53,     0,    50,    51,    52,    40,     0,   145,   135,   138,
+      53,    53,    52,    52,    52,    42,    38,     0,     0,    39,
+      35,     0,     0,    52,     0,     0,    37,     0,     0,    52,
+      51,    52,    51,   141,     0,    26,    30,    31,    51,    33,
+       0,    34,     0,    27,    52,    36,    52,    43,    41
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -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
+      -1,    40,   264,    41,    60,    43,   265,    45,   311,   294,
+     295,   285,   296,   115,    46,    47,    48,   286,   322,   183,
+     249,    49,    50,   254,    72,    97,    52,    80,    81,    53,
+      54,   147,   158,   172,   247,   239,   273,    55,    66
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -256
+#define YYPACT_NINF -266
 static const yytype_int16 yypact[] =
 {
-     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
+     317,   -63,  -266,  -266,   908,  -266,  -266,   908,   908,   946,
+      18,  1546,  -266,  -266,     6,    29,   806,  -266,    39,   908,
+      10,    43,    46,    47,    58,   908,   872,    59,   908,   908,
+     908,   908,   908,   908,    61,    -4,   908,   908,   908,   908,
+      11,  -266,    12,  -266,  -266,  -266,    -3,     7,   982,   908,
+    1515,  -266,  -266,  -266,  -266,  -266,  -266,  -266,     3,   908,
+    -266,  1515,  1515,  1515,   908,  1515,    13,   908,   908,   908,
+    -266,  -266,    14,   908,  -266,   908,  -266,    69,  -266,  1515,
+     -11,  -266,  -266,  1010,    86,  -266,   -29,   908,   -28,    68,
+    -266,  -266,  1360,  -266,   -11,  -266,  -266,    22,   -49,  1046,
+    1082,  1118,  1154,  1391,  -266,    97,   -49,   -49,  1453,   -19,
+    -266,   400,   982,   908,   982,    75,  1484,  1515,   908,   908,
+     908,   908,   908,   908,   908,   908,   908,   908,   908,   908,
+     908,   908,   908,   908,   908,  1010,  1453,   -36,   908,    13,
+     -24,    13,    99,  1515,  1515,   908,  -266,  -266,   100,   908,
+     908,  -266,   908,   908,  1329,   908,   908,  -266,  -266,   908,
+    -266,   101,   908,   908,   908,   908,   908,   908,   908,   908,
+     908,   908,  -266,   -12,  -266,  -266,  -266,    33,  1515,    35,
+    1422,   -63,   908,  -266,   768,   768,   768,   -49,   -49,   -49,
+    1515,  1515,   768,   768,  1556,    78,    78,   -49,   -49,  1515,
+    1515,  -266,  1515,  -266,  -266,  1515,   105,  -266,  1515,  1515,
+    1515,  1515,   908,   908,  1515,  1515,   105,  1515,  -266,  1515,
+    1190,  1515,  1226,  1515,  1262,  1515,  1298,  1515,  1515,  -266,
+    -266,   908,  -266,    -5,  -266,  -266,   732,  1515,  -266,   -64,
+    1515,  1515,   -64,   908,   908,   908,   908,   105,    15,   566,
+      82,   908,   566,  -266,  -266,   107,    36,    36,  1515,  1515,
+    1515,  1515,   -64,  -266,  -266,  -266,   110,   908,  1515,    -2,
+     -15,  -266,   109,  -266,  -266,    36,  -266,  1515,  -266,  -266,
+    -266,   108,  -266,  -266,   108,  -266,   982,  -266,   566,   566,
+    -266,  -266,   566,   566,   108,   108,  -266,   982,   732,  -266,
+      90,   102,   483,   566,   118,   124,  -266,   125,   111,  -266,
+    -266,  -266,  -266,  -266,   128,  -266,  -266,  -266,   -18,  -266,
+     732,  -266,   649,  -266,   566,  -266,  -266,  -266,  -266
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -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
+    -266,  -266,     1,    45,     4,  -233,     0,  -266,  -266,  -266,
+    -116,  -265,  -137,   -85,  -266,  -266,  -266,  -259,   -10,   -27,
+    -229,  -266,    65,     5,  -266,  -266,  -266,   132,   -17,  -266,
+    -266,  -266,  -266,  -266,  -266,  -201,  -243,  -266,   -31
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -874,281 +878,283 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -64
 static const yytype_int16 yytable[] =
 {
-      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,
+      44,    69,    57,   253,    42,    51,   252,   -53,   109,    95,
+     -53,   110,   -10,   282,   274,   242,   152,   155,   124,   299,
+     125,   250,   297,   279,    56,    56,    75,   177,    77,   179,
+     299,   255,   290,   137,   283,   297,   139,   140,   141,    67,
+     251,   111,   133,   134,   288,   289,   262,   280,    70,   292,
+      71,   293,   153,   156,   201,    86,    87,    84,    85,   138,
+      82,   302,   303,   146,    88,   309,   203,    89,    90,    61,
+     -53,   138,    62,    63,    65,   175,   138,   160,   230,    91,
+      96,    79,   104,   231,    83,   105,   112,   325,   113,   324,
+      92,    79,    68,    98,    99,   100,   101,   102,   103,    56,
+     -10,   106,   107,   108,    65,   263,   145,   151,   138,   142,
+     138,    44,   157,   116,   117,    42,    51,   161,   173,   181,
+     204,   207,   218,   232,   135,   234,   238,   267,   271,   136,
+     287,   272,    65,    65,    65,   276,   282,   206,   143,   310,
+     144,   121,   122,   315,   123,   124,   312,   125,   216,   316,
+     317,   233,   154,   323,   284,   318,   176,   306,    94,     0,
+       0,     0,   229,   131,   132,     0,     0,     0,     0,   133,
+     134,   236,     0,     0,     0,     0,     0,   116,   178,   180,
+       0,     0,   235,   184,   185,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   195,   196,   197,   198,   199,   200,
+     248,   301,     0,   202,     0,     0,     0,     0,     0,     0,
+     205,     0,   308,     0,   208,   209,     0,   210,   211,     0,
+     214,   215,   266,     0,   217,   269,   270,   219,   220,   221,
+     222,   223,   224,   225,   226,   227,   228,     0,     0,     0,
+     256,   278,     0,   257,     0,     0,     0,   237,     0,     0,
+     291,     0,     0,     0,     0,     0,     0,   300,     0,   281,
+       0,     0,     0,   275,     0,   304,   305,   307,     0,     0,
+       0,     0,     0,   298,     0,     0,   314,   240,   241,     0,
+       0,     0,   319,     0,   321,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    65,   327,     0,   328,
+     320,     0,     0,     0,     0,     0,     0,     0,   258,   259,
+     260,   261,     0,     0,     0,     0,   268,    -6,     1,     0,
+       0,     0,   326,     0,     0,     0,     0,     0,     2,     3,
+       4,     5,   277,     6,     7,     8,     9,    10,    11,    12,
+       0,    13,     0,     0,     0,     0,    14,     0,    15,    16,
+      17,   116,     0,    18,     0,     0,     0,     0,    19,    20,
+      21,     0,   116,    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,    35,     0,     0,
+      36,    37,     0,     0,     0,    -6,    38,     0,     0,     0,
+      39,     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,
+      35,     0,     0,    36,    37,     0,     0,     0,     0,    38,
+       0,     0,     0,    39,     2,     3,     4,     5,     0,     6,
+       7,     8,     9,    10,    58,    12,     0,    13,   313,     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,    56,    38,     0,     0,     0,    39,     2,     3,     4,
+       5,     0,     6,     7,     8,     9,    10,    58,    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,     0,     0,     0,    56,    38,     0,     0,     0,    39,
        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,
+      58,    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,    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,    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,    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,    29,    30,    31,    32,    33,     0,     0,     0,    35,
+       0,     0,    36,    37,     0,     0,     0,     0,    38,     0,
+       0,     0,    39,     2,     3,     4,     5,     0,     6,     7,
+       8,     9,    10,    58,    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,     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,     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,
-     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
+       0,     0,    35,     0,     0,    36,    37,     2,     3,     4,
+       5,    38,     6,     0,     0,    39,     0,    58,    12,     0,
+      13,   121,   122,     0,   123,   124,    73,   125,     0,     0,
+       0,    74,     0,    75,    76,    77,    78,    59,     0,    21,
+     128,   129,   130,   131,   132,     0,     0,     0,     0,   133,
+     134,     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,    58,    12,    38,    13,     0,     0,    39,
+       0,     0,    73,     0,     0,     0,     0,     0,     0,    75,
+       0,    77,     0,    59,     0,    21,     0,     0,     0,     2,
+       3,     4,     5,     0,     6,     0,    93,     0,     0,    58,
+      12,     0,    13,     0,     0,     0,     0,    28,     0,     0,
+       0,     0,     0,     0,    29,    30,    31,    32,    33,    59,
+       0,    21,     0,     0,     0,    36,    37,     2,     3,     4,
+       5,    38,     6,     0,     0,    39,     0,    58,    12,     0,
+      13,     0,     0,    28,     0,     0,     0,     0,     0,     0,
+      29,    30,    31,    32,    33,     0,     0,    59,     0,    21,
+       0,    36,    37,     2,     3,     4,     5,    38,     6,     0,
+       0,    39,     0,    58,    12,     0,    13,     0,     0,     0,
+       0,    28,     0,     0,     0,     0,     0,     0,    29,    30,
+      31,    32,    33,    59,     0,    21,     0,     0,     0,    36,
+      37,     0,     0,     0,     0,    64,     0,     0,     0,    39,
+       0,     0,     0,     0,   148,     0,     0,    28,     0,     0,
+       0,     0,     0,     0,    29,    30,    31,    32,    33,     0,
+       0,     0,     0,     0,     0,    36,    37,   118,   119,     0,
+       0,   114,   120,   121,   122,    39,   123,   149,   150,   125,
+     126,   127,     0,     0,     0,   162,     0,     0,     0,     0,
+       0,   163,   128,   129,   130,   131,   132,     0,     0,     0,
+       0,   133,   134,   118,   119,     0,     0,     0,   120,   121,
+     122,     0,   123,   124,     0,   125,   126,   127,     0,     0,
+       0,   164,     0,     0,     0,     0,     0,   165,   128,   129,
+     130,   131,   132,     0,     0,     0,     0,   133,   134,   118,
+     119,     0,     0,     0,   120,   121,   122,     0,   123,   124,
+       0,   125,   126,   127,     0,     0,     0,   166,     0,     0,
+       0,     0,     0,   167,   128,   129,   130,   131,   132,     0,
+       0,     0,     0,   133,   134,   118,   119,     0,     0,     0,
+     120,   121,   122,     0,   123,   124,     0,   125,   126,   127,
+       0,     0,     0,   168,     0,     0,     0,     0,     0,   169,
+     128,   129,   130,   131,   132,     0,     0,     0,     0,   133,
+     134,   118,   119,     0,     0,     0,   120,   121,   122,     0,
+     123,   124,     0,   125,   126,   127,     0,     0,     0,   243,
+       0,     0,     0,     0,     0,     0,   128,   129,   130,   131,
+     132,     0,     0,     0,     0,   133,   134,   118,   119,     0,
+       0,     0,   120,   121,   122,     0,   123,   124,     0,   125,
+     126,   127,     0,     0,     0,   244,     0,     0,     0,     0,
+       0,     0,   128,   129,   130,   131,   132,     0,     0,     0,
+       0,   133,   134,   118,   119,     0,     0,     0,   120,   121,
+     122,     0,   123,   124,     0,   125,   126,   127,     0,     0,
+       0,   245,     0,     0,     0,     0,     0,     0,   128,   129,
+     130,   131,   132,     0,     0,     0,     0,   133,   134,   118,
+     119,     0,     0,     0,   120,   121,   122,     0,   123,   124,
+       0,   125,   126,   127,     0,     0,     0,   246,     0,     0,
+       0,     0,     0,     0,   128,   129,   130,   131,   132,     0,
+       0,     0,     0,   133,   134,   118,   119,     0,     0,     0,
+     120,   121,   122,     0,   123,   124,     0,   125,   126,   127,
+       0,     0,     0,     0,   212,     0,     0,     0,     0,     0,
+     128,   129,   130,   131,   132,     0,   118,   119,     0,   133,
+     134,   120,   121,   122,     0,   123,   124,     0,   125,   126,
+     127,     0,     0,     0,     0,     0,     0,   159,     0,     0,
+     213,   128,   129,   130,   131,   132,     0,   118,   119,     0,
+     133,   134,   120,   121,   122,     0,   123,   124,     0,   125,
+     126,   127,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   128,   129,   130,   131,   132,     0,   118,   119,
+       0,   133,   134,   120,   121,   122,     0,   123,   124,     0,
+     125,   126,   127,     0,     0,     0,     0,     0,   170,   171,
+       0,     0,     0,   128,   129,   130,   131,   132,     0,   118,
+     119,     0,   133,   134,   120,   121,   122,     0,   123,   124,
+       0,   125,   126,   127,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   182,   128,   129,   130,   131,   132,     0,
+     118,   119,   174,   133,   134,   120,   121,   122,     0,   123,
+     124,     0,   125,   126,   127,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   128,   129,   130,   131,   132,
+       0,   118,   119,   174,   133,   134,   120,   121,   122,     0,
+     123,   124,     0,   125,   126,   127,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   182,   128,   129,   130,   131,
+     132,     0,   118,   119,     0,   133,   134,   120,   121,   122,
+       0,   123,   124,     0,   125,   126,   127,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   128,   129,   130,
+     131,   132,     0,   -63,   -63,     0,   133,   134,   -63,   -63,
+     -63,     0,   -63,   -63,     0,   -63,   -63,   -63,     0,   121,
+     122,     0,   123,   124,     0,   125,     0,     0,   -63,     0,
+       0,   -63,   -63,     0,     0,    68,     0,   -63,   -63,   129,
+     130,   131,   132,     0,     0,     0,     0,   133,   134
 };
 
 static const yytype_int16 yycheck[] =
 {
-       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,
+       0,    11,     1,   236,     0,     0,   235,    25,    39,    26,
+      28,     0,     0,    28,   257,   216,    45,    45,    67,   284,
+      69,    26,   281,    25,    88,    88,    37,   112,    39,   114,
+     295,    95,   275,    64,    49,   294,    67,    68,    69,    21,
+      45,    40,    91,    92,   273,   274,   247,    49,    42,   278,
+      21,   280,    81,    81,    90,    12,    13,    47,    48,    95,
+      21,   290,   291,    80,    21,   298,    90,    21,    21,     4,
+      88,    95,     7,     8,     9,    94,    95,    94,    90,    21,
+      21,    16,    21,    95,    19,    89,    89,   320,    81,   318,
+      25,    26,    89,    28,    29,    30,    31,    32,    33,    88,
+      88,    36,    37,    38,    39,    90,    37,    21,    95,    95,
+      95,   111,    44,    48,    49,   111,   111,    95,    21,    44,
+      21,    21,    21,    90,    59,    90,    21,    45,    21,    64,
+      21,    95,    67,    68,    69,    25,    28,   147,    73,    49,
+      75,    63,    64,    25,    66,    67,    44,    69,   158,    25,
+      25,   178,    87,    25,   270,    44,   111,   294,    26,    -1,
+      -1,    -1,   172,    85,    86,    -1,    -1,    -1,    -1,    91,
+      92,   181,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
+      -1,    -1,   181,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     231,   286,    -1,   138,    -1,    -1,    -1,    -1,    -1,    -1,
+     145,    -1,   297,    -1,   149,   150,    -1,   152,   153,    -1,
+     155,   156,   249,    -1,   159,   252,   253,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,    -1,    -1,    -1,
+     239,   268,    -1,   242,    -1,    -1,    -1,   182,    -1,    -1,
+     277,    -1,    -1,    -1,    -1,    -1,    -1,   284,    -1,   269,
+      -1,    -1,    -1,   262,    -1,   292,   293,   294,    -1,    -1,
+      -1,    -1,    -1,   283,    -1,    -1,   303,   212,   213,    -1,
+      -1,    -1,   309,    -1,   311,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   231,   324,    -1,   326,
+     310,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   243,   244,
+     245,   246,    -1,    -1,    -1,    -1,   251,     0,     1,    -1,
+      -1,    -1,   322,    -1,    -1,    -1,    -1,    -1,    11,    12,
+      13,    14,   267,    16,    17,    18,    19,    20,    21,    22,
+      -1,    24,    -1,    -1,    -1,    -1,    29,    -1,    31,    32,
+      33,   286,    -1,    36,    -1,    -1,    -1,    -1,    41,    42,
+      43,    -1,   297,    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,    80,    -1,    -1,
+      83,    84,    -1,    -1,    -1,    88,    89,    -1,    -1,    -1,
+      93,    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,
+      80,    -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    89,
+      -1,    -1,    -1,    93,    11,    12,    13,    14,    -1,    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,    -1,    -1,    -1,    93,    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,    -1,    -1,    -1,    88,    89,    -1,    -1,    -1,    93,
       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,
+      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,    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,    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,    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,    72,    73,    74,    75,    76,    -1,    -1,    -1,    80,
+      -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    89,    -1,
+      -1,    -1,    93,    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,    -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,    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,    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,
+      -1,    -1,    80,    -1,    -1,    83,    84,    11,    12,    13,
+      14,    89,    16,    -1,    -1,    93,    -1,    21,    22,    -1,
+      24,    63,    64,    -1,    66,    67,    30,    69,    -1,    -1,
+      -1,    35,    -1,    37,    38,    39,    40,    41,    -1,    43,
       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,
+      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,    93,
+      -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,    93,    -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,    93,    -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,    93,
+      -1,    -1,    -1,    -1,    34,    -1,    -1,    65,    -1,    -1,
+      -1,    -1,    -1,    -1,    72,    73,    74,    75,    76,    -1,
+      -1,    -1,    -1,    -1,    -1,    83,    84,    57,    58,    -1,
+      -1,    89,    62,    63,    64,    93,    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,
@@ -1157,10 +1163,10 @@ static const yytype_int16 yycheck[] =
       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,    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,
+      -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,
@@ -1171,33 +1177,41 @@ static const yytype_int16 yycheck[] =
       -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,    64,    -1,    66,    67,    -1,    69,    70,    71,    -1,
-      -1,    -1,    -1,    -1,    -1,    47,    -1,    -1,    81,    82,
-      83,    84,    85,    86,    -1,    57,    58,    -1,    91,    92,
+      -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,    -1,    -1,    -1,    -1,
+      -1,    -1,    -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,    77,    78,    -1,    -1,
-      -1,    82,    83,    84,    85,    86,    -1,    57,    58,    -1,
+      71,    -1,    -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,    -1,    -1,    -1,
-      -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,    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,    83,    84,    85,    86,    -1,    57,
-      58,    90,    91,    92,    62,    63,    64,    -1,    66,    67,
+      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,    -1,    91,    92,    62,    63,    64,    -1,    66,
+      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,    58,    -1,    91,    92,    62,    63,    64,    -1,
+      -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,    -1,    -1,    85,
-      86,    -1,    -1,    89,    -1,    91,    92
+      -1,    -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,    83,    84,
+      85,    86,    -1,    57,    58,    -1,    91,    92,    62,    63,
+      64,    -1,    66,    67,    -1,    69,    70,    71,    -1,    63,
+      64,    -1,    66,    67,    -1,    69,    -1,    -1,    82,    -1,
+      -1,    85,    86,    -1,    -1,    89,    -1,    91,    92,    83,
+      84,    85,    86,    -1,    -1,    -1,    -1,    91,    92
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1207,36 +1221,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,    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
+      73,    74,    75,    76,    79,    80,    83,    84,    89,    93,
+      97,    99,   100,   101,   102,   103,   110,   111,   112,   117,
+     118,   119,   122,   125,   126,   133,    88,    98,    21,    41,
+     100,   118,   118,   118,    89,   118,   134,    21,    89,   114,
+      42,    21,   120,    30,    35,    37,    38,    39,    40,   118,
+     123,   124,    21,   118,    47,    48,    12,    13,    21,    21,
+      21,    21,   118,    54,   123,   124,    21,   121,   118,   118,
+     118,   118,   118,   118,    21,    89,   118,   118,   118,   134,
+       0,    98,    89,    81,    89,   109,   118,   118,    57,    58,
+      62,    63,    64,    66,    67,    69,    70,    71,    82,    83,
+      84,    85,    86,    91,    92,   118,   118,   134,    95,   134,
+     134,   134,    95,   118,   118,    37,   124,   127,    34,    67,
+      68,    21,    45,    81,   118,    45,    81,    44,   128,    47,
+     124,    95,    39,    45,    39,    45,    39,    45,    39,    45,
+      77,    78,   129,    21,    90,    94,    99,   109,   118,   109,
+     118,    44,    81,   115,   118,   118,   118,   118,   118,   118,
+     118,   118,   118,   118,   118,   118,   118,   118,   118,   118,
+     118,    90,   118,    90,    21,   118,   114,    21,   118,   118,
+     118,   118,    45,    81,   118,   118,   114,   118,    21,   118,
+     118,   118,   118,   118,   118,   118,   118,   118,   118,   114,
+      90,    95,    90,   115,    90,    98,   114,   118,    21,   131,
+     118,   118,   131,    39,    39,    39,    39,   130,   134,   116,
+      26,    45,   116,   101,   119,    95,    98,    98,   118,   118,
+     118,   118,   131,    90,    98,   102,   115,    45,   118,   115,
+     115,    21,    95,   132,   132,    98,    25,   118,   115,    25,
+      49,   114,    28,    49,   106,   107,   113,    21,   116,   116,
+     132,   115,   116,   116,   105,   106,   108,   113,   114,   107,
+     115,   109,   116,   116,   115,   115,   108,   115,   109,   101,
+      49,   104,    44,    25,   115,    25,    25,    25,    44,   115,
+     114,   115,   114,    25,   116,   101,   102,   115,   115
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2580,215 +2594,220 @@ yyreduce:
 
   case 88:
 #line 439 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_intersects); ;}
+    { (yyval.code) = g_lingo->codeArray((yyvsp[(2) - (3)].narg)); ;}
     break;
 
   case 89:
 #line 440 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_within); ;}
+    { g_lingo->code1(g_lingo->c_intersects); ;}
     break;
 
   case 90:
 #line 441 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_charOf); ;}
+    { g_lingo->code1(g_lingo->c_within); ;}
     break;
 
   case 91:
 #line 442 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_charToOf); ;}
+    { g_lingo->code1(g_lingo->c_charOf); ;}
     break;
 
   case 92:
 #line 443 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_itemOf); ;}
+    { g_lingo->code1(g_lingo->c_charToOf); ;}
     break;
 
   case 93:
 #line 444 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_itemToOf); ;}
+    { g_lingo->code1(g_lingo->c_itemOf); ;}
     break;
 
   case 94:
 #line 445 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_lineOf); ;}
+    { g_lingo->code1(g_lingo->c_itemToOf); ;}
     break;
 
   case 95:
 #line 446 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_lineToOf); ;}
+    { g_lingo->code1(g_lingo->c_lineOf); ;}
     break;
 
   case 96:
 #line 447 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_wordOf); ;}
+    { g_lingo->code1(g_lingo->c_lineToOf); ;}
     break;
 
   case 97:
 #line 448 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_wordToOf); ;}
+    { g_lingo->code1(g_lingo->c_wordOf); ;}
     break;
 
   case 98:
-#line 451 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_printtop); ;}
+#line 449 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_wordToOf); ;}
     break;
 
-  case 101:
-#line 454 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_exitRepeat); ;}
+  case 99:
+#line 452 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_printtop); ;}
     break;
 
   case 102:
 #line 455 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_exitRepeat); ;}
+    break;
+
+  case 103:
+#line 456 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeConst(0); // Push fake value on stack
 							  g_lingo->code1(g_lingo->c_procret); ;}
     break;
 
-  case 105:
-#line 459 "engines/director/lingo/lingo-gr.y"
+  case 106:
+#line 460 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->_builtins[*(yyvsp[(1) - (2)].s)]->u.func);
 		delete (yyvsp[(1) - (2)].s); ;}
     break;
 
-  case 106:
-#line 462 "engines/director/lingo/lingo-gr.y"
+  case 107:
+#line 463 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->_builtins[*(yyvsp[(1) - (2)].s)]->u.func);
 		delete (yyvsp[(1) - (2)].s); ;}
     break;
 
-  case 107:
-#line 465 "engines/director/lingo/lingo-gr.y"
+  case 108:
+#line 466 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code2(g_lingo->c_voidpush, g_lingo->_builtins[*(yyvsp[(1) - (1)].s)]->u.func);
 		delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 108:
-#line 468 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->codeFunc((yyvsp[(1) - (4)].s), (yyvsp[(3) - (4)].narg)); ;}
-    break;
-
   case 109:
 #line 469 "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 110:
 #line 470 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->codeMe((yyvsp[(3) - (4)].s), 0); ;}
+    { g_lingo->codeFunc((yyvsp[(1) - (2)].s), (yyvsp[(2) - (2)].narg)); ;}
     break;
 
   case 111:
 #line 471 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->codeMe((yyvsp[(3) - (6)].s), (yyvsp[(5) - (6)].narg)); ;}
+    { g_lingo->codeMe((yyvsp[(3) - (4)].s), 0); ;}
     break;
 
   case 112:
 #line 472 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_open); ;}
+    { g_lingo->codeMe((yyvsp[(3) - (6)].s), (yyvsp[(5) - (6)].narg)); ;}
     break;
 
   case 113:
 #line 473 "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 114:
 #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)); ;}
+    { g_lingo->code2(g_lingo->c_voidpush, g_lingo->c_open); ;}
     break;
 
   case 115:
-#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); ;}
+#line 475 "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 116:
 #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); ;}
+    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
   case 117:
-#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); ;}
+#line 479 "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 118:
 #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); ;}
+    { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
   case 119:
-#line 493 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotoloop); ;}
+#line 483 "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 120:
 #line 494 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotonext); ;}
+    { g_lingo->code1(g_lingo->c_gotoloop); ;}
     break;
 
   case 121:
 #line 495 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotoprevious); ;}
+    { g_lingo->code1(g_lingo->c_gotonext); ;}
     break;
 
   case 122:
 #line 496 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_gotoprevious); ;}
+    break;
+
+  case 123:
+#line 497 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(1);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 123:
-#line 499 "engines/director/lingo/lingo-gr.y"
+  case 124:
+#line 500 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(3);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 124:
-#line 502 "engines/director/lingo/lingo-gr.y"
+  case 125:
+#line 503 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(2);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 129:
-#line 515 "engines/director/lingo/lingo-gr.y"
+  case 130:
+#line 516 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_playdone); ;}
     break;
 
-  case 130:
-#line 516 "engines/director/lingo/lingo-gr.y"
+  case 131:
+#line 517 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(1);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 131:
-#line 519 "engines/director/lingo/lingo-gr.y"
+  case 132:
+#line 520 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(3);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 132:
-#line 522 "engines/director/lingo/lingo-gr.y"
+  case 133:
+#line 523 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(2);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 133:
-#line 552 "engines/director/lingo/lingo-gr.y"
+  case 134:
+#line 553 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 134:
-#line 553 "engines/director/lingo/lingo-gr.y"
+  case 135:
+#line 554 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeConst(0); // Push fake value on stack
 			g_lingo->code1(g_lingo->c_procret);
@@ -2796,38 +2815,38 @@ yyreduce:
 			g_lingo->_indef = false; ;}
     break;
 
-  case 135:
-#line 558 "engines/director/lingo/lingo-gr.y"
+  case 136:
+#line 559 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeFactory(*(yyvsp[(2) - (2)].s));
 		;}
     break;
 
-  case 136:
-#line 561 "engines/director/lingo/lingo-gr.y"
+  case 137:
+#line 562 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; ;}
     break;
 
-  case 137:
-#line 562 "engines/director/lingo/lingo-gr.y"
+  case 138:
+#line 563 "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 138:
-#line 566 "engines/director/lingo/lingo-gr.y"
+  case 139:
+#line 567 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 139:
-#line 567 "engines/director/lingo/lingo-gr.y"
+  case 140:
+#line 568 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_ignoreMe = true; ;}
     break;
 
-  case 140:
-#line 567 "engines/director/lingo/lingo-gr.y"
+  case 141:
+#line 568 "engines/director/lingo/lingo-gr.y"
     {
 				g_lingo->codeConst(0); // Push fake value on stack
 				g_lingo->code1(g_lingo->c_procret);
@@ -2839,33 +2858,33 @@ yyreduce:
 			;}
     break;
 
-  case 141:
-#line 577 "engines/director/lingo/lingo-gr.y"
-    { (yyval.narg) = 0; ;}
-    break;
-
   case 142:
 #line 578 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;}
+    { (yyval.narg) = 0; ;}
     break;
 
   case 143:
 #line 579 "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 144:
 #line 580 "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 145:
-#line 582 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->codeArgStore(); ;}
+#line 581 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;}
     break;
 
   case 146:
-#line 586 "engines/director/lingo/lingo-gr.y"
+#line 583 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->codeArgStore(); ;}
+    break;
+
+  case 147:
+#line 587 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_call);
 		g_lingo->codeString((yyvsp[(1) - (3)].s)->c_str());
@@ -2874,24 +2893,24 @@ yyreduce:
 		g_lingo->code1(numpar); ;}
     break;
 
-  case 147:
-#line 594 "engines/director/lingo/lingo-gr.y"
-    { (yyval.narg) = 0; ;}
-    break;
-
   case 148:
 #line 595 "engines/director/lingo/lingo-gr.y"
-    { (yyval.narg) = 1; ;}
+    { (yyval.narg) = 0; ;}
     break;
 
   case 149:
 #line 596 "engines/director/lingo/lingo-gr.y"
+    { (yyval.narg) = 1; ;}
+    break;
+
+  case 150:
+#line 597 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 2895 "engines/director/lingo/lingo-gr.cpp"
+#line 2914 "engines/director/lingo/lingo-gr.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -3105,6 +3124,6 @@ yyreturn:
 }
 
 
-#line 599 "engines/director/lingo/lingo-gr.y"
+#line 600 "engines/director/lingo/lingo-gr.y"
 
 
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 392850b..778496b 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -436,6 +436,7 @@ expr: INT		{ $$ = g_lingo->codeConst($1); }
 	| '+' expr  %prec UNARY		{ $$ = $2; }
 	| '-' expr  %prec UNARY		{ $$ = $2; g_lingo->code1(g_lingo->c_negate); }
 	| '(' expr ')'				{ $$ = $2; }
+	| '[' arglist ']'			{ $$ = g_lingo->codeArray($2); }
 	| tSPRITE expr tINTERSECTS expr 	{ g_lingo->code1(g_lingo->c_intersects); }
 	| tSPRITE expr tWITHIN expr		 	{ g_lingo->code1(g_lingo->c_within); }
 	| tCHAR expr tOF expr				{ g_lingo->code1(g_lingo->c_charOf); }
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index c93e788..9224250 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -415,7 +415,7 @@ static yyconst flex_int32_t yy_ec[256] =
        15,   16,    1,    1,   17,   18,   19,   20,   21,   22,
        23,   24,   25,   26,   26,   27,   28,   29,   30,   31,
        32,   33,   34,   35,   36,   37,   38,   39,   40,   26,
-        1,    1,    1,    8,   41,    1,   42,   43,   44,   45,
+        8,    1,    8,    8,   41,    1,   42,   43,   44,   45,
 
        46,   47,   48,   49,   50,   26,   26,   51,   52,   53,
        54,   55,   56,   57,   58,   59,   60,   61,   62,   63,
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index b7a54f7..5afe926 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -65,7 +65,7 @@ identifier [_[:alpha:]][_[:alnum:]]*
 constfloat [[:digit:]]+\.[[:digit:]]*
 constinteger [[:digit:]]+
 conststring \"[^\"\r\n]*\"
-operator [-+*/%=^:,()><&]
+operator [-+*/%=^:,()><&\[\]]
 newline [ \t]*[\n\r]
 whitespace [\t ]
 
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 4cd7b3c..5d6c29b 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -211,6 +211,7 @@ public:
 	int codeString(const char *s);
 	void codeLabel(int label);
 	int codeConst(int val);
+	int codeArray(int arraySize);
 
 	int calcStringAlignment(const char *s) {
 		return calcCodeAlignment(strlen(s) + 1);
@@ -267,6 +268,7 @@ public:
 	static void c_stringpush();
 	static void c_symbolpush();
 	static void c_varpush();
+	static void c_arraypush();
 	static void c_assign();
 	bool verify(Symbol *s);
 	static void c_eval();
diff --git a/engines/director/lingo/tests/arrays.lingo b/engines/director/lingo/tests/arrays.lingo
new file mode 100644
index 0000000..2d1c9ef
--- /dev/null
+++ b/engines/director/lingo/tests/arrays.lingo
@@ -0,0 +1,2 @@
+set a to [1, 2, 3]
+put a





More information about the Scummvm-git-logs mailing list