[Scummvm-git-logs] scummvm master -> 293d59f6ada41d8c942717a0248d6aef62765a29

sev- sev at scummvm.org
Mon Feb 6 19:09:08 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:
293d59f6ad DIRECTOR: Lingo: Further work on improved built-in grammar


Commit: 293d59f6ada41d8c942717a0248d6aef62765a29
    https://github.com/scummvm/scummvm/commit/293d59f6ada41d8c942717a0248d6aef62765a29
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-02-06T19:10:51+01:00

Commit Message:
DIRECTOR: Lingo: Further work on improved built-in grammar

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


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index f5abbca..630d681 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -27,7 +27,7 @@ namespace Director {
 static struct BuiltinProto {
 	const char *name;
 	void (*func)(int);
-	int minArgs;
+	int minArgs;	// -1 -- arglist
 	int maxArgs;
 	bool parens;
 } builtins[] = {
@@ -158,7 +158,7 @@ static struct BuiltinProto {
 	{ "updateStage",	Lingo::b_updateStage,	0, 0, false },	// D2
 	{ "zoomBox",		Lingo::b_zoomBox,		-1,0, false },	// D2
 	// Point
-	{ "point",	Lingo::b_point, 2, 2, true },
+	{ "point",			Lingo::b_point,			2, 2, true },
 	// Sound
 	{ "beep",	 		Lingo::b_beep,			0, 1, false },	// D2
 	{ "mci",	 		Lingo::b_mci,			1, 1, false },
@@ -183,7 +183,6 @@ static struct BuiltinProto {
 	{ "field",			Lingo::b_field,			1, 1, false },	//		D3
 	{ "me",				Lingo::b_me,			-1,0, false },	//		D3
 
-
 	{ 0, 0, 0, 0, false }
 };
 
@@ -194,6 +193,12 @@ static const char *twoWordBuiltins[] = {
 	0
 };
 
+static const char *builtinFunctions[] = {
+	"cast",
+	"field",
+	0
+};
+
 void Lingo::initBuiltIns() {
 	for (BuiltinProto *blt = builtins; blt->name; blt++) {
 		Symbol *sym = new Symbol;
@@ -211,6 +216,9 @@ void Lingo::initBuiltIns() {
 		_functions[(void *)sym->u.s] = new FuncDesc(blt->name, "");
 	}
 
+	for (const char **b = builtinFunctions; *b; b++)
+		_builtins[*b]->type = FBLTIN;
+
 	for (const char **b = twoWordBuiltins; *b; b++)
 		_twoWordBuiltins[*b] = true;
 }
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 1b45359..2a20e02 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1030,7 +1030,7 @@ void Lingo::call(Common::String name, int nargs) {
 		warning("Call to undefined handler '%s'. Dropping %d stack items", name.c_str(), nargs);
 		dropArgs = true;
 	} else {
-		if (sym->type == BLTIN && sym->nargs != -1 && sym->nargs != nargs && sym->maxArgs != nargs) {
+		if ((sym->type == BLTIN || sym->type == FBLTIN) && sym->nargs != -1 && sym->nargs != nargs && sym->maxArgs != nargs) {
 			if (sym->nargs == sym->maxArgs)
 				warning("Incorrect number of arguments to handler '%s', expecting %d. Dropping %d stack items", name.c_str(), sym->nargs, nargs);
 			else
@@ -1057,7 +1057,7 @@ void Lingo::call(Common::String name, int nargs) {
 			g_lingo->pop();
 	}
 
-	if (sym->type == BLTIN) {
+	if (sym->type == BLTIN || sym->type == FBLTIN) {
 		if (sym->u.bltin == b_factory)
 			g_lingo->factoryCall(name, nargs);
 		else
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index e8f994d..56c0af2 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -84,66 +84,69 @@
      BLTINONEARG = 273,
      BLTINARGLIST = 274,
      TWOWORDBUILTIN = 275,
-     ID = 276,
-     STRING = 277,
-     HANDLER = 278,
-     SYMBOL = 279,
-     ENDCLAUSE = 280,
-     tPLAYACCEL = 281,
-     tDOWN = 282,
-     tELSE = 283,
-     tNLELSIF = 284,
-     tEXIT = 285,
-     tFRAME = 286,
-     tGLOBAL = 287,
-     tGO = 288,
-     tIF = 289,
-     tINTO = 290,
-     tLOOP = 291,
-     tMACRO = 292,
-     tMOVIE = 293,
-     tNEXT = 294,
-     tOF = 295,
-     tPREVIOUS = 296,
-     tPUT = 297,
-     tREPEAT = 298,
-     tSET = 299,
-     tTHEN = 300,
-     tTO = 301,
-     tWHEN = 302,
-     tWITH = 303,
-     tWHILE = 304,
-     tNLELSE = 305,
-     tFACTORY = 306,
-     tMETHOD = 307,
-     tOPEN = 308,
-     tPLAY = 309,
-     tDONE = 310,
-     tINSTANCE = 311,
-     tGE = 312,
-     tLE = 313,
-     tGT = 314,
-     tLT = 315,
-     tEQ = 316,
-     tNEQ = 317,
-     tAND = 318,
-     tOR = 319,
-     tNOT = 320,
-     tMOD = 321,
-     tAFTER = 322,
-     tBEFORE = 323,
-     tCONCAT = 324,
-     tCONTAINS = 325,
-     tSTARTS = 326,
-     tCHAR = 327,
-     tITEM = 328,
-     tLINE = 329,
-     tWORD = 330,
-     tSPRITE = 331,
-     tINTERSECTS = 332,
-     tWITHIN = 333,
-     tON = 334,
-     tME = 335
+     FBLTIN = 276,
+     FBLTINNOARGS = 277,
+     FBLTINONEARG = 278,
+     ID = 279,
+     STRING = 280,
+     HANDLER = 281,
+     SYMBOL = 282,
+     ENDCLAUSE = 283,
+     tPLAYACCEL = 284,
+     tDOWN = 285,
+     tELSE = 286,
+     tNLELSIF = 287,
+     tEXIT = 288,
+     tFRAME = 289,
+     tGLOBAL = 290,
+     tGO = 291,
+     tIF = 292,
+     tINTO = 293,
+     tLOOP = 294,
+     tMACRO = 295,
+     tMOVIE = 296,
+     tNEXT = 297,
+     tOF = 298,
+     tPREVIOUS = 299,
+     tPUT = 300,
+     tREPEAT = 301,
+     tSET = 302,
+     tTHEN = 303,
+     tTO = 304,
+     tWHEN = 305,
+     tWITH = 306,
+     tWHILE = 307,
+     tNLELSE = 308,
+     tFACTORY = 309,
+     tMETHOD = 310,
+     tOPEN = 311,
+     tPLAY = 312,
+     tDONE = 313,
+     tINSTANCE = 314,
+     tGE = 315,
+     tLE = 316,
+     tGT = 317,
+     tLT = 318,
+     tEQ = 319,
+     tNEQ = 320,
+     tAND = 321,
+     tOR = 322,
+     tNOT = 323,
+     tMOD = 324,
+     tAFTER = 325,
+     tBEFORE = 326,
+     tCONCAT = 327,
+     tCONTAINS = 328,
+     tSTARTS = 329,
+     tCHAR = 330,
+     tITEM = 331,
+     tLINE = 332,
+     tWORD = 333,
+     tSPRITE = 334,
+     tINTERSECTS = 335,
+     tWITHIN = 336,
+     tON = 337,
+     tME = 338
    };
 #endif
 /* Tokens.  */
@@ -165,66 +168,69 @@
 #define BLTINONEARG 273
 #define BLTINARGLIST 274
 #define TWOWORDBUILTIN 275
-#define ID 276
-#define STRING 277
-#define HANDLER 278
-#define SYMBOL 279
-#define ENDCLAUSE 280
-#define tPLAYACCEL 281
-#define tDOWN 282
-#define tELSE 283
-#define tNLELSIF 284
-#define tEXIT 285
-#define tFRAME 286
-#define tGLOBAL 287
-#define tGO 288
-#define tIF 289
-#define tINTO 290
-#define tLOOP 291
-#define tMACRO 292
-#define tMOVIE 293
-#define tNEXT 294
-#define tOF 295
-#define tPREVIOUS 296
-#define tPUT 297
-#define tREPEAT 298
-#define tSET 299
-#define tTHEN 300
-#define tTO 301
-#define tWHEN 302
-#define tWITH 303
-#define tWHILE 304
-#define tNLELSE 305
-#define tFACTORY 306
-#define tMETHOD 307
-#define tOPEN 308
-#define tPLAY 309
-#define tDONE 310
-#define tINSTANCE 311
-#define tGE 312
-#define tLE 313
-#define tGT 314
-#define tLT 315
-#define tEQ 316
-#define tNEQ 317
-#define tAND 318
-#define tOR 319
-#define tNOT 320
-#define tMOD 321
-#define tAFTER 322
-#define tBEFORE 323
-#define tCONCAT 324
-#define tCONTAINS 325
-#define tSTARTS 326
-#define tCHAR 327
-#define tITEM 328
-#define tLINE 329
-#define tWORD 330
-#define tSPRITE 331
-#define tINTERSECTS 332
-#define tWITHIN 333
-#define tON 334
-#define tME 335
+#define FBLTIN 276
+#define FBLTINNOARGS 277
+#define FBLTINONEARG 278
+#define ID 279
+#define STRING 280
+#define HANDLER 281
+#define SYMBOL 282
+#define ENDCLAUSE 283
+#define tPLAYACCEL 284
+#define tDOWN 285
+#define tELSE 286
+#define tNLELSIF 287
+#define tEXIT 288
+#define tFRAME 289
+#define tGLOBAL 290
+#define tGO 291
+#define tIF 292
+#define tINTO 293
+#define tLOOP 294
+#define tMACRO 295
+#define tMOVIE 296
+#define tNEXT 297
+#define tOF 298
+#define tPREVIOUS 299
+#define tPUT 300
+#define tREPEAT 301
+#define tSET 302
+#define tTHEN 303
+#define tTO 304
+#define tWHEN 305
+#define tWITH 306
+#define tWHILE 307
+#define tNLELSE 308
+#define tFACTORY 309
+#define tMETHOD 310
+#define tOPEN 311
+#define tPLAY 312
+#define tDONE 313
+#define tINSTANCE 314
+#define tGE 315
+#define tLE 316
+#define tGT 317
+#define tLT 318
+#define tEQ 319
+#define tNEQ 320
+#define tAND 321
+#define tOR 322
+#define tNOT 323
+#define tMOD 324
+#define tAFTER 325
+#define tBEFORE 326
+#define tCONCAT 327
+#define tCONTAINS 328
+#define tSTARTS 329
+#define tCHAR 330
+#define tITEM 331
+#define tLINE 332
+#define tWORD 333
+#define tSPRITE 334
+#define tINTERSECTS 335
+#define tWITHIN 336
+#define tON 337
+#define tME 338
 
 
 
@@ -292,7 +298,7 @@ typedef union YYSTYPE
 	Common::Array<double> *arr;
 }
 /* Line 193 of yacc.c.  */
-#line 296 "engines/director/lingo/lingo-gr.cpp"
+#line 302 "engines/director/lingo/lingo-gr.cpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -305,7 +311,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 309 "engines/director/lingo/lingo-gr.cpp"
+#line 315 "engines/director/lingo/lingo-gr.cpp"
 
 #ifdef short
 # undef short
@@ -518,22 +524,22 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  114
+#define YYFINAL  115
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1644
+#define YYLAST   1612
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  96
+#define YYNTOKENS  99
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  42
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  152
+#define YYNRULES  154
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  336
+#define YYNSTATES  337
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   335
+#define YYMAXUTOK   338
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -542,15 +548,15 @@ union yyalloc
 static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      88,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      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,    87,    82,     2,
-      89,    90,    85,    83,    95,    84,     2,    86,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    90,    85,     2,
+      92,    93,    88,    86,    98,    87,     2,    89,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      92,    81,    91,     2,     2,     2,     2,     2,     2,     2,
+      95,    84,    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,    93,     2,    94,     2,     2,     2,     2,     2,     2,
+       2,    96,     2,    97,     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,
@@ -574,7 +580,7 @@ static const yytype_uint8 yytranslate[] =
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80
+      75,    76,    77,    78,    79,    80,    81,    82,    83
 };
 
 #if YYDEBUG
@@ -588,101 +594,101 @@ static const yytype_uint16 yyprhs[] =
      141,   148,   159,   170,   171,   175,   178,   180,   183,   185,
      192,   194,   201,   203,   207,   211,   214,   218,   220,   222,
      223,   224,   225,   228,   231,   235,   237,   239,   241,   243,
-     245,   250,   252,   254,   257,   259,   263,   267,   271,   275,
-     279,   283,   287,   291,   295,   299,   303,   307,   310,   314,
-     318,   322,   326,   329,   332,   336,   340,   345,   350,   355,
-     362,   367,   374,   379,   386,   391,   398,   401,   403,   405,
-     408,   410,   413,   416,   419,   422,   424,   427,   432,   439,
-     444,   447,   451,   453,   457,   459,   463,   466,   469,   472,
-     475,   479,   482,   485,   487,   491,   494,   497,   500,   504,
-     507,   508,   512,   513,   522,   525,   526,   535,   536,   537,
-     548,   549,   551,   555,   560,   561,   564,   565,   567,   571,
-     573,   577,   580
+     245,   248,   253,   255,   257,   260,   262,   266,   270,   274,
+     278,   282,   286,   290,   294,   298,   302,   306,   310,   313,
+     317,   321,   325,   329,   332,   335,   339,   343,   348,   353,
+     358,   365,   370,   377,   382,   389,   394,   401,   404,   406,
+     408,   411,   413,   416,   419,   421,   424,   427,   429,   432,
+     437,   444,   449,   452,   456,   458,   462,   464,   468,   471,
+     474,   477,   480,   484,   487,   490,   492,   496,   499,   502,
+     505,   509,   512,   513,   517,   518,   527,   530,   531,   540,
+     541,   542,   553,   554,   556,   560,   565,   566,   569,   570,
+     572,   576,   578,   582,   585
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-      97,     0,    -1,    97,    98,    99,    -1,    99,    -1,     1,
-      98,    -1,    88,    -1,    -1,   127,    -1,   134,    -1,   102,
-      -1,    42,   118,    35,    21,    -1,    42,   118,    67,   118,
-      -1,    42,   118,    68,   118,    -1,    44,    21,    81,   118,
-      -1,    44,    12,    81,   118,    -1,    44,    13,   118,    81,
-     118,    -1,    44,    21,    46,   118,    -1,    44,    12,    46,
-     118,    -1,    44,    13,   118,    46,   118,    -1,   118,    -1,
-     119,    -1,   101,    -1,   103,    -1,   110,    89,   109,    90,
-     116,   115,    25,    -1,   111,    81,   118,   115,    46,   118,
-     115,   116,   115,    25,    -1,   111,    81,   118,   115,    27,
-      46,   118,   115,   116,   115,    25,    -1,   117,   118,   115,
-      -1,   112,   109,    45,    98,   116,   115,    25,    -1,   112,
-     109,    45,    98,   116,   115,    50,   116,   115,    25,    -1,
-     112,   109,    45,    98,   116,   115,   114,   105,   115,    25,
-      -1,   112,   109,    45,   114,   101,   115,    -1,   112,   109,
-      45,   114,   101,   115,    50,   114,   101,   115,    -1,   112,
-     109,    45,   114,   101,   115,   106,   115,   104,   115,    -1,
-      -1,    50,   114,   101,    -1,   105,   108,    -1,   108,    -1,
-     106,   107,    -1,   107,    -1,   113,   109,    45,   114,   102,
-     115,    -1,   106,    -1,   113,   109,    45,   114,   116,   115,
-      -1,   118,    -1,   118,    81,   118,    -1,    89,   109,    90,
-      -1,    43,    49,    -1,    43,    48,    21,    -1,    34,    -1,
-      29,    -1,    -1,    -1,    -1,   116,    98,    -1,   116,   102,
-      -1,    47,    21,    45,    -1,    11,    -1,    14,    -1,    24,
-      -1,    22,    -1,    16,    -1,    21,    89,   135,    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,    69,   118,    -1,   118,    70,
-     118,    -1,   118,    71,   118,    -1,    83,   118,    -1,    84,
-     118,    -1,    89,   118,    90,    -1,    93,   135,    94,    -1,
-      76,   118,    77,   118,    -1,    76,   118,    78,   118,    -1,
-      72,   118,    40,   118,    -1,    72,   118,    46,   118,    40,
-     118,    -1,    73,   118,    40,   118,    -1,    73,   118,    46,
-     118,    40,   118,    -1,    74,   118,    40,   118,    -1,    74,
-     118,    46,   118,    40,   118,    -1,    75,   118,    40,   118,
-      -1,    75,   118,    46,   118,    40,   118,    -1,    42,   118,
-      -1,   122,    -1,   125,    -1,    30,    43,    -1,    30,    -1,
-      32,   120,    -1,    56,   121,    -1,    18,   118,    -1,    17,
-     118,    -1,    17,    -1,    19,   137,    -1,    80,    89,    21,
-      90,    -1,    80,    89,    21,    95,   135,    90,    -1,    53,
-     118,    48,   118,    -1,    53,   118,    -1,    20,    21,   135,
-      -1,    21,    -1,   120,    95,    21,    -1,    21,    -1,   121,
-      95,    21,    -1,    33,    36,    -1,    33,    39,    -1,    33,
-      41,    -1,    33,   123,    -1,    33,   123,   124,    -1,    33,
-     124,    -1,    31,   118,    -1,   118,    -1,    40,    38,   118,
-      -1,    38,   118,    -1,    54,    55,    -1,    54,   123,    -1,
-      54,   123,   124,    -1,    54,   124,    -1,    -1,    26,   126,
-     135,    -1,    -1,    37,    21,   128,   114,   132,    98,   133,
-     116,    -1,    51,    21,    -1,    -1,    52,    21,   129,   114,
-     132,    98,   133,   116,    -1,    -1,    -1,    79,    21,   130,
-     114,   131,   132,    98,   133,   116,    25,    -1,    -1,    21,
-      -1,   132,    95,    21,    -1,   132,    98,    95,    21,    -1,
-      -1,    21,   136,    -1,    -1,   118,    -1,   135,    95,   118,
-      -1,   118,    -1,   135,    95,   118,    -1,   118,    98,    -1,
-     135,    95,   118,    98,    -1
+     100,     0,    -1,   100,   101,   102,    -1,   102,    -1,     1,
+     101,    -1,    91,    -1,    -1,   130,    -1,   137,    -1,   105,
+      -1,    45,   121,    38,    24,    -1,    45,   121,    70,   121,
+      -1,    45,   121,    71,   121,    -1,    47,    24,    84,   121,
+      -1,    47,    12,    84,   121,    -1,    47,    13,   121,    84,
+     121,    -1,    47,    24,    49,   121,    -1,    47,    12,    49,
+     121,    -1,    47,    13,   121,    49,   121,    -1,   121,    -1,
+     122,    -1,   104,    -1,   106,    -1,   113,    92,   112,    93,
+     119,   118,    28,    -1,   114,    84,   121,   118,    49,   121,
+     118,   119,   118,    28,    -1,   114,    84,   121,   118,    30,
+      49,   121,   118,   119,   118,    28,    -1,   120,   121,   118,
+      -1,   115,   112,    48,   101,   119,   118,    28,    -1,   115,
+     112,    48,   101,   119,   118,    53,   119,   118,    28,    -1,
+     115,   112,    48,   101,   119,   118,   117,   108,   118,    28,
+      -1,   115,   112,    48,   117,   104,   118,    -1,   115,   112,
+      48,   117,   104,   118,    53,   117,   104,   118,    -1,   115,
+     112,    48,   117,   104,   118,   109,   118,   107,   118,    -1,
+      -1,    53,   117,   104,    -1,   108,   111,    -1,   111,    -1,
+     109,   110,    -1,   110,    -1,   116,   112,    48,   117,   105,
+     118,    -1,   109,    -1,   116,   112,    48,   117,   119,   118,
+      -1,   121,    -1,   121,    84,   121,    -1,    92,   112,    93,
+      -1,    46,    52,    -1,    46,    51,    24,    -1,    37,    -1,
+      32,    -1,    -1,    -1,    -1,   119,   101,    -1,   119,   105,
+      -1,    50,    24,    48,    -1,    11,    -1,    14,    -1,    27,
+      -1,    25,    -1,    22,    -1,    23,   121,    -1,    24,    92,
+     138,    93,    -1,    24,    -1,    12,    -1,    13,   121,    -1,
+     103,    -1,   121,    86,   121,    -1,   121,    87,   121,    -1,
+     121,    88,   121,    -1,   121,    89,   121,    -1,   121,    69,
+     121,    -1,   121,    94,   121,    -1,   121,    95,   121,    -1,
+     121,    65,   121,    -1,   121,    60,   121,    -1,   121,    61,
+     121,    -1,   121,    66,   121,    -1,   121,    67,   121,    -1,
+      68,   121,    -1,   121,    85,   121,    -1,   121,    72,   121,
+      -1,   121,    73,   121,    -1,   121,    74,   121,    -1,    86,
+     121,    -1,    87,   121,    -1,    92,   121,    93,    -1,    96,
+     138,    97,    -1,    79,   121,    80,   121,    -1,    79,   121,
+      81,   121,    -1,    75,   121,    43,   121,    -1,    75,   121,
+      49,   121,    43,   121,    -1,    76,   121,    43,   121,    -1,
+      76,   121,    49,   121,    43,   121,    -1,    77,   121,    43,
+     121,    -1,    77,   121,    49,   121,    43,   121,    -1,    78,
+     121,    43,   121,    -1,    78,   121,    49,   121,    43,   121,
+      -1,    45,   121,    -1,   125,    -1,   128,    -1,    33,    46,
+      -1,    33,    -1,    35,   123,    -1,    59,   124,    -1,    16,
+      -1,    18,   121,    -1,    17,   121,    -1,    17,    -1,    19,
+     140,    -1,    83,    92,    24,    93,    -1,    83,    92,    24,
+      98,   138,    93,    -1,    56,   121,    51,   121,    -1,    56,
+     121,    -1,    20,    24,   138,    -1,    24,    -1,   123,    98,
+      24,    -1,    24,    -1,   124,    98,    24,    -1,    36,    39,
+      -1,    36,    42,    -1,    36,    44,    -1,    36,   126,    -1,
+      36,   126,   127,    -1,    36,   127,    -1,    34,   121,    -1,
+     121,    -1,    43,    41,   121,    -1,    41,   121,    -1,    57,
+      58,    -1,    57,   126,    -1,    57,   126,   127,    -1,    57,
+     127,    -1,    -1,    29,   129,   138,    -1,    -1,    40,    24,
+     131,   117,   135,   101,   136,   119,    -1,    54,    24,    -1,
+      -1,    55,    24,   132,   117,   135,   101,   136,   119,    -1,
+      -1,    -1,    82,    24,   133,   117,   134,   135,   101,   136,
+     119,    28,    -1,    -1,    24,    -1,   135,    98,    24,    -1,
+     135,   101,    98,    24,    -1,    -1,    24,   139,    -1,    -1,
+     121,    -1,   138,    98,   121,    -1,   121,    -1,   139,    98,
+     121,    -1,   121,   101,    -1,   140,    98,   121,   101,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
-       0,   117,   117,   118,   119,   122,   127,   128,   129,   130,
-     133,   139,   140,   141,   147,   155,   163,   169,   177,   187,
-     188,   191,   192,   197,   210,   228,   242,   250,   260,   272,
-     284,   294,   304,   316,   317,   320,   321,   324,   325,   328,
-     336,   337,   345,   346,   347,   350,   353,   360,   367,   375,
-     378,   381,   382,   383,   386,   392,   393,   396,   399,   402,
-     405,   408,   412,   419,   425,   426,   427,   428,   429,   430,
-     431,   432,   433,   434,   435,   436,   437,   438,   439,   440,
-     441,   442,   443,   444,   445,   446,   447,   448,   449,   450,
-     451,   452,   453,   454,   455,   456,   459,   460,   461,   462,
-     463,   465,   466,   467,   470,   473,   476,   477,   478,   479,
-     480,   481,   484,   485,   488,   489,   500,   501,   502,   503,
-     506,   509,   514,   515,   518,   519,   522,   523,   526,   529,
-     532,   532,   562,   562,   568,   571,   571,   576,   577,   576,
-     587,   588,   589,   590,   593,   597,   605,   606,   607,   610,
-     611,   614,   615
+       0,   118,   118,   119,   120,   123,   128,   129,   130,   131,
+     134,   140,   141,   142,   148,   156,   164,   170,   178,   188,
+     189,   192,   193,   198,   211,   229,   243,   251,   261,   273,
+     285,   295,   305,   317,   318,   321,   322,   325,   326,   329,
+     337,   338,   346,   347,   348,   351,   354,   361,   368,   376,
+     379,   382,   383,   384,   387,   393,   394,   397,   400,   403,
+     406,   409,   412,   416,   423,   429,   430,   431,   432,   433,
+     434,   435,   436,   437,   438,   439,   440,   441,   442,   443,
+     444,   445,   446,   447,   448,   449,   450,   451,   452,   453,
+     454,   455,   456,   457,   458,   459,   460,   463,   464,   465,
+     466,   467,   469,   470,   471,   474,   477,   480,   483,   484,
+     485,   486,   487,   488,   491,   492,   495,   496,   507,   508,
+     509,   510,   513,   516,   521,   522,   525,   526,   529,   530,
+     533,   536,   539,   539,   569,   569,   575,   578,   578,   583,
+     584,   583,   594,   595,   596,   597,   600,   604,   612,   613,
+     614,   617,   618,   621,   622
 };
 #endif
 
@@ -694,22 +700,22 @@ static const char *const yytname[] =
   "$end", "error", "$undefined", "UNARY", "CASTREF", "VOID", "VAR",
   "POINT", "RECT", "ARRAY", "OBJECT", "INT", "THEENTITY",
   "THEENTITYWITHID", "FLOAT", "BLTIN", "BLTINNOARGS", "BLTINNOARGSORONE",
-  "BLTINONEARG", "BLTINARGLIST", "TWOWORDBUILTIN", "ID", "STRING",
-  "HANDLER", "SYMBOL", "ENDCLAUSE", "tPLAYACCEL", "tDOWN", "tELSE",
-  "tNLELSIF", "tEXIT", "tFRAME", "tGLOBAL", "tGO", "tIF", "tINTO", "tLOOP",
-  "tMACRO", "tMOVIE", "tNEXT", "tOF", "tPREVIOUS", "tPUT", "tREPEAT",
-  "tSET", "tTHEN", "tTO", "tWHEN", "tWITH", "tWHILE", "tNLELSE",
-  "tFACTORY", "tMETHOD", "tOPEN", "tPLAY", "tDONE", "tINSTANCE", "tGE",
-  "tLE", "tGT", "tLT", "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",
+  "BLTINONEARG", "BLTINARGLIST", "TWOWORDBUILTIN", "FBLTIN",
+  "FBLTINNOARGS", "FBLTINONEARG", "ID", "STRING", "HANDLER", "SYMBOL",
+  "ENDCLAUSE", "tPLAYACCEL", "tDOWN", "tELSE", "tNLELSIF", "tEXIT",
+  "tFRAME", "tGLOBAL", "tGO", "tIF", "tINTO", "tLOOP", "tMACRO", "tMOVIE",
+  "tNEXT", "tOF", "tPREVIOUS", "tPUT", "tREPEAT", "tSET", "tTHEN", "tTO",
+  "tWHEN", "tWITH", "tWHILE", "tNLELSE", "tFACTORY", "tMETHOD", "tOPEN",
+  "tPLAY", "tDONE", "tINSTANCE", "tGE", "tLE", "tGT", "tLT", "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",
+  "proc", "globallist", "instancelist", "gotofunc", "gotoframe",
   "gotomovie", "playfunc", "@1", "defn", "@2", "@3", "@4", "@5", "argdef",
   "argstore", "macro", "arglist", "nonemptyarglist", "nonemptyarglistnl", 0
 };
@@ -728,30 +734,30 @@ static const yytype_uint16 yytoknum[] =
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
      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,    91,    93,    44
+     335,   336,   337,   338,    61,    38,    43,    45,    42,    47,
+      37,    10,    40,    41,    62,    60,    91,    93,    44
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,    96,    97,    97,    97,    98,    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,   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,
-     126,   125,   128,   127,   127,   129,   127,   130,   131,   127,
-     132,   132,   132,   132,   133,   134,   135,   135,   135,   136,
-     136,   137,   137
+       0,    99,   100,   100,   100,   101,   102,   102,   102,   102,
+     103,   103,   103,   103,   103,   103,   103,   103,   103,   104,
+     104,   105,   105,   105,   105,   105,   105,   106,   106,   106,
+     106,   106,   106,   107,   107,   108,   108,   109,   109,   110,
+     111,   111,   112,   112,   112,   113,   114,   115,   116,   117,
+     118,   119,   119,   119,   120,   121,   121,   121,   121,   121,
+     121,   121,   121,   121,   121,   121,   121,   121,   121,   121,
+     121,   121,   121,   121,   121,   121,   121,   121,   121,   121,
+     121,   121,   121,   121,   121,   121,   121,   121,   121,   121,
+     121,   121,   121,   121,   121,   121,   121,   122,   122,   122,
+     122,   122,   122,   122,   122,   122,   122,   122,   122,   122,
+     122,   122,   122,   122,   123,   123,   124,   124,   125,   125,
+     125,   125,   125,   125,   126,   126,   127,   127,   128,   128,
+     128,   128,   129,   128,   131,   130,   130,   132,   130,   133,
+     134,   130,   135,   135,   135,   135,   136,   137,   138,   138,
+     138,   139,   139,   140,   140
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -763,16 +769,16 @@ static const yytype_uint8 yyr2[] =
        6,    10,    10,     0,     3,     2,     1,     2,     1,     6,
        1,     6,     1,     3,     3,     2,     3,     1,     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,     2,     2,     3,     3,     4,     4,     4,     6,
-       4,     6,     4,     6,     4,     6,     2,     1,     1,     2,
-       1,     2,     2,     2,     2,     1,     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,     3,     0,     8,     2,     0,     8,     0,     0,    10,
-       0,     1,     3,     4,     0,     2,     0,     1,     3,     1,
-       3,     2,     4
+       2,     4,     1,     1,     2,     1,     3,     3,     3,     3,
+       3,     3,     3,     3,     3,     3,     3,     3,     2,     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,     1,     2,     2,     1,     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,     3,     0,     8,     2,     0,     8,     0,
+       0,    10,     0,     1,     3,     4,     0,     2,     0,     1,
+       3,     1,     3,     2,     4
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -780,444 +786,438 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,    55,    62,     0,    56,    59,   105,     0,   146,
-       0,    61,    58,    57,   130,   100,     0,     0,    47,     0,
+       0,     0,    55,    63,     0,    56,   104,   107,     0,     0,
+       0,    59,     0,    62,    58,    57,   132,   101,     0,     0,
+      47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     146,     0,     3,    64,    21,     9,    22,     0,     0,     0,
-       0,    19,    20,    97,    98,     7,     8,     5,     4,    61,
-       0,    63,   104,   103,   147,     0,   106,   146,   146,   149,
-       0,   145,   146,    99,   112,   101,     0,   116,     0,   117,
-       0,   118,   123,   119,   121,   132,    96,     0,    45,     0,
-       0,     0,     0,   134,   135,   110,   126,   127,   129,   114,
-     102,    77,     0,     0,     0,     0,     0,   137,     0,    82,
-      83,     0,   147,     0,     1,     6,     0,     0,     0,     0,
-      42,    50,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   146,     0,
-     151,     0,   111,   147,     0,     0,   131,     0,   122,   125,
-       0,   120,    49,     0,     0,     0,    46,     0,     0,     0,
-       0,     0,    54,    49,     0,   128,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    49,     0,    84,
-      85,     0,     2,     0,    50,     0,     0,    49,     0,    26,
-      73,    74,    72,    75,    76,    69,    79,    80,    81,    78,
-      65,    66,    67,    68,    70,    71,   148,    60,   150,   113,
-     124,   140,    10,    11,    12,    17,    14,     0,     0,    16,
-      13,   140,   109,   115,    88,     0,    90,     0,    92,     0,
-      94,     0,    86,    87,   138,   107,   146,   148,    51,     0,
-      44,    51,     0,    43,   152,   141,     0,    18,    15,     0,
-       0,     0,     0,     0,   140,     0,    50,     0,     0,    50,
-      50,     0,   144,   144,    89,    91,    93,    95,     0,   108,
-      52,    53,     0,     0,    50,    49,    30,   142,     0,    51,
-      51,   144,    23,    50,    51,    27,    51,     0,    48,    49,
-      50,    38,     0,   143,   133,   136,    51,    51,    50,    50,
-      50,    40,    36,     0,     0,    37,    33,     0,     0,    50,
-       0,     0,    35,     0,     0,    50,    49,    50,    49,   139,
-       0,    24,    28,    29,    49,    31,     0,    32,     0,    25,
-      51,    34,    50,    50,    39,    41
+       0,     0,   148,     0,     3,    65,    21,     9,    22,     0,
+       0,     0,     0,    19,    20,    98,    99,     7,     8,     5,
+       4,    62,     0,    64,   106,   105,     0,   108,   148,    60,
+     148,   151,   147,   148,   100,   114,   102,     0,   118,     0,
+     119,     0,   120,   125,   121,   123,   134,    97,     0,    45,
+       0,     0,     0,     0,   136,   137,   112,   128,   129,   131,
+     116,   103,    78,     0,     0,     0,     0,     0,   139,     0,
+      83,    84,     0,   149,     0,     1,     6,     0,     0,     0,
+       0,    42,    50,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   148,
+       0,   153,     0,   113,   149,     0,     0,   133,     0,   124,
+     127,     0,   122,    49,     0,     0,     0,    46,     0,     0,
+       0,     0,     0,    54,    49,     0,   130,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    49,     0,
+      85,    86,     0,     2,     0,    50,     0,     0,    49,     0,
+      26,    74,    75,    73,    76,    77,    70,    80,    81,    82,
+      79,    66,    67,    68,    69,    71,    72,     0,    61,   152,
+     115,   126,   142,    10,    11,    12,    17,    14,     0,     0,
+      16,    13,   142,   111,   117,    89,     0,    91,     0,    93,
+       0,    95,     0,    87,    88,   140,   109,   148,   150,    51,
+       0,    44,    51,     0,    43,   154,   143,     0,    18,    15,
+       0,     0,     0,     0,     0,   142,     0,    50,     0,     0,
+      50,    50,     0,   146,   146,    90,    92,    94,    96,     0,
+     110,    52,    53,     0,     0,    50,    49,    30,   144,     0,
+      51,    51,   146,    23,    50,    51,    27,    51,     0,    48,
+      49,    50,    38,     0,   145,   135,   138,    51,    51,    50,
+      50,    50,    40,    36,     0,     0,    37,    33,     0,     0,
+      50,     0,     0,    35,     0,     0,    50,    49,    50,    49,
+     141,     0,    24,    28,    29,    49,    31,     0,    32,     0,
+      25,    51,    34,    50,    50,    39,    41
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    41,   270,    42,    43,    44,   271,    46,   317,   300,
-     301,   291,   302,   119,    47,    48,    49,   292,   211,   189,
-     256,    50,    51,    52,    75,   100,    53,    83,    84,    54,
-      72,    55,   152,   163,   177,   254,   246,   279,    56,   144,
-      71,    66
+      -1,    43,   271,    44,    45,    46,   272,    48,   318,   301,
+     302,   292,   303,   120,    49,    50,    51,   293,   212,   190,
+     257,    52,    53,    54,    76,   101,    55,    84,    85,    56,
+      73,    57,   153,   164,   178,   255,   247,   280,    58,   145,
+      72,    67
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -275
+#define YYPACT_NINF -264
 static const yytype_int16 yypact[] =
 {
-     289,   -65,  -275,  -275,   964,  -275,  -275,   964,   964,   964,
-      37,   372,  -275,  -275,  -275,    31,    61,   863,  -275,    72,
-     964,    38,    71,    75,    76,    77,   964,   929,    79,   964,
-     964,   964,   964,   964,   964,    81,    15,   964,   964,   964,
-     964,     2,  -275,  -275,  -275,  -275,  -275,    16,    22,  1030,
-     964,  1552,  -275,  -275,  -275,  -275,  -275,  -275,  -275,    17,
-     964,  1552,  1552,  1552,  1458,    12,  -275,   964,   964,  1324,
-      13,  -275,   964,  -275,  -275,    18,   964,  -275,   964,  -275,
-      78,  -275,  1552,    32,  -275,  -275,   340,    89,  -275,   -39,
-     964,   -32,    69,  -275,  -275,  1007,  -275,    32,  -275,  -275,
-      25,   -45,  1069,  1101,  1133,  1165,  1396,  -275,   100,   -45,
-     -45,  1490,  1552,    -6,  -275,   457,  1030,   964,  1030,    95,
-    1521,  1552,   964,   964,   964,   964,   964,   964,   964,   964,
-     964,   964,   964,   964,   964,   964,   964,   964,   964,   340,
-    -275,   964,    27,  1490,   -33,   964,    27,   120,  1552,  1552,
-     964,  -275,  -275,   122,   964,   964,  -275,   964,   964,   766,
-     964,   964,  -275,  -275,   964,  -275,   123,   964,   964,   964,
-     964,   964,   964,   964,   964,   964,   964,  -275,   -31,  -275,
-    -275,   964,  -275,    57,  1552,    58,  1427,   -65,   964,  -275,
-     164,   164,   164,   -45,   -45,   -45,  1552,   164,   164,   826,
-     206,   206,   -45,   -45,  1552,  1552,  1458,  -275,  1360,  -275,
-    1552,   128,  -275,  1552,  1552,  1552,  1552,   964,   964,  1552,
-    1552,   128,  1552,  -275,  1552,  1197,  1552,  1229,  1552,  1261,
-    1552,  1293,  1552,  1552,  -275,  -275,   964,  1552,  -275,    -2,
-    -275,  -275,   789,  1552,  -275,  -275,   -66,  1552,  1552,   -66,
-     964,   964,   964,   964,   128,   -30,   623,   104,   964,   623,
-    -275,   131,    59,    59,  1552,  1552,  1552,  1552,   -66,  -275,
-    -275,  -275,   132,   964,  1552,    -5,   -13,  -275,   139,  -275,
-    -275,    59,  -275,  1552,  -275,  -275,  -275,   124,  -275,  -275,
-     124,  -275,  1030,  -275,   623,   623,  -275,  -275,   623,   623,
-     124,   124,  -275,  1030,   789,  -275,   113,   121,   540,   623,
-     142,   154,  -275,   158,   141,  -275,  -275,  -275,  -275,  -275,
-     162,  -275,  -275,  -275,  -275,  -275,   789,  -275,   706,  -275,
-     706,  -275,  -275,   623,  -275,  -275
+     297,   -60,  -264,  -264,   907,  -264,  -264,   907,   907,   907,
+      34,  -264,   907,   984,  -264,  -264,  -264,    29,    67,   804,
+    -264,    71,   907,    46,    55,    75,    76,    84,   907,   881,
+      85,   907,   907,   907,   907,   907,   907,    89,    25,   907,
+     907,   907,   907,     2,  -264,  -264,  -264,  -264,  -264,    30,
+      37,  1010,   907,  1517,  -264,  -264,  -264,  -264,  -264,  -264,
+    -264,    31,   907,  1517,  1517,  1517,  1423,    43,   907,  1517,
+     907,  1517,    44,   907,  -264,  -264,    47,   907,  -264,   907,
+    -264,   103,  -264,  1517,   -16,  -264,  -264,  1043,   122,  -264,
+     -38,   907,   -34,   100,  -264,  -264,  1330,  -264,   -16,  -264,
+    -264,    51,   -56,  1075,  1107,  1139,  1171,  1361,  -264,   126,
+     -56,   -56,  1455,  1517,    17,  -264,   383,  1010,   907,  1010,
+     105,  1486,  1517,   907,   907,   907,   907,   907,   907,   907,
+     907,   907,   907,   907,   907,   907,   907,   907,   907,   907,
+    1043,  -264,   907,    53,  1455,   -32,   907,    53,   130,  1517,
+    1517,   907,  -264,  -264,   131,   907,   907,  -264,   907,   907,
+     704,   907,   907,  -264,  -264,   907,  -264,   137,   907,   907,
+     907,   907,   907,   907,   907,   907,   907,   907,  -264,   -12,
+    -264,  -264,   907,  -264,    72,  1517,    74,  1392,   -60,   907,
+    -264,    16,    16,    16,   -56,   -56,   -56,  1517,    16,    16,
+     120,   155,   155,   -56,   -56,  1517,  1517,  1423,  -264,  1517,
+    -264,  1517,   140,  -264,  1517,  1517,  1517,  1517,   907,   907,
+    1517,  1517,   140,  1517,  -264,  1517,  1203,  1517,  1235,  1517,
+    1267,  1517,  1299,  1517,  1517,  -264,  -264,   907,  1517,  -264,
+      -4,  -264,  -264,   727,  1517,  -264,  -264,    -2,  1517,  1517,
+      -2,   907,   907,   907,   907,   140,    14,   555,   119,   907,
+     555,  -264,   157,    81,    81,  1517,  1517,  1517,  1517,    -2,
+    -264,  -264,  -264,   156,   907,  1517,    -6,   -25,  -264,   161,
+    -264,  -264,    81,  -264,  1517,  -264,  -264,  -264,   162,  -264,
+    -264,   162,  -264,  1010,  -264,   555,   555,  -264,  -264,   555,
+     555,   162,   162,  -264,  1010,   727,  -264,   135,   145,   469,
+     555,   167,   169,  -264,   170,   152,  -264,  -264,  -264,  -264,
+    -264,   173,  -264,  -264,  -264,  -264,  -264,   727,  -264,   641,
+    -264,   641,  -264,  -264,   555,  -264,  -264
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -275,  -275,    14,    73,  -275,  -241,     0,  -275,  -275,  -275,
-     -86,  -247,  -108,  -112,  -275,  -275,  -275,  -274,  -111,   -75,
-    -185,  -275,     1,  -275,  -275,  -275,  -275,   166,   -16,  -275,
-    -275,  -275,  -275,  -275,  -275,  -275,  -218,  -210,  -275,     8,
-    -275,  -275
+    -264,  -264,    11,    86,  -264,  -240,     0,  -264,  -264,  -264,
+     -74,  -243,   -97,  -113,  -264,  -264,  -264,  -237,   -94,   -27,
+    -225,  -264,     1,  -264,  -264,  -264,  -264,   176,    -8,  -264,
+    -264,  -264,  -264,  -264,  -264,  -264,  -198,  -263,  -264,   -24,
+    -264,  -264
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -149
+#define YYTABLE_NINF -7
 static const yytype_int16 yytable[] =
 {
-      45,   260,   114,   249,   183,    61,   185,   157,    62,    63,
-      64,    98,    69,   303,   160,    58,   288,    65,    82,    70,
-     285,    86,    57,    57,   128,   257,   303,    95,    82,   261,
-     101,   102,   103,   104,   105,   106,   268,   289,   109,   110,
-     111,   112,   158,   305,   258,   286,   136,   137,   113,   161,
-     120,   121,   221,   280,   305,   115,   259,   207,    67,   235,
-     269,   139,   181,   315,   236,   181,   234,   151,   112,   143,
-      78,   296,    80,   112,    73,   142,   242,   148,   140,   149,
-     146,   165,    74,    89,    90,   331,    87,    88,   180,   181,
-      57,   159,    91,    85,   294,   295,    92,    93,    94,   298,
-      99,   299,   107,   117,   108,   116,   138,   141,   145,   239,
-     156,   308,   309,   147,   162,    45,   150,   120,   184,   186,
-     166,   178,   181,   190,   191,   192,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   112,
-     187,   209,   206,   212,   223,   333,   208,   238,   240,   245,
-     273,   210,   277,   288,   278,   213,   214,   282,   215,   216,
-     293,   219,   220,   316,   287,   222,   318,   321,   224,   225,
-     226,   227,   228,   229,   230,   231,   232,   233,   304,   322,
-     307,   272,   237,   323,   275,   276,   324,   329,   182,   243,
-     290,   314,   312,    97,     0,     0,     0,     0,     0,   284,
-       0,   241,     0,     0,     0,   326,     0,   328,   297,     0,
-       0,     0,     0,   330,     0,   306,     0,     0,   247,   248,
-     244,     0,     0,   310,   311,   313,     0,   125,   126,     0,
-     127,     0,     0,   128,   320,     0,     0,   112,     0,     0,
-     325,     0,   327,     0,   255,     0,   131,   132,   133,   134,
-     135,   264,   265,   266,   267,   136,   137,   334,   335,   274,
-     262,     0,     0,   263,     0,     0,     0,     0,     0,   125,
-     126,     0,   127,     0,   283,   128,     0,     0,     0,     0,
-       0,     0,   281,     0,     0,     0,     0,     0,     0,    -6,
-       1,   134,   135,   120,     0,     0,     0,   136,   137,     0,
-       2,     3,     4,     5,   120,     6,     7,     8,     9,    10,
-      11,    12,     0,    13,     0,    14,     0,     0,     0,    15,
-       0,    16,    17,    18,     0,     0,    19,     0,   332,     0,
-     332,    20,    21,    22,     0,     0,    23,     0,     0,     0,
-      24,    25,    26,    27,     0,    28,     0,     0,     0,     0,
-       0,     0,     0,     0,    29,     0,     0,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,     0,     0,    35,    36,
-       0,     0,    37,    38,     0,   153,     0,    -6,    39,     0,
-       0,     0,    40,     2,     3,     4,     5,     0,     6,     0,
-       0,     0,     0,    59,    12,     0,    13,   122,   123,     0,
-       0,     0,   124,   125,   126,     0,   127,   154,   155,   128,
-     129,   130,     0,     0,    60,     0,    22,     0,     0,     0,
-       0,     0,   131,   132,   133,   134,   135,     0,     0,     0,
-       0,   136,   137,     0,     0,     0,     0,    29,     0,     0,
-       0,     0,     0,     0,    30,    31,    32,    33,    34,     0,
-       0,     0,     0,     0,     0,    37,    38,     0,     0,     0,
-       0,    68,     0,     0,     0,    40,     0,  -146,     2,     3,
-       4,     5,     0,     6,     7,     8,     9,    10,    11,    12,
-       0,    13,     0,    14,     0,     0,     0,    15,     0,    16,
-      17,    18,     0,     0,    19,     0,     0,     0,     0,    20,
-      21,    22,     0,     0,    23,     0,     0,     0,    24,    25,
-      26,    27,     0,    28,     0,     0,     0,     0,     0,     0,
-       0,     0,    29,     0,     0,     0,     0,     0,     0,    30,
-      31,    32,    33,    34,     0,     0,    35,    36,     0,     0,
-      37,    38,     0,     0,     0,     0,    39,     0,     0,     0,
-      40,     2,     3,     4,     5,     0,     6,     7,     8,     9,
-      10,    59,    12,     0,    13,   319,    14,     0,     0,     0,
-      15,     0,    16,    17,    18,     0,     0,     0,     0,     0,
-       0,     0,    20,    21,    22,     0,     0,    23,     0,     0,
-       0,     0,     0,    26,    27,     0,    28,     0,     0,     0,
-       0,     0,     0,     0,     0,    29,     0,     0,     0,     0,
-       0,     0,    30,    31,    32,    33,    34,     0,     0,     0,
-      36,     0,     0,    37,    38,     0,     0,     0,    57,    39,
-       0,     0,     0,    40,     2,     3,     4,     5,     0,     6,
-       7,     8,     9,    10,    59,    12,     0,    13,     0,    14,
-       0,     0,     0,    15,     0,    16,    17,    18,     0,     0,
-       0,     0,     0,     0,     0,    20,    21,    22,     0,     0,
-      23,     0,     0,     0,     0,     0,    26,    27,     0,    28,
-       0,     0,     0,     0,     0,     0,     0,     0,    29,     0,
-       0,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-       0,     0,     0,    36,     0,     0,    37,    38,     0,     0,
-       0,    57,    39,     0,     0,     0,    40,     2,     3,     4,
-       5,     0,     6,     7,     8,     9,    10,    59,    12,     0,
-      13,     0,    14,     0,     0,     0,    15,     0,    16,    17,
-      18,     0,     0,     0,     0,     0,     0,     0,    20,    21,
-      22,     0,     0,    23,     0,     0,     0,     0,     0,    26,
-      27,     0,    28,     0,     0,     0,     0,     0,     0,     0,
-       0,    29,     0,     0,     0,     0,     0,     0,    30,    31,
-      32,    33,    34,     0,     0,     0,    36,     0,     0,    37,
-      38,     0,     0,     0,     0,    39,     0,     0,     0,    40,
+      47,   281,   115,   261,   184,    63,   186,   289,    64,    65,
+      66,   158,    60,    69,    71,   161,   129,   260,   114,   297,
+      83,    99,   286,    87,   250,    79,   258,    81,   290,    96,
+      83,    59,   102,   103,   104,   105,   106,   107,   137,   138,
+     110,   111,   112,   113,   143,   259,   159,   287,   306,   147,
+     162,   304,   121,   122,   116,   295,   296,   269,    68,   306,
+     299,   208,   300,   140,   304,   316,   182,    90,    91,   113,
+     222,   144,   309,   310,   113,    74,   152,   141,   149,    92,
+     150,   236,   126,   127,   235,   128,   237,   332,   129,    59,
+     166,    75,   160,    59,   243,    86,   262,    88,    89,    93,
+      94,   132,   133,   134,   135,   136,   334,   270,    95,   100,
+     137,   138,   182,   108,   181,   182,    47,   109,   121,   185,
+     187,   118,   117,   139,   191,   192,   193,   194,   195,   196,
+     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
+     113,   142,   146,   207,   151,   148,   157,   209,   163,   167,
+     179,   182,   211,   188,   210,   213,   214,   215,   240,   216,
+     217,   224,   220,   221,   246,   239,   223,   241,   274,   225,
+     226,   227,   228,   229,   230,   231,   232,   233,   234,   279,
+     308,   278,   288,   238,   283,   294,   126,   127,   317,   128,
+     244,   315,   129,   319,   289,   322,   305,   323,   324,   242,
+     325,   330,   183,   291,   313,    98,   133,   134,   135,   136,
+       0,     0,     0,   256,   137,   138,     0,     0,   245,   248,
+     249,   126,   127,   327,   128,   329,     0,   129,     0,     0,
+     273,   331,     0,   276,   277,     0,     0,     0,   113,     0,
+       0,     0,     0,   135,   136,     0,     0,     0,   285,   137,
+     138,     0,   265,   266,   267,   268,     0,   298,   263,     0,
+     275,   264,     0,     0,   307,     0,     0,     0,     0,     0,
+       0,     0,   311,   312,   314,   284,     0,     0,     0,     0,
+     282,     0,     0,   321,     0,     0,     0,     0,     0,   326,
+       0,   328,     0,     0,   121,     0,     0,    -6,     1,     0,
+       0,     0,     0,     0,     0,   121,   335,   336,     2,     3,
+       4,     5,     0,     6,     7,     8,     9,    10,     0,    11,
+      12,    13,    14,     0,    15,     0,    16,     0,     0,   333,
+      17,   333,    18,    19,    20,     0,     0,    21,     0,     0,
+       0,     0,    22,    23,    24,     0,     0,    25,     0,     0,
+       0,    26,    27,    28,    29,     0,    30,     0,     0,     0,
+       0,     0,     0,     0,     0,    31,     0,     0,     0,     0,
+       0,     0,    32,    33,    34,    35,    36,     0,     0,    37,
+      38,     0,     0,    39,    40,     0,     0,     0,    -6,    41,
+       0,     0,     0,    42,     2,     3,     4,     5,     0,     6,
+       7,     8,     9,    10,     0,    11,    12,    13,    14,     0,
+      15,     0,    16,     0,     0,     0,    17,     0,    18,    19,
+      20,     0,     0,    21,     0,     0,     0,     0,    22,    23,
+      24,     0,     0,    25,     0,     0,     0,    26,    27,    28,
+      29,     0,    30,     0,     0,     0,     0,     0,     0,     0,
+       0,    31,     0,     0,     0,     0,     0,     0,    32,    33,
+      34,    35,    36,     0,     0,    37,    38,     0,     0,    39,
+      40,     0,     0,     0,     0,    41,     0,     0,     0,    42,
        2,     3,     4,     5,     0,     6,     7,     8,     9,    10,
-      59,    12,   217,    13,     0,    14,     0,     0,     0,    15,
-       0,    16,    17,   122,   123,     0,     0,     0,   124,   125,
-     126,    20,   127,    22,     0,   128,   129,   130,     0,     0,
-       0,     0,    26,    27,     0,    28,     0,   218,   131,   132,
-     133,   134,   135,     0,    29,     0,     0,   136,   137,     0,
-       0,    30,    31,    32,    33,    34,     0,     0,     0,    36,
-       0,     0,    37,    38,     2,     3,     4,     5,    39,     6,
-       0,     0,    40,     0,    59,    12,     0,    13,     0,   125,
-     126,     0,   127,     0,    76,   128,     0,     0,     0,    77,
-       0,    78,    79,    80,    81,    60,     0,    22,     0,   132,
-     133,   134,   135,     0,     0,     0,     0,   136,   137,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    29,     0,
-       0,     0,     0,     0,     0,    30,    31,    32,    33,    34,
-       2,     3,     4,     5,     0,     6,    37,    38,     0,     0,
-      59,    12,    39,    13,     0,     0,    40,     0,     0,     0,
-      76,     0,     0,     0,     0,     0,     0,    78,     0,    80,
-       0,    60,     0,    22,     0,     2,     3,     4,     5,     0,
-       6,     0,     0,     0,    96,    59,    12,     0,    13,     0,
-       0,     0,     0,     0,    29,     0,     0,     0,     0,     0,
-       0,    30,    31,    32,    33,    34,    60,     0,    22,     0,
-       0,     0,    37,    38,     0,     0,     0,     0,    39,     0,
-       0,     0,    40,     0,     0,     0,     0,     0,     0,    29,
-       0,     0,     0,     0,     0,     0,    30,    31,    32,    33,
-      34,     2,     3,     4,     5,     0,     6,    37,    38,     0,
-       0,    59,    12,    39,    13,   164,     0,    40,     0,     0,
-       0,     0,     0,     0,   122,   123,     0,     0,     0,   124,
-     125,   126,    60,   127,    22,     0,   128,   129,   130,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   131,
-     132,   133,   134,   135,     0,    29,     0,     0,   136,   137,
-       0,     0,    30,    31,    32,    33,    34,     0,     0,   167,
-       0,     0,     0,    37,    38,   168,     0,     0,     0,   118,
-       0,     0,     0,    40,     0,     0,   122,   123,     0,     0,
-       0,   124,   125,   126,     0,   127,     0,     0,   128,   129,
-     130,   169,     0,     0,     0,     0,     0,   170,     0,     0,
-       0,   131,   132,   133,   134,   135,     0,     0,   122,   123,
-     136,   137,     0,   124,   125,   126,     0,   127,     0,     0,
-     128,   129,   130,   171,     0,     0,     0,     0,     0,   172,
-       0,     0,     0,   131,   132,   133,   134,   135,     0,     0,
-     122,   123,   136,   137,     0,   124,   125,   126,     0,   127,
-       0,     0,   128,   129,   130,   173,     0,     0,     0,     0,
-       0,   174,     0,     0,     0,   131,   132,   133,   134,   135,
-       0,     0,   122,   123,   136,   137,     0,   124,   125,   126,
-       0,   127,     0,     0,   128,   129,   130,   250,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   131,   132,   133,
-     134,   135,     0,     0,   122,   123,   136,   137,     0,   124,
-     125,   126,     0,   127,     0,     0,   128,   129,   130,   251,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   131,
-     132,   133,   134,   135,     0,     0,   122,   123,   136,   137,
-       0,   124,   125,   126,     0,   127,     0,     0,   128,   129,
-     130,   252,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   131,   132,   133,   134,   135,     0,     0,   122,   123,
-     136,   137,     0,   124,   125,   126,     0,   127,     0,     0,
-     128,   129,   130,   253,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   131,   132,   133,   134,   135,     0,     0,
-     122,   123,   136,   137,     0,   124,   125,   126,     0,   127,
-       0,     0,   128,   129,   130,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   131,   132,   133,   134,   135,
-       0,   122,   123,     0,   136,   137,   124,   125,   126,     0,
-     127,     0,     0,   128,   129,   130,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   131,   132,   133,   134,
-     135,     0,     0,     0,     0,   136,   137,   122,   123,  -147,
-       0,     0,   124,   125,   126,     0,   127,     0,     0,   128,
-     129,   130,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   131,   132,   133,   134,   135,     0,     0,     0,
-       0,   136,   137,   122,   123,  -148,     0,     0,   124,   125,
-     126,     0,   127,     0,     0,   128,   129,   130,     0,     0,
-       0,     0,     0,   175,   176,     0,     0,     0,   131,   132,
-     133,   134,   135,     0,   122,   123,     0,   136,   137,   124,
-     125,   126,     0,   127,     0,     0,   128,   129,   130,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   188,   131,
-     132,   133,   134,   135,     0,   122,   123,   179,   136,   137,
-     124,   125,   126,     0,   127,     0,     0,   128,   129,   130,
+       0,    11,    12,    61,    14,     0,    15,   320,    16,     0,
+       0,     0,    17,     0,    18,    19,    20,     0,     0,     0,
+       0,     0,     0,     0,    22,    23,    24,     0,     0,    25,
+       0,     0,     0,     0,     0,    28,    29,     0,    30,     0,
+       0,     0,     0,     0,     0,     0,     0,    31,     0,     0,
+       0,     0,     0,     0,    32,    33,    34,    35,    36,     0,
+       0,     0,    38,     0,     0,    39,    40,     0,     0,     0,
+      59,    41,     0,     0,     0,    42,     2,     3,     4,     5,
+       0,     6,     7,     8,     9,    10,     0,    11,    12,    61,
+      14,     0,    15,     0,    16,     0,     0,     0,    17,     0,
+      18,    19,    20,     0,     0,     0,     0,     0,     0,     0,
+      22,    23,    24,     0,     0,    25,     0,     0,     0,     0,
+       0,    28,    29,     0,    30,     0,     0,     0,     0,     0,
+       0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
+      32,    33,    34,    35,    36,     0,     0,     0,    38,     0,
+       0,    39,    40,     0,     0,     0,    59,    41,     0,     0,
+       0,    42,     2,     3,     4,     5,     0,     6,     7,     8,
+       9,    10,     0,    11,    12,    61,    14,     0,    15,     0,
+      16,     0,     0,     0,    17,     0,    18,    19,    20,     0,
+       0,     0,     0,     0,     0,     0,    22,    23,    24,     0,
+       0,    25,     0,     0,     0,     0,     0,    28,    29,     0,
+      30,     0,     0,     0,     0,     0,     0,     0,     0,    31,
+       0,     0,     0,     0,     0,     0,    32,    33,    34,    35,
+      36,     0,     0,     0,    38,     0,     0,    39,    40,     0,
+       0,     0,     0,    41,     0,     0,     0,    42,     2,     3,
+       4,     5,     0,     6,     7,     8,     9,    10,     0,    11,
+      12,    61,    14,   218,    15,     0,    16,     0,     0,     0,
+      17,     0,    18,    19,   123,   124,     0,     0,     0,   125,
+     126,   127,    22,   128,    24,     0,   129,   130,   131,     0,
+       0,     0,     0,    28,    29,     0,    30,     0,   219,   132,
+     133,   134,   135,   136,     0,    31,     0,     0,   137,   138,
+       0,     0,    32,    33,    34,    35,    36,     0,     0,     0,
+      38,     0,     0,    39,    40,     2,     3,     4,     5,    41,
+       0,     0,     0,    42,     0,     0,    11,    12,    61,    14,
+       0,    15,     0,     0,     0,     0,     0,     0,    77,     0,
+       0,     0,     0,    78,     0,    79,    80,    81,    82,    62,
+       0,    24,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    31,     0,     0,     0,     0,     0,     0,    32,
+      33,    34,    35,    36,     0,     0,     0,     0,     0,     0,
+      39,    40,     2,     3,     4,     5,    41,     0,     0,     0,
+      42,     0,     0,    11,    12,    61,    14,     0,    15,     0,
+       0,     0,     0,     0,     0,    77,     0,     0,     2,     3,
+       4,     5,    79,     0,    81,     0,    62,     0,    24,    11,
+      12,    61,    14,     0,    15,     0,     0,     0,     0,    97,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    31,
+       0,     0,    62,     0,    24,     0,    32,    33,    34,    35,
+      36,     0,     0,     0,     0,     0,     0,    39,    40,     0,
+       0,     0,     0,    41,     0,    31,     0,    42,     0,     0,
+       0,     0,    32,    33,    34,    35,    36,     0,     0,     0,
+       0,     0,     0,    39,    40,     2,     3,     4,     5,    41,
+       0,     0,     0,    42,     0,     0,    11,    12,    61,    14,
+       0,    15,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     2,     3,     4,     5,     0,     0,     0,     0,    62,
+       0,    24,    11,    12,    61,    14,     0,    15,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    31,     0,     0,    62,     0,    24,     0,    32,
+      33,    34,    35,    36,     0,     0,     0,     0,     0,     0,
+      39,    40,     0,     0,     0,     0,    70,     0,    31,     0,
+      42,   154,     0,     0,     0,    32,    33,    34,    35,    36,
+       0,     0,     0,     0,     0,     0,    39,    40,     0,     0,
+       0,     0,   119,   123,   124,     0,    42,     0,   125,   126,
+     127,     0,   128,   155,   156,   129,   130,   131,   168,     0,
+       0,     0,     0,     0,   169,     0,     0,     0,   132,   133,
+     134,   135,   136,     0,     0,   123,   124,   137,   138,     0,
+     125,   126,   127,     0,   128,     0,     0,   129,   130,   131,
+     170,     0,     0,     0,     0,     0,   171,     0,     0,     0,
+     132,   133,   134,   135,   136,     0,     0,   123,   124,   137,
+     138,     0,   125,   126,   127,     0,   128,     0,     0,   129,
+     130,   131,   172,     0,     0,     0,     0,     0,   173,     0,
+       0,     0,   132,   133,   134,   135,   136,     0,     0,   123,
+     124,   137,   138,     0,   125,   126,   127,     0,   128,     0,
+       0,   129,   130,   131,   174,     0,     0,     0,     0,     0,
+     175,     0,     0,     0,   132,   133,   134,   135,   136,     0,
+       0,   123,   124,   137,   138,     0,   125,   126,   127,     0,
+     128,     0,     0,   129,   130,   131,   251,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   132,   133,   134,   135,
+     136,     0,     0,   123,   124,   137,   138,     0,   125,   126,
+     127,     0,   128,     0,     0,   129,   130,   131,   252,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   132,   133,
+     134,   135,   136,     0,     0,   123,   124,   137,   138,     0,
+     125,   126,   127,     0,   128,     0,     0,   129,   130,   131,
+     253,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     132,   133,   134,   135,   136,     0,     0,   123,   124,   137,
+     138,     0,   125,   126,   127,     0,   128,     0,     0,   129,
+     130,   131,   254,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   132,   133,   134,   135,   136,     0,     0,   123,
+     124,   137,   138,     0,   125,   126,   127,     0,   128,     0,
+       0,   129,   130,   131,     0,     0,     0,     0,     0,     0,
+       0,   165,     0,     0,   132,   133,   134,   135,   136,     0,
+     123,   124,     0,   137,   138,   125,   126,   127,     0,   128,
+       0,     0,   129,   130,   131,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   132,   133,   134,   135,   136,
+       0,   123,   124,     0,   137,   138,   125,   126,   127,     0,
+     128,     0,     0,   129,   130,   131,     0,     0,     0,     0,
+       0,   176,   177,     0,     0,     0,   132,   133,   134,   135,
+     136,     0,   123,   124,     0,   137,   138,   125,   126,   127,
+       0,   128,     0,     0,   129,   130,   131,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   189,   132,   133,   134,
+     135,   136,     0,   123,   124,   180,   137,   138,   125,   126,
+     127,     0,   128,     0,     0,   129,   130,   131,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   132,   133,
+     134,   135,   136,     0,    59,   123,   124,   137,   138,     0,
+     125,   126,   127,     0,   128,     0,     0,   129,   130,   131,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     131,   132,   133,   134,   135,     0,    57,   122,   123,   136,
-     137,     0,   124,   125,   126,     0,   127,     0,     0,   128,
-     129,   130,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   131,   132,   133,   134,   135,     0,   122,   123,
-     179,   136,   137,   124,   125,   126,     0,   127,     0,     0,
-     128,   129,   130,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   188,   131,   132,   133,   134,   135,     0,   122,
-     123,     0,   136,   137,   124,   125,   126,     0,   127,     0,
-       0,   128,   129,   130,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   131,   132,   133,   134,   135,     0,
-       0,     0,     0,   136,   137
+     132,   133,   134,   135,   136,     0,   123,   124,   180,   137,
+     138,   125,   126,   127,     0,   128,     0,     0,   129,   130,
+     131,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     189,   132,   133,   134,   135,   136,     0,   123,   124,     0,
+     137,   138,   125,   126,   127,     0,   128,     0,     0,   129,
+     130,   131,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   132,   133,   134,   135,   136,     0,     0,     0,
+       0,   137,   138
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,   242,     0,   221,   116,     4,   118,    46,     7,     8,
-       9,    27,    11,   287,    46,     1,    29,     9,    17,    11,
-      25,    20,    88,    88,    69,    27,   300,    26,    27,    95,
-      29,    30,    31,    32,    33,    34,   254,    50,    37,    38,
-      39,    40,    81,   290,    46,    50,    91,    92,    40,    81,
-      49,    50,   163,   263,   301,    41,   241,    90,    21,    90,
-      90,    60,    95,   304,    95,    95,   177,    83,    67,    68,
-      38,   281,    40,    72,    43,    67,   187,    76,    64,    78,
-      72,    97,    21,    12,    13,   326,    48,    49,    94,    95,
-      88,    90,    21,    21,   279,   280,    21,    21,    21,   284,
-      21,   286,    21,    81,    89,    89,    89,    95,    95,   184,
-      21,   296,   297,    95,    45,   115,    38,   116,   117,   118,
-      95,    21,    95,   122,   123,   124,   125,   126,   127,   128,
+       0,   264,     0,   243,   117,     4,   119,    32,     7,     8,
+       9,    49,     1,    12,    13,    49,    72,   242,    42,   282,
+      19,    29,    28,    22,   222,    41,    30,    43,    53,    28,
+      29,    91,    31,    32,    33,    34,    35,    36,    94,    95,
+      39,    40,    41,    42,    68,    49,    84,    53,   291,    73,
+      84,   288,    51,    52,    43,   280,   281,   255,    24,   302,
+     285,    93,   287,    62,   301,   305,    98,    12,    13,    68,
+     164,    70,   297,   298,    73,    46,    84,    66,    77,    24,
+      79,    93,    66,    67,   178,    69,    98,   327,    72,    91,
+      98,    24,    91,    91,   188,    24,    98,    51,    52,    24,
+      24,    85,    86,    87,    88,    89,   331,    93,    24,    24,
+      94,    95,    98,    24,    97,    98,   116,    92,   117,   118,
+     119,    84,    92,    92,   123,   124,   125,   126,   127,   128,
      129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-      45,    21,   141,    21,    21,   330,   145,    90,    90,    21,
-      46,   150,    21,    29,    95,   154,   155,    25,   157,   158,
-      21,   160,   161,    50,   275,   164,    45,    25,   167,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   289,    25,
-     292,   256,   181,    25,   259,   260,    45,    25,   115,   188,
-     276,   303,   300,    27,    -1,    -1,    -1,    -1,    -1,   274,
-      -1,   187,    -1,    -1,    -1,   316,    -1,   318,   283,    -1,
-      -1,    -1,    -1,   324,    -1,   290,    -1,    -1,   217,   218,
-     206,    -1,    -1,   298,   299,   300,    -1,    63,    64,    -1,
-      66,    -1,    -1,    69,   309,    -1,    -1,   236,    -1,    -1,
-     315,    -1,   317,    -1,   236,    -1,    82,    83,    84,    85,
-      86,   250,   251,   252,   253,    91,    92,   332,   333,   258,
-     246,    -1,    -1,   249,    -1,    -1,    -1,    -1,    -1,    63,
-      64,    -1,    66,    -1,   273,    69,    -1,    -1,    -1,    -1,
-      -1,    -1,   268,    -1,    -1,    -1,    -1,    -1,    -1,     0,
-       1,    85,    86,   292,    -1,    -1,    -1,    91,    92,    -1,
-      11,    12,    13,    14,   303,    16,    17,    18,    19,    20,
-      21,    22,    -1,    24,    -1,    26,    -1,    -1,    -1,    30,
-      -1,    32,    33,    34,    -1,    -1,    37,    -1,   328,    -1,
-     330,    42,    43,    44,    -1,    -1,    47,    -1,    -1,    -1,
-      51,    52,    53,    54,    -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,    35,    -1,    88,    89,    -1,
-      -1,    -1,    93,    11,    12,    13,    14,    -1,    16,    -1,
-      -1,    -1,    -1,    21,    22,    -1,    24,    57,    58,    -1,
-      -1,    -1,    62,    63,    64,    -1,    66,    67,    68,    69,
-      70,    71,    -1,    -1,    42,    -1,    44,    -1,    -1,    -1,
-      -1,    -1,    82,    83,    84,    85,    86,    -1,    -1,    -1,
-      -1,    91,    92,    -1,    -1,    -1,    -1,    65,    -1,    -1,
-      -1,    -1,    -1,    -1,    72,    73,    74,    75,    76,    -1,
-      -1,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,    -1,
-      -1,    89,    -1,    -1,    -1,    93,    -1,    95,    11,    12,
-      13,    14,    -1,    16,    17,    18,    19,    20,    21,    22,
-      -1,    24,    -1,    26,    -1,    -1,    -1,    30,    -1,    32,
-      33,    34,    -1,    -1,    37,    -1,    -1,    -1,    -1,    42,
-      43,    44,    -1,    -1,    47,    -1,    -1,    -1,    51,    52,
-      53,    54,    -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,    26,    -1,    -1,    -1,
-      30,    -1,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    42,    43,    44,    -1,    -1,    47,    -1,    -1,
-      -1,    -1,    -1,    53,    54,    -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,    26,
-      -1,    -1,    -1,    30,    -1,    32,    33,    34,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    42,    43,    44,    -1,    -1,
-      47,    -1,    -1,    -1,    -1,    -1,    53,    54,    -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,    26,    -1,    -1,    -1,    30,    -1,    32,    33,
-      34,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    42,    43,
-      44,    -1,    -1,    47,    -1,    -1,    -1,    -1,    -1,    53,
-      54,    -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,    -1,    89,    -1,    -1,    -1,    93,
+     139,    98,    98,   142,    41,    98,    24,   146,    48,    98,
+      24,    98,   151,    48,    24,    24,   155,   156,   185,   158,
+     159,    24,   161,   162,    24,    93,   165,    93,    49,   168,
+     169,   170,   171,   172,   173,   174,   175,   176,   177,    98,
+     293,    24,   276,   182,    28,    24,    66,    67,    53,    69,
+     189,   304,    72,    48,    32,    28,   290,    28,    28,   188,
+      48,    28,   116,   277,   301,    29,    86,    87,    88,    89,
+      -1,    -1,    -1,   237,    94,    95,    -1,    -1,   207,   218,
+     219,    66,    67,   317,    69,   319,    -1,    72,    -1,    -1,
+     257,   325,    -1,   260,   261,    -1,    -1,    -1,   237,    -1,
+      -1,    -1,    -1,    88,    89,    -1,    -1,    -1,   275,    94,
+      95,    -1,   251,   252,   253,   254,    -1,   284,   247,    -1,
+     259,   250,    -1,    -1,   291,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   299,   300,   301,   274,    -1,    -1,    -1,    -1,
+     269,    -1,    -1,   310,    -1,    -1,    -1,    -1,    -1,   316,
+      -1,   318,    -1,    -1,   293,    -1,    -1,     0,     1,    -1,
+      -1,    -1,    -1,    -1,    -1,   304,   333,   334,    11,    12,
+      13,    14,    -1,    16,    17,    18,    19,    20,    -1,    22,
+      23,    24,    25,    -1,    27,    -1,    29,    -1,    -1,   329,
+      33,   331,    35,    36,    37,    -1,    -1,    40,    -1,    -1,
+      -1,    -1,    45,    46,    47,    -1,    -1,    50,    -1,    -1,
+      -1,    54,    55,    56,    57,    -1,    59,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,
+      -1,    -1,    75,    76,    77,    78,    79,    -1,    -1,    82,
+      83,    -1,    -1,    86,    87,    -1,    -1,    -1,    91,    92,
+      -1,    -1,    -1,    96,    11,    12,    13,    14,    -1,    16,
+      17,    18,    19,    20,    -1,    22,    23,    24,    25,    -1,
+      27,    -1,    29,    -1,    -1,    -1,    33,    -1,    35,    36,
+      37,    -1,    -1,    40,    -1,    -1,    -1,    -1,    45,    46,
+      47,    -1,    -1,    50,    -1,    -1,    -1,    54,    55,    56,
+      57,    -1,    59,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,    75,    76,
+      77,    78,    79,    -1,    -1,    82,    83,    -1,    -1,    86,
+      87,    -1,    -1,    -1,    -1,    92,    -1,    -1,    -1,    96,
       11,    12,    13,    14,    -1,    16,    17,    18,    19,    20,
-      21,    22,    46,    24,    -1,    26,    -1,    -1,    -1,    30,
-      -1,    32,    33,    57,    58,    -1,    -1,    -1,    62,    63,
-      64,    42,    66,    44,    -1,    69,    70,    71,    -1,    -1,
-      -1,    -1,    53,    54,    -1,    56,    -1,    81,    82,    83,
-      84,    85,    86,    -1,    65,    -1,    -1,    91,    92,    -1,
-      -1,    72,    73,    74,    75,    76,    -1,    -1,    -1,    80,
-      -1,    -1,    83,    84,    11,    12,    13,    14,    89,    16,
-      -1,    -1,    93,    -1,    21,    22,    -1,    24,    -1,    63,
-      64,    -1,    66,    -1,    31,    69,    -1,    -1,    -1,    36,
-      -1,    38,    39,    40,    41,    42,    -1,    44,    -1,    83,
-      84,    85,    86,    -1,    -1,    -1,    -1,    91,    92,    -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,    -1,
-      31,    -1,    -1,    -1,    -1,    -1,    -1,    38,    -1,    40,
-      -1,    42,    -1,    44,    -1,    11,    12,    13,    14,    -1,
-      16,    -1,    -1,    -1,    55,    21,    22,    -1,    24,    -1,
-      -1,    -1,    -1,    -1,    65,    -1,    -1,    -1,    -1,    -1,
-      -1,    72,    73,    74,    75,    76,    42,    -1,    44,    -1,
-      -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    89,    -1,
-      -1,    -1,    93,    -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,    48,    -1,    93,    -1,    -1,
-      -1,    -1,    -1,    -1,    57,    58,    -1,    -1,    -1,    62,
-      63,    64,    42,    66,    44,    -1,    69,    70,    71,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
-      83,    84,    85,    86,    -1,    65,    -1,    -1,    91,    92,
-      -1,    -1,    72,    73,    74,    75,    76,    -1,    -1,    40,
-      -1,    -1,    -1,    83,    84,    46,    -1,    -1,    -1,    89,
-      -1,    -1,    -1,    93,    -1,    -1,    57,    58,    -1,    -1,
-      -1,    62,    63,    64,    -1,    66,    -1,    -1,    69,    70,
-      71,    40,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
-      -1,    82,    83,    84,    85,    86,    -1,    -1,    57,    58,
-      91,    92,    -1,    62,    63,    64,    -1,    66,    -1,    -1,
-      69,    70,    71,    40,    -1,    -1,    -1,    -1,    -1,    46,
-      -1,    -1,    -1,    82,    83,    84,    85,    86,    -1,    -1,
-      57,    58,    91,    92,    -1,    62,    63,    64,    -1,    66,
-      -1,    -1,    69,    70,    71,    40,    -1,    -1,    -1,    -1,
-      -1,    46,    -1,    -1,    -1,    82,    83,    84,    85,    86,
-      -1,    -1,    57,    58,    91,    92,    -1,    62,    63,    64,
-      -1,    66,    -1,    -1,    69,    70,    71,    40,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,    83,    84,
-      85,    86,    -1,    -1,    57,    58,    91,    92,    -1,    62,
-      63,    64,    -1,    66,    -1,    -1,    69,    70,    71,    40,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,
-      83,    84,    85,    86,    -1,    -1,    57,    58,    91,    92,
-      -1,    62,    63,    64,    -1,    66,    -1,    -1,    69,    70,
-      71,    40,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    82,    83,    84,    85,    86,    -1,    -1,    57,    58,
-      91,    92,    -1,    62,    63,    64,    -1,    66,    -1,    -1,
-      69,    70,    71,    40,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    82,    83,    84,    85,    86,    -1,    -1,
-      57,    58,    91,    92,    -1,    62,    63,    64,    -1,    66,
-      -1,    -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,    -1,    -1,    69,    70,    71,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    82,    83,    84,    85,
-      86,    -1,    -1,    -1,    -1,    91,    92,    57,    58,    95,
-      -1,    -1,    62,    63,    64,    -1,    66,    -1,    -1,    69,
-      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    82,    83,    84,    85,    86,    -1,    -1,    -1,
-      -1,    91,    92,    57,    58,    95,    -1,    -1,    62,    63,
-      64,    -1,    66,    -1,    -1,    69,    70,    71,    -1,    -1,
-      -1,    -1,    -1,    77,    78,    -1,    -1,    -1,    82,    83,
-      84,    85,    86,    -1,    57,    58,    -1,    91,    92,    62,
-      63,    64,    -1,    66,    -1,    -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,    -1,    -1,    69,    70,    71,
+      -1,    22,    23,    24,    25,    -1,    27,    28,    29,    -1,
+      -1,    -1,    33,    -1,    35,    36,    37,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    45,    46,    47,    -1,    -1,    50,
+      -1,    -1,    -1,    -1,    -1,    56,    57,    -1,    59,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,
+      -1,    -1,    -1,    -1,    75,    76,    77,    78,    79,    -1,
+      -1,    -1,    83,    -1,    -1,    86,    87,    -1,    -1,    -1,
+      91,    92,    -1,    -1,    -1,    96,    11,    12,    13,    14,
+      -1,    16,    17,    18,    19,    20,    -1,    22,    23,    24,
+      25,    -1,    27,    -1,    29,    -1,    -1,    -1,    33,    -1,
+      35,    36,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      45,    46,    47,    -1,    -1,    50,    -1,    -1,    -1,    -1,
+      -1,    56,    57,    -1,    59,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,
+      75,    76,    77,    78,    79,    -1,    -1,    -1,    83,    -1,
+      -1,    86,    87,    -1,    -1,    -1,    91,    92,    -1,    -1,
+      -1,    96,    11,    12,    13,    14,    -1,    16,    17,    18,
+      19,    20,    -1,    22,    23,    24,    25,    -1,    27,    -1,
+      29,    -1,    -1,    -1,    33,    -1,    35,    36,    37,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    -1,
+      -1,    50,    -1,    -1,    -1,    -1,    -1,    56,    57,    -1,
+      59,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,
+      -1,    -1,    -1,    -1,    -1,    -1,    75,    76,    77,    78,
+      79,    -1,    -1,    -1,    83,    -1,    -1,    86,    87,    -1,
+      -1,    -1,    -1,    92,    -1,    -1,    -1,    96,    11,    12,
+      13,    14,    -1,    16,    17,    18,    19,    20,    -1,    22,
+      23,    24,    25,    49,    27,    -1,    29,    -1,    -1,    -1,
+      33,    -1,    35,    36,    60,    61,    -1,    -1,    -1,    65,
+      66,    67,    45,    69,    47,    -1,    72,    73,    74,    -1,
+      -1,    -1,    -1,    56,    57,    -1,    59,    -1,    84,    85,
+      86,    87,    88,    89,    -1,    68,    -1,    -1,    94,    95,
+      -1,    -1,    75,    76,    77,    78,    79,    -1,    -1,    -1,
+      83,    -1,    -1,    86,    87,    11,    12,    13,    14,    92,
+      -1,    -1,    -1,    96,    -1,    -1,    22,    23,    24,    25,
+      -1,    27,    -1,    -1,    -1,    -1,    -1,    -1,    34,    -1,
+      -1,    -1,    -1,    39,    -1,    41,    42,    43,    44,    45,
+      -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,    75,
+      76,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,
+      86,    87,    11,    12,    13,    14,    92,    -1,    -1,    -1,
+      96,    -1,    -1,    22,    23,    24,    25,    -1,    27,    -1,
+      -1,    -1,    -1,    -1,    -1,    34,    -1,    -1,    11,    12,
+      13,    14,    41,    -1,    43,    -1,    45,    -1,    47,    22,
+      23,    24,    25,    -1,    27,    -1,    -1,    -1,    -1,    58,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,
+      -1,    -1,    45,    -1,    47,    -1,    75,    76,    77,    78,
+      79,    -1,    -1,    -1,    -1,    -1,    -1,    86,    87,    -1,
+      -1,    -1,    -1,    92,    -1,    68,    -1,    96,    -1,    -1,
+      -1,    -1,    75,    76,    77,    78,    79,    -1,    -1,    -1,
+      -1,    -1,    -1,    86,    87,    11,    12,    13,    14,    92,
+      -1,    -1,    -1,    96,    -1,    -1,    22,    23,    24,    25,
+      -1,    27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    11,    12,    13,    14,    -1,    -1,    -1,    -1,    45,
+      -1,    47,    22,    23,    24,    25,    -1,    27,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    68,    -1,    -1,    45,    -1,    47,    -1,    75,
+      76,    77,    78,    79,    -1,    -1,    -1,    -1,    -1,    -1,
+      86,    87,    -1,    -1,    -1,    -1,    92,    -1,    68,    -1,
+      96,    38,    -1,    -1,    -1,    75,    76,    77,    78,    79,
+      -1,    -1,    -1,    -1,    -1,    -1,    86,    87,    -1,    -1,
+      -1,    -1,    92,    60,    61,    -1,    96,    -1,    65,    66,
+      67,    -1,    69,    70,    71,    72,    73,    74,    43,    -1,
+      -1,    -1,    -1,    -1,    49,    -1,    -1,    -1,    85,    86,
+      87,    88,    89,    -1,    -1,    60,    61,    94,    95,    -1,
+      65,    66,    67,    -1,    69,    -1,    -1,    72,    73,    74,
+      43,    -1,    -1,    -1,    -1,    -1,    49,    -1,    -1,    -1,
+      85,    86,    87,    88,    89,    -1,    -1,    60,    61,    94,
+      95,    -1,    65,    66,    67,    -1,    69,    -1,    -1,    72,
+      73,    74,    43,    -1,    -1,    -1,    -1,    -1,    49,    -1,
+      -1,    -1,    85,    86,    87,    88,    89,    -1,    -1,    60,
+      61,    94,    95,    -1,    65,    66,    67,    -1,    69,    -1,
+      -1,    72,    73,    74,    43,    -1,    -1,    -1,    -1,    -1,
+      49,    -1,    -1,    -1,    85,    86,    87,    88,    89,    -1,
+      -1,    60,    61,    94,    95,    -1,    65,    66,    67,    -1,
+      69,    -1,    -1,    72,    73,    74,    43,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    85,    86,    87,    88,
+      89,    -1,    -1,    60,    61,    94,    95,    -1,    65,    66,
+      67,    -1,    69,    -1,    -1,    72,    73,    74,    43,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    85,    86,
+      87,    88,    89,    -1,    -1,    60,    61,    94,    95,    -1,
+      65,    66,    67,    -1,    69,    -1,    -1,    72,    73,    74,
+      43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      85,    86,    87,    88,    89,    -1,    -1,    60,    61,    94,
+      95,    -1,    65,    66,    67,    -1,    69,    -1,    -1,    72,
+      73,    74,    43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    85,    86,    87,    88,    89,    -1,    -1,    60,
+      61,    94,    95,    -1,    65,    66,    67,    -1,    69,    -1,
+      -1,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    51,    -1,    -1,    85,    86,    87,    88,    89,    -1,
+      60,    61,    -1,    94,    95,    65,    66,    67,    -1,    69,
+      -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    85,    86,    87,    88,    89,
+      -1,    60,    61,    -1,    94,    95,    65,    66,    67,    -1,
+      69,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,
+      -1,    80,    81,    -1,    -1,    -1,    85,    86,    87,    88,
+      89,    -1,    60,    61,    -1,    94,    95,    65,    66,    67,
+      -1,    69,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    84,    85,    86,    87,
+      88,    89,    -1,    60,    61,    93,    94,    95,    65,    66,
+      67,    -1,    69,    -1,    -1,    72,    73,    74,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    85,    86,
+      87,    88,    89,    -1,    91,    60,    61,    94,    95,    -1,
+      65,    66,    67,    -1,    69,    -1,    -1,    72,    73,    74,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      82,    83,    84,    85,    86,    -1,    88,    57,    58,    91,
-      92,    -1,    62,    63,    64,    -1,    66,    -1,    -1,    69,
-      70,    71,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    82,    83,    84,    85,    86,    -1,    57,    58,
-      90,    91,    92,    62,    63,    64,    -1,    66,    -1,    -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,    -1,
-      -1,    69,    70,    71,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    82,    83,    84,    85,    86,    -1,
-      -1,    -1,    -1,    91,    92
+      85,    86,    87,    88,    89,    -1,    60,    61,    93,    94,
+      95,    65,    66,    67,    -1,    69,    -1,    -1,    72,    73,
+      74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      84,    85,    86,    87,    88,    89,    -1,    60,    61,    -1,
+      94,    95,    65,    66,    67,    -1,    69,    -1,    -1,    72,
+      73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    85,    86,    87,    88,    89,    -1,    -1,    -1,
+      -1,    94,    95
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1225,39 +1225,39 @@ static const yytype_int16 yycheck[] =
 static const yytype_uint8 yystos[] =
 {
        0,     1,    11,    12,    13,    14,    16,    17,    18,    19,
-      20,    21,    22,    24,    26,    30,    32,    33,    34,    37,
-      42,    43,    44,    47,    51,    52,    53,    54,    56,    65,
-      72,    73,    74,    75,    76,    79,    80,    83,    84,    89,
-      93,    97,    99,   100,   101,   102,   103,   110,   111,   112,
-     117,   118,   119,   122,   125,   127,   134,    88,    98,    21,
-      42,   118,   118,   118,   118,   135,   137,    21,    89,   118,
-     135,   136,   126,    43,    21,   120,    31,    36,    38,    39,
-      40,    41,   118,   123,   124,    21,   118,    48,    49,    12,
-      13,    21,    21,    21,    21,   118,    55,   123,   124,    21,
-     121,   118,   118,   118,   118,   118,   118,    21,    89,   118,
-     118,   118,   118,   135,     0,    98,    89,    81,    89,   109,
-     118,   118,    57,    58,    62,    63,    64,    66,    69,    70,
-      71,    82,    83,    84,    85,    86,    91,    92,    89,   118,
-      98,    95,   135,   118,   135,    95,   135,    95,   118,   118,
-      38,   124,   128,    35,    67,    68,    21,    46,    81,   118,
-      46,    81,    45,   129,    48,   124,    95,    40,    46,    40,
-      46,    40,    46,    40,    46,    77,    78,   130,    21,    90,
-      94,    95,    99,   109,   118,   109,   118,    45,    81,   115,
-     118,   118,   118,   118,   118,   118,   118,   118,   118,   118,
-     118,   118,   118,   118,   118,   118,   118,    90,   118,    21,
-     118,   114,    21,   118,   118,   118,   118,    46,    81,   118,
-     118,   114,   118,    21,   118,   118,   118,   118,   118,   118,
-     118,   118,   118,   118,   114,    90,    95,   118,    90,   115,
-      90,    98,   114,   118,    98,    21,   132,   118,   118,   132,
-      40,    40,    40,    40,   131,   135,   116,    27,    46,   116,
-     101,    95,    98,    98,   118,   118,   118,   118,   132,    90,
-      98,   102,   115,    46,   118,   115,   115,    21,    95,   133,
-     133,    98,    25,   118,   115,    25,    50,   114,    29,    50,
-     106,   107,   113,    21,   116,   116,   133,   115,   116,   116,
-     105,   106,   108,   113,   114,   107,   115,   109,   116,   116,
-     115,   115,   108,   115,   109,   101,    50,   104,    45,    25,
-     115,    25,    25,    25,    45,   115,   114,   115,   114,    25,
-     114,   101,   102,   116,   115,   115
+      20,    22,    23,    24,    25,    27,    29,    33,    35,    36,
+      37,    40,    45,    46,    47,    50,    54,    55,    56,    57,
+      59,    68,    75,    76,    77,    78,    79,    82,    83,    86,
+      87,    92,    96,   100,   102,   103,   104,   105,   106,   113,
+     114,   115,   120,   121,   122,   125,   128,   130,   137,    91,
+     101,    24,    45,   121,   121,   121,   121,   140,    24,   121,
+      92,   121,   139,   129,    46,    24,   123,    34,    39,    41,
+      42,    43,    44,   121,   126,   127,    24,   121,    51,    52,
+      12,    13,    24,    24,    24,    24,   121,    58,   126,   127,
+      24,   124,   121,   121,   121,   121,   121,   121,    24,    92,
+     121,   121,   121,   121,   138,     0,   101,    92,    84,    92,
+     112,   121,   121,    60,    61,    65,    66,    67,    69,    72,
+      73,    74,    85,    86,    87,    88,    89,    94,    95,    92,
+     121,   101,    98,   138,   121,   138,    98,   138,    98,   121,
+     121,    41,   127,   131,    38,    70,    71,    24,    49,    84,
+     121,    49,    84,    48,   132,    51,   127,    98,    43,    49,
+      43,    49,    43,    49,    43,    49,    80,    81,   133,    24,
+      93,    97,    98,   102,   112,   121,   112,   121,    48,    84,
+     118,   121,   121,   121,   121,   121,   121,   121,   121,   121,
+     121,   121,   121,   121,   121,   121,   121,   121,    93,   121,
+      24,   121,   117,    24,   121,   121,   121,   121,    49,    84,
+     121,   121,   117,   121,    24,   121,   121,   121,   121,   121,
+     121,   121,   121,   121,   121,   117,    93,    98,   121,    93,
+     118,    93,   101,   117,   121,   101,    24,   135,   121,   121,
+     135,    43,    43,    43,    43,   134,   138,   119,    30,    49,
+     119,   104,    98,   101,   101,   121,   121,   121,   121,   135,
+      93,   101,   105,   118,    49,   121,   118,   118,    24,    98,
+     136,   136,   101,    28,   121,   118,    28,    53,   117,    32,
+      53,   109,   110,   116,    24,   119,   119,   136,   118,   119,
+     119,   108,   109,   111,   116,   117,   110,   118,   112,   119,
+     119,   118,   118,   111,   118,   112,   104,    53,   107,    48,
+      28,   118,    28,    28,    28,    48,   118,   117,   118,   117,
+      28,   117,   104,   105,   119,   118,   118
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2072,12 +2072,12 @@ yyreduce:
   switch (yyn)
     {
         case 4:
-#line 119 "engines/director/lingo/lingo-gr.y"
+#line 120 "engines/director/lingo/lingo-gr.y"
     { yyerrok; ;}
     break;
 
   case 5:
-#line 122 "engines/director/lingo/lingo-gr.y"
+#line 123 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->_linenumber++;
 		g_lingo->_colnumber = 1;
@@ -2085,7 +2085,7 @@ yyreduce:
     break;
 
   case 10:
-#line 133 "engines/director/lingo/lingo-gr.y"
+#line 134 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_varpush);
 		g_lingo->codeString((yyvsp[(4) - (4)].s)->c_str());
@@ -2095,17 +2095,17 @@ yyreduce:
     break;
 
   case 11:
-#line 139 "engines/director/lingo/lingo-gr.y"
+#line 140 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->code1(g_lingo->c_after); ;}
     break;
 
   case 12:
-#line 140 "engines/director/lingo/lingo-gr.y"
+#line 141 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->code1(g_lingo->c_before); ;}
     break;
 
   case 13:
-#line 141 "engines/director/lingo/lingo-gr.y"
+#line 142 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_varpush);
 		g_lingo->codeString((yyvsp[(2) - (4)].s)->c_str());
@@ -2115,7 +2115,7 @@ yyreduce:
     break;
 
   case 14:
-#line 147 "engines/director/lingo/lingo-gr.y"
+#line 148 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(0); // Put dummy id
 		g_lingo->code1(g_lingo->c_theentityassign);
@@ -2127,7 +2127,7 @@ yyreduce:
     break;
 
   case 15:
-#line 155 "engines/director/lingo/lingo-gr.y"
+#line 156 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_swap);
 		g_lingo->code1(g_lingo->c_theentityassign);
@@ -2139,7 +2139,7 @@ yyreduce:
     break;
 
   case 16:
-#line 163 "engines/director/lingo/lingo-gr.y"
+#line 164 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_varpush);
 		g_lingo->codeString((yyvsp[(2) - (4)].s)->c_str());
@@ -2149,7 +2149,7 @@ yyreduce:
     break;
 
   case 17:
-#line 169 "engines/director/lingo/lingo-gr.y"
+#line 170 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(0); // Put dummy id
 		g_lingo->code1(g_lingo->c_theentityassign);
@@ -2161,7 +2161,7 @@ yyreduce:
     break;
 
   case 18:
-#line 177 "engines/director/lingo/lingo-gr.y"
+#line 178 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_swap);
 		g_lingo->code1(g_lingo->c_theentityassign);
@@ -2173,12 +2173,12 @@ yyreduce:
     break;
 
   case 19:
-#line 187 "engines/director/lingo/lingo-gr.y"
+#line 188 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_xpop); ;}
     break;
 
   case 23:
-#line 197 "engines/director/lingo/lingo-gr.y"
+#line 198 "engines/director/lingo/lingo-gr.y"
     {
 		inst body = 0, end = 0;
 		WRITE_UINT32(&body, (yyvsp[(5) - (7)].code));
@@ -2190,7 +2190,7 @@ yyreduce:
     break;
 
   case 24:
-#line 210 "engines/director/lingo/lingo-gr.y"
+#line 211 "engines/director/lingo/lingo-gr.y"
     {
 		inst init = 0, finish = 0, body = 0, end = 0, inc = 0;
 		WRITE_UINT32(&init, (yyvsp[(3) - (10)].code));
@@ -2208,7 +2208,7 @@ yyreduce:
     break;
 
   case 25:
-#line 228 "engines/director/lingo/lingo-gr.y"
+#line 229 "engines/director/lingo/lingo-gr.y"
     {
 		inst init = 0, finish = 0, body = 0, end = 0, inc = 0;
 		WRITE_UINT32(&init, (yyvsp[(3) - (11)].code));
@@ -2226,7 +2226,7 @@ yyreduce:
     break;
 
   case 26:
-#line 242 "engines/director/lingo/lingo-gr.y"
+#line 243 "engines/director/lingo/lingo-gr.y"
     {
 			inst end = 0;
 			WRITE_UINT32(&end, (yyvsp[(3) - (3)].code));
@@ -2236,7 +2236,7 @@ yyreduce:
     break;
 
   case 27:
-#line 250 "engines/director/lingo/lingo-gr.y"
+#line 251 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(5) - (7)].code));
@@ -2250,7 +2250,7 @@ yyreduce:
     break;
 
   case 28:
-#line 260 "engines/director/lingo/lingo-gr.y"
+#line 261 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(5) - (10)].code));
@@ -2266,7 +2266,7 @@ yyreduce:
     break;
 
   case 29:
-#line 272 "engines/director/lingo/lingo-gr.y"
+#line 273 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(5) - (10)].code));
@@ -2282,7 +2282,7 @@ yyreduce:
     break;
 
   case 30:
-#line 284 "engines/director/lingo/lingo-gr.y"
+#line 285 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (6)].code));
@@ -2296,7 +2296,7 @@ yyreduce:
     break;
 
   case 31:
-#line 294 "engines/director/lingo/lingo-gr.y"
+#line 295 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (10)].code));
@@ -2310,7 +2310,7 @@ yyreduce:
     break;
 
   case 32:
-#line 304 "engines/director/lingo/lingo-gr.y"
+#line 305 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (10)].code));
@@ -2324,17 +2324,17 @@ yyreduce:
     break;
 
   case 33:
-#line 316 "engines/director/lingo/lingo-gr.y"
+#line 317 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = 0; ;}
     break;
 
   case 34:
-#line 317 "engines/director/lingo/lingo-gr.y"
+#line 318 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (3)].code); ;}
     break;
 
   case 39:
-#line 328 "engines/director/lingo/lingo-gr.y"
+#line 329 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (6)].code));
@@ -2344,7 +2344,7 @@ yyreduce:
     break;
 
   case 41:
-#line 337 "engines/director/lingo/lingo-gr.y"
+#line 338 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0;
 		WRITE_UINT32(&then, (yyvsp[(5) - (6)].code));
@@ -2354,22 +2354,22 @@ yyreduce:
     break;
 
   case 42:
-#line 345 "engines/director/lingo/lingo-gr.y"
+#line 346 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(STOP); ;}
     break;
 
   case 43:
-#line 346 "engines/director/lingo/lingo-gr.y"
+#line 347 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code2(g_lingo->c_eq, STOP); ;}
     break;
 
   case 45:
-#line 350 "engines/director/lingo/lingo-gr.y"
+#line 351 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->code3(g_lingo->c_repeatwhilecode, STOP, STOP); ;}
     break;
 
   case 46:
-#line 353 "engines/director/lingo/lingo-gr.y"
+#line 354 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code3(g_lingo->c_repeatwithcode, STOP, STOP);
 		g_lingo->code3(STOP, STOP, STOP);
@@ -2378,7 +2378,7 @@ yyreduce:
     break;
 
   case 47:
-#line 360 "engines/director/lingo/lingo-gr.y"
+#line 361 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_ifcode);
 		g_lingo->code3(STOP, STOP, STOP);
@@ -2387,7 +2387,7 @@ yyreduce:
     break;
 
   case 48:
-#line 367 "engines/director/lingo/lingo-gr.y"
+#line 368 "engines/director/lingo/lingo-gr.y"
     {
 		inst skipEnd;
 		WRITE_UINT32(&skipEnd, 1); // We have to skip end to avoid multiple executions
@@ -2397,22 +2397,22 @@ yyreduce:
     break;
 
   case 49:
-#line 375 "engines/director/lingo/lingo-gr.y"
+#line 376 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->_currentScript->size(); ;}
     break;
 
   case 50:
-#line 378 "engines/director/lingo/lingo-gr.y"
+#line 379 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); ;}
     break;
 
   case 51:
-#line 381 "engines/director/lingo/lingo-gr.y"
+#line 382 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->_currentScript->size(); ;}
     break;
 
   case 54:
-#line 386 "engines/director/lingo/lingo-gr.y"
+#line 387 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_whencode);
 		g_lingo->code1(STOP);
@@ -2421,55 +2421,62 @@ yyreduce:
     break;
 
   case 55:
-#line 392 "engines/director/lingo/lingo-gr.y"
+#line 393 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->codeConst((yyvsp[(1) - (1)].i)); ;}
     break;
 
   case 56:
-#line 393 "engines/director/lingo/lingo-gr.y"
+#line 394 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_fconstpush);
 		g_lingo->codeFloat((yyvsp[(1) - (1)].f)); ;}
     break;
 
   case 57:
-#line 396 "engines/director/lingo/lingo-gr.y"
+#line 397 "engines/director/lingo/lingo-gr.y"
     {											// D3
 		(yyval.code) = g_lingo->code1(g_lingo->c_symbolpush);
 		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); ;}
     break;
 
   case 58:
-#line 399 "engines/director/lingo/lingo-gr.y"
+#line 400 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_stringpush);
 		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); ;}
     break;
 
   case 59:
-#line 402 "engines/director/lingo/lingo-gr.y"
+#line 403 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->_builtins[*(yyvsp[(1) - (1)].s)]->u.func);
 		delete (yyvsp[(1) - (1)].s); ;}
     break;
 
   case 60:
-#line 405 "engines/director/lingo/lingo-gr.y"
+#line 406 "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 61:
+#line 409 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[(1) - (4)].s), (yyvsp[(3) - (4)].narg));
 		delete (yyvsp[(1) - (4)].s); ;}
     break;
 
-  case 61:
-#line 408 "engines/director/lingo/lingo-gr.y"
+  case 62:
+#line 412 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_eval);
 		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str());
 		delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 62:
-#line 412 "engines/director/lingo/lingo-gr.y"
+  case 63:
+#line 416 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->codeConst(0); // Put dummy id
 		g_lingo->code1(g_lingo->c_theentitypush);
@@ -2479,8 +2486,8 @@ yyreduce:
 		g_lingo->code2(e, f); ;}
     break;
 
-  case 63:
-#line 419 "engines/director/lingo/lingo-gr.y"
+  case 64:
+#line 423 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_theentitypush);
 		inst e = 0, f = 0;
@@ -2489,329 +2496,336 @@ yyreduce:
 		g_lingo->code2(e, f); ;}
     break;
 
-  case 65:
-#line 426 "engines/director/lingo/lingo-gr.y"
+  case 66:
+#line 430 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_add); ;}
     break;
 
-  case 66:
-#line 427 "engines/director/lingo/lingo-gr.y"
+  case 67:
+#line 431 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_sub); ;}
     break;
 
-  case 67:
-#line 428 "engines/director/lingo/lingo-gr.y"
+  case 68:
+#line 432 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_mul); ;}
     break;
 
-  case 68:
-#line 429 "engines/director/lingo/lingo-gr.y"
+  case 69:
+#line 433 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_div); ;}
     break;
 
-  case 69:
-#line 430 "engines/director/lingo/lingo-gr.y"
+  case 70:
+#line 434 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_mod); ;}
     break;
 
-  case 70:
-#line 431 "engines/director/lingo/lingo-gr.y"
+  case 71:
+#line 435 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gt); ;}
     break;
 
-  case 71:
-#line 432 "engines/director/lingo/lingo-gr.y"
+  case 72:
+#line 436 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_lt); ;}
     break;
 
-  case 72:
-#line 433 "engines/director/lingo/lingo-gr.y"
+  case 73:
+#line 437 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_neq); ;}
     break;
 
-  case 73:
-#line 434 "engines/director/lingo/lingo-gr.y"
+  case 74:
+#line 438 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_ge); ;}
     break;
 
-  case 74:
-#line 435 "engines/director/lingo/lingo-gr.y"
+  case 75:
+#line 439 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_le); ;}
     break;
 
-  case 75:
-#line 436 "engines/director/lingo/lingo-gr.y"
+  case 76:
+#line 440 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_and); ;}
     break;
 
-  case 76:
-#line 437 "engines/director/lingo/lingo-gr.y"
+  case 77:
+#line 441 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_or); ;}
     break;
 
-  case 77:
-#line 438 "engines/director/lingo/lingo-gr.y"
+  case 78:
+#line 442 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_not); ;}
     break;
 
-  case 78:
-#line 439 "engines/director/lingo/lingo-gr.y"
+  case 79:
+#line 443 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_ampersand); ;}
     break;
 
-  case 79:
-#line 440 "engines/director/lingo/lingo-gr.y"
+  case 80:
+#line 444 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_concat); ;}
     break;
 
-  case 80:
-#line 441 "engines/director/lingo/lingo-gr.y"
+  case 81:
+#line 445 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_contains); ;}
     break;
 
-  case 81:
-#line 442 "engines/director/lingo/lingo-gr.y"
+  case 82:
+#line 446 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_starts); ;}
     break;
 
-  case 82:
-#line 443 "engines/director/lingo/lingo-gr.y"
+  case 83:
+#line 447 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (2)].code); ;}
     break;
 
-  case 83:
-#line 444 "engines/director/lingo/lingo-gr.y"
+  case 84:
+#line 448 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (2)].code); g_lingo->code1(g_lingo->c_negate); ;}
     break;
 
-  case 84:
-#line 445 "engines/director/lingo/lingo-gr.y"
+  case 85:
+#line 449 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (3)].code); ;}
     break;
 
-  case 85:
-#line 446 "engines/director/lingo/lingo-gr.y"
+  case 86:
+#line 450 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->codeArray((yyvsp[(2) - (3)].narg)); ;}
     break;
 
-  case 86:
-#line 447 "engines/director/lingo/lingo-gr.y"
+  case 87:
+#line 451 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_intersects); ;}
     break;
 
-  case 87:
-#line 448 "engines/director/lingo/lingo-gr.y"
+  case 88:
+#line 452 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_within); ;}
     break;
 
-  case 88:
-#line 449 "engines/director/lingo/lingo-gr.y"
+  case 89:
+#line 453 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_charOf); ;}
     break;
 
-  case 89:
-#line 450 "engines/director/lingo/lingo-gr.y"
+  case 90:
+#line 454 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_charToOf); ;}
     break;
 
-  case 90:
-#line 451 "engines/director/lingo/lingo-gr.y"
+  case 91:
+#line 455 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_itemOf); ;}
     break;
 
-  case 91:
-#line 452 "engines/director/lingo/lingo-gr.y"
+  case 92:
+#line 456 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_itemToOf); ;}
     break;
 
-  case 92:
-#line 453 "engines/director/lingo/lingo-gr.y"
+  case 93:
+#line 457 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_lineOf); ;}
     break;
 
-  case 93:
-#line 454 "engines/director/lingo/lingo-gr.y"
+  case 94:
+#line 458 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_lineToOf); ;}
     break;
 
-  case 94:
-#line 455 "engines/director/lingo/lingo-gr.y"
+  case 95:
+#line 459 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_wordOf); ;}
     break;
 
-  case 95:
-#line 456 "engines/director/lingo/lingo-gr.y"
+  case 96:
+#line 460 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_wordToOf); ;}
     break;
 
-  case 96:
-#line 459 "engines/director/lingo/lingo-gr.y"
+  case 97:
+#line 463 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_printtop); ;}
     break;
 
-  case 99:
-#line 462 "engines/director/lingo/lingo-gr.y"
+  case 100:
+#line 466 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_exitRepeat); ;}
     break;
 
-  case 100:
-#line 463 "engines/director/lingo/lingo-gr.y"
+  case 101:
+#line 467 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeConst(0); // Push fake value on stack
 							  g_lingo->code1(g_lingo->c_procret); ;}
     break;
 
-  case 103:
-#line 467 "engines/director/lingo/lingo-gr.y"
+  case 104:
+#line 471 "engines/director/lingo/lingo-gr.y"
+    {
+		g_lingo->code1(g_lingo->_builtins[*(yyvsp[(1) - (1)].s)]->u.func);
+		delete (yyvsp[(1) - (1)].s); ;}
+    break;
+
+  case 105:
+#line 474 "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 104:
-#line 470 "engines/director/lingo/lingo-gr.y"
+  case 106:
+#line 477 "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 105:
-#line 473 "engines/director/lingo/lingo-gr.y"
+  case 107:
+#line 480 "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 106:
-#line 476 "engines/director/lingo/lingo-gr.y"
+  case 108:
+#line 483 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeFunc((yyvsp[(1) - (2)].s), (yyvsp[(2) - (2)].narg)); ;}
     break;
 
-  case 107:
-#line 477 "engines/director/lingo/lingo-gr.y"
+  case 109:
+#line 484 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeMe((yyvsp[(3) - (4)].s), 0); ;}
     break;
 
-  case 108:
-#line 478 "engines/director/lingo/lingo-gr.y"
+  case 110:
+#line 485 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeMe((yyvsp[(3) - (6)].s), (yyvsp[(5) - (6)].narg)); ;}
     break;
 
-  case 109:
-#line 479 "engines/director/lingo/lingo-gr.y"
+  case 111:
+#line 486 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_open); ;}
     break;
 
-  case 110:
-#line 480 "engines/director/lingo/lingo-gr.y"
+  case 112:
+#line 487 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code2(g_lingo->c_voidpush, g_lingo->c_open); ;}
     break;
 
-  case 111:
-#line 481 "engines/director/lingo/lingo-gr.y"
+  case 113:
+#line 488 "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 112:
-#line 484 "engines/director/lingo/lingo-gr.y"
+  case 114:
+#line 491 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 113:
-#line 485 "engines/director/lingo/lingo-gr.y"
+  case 115:
+#line 492 "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 114:
-#line 488 "engines/director/lingo/lingo-gr.y"
+  case 116:
+#line 495 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 115:
-#line 489 "engines/director/lingo/lingo-gr.y"
+  case 117:
+#line 496 "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 116:
-#line 500 "engines/director/lingo/lingo-gr.y"
+  case 118:
+#line 507 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gotoloop); ;}
     break;
 
-  case 117:
-#line 501 "engines/director/lingo/lingo-gr.y"
+  case 119:
+#line 508 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gotonext); ;}
     break;
 
-  case 118:
-#line 502 "engines/director/lingo/lingo-gr.y"
+  case 120:
+#line 509 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gotoprevious); ;}
     break;
 
-  case 119:
-#line 503 "engines/director/lingo/lingo-gr.y"
+  case 121:
+#line 510 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(1);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 120:
-#line 506 "engines/director/lingo/lingo-gr.y"
+  case 122:
+#line 513 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(3);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 121:
-#line 509 "engines/director/lingo/lingo-gr.y"
+  case 123:
+#line 516 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(2);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 126:
-#line 522 "engines/director/lingo/lingo-gr.y"
+  case 128:
+#line 529 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_playdone); ;}
     break;
 
-  case 127:
-#line 523 "engines/director/lingo/lingo-gr.y"
+  case 129:
+#line 530 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(1);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 128:
-#line 526 "engines/director/lingo/lingo-gr.y"
+  case 130:
+#line 533 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(3);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 129:
-#line 529 "engines/director/lingo/lingo-gr.y"
+  case 131:
+#line 536 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(2);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 130:
-#line 532 "engines/director/lingo/lingo-gr.y"
+  case 132:
+#line 539 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeSetImmediate(true); ;}
     break;
 
-  case 131:
-#line 532 "engines/director/lingo/lingo-gr.y"
+  case 133:
+#line 539 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeFunc((yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].narg)); ;}
     break;
 
-  case 132:
-#line 562 "engines/director/lingo/lingo-gr.y"
+  case 134:
+#line 569 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 133:
-#line 563 "engines/director/lingo/lingo-gr.y"
+  case 135:
+#line 570 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeConst(0); // Push fake value on stack
 			g_lingo->code1(g_lingo->c_procret);
@@ -2819,38 +2833,38 @@ yyreduce:
 			g_lingo->_indef = false; ;}
     break;
 
-  case 134:
-#line 568 "engines/director/lingo/lingo-gr.y"
+  case 136:
+#line 575 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeFactory(*(yyvsp[(2) - (2)].s));
 		;}
     break;
 
-  case 135:
-#line 571 "engines/director/lingo/lingo-gr.y"
+  case 137:
+#line 578 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; ;}
     break;
 
-  case 136:
-#line 572 "engines/director/lingo/lingo-gr.y"
+  case 138:
+#line 579 "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 137:
-#line 576 "engines/director/lingo/lingo-gr.y"
+  case 139:
+#line 583 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 138:
-#line 577 "engines/director/lingo/lingo-gr.y"
+  case 140:
+#line 584 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_ignoreMe = true; ;}
     break;
 
-  case 139:
-#line 577 "engines/director/lingo/lingo-gr.y"
+  case 141:
+#line 584 "engines/director/lingo/lingo-gr.y"
     {
 				g_lingo->codeConst(0); // Push fake value on stack
 				g_lingo->code1(g_lingo->c_procret);
@@ -2862,33 +2876,33 @@ yyreduce:
 			;}
     break;
 
-  case 140:
-#line 587 "engines/director/lingo/lingo-gr.y"
+  case 142:
+#line 594 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
-  case 141:
-#line 588 "engines/director/lingo/lingo-gr.y"
+  case 143:
+#line 595 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;}
     break;
 
-  case 142:
-#line 589 "engines/director/lingo/lingo-gr.y"
+  case 144:
+#line 596 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
-  case 143:
-#line 590 "engines/director/lingo/lingo-gr.y"
+  case 145:
+#line 597 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;}
     break;
 
-  case 144:
-#line 593 "engines/director/lingo/lingo-gr.y"
+  case 146:
+#line 600 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArgStore(); ;}
     break;
 
-  case 145:
-#line 597 "engines/director/lingo/lingo-gr.y"
+  case 147:
+#line 604 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_call);
 		g_lingo->codeString((yyvsp[(1) - (2)].s)->c_str());
@@ -2897,44 +2911,44 @@ yyreduce:
 		g_lingo->code1(numpar); ;}
     break;
 
