[Scummvm-git-logs] scummvm master -> 52774f72b55e89e13557cfa73972cec0edc5dc35

djsrv dservilla at gmail.com
Sat Aug 15 16:36:24 UTC 2020


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

Summary:
fae71d55fc DIRECTOR: LINGO: Don't treat cast refs as numbers
319fa7ee0f DIRECTOR: LINGO: Recombine CASTNAME and CASTNUM
b636f76c23 DIRECTOR: LINGO: Handle loaded in getObjectProp
759fcdcf86 DIRECTOR: LINGO: Add tests for cast refs
1819e7da83 DIRECTOR: LINGO: Allow non-numeric type alignments
4620311903 DIRECTOR: LINGO: Handle CASTREF in Datum::equalTo
52774f72b5 DIRECTOR: LINGO: Add equality tests


Commit: fae71d55fc9002942e170080479fb004ca4f9f23
    https://github.com/scummvm/scummvm/commit/fae71d55fc9002942e170080479fb004ca4f9f23
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-15T11:33:12-04:00

Commit Message:
DIRECTOR: LINGO: Don't treat cast refs as numbers

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


diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 5c2005b5fb..ac62df67a8 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -718,8 +718,7 @@ int Lingo::getAlignedType(const Datum &d1, const Datum &d2) {
 
 	if (d1Type == FLOAT || d2Type == FLOAT) {
 		opType = FLOAT;
-	} else if ((d1Type == INT || d1Type == CASTNAME || d1Type == CASTNUM)
-			&& (d2Type == INT || d2Type == CASTNAME || d2Type == CASTNUM)) {
+	} else if (d1Type == INT && d2Type == INT) {
 		opType = INT;
 	}
 
@@ -841,16 +840,6 @@ int Datum::asInt() const {
 	int res = 0;
 
 	switch (type) {
-	case CASTNAME:
-		{
-			Movie *movie = g_director->getCurrentMovie();
-			CastMember *member = movie->getCastMemberByName(*u.s);
-			if (member)
-				res =  member->getID();
-			else
-				warning("castIdFetch: reference to non-existent cast member: %s", u.s->c_str());
-		}
-		break;
 	case STRING:
 	case FIELDNAME:
 	case FIELDNUM:


Commit: 319fa7ee0f77a93e354a36901088515845764514
    https://github.com/scummvm/scummvm/commit/319fa7ee0f77a93e354a36901088515845764514
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-15T11:58:33-04:00

Commit Message:
DIRECTOR: LINGO: Recombine CASTNAME and CASTNUM

The original tries to immediately fetch a cast member by name and
turn it into a cast number.

Only cast numbers are not immediately checked for existence.

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


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index ba1d6bb109..40f0c04e8a 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -455,7 +455,7 @@ void LB::b_chars(int nargs) {
 	Datum d3 = g_lingo->pop();
 	Datum d2 = g_lingo->pop();
 	Datum s = g_lingo->pop();
-	TYPECHECK3(s, STRING, FIELDNAME, FIELDNUM);
+	TYPECHECK2(s, STRING, FIELDREF);
 
 	if (g_director->getVersion() < 400 && (d2.type == FLOAT || d3.type == FLOAT)) {
 		warning("LB::b_chars: Called with a float in Director 2 and 3 mode. chars' can't handle floats");
@@ -516,7 +516,7 @@ void LB::b_hilite(int nargs) {
 
 void LB::b_length(int nargs) {
 	Datum d = g_lingo->pop();
-	TYPECHECK3(d, STRING, FIELDNAME, FIELDNUM);
+	TYPECHECK2(d, STRING, FIELDREF);
 
 	int len = strlen(d.asString().c_str());
 
@@ -603,7 +603,7 @@ void LB::b_addProp(int nargs) {
 	Datum list = g_lingo->pop();
 
 	TYPECHECK(list, PARRAY);
-	if (prop.type == FIELDNAME || prop.type == FIELDNUM)
+	if (prop.type == FIELDREF)
 		prop = g_lingo->varFetch(prop);
 
 	PCell cell = PCell(prop, value);
@@ -1034,7 +1034,7 @@ void LB::b_setProp(int nargs) {
 	Datum prop = g_lingo->pop();
 	Datum list = g_lingo->pop();
 	TYPECHECK(list, PARRAY);
-	if (prop.type == FIELDNAME || prop.type == FIELDNUM)
+	if (prop.type == FIELDREF)
 		prop = g_lingo->varFetch(prop);
 
 	int index = LC::compareArrays(LC::eqData, list, prop, true).u.i;
@@ -2320,29 +2320,23 @@ void LB::b_version(int nargs) {
 ///////////////////
 void LB::b_cast(int nargs) {
 	Datum d = g_lingo->pop();
-
-	Datum res;
 	if (d.type == STRING) {
-		res = d;
-		res.type = CASTNAME;
-	} else {
-		res = d.asInt();
-		res.type = CASTNUM;
+		d = g_lingo->castIdFetch(d);
 	}
+
+	Datum res = d.asInt();
+	res.type = CASTREF;
 	g_lingo->push(res);
 }
 
 void LB::b_field(int nargs) {
 	Datum d = g_lingo->pop();
-
-	Datum res;
 	if (d.type == STRING) {
-		res = d;
-		res.type = FIELDNAME;
-	} else {
-		res = d.asInt();
-		res.type = FIELDNUM;
+		d = g_lingo->castIdFetch(d);
 	}
+
+	Datum res = d.asInt();
+	res.type = FIELDREF;
 	g_lingo->push(res);
 }
 
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 1a0ba4a479..70c20977da 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -233,161 +233,159 @@ enum yysymbol_kind_t
   YYSYMBOL_OBJECT = 9,                     /* OBJECT  */
   YYSYMBOL_LEXERROR = 10,                  /* LEXERROR  */
   YYSYMBOL_PARRAY = 11,                    /* PARRAY  */
-  YYSYMBOL_CASTNAME = 12,                  /* CASTNAME  */
-  YYSYMBOL_CASTNUM = 13,                   /* CASTNUM  */
-  YYSYMBOL_FIELDNAME = 14,                 /* FIELDNAME  */
-  YYSYMBOL_FIELDNUM = 15,                  /* FIELDNUM  */
-  YYSYMBOL_INT = 16,                       /* INT  */
-  YYSYMBOL_ARGC = 17,                      /* ARGC  */
-  YYSYMBOL_ARGCNORET = 18,                 /* ARGCNORET  */
-  YYSYMBOL_THEENTITY = 19,                 /* THEENTITY  */
-  YYSYMBOL_THEENTITYWITHID = 20,           /* THEENTITYWITHID  */
-  YYSYMBOL_THEMENUITEMENTITY = 21,         /* THEMENUITEMENTITY  */
-  YYSYMBOL_THEMENUITEMSENTITY = 22,        /* THEMENUITEMSENTITY  */
-  YYSYMBOL_FLOAT = 23,                     /* FLOAT  */
-  YYSYMBOL_THEFUNC = 24,                   /* THEFUNC  */
-  YYSYMBOL_THEFUNCINOF = 25,               /* THEFUNCINOF  */
-  YYSYMBOL_VARID = 26,                     /* VARID  */
-  YYSYMBOL_STRING = 27,                    /* STRING  */
-  YYSYMBOL_SYMBOL = 28,                    /* SYMBOL  */
-  YYSYMBOL_ENDCLAUSE = 29,                 /* ENDCLAUSE  */
-  YYSYMBOL_tPLAYACCEL = 30,                /* tPLAYACCEL  */
-  YYSYMBOL_tMETHOD = 31,                   /* tMETHOD  */
-  YYSYMBOL_THEOBJECTPROP = 32,             /* THEOBJECTPROP  */
-  YYSYMBOL_tCAST = 33,                     /* tCAST  */
-  YYSYMBOL_tFIELD = 34,                    /* tFIELD  */
-  YYSYMBOL_tSCRIPT = 35,                   /* tSCRIPT  */
-  YYSYMBOL_tWINDOW = 36,                   /* tWINDOW  */
-  YYSYMBOL_tDOWN = 37,                     /* tDOWN  */
-  YYSYMBOL_tELSE = 38,                     /* tELSE  */
-  YYSYMBOL_tELSIF = 39,                    /* tELSIF  */
-  YYSYMBOL_tEXIT = 40,                     /* tEXIT  */
-  YYSYMBOL_tGLOBAL = 41,                   /* tGLOBAL  */
-  YYSYMBOL_tGO = 42,                       /* tGO  */
-  YYSYMBOL_tGOLOOP = 43,                   /* tGOLOOP  */
-  YYSYMBOL_tIF = 44,                       /* tIF  */
-  YYSYMBOL_tIN = 45,                       /* tIN  */
-  YYSYMBOL_tINTO = 46,                     /* tINTO  */
-  YYSYMBOL_tMACRO = 47,                    /* tMACRO  */
-  YYSYMBOL_tMOVIE = 48,                    /* tMOVIE  */
-  YYSYMBOL_tNEXT = 49,                     /* tNEXT  */
-  YYSYMBOL_tOF = 50,                       /* tOF  */
-  YYSYMBOL_tPREVIOUS = 51,                 /* tPREVIOUS  */
-  YYSYMBOL_tPUT = 52,                      /* tPUT  */
-  YYSYMBOL_tREPEAT = 53,                   /* tREPEAT  */
-  YYSYMBOL_tSET = 54,                      /* tSET  */
-  YYSYMBOL_tTHEN = 55,                     /* tTHEN  */
-  YYSYMBOL_tTO = 56,                       /* tTO  */
-  YYSYMBOL_tWHEN = 57,                     /* tWHEN  */
-  YYSYMBOL_tWITH = 58,                     /* tWITH  */
-  YYSYMBOL_tWHILE = 59,                    /* tWHILE  */
-  YYSYMBOL_tFACTORY = 60,                  /* tFACTORY  */
-  YYSYMBOL_tOPEN = 61,                     /* tOPEN  */
-  YYSYMBOL_tPLAY = 62,                     /* tPLAY  */
-  YYSYMBOL_tINSTANCE = 63,                 /* tINSTANCE  */
-  YYSYMBOL_tGE = 64,                       /* tGE  */
-  YYSYMBOL_tLE = 65,                       /* tLE  */
-  YYSYMBOL_tEQ = 66,                       /* tEQ  */
-  YYSYMBOL_tNEQ = 67,                      /* tNEQ  */
-  YYSYMBOL_tAND = 68,                      /* tAND  */
-  YYSYMBOL_tOR = 69,                       /* tOR  */
-  YYSYMBOL_tNOT = 70,                      /* tNOT  */
-  YYSYMBOL_tMOD = 71,                      /* tMOD  */
-  YYSYMBOL_tAFTER = 72,                    /* tAFTER  */
-  YYSYMBOL_tBEFORE = 73,                   /* tBEFORE  */
-  YYSYMBOL_tCONCAT = 74,                   /* tCONCAT  */
-  YYSYMBOL_tCONTAINS = 75,                 /* tCONTAINS  */
-  YYSYMBOL_tSTARTS = 76,                   /* tSTARTS  */
-  YYSYMBOL_tCHAR = 77,                     /* tCHAR  */
-  YYSYMBOL_tITEM = 78,                     /* tITEM  */
-  YYSYMBOL_tLINE = 79,                     /* tLINE  */
-  YYSYMBOL_tWORD = 80,                     /* tWORD  */
-  YYSYMBOL_tSPRITE = 81,                   /* tSPRITE  */
-  YYSYMBOL_tINTERSECTS = 82,               /* tINTERSECTS  */
-  YYSYMBOL_tWITHIN = 83,                   /* tWITHIN  */
-  YYSYMBOL_tTELL = 84,                     /* tTELL  */
-  YYSYMBOL_tPROPERTY = 85,                 /* tPROPERTY  */
-  YYSYMBOL_tON = 86,                       /* tON  */
-  YYSYMBOL_tENDIF = 87,                    /* tENDIF  */
-  YYSYMBOL_tENDREPEAT = 88,                /* tENDREPEAT  */
-  YYSYMBOL_tENDTELL = 89,                  /* tENDTELL  */
-  YYSYMBOL_90_ = 90,                       /* '<'  */
-  YYSYMBOL_91_ = 91,                       /* '>'  */
-  YYSYMBOL_92_ = 92,                       /* '&'  */
-  YYSYMBOL_93_ = 93,                       /* '+'  */
-  YYSYMBOL_94_ = 94,                       /* '-'  */
-  YYSYMBOL_95_ = 95,                       /* '*'  */
-  YYSYMBOL_96_ = 96,                       /* '/'  */
-  YYSYMBOL_97_ = 97,                       /* '%'  */
-  YYSYMBOL_98_n_ = 98,                     /* '\n'  */
-  YYSYMBOL_99_ = 99,                       /* '('  */
-  YYSYMBOL_100_ = 100,                     /* ')'  */
-  YYSYMBOL_101_ = 101,                     /* ','  */
-  YYSYMBOL_102_ = 102,                     /* '['  */
-  YYSYMBOL_103_ = 103,                     /* ']'  */
-  YYSYMBOL_104_ = 104,                     /* ':'  */
-  YYSYMBOL_YYACCEPT = 105,                 /* $accept  */
-  YYSYMBOL_program = 106,                  /* program  */
-  YYSYMBOL_programline = 107,              /* programline  */
-  YYSYMBOL_ID = 108,                       /* ID  */
-  YYSYMBOL_asgn = 109,                     /* asgn  */
-  YYSYMBOL_stmtoneliner = 110,             /* stmtoneliner  */
-  YYSYMBOL_stmt = 111,                     /* stmt  */
-  YYSYMBOL_112_1 = 112,                    /* $@1  */
-  YYSYMBOL_113_2 = 113,                    /* $@2  */
-  YYSYMBOL_114_3 = 114,                    /* $@3  */
-  YYSYMBOL_115_4 = 115,                    /* $@4  */
-  YYSYMBOL_116_5 = 116,                    /* $@5  */
-  YYSYMBOL_117_6 = 117,                    /* $@6  */
-  YYSYMBOL_118_7 = 118,                    /* $@7  */
-  YYSYMBOL_119_8 = 119,                    /* $@8  */
-  YYSYMBOL_120_9 = 120,                    /* $@9  */
-  YYSYMBOL_startrepeat = 121,              /* startrepeat  */
-  YYSYMBOL_tellstart = 122,                /* tellstart  */
-  YYSYMBOL_ifstmt = 123,                   /* ifstmt  */
-  YYSYMBOL_elseifstmtlist = 124,           /* elseifstmtlist  */
-  YYSYMBOL_elseifstmt = 125,               /* elseifstmt  */
-  YYSYMBOL_jumpifz = 126,                  /* jumpifz  */
-  YYSYMBOL_jump = 127,                     /* jump  */
-  YYSYMBOL_varassign = 128,                /* varassign  */
-  YYSYMBOL_if = 129,                       /* if  */
-  YYSYMBOL_lbl = 130,                      /* lbl  */
-  YYSYMBOL_stmtlist = 131,                 /* stmtlist  */
-  YYSYMBOL_stmtlistline = 132,             /* stmtlistline  */
-  YYSYMBOL_simpleexprnoparens = 133,       /* simpleexprnoparens  */
-  YYSYMBOL_134_10 = 134,                   /* $@10  */
-  YYSYMBOL_simpleexpr = 135,               /* simpleexpr  */
-  YYSYMBOL_expr = 136,                     /* expr  */
-  YYSYMBOL_chunkexpr = 137,                /* chunkexpr  */
-  YYSYMBOL_reference = 138,                /* reference  */
-  YYSYMBOL_proc = 139,                     /* proc  */
-  YYSYMBOL_140_11 = 140,                   /* $@11  */
-  YYSYMBOL_141_12 = 141,                   /* $@12  */
-  YYSYMBOL_142_13 = 142,                   /* $@13  */
-  YYSYMBOL_143_14 = 143,                   /* $@14  */
-  YYSYMBOL_globallist = 144,               /* globallist  */
-  YYSYMBOL_propertylist = 145,             /* propertylist  */
-  YYSYMBOL_instancelist = 146,             /* instancelist  */
-  YYSYMBOL_gotofunc = 147,                 /* gotofunc  */
-  YYSYMBOL_gotomovie = 148,                /* gotomovie  */
-  YYSYMBOL_playfunc = 149,                 /* playfunc  */
-  YYSYMBOL_150_15 = 150,                   /* $@15  */
-  YYSYMBOL_defn = 151,                     /* defn  */
-  YYSYMBOL_152_16 = 152,                   /* $@16  */
-  YYSYMBOL_153_17 = 153,                   /* $@17  */
-  YYSYMBOL_on = 154,                       /* on  */
-  YYSYMBOL_155_18 = 155,                   /* $@18  */
-  YYSYMBOL_argname = 156,                  /* argname  */
-  YYSYMBOL_argdef = 157,                   /* argdef  */
-  YYSYMBOL_endargdef = 158,                /* endargdef  */
-  YYSYMBOL_argstore = 159,                 /* argstore  */
-  YYSYMBOL_arglist = 160,                  /* arglist  */
-  YYSYMBOL_nonemptyarglist = 161,          /* nonemptyarglist  */
-  YYSYMBOL_list = 162,                     /* list  */
-  YYSYMBOL_valuelist = 163,                /* valuelist  */
-  YYSYMBOL_linearlist = 164,               /* linearlist  */
-  YYSYMBOL_proplist = 165,                 /* proplist  */
-  YYSYMBOL_proppair = 166                  /* proppair  */
+  YYSYMBOL_CASTREF = 12,                   /* CASTREF  */
+  YYSYMBOL_FIELDREF = 13,                  /* FIELDREF  */
+  YYSYMBOL_INT = 14,                       /* INT  */
+  YYSYMBOL_ARGC = 15,                      /* ARGC  */
+  YYSYMBOL_ARGCNORET = 16,                 /* ARGCNORET  */
+  YYSYMBOL_THEENTITY = 17,                 /* THEENTITY  */
+  YYSYMBOL_THEENTITYWITHID = 18,           /* THEENTITYWITHID  */
+  YYSYMBOL_THEMENUITEMENTITY = 19,         /* THEMENUITEMENTITY  */
+  YYSYMBOL_THEMENUITEMSENTITY = 20,        /* THEMENUITEMSENTITY  */
+  YYSYMBOL_FLOAT = 21,                     /* FLOAT  */
+  YYSYMBOL_THEFUNC = 22,                   /* THEFUNC  */
+  YYSYMBOL_THEFUNCINOF = 23,               /* THEFUNCINOF  */
+  YYSYMBOL_VARID = 24,                     /* VARID  */
+  YYSYMBOL_STRING = 25,                    /* STRING  */
+  YYSYMBOL_SYMBOL = 26,                    /* SYMBOL  */
+  YYSYMBOL_ENDCLAUSE = 27,                 /* ENDCLAUSE  */
+  YYSYMBOL_tPLAYACCEL = 28,                /* tPLAYACCEL  */
+  YYSYMBOL_tMETHOD = 29,                   /* tMETHOD  */
+  YYSYMBOL_THEOBJECTPROP = 30,             /* THEOBJECTPROP  */
+  YYSYMBOL_tCAST = 31,                     /* tCAST  */
+  YYSYMBOL_tFIELD = 32,                    /* tFIELD  */
+  YYSYMBOL_tSCRIPT = 33,                   /* tSCRIPT  */
+  YYSYMBOL_tWINDOW = 34,                   /* tWINDOW  */
+  YYSYMBOL_tDOWN = 35,                     /* tDOWN  */
+  YYSYMBOL_tELSE = 36,                     /* tELSE  */
+  YYSYMBOL_tELSIF = 37,                    /* tELSIF  */
+  YYSYMBOL_tEXIT = 38,                     /* tEXIT  */
+  YYSYMBOL_tGLOBAL = 39,                   /* tGLOBAL  */
+  YYSYMBOL_tGO = 40,                       /* tGO  */
+  YYSYMBOL_tGOLOOP = 41,                   /* tGOLOOP  */
+  YYSYMBOL_tIF = 42,                       /* tIF  */
+  YYSYMBOL_tIN = 43,                       /* tIN  */
+  YYSYMBOL_tINTO = 44,                     /* tINTO  */
+  YYSYMBOL_tMACRO = 45,                    /* tMACRO  */
+  YYSYMBOL_tMOVIE = 46,                    /* tMOVIE  */
+  YYSYMBOL_tNEXT = 47,                     /* tNEXT  */
+  YYSYMBOL_tOF = 48,                       /* tOF  */
+  YYSYMBOL_tPREVIOUS = 49,                 /* tPREVIOUS  */
+  YYSYMBOL_tPUT = 50,                      /* tPUT  */
+  YYSYMBOL_tREPEAT = 51,                   /* tREPEAT  */
+  YYSYMBOL_tSET = 52,                      /* tSET  */
+  YYSYMBOL_tTHEN = 53,                     /* tTHEN  */
+  YYSYMBOL_tTO = 54,                       /* tTO  */
+  YYSYMBOL_tWHEN = 55,                     /* tWHEN  */
+  YYSYMBOL_tWITH = 56,                     /* tWITH  */
+  YYSYMBOL_tWHILE = 57,                    /* tWHILE  */
+  YYSYMBOL_tFACTORY = 58,                  /* tFACTORY  */
+  YYSYMBOL_tOPEN = 59,                     /* tOPEN  */
+  YYSYMBOL_tPLAY = 60,                     /* tPLAY  */
+  YYSYMBOL_tINSTANCE = 61,                 /* tINSTANCE  */
+  YYSYMBOL_tGE = 62,                       /* tGE  */
+  YYSYMBOL_tLE = 63,                       /* tLE  */
+  YYSYMBOL_tEQ = 64,                       /* tEQ  */
+  YYSYMBOL_tNEQ = 65,                      /* tNEQ  */
+  YYSYMBOL_tAND = 66,                      /* tAND  */
+  YYSYMBOL_tOR = 67,                       /* tOR  */
+  YYSYMBOL_tNOT = 68,                      /* tNOT  */
+  YYSYMBOL_tMOD = 69,                      /* tMOD  */
+  YYSYMBOL_tAFTER = 70,                    /* tAFTER  */
+  YYSYMBOL_tBEFORE = 71,                   /* tBEFORE  */
+  YYSYMBOL_tCONCAT = 72,                   /* tCONCAT  */
+  YYSYMBOL_tCONTAINS = 73,                 /* tCONTAINS  */
+  YYSYMBOL_tSTARTS = 74,                   /* tSTARTS  */
+  YYSYMBOL_tCHAR = 75,                     /* tCHAR  */
+  YYSYMBOL_tITEM = 76,                     /* tITEM  */
+  YYSYMBOL_tLINE = 77,                     /* tLINE  */
+  YYSYMBOL_tWORD = 78,                     /* tWORD  */
+  YYSYMBOL_tSPRITE = 79,                   /* tSPRITE  */
+  YYSYMBOL_tINTERSECTS = 80,               /* tINTERSECTS  */
+  YYSYMBOL_tWITHIN = 81,                   /* tWITHIN  */
+  YYSYMBOL_tTELL = 82,                     /* tTELL  */
+  YYSYMBOL_tPROPERTY = 83,                 /* tPROPERTY  */
+  YYSYMBOL_tON = 84,                       /* tON  */
+  YYSYMBOL_tENDIF = 85,                    /* tENDIF  */
+  YYSYMBOL_tENDREPEAT = 86,                /* tENDREPEAT  */
+  YYSYMBOL_tENDTELL = 87,                  /* tENDTELL  */
+  YYSYMBOL_88_ = 88,                       /* '<'  */
+  YYSYMBOL_89_ = 89,                       /* '>'  */
+  YYSYMBOL_90_ = 90,                       /* '&'  */
+  YYSYMBOL_91_ = 91,                       /* '+'  */
+  YYSYMBOL_92_ = 92,                       /* '-'  */
+  YYSYMBOL_93_ = 93,                       /* '*'  */
+  YYSYMBOL_94_ = 94,                       /* '/'  */
+  YYSYMBOL_95_ = 95,                       /* '%'  */
+  YYSYMBOL_96_n_ = 96,                     /* '\n'  */
+  YYSYMBOL_97_ = 97,                       /* '('  */
+  YYSYMBOL_98_ = 98,                       /* ')'  */
+  YYSYMBOL_99_ = 99,                       /* ','  */
+  YYSYMBOL_100_ = 100,                     /* '['  */
+  YYSYMBOL_101_ = 101,                     /* ']'  */
+  YYSYMBOL_102_ = 102,                     /* ':'  */
+  YYSYMBOL_YYACCEPT = 103,                 /* $accept  */
+  YYSYMBOL_program = 104,                  /* program  */
+  YYSYMBOL_programline = 105,              /* programline  */
+  YYSYMBOL_ID = 106,                       /* ID  */
+  YYSYMBOL_asgn = 107,                     /* asgn  */
+  YYSYMBOL_stmtoneliner = 108,             /* stmtoneliner  */
+  YYSYMBOL_stmt = 109,                     /* stmt  */
+  YYSYMBOL_110_1 = 110,                    /* $@1  */
+  YYSYMBOL_111_2 = 111,                    /* $@2  */
+  YYSYMBOL_112_3 = 112,                    /* $@3  */
+  YYSYMBOL_113_4 = 113,                    /* $@4  */
+  YYSYMBOL_114_5 = 114,                    /* $@5  */
+  YYSYMBOL_115_6 = 115,                    /* $@6  */
+  YYSYMBOL_116_7 = 116,                    /* $@7  */
+  YYSYMBOL_117_8 = 117,                    /* $@8  */
+  YYSYMBOL_118_9 = 118,                    /* $@9  */
+  YYSYMBOL_startrepeat = 119,              /* startrepeat  */
+  YYSYMBOL_tellstart = 120,                /* tellstart  */
+  YYSYMBOL_ifstmt = 121,                   /* ifstmt  */
+  YYSYMBOL_elseifstmtlist = 122,           /* elseifstmtlist  */
+  YYSYMBOL_elseifstmt = 123,               /* elseifstmt  */
+  YYSYMBOL_jumpifz = 124,                  /* jumpifz  */
+  YYSYMBOL_jump = 125,                     /* jump  */
+  YYSYMBOL_varassign = 126,                /* varassign  */
+  YYSYMBOL_if = 127,                       /* if  */
+  YYSYMBOL_lbl = 128,                      /* lbl  */
+  YYSYMBOL_stmtlist = 129,                 /* stmtlist  */
+  YYSYMBOL_stmtlistline = 130,             /* stmtlistline  */
+  YYSYMBOL_simpleexprnoparens = 131,       /* simpleexprnoparens  */
+  YYSYMBOL_132_10 = 132,                   /* $@10  */
+  YYSYMBOL_simpleexpr = 133,               /* simpleexpr  */
+  YYSYMBOL_expr = 134,                     /* expr  */
+  YYSYMBOL_chunkexpr = 135,                /* chunkexpr  */
+  YYSYMBOL_reference = 136,                /* reference  */
+  YYSYMBOL_proc = 137,                     /* proc  */
+  YYSYMBOL_138_11 = 138,                   /* $@11  */
+  YYSYMBOL_139_12 = 139,                   /* $@12  */
+  YYSYMBOL_140_13 = 140,                   /* $@13  */
+  YYSYMBOL_141_14 = 141,                   /* $@14  */
+  YYSYMBOL_globallist = 142,               /* globallist  */
+  YYSYMBOL_propertylist = 143,             /* propertylist  */
+  YYSYMBOL_instancelist = 144,             /* instancelist  */
+  YYSYMBOL_gotofunc = 145,                 /* gotofunc  */
+  YYSYMBOL_gotomovie = 146,                /* gotomovie  */
+  YYSYMBOL_playfunc = 147,                 /* playfunc  */
+  YYSYMBOL_148_15 = 148,                   /* $@15  */
+  YYSYMBOL_defn = 149,                     /* defn  */
+  YYSYMBOL_150_16 = 150,                   /* $@16  */
+  YYSYMBOL_151_17 = 151,                   /* $@17  */
+  YYSYMBOL_on = 152,                       /* on  */
+  YYSYMBOL_153_18 = 153,                   /* $@18  */
+  YYSYMBOL_argname = 154,                  /* argname  */
+  YYSYMBOL_argdef = 155,                   /* argdef  */
+  YYSYMBOL_endargdef = 156,                /* endargdef  */
+  YYSYMBOL_argstore = 157,                 /* argstore  */
+  YYSYMBOL_arglist = 158,                  /* arglist  */
+  YYSYMBOL_nonemptyarglist = 159,          /* nonemptyarglist  */
+  YYSYMBOL_list = 160,                     /* list  */
+  YYSYMBOL_valuelist = 161,                /* valuelist  */
+  YYSYMBOL_linearlist = 162,               /* linearlist  */
+  YYSYMBOL_proplist = 163,                 /* proplist  */
+  YYSYMBOL_proppair = 164                  /* proppair  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -697,10 +695,10 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  100
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1844
+#define YYLAST   1886
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  105
+#define YYNTOKENS  103
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  62
 /* YYNRULES -- Number of rules.  */
@@ -709,7 +707,7 @@ union yyalloc
 #define YYNSTATES  391
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   344
+#define YYMAXUTOK   342
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -724,15 +722,15 @@ union yyalloc
 static const yytype_int8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      98,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      96,     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,    97,    92,     2,
-      99,   100,    95,    93,   101,    94,     2,    96,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     2,   104,     2,
-      90,     2,    91,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    95,    90,     2,
+      97,    98,    93,    91,    99,    92,     2,    94,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,   102,     2,
+      88,     2,    89,     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,   102,     2,   103,     2,     2,     2,     2,     2,     2,
+       2,   100,     2,   101,     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,
@@ -757,7 +755,7 @@ static const yytype_int8 yytranslate[] =
       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,    81,    82,    83,    84,
-      85,    86,    87,    88,    89
+      85,    86,    87
 };
 
 #if YYDEBUG
@@ -801,14 +799,13 @@ yysymbol_name (yysymbol_kind_t yysymbol)
   static const char *const yy_sname[] =
   {
   "end of file", "error", "invalid token", "UNARY", "VOID", "VAR",
-  "POINT", "RECT", "ARRAY", "OBJECT", "LEXERROR", "PARRAY", "CASTNAME",
-  "CASTNUM", "FIELDNAME", "FIELDNUM", "INT", "ARGC", "ARGCNORET",
-  "THEENTITY", "THEENTITYWITHID", "THEMENUITEMENTITY",
-  "THEMENUITEMSENTITY", "FLOAT", "THEFUNC", "THEFUNCINOF", "VARID",
-  "STRING", "SYMBOL", "ENDCLAUSE", "tPLAYACCEL", "tMETHOD",
-  "THEOBJECTPROP", "tCAST", "tFIELD", "tSCRIPT", "tWINDOW", "tDOWN",
-  "tELSE", "tELSIF", "tEXIT", "tGLOBAL", "tGO", "tGOLOOP", "tIF", "tIN",
-  "tINTO", "tMACRO", "tMOVIE", "tNEXT", "tOF", "tPREVIOUS", "tPUT",
+  "POINT", "RECT", "ARRAY", "OBJECT", "LEXERROR", "PARRAY", "CASTREF",
+  "FIELDREF", "INT", "ARGC", "ARGCNORET", "THEENTITY", "THEENTITYWITHID",
+  "THEMENUITEMENTITY", "THEMENUITEMSENTITY", "FLOAT", "THEFUNC",
+  "THEFUNCINOF", "VARID", "STRING", "SYMBOL", "ENDCLAUSE", "tPLAYACCEL",
+  "tMETHOD", "THEOBJECTPROP", "tCAST", "tFIELD", "tSCRIPT", "tWINDOW",
+  "tDOWN", "tELSE", "tELSIF", "tEXIT", "tGLOBAL", "tGO", "tGOLOOP", "tIF",
+  "tIN", "tINTO", "tMACRO", "tMOVIE", "tNEXT", "tOF", "tPREVIOUS", "tPUT",
   "tREPEAT", "tSET", "tTHEN", "tTO", "tWHEN", "tWITH", "tWHILE",
   "tFACTORY", "tOPEN", "tPLAY", "tINSTANCE", "tGE", "tLE", "tEQ", "tNEQ",
   "tAND", "tOR", "tNOT", "tMOD", "tAFTER", "tBEFORE", "tCONCAT",
@@ -844,13 +841,13 @@ static const yytype_int16 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,   336,   337,   338,   339,   340,   341,   342,   343,   344,
-      60,    62,    38,    43,    45,    42,    47,    37,    10,    40,
-      41,    44,    91,    93,    58
+     335,   336,   337,   338,   339,   340,   341,   342,    60,    62,
+      38,    43,    45,    42,    47,    37,    10,    40,    41,    44,
+      91,    93,    58
 };
 #endif
 
-#define YYPACT_NINF (-352)
+#define YYPACT_NINF (-357)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
@@ -864,46 +861,46 @@ static const yytype_int16 yytoknum[] =
      STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-     461,   -88,  -352,  -352,  -352,  -352,  -352,  -352,  -352,   -39,
-    -352,   855,  -352,  -352,  -352,   -27,   975,    -8,   186,    53,
-      53,  1001,   894,  -352,  1001,  -352,  -352,     6,  -352,  1082,
-    -352,  -352,  -352,  -352,  1001,  -352,  -352,  -352,  -352,  -352,
-    -352,  1001,  -352,  -352,    53,  -352,  -352,  1001,  -352,   -16,
-    1001,  -352,  -352,  -352,  1108,  1108,  1108,  1108,  1001,  -352,
-      37,  -352,  1001,  1001,  1001,  1001,  1001,  1001,  1001,  1001,
-    1001,   146,   -36,  -352,  -352,  1232,  -352,  -352,  -352,  -352,
-      53,  -352,    53,  1199,    53,  -352,   -45,  1001,  1001,   -41,
-     -13,    40,  -352,  1576,  1232,  -352,    53,  1496,    53,    53,
-    -352,   461,  1001,  1627,  -352,  1748,    53,  -352,    53,    12,
-    -352,  -352,  1001,  -352,  -352,  -352,  -352,  -352,  1748,  1001,
-    -352,  1265,  1298,  1331,  1364,  1715,  -352,  -352,  1678,    10,
-      18,  -352,   -34,  1748,     4,    19,    22,  -352,  1001,  1001,
-    1001,  1001,  1001,  1001,  1001,  1001,  1001,  1001,  1001,  1001,
-    1001,  1001,  1001,  1001,  1001,  1001,  -352,  -352,  1001,    -4,
-      -4,    -4,    15,  1001,  1001,  1001,  1537,    76,  1001,  1001,
-    1001,  1001,  1001,  1001,  -352,    27,  -352,  -352,  -352,    32,
-    -352,  -352,  -352,    31,  1589,    34,  1001,    81,  -352,    39,
-      44,    46,    53,  -352,  1748,  1001,  1001,  1001,  1001,  1001,
-    1001,  1001,  1001,  1001,  1001,  -352,  1001,  1001,  1001,  -352,
-    1001,   202,    57,    45,   -47,   -47,   -47,   -47,   363,   363,
-    -352,   -54,   -47,   -47,   -47,   -47,   -54,   -59,   -59,  -352,
-    -352,    53,   101,  -352,  -352,  -352,  -352,  -352,  -352,  1001,
-    1001,  1748,  1748,  1748,  1001,  1001,    53,  1748,  1748,  1748,
-    1748,  1748,  1748,    53,  1198,   703,    53,  -352,  -352,  -352,
-    -352,   637,    53,  -352,  -352,  -352,  -352,   462,  -352,  1397,
-    -352,  1430,  -352,  1463,  -352,  -352,  1748,  1748,  1748,  1748,
-      10,    18,    49,  -352,  -352,  -352,  -352,    51,  1001,  1748,
-    1127,  -352,  1748,    23,  1001,  -352,  -352,  -352,  -352,    65,
-    -352,  1001,  -352,  -352,   561,   599,  1001,  1001,  1001,  1001,
-    1001,  -352,  1748,  -352,  -352,  -352,   741,     3,  -352,    78,
-     362,  1640,    68,  -352,   154,  -352,  -352,  -352,  -352,  -352,
-      84,   599,  -352,  -352,  -352,  -352,  1001,  1001,  -352,  -352,
-    1001,  -352,    28,    53,  -352,  -352,  -352,   129,   149,    99,
-    1748,  1748,  -352,   779,  1001,  -352,   102,  -352,    89,  -352,
-    1001,   135,  -352,  -352,  1748,  -352,    53,  -352,  1748,  1001,
-     111,   144,  -352,   741,  -352,  1748,  -352,   637,   114,  -352,
-    -352,  -352,  -352,   741,  -352,  -352,   115,   741,  -352,   116,
-    -352
+     362,   -82,  -357,  -357,  -357,  -357,  -357,  -357,  -357,   -34,
+    -357,   892,  -357,  -357,  -357,   -30,  1012,   -14,   188,    55,
+      55,  1038,   931,  -357,  1038,  -357,  -357,     8,  -357,  1119,
+    -357,  -357,  -357,  -357,  1038,  -357,  -357,  -357,  -357,  -357,
+    -357,  1038,  -357,  -357,    55,  -357,  -357,  1038,  -357,   -12,
+    1038,  -357,  -357,  -357,  1145,  1145,  1145,  1145,  1038,  -357,
+      17,  -357,  1038,  1038,  1038,  1038,  1038,  1038,  1038,  1038,
+    1038,   148,   -63,  -357,  -357,  1230,  -357,  -357,  -357,  -357,
+      55,  -357,    55,  1197,    55,  -357,     5,  1038,  1038,     6,
+      27,     1,  -357,  1607,  1230,  -357,    55,  1527,    55,    55,
+    -357,   362,  1038,  1658,  -357,  1779,    55,  -357,    55,    -9,
+    -357,  -357,  1038,  -357,  -357,  -357,  -357,  -357,  1779,  1038,
+    -357,  1263,  1296,  1329,  1362,  1746,  -357,  -357,  1709,    11,
+      12,  -357,   -87,  1779,    19,    23,    24,  -357,  1038,  1038,
+    1038,  1038,  1038,  1038,  1038,  1038,  1038,  1038,  1038,  1038,
+    1038,  1038,  1038,  1038,  1038,  1038,  -357,  -357,  1038,    -2,
+      -2,    -2,   -31,  1038,  1038,  1038,  1568,    78,  1038,  1038,
+    1038,  1038,  1038,  1038,  -357,    29,  -357,  -357,  -357,    35,
+    -357,  -357,  -357,   -32,  1620,     9,  1038,    83,  -357,    41,
+      46,    48,    55,  -357,  1779,  1038,  1038,  1038,  1038,  1038,
+    1038,  1038,  1038,  1038,  1038,  -357,  1038,  1038,  1038,  -357,
+    1038,   204,    59,    47,   -45,   -45,   -45,   -45,  1792,  1792,
+    -357,   -53,   -45,   -45,   -45,   -45,   -53,   -43,   -43,  -357,
+    -357,    55,   103,  -357,  -357,  -357,  -357,  -357,  -357,  1038,
+    1038,  1779,  1779,  1779,  1038,  1038,    55,  1779,  1779,  1779,
+    1779,  1779,  1779,    55,   493,   716,    55,  -357,  -357,  -357,
+    -357,   650,    55,  -357,  -357,  -357,  -357,  1395,  -357,  1428,
+    -357,  1461,  -357,  1494,  -357,  -357,  1779,  1779,  1779,  1779,
+      11,    12,    51,  -357,  -357,  -357,  -357,    53,  1038,  1779,
+    1164,  -357,  1779,    25,  1038,  -357,  -357,  -357,  -357,    67,
+    -357,  1038,  -357,  -357,   563,   616,  1038,  1038,  1038,  1038,
+    1038,  -357,  1779,  -357,  -357,  -357,   750,    31,  -357,    80,
+     455,  1671,    70,  -357,   156,  -357,  -357,  -357,  -357,  -357,
+      86,   616,  -357,  -357,  -357,  -357,  1038,  1038,  -357,  -357,
+    1038,  -357,    56,    55,  -357,  -357,  -357,   131,   151,   101,
+    1779,  1779,  -357,   816,  1038,  -357,   104,  -357,    91,  -357,
+    1038,   137,  -357,  -357,  1779,  -357,    55,  -357,  1779,  1038,
+     113,   146,  -357,   750,  -357,  1779,  -357,   650,   116,  -357,
+    -357,  -357,  -357,   750,  -357,  -357,   117,   750,  -357,   118,
+    -357
 };
 
   /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -956,13 +953,13 @@ static const yytype_uint8 yydefact[] =
   /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -352,  -352,   107,     0,  -352,   -44,     2,  -352,  -352,  -352,
-    -352,  -352,  -352,  -352,  -352,  -352,  -351,    35,  -352,  -352,
-    -352,  -237,  -326,  -106,  -352,    -7,  -248,  -352,    36,  -352,
-     277,   130,    16,  -352,  -352,  -352,  -352,  -352,  -352,    41,
-     -42,   -19,  -352,   -17,  -352,  -352,  -352,  -352,  -352,  -352,
-    -352,  -352,  -107,  -352,  -257,   -38,  -302,  -352,  -352,  -352,
-    -352,    30
+    -357,  -357,   107,     0,  -357,   -44,     2,  -357,  -357,  -357,
+    -357,  -357,  -357,  -357,  -357,  -357,  -356,    36,  -357,  -357,
+    -357,  -237,  -326,  -106,  -357,    -7,  -248,  -357,    76,  -357,
+     277,   130,    16,  -357,  -357,  -357,  -357,  -357,  -357,    21,
+     -41,   -20,  -357,   -17,  -357,  -357,  -357,  -357,  -357,  -357,
+    -357,  -357,  -107,  -357,  -258,   -38,  -303,  -357,  -357,  -357,
+    -357,    30
 };
 
   /* YYDEFGOTO[NTERM-NUM].  */
@@ -982,20 +979,20 @@ static const yytype_int16 yydefgoto[] =
      number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-      29,   191,    32,   107,   291,    95,   100,   305,   330,   349,
-      40,   164,   145,   302,    43,   168,   373,   145,    90,    91,
-      92,   165,     2,   -24,   145,   169,    81,   146,   383,    54,
-      55,     7,     8,   387,   112,   108,   154,   155,   352,   152,
-     153,   154,   155,   170,   109,   151,   152,   153,   154,   155,
-      84,    85,   -24,   171,   331,   385,   324,   325,   156,   336,
-     239,   -24,   -24,   138,   185,   138,   353,   354,   335,   337,
-     208,   132,   339,    63,    64,    65,    66,   174,   163,     2,
-     157,   240,   158,   345,   162,   119,     5,     6,     7,     8,
-     114,   115,   116,   117,   145,   172,   175,   146,   179,   181,
-     213,    29,   183,    32,   101,   363,   188,   209,   188,   359,
-     -24,   -24,   -24,   192,   206,   151,   152,   153,   154,   155,
-     210,   -24,   207,   211,   287,   378,   246,   371,   253,   381,
-     138,   257,   258,   256,   259,   386,   261,   379,   212,   389,
+      29,   191,    32,   107,   291,    95,   305,   330,   100,   349,
+     138,   373,   239,   302,    40,   208,   145,    43,    90,    91,
+      92,    81,     2,   383,   145,   -24,   145,   146,   387,    54,
+      55,     7,     8,   240,   138,   108,   112,   352,   152,   153,
+     154,   155,    84,    85,   109,   151,   152,   153,   154,   155,
+     154,   155,   -24,   331,   172,   385,   324,   325,   156,   164,
+     168,   -24,   -24,   119,   185,   138,   257,   258,   335,   165,
+     169,   132,   339,    63,    64,    65,    66,   174,   163,     2,
+     157,   170,   158,   345,   162,   336,     5,     6,     7,     8,
+     192,   171,   353,   354,   145,   337,   175,   146,   179,   181,
+     213,    29,   183,    32,   101,   363,   188,   259,   188,   359,
+     -24,   -24,   -24,   206,   207,   151,   152,   153,   154,   155,
+     209,   -24,   210,   211,   287,   378,   246,   371,   253,   381,
+     114,   115,   116,   117,   256,   386,   261,   379,   212,   389,
      262,    75,   263,   384,   264,   286,    83,   288,   260,   311,
      231,    93,    94,   208,    97,   303,   138,   284,   285,   233,
      235,   237,    45,   320,   105,    46,    47,   338,   341,    48,
@@ -1003,9 +1000,9 @@ static const yytype_int16 yytable[] =
       55,    56,    57,   343,   344,   360,   361,   362,   118,   365,
      366,   369,   109,   121,   122,   123,   124,   125,   376,   377,
      128,   133,   382,   388,   390,    86,    87,    88,   182,   334,
-     296,   282,     2,   255,   300,     0,    62,   166,    89,     5,
+     296,   282,     2,   265,   255,   300,    62,   166,    89,     5,
        6,     7,     8,    63,    64,    65,    66,    67,     2,   280,
-     281,   188,   184,   265,   295,     5,     6,     7,     8,    68,
+     281,   188,   184,   295,     0,     5,     6,     7,     8,    68,
       69,   283,     0,     0,     0,    70,   294,     0,    71,   194,
      131,     0,     0,   175,    29,    29,   179,     0,     0,     0,
        0,    29,   188,     0,     0,     0,     0,     0,     0,   214,
@@ -1018,185 +1015,189 @@ static const yytype_int16 yytable[] =
      271,    29,   273,     0,     0,   356,   276,   277,   278,   120,
      279,     0,     0,   357,     0,   126,   127,     0,     0,     0,
        0,     0,     0,    29,     0,     0,   370,     0,     0,     0,
-       0,     0,   -65,     1,     0,   167,   372,     0,     0,   289,
+       0,     0,    -4,     1,     0,   167,   372,     0,     0,   289,
      290,     0,     0,    29,   292,   293,     0,    29,     0,     0,
-       0,     0,     0,    29,     0,     0,     0,    29,     2,   193,
-       0,   -65,     3,     0,     0,     5,     6,     7,     8,     0,
-     -65,   -65,     9,    10,    11,    12,    13,     0,     0,     0,
-       0,    15,     0,     0,    16,    17,    18,     0,   312,    19,
-       0,     0,     0,    21,    22,    23,     0,   139,   140,   141,
-     142,   321,     0,     0,   145,   232,     0,   146,   147,   148,
-     321,     0,     0,     0,     0,     0,    24,    25,     0,   -65,
-     -65,   -65,     0,   149,   150,   151,   152,   153,   154,   155,
-     -65,    -4,     1,     0,     0,     0,   350,   351,     0,     0,
-     321,     0,   266,     0,   268,     0,   270,     0,   272,     0,
-     274,   275,     0,     0,   364,     0,     0,     2,     0,     0,
-     368,     3,     4,     0,     5,     6,     7,     8,     0,   375,
-       0,     9,    10,    11,    12,    13,     0,     0,    14,     0,
-      15,     0,   306,    16,    17,    18,     0,     0,    19,     0,
-       0,    20,    21,    22,    23,     0,   139,   140,   141,   142,
-     143,   144,     0,   145,     0,     0,   146,   147,   148,     0,
-       0,     0,     0,     0,     0,    24,    25,    26,     0,     0,
-       0,     0,   149,   150,   151,   152,   153,   154,   155,    -4,
-       0,   -65,     1,     0,     0,     0,     0,     0,     0,     0,
-       0,   317,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   326,   327,   328,   329,     2,     0,     0,
-     -65,     3,     0,     0,     5,     6,     7,     8,     0,   -65,
-       1,     9,    10,    11,    12,    13,     0,     0,     0,     0,
-      15,     0,     0,    16,    17,    18,     0,     0,    19,     0,
-       0,     0,    21,    22,    23,     2,     0,     0,     0,     3,
-       0,     0,     5,     6,     7,     8,     0,     0,     1,     9,
-      10,    11,    12,    13,     0,    24,    25,     0,    15,     0,
-       0,    16,    17,    18,     0,     0,    19,     0,     0,   -65,
-      21,    22,    23,     2,     0,     0,     0,     3,     0,     0,
-       5,     6,     7,     8,     0,   -65,   -65,     9,    10,    11,
-      12,    13,     0,    24,    25,     0,    15,     0,     0,    16,
-      17,    18,     0,     0,    19,     0,     0,   -65,    21,    22,
-      23,     0,     0,     0,     1,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,    24,    25,     0,   -65,     0,     0,     0,     0,     2,
-       0,     0,     0,     3,     0,   -65,     5,     6,     7,     8,
-       0,     0,     1,     9,    10,    11,    12,    13,     0,     0,
+       0,     0,     0,    29,     0,     0,     2,    29,     0,   193,
+       3,     4,     0,     5,     6,     7,     8,     0,     0,     0,
+       9,    10,    11,    12,    13,     0,     0,    14,     0,    15,
+       0,     0,    16,    17,    18,     0,     0,    19,   312,     0,
+      20,    21,    22,    23,     0,     0,     0,     0,     0,     0,
+       0,   321,     0,     0,     0,   232,     0,     0,     0,     0,
+     321,     0,     0,     0,    24,    25,    26,     0,     0,     0,
+       0,     0,     0,     0,     0,   -65,     1,     0,    -4,     0,
+       0,     0,     0,     0,     0,     0,   350,   351,     0,     0,
+     321,     0,   266,     0,   268,     0,   270,     0,   272,     2,
+     274,   275,   -65,     3,   364,     0,     5,     6,     7,     8,
+     368,   -65,   -65,     9,    10,    11,    12,    13,     0,   375,
        0,     0,    15,     0,     0,    16,    17,    18,     0,     0,
       19,     0,     0,     0,    21,    22,    23,     2,     0,     0,
        0,     3,     0,     0,     5,     6,     7,     8,     0,     0,
-       1,     9,    10,    11,    12,    13,     0,    24,    25,     0,
-      15,     0,   -65,    16,    17,    18,     0,     0,    19,     0,
-       0,   -65,    21,    22,    23,     2,     0,     0,     0,     3,
-       0,     0,     5,     6,     7,     8,     0,     0,     0,     9,
-      10,    11,    12,    13,     0,    24,    25,     0,    15,   -65,
-       0,    16,    17,    18,     0,     0,    19,     0,     0,   -65,
-      21,    22,    23,     0,     0,     0,     0,     0,     0,     0,
+       0,     9,    10,    11,    12,     0,     0,    24,    25,     0,
+     -65,   -65,   -65,    16,     0,    18,     0,     0,     0,     0,
+       0,   -65,    21,    22,    23,     0,     0,     0,     0,     0,
+       0,     0,     0,   -65,     1,     0,     0,     0,     0,     0,
+       0,   317,     0,     0,     0,     0,    25,     0,     0,     0,
+       0,     0,     0,   326,   327,   328,   329,     2,     0,     0,
+     -65,     3,     0,     0,     5,     6,     7,     8,     0,     0,
+       0,     9,    10,    11,    12,    13,     0,     0,     0,     0,
+      15,     0,     0,    16,    17,    18,   -65,     1,    19,     0,
+       0,     0,    21,    22,    23,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    24,    25,     0,   -65,     0,     0,     0,
-       0,    45,     0,     0,    46,    47,     0,   -65,    48,    49,
-      50,     2,    51,    52,     0,     0,     0,    53,    54,    55,
-      56,    57,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,    58,    59,    60,    61,     0,     0,     0,
-      45,     0,     0,    46,    47,     0,     0,    48,    49,    50,
-       2,    51,    52,     0,     0,    62,    53,    54,    55,    56,
-      57,     0,    63,    64,    65,    66,    67,     0,     0,     0,
-       0,     0,    58,     0,    60,     0,     0,     0,    68,    69,
-       0,     0,     0,     0,    70,     0,     0,    71,     0,     0,
-       0,     0,     0,     0,    62,     0,     0,     0,     0,     0,
-       0,    63,    64,    65,    66,    67,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,    68,    69,     0,
-       0,    45,     0,    70,    46,    47,    71,    82,    48,    49,
-      50,     2,    51,    52,     0,     0,     0,    53,    54,    55,
-      56,    57,     0,     0,     0,     0,     0,    45,     0,     0,
-      46,    47,     0,     0,    48,    49,    50,     2,    51,    52,
-       0,     0,     0,    53,    54,    55,    56,    57,     0,     0,
-       0,     0,     0,     0,     0,    62,     0,     0,     0,     0,
-       0,     0,    63,    64,    65,    66,    67,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    68,    69,
-       0,    62,     0,     0,    70,     0,     0,    71,    63,    64,
-      65,    66,    67,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    68,    69,     0,     0,    45,     0,
-      70,    46,    47,    71,     0,    48,    49,    50,     2,    51,
-      52,     0,     0,     0,    53,    54,    55,    56,    57,     0,
-       0,     0,     0,     0,    45,     0,     0,    46,    47,     0,
-       0,    48,    49,    50,     2,    51,    52,     0,     0,     0,
-      53,    54,    55,    56,    57,     0,     0,     0,     0,     0,
-       0,     0,    62,     0,     0,     0,     0,     0,     0,    63,
-      64,    65,    66,    67,   -38,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    68,    69,     0,    62,     0,
-       0,   102,     0,     0,    71,    63,    64,    65,    66,    67,
-       0,   139,   140,   141,   142,   143,   144,     0,   145,     0,
-       0,   146,   147,   148,     0,     0,     0,     0,     0,     0,
-      71,     0,     0,     0,     0,     0,     0,   149,   150,   151,
-     152,   153,   154,   155,     2,     0,     0,     0,     3,     0,
+       2,     0,     0,     0,     3,    24,    25,     5,     6,     7,
+       8,     1,     0,     0,     9,    10,    11,    12,    13,   -65,
+       0,     0,     0,    15,     0,     0,    16,    17,    18,     0,
+       0,    19,     0,     0,     2,    21,    22,    23,     3,     0,
+       0,     5,     6,     7,     8,     0,   -65,   -65,     9,    10,
+      11,    12,    13,     0,     0,     0,     0,    15,    24,    25,
+      16,    17,    18,     0,     0,    19,     0,     0,     0,    21,
+      22,    23,   -65,     0,     0,     0,     0,     1,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    24,    25,     0,   -65,     0,     0,     0,     0,
+       2,     0,     0,     0,     3,     0,   -65,     5,     6,     7,
+       8,     1,     0,     0,     9,    10,    11,    12,    13,     0,
+       0,     0,     0,    15,     0,     0,    16,    17,    18,     0,
+       0,    19,     0,     0,     2,    21,    22,    23,     3,     0,
        0,     5,     6,     7,     8,     0,     0,     0,     9,    10,
-      11,    12,     0,     0,     0,   159,     0,     0,     0,     0,
-      16,     0,    18,     0,     0,     0,     0,     0,     0,    21,
-      22,    23,     0,   139,   140,   141,   142,   143,   144,     0,
-     145,   160,   161,   146,   147,   148,     0,     0,     0,     0,
-      58,     0,    60,    25,     0,     0,     0,     0,     0,   149,
-     150,   151,   152,   153,   154,   155,   139,   140,   141,   142,
+      11,    12,    13,     0,     0,     0,     0,    15,    24,    25,
+      16,    17,    18,   -65,     0,    19,     0,     0,     0,    21,
+      22,    23,   -65,     0,     0,     0,     0,     1,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    24,    25,     0,     0,   -65,     0,     0,     0,
+       2,     0,     0,     0,     3,     0,   -65,     5,     6,     7,
+       8,     0,     0,     0,     9,    10,    11,    12,    13,     0,
+       0,     0,     0,    15,     0,     0,    16,    17,    18,     0,
+       0,    19,     0,     0,     0,    21,    22,    23,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    24,    25,
+       0,   -65,     0,     0,     0,     0,    45,     0,     0,    46,
+      47,     0,   -65,    48,    49,    50,     2,    51,    52,     0,
+       0,     0,    53,    54,    55,    56,    57,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    58,    59,
+      60,    61,     0,     0,     0,    45,     0,     0,    46,    47,
+       0,     0,    48,    49,    50,     2,    51,    52,     0,     0,
+      62,    53,    54,    55,    56,    57,     0,    63,    64,    65,
+      66,    67,     0,     0,     0,     0,     0,    58,     0,    60,
+       0,     0,     0,    68,    69,     0,     0,     0,     0,    70,
+       0,     0,    71,     0,     0,     0,     0,     0,     0,    62,
+       0,     0,     0,     0,     0,     0,    63,    64,    65,    66,
+      67,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    68,    69,     0,     0,    45,     0,    70,    46,
+      47,    71,    82,    48,    49,    50,     2,    51,    52,     0,
+       0,     0,    53,    54,    55,    56,    57,     0,     0,     0,
+       0,     0,    45,     0,     0,    46,    47,     0,     0,    48,
+      49,    50,     2,    51,    52,     0,     0,     0,    53,    54,
+      55,    56,    57,     0,     0,     0,     0,     0,     0,     0,
+      62,     0,     0,     0,     0,     0,     0,    63,    64,    65,
+      66,    67,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    68,    69,     0,    62,     0,     0,    70,
+       0,     0,    71,    63,    64,    65,    66,    67,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    68,
+      69,     0,     0,    45,     0,    70,    46,    47,    71,     0,
+      48,    49,    50,     2,    51,    52,     0,     0,     0,    53,
+      54,    55,    56,    57,     0,     0,     0,     0,     0,    45,
+       0,     0,    46,    47,     0,     0,    48,    49,    50,     2,
+      51,    52,     0,     0,     0,    53,    54,    55,    56,    57,
+       0,     0,     0,     0,     0,     0,     0,    62,     0,     0,
+       0,     0,     0,     0,    63,    64,    65,    66,    67,   -38,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      68,    69,     0,    62,     0,     0,   102,     0,     0,    71,
+      63,    64,    65,    66,    67,     0,   139,   140,   141,   142,
      143,   144,     0,   145,     0,     0,   146,   147,   148,     0,
-       0,     0,     0,     0,     0,   195,     0,     0,     0,     0,
-       0,   196,   149,   150,   151,   152,   153,   154,   155,   139,
-     140,   141,   142,   143,   144,     0,   145,     0,     0,   146,
-     147,   148,     0,     0,     0,     0,     0,     0,   197,     0,
-       0,     0,     0,     0,   198,   149,   150,   151,   152,   153,
+       0,   159,     0,     0,     0,    71,     0,     0,     0,     0,
+       0,     0,   149,   150,   151,   152,   153,   154,   155,   139,
+     140,   141,   142,   143,   144,     0,   145,   160,   161,   146,
+     147,   148,     0,     0,     0,     0,    58,     0,    60,     0,
+       0,     0,     0,     0,     0,   149,   150,   151,   152,   153,
      154,   155,   139,   140,   141,   142,   143,   144,     0,   145,
        0,     0,   146,   147,   148,     0,     0,     0,     0,     0,
-       0,   199,     0,     0,     0,     0,     0,   200,   149,   150,
+       0,   195,     0,     0,     0,     0,     0,   196,   149,   150,
      151,   152,   153,   154,   155,   139,   140,   141,   142,   143,
      144,     0,   145,     0,     0,   146,   147,   148,     0,     0,
-       0,     0,     0,     0,   201,     0,     0,     0,     0,     0,
-     202,   149,   150,   151,   152,   153,   154,   155,   139,   140,
+       0,     0,     0,     0,   197,     0,     0,     0,     0,     0,
+     198,   149,   150,   151,   152,   153,   154,   155,   139,   140,
      141,   142,   143,   144,     0,   145,     0,     0,   146,   147,
-     148,     0,     0,     0,     0,     0,     0,   307,     0,     0,
-       0,     0,     0,     0,   149,   150,   151,   152,   153,   154,
+     148,     0,     0,     0,     0,     0,     0,   199,     0,     0,
+       0,     0,     0,   200,   149,   150,   151,   152,   153,   154,
      155,   139,   140,   141,   142,   143,   144,     0,   145,     0,
        0,   146,   147,   148,     0,     0,     0,     0,     0,     0,
-     308,     0,     0,     0,     0,     0,     0,   149,   150,   151,
+     201,     0,     0,     0,     0,     0,   202,   149,   150,   151,
      152,   153,   154,   155,   139,   140,   141,   142,   143,   144,
        0,   145,     0,     0,   146,   147,   148,     0,     0,     0,
-       0,     0,     0,   309,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   306,     0,     0,     0,     0,     0,     0,
      149,   150,   151,   152,   153,   154,   155,   139,   140,   141,
      142,   143,   144,     0,   145,     0,     0,   146,   147,   148,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   177,   149,   150,   151,   152,   153,   154,   155,
+       0,     0,     0,     0,     0,     0,   307,     0,     0,     0,
+       0,     0,     0,   149,   150,   151,   152,   153,   154,   155,
      139,   140,   141,   142,   143,   144,     0,   145,     0,     0,
+     146,   147,   148,     0,     0,     0,     0,     0,     0,   308,
+       0,     0,     0,     0,     0,     0,   149,   150,   151,   152,
+     153,   154,   155,   139,   140,   141,   142,   143,   144,     0,
+     145,     0,     0,   146,   147,   148,     0,     0,     0,     0,
+       0,     0,   309,     0,     0,     0,     0,     0,     0,   149,
+     150,   151,   152,   153,   154,   155,   139,   140,   141,   142,
+     143,   144,     0,   145,     0,     0,   146,   147,   148,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   177,   149,   150,   151,   152,   153,   154,   155,   139,
+     140,   141,   142,   143,   144,     0,   145,     0,     0,   146,
+     147,   148,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   149,   150,   151,   152,   153,
+     154,   155,   244,   178,     0,     0,     0,     0,     0,     0,
+     139,   140,   245,   142,   143,   144,     0,   145,     0,     0,
      146,   147,   148,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,   149,   150,   151,   152,
-     153,   154,   155,   244,   178,     0,     0,     0,     0,     0,
-       0,   139,   140,   245,   142,   143,   144,     0,   145,     0,
-       0,   146,   147,   148,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   149,   150,   151,
-     152,   153,   154,   155,   173,     0,     0,     0,     0,     0,
+     153,   154,   155,   173,     0,     0,     0,     0,     0,   139,
+     140,   141,   142,   143,   144,     0,   145,     0,     0,   146,
+     147,   148,   139,   140,   141,   142,   143,   144,     0,   145,
+       0,     0,   146,   147,   148,   149,   150,   151,   152,   153,
+     154,   155,     0,     0,     0,     0,     0,     0,   149,   150,
+     151,   152,   153,   154,   155,     0,     0,     0,   205,   186,
      139,   140,   141,   142,   143,   144,     0,   145,     0,     0,
      146,   147,   148,   139,   140,   141,   142,   143,   144,     0,
      145,     0,     0,   146,   147,   148,   149,   150,   151,   152,
-     153,   154,   155,     0,     0,     0,     0,     0,     0,   149,
-     150,   151,   152,   153,   154,   155,     0,     0,     0,   205,
-     186,   139,   140,   141,   142,   143,   144,     0,   145,     0,
-       0,   146,   147,   148,   139,   140,   141,   142,   143,   144,
+     153,   154,   155,     0,     0,     0,     0,   186,     0,   149,
+     150,   151,   152,   153,   154,   155,     0,     0,     0,     0,
+     340,   139,   140,   141,   142,   143,   144,     0,   145,     0,
+       0,   146,   147,   148,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   149,   150,   151,
+     152,   153,   154,   155,     0,     0,     0,   205,   139,   140,
+     141,   142,   143,   144,     0,   145,     0,     0,   146,   147,
+     148,     0,     0,     0,     0,     0,   203,   204,     0,     0,
+       0,     0,     0,     0,   149,   150,   151,   152,   153,   154,
+     155,   139,   140,   141,   142,   143,   144,     0,   145,     0,
+       0,   146,   147,   148,   139,   140,   141,   142,     0,     0,
        0,   145,     0,     0,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,     0,     0,     0,     0,   186,     0,
-     149,   150,   151,   152,   153,   154,   155,     0,     0,     0,
-       0,   340,   139,   140,   141,   142,   143,   144,     0,   145,
-       0,     0,   146,   147,   148,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   149,   150,
-     151,   152,   153,   154,   155,     0,     0,     0,   205,   139,
-     140,   141,   142,   143,   144,     0,   145,     0,     0,   146,
-     147,   148,     0,     0,     0,     0,     0,   203,   204,     0,
-       0,     0,     0,     0,     0,   149,   150,   151,   152,   153,
-     154,   155,   139,   140,   141,   142,   143,   144,     0,   145,
-       0,     0,   146,   147,   148,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   149,   150,
-     151,   152,   153,   154,   155
+     152,   153,   154,   155,     0,     0,     0,     0,     0,     0,
+     149,   150,   151,   152,   153,   154,   155
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,   108,     0,    41,   241,    22,     0,   264,   310,   335,
-      98,    56,    71,   261,    53,    56,   367,    71,    18,    19,
-      20,    66,    26,     0,    71,    66,    53,    74,   379,    33,
-      34,    35,    36,   384,    50,    42,    95,    96,   340,    93,
-      94,    95,    96,    56,    44,    92,    93,    94,    95,    96,
-      58,    59,    29,    66,   311,   381,   304,   305,    75,    56,
-      45,    38,    39,    99,   102,    99,    38,    39,   316,    66,
-     104,    71,   320,    77,    78,    79,    80,    94,    85,    26,
-      80,    66,    82,   331,    84,    48,    33,    34,    35,    36,
-      54,    55,    56,    57,    71,    55,    96,    74,    98,    99,
-     138,   101,   102,   101,    98,   353,   106,   103,   108,   346,
-      87,    88,    89,   101,   104,    92,    93,    94,    95,    96,
-     101,    98,   104,   101,   231,   373,    50,   364,   101,   377,
-      99,   100,   101,   101,   100,   383,    55,   374,   138,   387,
-     101,    11,    98,   380,    98,   100,    16,    46,   186,    98,
-     157,    21,    22,   104,    24,   262,    99,   100,   101,   159,
-     160,   161,    16,    98,    34,    19,    20,    89,   100,    23,
-      24,    25,    26,    27,    28,   159,   160,   161,    32,    33,
-      34,    35,    36,    29,   100,    56,    37,    88,    58,    87,
-     101,    56,   192,    63,    64,    65,    66,    67,    87,    55,
-      70,    71,    88,    88,    88,    19,    20,    21,   101,   315,
-     254,   211,    26,   178,   256,    -1,    70,    87,    32,    33,
-      34,    35,    36,    77,    78,    79,    80,    81,    26,    27,
-      28,   231,   102,   192,   253,    33,    34,    35,    36,    93,
-      94,   211,    -1,    -1,    -1,    99,   246,    -1,   102,   119,
-     104,    -1,    -1,   253,   254,   255,   256,    -1,    -1,    -1,
+       0,   108,     0,    41,   241,    22,   264,   310,     0,   335,
+      97,   367,    43,   261,    96,   102,    69,    51,    18,    19,
+      20,    51,    24,   379,    69,     0,    69,    72,   384,    31,
+      32,    33,    34,    64,    97,    42,    48,   340,    91,    92,
+      93,    94,    56,    57,    44,    90,    91,    92,    93,    94,
+      93,    94,    27,   311,    53,   381,   304,   305,    75,    54,
+      54,    36,    37,    46,   102,    97,    98,    99,   316,    64,
+      64,    71,   320,    75,    76,    77,    78,    94,    85,    24,
+      80,    54,    82,   331,    84,    54,    31,    32,    33,    34,
+      99,    64,    36,    37,    69,    64,    96,    72,    98,    99,
+     138,   101,   102,   101,    96,   353,   106,    98,   108,   346,
+      85,    86,    87,   102,   102,    90,    91,    92,    93,    94,
+     101,    96,    99,    99,   231,   373,    48,   364,    99,   377,
+      54,    55,    56,    57,    99,   383,    53,   374,   138,   387,
+      99,    11,    96,   380,    96,    98,    16,    44,   186,    96,
+     157,    21,    22,   102,    24,   262,    97,    98,    99,   159,
+     160,   161,    14,    96,    34,    17,    18,    87,    98,    21,
+      22,    23,    24,    25,    26,   159,   160,   161,    30,    31,
+      32,    33,    34,    27,    98,    54,    35,    86,    58,    85,
+      99,    54,   192,    63,    64,    65,    66,    67,    85,    53,
+      70,    71,    86,    86,    86,    17,    18,    19,   101,   315,
+     254,   211,    24,   192,   178,   256,    68,    87,    30,    31,
+      32,    33,    34,    75,    76,    77,    78,    79,    24,    25,
+      26,   231,   102,   253,    -1,    31,    32,    33,    34,    91,
+      92,   211,    -1,    -1,    -1,    97,   246,    -1,   100,   119,
+     102,    -1,    -1,   253,   254,   255,   256,    -1,    -1,    -1,
       -1,   261,   262,    -1,    -1,    -1,    -1,    -1,    -1,   139,
      140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
      150,   151,   152,   153,   154,   155,    -1,    -1,    -1,   296,
@@ -1209,224 +1210,228 @@ static const yytype_int16 yycheck[] =
       -1,    -1,    -1,   353,    -1,    -1,   363,    -1,    -1,    -1,
       -1,    -1,     0,     1,    -1,    88,   366,    -1,    -1,   239,
      240,    -1,    -1,   373,   244,   245,    -1,   377,    -1,    -1,
-      -1,    -1,    -1,   383,    -1,    -1,    -1,   387,    26,   112,
-      -1,    29,    30,    -1,    -1,    33,    34,    35,    36,    -1,
-      38,    39,    40,    41,    42,    43,    44,    -1,    -1,    -1,
-      -1,    49,    -1,    -1,    52,    53,    54,    -1,   288,    57,
-      -1,    -1,    -1,    61,    62,    63,    -1,    64,    65,    66,
-      67,   301,    -1,    -1,    71,   158,    -1,    74,    75,    76,
-     310,    -1,    -1,    -1,    -1,    -1,    84,    85,    -1,    87,
-      88,    89,    -1,    90,    91,    92,    93,    94,    95,    96,
-      98,     0,     1,    -1,    -1,    -1,   336,   337,    -1,    -1,
-     340,    -1,   195,    -1,   197,    -1,   199,    -1,   201,    -1,
-     203,   204,    -1,    -1,   354,    -1,    -1,    26,    -1,    -1,
-     360,    30,    31,    -1,    33,    34,    35,    36,    -1,   369,
-      -1,    40,    41,    42,    43,    44,    -1,    -1,    47,    -1,
-      49,    -1,    50,    52,    53,    54,    -1,    -1,    57,    -1,
-      -1,    60,    61,    62,    63,    -1,    64,    65,    66,    67,
-      68,    69,    -1,    71,    -1,    -1,    74,    75,    76,    -1,
-      -1,    -1,    -1,    -1,    -1,    84,    85,    86,    -1,    -1,
-      -1,    -1,    90,    91,    92,    93,    94,    95,    96,    98,
-      -1,     0,     1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   294,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   306,   307,   308,   309,    26,    -1,    -1,
-      29,    30,    -1,    -1,    33,    34,    35,    36,    -1,     0,
-       1,    40,    41,    42,    43,    44,    -1,    -1,    -1,    -1,
-      49,    -1,    -1,    52,    53,    54,    -1,    -1,    57,    -1,
-      -1,    -1,    61,    62,    63,    26,    -1,    -1,    -1,    30,
-      -1,    -1,    33,    34,    35,    36,    -1,    -1,     1,    40,
-      41,    42,    43,    44,    -1,    84,    85,    -1,    49,    -1,
-      -1,    52,    53,    54,    -1,    -1,    57,    -1,    -1,    98,
-      61,    62,    63,    26,    -1,    -1,    -1,    30,    -1,    -1,
-      33,    34,    35,    36,    -1,    38,    39,    40,    41,    42,
-      43,    44,    -1,    84,    85,    -1,    49,    -1,    -1,    52,
-      53,    54,    -1,    -1,    57,    -1,    -1,    98,    61,    62,
-      63,    -1,    -1,    -1,     1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   383,    -1,    -1,    24,   387,    -1,   112,
+      28,    29,    -1,    31,    32,    33,    34,    -1,    -1,    -1,
+      38,    39,    40,    41,    42,    -1,    -1,    45,    -1,    47,
+      -1,    -1,    50,    51,    52,    -1,    -1,    55,   288,    -1,
+      58,    59,    60,    61,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   301,    -1,    -1,    -1,   158,    -1,    -1,    -1,    -1,
+     310,    -1,    -1,    -1,    82,    83,    84,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     0,     1,    -1,    96,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   336,   337,    -1,    -1,
+     340,    -1,   195,    -1,   197,    -1,   199,    -1,   201,    24,
+     203,   204,    27,    28,   354,    -1,    31,    32,    33,    34,
+     360,    36,    37,    38,    39,    40,    41,    42,    -1,   369,
+      -1,    -1,    47,    -1,    -1,    50,    51,    52,    -1,    -1,
+      55,    -1,    -1,    -1,    59,    60,    61,    24,    -1,    -1,
+      -1,    28,    -1,    -1,    31,    32,    33,    34,    -1,    -1,
+      -1,    38,    39,    40,    41,    -1,    -1,    82,    83,    -1,
+      85,    86,    87,    50,    -1,    52,    -1,    -1,    -1,    -1,
+      -1,    96,    59,    60,    61,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,     0,     1,    -1,    -1,    -1,    -1,    -1,
+      -1,   294,    -1,    -1,    -1,    -1,    83,    -1,    -1,    -1,
+      -1,    -1,    -1,   306,   307,   308,   309,    24,    -1,    -1,
+      27,    28,    -1,    -1,    31,    32,    33,    34,    -1,    -1,
+      -1,    38,    39,    40,    41,    42,    -1,    -1,    -1,    -1,
+      47,    -1,    -1,    50,    51,    52,     0,     1,    55,    -1,
+      -1,    -1,    59,    60,    61,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      24,    -1,    -1,    -1,    28,    82,    83,    31,    32,    33,
+      34,     1,    -1,    -1,    38,    39,    40,    41,    42,    96,
+      -1,    -1,    -1,    47,    -1,    -1,    50,    51,    52,    -1,
+      -1,    55,    -1,    -1,    24,    59,    60,    61,    28,    -1,
+      -1,    31,    32,    33,    34,    -1,    36,    37,    38,    39,
+      40,    41,    42,    -1,    -1,    -1,    -1,    47,    82,    83,
+      50,    51,    52,    -1,    -1,    55,    -1,    -1,    -1,    59,
+      60,    61,    96,    -1,    -1,    -1,    -1,     1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    82,    83,    -1,    85,    -1,    -1,    -1,    -1,
+      24,    -1,    -1,    -1,    28,    -1,    96,    31,    32,    33,
+      34,     1,    -1,    -1,    38,    39,    40,    41,    42,    -1,
+      -1,    -1,    -1,    47,    -1,    -1,    50,    51,    52,    -1,
+      -1,    55,    -1,    -1,    24,    59,    60,    61,    28,    -1,
+      -1,    31,    32,    33,    34,    -1,    -1,    -1,    38,    39,
+      40,    41,    42,    -1,    -1,    -1,    -1,    47,    82,    83,
+      50,    51,    52,    87,    -1,    55,    -1,    -1,    -1,    59,
+      60,    61,    96,    -1,    -1,    -1,    -1,     1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    82,    83,    -1,    -1,    86,    -1,    -1,    -1,
+      24,    -1,    -1,    -1,    28,    -1,    96,    31,    32,    33,
+      34,    -1,    -1,    -1,    38,    39,    40,    41,    42,    -1,
+      -1,    -1,    -1,    47,    -1,    -1,    50,    51,    52,    -1,
+      -1,    55,    -1,    -1,    -1,    59,    60,    61,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    84,    85,    -1,    87,    -1,    -1,    -1,    -1,    26,
-      -1,    -1,    -1,    30,    -1,    98,    33,    34,    35,    36,
-      -1,    -1,     1,    40,    41,    42,    43,    44,    -1,    -1,
-      -1,    -1,    49,    -1,    -1,    52,    53,    54,    -1,    -1,
-      57,    -1,    -1,    -1,    61,    62,    63,    26,    -1,    -1,
-      -1,    30,    -1,    -1,    33,    34,    35,    36,    -1,    -1,
-       1,    40,    41,    42,    43,    44,    -1,    84,    85,    -1,
-      49,    -1,    89,    52,    53,    54,    -1,    -1,    57,    -1,
-      -1,    98,    61,    62,    63,    26,    -1,    -1,    -1,    30,
-      -1,    -1,    33,    34,    35,    36,    -1,    -1,    -1,    40,
-      41,    42,    43,    44,    -1,    84,    85,    -1,    49,    88,
-      -1,    52,    53,    54,    -1,    -1,    57,    -1,    -1,    98,
-      61,    62,    63,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    82,    83,
+      -1,    85,    -1,    -1,    -1,    -1,    14,    -1,    -1,    17,
+      18,    -1,    96,    21,    22,    23,    24,    25,    26,    -1,
+      -1,    -1,    30,    31,    32,    33,    34,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    46,    47,
+      48,    49,    -1,    -1,    -1,    14,    -1,    -1,    17,    18,
+      -1,    -1,    21,    22,    23,    24,    25,    26,    -1,    -1,
+      68,    30,    31,    32,    33,    34,    -1,    75,    76,    77,
+      78,    79,    -1,    -1,    -1,    -1,    -1,    46,    -1,    48,
+      -1,    -1,    -1,    91,    92,    -1,    -1,    -1,    -1,    97,
+      -1,    -1,   100,    -1,    -1,    -1,    -1,    -1,    -1,    68,
+      -1,    -1,    -1,    -1,    -1,    -1,    75,    76,    77,    78,
+      79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    91,    92,    -1,    -1,    14,    -1,    97,    17,
+      18,   100,    20,    21,    22,    23,    24,    25,    26,    -1,
+      -1,    -1,    30,    31,    32,    33,    34,    -1,    -1,    -1,
+      -1,    -1,    14,    -1,    -1,    17,    18,    -1,    -1,    21,
+      22,    23,    24,    25,    26,    -1,    -1,    -1,    30,    31,
+      32,    33,    34,    -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,    -1,    -1,
+      -1,    -1,    -1,    91,    92,    -1,    68,    -1,    -1,    97,
+      -1,    -1,   100,    75,    76,    77,    78,    79,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,
+      92,    -1,    -1,    14,    -1,    97,    17,    18,   100,    -1,
+      21,    22,    23,    24,    25,    26,    -1,    -1,    -1,    30,
+      31,    32,    33,    34,    -1,    -1,    -1,    -1,    -1,    14,
+      -1,    -1,    17,    18,    -1,    -1,    21,    22,    23,    24,
+      25,    26,    -1,    -1,    -1,    30,    31,    32,    33,    34,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,
+      -1,    -1,    -1,    -1,    75,    76,    77,    78,    79,    35,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    84,    85,    -1,    87,    -1,    -1,    -1,
-      -1,    16,    -1,    -1,    19,    20,    -1,    98,    23,    24,
-      25,    26,    27,    28,    -1,    -1,    -1,    32,    33,    34,
-      35,    36,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    48,    49,    50,    51,    -1,    -1,    -1,
-      16,    -1,    -1,    19,    20,    -1,    -1,    23,    24,    25,
-      26,    27,    28,    -1,    -1,    70,    32,    33,    34,    35,
-      36,    -1,    77,    78,    79,    80,    81,    -1,    -1,    -1,
-      -1,    -1,    48,    -1,    50,    -1,    -1,    -1,    93,    94,
-      -1,    -1,    -1,    -1,    99,    -1,    -1,   102,    -1,    -1,
-      -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,
-      -1,    77,    78,    79,    80,    81,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    94,    -1,
-      -1,    16,    -1,    99,    19,    20,   102,    22,    23,    24,
-      25,    26,    27,    28,    -1,    -1,    -1,    32,    33,    34,
-      35,    36,    -1,    -1,    -1,    -1,    -1,    16,    -1,    -1,
-      19,    20,    -1,    -1,    23,    24,    25,    26,    27,    28,
-      -1,    -1,    -1,    32,    33,    34,    35,    36,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    70,    -1,    -1,    -1,    -1,
-      -1,    -1,    77,    78,    79,    80,    81,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    93,    94,
-      -1,    70,    -1,    -1,    99,    -1,    -1,   102,    77,    78,
-      79,    80,    81,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    93,    94,    -1,    -1,    16,    -1,
-      99,    19,    20,   102,    -1,    23,    24,    25,    26,    27,
-      28,    -1,    -1,    -1,    32,    33,    34,    35,    36,    -1,
-      -1,    -1,    -1,    -1,    16,    -1,    -1,    19,    20,    -1,
-      -1,    23,    24,    25,    26,    27,    28,    -1,    -1,    -1,
-      32,    33,    34,    35,    36,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    70,    -1,    -1,    -1,    -1,    -1,    -1,    77,
-      78,    79,    80,    81,    37,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    93,    94,    -1,    70,    -1,
-      -1,    99,    -1,    -1,   102,    77,    78,    79,    80,    81,
-      -1,    64,    65,    66,    67,    68,    69,    -1,    71,    -1,
-      -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,
-     102,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,    92,
-      93,    94,    95,    96,    26,    -1,    -1,    -1,    30,    -1,
-      -1,    33,    34,    35,    36,    -1,    -1,    -1,    40,    41,
-      42,    43,    -1,    -1,    -1,    46,    -1,    -1,    -1,    -1,
-      52,    -1,    54,    -1,    -1,    -1,    -1,    -1,    -1,    61,
-      62,    63,    -1,    64,    65,    66,    67,    68,    69,    -1,
-      71,    72,    73,    74,    75,    76,    -1,    -1,    -1,    -1,
-      48,    -1,    50,    85,    -1,    -1,    -1,    -1,    -1,    90,
-      91,    92,    93,    94,    95,    96,    64,    65,    66,    67,
-      68,    69,    -1,    71,    -1,    -1,    74,    75,    76,    -1,
-      -1,    -1,    -1,    -1,    -1,    50,    -1,    -1,    -1,    -1,
-      -1,    56,    90,    91,    92,    93,    94,    95,    96,    64,
-      65,    66,    67,    68,    69,    -1,    71,    -1,    -1,    74,
-      75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    50,    -1,
-      -1,    -1,    -1,    -1,    56,    90,    91,    92,    93,    94,
-      95,    96,    64,    65,    66,    67,    68,    69,    -1,    71,
-      -1,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,
-      -1,    50,    -1,    -1,    -1,    -1,    -1,    56,    90,    91,
-      92,    93,    94,    95,    96,    64,    65,    66,    67,    68,
-      69,    -1,    71,    -1,    -1,    74,    75,    76,    -1,    -1,
-      -1,    -1,    -1,    -1,    50,    -1,    -1,    -1,    -1,    -1,
-      56,    90,    91,    92,    93,    94,    95,    96,    64,    65,
-      66,    67,    68,    69,    -1,    71,    -1,    -1,    74,    75,
-      76,    -1,    -1,    -1,    -1,    -1,    -1,    50,    -1,    -1,
-      -1,    -1,    -1,    -1,    90,    91,    92,    93,    94,    95,
-      96,    64,    65,    66,    67,    68,    69,    -1,    71,    -1,
-      -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,
-      50,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,    92,
-      93,    94,    95,    96,    64,    65,    66,    67,    68,    69,
-      -1,    71,    -1,    -1,    74,    75,    76,    -1,    -1,    -1,
-      -1,    -1,    -1,    50,    -1,    -1,    -1,    -1,    -1,    -1,
-      90,    91,    92,    93,    94,    95,    96,    64,    65,    66,
-      67,    68,    69,    -1,    71,    -1,    -1,    74,    75,    76,
+      91,    92,    -1,    68,    -1,    -1,    97,    -1,    -1,   100,
+      75,    76,    77,    78,    79,    -1,    62,    63,    64,    65,
+      66,    67,    -1,    69,    -1,    -1,    72,    73,    74,    -1,
+      -1,    44,    -1,    -1,    -1,   100,    -1,    -1,    -1,    -1,
+      -1,    -1,    88,    89,    90,    91,    92,    93,    94,    62,
+      63,    64,    65,    66,    67,    -1,    69,    70,    71,    72,
+      73,    74,    -1,    -1,    -1,    -1,    46,    -1,    48,    -1,
+      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
+      93,    94,    62,    63,    64,    65,    66,    67,    -1,    69,
+      -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,
+      -1,    48,    -1,    -1,    -1,    -1,    -1,    54,    88,    89,
+      90,    91,    92,    93,    94,    62,    63,    64,    65,    66,
+      67,    -1,    69,    -1,    -1,    72,    73,    74,    -1,    -1,
+      -1,    -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,
+      54,    88,    89,    90,    91,    92,    93,    94,    62,    63,
+      64,    65,    66,    67,    -1,    69,    -1,    -1,    72,    73,
+      74,    -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,    -1,
+      -1,    -1,    -1,    54,    88,    89,    90,    91,    92,    93,
+      94,    62,    63,    64,    65,    66,    67,    -1,    69,    -1,
+      -1,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,
+      48,    -1,    -1,    -1,    -1,    -1,    54,    88,    89,    90,
+      91,    92,    93,    94,    62,    63,    64,    65,    66,    67,
+      -1,    69,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,
+      -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,
+      88,    89,    90,    91,    92,    93,    94,    62,    63,    64,
+      65,    66,    67,    -1,    69,    -1,    -1,    72,    73,    74,
+      -1,    -1,    -1,    -1,    -1,    -1,    48,    -1,    -1,    -1,
+      -1,    -1,    -1,    88,    89,    90,    91,    92,    93,    94,
+      62,    63,    64,    65,    66,    67,    -1,    69,    -1,    -1,
+      72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    48,
+      -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,
+      92,    93,    94,    62,    63,    64,    65,    66,    67,    -1,
+      69,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,
+      -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    88,
+      89,    90,    91,    92,    93,    94,    62,    63,    64,    65,
+      66,    67,    -1,    69,    -1,    -1,    72,    73,    74,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    56,    90,    91,    92,    93,    94,    95,    96,
-      64,    65,    66,    67,    68,    69,    -1,    71,    -1,    -1,
-      74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    90,    91,    92,    93,
-      94,    95,    96,    56,    98,    -1,    -1,    -1,    -1,    -1,
-      -1,    64,    65,    66,    67,    68,    69,    -1,    71,    -1,
-      -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,    92,
-      93,    94,    95,    96,    58,    -1,    -1,    -1,    -1,    -1,
-      64,    65,    66,    67,    68,    69,    -1,    71,    -1,    -1,
-      74,    75,    76,    64,    65,    66,    67,    68,    69,    -1,
-      71,    -1,    -1,    74,    75,    76,    90,    91,    92,    93,
-      94,    95,    96,    -1,    -1,    -1,    -1,    -1,    -1,    90,
-      91,    92,    93,    94,    95,    96,    -1,    -1,    -1,   100,
-     101,    64,    65,    66,    67,    68,    69,    -1,    71,    -1,
-      -1,    74,    75,    76,    64,    65,    66,    67,    68,    69,
-      -1,    71,    -1,    -1,    74,    75,    76,    90,    91,    92,
-      93,    94,    95,    96,    -1,    -1,    -1,    -1,   101,    -1,
-      90,    91,    92,    93,    94,    95,    96,    -1,    -1,    -1,
-      -1,   101,    64,    65,    66,    67,    68,    69,    -1,    71,
-      -1,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,
-      92,    93,    94,    95,    96,    -1,    -1,    -1,   100,    64,
-      65,    66,    67,    68,    69,    -1,    71,    -1,    -1,    74,
-      75,    76,    -1,    -1,    -1,    -1,    -1,    82,    83,    -1,
-      -1,    -1,    -1,    -1,    -1,    90,    91,    92,    93,    94,
-      95,    96,    64,    65,    66,    67,    68,    69,    -1,    71,
-      -1,    -1,    74,    75,    76,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,
-      92,    93,    94,    95,    96
+      -1,    54,    88,    89,    90,    91,    92,    93,    94,    62,
+      63,    64,    65,    66,    67,    -1,    69,    -1,    -1,    72,
+      73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
+      93,    94,    54,    96,    -1,    -1,    -1,    -1,    -1,    -1,
+      62,    63,    64,    65,    66,    67,    -1,    69,    -1,    -1,
+      72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,
+      92,    93,    94,    56,    -1,    -1,    -1,    -1,    -1,    62,
+      63,    64,    65,    66,    67,    -1,    69,    -1,    -1,    72,
+      73,    74,    62,    63,    64,    65,    66,    67,    -1,    69,
+      -1,    -1,    72,    73,    74,    88,    89,    90,    91,    92,
+      93,    94,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,
+      90,    91,    92,    93,    94,    -1,    -1,    -1,    98,    99,
+      62,    63,    64,    65,    66,    67,    -1,    69,    -1,    -1,
+      72,    73,    74,    62,    63,    64,    65,    66,    67,    -1,
+      69,    -1,    -1,    72,    73,    74,    88,    89,    90,    91,
+      92,    93,    94,    -1,    -1,    -1,    -1,    99,    -1,    88,
+      89,    90,    91,    92,    93,    94,    -1,    -1,    -1,    -1,
+      99,    62,    63,    64,    65,    66,    67,    -1,    69,    -1,
+      -1,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,
+      91,    92,    93,    94,    -1,    -1,    -1,    98,    62,    63,
+      64,    65,    66,    67,    -1,    69,    -1,    -1,    72,    73,
+      74,    -1,    -1,    -1,    -1,    -1,    80,    81,    -1,    -1,
+      -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,    93,
+      94,    62,    63,    64,    65,    66,    67,    -1,    69,    -1,
+      -1,    72,    73,    74,    62,    63,    64,    65,    -1,    -1,
+      -1,    69,    -1,    -1,    72,    73,    74,    88,    89,    90,
+      91,    92,    93,    94,    -1,    -1,    -1,    -1,    -1,    -1,
+      88,    89,    90,    91,    92,    93,    94
 };
 
   /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
      symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     1,    26,    30,    31,    33,    34,    35,    36,    40,
-      41,    42,    43,    44,    47,    49,    52,    53,    54,    57,
-      60,    61,    62,    63,    84,    85,    86,   106,   107,   108,
-     109,   110,   111,   123,   129,   139,   147,   149,   151,   154,
-      98,   150,   153,    53,   140,    16,    19,    20,    23,    24,
-      25,    27,    28,    32,    33,    34,    35,    36,    48,    49,
-      50,    51,    70,    77,    78,    79,    80,    81,    93,    94,
-      99,   102,   108,   133,   135,   136,   137,   138,   148,   162,
-     152,    53,    22,   136,    58,    59,    19,    20,    21,    32,
-     108,   108,   108,   136,   136,   148,   142,   136,   141,   155,
-       0,    98,    99,   136,   160,   136,   130,   160,   130,   108,
-     144,   135,    50,   135,   133,   133,   133,   133,   136,    48,
-     135,   136,   136,   136,   136,   136,   135,   135,   136,    27,
-      28,   104,   108,   136,   163,   164,   165,   166,    99,    64,
-      65,    66,    67,    68,    69,    71,    74,    75,    76,    90,
-      91,    92,    93,    94,    95,    96,   148,   108,   108,    46,
-      72,    73,   108,   130,    56,    66,   136,   135,    56,    66,
-      56,    66,    55,    58,   148,   108,   146,    56,    98,   108,
-     145,   108,   107,   108,   136,   160,   101,   126,   108,   156,
-     157,   157,   101,   135,   136,    50,    56,    50,    56,    50,
-      56,    50,    56,    82,    83,   100,   104,   104,   104,   103,
-     101,   101,   108,   160,   136,   136,   136,   136,   136,   136,
-     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
-     136,   130,   135,   108,   137,   108,   137,   108,   137,    45,
-      66,   136,   136,   136,    56,    66,    50,   136,   136,   136,
-     136,   136,   136,   101,   122,   122,   101,   100,   101,   100,
-     160,    55,   101,    98,    98,   144,   135,   136,   135,   136,
-     135,   136,   135,   136,   135,   135,   136,   136,   136,   136,
-      27,    28,   108,   166,   100,   101,   100,   157,    46,   136,
-     136,   126,   136,   136,   108,   146,   110,   111,   131,   132,
-     145,   143,   131,   157,   159,   159,    50,    50,    50,    50,
-     134,    98,   136,   118,   112,   115,   121,   135,   130,   130,
-      98,   136,   161,   127,   131,   131,   135,   135,   135,   135,
-     161,   159,   130,   128,   128,   131,    56,    66,    89,   131,
-     101,   100,   124,    29,   100,   131,   119,   113,   116,   127,
-     136,   136,   161,    38,    39,   125,   130,   108,   158,   126,
-      56,    37,    88,   131,   136,    87,   101,   120,   136,    56,
-     130,   126,   108,   121,   114,   136,    87,    55,   131,   126,
-     117,   131,    88,   121,   126,   127,   131,   121,    88,   131,
-      88
+       0,     1,    24,    28,    29,    31,    32,    33,    34,    38,
+      39,    40,    41,    42,    45,    47,    50,    51,    52,    55,
+      58,    59,    60,    61,    82,    83,    84,   104,   105,   106,
+     107,   108,   109,   121,   127,   137,   145,   147,   149,   152,
+      96,   148,   151,    51,   138,    14,    17,    18,    21,    22,
+      23,    25,    26,    30,    31,    32,    33,    34,    46,    47,
+      48,    49,    68,    75,    76,    77,    78,    79,    91,    92,
+      97,   100,   106,   131,   133,   134,   135,   136,   146,   160,
+     150,    51,    20,   134,    56,    57,    17,    18,    19,    30,
+     106,   106,   106,   134,   134,   146,   140,   134,   139,   153,
+       0,    96,    97,   134,   158,   134,   128,   158,   128,   106,
+     142,   133,    48,   133,   131,   131,   131,   131,   134,    46,
+     133,   134,   134,   134,   134,   134,   133,   133,   134,    25,
+      26,   102,   106,   134,   161,   162,   163,   164,    97,    62,
+      63,    64,    65,    66,    67,    69,    72,    73,    74,    88,
+      89,    90,    91,    92,    93,    94,   146,   106,   106,    44,
+      70,    71,   106,   128,    54,    64,   134,   133,    54,    64,
+      54,    64,    53,    56,   146,   106,   144,    54,    96,   106,
+     143,   106,   105,   106,   134,   158,    99,   124,   106,   154,
+     155,   155,    99,   133,   134,    48,    54,    48,    54,    48,
+      54,    48,    54,    80,    81,    98,   102,   102,   102,   101,
+      99,    99,   106,   158,   134,   134,   134,   134,   134,   134,
+     134,   134,   134,   134,   134,   134,   134,   134,   134,   134,
+     134,   128,   133,   106,   135,   106,   135,   106,   135,    43,
+      64,   134,   134,   134,    54,    64,    48,   134,   134,   134,
+     134,   134,   134,    99,   120,   120,    99,    98,    99,    98,
+     158,    53,    99,    96,    96,   142,   133,   134,   133,   134,
+     133,   134,   133,   134,   133,   133,   134,   134,   134,   134,
+      25,    26,   106,   164,    98,    99,    98,   155,    44,   134,
+     134,   124,   134,   134,   106,   144,   108,   109,   129,   130,
+     143,   141,   129,   155,   157,   157,    48,    48,    48,    48,
+     132,    96,   134,   116,   110,   113,   119,   133,   128,   128,
+      96,   134,   159,   125,   129,   129,   133,   133,   133,   133,
+     159,   157,   128,   126,   126,   129,    54,    64,    87,   129,
+      99,    98,   122,    27,    98,   129,   117,   111,   114,   125,
+     134,   134,   159,    36,    37,   123,   128,   106,   156,   124,
+      54,    35,    86,   129,   134,    85,    99,   118,   134,    54,
+     128,   124,   106,   119,   112,   134,    85,    53,   129,   124,
+     115,   129,    86,   119,   124,   125,   129,   119,    86,   129,
+      86
 };
 
   /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   105,   106,   106,   107,   107,   107,   108,   108,   108,
-     108,   108,   109,   109,   109,   109,   109,   109,   109,   109,
-     109,   109,   109,   109,   109,   109,   109,   109,   109,   110,
-     110,   111,   111,   111,   112,   113,   114,   111,   115,   116,
-     117,   111,   118,   119,   120,   111,   111,   111,   111,   111,
-     111,   121,   122,   123,   123,   124,   124,   125,   126,   127,
-     128,   129,   130,   131,   131,   132,   132,   133,   133,   133,
-     133,   133,   133,   133,   133,   133,   133,   133,   133,   133,
-     133,   133,   133,   133,   134,   133,   133,   133,   135,   135,
-     136,   136,   136,   136,   136,   136,   136,   136,   136,   136,
-     136,   136,   136,   136,   136,   136,   136,   136,   137,   137,
-     137,   137,   137,   137,   137,   137,   137,   137,   138,   138,
-     138,   139,   139,   139,   139,   139,   140,   139,   141,   139,
-     142,   139,   139,   139,   139,   143,   139,   139,   139,   144,
-     144,   144,   145,   145,   145,   146,   146,   146,   147,   147,
-     147,   147,   147,   147,   148,   148,   149,   149,   149,   150,
-     149,   152,   151,   151,   153,   151,   151,   151,   155,   154,
-     156,   157,   157,   157,   158,   158,   158,   159,   160,   160,
-     160,   161,   161,   161,   162,   163,   163,   163,   163,   164,
-     164,   165,   165,   166,   166,   166
+       0,   103,   104,   104,   105,   105,   105,   106,   106,   106,
+     106,   106,   107,   107,   107,   107,   107,   107,   107,   107,
+     107,   107,   107,   107,   107,   107,   107,   107,   107,   108,
+     108,   109,   109,   109,   110,   111,   112,   109,   113,   114,
+     115,   109,   116,   117,   118,   109,   109,   109,   109,   109,
+     109,   119,   120,   121,   121,   122,   122,   123,   124,   125,
+     126,   127,   128,   129,   129,   130,   130,   131,   131,   131,
+     131,   131,   131,   131,   131,   131,   131,   131,   131,   131,
+     131,   131,   131,   131,   132,   131,   131,   131,   133,   133,
+     134,   134,   134,   134,   134,   134,   134,   134,   134,   134,
+     134,   134,   134,   134,   134,   134,   134,   134,   135,   135,
+     135,   135,   135,   135,   135,   135,   135,   135,   136,   136,
+     136,   137,   137,   137,   137,   137,   138,   137,   139,   137,
+     140,   137,   137,   137,   137,   141,   137,   137,   137,   142,
+     142,   142,   143,   143,   143,   144,   144,   144,   145,   145,
+     145,   145,   145,   145,   146,   146,   147,   147,   147,   148,
+     147,   150,   149,   149,   151,   149,   149,   149,   153,   152,
+     154,   155,   155,   155,   156,   156,   156,   157,   158,   158,
+     158,   159,   159,   159,   160,   161,   161,   161,   161,   162,
+     162,   163,   163,   164,   164,   164
 };
 
   /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN.  */
@@ -1725,61 +1730,61 @@ yydestruct (const char *yymsg,
     case YYSYMBOL_THEFUNC: /* THEFUNC  */
 #line 231 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1729 "engines/director/lingo/lingo-gr.cpp"
+#line 1734 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_THEFUNCINOF: /* THEFUNCINOF  */
 #line 231 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1735 "engines/director/lingo/lingo-gr.cpp"
+#line 1740 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_VARID: /* VARID  */
 #line 231 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1741 "engines/director/lingo/lingo-gr.cpp"
+#line 1746 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_STRING: /* STRING  */
 #line 231 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1747 "engines/director/lingo/lingo-gr.cpp"
+#line 1752 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_SYMBOL: /* SYMBOL  */
 #line 231 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1753 "engines/director/lingo/lingo-gr.cpp"
+#line 1758 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ENDCLAUSE: /* ENDCLAUSE  */
 #line 231 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1759 "engines/director/lingo/lingo-gr.cpp"
+#line 1764 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tPLAYACCEL: /* tPLAYACCEL  */
 #line 231 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1765 "engines/director/lingo/lingo-gr.cpp"
+#line 1770 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_tMETHOD: /* tMETHOD  */
 #line 231 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1771 "engines/director/lingo/lingo-gr.cpp"
+#line 1776 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_ID: /* ID  */
 #line 231 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1777 "engines/director/lingo/lingo-gr.cpp"
+#line 1782 "engines/director/lingo/lingo-gr.cpp"
         break;
 
     case YYSYMBOL_on: /* on  */
 #line 231 "engines/director/lingo/lingo-gr.y"
             { delete ((*yyvaluep).s); }
-#line 1783 "engines/director/lingo/lingo-gr.cpp"
+#line 1788 "engines/director/lingo/lingo-gr.cpp"
         break;
 
       default:
@@ -2047,25 +2052,25 @@ yyreduce:
   case 8: /* ID: tCAST  */
 #line 243 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("cast"); }
-#line 2051 "engines/director/lingo/lingo-gr.cpp"
+#line 2056 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 9: /* ID: tFIELD  */
 #line 244 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("field"); }
-#line 2057 "engines/director/lingo/lingo-gr.cpp"
+#line 2062 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 10: /* ID: tSCRIPT  */
 #line 245 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("script"); }
-#line 2063 "engines/director/lingo/lingo-gr.cpp"
+#line 2068 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 11: /* ID: tWINDOW  */
 #line 246 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = new Common::String("window"); }
-#line 2069 "engines/director/lingo/lingo-gr.cpp"
+#line 2074 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 12: /* asgn: tPUT expr tINTO ID  */
@@ -2077,7 +2082,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code);
 		delete (yyvsp[0].s); }
-#line 2081 "engines/director/lingo/lingo-gr.cpp"
+#line 2086 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 13: /* asgn: tPUT expr tINTO chunkexpr  */
@@ -2085,7 +2090,7 @@ yyreduce:
                                         {
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[-2].code); }
-#line 2089 "engines/director/lingo/lingo-gr.cpp"
+#line 2094 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 14: /* asgn: tPUT THEMENUITEMSENTITY ID simpleexpr tINTO expr  */
@@ -2101,7 +2106,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-4].e)[1]);
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2105 "engines/director/lingo/lingo-gr.cpp"
+#line 2110 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 15: /* asgn: tPUT expr tAFTER ID  */
@@ -2113,7 +2118,7 @@ yyreduce:
 		g_lingo->code1(LC::c_putafter);
 		(yyval.code) = (yyvsp[-2].code);
 		delete (yyvsp[0].s); }
-#line 2117 "engines/director/lingo/lingo-gr.cpp"
+#line 2122 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 16: /* asgn: tPUT expr tAFTER chunkexpr  */
@@ -2121,7 +2126,7 @@ yyreduce:
                                         {
 		g_lingo->code1(LC::c_putafter);
 		(yyval.code) = (yyvsp[-2].code); }
-#line 2125 "engines/director/lingo/lingo-gr.cpp"
+#line 2130 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 17: /* asgn: tPUT expr tBEFORE ID  */
@@ -2133,7 +2138,7 @@ yyreduce:
 		g_lingo->code1(LC::c_putbefore);
 		(yyval.code) = (yyvsp[-2].code);
 		delete (yyvsp[0].s); }
-#line 2137 "engines/director/lingo/lingo-gr.cpp"
+#line 2142 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 18: /* asgn: tPUT expr tBEFORE chunkexpr  */
@@ -2141,7 +2146,7 @@ yyreduce:
                                         {
 		g_lingo->code1(LC::c_putbefore);
 		(yyval.code) = (yyvsp[-2].code); }
-#line 2145 "engines/director/lingo/lingo-gr.cpp"
+#line 2150 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 19: /* asgn: tSET ID tEQ expr  */
@@ -2153,7 +2158,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2157 "engines/director/lingo/lingo-gr.cpp"
+#line 2162 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 20: /* asgn: tSET THEENTITY tEQ expr  */
@@ -2165,7 +2170,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2169 "engines/director/lingo/lingo-gr.cpp"
+#line 2174 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 21: /* asgn: tSET ID tTO expr  */
@@ -2177,7 +2182,7 @@ yyreduce:
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = (yyvsp[0].code);
 		delete (yyvsp[-2].s); }