-  case 146:
-#line 605 "engines/director/lingo/lingo-gr.y"
+  case 148:
+#line 612 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
-  case 147:
-#line 606 "engines/director/lingo/lingo-gr.y"
+  case 149:
+#line 613 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 1; ;}
     break;
 
-  case 148:
-#line 607 "engines/director/lingo/lingo-gr.y"
+  case 150:
+#line 614 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
-  case 149:
-#line 610 "engines/director/lingo/lingo-gr.y"
+  case 151:
+#line 617 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 1; ;}
     break;
 
-  case 150:
-#line 611 "engines/director/lingo/lingo-gr.y"
+  case 152:
+#line 618 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
-  case 151:
-#line 614 "engines/director/lingo/lingo-gr.y"
+  case 153:
+#line 621 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 1; ;}
     break;
 
-  case 152:
-#line 615 "engines/director/lingo/lingo-gr.y"
+  case 154:
+#line 622 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 2938 "engines/director/lingo/lingo-gr.cpp"
+#line 2952 "engines/director/lingo/lingo-gr.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -3148,6 +3162,6 @@ yyreturn:
 }
 
 
-#line 618 "engines/director/lingo/lingo-gr.y"
+#line 625 "engines/director/lingo/lingo-gr.y"
 
 
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 5f9a894..639ada7 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -57,66 +57,69 @@
      BLTINONEARG = 273,
      BLTINARGLIST = 274,
      TWOWORDBUILTIN = 275,
-     ID = 276,
-     STRING = 277,
-     HANDLER = 278,
-     SYMBOL = 279,
-     ENDCLAUSE = 280,
-     tPLAYACCEL = 281,
-     tDOWN = 282,
-     tELSE = 283,
-     tNLELSIF = 284,
-     tEXIT = 285,
-     tFRAME = 286,
-     tGLOBAL = 287,
-     tGO = 288,
-     tIF = 289,
-     tINTO = 290,
-     tLOOP = 291,
-     tMACRO = 292,
-     tMOVIE = 293,
-     tNEXT = 294,
-     tOF = 295,
-     tPREVIOUS = 296,
-     tPUT = 297,
-     tREPEAT = 298,
-     tSET = 299,
-     tTHEN = 300,
-     tTO = 301,
-     tWHEN = 302,
-     tWITH = 303,
-     tWHILE = 304,
-     tNLELSE = 305,
-     tFACTORY = 306,
-     tMETHOD = 307,
-     tOPEN = 308,
-     tPLAY = 309,
-     tDONE = 310,
-     tINSTANCE = 311,
-     tGE = 312,
-     tLE = 313,
-     tGT = 314,
-     tLT = 315,
-     tEQ = 316,
-     tNEQ = 317,
-     tAND = 318,
-     tOR = 319,
-     tNOT = 320,
-     tMOD = 321,
-     tAFTER = 322,
-     tBEFORE = 323,
-     tCONCAT = 324,
-     tCONTAINS = 325,
-     tSTARTS = 326,
-     tCHAR = 327,
-     tITEM = 328,
-     tLINE = 329,
-     tWORD = 330,
-     tSPRITE = 331,
-     tINTERSECTS = 332,
-     tWITHIN = 333,
-     tON = 334,
-     tME = 335
+     FBLTIN = 276,
+     FBLTINNOARGS = 277,
+     FBLTINONEARG = 278,
+     ID = 279,
+     STRING = 280,
+     HANDLER = 281,
+     SYMBOL = 282,
+     ENDCLAUSE = 283,
+     tPLAYACCEL = 284,
+     tDOWN = 285,
+     tELSE = 286,
+     tNLELSIF = 287,
+     tEXIT = 288,
+     tFRAME = 289,
+     tGLOBAL = 290,
+     tGO = 291,
+     tIF = 292,
+     tINTO = 293,
+     tLOOP = 294,
+     tMACRO = 295,
+     tMOVIE = 296,
+     tNEXT = 297,
+     tOF = 298,
+     tPREVIOUS = 299,
+     tPUT = 300,
+     tREPEAT = 301,
+     tSET = 302,
+     tTHEN = 303,
+     tTO = 304,
+     tWHEN = 305,
+     tWITH = 306,
+     tWHILE = 307,
+     tNLELSE = 308,
+     tFACTORY = 309,
+     tMETHOD = 310,
+     tOPEN = 311,
+     tPLAY = 312,
+     tDONE = 313,
+     tINSTANCE = 314,
+     tGE = 315,
+     tLE = 316,
+     tGT = 317,
+     tLT = 318,
+     tEQ = 319,
+     tNEQ = 320,
+     tAND = 321,
+     tOR = 322,
+     tNOT = 323,
+     tMOD = 324,
+     tAFTER = 325,
+     tBEFORE = 326,
+     tCONCAT = 327,
+     tCONTAINS = 328,
+     tSTARTS = 329,
+     tCHAR = 330,
+     tITEM = 331,
+     tLINE = 332,
+     tWORD = 333,
+     tSPRITE = 334,
+     tINTERSECTS = 335,
+     tWITHIN = 336,
+     tON = 337,
+     tME = 338
    };
 #endif
 /* Tokens.  */