-#line 2181 "engines/director/lingo/lingo-gr.cpp"
+#line 2186 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 22: /* asgn: tSET THEENTITY tTO expr  */
@@ -2189,7 +2194,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-2].e)[0]);
 		g_lingo->codeInt((yyvsp[-2].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2193 "engines/director/lingo/lingo-gr.cpp"
+#line 2198 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 23: /* asgn: tSET THEENTITYWITHID expr tTO expr  */
@@ -2200,7 +2205,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2204 "engines/director/lingo/lingo-gr.cpp"
+#line 2209 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 24: /* asgn: tSET THEENTITYWITHID expr tEQ expr  */
@@ -2211,7 +2216,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-3].e)[0]);
 		g_lingo->codeInt((yyvsp[-3].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2215 "engines/director/lingo/lingo-gr.cpp"
+#line 2220 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 25: /* asgn: tSET THEMENUITEMENTITY simpleexpr tOF ID simpleexpr tTO expr  */
@@ -2227,7 +2232,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-6].e)[0]);
 		g_lingo->codeInt((yyvsp[-6].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2231 "engines/director/lingo/lingo-gr.cpp"
+#line 2236 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 26: /* asgn: tSET THEMENUITEMENTITY simpleexpr tOF ID simpleexpr tEQ expr  */
@@ -2243,7 +2248,7 @@ yyreduce:
 		g_lingo->codeInt((yyvsp[-6].e)[0]);
 		g_lingo->codeInt((yyvsp[-6].e)[1]);
 		(yyval.code) = (yyvsp[0].code); }
-#line 2247 "engines/director/lingo/lingo-gr.cpp"
+#line 2252 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 27: /* asgn: tSET THEOBJECTPROP tTO expr  */
@@ -2255,7 +2260,7 @@ yyreduce:
 		delete (yyvsp[-2].objectprop).obj;
 		delete (yyvsp[-2].objectprop).prop;
 		(yyval.code) = (yyvsp[0].code); }