@@ -138,66 +141,69 @@
 #define BLTINONEARG 273
 #define BLTINARGLIST 274
 #define TWOWORDBUILTIN 275
-#define ID 276
-#define STRING 277
-#define HANDLER 278
-#define SYMBOL 279
-#define ENDCLAUSE 280
-#define tPLAYACCEL 281
-#define tDOWN 282
-#define tELSE 283
-#define tNLELSIF 284
-#define tEXIT 285
-#define tFRAME 286
-#define tGLOBAL 287
-#define tGO 288
-#define tIF 289
-#define tINTO 290
-#define tLOOP 291
-#define tMACRO 292
-#define tMOVIE 293
-#define tNEXT 294
-#define tOF 295
-#define tPREVIOUS 296
-#define tPUT 297
-#define tREPEAT 298
-#define tSET 299
-#define tTHEN 300
-#define tTO 301
-#define tWHEN 302
-#define tWITH 303
-#define tWHILE 304
-#define tNLELSE 305
-#define tFACTORY 306
-#define tMETHOD 307
-#define tOPEN 308
-#define tPLAY 309
-#define tDONE 310
-#define tINSTANCE 311
-#define tGE 312
-#define tLE 313
-#define tGT 314
-#define tLT 315
-#define tEQ 316
-#define tNEQ 317
-#define tAND 318
-#define tOR 319
-#define tNOT 320
-#define tMOD 321
-#define tAFTER 322
-#define tBEFORE 323
-#define tCONCAT 324
-#define tCONTAINS 325
-#define tSTARTS 326
-#define tCHAR 327
-#define tITEM 328
-#define tLINE 329
-#define tWORD 330
-#define tSPRITE 331
-#define tINTERSECTS 332
-#define tWITHIN 333
-#define tON 334
-#define tME 335
+#define FBLTIN 276
+#define FBLTINNOARGS 277
+#define FBLTINONEARG 278
+#define ID 279
+#define STRING 280
+#define HANDLER 281
+#define SYMBOL 282
+#define ENDCLAUSE 283
+#define tPLAYACCEL 284
+#define tDOWN 285
+#define tELSE 286
+#define tNLELSIF 287
+#define tEXIT 288
+#define tFRAME 289
+#define tGLOBAL 290
+#define tGO 291
+#define tIF 292
+#define tINTO 293
+#define tLOOP 294
+#define tMACRO 295
+#define tMOVIE 296
+#define tNEXT 297
+#define tOF 298
+#define tPREVIOUS 299
+#define tPUT 300
+#define tREPEAT 301
+#define tSET 302
+#define tTHEN 303
+#define tTO 304
+#define tWHEN 305
+#define tWITH 306
+#define tWHILE 307
+#define tNLELSE 308
+#define tFACTORY 309
+#define tMETHOD 310
+#define tOPEN 311
+#define tPLAY 312
+#define tDONE 313
+#define tINSTANCE 314
+#define tGE 315
+#define tLE 316
+#define tGT 317
+#define tLT 318
+#define tEQ 319
+#define tNEQ 320
+#define tAND 321
+#define tOR 322
+#define tNOT 323
+#define tMOD 324
+#define tAFTER 325
+#define tBEFORE 326
+#define tCONCAT 327
+#define tCONTAINS 328
+#define tSTARTS 329
+#define tCHAR 330
+#define tITEM 331
+#define tLINE 332
+#define tWORD 333
+#define tSPRITE 334
+#define tINTERSECTS 335
+#define tWITHIN 336
+#define tON 337
+#define tME 338
 
 
 
@@ -215,7 +221,7 @@ typedef union YYSTYPE
 	Common::Array<double> *arr;
 }
 /* Line 1529 of yacc.c.  */
-#line 219 "engines/director/lingo/lingo-gr.hpp"
+#line 225 "engines/director/lingo/lingo-gr.hpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 4033d76..7e0f046 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -92,6 +92,7 @@ void checkEnd(Common::String *token, const char *expect, bool required) {
 %token<e> THEENTITY THEENTITYWITHID
 %token<f> FLOAT
 %token<s> BLTIN BLTINNOARGS BLTINNOARGSORONE BLTINONEARG BLTINARGLIST TWOWORDBUILTIN
+%token<s> FBLTIN FBLTINNOARGS FBLTINONEARG
 %token<s> ID STRING HANDLER SYMBOL
 %token<s> ENDCLAUSE tPLAYACCEL
 %token tDOWN tELSE tNLELSIF tEXIT tFRAME tGLOBAL tGO tIF tINTO tLOOP tMACRO
@@ -185,7 +186,7 @@ asgn: tPUT expr tINTO ID 		{
 	;
 
 stmtoneliner: expr 				{ g_lingo->code1(g_lingo->c_xpop); }
-	| func
+	| proc
 	;
 
 stmt: stmtoneliner
@@ -399,9 +400,12 @@ expr: INT		{ $$ = g_lingo->codeConst($1); }
 	| STRING		{
 		$$ = g_lingo->code1(g_lingo->c_stringpush);
 		g_lingo->codeString($1->c_str()); }
-	| BLTINNOARGS 	{
+	| FBLTINNOARGS 	{
 		$$ = g_lingo->code1(g_lingo->_builtins[*$1]->u.func);
 		delete $1; }
+	| FBLTINONEARG expr		{
+		g_lingo->code1(g_lingo->_builtins[*$1]->u.func);
+		delete $1; }
 	| ID '(' arglist ')'	{
 		$$ = g_lingo->codeFunc($1, $3);
 		delete $1; }
@@ -456,7 +460,7 @@ expr: INT		{ $$ = g_lingo->codeConst($1); }
 	| tWORD expr tTO expr tOF expr		{ g_lingo->code1(g_lingo->c_wordToOf); }
 	;
 
-func: tPUT expr				{ g_lingo->code1(g_lingo->c_printtop); }
+proc: tPUT expr				{ g_lingo->code1(g_lingo->c_printtop); }
 	| gotofunc
 	| playfunc
 	| tEXIT tREPEAT			{ g_lingo->code1(g_lingo->c_exitRepeat); }
@@ -464,6 +468,9 @@ func: tPUT expr				{ g_lingo->code1(g_lingo->c_printtop); }
 							  g_lingo->code1(g_lingo->c_procret); }
 	| tGLOBAL globallist
 	| tINSTANCE instancelist
+	| BLTINNOARGS 	{
+		g_lingo->code1(g_lingo->_builtins[*$1]->u.func);
+		delete $1; }
 	| BLTINONEARG expr		{
 		g_lingo->code1(g_lingo->_builtins[*$1]->u.func);
 		delete $1; }
@@ -607,12 +614,12 @@ arglist:  /* nothing */ 	{ $$ = 0; }
 	| arglist ',' expr		{ $$ = $1 + 1; }
 	;
 
-nonemptyarglist:  expr		{ $$ = 1; }
-	| arglist ',' expr		{ $$ = $1 + 1; }
+nonemptyarglist:  expr			{ $$ = 1; }
+	| nonemptyarglist ',' expr	{ $$ = $1 + 1; }
 	;
 
-nonemptyarglistnl: expr nl	{ $$ = 1; }
-	| arglist ',' expr nl	{ $$ = $1 + 1; }
+nonemptyarglistnl: expr nl			{ $$ = 1; }
+	| nonemptyarglistnl ',' expr nl	{ $$ = $1 + 1; }
 	;
 
 %%
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index fb6c4a2..e26eed1 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -1461,21 +1461,22 @@ YY_RULE_SETUP
 		}
 
 		if (g_lingo->_builtins.contains(yytext)) {
-			if (g_lingo->_builtins[yytext]->type == BLTIN && g_lingo->_builtins[yytext]->parens == false) {
+			int type = g_lingo->_builtins[yytext]->type;
+			if ((type == BLTIN || type == FBLTIN) && g_lingo->_builtins[yytext]->parens == false) {
 				if (g_lingo->_builtins[yytext]->nargs == 0) {
 					if (g_lingo->_builtins[yytext]->maxArgs == 0)
-						return BLTINNOARGS;
+						return type == BLTIN ? BLTINNOARGS : FBLTINNOARGS;
 					else if (g_lingo->_builtins[yytext]->maxArgs == 1)
-						return BLTINNOARGSORONE;
+						return type == BLTINNOARGSORONE;
 					else
-						error("Incorrect setup for builtin: %s", yytext);
+						return type == BLTINARGLIST;
 				} else if (g_lingo->_builtins[yytext]->nargs == 1 &&
 							g_lingo->_builtins[yytext]->maxArgs == 1) {
-					return BLTINONEARG;
+					return type == BLTIN ? BLTINONEARG : FBLTINONEARG;
 				} else if (g_lingo->_builtins[yytext]->nargs == -1) {
-					return BLTINARGLIST;
+					return type == BLTINARGLIST;
 				} else {
-					error("Incorrect setup for builtin: %s", yytext);
+					return type == BLTINARGLIST;
 				}
 			}
 		}
@@ -1485,41 +1486,41 @@ YY_RULE_SETUP
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 291 "engines/director/lingo/lingo-lex.l"
+#line 292 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.f = atof(yytext); return FLOAT; }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 292 "engines/director/lingo/lingo-lex.l"
+#line 293 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 293 "engines/director/lingo/lingo-lex.l"
+#line 294 "engines/director/lingo/lingo-lex.l"
 { count(); return *yytext; }
 	YY_BREAK
 case 66:
 /* rule 66 can match eol */
 YY_RULE_SETUP
-#line 294 "engines/director/lingo/lingo-lex.l"
+#line 295 "engines/director/lingo/lingo-lex.l"
 { return '\n'; }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 295 "engines/director/lingo/lingo-lex.l"
+#line 296 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 296 "engines/director/lingo/lingo-lex.l"
+#line 297 "engines/director/lingo/lingo-lex.l"
 
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 298 "engines/director/lingo/lingo-lex.l"
+#line 299 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1523 "engines/director/lingo/lingo-lex.cpp"
+#line 1524 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2482,7 +2483,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 298 "engines/director/lingo/lingo-lex.l"
+#line 299 "engines/director/lingo/lingo-lex.l"
 
 
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index 00750c4..ec9d631 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -267,21 +267,22 @@ whitespace [\t ]
 		}
 
 		if (g_lingo->_builtins.contains(yytext)) {
-			if (g_lingo->_builtins[yytext]->type == BLTIN && g_lingo->_builtins[yytext]->parens == false) {
+			int type = g_lingo->_builtins[yytext]->type;
+			if ((type == BLTIN || type == FBLTIN) && g_lingo->_builtins[yytext]->parens == false) {
 				if (g_lingo->_builtins[yytext]->nargs == 0) {
 					if (g_lingo->_builtins[yytext]->maxArgs == 0)
-						return BLTINNOARGS;
+						return type == BLTIN ? BLTINNOARGS : FBLTINNOARGS;
 					else if (g_lingo->_builtins[yytext]->maxArgs == 1)
-						return BLTINNOARGSORONE;
+						return type == BLTINNOARGSORONE;
 					else
-						error("Incorrect setup for builtin: %s", yytext);
+						return type == BLTINARGLIST;
 				} else if (g_lingo->_builtins[yytext]->nargs == 1 &&
 							g_lingo->_builtins[yytext]->maxArgs == 1) {
-					return BLTINONEARG;
+					return type == BLTIN ? BLTINONEARG : FBLTINONEARG;
 				} else if (g_lingo->_builtins[yytext]->nargs == -1) {
-					return BLTINARGLIST;
+					return type == BLTINARGLIST;
 				} else {
-					error("Incorrect setup for builtin: %s", yytext);
+					return type == BLTINARGLIST;
 				}
 			}
 		}





More information about the Scummvm-git-logs mailing list