-#line 2259 "engines/director/lingo/lingo-gr.cpp"
+#line 2264 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 28: /* asgn: tSET THEOBJECTPROP tEQ expr  */
@@ -2267,7 +2272,7 @@ yyreduce:
 		delete (yyvsp[-2].objectprop).obj;
 		delete (yyvsp[-2].objectprop).prop;
 		(yyval.code) = (yyvsp[0].code); }
-#line 2271 "engines/director/lingo/lingo-gr.cpp"
+#line 2276 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 33: /* stmt: tREPEAT tWHILE lbl expr jumpifz startrepeat stmtlist jump tENDREPEAT  */
@@ -2279,7 +2284,7 @@ yyreduce:
 		(*g_lingo->_currentAssembly)[(yyvsp[-4].code)] = end;		/* end, if cond fails */
 		(*g_lingo->_currentAssembly)[(yyvsp[-1].code)] = start;	/* looping back */
 		endRepeat((yyvsp[-1].code) + 1, (yyvsp[-6].code));	}
-#line 2283 "engines/director/lingo/lingo-gr.cpp"
+#line 2288 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 34: /* $@1: %empty  */
@@ -2287,20 +2292,20 @@ yyreduce:
                                 { g_lingo->code1(LC::c_varpush);
 				  g_lingo->codeString((yyvsp[-2].s)->c_str());
 				  mVar((yyvsp[-2].s), globalCheck()); }
-#line 2291 "engines/director/lingo/lingo-gr.cpp"
+#line 2296 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 35: /* $@2: %empty  */
 #line 394 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_eval);
 				  g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2298 "engines/director/lingo/lingo-gr.cpp"
+#line 2303 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 36: /* $@3: %empty  */
 #line 397 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_le); }
-#line 2304 "engines/director/lingo/lingo-gr.cpp"
+#line 2309 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 37: /* stmt: tREPEAT tWITH ID tEQ expr $@1 varassign $@2 tTO expr $@3 jumpifz startrepeat stmtlist tENDREPEAT  */
@@ -2325,7 +2330,7 @@ yyreduce:
 		(*g_lingo->_currentAssembly)[pos] = loop;		/* final count value */
 		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end;	/* end, if cond fails */
 		endRepeat(pos + 1, nextPos); }
-#line 2329 "engines/director/lingo/lingo-gr.cpp"
+#line 2334 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 38: /* $@4: %empty  */
@@ -2333,20 +2338,20 @@ yyreduce:
                                 { g_lingo->code1(LC::c_varpush);
 				  g_lingo->codeString((yyvsp[-2].s)->c_str());
 				  mVar((yyvsp[-2].s), globalCheck()); }
-#line 2337 "engines/director/lingo/lingo-gr.cpp"
+#line 2342 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 39: /* $@5: %empty  */
 #line 428 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_eval);
 				  g_lingo->codeString((yyvsp[-4].s)->c_str()); }
-#line 2344 "engines/director/lingo/lingo-gr.cpp"
+#line 2349 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 40: /* $@6: %empty  */
 #line 431 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_ge); }
-#line 2350 "engines/director/lingo/lingo-gr.cpp"
+#line 2355 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 41: /* stmt: tREPEAT tWITH ID tEQ expr $@4 varassign $@5 tDOWN tTO expr $@6 jumpifz startrepeat stmtlist tENDREPEAT  */
@@ -2371,7 +2376,7 @@ yyreduce:
 		(*g_lingo->_currentAssembly)[pos] = loop;		/* final count value */
 		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end;	/* end, if cond fails */
 		endRepeat(pos + 1, nextPos); }
-#line 2375 "engines/director/lingo/lingo-gr.cpp"
+#line 2380 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 42: /* $@7: %empty  */
@@ -2382,7 +2387,7 @@ yyreduce:
 				  g_lingo->codeFunc(&count, 1);
 				  g_lingo->code1(LC::c_intpush);	// start counter
 				  g_lingo->codeInt(1); }
-#line 2386 "engines/director/lingo/lingo-gr.cpp"
+#line 2391 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 43: /* $@8: %empty  */
@@ -2392,7 +2397,7 @@ yyreduce:
 				  g_lingo->code1(LC::c_stackpeek);	// get array size
 				  g_lingo->codeInt(2);
 				  g_lingo->code1(LC::c_le); }
-#line 2396 "engines/director/lingo/lingo-gr.cpp"
+#line 2401 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 44: /* $@9: %empty  */
@@ -2407,7 +2412,7 @@ yyreduce:
 				  g_lingo->codeString((yyvsp[-6].s)->c_str());
 				  mVar((yyvsp[-6].s), globalCheck());
 				  g_lingo->code1(LC::c_assign); }
-#line 2411 "engines/director/lingo/lingo-gr.cpp"
+#line 2416 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 45: /* stmt: tREPEAT tWITH ID tIN expr $@7 lbl $@8 jumpifz $@9 startrepeat stmtlist tENDREPEAT  */
@@ -2431,7 +2436,7 @@ yyreduce:
 		(*g_lingo->_currentAssembly)[jump + 1] = loop;		/* final count value */
 		(*g_lingo->_currentAssembly)[(yyvsp[-4].code)] = end;		/* end, if cond fails */
 		endRepeat(end2, nextPos); }
-#line 2435 "engines/director/lingo/lingo-gr.cpp"
+#line 2440 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 46: /* stmt: tNEXT tREPEAT  */
@@ -2444,7 +2449,7 @@ yyreduce:
 		} else {
 			warning("# LINGO: next repeat not inside repeat block");
 		} }
-#line 2448 "engines/director/lingo/lingo-gr.cpp"
+#line 2453 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 47: /* stmt: tWHEN ID tTHEN expr  */
@@ -2452,37 +2457,37 @@ yyreduce:
                                 {
 		g_lingo->code1(LC::c_whencode);
 		g_lingo->codeString((yyvsp[-2].s)->c_str()); }
-#line 2456 "engines/director/lingo/lingo-gr.cpp"
+#line 2461 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 48: /* stmt: tTELL expr '\n' tellstart stmtlist lbl tENDTELL  */
 #line 512 "engines/director/lingo/lingo-gr.y"
                                                           { g_lingo->code1(LC::c_telldone); }
-#line 2462 "engines/director/lingo/lingo-gr.cpp"
+#line 2467 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 49: /* stmt: tTELL expr tTO tellstart stmtoneliner lbl  */
 #line 513 "engines/director/lingo/lingo-gr.y"
                                                     { g_lingo->code1(LC::c_telldone); }
-#line 2468 "engines/director/lingo/lingo-gr.cpp"
+#line 2473 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 50: /* stmt: error '\n'  */
 #line 514 "engines/director/lingo/lingo-gr.y"
                                         { yyerrok; }
-#line 2474 "engines/director/lingo/lingo-gr.cpp"
+#line 2479 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 51: /* startrepeat: %empty  */
 #line 516 "engines/director/lingo/lingo-gr.y"
                                 { startRepeat(); }
-#line 2480 "engines/director/lingo/lingo-gr.cpp"
+#line 2485 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 52: /* tellstart: %empty  */
 #line 518 "engines/director/lingo/lingo-gr.y"
                                 { g_lingo->code1(LC::c_tell); }
-#line 2486 "engines/director/lingo/lingo-gr.cpp"
+#line 2491 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 53: /* ifstmt: if expr jumpifz tTHEN stmtlist jump elseifstmtlist lbl tENDIF  */
@@ -2494,7 +2499,7 @@ yyreduce:
 		(*g_lingo->_currentAssembly)[(yyvsp[-6].code)] = else1;		/* elsepart */
 		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = end3;		/* end, if cond fails */
 		g_lingo->processIf((yyvsp[-3].code), (yyvsp[-1].code)); }
-#line 2498 "engines/director/lingo/lingo-gr.cpp"
+#line 2503 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 54: /* ifstmt: if expr jumpifz tTHEN stmtlist jump elseifstmtlist tELSE stmtlist lbl tENDIF  */
@@ -2506,7 +2511,7 @@ yyreduce:
 		(*g_lingo->_currentAssembly)[(yyvsp[-8].code)] = else1;		/* elsepart */
 		(*g_lingo->_currentAssembly)[(yyvsp[-5].code)] = end;		/* end, if cond fails */
 		g_lingo->processIf((yyvsp[-5].code), (yyvsp[-1].code)); }
-#line 2510 "engines/director/lingo/lingo-gr.cpp"
+#line 2515 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 57: /* elseifstmt: tELSIF expr jumpifz tTHEN stmtlist jump  */
@@ -2516,7 +2521,7 @@ yyreduce:
 		WRITE_UINT32(&else1, (yyvsp[0].code) + 1 - (yyvsp[-3].code) + 1);
 		(*g_lingo->_currentAssembly)[(yyvsp[-3].code)] = else1;	/* end, if cond fails */
 		g_lingo->codeLabel((yyvsp[0].code)); }
-#line 2520 "engines/director/lingo/lingo-gr.cpp"
+#line 2525 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 58: /* jumpifz: %empty  */
@@ -2524,7 +2529,7 @@ yyreduce:
                                 {
 		g_lingo->code2(LC::c_jumpifz, 0);
 		(yyval.code) = g_lingo->_currentAssembly->size() - 1; }
-#line 2528 "engines/director/lingo/lingo-gr.cpp"
+#line 2533 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 59: /* jump: %empty  */
@@ -2532,7 +2537,7 @@ yyreduce:
                                 {
 		g_lingo->code2(LC::c_jump, 0);
 		(yyval.code) = g_lingo->_currentAssembly->size() - 1; }
-#line 2536 "engines/director/lingo/lingo-gr.cpp"
+#line 2541 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 60: /* varassign: %empty  */
@@ -2540,20 +2545,20 @@ yyreduce:
                                         {
 		g_lingo->code1(LC::c_assign);
 		(yyval.code) = g_lingo->_currentAssembly->size() - 1; }
-#line 2544 "engines/director/lingo/lingo-gr.cpp"
+#line 2549 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 61: /* if: tIF  */
 #line 556 "engines/director/lingo/lingo-gr.y"
                                                 {
 		g_lingo->codeLabel(0); }
-#line 2551 "engines/director/lingo/lingo-gr.cpp"
+#line 2556 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 62: /* lbl: %empty  */
 #line 559 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.code) = g_lingo->_currentAssembly->size(); }
-#line 2557 "engines/director/lingo/lingo-gr.cpp"
+#line 2562 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 67: /* simpleexprnoparens: INT  */
@@ -2561,7 +2566,7 @@ yyreduce:
                                 {
 		(yyval.code) = g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt((yyvsp[0].i)); }
-#line 2565 "engines/director/lingo/lingo-gr.cpp"
+#line 2570 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 68: /* simpleexprnoparens: FLOAT  */
@@ -2569,7 +2574,7 @@ yyreduce:
                         {
 		(yyval.code) = g_lingo->code1(LC::c_floatpush);
 		g_lingo->codeFloat((yyvsp[0].f)); }
-#line 2573 "engines/director/lingo/lingo-gr.cpp"
+#line 2578 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 69: /* simpleexprnoparens: SYMBOL  */
@@ -2578,7 +2583,7 @@ yyreduce:
 		(yyval.code) = g_lingo->code1(LC::c_symbolpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2582 "engines/director/lingo/lingo-gr.cpp"
+#line 2587 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 70: /* simpleexprnoparens: STRING  */
@@ -2587,25 +2592,25 @@ yyreduce:
 		(yyval.code) = g_lingo->code1(LC::c_stringpush);
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2591 "engines/director/lingo/lingo-gr.cpp"
+#line 2596 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 71: /* simpleexprnoparens: '+' simpleexpr  */
 #line 581 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = (yyvsp[0].code); }
-#line 2597 "engines/director/lingo/lingo-gr.cpp"
+#line 2602 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 72: /* simpleexprnoparens: '-' simpleexpr  */
 #line 582 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = (yyvsp[0].code); g_lingo->code1(LC::c_negate); }
-#line 2603 "engines/director/lingo/lingo-gr.cpp"
+#line 2608 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 73: /* simpleexprnoparens: tNOT simpleexpr  */
 #line 583 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_not); }
-#line 2609 "engines/director/lingo/lingo-gr.cpp"
+#line 2614 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 75: /* simpleexprnoparens: THEENTITY  */
@@ -2618,7 +2623,7 @@ yyreduce:
 		WRITE_UINT32(&e, (yyvsp[0].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[0].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2622 "engines/director/lingo/lingo-gr.cpp"
+#line 2627 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 76: /* simpleexprnoparens: THEENTITYWITHID simpleexpr  */
@@ -2629,7 +2634,7 @@ yyreduce:
 		WRITE_UINT32(&e, (yyvsp[-1].e)[0]);
 		WRITE_UINT32(&f, (yyvsp[-1].e)[1]);
 		g_lingo->code2(e, f); }
-#line 2633 "engines/director/lingo/lingo-gr.cpp"
+#line 2638 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 77: /* simpleexprnoparens: THEFUNCINOF simpleexpr  */
@@ -2637,7 +2642,7 @@ yyreduce:
                                         {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-1].s), 1);
 		delete (yyvsp[-1].s); }
-#line 2641 "engines/director/lingo/lingo-gr.cpp"
+#line 2646 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 78: /* simpleexprnoparens: THEFUNC tOF simpleexpr  */
@@ -2645,7 +2650,7 @@ yyreduce:
                                         {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-2].s), 1);
 		delete (yyvsp[-2].s); }
-#line 2649 "engines/director/lingo/lingo-gr.cpp"
+#line 2654 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 79: /* simpleexprnoparens: THEOBJECTPROP  */
@@ -2656,19 +2661,19 @@ yyreduce:
 		g_lingo->codeString((yyvsp[0].objectprop).prop->c_str());
 		delete (yyvsp[0].objectprop).obj;
 		delete (yyvsp[0].objectprop).prop; }
-#line 2660 "engines/director/lingo/lingo-gr.cpp"
+#line 2665 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 80: /* simpleexprnoparens: tSPRITE expr tINTERSECTS simpleexpr  */
 #line 611 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_intersects); }
-#line 2666 "engines/director/lingo/lingo-gr.cpp"
+#line 2671 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 81: /* simpleexprnoparens: tSPRITE expr tWITHIN simpleexpr  */
 #line 612 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_within); }
-#line 2672 "engines/director/lingo/lingo-gr.cpp"
+#line 2677 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 83: /* simpleexprnoparens: ID '(' ID ')'  */
@@ -2679,13 +2684,13 @@ yyreduce:
 			g_lingo->codeFunc((yyvsp[-3].s), 1);
 			delete (yyvsp[-3].s);
 			delete (yyvsp[-1].s); }
-#line 2683 "engines/director/lingo/lingo-gr.cpp"
+#line 2688 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 84: /* $@10: %empty  */
 #line 620 "engines/director/lingo/lingo-gr.y"
                                       { g_lingo->code1(LC::c_lazyeval); g_lingo->codeString((yyvsp[-1].s)->c_str()); }
-#line 2689 "engines/director/lingo/lingo-gr.cpp"
+#line 2694 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 85: /* simpleexprnoparens: ID '(' ID ',' $@10 nonemptyarglist ')'  */
@@ -2694,7 +2699,7 @@ yyreduce:
 			g_lingo->codeFunc((yyvsp[-6].s), (yyvsp[-1].narg) + 1);
 			delete (yyvsp[-6].s);
 			delete (yyvsp[-4].s); }
-#line 2698 "engines/director/lingo/lingo-gr.cpp"
+#line 2703 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 86: /* simpleexprnoparens: ID '(' arglist ')'  */
@@ -2702,7 +2707,7 @@ yyreduce:
                                         {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 2706 "engines/director/lingo/lingo-gr.cpp"
+#line 2711 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 87: /* simpleexprnoparens: ID  */
@@ -2715,121 +2720,121 @@ yyreduce:
 		}
 		g_lingo->codeString((yyvsp[0].s)->c_str());
 		delete (yyvsp[0].s); }
-#line 2719 "engines/director/lingo/lingo-gr.cpp"
+#line 2724 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 89: /* simpleexpr: '(' expr ')'  */
 #line 638 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.code) = (yyvsp[-1].code); }
-#line 2725 "engines/director/lingo/lingo-gr.cpp"
+#line 2730 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 90: /* expr: simpleexpr  */
 #line 640 "engines/director/lingo/lingo-gr.y"
                  { (yyval.code) = (yyvsp[0].code); }
-#line 2731 "engines/director/lingo/lingo-gr.cpp"
+#line 2736 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 91: /* expr: expr '+' expr  */
 #line 641 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_add); }
-#line 2737 "engines/director/lingo/lingo-gr.cpp"
+#line 2742 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 92: /* expr: expr '-' expr  */
 #line 642 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_sub); }
-#line 2743 "engines/director/lingo/lingo-gr.cpp"
+#line 2748 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 93: /* expr: expr '*' expr  */
 #line 643 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mul); }
-#line 2749 "engines/director/lingo/lingo-gr.cpp"
+#line 2754 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 94: /* expr: expr '/' expr  */
 #line 644 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_div); }
-#line 2755 "engines/director/lingo/lingo-gr.cpp"
+#line 2760 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 95: /* expr: expr tMOD expr  */
 #line 645 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_mod); }
-#line 2761 "engines/director/lingo/lingo-gr.cpp"
+#line 2766 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 96: /* expr: expr '>' expr  */
 #line 646 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gt); }
-#line 2767 "engines/director/lingo/lingo-gr.cpp"
+#line 2772 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 97: /* expr: expr '<' expr  */
 #line 647 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lt); }
-#line 2773 "engines/director/lingo/lingo-gr.cpp"
+#line 2778 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 98: /* expr: expr tEQ expr  */
 #line 648 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_eq); }
-#line 2779 "engines/director/lingo/lingo-gr.cpp"
+#line 2784 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 99: /* expr: expr tNEQ expr  */
 #line 649 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_neq); }
-#line 2785 "engines/director/lingo/lingo-gr.cpp"
+#line 2790 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 100: /* expr: expr tGE expr  */
 #line 650 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ge); }
-#line 2791 "engines/director/lingo/lingo-gr.cpp"
+#line 2796 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 101: /* expr: expr tLE expr  */
 #line 651 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_le); }
-#line 2797 "engines/director/lingo/lingo-gr.cpp"
+#line 2802 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 102: /* expr: expr tAND expr  */
 #line 652 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_and); }
-#line 2803 "engines/director/lingo/lingo-gr.cpp"
+#line 2808 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 103: /* expr: expr tOR expr  */
 #line 653 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_or); }
-#line 2809 "engines/director/lingo/lingo-gr.cpp"
+#line 2814 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 104: /* expr: expr '&' expr  */
 #line 654 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_ampersand); }
-#line 2815 "engines/director/lingo/lingo-gr.cpp"
+#line 2820 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 105: /* expr: expr tCONCAT expr  */
 #line 655 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_concat); }
-#line 2821 "engines/director/lingo/lingo-gr.cpp"
+#line 2826 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 106: /* expr: expr tCONTAINS expr  */
 #line 656 "engines/director/lingo/lingo-gr.y"
                                         { g_lingo->code1(LC::c_contains); }
-#line 2827 "engines/director/lingo/lingo-gr.cpp"
+#line 2832 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 107: /* expr: expr tSTARTS expr  */
 #line 657 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_starts); }
-#line 2833 "engines/director/lingo/lingo-gr.cpp"
+#line 2838 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 108: /* chunkexpr: tFIELD simpleexprnoparens  */
@@ -2837,7 +2842,7 @@ yyreduce:
                                         {
 		Common::String field("field");
 		g_lingo->codeFunc(&field, 1); }
-#line 2841 "engines/director/lingo/lingo-gr.cpp"
+#line 2846 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 109: /* chunkexpr: tCAST simpleexprnoparens  */
@@ -2845,55 +2850,55 @@ yyreduce:
                                                 {
 		Common::String cast("cast");
 		g_lingo->codeFunc(&cast, 1); }
-#line 2849 "engines/director/lingo/lingo-gr.cpp"
+#line 2854 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 110: /* chunkexpr: tCHAR expr tOF simpleexpr  */
 #line 665 "engines/director/lingo/lingo-gr.y"
                                                                 { g_lingo->code1(LC::c_charOf); }
-#line 2855 "engines/director/lingo/lingo-gr.cpp"
+#line 2860 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 111: /* chunkexpr: tCHAR expr tTO expr tOF simpleexpr  */
 #line 666 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_charToOf); }
-#line 2861 "engines/director/lingo/lingo-gr.cpp"
+#line 2866 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 112: /* chunkexpr: tITEM expr tOF simpleexpr  */
 #line 667 "engines/director/lingo/lingo-gr.y"
                                                                 { g_lingo->code1(LC::c_itemOf); }
-#line 2867 "engines/director/lingo/lingo-gr.cpp"
+#line 2872 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 113: /* chunkexpr: tITEM expr tTO expr tOF simpleexpr  */
 #line 668 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_itemToOf); }
-#line 2873 "engines/director/lingo/lingo-gr.cpp"
+#line 2878 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 114: /* chunkexpr: tLINE expr tOF simpleexpr  */
 #line 669 "engines/director/lingo/lingo-gr.y"
                                                                 { g_lingo->code1(LC::c_lineOf); }
-#line 2879 "engines/director/lingo/lingo-gr.cpp"
+#line 2884 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 115: /* chunkexpr: tLINE expr tTO expr tOF simpleexpr  */
 #line 670 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_lineToOf); }
-#line 2885 "engines/director/lingo/lingo-gr.cpp"
+#line 2890 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 116: /* chunkexpr: tWORD expr tOF simpleexpr  */
 #line 671 "engines/director/lingo/lingo-gr.y"
                                                                 { g_lingo->code1(LC::c_wordOf); }
-#line 2891 "engines/director/lingo/lingo-gr.cpp"
+#line 2896 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 117: /* chunkexpr: tWORD expr tTO expr tOF simpleexpr  */
 #line 672 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_wordToOf); }
-#line 2897 "engines/director/lingo/lingo-gr.cpp"
+#line 2902 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 119: /* reference: tSCRIPT simpleexprnoparens  */
@@ -2901,7 +2906,7 @@ yyreduce:
                                         {
 		Common::String script("script");
 		g_lingo->codeFunc(&script, 1); }
-#line 2905 "engines/director/lingo/lingo-gr.cpp"
+#line 2910 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 120: /* reference: tWINDOW simpleexprnoparens  */
@@ -2909,7 +2914,7 @@ yyreduce:
                                         {
 		Common::String window("window");
 		g_lingo->codeFunc(&window, 1); }
-#line 2913 "engines/director/lingo/lingo-gr.cpp"
+#line 2918 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 121: /* proc: tPUT expr  */
@@ -2917,7 +2922,7 @@ yyreduce:
                                                 {
 		Common::String put("put");
 		g_lingo->codeCmd(&put, 1); }
-#line 2921 "engines/director/lingo/lingo-gr.cpp"
+#line 2926 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 124: /* proc: tEXIT tREPEAT  */
@@ -2930,49 +2935,49 @@ yyreduce:
 		} else {
 			warning("# LINGO: exit repeat not inside repeat block");
 		} }
-#line 2934 "engines/director/lingo/lingo-gr.cpp"
+#line 2939 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 125: /* proc: tEXIT  */
 #line 695 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_procret); }
-#line 2940 "engines/director/lingo/lingo-gr.cpp"
+#line 2945 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 126: /* $@11: %empty  */
 #line 696 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 2946 "engines/director/lingo/lingo-gr.cpp"
+#line 2951 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 127: /* proc: tGLOBAL $@11 globallist  */
 #line 696 "engines/director/lingo/lingo-gr.y"
                                                                                  { inLast(); }
-#line 2952 "engines/director/lingo/lingo-gr.cpp"
+#line 2957 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 128: /* $@12: %empty  */
 #line 697 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 2958 "engines/director/lingo/lingo-gr.cpp"
+#line 2963 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 129: /* proc: tPROPERTY $@12 propertylist  */
 #line 697 "engines/director/lingo/lingo-gr.y"
                                                                                    { inLast(); }
-#line 2964 "engines/director/lingo/lingo-gr.cpp"
+#line 2969 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 130: /* $@13: %empty  */
 #line 698 "engines/director/lingo/lingo-gr.y"
                                                         { inArgs(); }
-#line 2970 "engines/director/lingo/lingo-gr.cpp"
+#line 2975 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 131: /* proc: tINSTANCE $@13 instancelist  */
 #line 698 "engines/director/lingo/lingo-gr.y"
                                                                                    { inLast(); }
-#line 2976 "engines/director/lingo/lingo-gr.cpp"
+#line 2981 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 132: /* proc: tOPEN expr tWITH expr  */
@@ -2980,7 +2985,7 @@ yyreduce:
                                         {
 		Common::String open("open");
 		g_lingo->codeCmd(&open, 2); }
-#line 2984 "engines/director/lingo/lingo-gr.cpp"
+#line 2989 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 133: /* proc: tOPEN expr  */
@@ -2988,7 +2993,7 @@ yyreduce:
                                                 {
 		Common::String open("open");
 		g_lingo->codeCmd(&open, 1); }
-#line 2992 "engines/director/lingo/lingo-gr.cpp"
+#line 2997 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 134: /* proc: ID '(' ID ')'  */
@@ -2999,13 +3004,13 @@ yyreduce:
 			g_lingo->codeCmd((yyvsp[-3].s), 1);
 			delete (yyvsp[-3].s);
 			delete (yyvsp[-1].s); }
-#line 3003 "engines/director/lingo/lingo-gr.cpp"
+#line 3008 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 135: /* $@14: %empty  */
 #line 711 "engines/director/lingo/lingo-gr.y"
                                       { g_lingo->code1(LC::c_lazyeval); g_lingo->codeString((yyvsp[-1].s)->c_str()); }
-#line 3009 "engines/director/lingo/lingo-gr.cpp"
+#line 3014 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 136: /* proc: ID '(' ID ',' $@14 nonemptyarglist ')'  */
@@ -3014,7 +3019,7 @@ yyreduce:
 			g_lingo->codeCmd((yyvsp[-6].s), (yyvsp[-1].narg) + 1);
 			delete (yyvsp[-6].s);
 			delete (yyvsp[-4].s); }
-#line 3018 "engines/director/lingo/lingo-gr.cpp"
+#line 3023 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 137: /* proc: ID '(' arglist ')'  */
@@ -3022,7 +3027,7 @@ yyreduce:
                                         {
 		g_lingo->codeCmd((yyvsp[-3].s), (yyvsp[-1].narg));
 		delete (yyvsp[-3].s); }
-#line 3026 "engines/director/lingo/lingo-gr.cpp"
+#line 3031 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 138: /* proc: ID arglist  */
@@ -3030,7 +3035,7 @@ yyreduce:
                                                 {
 		g_lingo->codeCmd((yyvsp[-1].s), (yyvsp[0].narg));
 		delete (yyvsp[-1].s); }
-#line 3034 "engines/director/lingo/lingo-gr.cpp"
+#line 3039 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 140: /* globallist: ID  */
@@ -3038,7 +3043,7 @@ yyreduce:
                                                         {
 		mVar((yyvsp[0].s), kVarGlobal);
 		delete (yyvsp[0].s); }
-#line 3042 "engines/director/lingo/lingo-gr.cpp"
+#line 3047 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 141: /* globallist: ID ',' globallist  */
@@ -3046,7 +3051,7 @@ yyreduce:
                                                 {
 		mVar((yyvsp[-2].s), kVarGlobal);
 		delete (yyvsp[-2].s); }
-#line 3050 "engines/director/lingo/lingo-gr.cpp"
+#line 3055 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 143: /* propertylist: ID  */
@@ -3054,7 +3059,7 @@ yyreduce:
                                                         {
 		mVar((yyvsp[0].s), kVarProperty);
 		delete (yyvsp[0].s); }
-#line 3058 "engines/director/lingo/lingo-gr.cpp"
+#line 3063 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 144: /* propertylist: ID ',' propertylist  */
@@ -3062,7 +3067,7 @@ yyreduce:
                                         {
 		mVar((yyvsp[-2].s), kVarProperty);
 		delete (yyvsp[-2].s); }
-#line 3066 "engines/director/lingo/lingo-gr.cpp"
+#line 3071 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 146: /* instancelist: ID  */
@@ -3070,7 +3075,7 @@ yyreduce:
                                                         {
 		mVar((yyvsp[0].s), kVarInstance);
 		delete (yyvsp[0].s); }
-#line 3074 "engines/director/lingo/lingo-gr.cpp"
+#line 3079 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 147: /* instancelist: ID ',' instancelist  */
@@ -3078,25 +3083,25 @@ yyreduce:
                                         {
 		mVar((yyvsp[-2].s), kVarInstance);
 		delete (yyvsp[-2].s); }
-#line 3082 "engines/director/lingo/lingo-gr.cpp"
+#line 3087 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 148: /* gotofunc: tGOLOOP  */
 #line 754 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoloop); }
-#line 3088 "engines/director/lingo/lingo-gr.cpp"
+#line 3093 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 149: /* gotofunc: tGO tNEXT  */
 #line 755 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->code1(LC::c_gotonext); }
-#line 3094 "engines/director/lingo/lingo-gr.cpp"
+#line 3099 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 150: /* gotofunc: tGO tPREVIOUS  */
 #line 756 "engines/director/lingo/lingo-gr.y"
                                                 { g_lingo->code1(LC::c_gotoprevious); }
-#line 3100 "engines/director/lingo/lingo-gr.cpp"
+#line 3105 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 151: /* gotofunc: tGO expr  */
@@ -3105,7 +3110,7 @@ yyreduce:
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_goto); }
-#line 3109 "engines/director/lingo/lingo-gr.cpp"
+#line 3114 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 152: /* gotofunc: tGO expr gotomovie  */
@@ -3114,7 +3119,7 @@ yyreduce:
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_goto); }
-#line 3118 "engines/director/lingo/lingo-gr.cpp"
+#line 3123 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 153: /* gotofunc: tGO gotomovie  */
@@ -3123,7 +3128,7 @@ yyreduce:
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_goto); }
-#line 3127 "engines/director/lingo/lingo-gr.cpp"
+#line 3132 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 156: /* playfunc: tPLAY expr  */
@@ -3132,7 +3137,7 @@ yyreduce:
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(1);
 		g_lingo->code1(LC::c_play); }
-#line 3136 "engines/director/lingo/lingo-gr.cpp"
+#line 3141 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 157: /* playfunc: tPLAY expr gotomovie  */
@@ -3141,7 +3146,7 @@ yyreduce:
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(3);
 		g_lingo->code1(LC::c_play); }
-#line 3145 "engines/director/lingo/lingo-gr.cpp"
+#line 3150 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 158: /* playfunc: tPLAY gotomovie  */
@@ -3150,13 +3155,13 @@ yyreduce:
 		g_lingo->code1(LC::c_intpush);
 		g_lingo->codeInt(2);
 		g_lingo->code1(LC::c_play); }
-#line 3154 "engines/director/lingo/lingo-gr.cpp"
+#line 3159 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 159: /* $@15: %empty  */
 #line 785 "engines/director/lingo/lingo-gr.y"
                      { g_lingo->codeSetImmediate(true); }
-#line 3160 "engines/director/lingo/lingo-gr.cpp"
+#line 3165 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 160: /* playfunc: tPLAYACCEL $@15 arglist  */
@@ -3165,13 +3170,13 @@ yyreduce:
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeCmd((yyvsp[-2].s), (yyvsp[0].narg));
 		delete (yyvsp[-2].s); }
-#line 3169 "engines/director/lingo/lingo-gr.cpp"
+#line 3174 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 161: /* $@16: %empty  */
 #line 815 "engines/director/lingo/lingo-gr.y"
              { startDef(); }
-#line 3175 "engines/director/lingo/lingo-gr.cpp"
+#line 3180 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 162: /* defn: tMACRO $@16 ID lbl argdef '\n' argstore stmtlist  */
@@ -3181,19 +3186,19 @@ yyreduce:
 		g_lingo->codeDefine(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
 		endDef();
 		delete (yyvsp[-5].s); }
-#line 3185 "engines/director/lingo/lingo-gr.cpp"
+#line 3190 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 163: /* defn: tFACTORY ID  */
 #line 821 "engines/director/lingo/lingo-gr.y"
                         { g_lingo->codeFactory(*(yyvsp[0].s)); delete (yyvsp[0].s); }
-#line 3191 "engines/director/lingo/lingo-gr.cpp"
+#line 3196 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 164: /* $@17: %empty  */
 #line 822 "engines/director/lingo/lingo-gr.y"
                   { startDef(); (*g_lingo->_methodVars)["me"] = kVarArgument; }
-#line 3197 "engines/director/lingo/lingo-gr.cpp"
+#line 3202 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 165: /* defn: tMETHOD $@17 lbl argdef '\n' argstore stmtlist  */
@@ -3203,7 +3208,7 @@ yyreduce:
 		g_lingo->codeDefine(*(yyvsp[-6].s), (yyvsp[-4].code), (yyvsp[-3].narg) + 1);
 		endDef();
 		delete (yyvsp[-6].s); }
-#line 3207 "engines/director/lingo/lingo-gr.cpp"
+#line 3212 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 166: /* defn: on lbl argdef '\n' argstore stmtlist ENDCLAUSE endargdef  */
@@ -3216,7 +3221,7 @@ yyreduce:
 		checkEnd((yyvsp[-1].s), (yyvsp[-7].s)->c_str(), false);
 		delete (yyvsp[-7].s);
 		delete (yyvsp[-1].s); }
-#line 3220 "engines/director/lingo/lingo-gr.cpp"
+#line 3225 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 167: /* defn: on lbl argdef '\n' argstore stmtlist  */
@@ -3226,151 +3231,151 @@ yyreduce:
 		g_lingo->codeDefine(*(yyvsp[-5].s), (yyvsp[-4].code), (yyvsp[-3].narg));
 		endDef();
 		delete (yyvsp[-5].s); }
-#line 3230 "engines/director/lingo/lingo-gr.cpp"
+#line 3235 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 168: /* $@18: %empty  */
 #line 842 "engines/director/lingo/lingo-gr.y"
          { startDef(); }
-#line 3236 "engines/director/lingo/lingo-gr.cpp"
+#line 3241 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 169: /* on: tON $@18 ID  */
 #line 842 "engines/director/lingo/lingo-gr.y"
                                 { (yyval.s) = (yyvsp[0].s); }
-#line 3242 "engines/director/lingo/lingo-gr.cpp"
+#line 3247 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 170: /* argname: ID  */
 #line 844 "engines/director/lingo/lingo-gr.y"
                                                         { g_lingo->codeArg((yyvsp[0].s)); mVar((yyvsp[0].s), kVarArgument); delete (yyvsp[0].s); }
-#line 3248 "engines/director/lingo/lingo-gr.cpp"
+#line 3253 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 171: /* argdef: %empty  */
 #line 846 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 0; }
-#line 3254 "engines/director/lingo/lingo-gr.cpp"
+#line 3259 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 172: /* argdef: argname  */
 #line 847 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.narg) = 1; }
-#line 3260 "engines/director/lingo/lingo-gr.cpp"
+#line 3265 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 173: /* argdef: argname ',' argdef  */
 #line 848 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[0].narg) + 1; }
-#line 3266 "engines/director/lingo/lingo-gr.cpp"
+#line 3271 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 175: /* endargdef: ID  */
 #line 851 "engines/director/lingo/lingo-gr.y"
                                                         { delete (yyvsp[0].s); }
-#line 3272 "engines/director/lingo/lingo-gr.cpp"
+#line 3277 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 176: /* endargdef: endargdef ',' ID  */
 #line 852 "engines/director/lingo/lingo-gr.y"
                                                 { delete (yyvsp[0].s); }
-#line 3278 "engines/director/lingo/lingo-gr.cpp"
+#line 3283 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 177: /* argstore: %empty  */
 #line 854 "engines/director/lingo/lingo-gr.y"
                                         { inDef(); }
-#line 3284 "engines/director/lingo/lingo-gr.cpp"
+#line 3289 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 178: /* arglist: %empty  */
 #line 856 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 0; }
-#line 3290 "engines/director/lingo/lingo-gr.cpp"
+#line 3295 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 179: /* arglist: expr  */
 #line 857 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.narg) = 1; }
-#line 3296 "engines/director/lingo/lingo-gr.cpp"
+#line 3301 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 180: /* arglist: expr ',' arglist  */
 #line 858 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = (yyvsp[0].narg) + 1; }
-#line 3302 "engines/director/lingo/lingo-gr.cpp"
+#line 3307 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 181: /* nonemptyarglist: expr  */
 #line 860 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = 1; }
-#line 3308 "engines/director/lingo/lingo-gr.cpp"
+#line 3313 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 182: /* nonemptyarglist: expr ','  */
 #line 861 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.narg) = 1; }
-#line 3314 "engines/director/lingo/lingo-gr.cpp"
+#line 3319 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 183: /* nonemptyarglist: expr ',' nonemptyarglist  */
 #line 862 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[0].narg) + 1; }
-#line 3320 "engines/director/lingo/lingo-gr.cpp"
+#line 3325 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 184: /* list: '[' valuelist ']'  */
 #line 864 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = (yyvsp[-1].code); }
-#line 3326 "engines/director/lingo/lingo-gr.cpp"
+#line 3331 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 185: /* valuelist: %empty  */
 #line 866 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.code) = g_lingo->code2(LC::c_arraypush, 0); }
-#line 3332 "engines/director/lingo/lingo-gr.cpp"
+#line 3337 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 186: /* valuelist: ':'  */
 #line 867 "engines/director/lingo/lingo-gr.y"
                                                         { (yyval.code) = g_lingo->code2(LC::c_proparraypush, 0); }
-#line 3338 "engines/director/lingo/lingo-gr.cpp"
+#line 3343 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 187: /* valuelist: proplist  */
 #line 868 "engines/director/lingo/lingo-gr.y"
                          { (yyval.code) = g_lingo->code1(LC::c_proparraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3344 "engines/director/lingo/lingo-gr.cpp"
+#line 3349 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 188: /* valuelist: linearlist  */
 #line 869 "engines/director/lingo/lingo-gr.y"
                      { (yyval.code) = g_lingo->code1(LC::c_arraypush); (yyval.code) = g_lingo->codeInt((yyvsp[0].narg)); }
-#line 3350 "engines/director/lingo/lingo-gr.cpp"
+#line 3355 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 189: /* linearlist: expr  */
 #line 871 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 3356 "engines/director/lingo/lingo-gr.cpp"
+#line 3361 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 190: /* linearlist: linearlist ',' expr  */
 #line 872 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3362 "engines/director/lingo/lingo-gr.cpp"
+#line 3367 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 191: /* proplist: proppair  */
 #line 874 "engines/director/lingo/lingo-gr.y"
                                                 { (yyval.narg) = 1; }
-#line 3368 "engines/director/lingo/lingo-gr.cpp"
+#line 3373 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 192: /* proplist: proplist ',' proppair  */
 #line 875 "engines/director/lingo/lingo-gr.y"
                                         { (yyval.narg) = (yyvsp[-2].narg) + 1; }
-#line 3374 "engines/director/lingo/lingo-gr.cpp"
+#line 3379 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 193: /* proppair: SYMBOL ':' expr  */
@@ -3379,7 +3384,7 @@ yyreduce:
 		g_lingo->code1(LC::c_symbolpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		delete (yyvsp[-2].s); }
-#line 3383 "engines/director/lingo/lingo-gr.cpp"
+#line 3388 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 194: /* proppair: STRING ':' expr  */
@@ -3388,7 +3393,7 @@ yyreduce:
 		g_lingo->code1(LC::c_stringpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		delete (yyvsp[-2].s); }
-#line 3392 "engines/director/lingo/lingo-gr.cpp"
+#line 3397 "engines/director/lingo/lingo-gr.cpp"
     break;
 
   case 195: /* proppair: ID ':' expr  */
@@ -3397,11 +3402,11 @@ yyreduce:
 		g_lingo->code1(LC::c_stringpush);
 		g_lingo->codeString((yyvsp[-2].s)->c_str());
 		delete (yyvsp[-2].s); }
-#line 3401 "engines/director/lingo/lingo-gr.cpp"
+#line 3406 "engines/director/lingo/lingo-gr.cpp"
     break;
 
 
-#line 3405 "engines/director/lingo/lingo-gr.cpp"
+#line 3410 "engines/director/lingo/lingo-gr.cpp"
 
       default: break;
     }
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index c864400262..e4a04faa74 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -63,84 +63,82 @@ extern int yydebug;
     OBJECT = 264,                  /* OBJECT  */
     LEXERROR = 265,                /* LEXERROR  */
     PARRAY = 266,                  /* PARRAY  */
-    CASTNAME = 267,                /* CASTNAME  */
-    CASTNUM = 268,                 /* CASTNUM  */
-    FIELDNAME = 269,               /* FIELDNAME  */
-    FIELDNUM = 270,                /* FIELDNUM  */
-    INT = 271,                     /* INT  */
-    ARGC = 272,                    /* ARGC  */
-    ARGCNORET = 273,               /* ARGCNORET  */
-    THEENTITY = 274,               /* THEENTITY  */
-    THEENTITYWITHID = 275,         /* THEENTITYWITHID  */
-    THEMENUITEMENTITY = 276,       /* THEMENUITEMENTITY  */
-    THEMENUITEMSENTITY = 277,      /* THEMENUITEMSENTITY  */
-    FLOAT = 278,                   /* FLOAT  */
-    THEFUNC = 279,                 /* THEFUNC  */
-    THEFUNCINOF = 280,             /* THEFUNCINOF  */
-    VARID = 281,                   /* VARID  */
-    STRING = 282,                  /* STRING  */
-    SYMBOL = 283,                  /* SYMBOL  */
-    ENDCLAUSE = 284,               /* ENDCLAUSE  */
-    tPLAYACCEL = 285,              /* tPLAYACCEL  */
-    tMETHOD = 286,                 /* tMETHOD  */
-    THEOBJECTPROP = 287,           /* THEOBJECTPROP  */
-    tCAST = 288,                   /* tCAST  */
-    tFIELD = 289,                  /* tFIELD  */
-    tSCRIPT = 290,                 /* tSCRIPT  */
-    tWINDOW = 291,                 /* tWINDOW  */
-    tDOWN = 292,                   /* tDOWN  */
-    tELSE = 293,                   /* tELSE  */
-    tELSIF = 294,                  /* tELSIF  */
-    tEXIT = 295,                   /* tEXIT  */
-    tGLOBAL = 296,                 /* tGLOBAL  */
-    tGO = 297,                     /* tGO  */
-    tGOLOOP = 298,                 /* tGOLOOP  */
-    tIF = 299,                     /* tIF  */
-    tIN = 300,                     /* tIN  */
-    tINTO = 301,                   /* tINTO  */
-    tMACRO = 302,                  /* tMACRO  */
-    tMOVIE = 303,                  /* tMOVIE  */
-    tNEXT = 304,                   /* tNEXT  */
-    tOF = 305,                     /* tOF  */
-    tPREVIOUS = 306,               /* tPREVIOUS  */
-    tPUT = 307,                    /* tPUT  */
-    tREPEAT = 308,                 /* tREPEAT  */
-    tSET = 309,                    /* tSET  */
-    tTHEN = 310,                   /* tTHEN  */
-    tTO = 311,                     /* tTO  */
-    tWHEN = 312,                   /* tWHEN  */
-    tWITH = 313,                   /* tWITH  */
-    tWHILE = 314,                  /* tWHILE  */
-    tFACTORY = 315,                /* tFACTORY  */
-    tOPEN = 316,                   /* tOPEN  */
-    tPLAY = 317,                   /* tPLAY  */
-    tINSTANCE = 318,               /* tINSTANCE  */
-    tGE = 319,                     /* tGE  */
-    tLE = 320,                     /* tLE  */
-    tEQ = 321,                     /* tEQ  */
-    tNEQ = 322,                    /* tNEQ  */
-    tAND = 323,                    /* tAND  */
-    tOR = 324,                     /* tOR  */
-    tNOT = 325,                    /* tNOT  */
-    tMOD = 326,                    /* tMOD  */
-    tAFTER = 327,                  /* tAFTER  */
-    tBEFORE = 328,                 /* tBEFORE  */
-    tCONCAT = 329,                 /* tCONCAT  */
-    tCONTAINS = 330,               /* tCONTAINS  */
-    tSTARTS = 331,                 /* tSTARTS  */
-    tCHAR = 332,                   /* tCHAR  */
-    tITEM = 333,                   /* tITEM  */
-    tLINE = 334,                   /* tLINE  */
-    tWORD = 335,                   /* tWORD  */
-    tSPRITE = 336,                 /* tSPRITE  */
-    tINTERSECTS = 337,             /* tINTERSECTS  */
-    tWITHIN = 338,                 /* tWITHIN  */
-    tTELL = 339,                   /* tTELL  */
-    tPROPERTY = 340,               /* tPROPERTY  */
-    tON = 341,                     /* tON  */
-    tENDIF = 342,                  /* tENDIF  */
-    tENDREPEAT = 343,              /* tENDREPEAT  */
-    tENDTELL = 344                 /* tENDTELL  */
+    CASTREF = 267,                 /* CASTREF  */
+    FIELDREF = 268,                /* FIELDREF  */
+    INT = 269,                     /* INT  */
+    ARGC = 270,                    /* ARGC  */
+    ARGCNORET = 271,               /* ARGCNORET  */
+    THEENTITY = 272,               /* THEENTITY  */
+    THEENTITYWITHID = 273,         /* THEENTITYWITHID  */
+    THEMENUITEMENTITY = 274,       /* THEMENUITEMENTITY  */
+    THEMENUITEMSENTITY = 275,      /* THEMENUITEMSENTITY  */
+    FLOAT = 276,                   /* FLOAT  */
+    THEFUNC = 277,                 /* THEFUNC  */
+    THEFUNCINOF = 278,             /* THEFUNCINOF  */
+    VARID = 279,                   /* VARID  */
+    STRING = 280,                  /* STRING  */
+    SYMBOL = 281,                  /* SYMBOL  */
+    ENDCLAUSE = 282,               /* ENDCLAUSE  */
+    tPLAYACCEL = 283,              /* tPLAYACCEL  */
+    tMETHOD = 284,                 /* tMETHOD  */
+    THEOBJECTPROP = 285,           /* THEOBJECTPROP  */
+    tCAST = 286,                   /* tCAST  */
+    tFIELD = 287,                  /* tFIELD  */
+    tSCRIPT = 288,                 /* tSCRIPT  */
+    tWINDOW = 289,                 /* tWINDOW  */
+    tDOWN = 290,                   /* tDOWN  */
+    tELSE = 291,                   /* tELSE  */
+    tELSIF = 292,                  /* tELSIF  */
+    tEXIT = 293,                   /* tEXIT  */
+    tGLOBAL = 294,                 /* tGLOBAL  */
+    tGO = 295,                     /* tGO  */
+    tGOLOOP = 296,                 /* tGOLOOP  */
+    tIF = 297,                     /* tIF  */
+    tIN = 298,                     /* tIN  */
+    tINTO = 299,                   /* tINTO  */
+    tMACRO = 300,                  /* tMACRO  */
+    tMOVIE = 301,                  /* tMOVIE  */
+    tNEXT = 302,                   /* tNEXT  */
+    tOF = 303,                     /* tOF  */
+    tPREVIOUS = 304,               /* tPREVIOUS  */
+    tPUT = 305,                    /* tPUT  */
+    tREPEAT = 306,                 /* tREPEAT  */
+    tSET = 307,                    /* tSET  */
+    tTHEN = 308,                   /* tTHEN  */
+    tTO = 309,                     /* tTO  */
+    tWHEN = 310,                   /* tWHEN  */
+    tWITH = 311,                   /* tWITH  */
+    tWHILE = 312,                  /* tWHILE  */
+    tFACTORY = 313,                /* tFACTORY  */
+    tOPEN = 314,                   /* tOPEN  */
+    tPLAY = 315,                   /* tPLAY  */
+    tINSTANCE = 316,               /* tINSTANCE  */
+    tGE = 317,                     /* tGE  */
+    tLE = 318,                     /* tLE  */
+    tEQ = 319,                     /* tEQ  */
+    tNEQ = 320,                    /* tNEQ  */
+    tAND = 321,                    /* tAND  */
+    tOR = 322,                     /* tOR  */
+    tNOT = 323,                    /* tNOT  */
+    tMOD = 324,                    /* tMOD  */
+    tAFTER = 325,                  /* tAFTER  */
+    tBEFORE = 326,                 /* tBEFORE  */
+    tCONCAT = 327,                 /* tCONCAT  */
+    tCONTAINS = 328,               /* tCONTAINS  */
+    tSTARTS = 329,                 /* tSTARTS  */
+    tCHAR = 330,                   /* tCHAR  */
+    tITEM = 331,                   /* tITEM  */
+    tLINE = 332,                   /* tLINE  */
+    tWORD = 333,                   /* tWORD  */
+    tSPRITE = 334,                 /* tSPRITE  */
+    tINTERSECTS = 335,             /* tINTERSECTS  */
+    tWITHIN = 336,                 /* tWITHIN  */
+    tTELL = 337,                   /* tTELL  */
+    tPROPERTY = 338,               /* tPROPERTY  */
+    tON = 339,                     /* tON  */
+    tENDIF = 340,                  /* tENDIF  */
+    tENDREPEAT = 341,              /* tENDREPEAT  */
+    tENDTELL = 342                 /* tENDTELL  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
@@ -164,7 +162,7 @@ union YYSTYPE
 		Common::String *prop;
 	} objectprop;
 
-#line 168 "engines/director/lingo/lingo-gr.h"
+#line 166 "engines/director/lingo/lingo-gr.h"
 
 };
 typedef union YYSTYPE YYSTYPE;
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 8209044e0c..f7f54aba58 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -196,7 +196,7 @@ static void mVar(Common::String *s, VarType type) {
 
 // Datum types
 %token VOID VAR POINT RECT ARRAY OBJECT LEXERROR PARRAY
-%token CASTNAME CASTNUM FIELDNAME FIELDNUM
+%token CASTREF FIELDREF
 %token<i> INT ARGC ARGCNORET
 
 %token<e> THEENTITY THEENTITYWITHID THEMENUITEMENTITY THEMENUITEMSENTITY
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 2ab707038f..0427233ba8 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1281,10 +1281,10 @@ void Lingo::setTheSprite(Datum &id1, int field, Datum &d) {
 	case kTheConstraint:
 		{
 			int channelId = -1;
-			if (d.type == CASTNAME || d.type == CASTNUM) {
+			if (d.type == CASTREF) {
 				// Reference: CastMember ID
 				// Find the first channel that uses this cast.
-				int castId = castIdFetch(d);
+				int castId = d.u.i;
 				for (uint i = 0; i < score->_channels.size(); i++) {
 					if (score->_channels[i]->_sprite->_castId == castId) {
 						channelId = i;
@@ -1577,21 +1577,20 @@ Datum Lingo::getObjectProp(Datum &obj, Common::String &propName) {
 			d = obj.u.parr->operator[](index - 1).v;
 		}
 		return d;
-	} else if (obj.type == CASTNAME || obj.type == CASTNUM || obj.type == FIELDNAME || obj.type == FIELDNUM) {
+	} else if (obj.type == CASTREF || obj.type == FIELDREF) {
 		Movie *movie = _vm->getCurrentMovie();
 		if (!movie) {
 			warning("Lingo::getObjectProp(): No movie loaded");
 			return d;
 		}
 
-		int id = g_lingo->castIdFetch(obj);
-
+		int id = obj.u.i;
 		CastMember *member = movie->getCastMember(id);
 		if (!member) {
 			warning("Lingo::getObjectProp(): CastMember %d not found", id);
 			return d;
 		}
-		if ((obj.type == FIELDNAME || obj.type == FIELDNUM) && member->_type != kCastText) {
+		if (obj.type == FIELDREF && member->_type != kCastText) {
 			warning("Lingo::getObjectProp(): CastMember %d is not a field", id);
 			return d;
 		}
@@ -1622,21 +1621,20 @@ void Lingo::setObjectProp(Datum &obj, Common::String &propName, Datum &val) {
 			PCell cell = PCell(propName, val);
 			obj.u.parr->push_back(cell);
 		}
-	} else if (obj.type == CASTNAME || obj.type == CASTNUM || obj.type == FIELDNAME || obj.type == FIELDNUM) {
+	} else if (obj.type == CASTREF || obj.type == FIELDREF) {
 		Movie *movie = _vm->getCurrentMovie();
 		if (!movie) {
 			warning("Lingo::setObjectProp(): No movie loaded");
 			return;
 		}
 
-		int id = g_lingo->castIdFetch(obj);
-
+		int id = obj.u.i;
 		CastMember *member = movie->getCastMember(id);
 		if (!member) {
 			warning("Lingo::setObjectProp(): CastMember %d not found", id);
 			return;
 		}
-		if ((obj.type == FIELDNAME || obj.type == FIELDNUM) && member->_type != kCastText) {
+		if ((obj.type == FIELDREF) && member->_type != kCastText) {
 			warning("Lingo::setObjectProp(): CastMember %d is not a field", id);
 			return;
 		}
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index ac62df67a8..921ce9785f 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -689,7 +689,7 @@ int Lingo::getAlignedType(const Datum &d1, const Datum &d2) {
 	int d1Type = d1.type;
 	int d2Type = d2.type;
 
-	if (d1Type == STRING || d1Type == FIELDNAME || d1Type == FIELDNUM) {
+	if (d1Type == STRING || d1Type == FIELDREF) {
 		Common::String src = d1.asString();
 		if (!src.empty()) {
 			char *endPtr = 0;
@@ -699,7 +699,7 @@ int Lingo::getAlignedType(const Datum &d1, const Datum &d2) {
 			}
 		}
 	}
-	if (d2Type == STRING || d2Type == FIELDNAME || d2Type == FIELDNUM) {
+	if (d2Type == STRING || d2Type == FIELDREF) {
 		Common::String src = d2.asString();
 		if (!src.empty()) {
 			char *endPtr = 0;
@@ -795,8 +795,6 @@ void Datum::reset() {
 #ifndef __COVERITY__
 	if (*refCount <= 0) {
 		switch (type) {
-		case CASTNAME:
-		case FIELDNAME:
 		case VAR:
 		case STRING:
 			delete u.s;
@@ -841,8 +839,7 @@ int Datum::asInt() const {
 
 	switch (type) {
 	case STRING:
-	case FIELDNAME:
-	case FIELDNUM:
+	case FIELDREF:
 		{
 			Common::String src = asString();
 			char *endPtr = 0;
@@ -879,8 +876,7 @@ double Datum::asFloat() const {
 
 	switch (type) {
 	case STRING:
-	case FIELDNAME:
-	case FIELDNUM:
+	case FIELDREF:
 		{
 			Common::String src = asString();
 			char *endPtr = 0;
@@ -952,16 +948,12 @@ Common::String Datum::asString(bool printonly) const {
 	case VAR:
 		s = Common::String::format("var: #%s", u.s->c_str());
 		break;
-	case CASTNAME:
-		s = Common::String::format("cast \"%s\"", u.s->c_str());
-		break;
-	case CASTNUM:
+	case CASTREF:
 		s = Common::String::format("cast %d", u.i);
 		break;
-	case FIELDNAME:
-	case FIELDNUM:
+	case FIELDREF:
 		{
-			int idx = g_lingo->castIdFetch(*this);
+			int idx = u.i;
 			CastMember *member = g_director->getCurrentMovie()->getCastMember(idx);
 			if (!member) {
 				warning("asString(): Unknown cast id %d", idx);
@@ -1026,10 +1018,8 @@ const char *Datum::type2str(bool isk) const {
 		return isk ? "#float" : "FLOAT";
 	case STRING:
 		return isk ? "#string" : "STRING";
-	case CASTNAME:
-		return "CASTNAME";
-	case CASTNUM:
-		return "CASTNUM";
+	case CASTREF:
+		return "CASTREF";
 	case VOID:
 		return isk ? "#void" : "VOID";
 	case POINT:
@@ -1038,10 +1028,8 @@ const char *Datum::type2str(bool isk) const {
 		return isk ? "#symbol" : "SYMBOL";
 	case OBJECT:
 		return isk ? "#object" : "OBJECT";
-	case FIELDNAME:
-		return "FIELDNAME";
-	case FIELDNUM:
-		return "FIELDNUM";
+	case FIELDREF:
+		return "FIELDREF";
 	case VAR:
 		return isk ? "#var" : "VAR";
 	default:
@@ -1223,7 +1211,7 @@ int Lingo::castIdFetch(const Datum &var) {
 		return 0;
 	}
 
-	if (var.type == STRING || var.type == CASTNAME || var.type == FIELDNAME) {
+	if (var.type == STRING) {
 		CastMember *member = movie->getCastMemberByName(*var.u.s);
 		if (member)
 			return member->getID();
@@ -1233,7 +1221,7 @@ int Lingo::castIdFetch(const Datum &var) {
 	}
 
 	int castId = 0;
-	if (var.type == INT || var.type == CASTNUM || var.type == FIELDNUM) {
+	if (var.type == INT || var.type == CASTREF || var.type == FIELDREF) {
 		castId = var.u.i;
 	} else if (var.type == FLOAT) {
 		castId = var.u.f;
@@ -1254,7 +1242,7 @@ void Lingo::varAssign(Datum &var, Datum &value, bool global, DatumHash *localvar
 		localvars = _localvars;
 	}
 
-	if (var.type != VAR && var.type != FIELDNAME && var.type != FIELDNUM) {
+	if (var.type != VAR && var.type != FIELDREF) {
 		warning("varAssign: assignment to non-variable");
 		return;
 	}
@@ -1282,13 +1270,13 @@ void Lingo::varAssign(Datum &var, Datum &value, bool global, DatumHash *localvar
 		}
 
 		warning("varAssign: variable %s not defined", name.c_str());
-	} else if (var.type == FIELDNAME || var.type == FIELDNUM || var.type == CASTNAME || var.type == CASTNUM) {
+	} else if (var.type == FIELDREF || var.type == CASTREF) {
 		Movie *movie = g_director->getCurrentMovie();
 		if (!movie) {
 			warning("varAssign: Assigning to a reference to an empty movie");
 			return;
 		}
-		int castId = castIdFetch(var);
+		int castId = var.u.i;
 		CastMember *member = movie->getCastMember(castId);
 		if (!member) {
 			warning("varAssign: Unknown cast id %d", castId);
@@ -1312,7 +1300,7 @@ Datum Lingo::varFetch(Datum &var, bool global, DatumHash *localvars, bool silent
 
 	Datum result;
 	result.type = VOID;
-	if (var.type != VAR && var.type != FIELDNAME && var.type != FIELDNUM) {
+	if (var.type != VAR && var.type != FIELDREF) {
 		warning("varFetch: fetch from non-variable");
 		return result;
 	}
@@ -1346,13 +1334,13 @@ Datum Lingo::varFetch(Datum &var, bool global, DatumHash *localvars, bool silent
 		if (!silent)
 			warning("varFetch: variable %s not found", name.c_str());
 		return result;
-	} else if (var.type == FIELDNAME || var.type == FIELDNUM || var.type == CASTNAME || var.type == CASTNUM) {
+	} else if (var.type == FIELDREF || var.type == CASTREF) {
 		Movie *movie = g_director->getCurrentMovie();
 		if (!movie) {
 			warning("varFetch: Assigning to a reference to an empty movie");
 			return result;
 		}
-		int castId = castIdFetch(var);
+		int castId = var.u.i;
 		CastMember *member = movie->getCastMember(castId);
 		if (!member) {
 			warning("varFetch: Unknown cast id %d", castId);


Commit: b636f76c23e1b166a1c08b97e7f7e7d7d174cece
    https://github.com/scummvm/scummvm/commit/b636f76c23e1b166a1c08b97e7f7e7d7d174cece
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-15T12:00:12-04:00

Commit Message:
DIRECTOR: LINGO: Handle loaded in getObjectProp

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


diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 0427233ba8..c1ca8b0a20 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -1587,7 +1587,11 @@ Datum Lingo::getObjectProp(Datum &obj, Common::String &propName) {
 		int id = obj.u.i;
 		CastMember *member = movie->getCastMember(id);
 		if (!member) {
-			warning("Lingo::getObjectProp(): CastMember %d not found", id);
+			if (propName.equalsIgnoreCase("loaded")) {
+				d = 0;
+			} else {
+				warning("Lingo::getObjectProp(): CastMember %d not found", id);
+			}
 			return d;
 		}
 		if (obj.type == FIELDREF && member->_type != kCastText) {


Commit: 759fcdcf86e1df322ad3c853c5f48bba9c926e62
    https://github.com/scummvm/scummvm/commit/759fcdcf86e1df322ad3c853c5f48bba9c926e62
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-15T12:11:54-04:00

Commit Message:
DIRECTOR: LINGO: Add tests for cast refs

Changed paths:
    engines/director/lingo/tests/reference.lingo


diff --git a/engines/director/lingo/tests/reference.lingo b/engines/director/lingo/tests/reference.lingo
index 21f1e85638..ee4bffe762 100644
--- a/engines/director/lingo/tests/reference.lingo
+++ b/engines/director/lingo/tests/reference.lingo
@@ -15,6 +15,21 @@ put the text of cast "castname"
 put the visible of window "windowname"
 put line 1 to 5 of field the number of cast "MasterList" into field the number of cast "InventoryList"
 
+-- the loaded of cast
+
+-- real casts
+scummvmAssert(the loaded of cast 1)
+set test to cast 1
+scummvmAssert(the loaded of test)
+
+-- nonexistent casts
+scummvmAssert(not the loaded of cast 500)
+set test to cast 500
+scummvmAssert(not the loaded of test)
+
+put the loaded of cast "fake" -- should error
+set test to cast "fake" -- should error
+
 -- user-defined handlers/factories w/ reference name
 -- (mainly to test grammar, so no factory definition)
 set theWindow = Window(mNew,#noGrowDoc,"Window " & windowNumber)


Commit: 1819e7da838861e873fa4754a0abf9e216428b64
    https://github.com/scummvm/scummvm/commit/1819e7da838861e873fa4754a0abf9e216428b64
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-15T12:30:23-04:00

Commit Message:
DIRECTOR: LINGO: Allow non-numeric type alignments

Changed paths:
    engines/director/lingo/lingo-code.cpp
    engines/director/lingo/lingo.cpp
    engines/director/lingo/lingo.h


diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 3a4dc311b2..55c6f15d30 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -627,7 +627,7 @@ Datum LC::addData(Datum &d1, Datum &d2) {
 		return LC::mapBinaryOp(LC::addData, d1, d2);
 	}
 
-	int alignedType = g_lingo->getAlignedType(d1, d2);
+	int alignedType = g_lingo->getAlignedType(d1, d2, true);
 
 	Datum res;
 	if (alignedType == FLOAT) {
@@ -651,7 +651,7 @@ Datum LC::subData(Datum &d1, Datum &d2) {
 		return LC::mapBinaryOp(LC::subData, d1, d2);
 	}
 
-	int alignedType = g_lingo->getAlignedType(d1, d2);
+	int alignedType = g_lingo->getAlignedType(d1, d2, true);
 
 	Datum res;
 	if (alignedType == FLOAT) {
@@ -675,7 +675,7 @@ Datum LC::mulData(Datum &d1, Datum &d2) {
 		return LC::mapBinaryOp(LC::mulData, d1, d2);
 	}
 
-	int alignedType = g_lingo->getAlignedType(d1, d2);
+	int alignedType = g_lingo->getAlignedType(d1, d2, true);
 
 	Datum res;
 	if (alignedType == FLOAT) {
@@ -705,7 +705,7 @@ Datum LC::divData(Datum &d1, Datum &d2) {
 		d2 = Datum(1);
 	}
 
-	int alignedType = g_lingo->getAlignedType(d1, d2);
+	int alignedType = g_lingo->getAlignedType(d1, d2, true);
 
 	if (g_director->getVersion() < 400)	// pre-D4 is INT-only
 		alignedType = INT;
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 921ce9785f..522542fdda 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -683,13 +683,21 @@ void Lingo::resetLingo() {
 	// timeoutScript is not reset
 }
 
-int Lingo::getAlignedType(const Datum &d1, const Datum &d2) {
+int Lingo::getAlignedType(const Datum &d1, const Datum &d2, bool numsOnly) {
 	int opType = VOID;
 
 	int d1Type = d1.type;
 	int d2Type = d2.type;
 
-	if (d1Type == STRING || d1Type == FIELDREF) {
+	if (d1Type == FIELDREF)
+		d1Type = STRING;
+	if (d2Type == FIELDREF)
+		d2Type = STRING;
+
+	if (d1Type == d2Type && (!numsOnly || d1Type == INT || d1Type == FLOAT))
+		return d1Type;
+
+	if (d1Type == STRING) {
 		Common::String src = d1.asString();
 		if (!src.empty()) {
 			char *endPtr = 0;
@@ -699,7 +707,7 @@ int Lingo::getAlignedType(const Datum &d1, const Datum &d2) {
 			}
 		}
 	}
-	if (d2Type == STRING || d2Type == FIELDREF) {
+	if (d2Type == STRING) {
 		Common::String src = d2.asString();
 		if (!src.empty()) {
 			char *endPtr = 0;
@@ -1039,19 +1047,19 @@ const char *Datum::type2str(bool isk) const {
 }
 
 int Datum::equalTo(Datum &d, bool ignoreCase) const {
-	int alignType = g_lingo->getAlignedType(*this, d);
+	int alignType = g_lingo->getAlignedType(*this, d, false);
 
 	if (alignType == FLOAT) {
 		return asFloat() == d.asFloat();
 	} else if (alignType == INT) {
 		return asInt() == d.asInt();
-	} else if ((type == STRING && d.type == STRING) || (type == SYMBOL && d.type == SYMBOL)) {
+	} else if (alignType == STRING || alignType == SYMBOL) {
 		if (ignoreCase) {
 			return toLowercaseMac(asString()).equals(toLowercaseMac(d.asString()));
 		} else {
 			return asString().equals(d.asString());
 		}
-	} else if (type == OBJECT && d.type == OBJECT) {
+	} else if (alignType == OBJECT) {
 		return u.obj == d.u.obj;
 	} else {
 		return 0;
@@ -1059,7 +1067,7 @@ int Datum::equalTo(Datum &d, bool ignoreCase) const {
 }
 
 int Datum::compareTo(Datum &d, bool ignoreCase) const {
-	int alignType = g_lingo->getAlignedType(*this, d);
+	int alignType = g_lingo->getAlignedType(*this, d, false);
 
 	if (alignType == FLOAT) {
 		double f1 = asFloat();
@@ -1081,7 +1089,7 @@ int Datum::compareTo(Datum &d, bool ignoreCase) const {
 		} else {
 			return 1;
 		}
-	} else if ((type == STRING && d.type == STRING) || (type == SYMBOL && d.type == SYMBOL)) {
+	} else if (alignType == STRING) {
 		if (ignoreCase) {
 			return toLowercaseMac(asString()).compareTo(toLowercaseMac(d.asString()));
 		} else {
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 044f9da15c..f725eee43a 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -289,7 +289,7 @@ public:
 	void varAssign(Datum &var, Datum &value, bool global = false, DatumHash *localvars = nullptr);
 	Datum varFetch(Datum &var, bool global = false, DatumHash *localvars = nullptr, bool silent = false);
 
-	int getAlignedType(const Datum &d1, const Datum &d2);
+	int getAlignedType(const Datum &d1, const Datum &d2, bool numsOnly);
 
 	void printAllVars();
 


Commit: 4620311903a9a41d4999cfe000c4a399df59ba47
    https://github.com/scummvm/scummvm/commit/4620311903a9a41d4999cfe000c4a399df59ba47
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-15T12:31:33-04:00

Commit Message:
DIRECTOR: LINGO: Handle CASTREF in Datum::equalTo

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


diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 522542fdda..a9431dca75 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -1049,21 +1049,26 @@ const char *Datum::type2str(bool isk) const {
 int Datum::equalTo(Datum &d, bool ignoreCase) const {
 	int alignType = g_lingo->getAlignedType(*this, d, false);
 
-	if (alignType == FLOAT) {
+	switch (alignType) {
+	case FLOAT:
 		return asFloat() == d.asFloat();
-	} else if (alignType == INT) {
+	case INT:
 		return asInt() == d.asInt();
-	} else if (alignType == STRING || alignType == SYMBOL) {
+	case STRING:
+	case SYMBOL:
 		if (ignoreCase) {
 			return toLowercaseMac(asString()).equals(toLowercaseMac(d.asString()));
 		} else {
 			return asString().equals(d.asString());
 		}
-	} else if (alignType == OBJECT) {
+	case OBJECT:
 		return u.obj == d.u.obj;
-	} else {
-		return 0;
+	case CASTREF:
+		return u.i == d.u.i;
+	default:
+		break;
 	}
+	return 0;
 }
 
 int Datum::compareTo(Datum &d, bool ignoreCase) const {


Commit: 52774f72b55e89e13557cfa73972cec0edc5dc35
    https://github.com/scummvm/scummvm/commit/52774f72b55e89e13557cfa73972cec0edc5dc35
Author: djsrv (dservilla at gmail.com)
Date: 2020-08-15T12:33:13-04:00

Commit Message:
DIRECTOR: LINGO: Add equality tests

Changed paths:
  A engines/director/lingo/tests/equality.lingo


diff --git a/engines/director/lingo/tests/equality.lingo b/engines/director/lingo/tests/equality.lingo
new file mode 100644
index 0000000000..3cee555d78
--- /dev/null
+++ b/engines/director/lingo/tests/equality.lingo
@@ -0,0 +1,11 @@
+scummvmAssert(1 = 1)
+scummvmAssert(1 = "1")
+scummvmAssert(1 = 1.0)
+scummvmAssert(cast 1  = cast 1)
+scummvmAssert("test" = "test")
+scummvmAssert(#test = #test)
+set string = the text of field 1
+scummvmAssert(field 1 = string)
+scummvmAssert(0 <> "")
+scummvmAssert(1 <> cast 1)
+scummvmAssert("test" <> #test)




More information about the Scummvm-git-logs mailing list