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

sev- sev at scummvm.org
Sun Feb 12 11:58:50 CET 2017


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

Summary:
e76fec67a1 DIRECTOR: Lingo: Fixing position count in lexer
a243a479ae DIRECTOR: Lingo: Added grammar for assignment to references
ed1d606e9f DIRECTOR: Lingo: Implemented stub for REFERENCE built-ins
d4a718bf84 DIRECTOR: Lingo: Implemented \xC2 continuation symbol support


Commit: e76fec67a13ccc433de6eb41e45649e68a2865cc
    https://github.com/scummvm/scummvm/commit/e76fec67a13ccc433de6eb41e45649e68a2865cc
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-02-12T11:12:54+01:00

Commit Message:
DIRECTOR: Lingo: Fixing position count in lexer

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


diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index 66199ec..54e6294 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -745,6 +745,9 @@ using namespace Director;
 
 int yyparse();
 static void count() {
+	if (debugChannelSet(-1, kDebugLingoCompile))
+		debug("LEXER: Read '%s' at %d:%d", yytext, g_lingo->_linenumber, g_lingo->_colnumber);
+
 	g_lingo->_colnumber += strlen(yytext);
 }
 
@@ -777,7 +780,7 @@ static int checkImmediate(int token) {
 	return token;
 }
 
-#line 781 "engines/director/lingo/lingo-lex.cpp"
+#line 784 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -960,10 +963,10 @@ YY_DECL
 	register char *yy_cp, *yy_bp;
 	register int yy_act;
     
-#line 82 "engines/director/lingo/lingo-lex.l"
+#line 85 "engines/director/lingo/lingo-lex.l"
 
 
-#line 967 "engines/director/lingo/lingo-lex.cpp"
+#line 970 "engines/director/lingo/lingo-lex.cpp"
 
 	if ( !(yy_init) )
 		{
@@ -1049,84 +1052,84 @@ do_action:	/* This label is used only to access EOF actions. */
 
 case 1:
 YY_RULE_SETUP
-#line 84 "engines/director/lingo/lingo-lex.l"
+#line 87 "engines/director/lingo/lingo-lex.l"
 
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 85 "engines/director/lingo/lingo-lex.l"
+#line 88 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 86 "engines/director/lingo/lingo-lex.l"
+#line 89 "engines/director/lingo/lingo-lex.l"
 { count(); return ' '; }
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 88 "engines/director/lingo/lingo-lex.l"
+#line 91 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = new Common::String(yytext); return SYMBOL; }	// D3
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 90 "engines/director/lingo/lingo-lex.l"
+#line 93 "engines/director/lingo/lingo-lex.l"
 { count(); return tAFTER; }		// D3
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 91 "engines/director/lingo/lingo-lex.l"
+#line 94 "engines/director/lingo/lingo-lex.l"
 { count(); return tAND; }
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 92 "engines/director/lingo/lingo-lex.l"
+#line 95 "engines/director/lingo/lingo-lex.l"
 { count(); return tBEFORE; }	// D3
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 93 "engines/director/lingo/lingo-lex.l"
+#line 96 "engines/director/lingo/lingo-lex.l"
 { count(); return tCHAR; }		// D3
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 94 "engines/director/lingo/lingo-lex.l"
+#line 97 "engines/director/lingo/lingo-lex.l"
 { count(); return tCONTAINS; }
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 95 "engines/director/lingo/lingo-lex.l"
+#line 98 "engines/director/lingo/lingo-lex.l"
 { count(); return tDONE; }
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 96 "engines/director/lingo/lingo-lex.l"
+#line 99 "engines/director/lingo/lingo-lex.l"
 { count(); return tDOWN; }
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 97 "engines/director/lingo/lingo-lex.l"
+#line 100 "engines/director/lingo/lingo-lex.l"
 { count(); return tIF; }
 	YY_BREAK
 case 13:
 /* rule 13 can match eol */
 YY_RULE_SETUP
-#line 98 "engines/director/lingo/lingo-lex.l"
+#line 101 "engines/director/lingo/lingo-lex.l"
 { countnl(); return tNLELSIF; }
 	YY_BREAK
 case 14:
 /* rule 14 can match eol */
 YY_RULE_SETUP
-#line 99 "engines/director/lingo/lingo-lex.l"
+#line 102 "engines/director/lingo/lingo-lex.l"
 { countnl(); return tNLELSE; }
 	YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 100 "engines/director/lingo/lingo-lex.l"
+#line 103 "engines/director/lingo/lingo-lex.l"
 { count(); return tELSE; }
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 101 "engines/director/lingo/lingo-lex.l"
+#line 104 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1141,168 +1144,165 @@ YY_RULE_SETUP
 	YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 112 "engines/director/lingo/lingo-lex.l"
+#line 115 "engines/director/lingo/lingo-lex.l"
 { count(); return tFACTORY; }
 	YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 113 "engines/director/lingo/lingo-lex.l"
+#line 116 "engines/director/lingo/lingo-lex.l"
 { count(); return tEXIT; }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 114 "engines/director/lingo/lingo-lex.l"
+#line 117 "engines/director/lingo/lingo-lex.l"
 { count(); return tFRAME; }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 115 "engines/director/lingo/lingo-lex.l"
+#line 118 "engines/director/lingo/lingo-lex.l"
 { count(); return tGLOBAL; }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 116 "engines/director/lingo/lingo-lex.l"
+#line 119 "engines/director/lingo/lingo-lex.l"
 { count(); return tGO; }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 117 "engines/director/lingo/lingo-lex.l"
+#line 120 "engines/director/lingo/lingo-lex.l"
 { count(); return tGO; }
 	YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 118 "engines/director/lingo/lingo-lex.l"
+#line 121 "engines/director/lingo/lingo-lex.l"
 { count(); return tINSTANCE; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 119 "engines/director/lingo/lingo-lex.l"
+#line 122 "engines/director/lingo/lingo-lex.l"
 { count(); return tINTERSECTS; }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 120 "engines/director/lingo/lingo-lex.l"
+#line 123 "engines/director/lingo/lingo-lex.l"
 { count(); return tINTO; }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 121 "engines/director/lingo/lingo-lex.l"
+#line 124 "engines/director/lingo/lingo-lex.l"
 { count(); return tITEM; }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 122 "engines/director/lingo/lingo-lex.l"
+#line 125 "engines/director/lingo/lingo-lex.l"
 { count(); return tLINE; }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 123 "engines/director/lingo/lingo-lex.l"
+#line 126 "engines/director/lingo/lingo-lex.l"
 { count(); return checkImmediate(tLOOP); }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 124 "engines/director/lingo/lingo-lex.l"
+#line 127 "engines/director/lingo/lingo-lex.l"
 { count(); return tMACRO; }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 125 "engines/director/lingo/lingo-lex.l"
+#line 128 "engines/director/lingo/lingo-lex.l"
 { count(); return tMETHOD; }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 126 "engines/director/lingo/lingo-lex.l"
+#line 129 "engines/director/lingo/lingo-lex.l"
 { count(); return tMOD; }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 127 "engines/director/lingo/lingo-lex.l"
+#line 130 "engines/director/lingo/lingo-lex.l"
 { count(); return tMOVIE; }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 128 "engines/director/lingo/lingo-lex.l"
+#line 131 "engines/director/lingo/lingo-lex.l"
 { count(); return tNEXT; }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 129 "engines/director/lingo/lingo-lex.l"
+#line 132 "engines/director/lingo/lingo-lex.l"
 { count(); return tNOT; }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 130 "engines/director/lingo/lingo-lex.l"
+#line 133 "engines/director/lingo/lingo-lex.l"
 { count(); return tOF; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 131 "engines/director/lingo/lingo-lex.l"
+#line 134 "engines/director/lingo/lingo-lex.l"
 { count(); return tON; }		// D3
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 132 "engines/director/lingo/lingo-lex.l"
+#line 135 "engines/director/lingo/lingo-lex.l"
 { count(); return tOPEN; }
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 133 "engines/director/lingo/lingo-lex.l"
+#line 136 "engines/director/lingo/lingo-lex.l"
 { count(); return tOR; }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 134 "engines/director/lingo/lingo-lex.l"
+#line 137 "engines/director/lingo/lingo-lex.l"
 { count(); return tPLAY; }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 135 "engines/director/lingo/lingo-lex.l"
+#line 138 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = new Common::String(yytext); return tPLAYACCEL; }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 136 "engines/director/lingo/lingo-lex.l"
+#line 139 "engines/director/lingo/lingo-lex.l"
 { count(); return tPREVIOUS; }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 137 "engines/director/lingo/lingo-lex.l"
+#line 140 "engines/director/lingo/lingo-lex.l"
 { count(); return tPROPERTY; }	// D4
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 138 "engines/director/lingo/lingo-lex.l"
+#line 141 "engines/director/lingo/lingo-lex.l"
 { count(); return tPUT; }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 139 "engines/director/lingo/lingo-lex.l"
+#line 142 "engines/director/lingo/lingo-lex.l"
 { count(); return checkImmediate(tREPEAT); }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 140 "engines/director/lingo/lingo-lex.l"
+#line 143 "engines/director/lingo/lingo-lex.l"
 { count(); return tSET; }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 141 "engines/director/lingo/lingo-lex.l"
+#line 144 "engines/director/lingo/lingo-lex.l"
 { count(); return tSTARTS; }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 142 "engines/director/lingo/lingo-lex.l"
+#line 145 "engines/director/lingo/lingo-lex.l"
 { count(); return tTELL; }
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 143 "engines/director/lingo/lingo-lex.l"
+#line 146 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
-		if (debugChannelSet(-1, kDebugLingoCompile))
-			debug("LEXER: the last: Read '%s'", yytext);
-
 		yylval.e[0] = g_lingo->_theEntities["last"]->entity;
 		yylval.e[1] = 0;	// No field
 
@@ -1315,9 +1315,6 @@ YY_RULE_SETUP
 {
 		count();
 
-		if (debugChannelSet(-1, kDebugLingoCompile))
-			debug("LEXER: the sqrt: Read '%s'", yytext);
-
 		yylval.e[0] = g_lingo->_theEntities["sqrt"]->entity;
 		yylval.e[1] = 0;	// No field
 
@@ -1326,13 +1323,10 @@ YY_RULE_SETUP
 	YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 165 "engines/director/lingo/lingo-lex.l"
+#line 162 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
-		if (debugChannelSet(-1, kDebugLingoCompile))
-			debug("LEXER: the of: Read '%s'", yytext);
-
 		const char *ptr = &yytext[4]; // Skip 'the '
 		while (*ptr == ' ' || *ptr == '\t')
 			ptr++;
@@ -1373,13 +1367,10 @@ YY_RULE_SETUP
 	YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 208 "engines/director/lingo/lingo-lex.l"
+#line 202 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
-		if (debugChannelSet(-1, kDebugLingoCompile))
-			debug("LEXER: the date: Read '%s'", yytext);
-
 		const char *ptr = &yytext[4]; // Skip 'the '
 		while (*ptr == ' ' || *ptr == '\t')
 			ptr++;
@@ -1411,13 +1402,10 @@ YY_RULE_SETUP
 	YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 242 "engines/director/lingo/lingo-lex.l"
+#line 233 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
-		if (debugChannelSet(-1, kDebugLingoCompile))
-			debug("LEXER: the: Read '%s'", yytext);
-
 		const char *ptr = &yytext[4]; // Skip 'the '
 		while (*ptr == ' ' || *ptr == '\t')
 			ptr++;
@@ -1437,74 +1425,71 @@ YY_RULE_SETUP
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 264 "engines/director/lingo/lingo-lex.l"
+#line 252 "engines/director/lingo/lingo-lex.l"
 { count(); return tTHEN; }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 265 "engines/director/lingo/lingo-lex.l"
+#line 253 "engines/director/lingo/lingo-lex.l"
 { count(); return tTO; }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 266 "engines/director/lingo/lingo-lex.l"
+#line 254 "engines/director/lingo/lingo-lex.l"
 { count(); return tSPRITE; }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 267 "engines/director/lingo/lingo-lex.l"
+#line 255 "engines/director/lingo/lingo-lex.l"
 { count(); return tWITH; }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 268 "engines/director/lingo/lingo-lex.l"
+#line 256 "engines/director/lingo/lingo-lex.l"
 { count(); return tWITHIN; }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 269 "engines/director/lingo/lingo-lex.l"
+#line 257 "engines/director/lingo/lingo-lex.l"
 { count(); return tWHEN; }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 270 "engines/director/lingo/lingo-lex.l"
+#line 258 "engines/director/lingo/lingo-lex.l"
 { count(); return tWHILE; }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 271 "engines/director/lingo/lingo-lex.l"
+#line 259 "engines/director/lingo/lingo-lex.l"
 { count(); return tWORD; }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 273 "engines/director/lingo/lingo-lex.l"
+#line 261 "engines/director/lingo/lingo-lex.l"
 { count(); return tNEQ; }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 274 "engines/director/lingo/lingo-lex.l"
+#line 262 "engines/director/lingo/lingo-lex.l"
 { count(); return tGE; }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 275 "engines/director/lingo/lingo-lex.l"
+#line 263 "engines/director/lingo/lingo-lex.l"
 { count(); return tLE; }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 276 "engines/director/lingo/lingo-lex.l"
+#line 264 "engines/director/lingo/lingo-lex.l"
 { count(); return tCONCAT; }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 278 "engines/director/lingo/lingo-lex.l"
+#line 266 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
 
-		if (debugChannelSet(-1, kDebugLingoCompile))
-			debug("LEXER: identifier: Read '%s'", yytext);
-
 		if (g_lingo->_ignoreMe && yylval.s->equalsIgnoreCase("me"))
 			return ID;
 
@@ -1543,41 +1528,41 @@ YY_RULE_SETUP
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 320 "engines/director/lingo/lingo-lex.l"
+#line 305 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.f = atof(yytext); return FLOAT; }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 321 "engines/director/lingo/lingo-lex.l"
+#line 306 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 322 "engines/director/lingo/lingo-lex.l"
+#line 307 "engines/director/lingo/lingo-lex.l"
 { count(); return *yytext; }
 	YY_BREAK
 case 69:
 /* rule 69 can match eol */
 YY_RULE_SETUP
-#line 323 "engines/director/lingo/lingo-lex.l"
+#line 308 "engines/director/lingo/lingo-lex.l"
 { return '\n'; }
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 324 "engines/director/lingo/lingo-lex.l"
+#line 309 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 325 "engines/director/lingo/lingo-lex.l"
-
+#line 310 "engines/director/lingo/lingo-lex.l"
+{ count(); }
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 327 "engines/director/lingo/lingo-lex.l"
+#line 312 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1581 "engines/director/lingo/lingo-lex.cpp"
+#line 1566 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2540,7 +2525,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 327 "engines/director/lingo/lingo-lex.l"
+#line 312 "engines/director/lingo/lingo-lex.l"
 
 
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index 93b57a0..b69e3d0 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -37,6 +37,9 @@ using namespace Director;
 
 int yyparse();
 static void count() {
+	if (debugChannelSet(-1, kDebugLingoCompile))
+		debug("LEXER: Read '%s' at %d:%d", yytext, g_lingo->_linenumber, g_lingo->_colnumber);
+
 	g_lingo->_colnumber += strlen(yytext);
 }
 
@@ -143,9 +146,6 @@ whitespace [\t ]
 (?i:the[ \t]+last[\t ]+of[\t ]+)	{
 		count();
 
-		if (debugChannelSet(-1, kDebugLingoCompile))
-			debug("LEXER: the last: Read '%s'", yytext);
-
 		yylval.e[0] = g_lingo->_theEntities["last"]->entity;
 		yylval.e[1] = 0;	// No field
 
@@ -154,9 +154,6 @@ whitespace [\t ]
 (?i:the[ \t]+sqrt[\t ]+of[\t ]+)	{
 		count();
 
-		if (debugChannelSet(-1, kDebugLingoCompile))
-			debug("LEXER: the sqrt: Read '%s'", yytext);
-
 		yylval.e[0] = g_lingo->_theEntities["sqrt"]->entity;
 		yylval.e[1] = 0;	// No field
 
@@ -165,9 +162,6 @@ whitespace [\t ]
 (?i:the[ \t]+[[:alpha:]]+[\t ]+of[\t ]+[[:alpha:]]+)	{
 		count();
 
-		if (debugChannelSet(-1, kDebugLingoCompile))
-			debug("LEXER: the of: Read '%s'", yytext);
-
 		const char *ptr = &yytext[4]; // Skip 'the '
 		while (*ptr == ' ' || *ptr == '\t')
 			ptr++;
@@ -208,9 +202,6 @@ whitespace [\t ]
 (?i:the[ \t]+[[:alpha:]]+[ \t+](date|time))		{
 		count();
 
-		if (debugChannelSet(-1, kDebugLingoCompile))
-			debug("LEXER: the date: Read '%s'", yytext);
-
 		const char *ptr = &yytext[4]; // Skip 'the '
 		while (*ptr == ' ' || *ptr == '\t')
 			ptr++;
@@ -242,9 +233,6 @@ whitespace [\t ]
 (?i:the[ \t]+[[:alpha:]]+)		{
 		count();
 
-		if (debugChannelSet(-1, kDebugLingoCompile))
-			debug("LEXER: the: Read '%s'", yytext);
-
 		const char *ptr = &yytext[4]; // Skip 'the '
 		while (*ptr == ' ' || *ptr == '\t')
 			ptr++;
@@ -279,9 +267,6 @@ whitespace [\t ]
 		count();
 		yylval.s = new Common::String(yytext);
 
-		if (debugChannelSet(-1, kDebugLingoCompile))
-			debug("LEXER: identifier: Read '%s'", yytext);
-
 		if (g_lingo->_ignoreMe && yylval.s->equalsIgnoreCase("me"))
 			return ID;
 
@@ -322,7 +307,7 @@ whitespace [\t ]
 {operator}			{ count(); return *yytext; }
 {newline}				{ return '\n'; }
 {conststring}		{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
-.
+.				{ count(); }
 
 %%
 


Commit: a243a479aef65fe184519803100477ac1f3626bf
    https://github.com/scummvm/scummvm/commit/a243a479aef65fe184519803100477ac1f3626bf
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-02-12T11:32:05+01:00

Commit Message:
DIRECTOR: Lingo: Added grammar for assignment to references

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


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 98a4399..ecf7fe2 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -296,6 +296,14 @@ static const char *builtinFunctions[] = {
 	0
 };
 
+static const char *builtinReferences[] = {
+	"cast",
+	"field",
+	"script",
+	"window",
+	0
+};
+
 
 static const char *predefinedMethods[] = {
 	"mAtFrame",				// D3
@@ -335,6 +343,13 @@ void Lingo::initBuiltIns() {
 		_builtins[*b]->type = FBLTIN;
 	}
 
+	for (const char **b = builtinReferences; *b; b++) {
+		if (!_builtins.contains(*b))
+			error("Incorrectly setup builtinReferences[]: %s", *b);
+
+		_builtins[*b]->type = RBLTIN;
+	}
+
 	for (const char **b = twoWordBuiltins; *b; b++)
 		_twoWordBuiltins[*b] = true;
 
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index ee32cf0..87cf6da 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -1035,7 +1035,8 @@ void Lingo::call(Common::String name, int nargs) {
 		warning("Call to undefined handler '%s'. Dropping %d stack items", name.c_str(), nargs);
 		dropArgs = true;
 	} else {
-		if ((sym->type == BLTIN || sym->type == FBLTIN) && sym->nargs != -1 && sym->nargs != nargs && sym->maxArgs != nargs) {
+		if ((sym->type == BLTIN || sym->type == FBLTIN || sym->type == RBLTIN)
+				&& sym->nargs != -1 && sym->nargs != nargs && sym->maxArgs != nargs) {
 			if (sym->nargs == sym->maxArgs)
 				warning("Incorrect number of arguments to handler '%s', expecting %d. Dropping %d stack items", name.c_str(), sym->nargs, nargs);
 			else
@@ -1062,7 +1063,7 @@ void Lingo::call(Common::String name, int nargs) {
 			g_lingo->pop();
 	}
 
-	if (sym->type == BLTIN || sym->type == FBLTIN) {
+	if (sym->type == BLTIN || sym->type == FBLTIN || sym->type == RBLTIN) {
 		if (sym->u.bltin == b_factory) {
 			g_lingo->factoryCall(name, nargs);
 		} else {
@@ -1072,7 +1073,7 @@ void Lingo::call(Common::String name, int nargs) {
 
 			int stackNewSize = _stack.size();
 
-			if (sym->type == FBLTIN) {
+			if (sym->type == FBLTIN || sym->type == RBLTIN) {
 				if (stackNewSize - stackSize != 1)
 					warning("built-in function %s did not return value", name.c_str());
 			} else {
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index f32f171..2406a87 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -88,68 +88,70 @@
      FBLTINNOARGS = 277,
      FBLTINONEARG = 278,
      FBLTINARGLIST = 279,
-     ID = 280,
-     STRING = 281,
-     HANDLER = 282,
-     SYMBOL = 283,
-     ENDCLAUSE = 284,
-     tPLAYACCEL = 285,
-     tDOWN = 286,
-     tELSE = 287,
-     tNLELSIF = 288,
-     tEXIT = 289,
-     tFRAME = 290,
-     tGLOBAL = 291,
-     tGO = 292,
-     tIF = 293,
-     tINTO = 294,
-     tLOOP = 295,
-     tMACRO = 296,
-     tMOVIE = 297,
-     tNEXT = 298,
-     tOF = 299,
-     tPREVIOUS = 300,
-     tPUT = 301,
-     tREPEAT = 302,
-     tSET = 303,
-     tTHEN = 304,
-     tTO = 305,
-     tWHEN = 306,
-     tWITH = 307,
-     tWHILE = 308,
-     tNLELSE = 309,
-     tFACTORY = 310,
-     tMETHOD = 311,
-     tOPEN = 312,
-     tPLAY = 313,
-     tDONE = 314,
-     tINSTANCE = 315,
-     tGE = 316,
-     tLE = 317,
-     tGT = 318,
-     tLT = 319,
-     tEQ = 320,
-     tNEQ = 321,
-     tAND = 322,
-     tOR = 323,
-     tNOT = 324,
-     tMOD = 325,
-     tAFTER = 326,
-     tBEFORE = 327,
-     tCONCAT = 328,
-     tCONTAINS = 329,
-     tSTARTS = 330,
-     tCHAR = 331,
-     tITEM = 332,
-     tLINE = 333,
-     tWORD = 334,
-     tSPRITE = 335,
-     tINTERSECTS = 336,
-     tWITHIN = 337,
-     tTELL = 338,
-     tPROPERTY = 339,
-     tON = 340,
-     tME = 341
+     RBLTIN = 280,
+     RBLTINONEARG = 281,
+     ID = 282,
+     STRING = 283,
+     HANDLER = 284,
+     SYMBOL = 285,
+     ENDCLAUSE = 286,
+     tPLAYACCEL = 287,
+     tDOWN = 288,
+     tELSE = 289,
+     tNLELSIF = 290,
+     tEXIT = 291,
+     tFRAME = 292,
+     tGLOBAL = 293,
+     tGO = 294,
+     tIF = 295,
+     tINTO = 296,
+     tLOOP = 297,
+     tMACRO = 298,
+     tMOVIE = 299,
+     tNEXT = 300,
+     tOF = 301,
+     tPREVIOUS = 302,
+     tPUT = 303,
+     tREPEAT = 304,
+     tSET = 305,
+     tTHEN = 306,
+     tTO = 307,
+     tWHEN = 308,
+     tWITH = 309,
+     tWHILE = 310,
+     tNLELSE = 311,
+     tFACTORY = 312,
+     tMETHOD = 313,
+     tOPEN = 314,
+     tPLAY = 315,
+     tDONE = 316,
+     tINSTANCE = 317,
+     tGE = 318,
+     tLE = 319,
+     tGT = 320,
+     tLT = 321,
+     tEQ = 322,
+     tNEQ = 323,
+     tAND = 324,
+     tOR = 325,
+     tNOT = 326,
+     tMOD = 327,
+     tAFTER = 328,
+     tBEFORE = 329,
+     tCONCAT = 330,
+     tCONTAINS = 331,
+     tSTARTS = 332,
+     tCHAR = 333,
+     tITEM = 334,
+     tLINE = 335,
+     tWORD = 336,
+     tSPRITE = 337,
+     tINTERSECTS = 338,
+     tWITHIN = 339,
+     tTELL = 340,
+     tPROPERTY = 341,
+     tON = 342,
+     tME = 343
    };
 #endif
 /* Tokens.  */
@@ -175,68 +177,70 @@
 #define FBLTINNOARGS 277
 #define FBLTINONEARG 278
 #define FBLTINARGLIST 279
-#define ID 280
-#define STRING 281
-#define HANDLER 282
-#define SYMBOL 283
-#define ENDCLAUSE 284
-#define tPLAYACCEL 285
-#define tDOWN 286
-#define tELSE 287
-#define tNLELSIF 288
-#define tEXIT 289
-#define tFRAME 290
-#define tGLOBAL 291
-#define tGO 292
-#define tIF 293
-#define tINTO 294
-#define tLOOP 295
-#define tMACRO 296
-#define tMOVIE 297
-#define tNEXT 298
-#define tOF 299
-#define tPREVIOUS 300
-#define tPUT 301
-#define tREPEAT 302
-#define tSET 303
-#define tTHEN 304
-#define tTO 305
-#define tWHEN 306
-#define tWITH 307
-#define tWHILE 308
-#define tNLELSE 309
-#define tFACTORY 310
-#define tMETHOD 311
-#define tOPEN 312
-#define tPLAY 313
-#define tDONE 314
-#define tINSTANCE 315
-#define tGE 316
-#define tLE 317
-#define tGT 318
-#define tLT 319
-#define tEQ 320
-#define tNEQ 321
-#define tAND 322
-#define tOR 323
-#define tNOT 324
-#define tMOD 325
-#define tAFTER 326
-#define tBEFORE 327
-#define tCONCAT 328
-#define tCONTAINS 329
-#define tSTARTS 330
-#define tCHAR 331
-#define tITEM 332
-#define tLINE 333
-#define tWORD 334
-#define tSPRITE 335
-#define tINTERSECTS 336
-#define tWITHIN 337
-#define tTELL 338
-#define tPROPERTY 339
-#define tON 340
-#define tME 341
+#define RBLTIN 280
+#define RBLTINONEARG 281
+#define ID 282
+#define STRING 283
+#define HANDLER 284
+#define SYMBOL 285
+#define ENDCLAUSE 286
+#define tPLAYACCEL 287
+#define tDOWN 288
+#define tELSE 289
+#define tNLELSIF 290
+#define tEXIT 291
+#define tFRAME 292
+#define tGLOBAL 293
+#define tGO 294
+#define tIF 295
+#define tINTO 296
+#define tLOOP 297
+#define tMACRO 298
+#define tMOVIE 299
+#define tNEXT 300
+#define tOF 301
+#define tPREVIOUS 302
+#define tPUT 303
+#define tREPEAT 304
+#define tSET 305
+#define tTHEN 306
+#define tTO 307
+#define tWHEN 308
+#define tWITH 309
+#define tWHILE 310
+#define tNLELSE 311
+#define tFACTORY 312
+#define tMETHOD 313
+#define tOPEN 314
+#define tPLAY 315
+#define tDONE 316
+#define tINSTANCE 317
+#define tGE 318
+#define tLE 319
+#define tGT 320
+#define tLT 321
+#define tEQ 322
+#define tNEQ 323
+#define tAND 324
+#define tOR 325
+#define tNOT 326
+#define tMOD 327
+#define tAFTER 328
+#define tBEFORE 329
+#define tCONCAT 330
+#define tCONTAINS 331
+#define tSTARTS 332
+#define tCHAR 333
+#define tITEM 334
+#define tLINE 335
+#define tWORD 336
+#define tSPRITE 337
+#define tINTERSECTS 338
+#define tWITHIN 339
+#define tTELL 340
+#define tPROPERTY 341
+#define tON 342
+#define tME 343
 
 
 
@@ -304,7 +308,7 @@ typedef union YYSTYPE
 	Common::Array<double> *arr;
 }
 /* Line 193 of yacc.c.  */
-#line 308 "engines/director/lingo/lingo-gr.cpp"
+#line 312 "engines/director/lingo/lingo-gr.cpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -317,7 +321,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 321 "engines/director/lingo/lingo-gr.cpp"
+#line 325 "engines/director/lingo/lingo-gr.cpp"
 
 #ifdef short
 # undef short
@@ -532,20 +536,20 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  123
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1818
+#define YYLAST   1879
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  102
+#define YYNTOKENS  104
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  43
+#define YYNNTS  44
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  161
+#define YYNRULES  163
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  355
+#define YYNSTATES  358
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   341
+#define YYMAXUTOK   343
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -554,15 +558,15 @@ union yyalloc
 static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      94,     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,    93,    88,     2,
-      95,    96,    91,    89,   101,    90,     2,    92,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    95,    90,     2,
+      97,    98,    93,    91,   103,    92,     2,    94,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      98,    87,    97,     2,     2,     2,     2,     2,     2,     2,
+     100,    89,    99,     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,    99,     2,   100,     2,     2,     2,     2,     2,     2,
+       2,   101,     2,   102,     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,
@@ -587,7 +591,7 @@ static const yytype_uint8 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
+      85,    86,    87,    88
 };
 
 #if YYDEBUG
@@ -596,111 +600,112 @@ static const yytype_uint8 yytranslate[] =
 static const yytype_uint16 yyprhs[] =
 {
        0,     0,     3,     7,     9,    12,    14,    15,    17,    19,
-      21,    26,    31,    36,    41,    46,    52,    57,    62,    68,
-      70,    72,    74,    76,    84,    95,   107,   111,   118,   123,
-     131,   142,   153,   160,   171,   182,   183,   187,   190,   192,
-     195,   197,   204,   206,   213,   215,   219,   223,   226,   230,
-     232,   234,   235,   236,   237,   240,   243,   247,   249,   251,
-     253,   255,   257,   259,   262,   265,   270,   275,   277,   279,
-     282,   284,   288,   292,   296,   300,   304,   308,   312,   316,
-     320,   324,   328,   332,   335,   339,   343,   347,   351,   354,
-     357,   361,   365,   370,   375,   380,   387,   392,   399,   404,
-     411,   416,   423,   426,   428,   430,   433,   435,   438,   441,
-     444,   446,   449,   452,   454,   457,   462,   467,   474,   479,
-     482,   486,   488,   492,   494,   498,   500,   504,   507,   510,
-     513,   516,   520,   523,   526,   528,   532,   535,   538,   541,
-     545,   548,   549,   553,   554,   563,   566,   567,   576,   577,
-     578,   589,   590,   592,   596,   601,   602,   605,   606,   608,
-     612,   614
+      21,    26,    31,    36,    41,    46,    51,    57,    62,    67,
+      73,    75,    77,    79,    81,    89,   100,   112,   116,   123,
+     128,   136,   147,   158,   165,   176,   187,   188,   192,   195,
+     197,   200,   202,   209,   211,   218,   220,   224,   228,   231,
+     235,   237,   239,   240,   241,   242,   245,   248,   252,   254,
+     256,   258,   260,   262,   264,   267,   270,   275,   280,   282,
+     284,   287,   289,   293,   297,   301,   305,   309,   313,   317,
+     321,   325,   329,   333,   337,   340,   344,   348,   352,   356,
+     359,   362,   366,   370,   375,   380,   385,   392,   397,   404,
+     409,   416,   421,   428,   431,   434,   436,   438,   441,   443,
+     446,   449,   452,   454,   457,   460,   462,   465,   470,   475,
+     482,   487,   490,   494,   496,   500,   502,   506,   508,   512,
+     515,   518,   521,   524,   528,   531,   534,   536,   540,   543,
+     546,   549,   553,   556,   557,   561,   562,   571,   574,   575,
+     584,   585,   586,   597,   598,   600,   604,   609,   610,   613,
+     614,   616,   620,   622
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     103,     0,    -1,   103,   104,   105,    -1,   105,    -1,     1,
-     104,    -1,    94,    -1,    -1,   135,    -1,   142,    -1,   108,
-      -1,    46,   125,    39,    25,    -1,    46,   125,    71,   125,
-      -1,    46,   125,    72,   125,    -1,    48,    25,    87,   125,
-      -1,    48,    12,    87,   125,    -1,    48,    13,   125,    87,
-     125,    -1,    48,    25,    50,   125,    -1,    48,    12,    50,
-     125,    -1,    48,    13,   125,    50,   125,    -1,   125,    -1,
-     126,    -1,   107,    -1,   109,    -1,   116,    95,   115,    96,
-     122,   121,    29,    -1,   117,    87,   125,   121,    50,   125,
-     121,   122,   121,    29,    -1,   117,    87,   125,   121,    31,
-      50,   125,   121,   122,   121,    29,    -1,   123,   107,   121,
-      -1,   124,   125,   104,   122,   121,    29,    -1,   124,   125,
-      50,   125,    -1,   118,   115,    49,   104,   122,   121,    29,
-      -1,   118,   115,    49,   104,   122,   121,    54,   122,   121,
-      29,    -1,   118,   115,    49,   104,   122,   121,   120,   111,
-     121,    29,    -1,   118,   115,    49,   120,   107,   121,    -1,
-     118,   115,    49,   120,   107,   121,    54,   120,   107,   121,
-      -1,   118,   115,    49,   120,   107,   121,   112,   121,   110,
-     121,    -1,    -1,    54,   120,   107,    -1,   111,   114,    -1,
-     114,    -1,   112,   113,    -1,   113,    -1,   119,   115,    49,
-     120,   108,   121,    -1,   112,    -1,   119,   115,    49,   120,
-     122,   121,    -1,   125,    -1,   125,    87,   125,    -1,    95,
-     115,    96,    -1,    47,    53,    -1,    47,    52,    25,    -1,
-      38,    -1,    33,    -1,    -1,    -1,    -1,   122,   104,    -1,
-     122,   108,    -1,    51,    25,    49,    -1,    83,    -1,    11,
-      -1,    14,    -1,    28,    -1,    26,    -1,    22,    -1,    23,
-     125,    -1,    24,   144,    -1,    24,    95,   144,    96,    -1,
-      25,    95,   143,    96,    -1,    25,    -1,    12,    -1,    13,
-     125,    -1,   106,    -1,   125,    89,   125,    -1,   125,    90,
-     125,    -1,   125,    91,   125,    -1,   125,    92,   125,    -1,
-     125,    70,   125,    -1,   125,    97,   125,    -1,   125,    98,
-     125,    -1,   125,    66,   125,    -1,   125,    61,   125,    -1,
-     125,    62,   125,    -1,   125,    67,   125,    -1,   125,    68,
-     125,    -1,    69,   125,    -1,   125,    88,   125,    -1,   125,
-      73,   125,    -1,   125,    74,   125,    -1,   125,    75,   125,
-      -1,    89,   125,    -1,    90,   125,    -1,    95,   125,    96,
-      -1,    99,   143,   100,    -1,    80,   125,    81,   125,    -1,
-      80,   125,    82,   125,    -1,    76,   125,    44,   125,    -1,
-      76,   125,    50,   125,    44,   125,    -1,    77,   125,    44,
-     125,    -1,    77,   125,    50,   125,    44,   125,    -1,    78,
-     125,    44,   125,    -1,    78,   125,    50,   125,    44,   125,
-      -1,    79,   125,    44,   125,    -1,    79,   125,    50,   125,
-      44,   125,    -1,    46,   125,    -1,   130,    -1,   133,    -1,
-      34,    47,    -1,    34,    -1,    36,   127,    -1,    84,   128,
-      -1,    60,   129,    -1,    16,    -1,    18,   125,    -1,    17,
-     125,    -1,    17,    -1,    19,   144,    -1,    19,    95,   144,
-      96,    -1,    86,    95,    25,    96,    -1,    86,    95,    25,
-     101,   143,    96,    -1,    57,   125,    52,   125,    -1,    57,
-     125,    -1,    20,    25,   143,    -1,    25,    -1,   127,   101,
-      25,    -1,    25,    -1,   128,   101,    25,    -1,    25,    -1,
-     129,   101,    25,    -1,    37,    40,    -1,    37,    43,    -1,
-      37,    45,    -1,    37,   131,    -1,    37,   131,   132,    -1,
-      37,   132,    -1,    35,   125,    -1,   125,    -1,    44,    42,
-     125,    -1,    42,   125,    -1,    58,    59,    -1,    58,   131,
-      -1,    58,   131,   132,    -1,    58,   132,    -1,    -1,    30,
-     134,   143,    -1,    -1,    41,    25,   136,   120,   140,   104,
-     141,   122,    -1,    55,    25,    -1,    -1,    56,    25,   137,
-     120,   140,   104,   141,   122,    -1,    -1,    -1,    85,    25,
-     138,   120,   139,   140,   104,   141,   122,    29,    -1,    -1,
-      25,    -1,   140,   101,    25,    -1,   140,   104,   101,    25,
-      -1,    -1,    25,   144,    -1,    -1,   125,    -1,   143,   101,
-     125,    -1,   125,    -1,   144,   101,   125,    -1
+     105,     0,    -1,   105,   106,   107,    -1,   107,    -1,     1,
+     106,    -1,    96,    -1,    -1,   138,    -1,   145,    -1,   110,
+      -1,    48,   127,    41,    27,    -1,    48,   127,    41,   128,
+      -1,    48,   127,    73,   127,    -1,    48,   127,    74,   127,
+      -1,    50,    27,    89,   127,    -1,    50,    12,    89,   127,
+      -1,    50,    13,   127,    89,   127,    -1,    50,    27,    52,
+     127,    -1,    50,    12,    52,   127,    -1,    50,    13,   127,
+      52,   127,    -1,   127,    -1,   129,    -1,   109,    -1,   111,
+      -1,   118,    97,   117,    98,   124,   123,    31,    -1,   119,
+      89,   127,   123,    52,   127,   123,   124,   123,    31,    -1,
+     119,    89,   127,   123,    33,    52,   127,   123,   124,   123,
+      31,    -1,   125,   109,   123,    -1,   126,   127,   106,   124,
+     123,    31,    -1,   126,   127,    52,   127,    -1,   120,   117,
+      51,   106,   124,   123,    31,    -1,   120,   117,    51,   106,
+     124,   123,    56,   124,   123,    31,    -1,   120,   117,    51,
+     106,   124,   123,   122,   113,   123,    31,    -1,   120,   117,
+      51,   122,   109,   123,    -1,   120,   117,    51,   122,   109,
+     123,    56,   122,   109,   123,    -1,   120,   117,    51,   122,
+     109,   123,   114,   123,   112,   123,    -1,    -1,    56,   122,
+     109,    -1,   113,   116,    -1,   116,    -1,   114,   115,    -1,
+     115,    -1,   121,   117,    51,   122,   110,   123,    -1,   114,
+      -1,   121,   117,    51,   122,   124,   123,    -1,   127,    -1,
+     127,    89,   127,    -1,    97,   117,    98,    -1,    49,    55,
+      -1,    49,    54,    27,    -1,    40,    -1,    35,    -1,    -1,
+      -1,    -1,   124,   106,    -1,   124,   110,    -1,    53,    27,
+      51,    -1,    85,    -1,    11,    -1,    14,    -1,    30,    -1,
+      28,    -1,    22,    -1,    23,   127,    -1,    24,   147,    -1,
+      24,    97,   147,    98,    -1,    27,    97,   146,    98,    -1,
+      27,    -1,    12,    -1,    13,   127,    -1,   108,    -1,   127,
+      91,   127,    -1,   127,    92,   127,    -1,   127,    93,   127,
+      -1,   127,    94,   127,    -1,   127,    72,   127,    -1,   127,
+      99,   127,    -1,   127,   100,   127,    -1,   127,    68,   127,
+      -1,   127,    63,   127,    -1,   127,    64,   127,    -1,   127,
+      69,   127,    -1,   127,    70,   127,    -1,    71,   127,    -1,
+     127,    90,   127,    -1,   127,    75,   127,    -1,   127,    76,
+     127,    -1,   127,    77,   127,    -1,    91,   127,    -1,    92,
+     127,    -1,    97,   127,    98,    -1,   101,   146,   102,    -1,
+      82,   127,    83,   127,    -1,    82,   127,    84,   127,    -1,
+      78,   127,    46,   127,    -1,    78,   127,    52,   127,    46,
+     127,    -1,    79,   127,    46,   127,    -1,    79,   127,    52,
+     127,    46,   127,    -1,    80,   127,    46,   127,    -1,    80,
+     127,    52,   127,    46,   127,    -1,    81,   127,    46,   127,
+      -1,    81,   127,    52,   127,    46,   127,    -1,    26,   127,
+      -1,    48,   127,    -1,   133,    -1,   136,    -1,    36,    49,
+      -1,    36,    -1,    38,   130,    -1,    86,   131,    -1,    62,
+     132,    -1,    16,    -1,    18,   127,    -1,    17,   127,    -1,
+      17,    -1,    19,   147,    -1,    19,    97,   147,    98,    -1,
+      88,    97,    27,    98,    -1,    88,    97,    27,   103,   146,
+      98,    -1,    59,   127,    54,   127,    -1,    59,   127,    -1,
+      20,    27,   146,    -1,    27,    -1,   130,   103,    27,    -1,
+      27,    -1,   131,   103,    27,    -1,    27,    -1,   132,   103,
+      27,    -1,    39,    42,    -1,    39,    45,    -1,    39,    47,
+      -1,    39,   134,    -1,    39,   134,   135,    -1,    39,   135,
+      -1,    37,   127,    -1,   127,    -1,    46,    44,   127,    -1,
+      44,   127,    -1,    60,    61,    -1,    60,   134,    -1,    60,
+     134,   135,    -1,    60,   135,    -1,    -1,    32,   137,   146,
+      -1,    -1,    43,    27,   139,   122,   143,   106,   144,   124,
+      -1,    57,    27,    -1,    -1,    58,    27,   140,   122,   143,
+     106,   144,   124,    -1,    -1,    -1,    87,    27,   141,   122,
+     142,   143,   106,   144,   124,    31,    -1,    -1,    27,    -1,
+     143,   103,    27,    -1,   143,   106,   103,    27,    -1,    -1,
+      27,   147,    -1,    -1,   127,    -1,   146,   103,   127,    -1,
+     127,    -1,   147,   103,   127,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const yytype_uint16 yyrline[] =
 {
        0,   118,   118,   119,   120,   123,   128,   129,   130,   131,
-     134,   140,   141,   142,   148,   156,   164,   170,   178,   188,
-     189,   192,   193,   198,   211,   229,   243,   249,   252,   257,
-     267,   279,   291,   301,   311,   323,   324,   327,   328,   331,
-     332,   335,   343,   344,   352,   353,   354,   357,   360,   367,
-     374,   382,   385,   388,   389,   390,   393,   399,   403,   404,
-     407,   410,   413,   416,   419,   420,   421,   424,   428,   435,
-     441,   442,   443,   444,   445,   446,   447,   448,   449,   450,
-     451,   452,   453,   454,   455,   456,   457,   458,   459,   460,
-     461,   462,   463,   464,   465,   466,   467,   468,   469,   470,
-     471,   472,   475,   476,   477,   478,   479,   481,   482,   483,
-     484,   487,   490,   493,   497,   498,   499,   500,   501,   502,
-     503,   506,   507,   510,   511,   514,   515,   526,   527,   528,
-     529,   532,   535,   540,   541,   544,   545,   548,   549,   552,
-     555,   558,   558,   588,   588,   594,   597,   597,   602,   603,
-     602,   613,   614,   615,   616,   619,   623,   631,   632,   633,
-     636,   637
+     134,   140,   143,   144,   145,   151,   159,   167,   173,   181,
+     191,   192,   195,   196,   201,   214,   232,   246,   252,   255,
+     260,   270,   282,   294,   304,   314,   326,   327,   330,   331,
+     334,   335,   338,   346,   347,   355,   356,   357,   360,   363,
+     370,   377,   385,   388,   391,   392,   393,   396,   402,   406,
+     407,   410,   413,   416,   419,   422,   423,   424,   427,   431,
+     438,   444,   445,   446,   447,   448,   449,   450,   451,   452,
+     453,   454,   455,   456,   457,   458,   459,   460,   461,   462,
+     463,   464,   465,   466,   467,   468,   469,   470,   471,   472,
+     473,   474,   475,   478,   483,   484,   485,   486,   487,   489,
+     490,   491,   492,   495,   498,   501,   505,   506,   507,   508,
+     509,   510,   511,   514,   515,   518,   519,   522,   523,   534,
+     535,   536,   537,   540,   543,   548,   549,   552,   553,   556,
+     557,   560,   563,   566,   566,   596,   596,   602,   605,   605,
+     610,   611,   610,   621,   622,   623,   624,   627,   631,   639,
+     640,   641,   644,   645
 };
 #endif
 
@@ -713,24 +718,25 @@ static const char *const yytname[] =
   "POINT", "RECT", "ARRAY", "OBJECT", "INT", "THEENTITY",
   "THEENTITYWITHID", "FLOAT", "BLTIN", "BLTINNOARGS", "BLTINNOARGSORONE",
   "BLTINONEARG", "BLTINARGLIST", "TWOWORDBUILTIN", "FBLTIN",
-  "FBLTINNOARGS", "FBLTINONEARG", "FBLTINARGLIST", "ID", "STRING",
-  "HANDLER", "SYMBOL", "ENDCLAUSE", "tPLAYACCEL", "tDOWN", "tELSE",
-  "tNLELSIF", "tEXIT", "tFRAME", "tGLOBAL", "tGO", "tIF", "tINTO", "tLOOP",
-  "tMACRO", "tMOVIE", "tNEXT", "tOF", "tPREVIOUS", "tPUT", "tREPEAT",
-  "tSET", "tTHEN", "tTO", "tWHEN", "tWITH", "tWHILE", "tNLELSE",
-  "tFACTORY", "tMETHOD", "tOPEN", "tPLAY", "tDONE", "tINSTANCE", "tGE",
-  "tLE", "tGT", "tLT", "tEQ", "tNEQ", "tAND", "tOR", "tNOT", "tMOD",
-  "tAFTER", "tBEFORE", "tCONCAT", "tCONTAINS", "tSTARTS", "tCHAR", "tITEM",
-  "tLINE", "tWORD", "tSPRITE", "tINTERSECTS", "tWITHIN", "tTELL",
-  "tPROPERTY", "tON", "tME", "'='", "'&'", "'+'", "'-'", "'*'", "'/'",
-  "'%'", "'\\n'", "'('", "')'", "'>'", "'<'", "'['", "']'", "','",
+  "FBLTINNOARGS", "FBLTINONEARG", "FBLTINARGLIST", "RBLTIN",
+  "RBLTINONEARG", "ID", "STRING", "HANDLER", "SYMBOL", "ENDCLAUSE",
+  "tPLAYACCEL", "tDOWN", "tELSE", "tNLELSIF", "tEXIT", "tFRAME", "tGLOBAL",
+  "tGO", "tIF", "tINTO", "tLOOP", "tMACRO", "tMOVIE", "tNEXT", "tOF",
+  "tPREVIOUS", "tPUT", "tREPEAT", "tSET", "tTHEN", "tTO", "tWHEN", "tWITH",
+  "tWHILE", "tNLELSE", "tFACTORY", "tMETHOD", "tOPEN", "tPLAY", "tDONE",
+  "tINSTANCE", "tGE", "tLE", "tGT", "tLT", "tEQ", "tNEQ", "tAND", "tOR",
+  "tNOT", "tMOD", "tAFTER", "tBEFORE", "tCONCAT", "tCONTAINS", "tSTARTS",
+  "tCHAR", "tITEM", "tLINE", "tWORD", "tSPRITE", "tINTERSECTS", "tWITHIN",
+  "tTELL", "tPROPERTY", "tON", "tME", "'='", "'&'", "'+'", "'-'", "'*'",
+  "'/'", "'%'", "'\\n'", "'('", "')'", "'>'", "'<'", "'['", "']'", "','",
   "$accept", "program", "nl", "programline", "asgn", "stmtoneliner",
   "stmt", "ifstmt", "elsestmtoneliner", "elseifstmt", "elseifstmtoneliner",
   "elseifstmtoneliner1", "elseifstmt1", "cond", "repeatwhile",
   "repeatwith", "if", "elseif", "begin", "end", "stmtlist", "when", "tell",
-  "expr", "proc", "globallist", "propertylist", "instancelist", "gotofunc",
-  "gotoframe", "gotomovie", "playfunc", "@1", "defn", "@2", "@3", "@4",
-  "@5", "argdef", "argstore", "macro", "arglist", "nonemptyarglist", 0
+  "expr", "reference", "proc", "globallist", "propertylist",
+  "instancelist", "gotofunc", "gotoframe", "gotomovie", "playfunc", "@1",
+  "defn", "@2", "@3", "@4", "@5", "argdef", "argstore", "macro", "arglist",
+  "nonemptyarglist", 0
 };
 #endif
 
@@ -747,54 +753,54 @@ static const yytype_uint16 yytoknum[] =
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,    61,    38,    43,
-      45,    42,    47,    37,    10,    40,    41,    62,    60,    91,
-      93,    44
+     335,   336,   337,   338,   339,   340,   341,   342,   343,    61,
+      38,    43,    45,    42,    47,    37,    10,    40,    41,    62,
+      60,    91,    93,    44
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   102,   103,   103,   103,   104,   105,   105,   105,   105,
-     106,   106,   106,   106,   106,   106,   106,   106,   106,   107,
-     107,   108,   108,   108,   108,   108,   108,   108,   108,   109,
-     109,   109,   109,   109,   109,   110,   110,   111,   111,   112,
-     112,   113,   114,   114,   115,   115,   115,   116,   117,   118,
-     119,   120,   121,   122,   122,   122,   123,   124,   125,   125,
-     125,   125,   125,   125,   125,   125,   125,   125,   125,   125,
-     125,   125,   125,   125,   125,   125,   125,   125,   125,   125,
-     125,   125,   125,   125,   125,   125,   125,   125,   125,   125,
-     125,   125,   125,   125,   125,   125,   125,   125,   125,   125,
-     125,   125,   126,   126,   126,   126,   126,   126,   126,   126,
-     126,   126,   126,   126,   126,   126,   126,   126,   126,   126,
-     126,   127,   127,   128,   128,   129,   129,   130,   130,   130,
-     130,   130,   130,   131,   131,   132,   132,   133,   133,   133,
-     133,   134,   133,   136,   135,   135,   137,   135,   138,   139,
-     135,   140,   140,   140,   140,   141,   142,   143,   143,   143,
-     144,   144
+       0,   104,   105,   105,   105,   106,   107,   107,   107,   107,
+     108,   108,   108,   108,   108,   108,   108,   108,   108,   108,
+     109,   109,   110,   110,   110,   110,   110,   110,   110,   110,
+     111,   111,   111,   111,   111,   111,   112,   112,   113,   113,
+     114,   114,   115,   116,   116,   117,   117,   117,   118,   119,
+     120,   121,   122,   123,   124,   124,   124,   125,   126,   127,
+     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
+     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
+     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
+     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
+     127,   127,   127,   128,   129,   129,   129,   129,   129,   129,
+     129,   129,   129,   129,   129,   129,   129,   129,   129,   129,
+     129,   129,   129,   130,   130,   131,   131,   132,   132,   133,
+     133,   133,   133,   133,   133,   134,   134,   135,   135,   136,
+     136,   136,   136,   137,   136,   139,   138,   138,   140,   138,
+     141,   142,   138,   143,   143,   143,   143,   144,   145,   146,
+     146,   146,   147,   147
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const yytype_uint8 yyr2[] =
 {
        0,     2,     3,     1,     2,     1,     0,     1,     1,     1,
-       4,     4,     4,     4,     4,     5,     4,     4,     5,     1,
-       1,     1,     1,     7,    10,    11,     3,     6,     4,     7,
-      10,    10,     6,    10,    10,     0,     3,     2,     1,     2,
-       1,     6,     1,     6,     1,     3,     3,     2,     3,     1,
-       1,     0,     0,     0,     2,     2,     3,     1,     1,     1,
-       1,     1,     1,     2,     2,     4,     4,     1,     1,     2,
-       1,     3,     3,     3,     3,     3,     3,     3,     3,     3,
-       3,     3,     3,     2,     3,     3,     3,     3,     2,     2,
-       3,     3,     4,     4,     4,     6,     4,     6,     4,     6,
-       4,     6,     2,     1,     1,     2,     1,     2,     2,     2,
-       1,     2,     2,     1,     2,     4,     4,     6,     4,     2,
-       3,     1,     3,     1,     3,     1,     3,     2,     2,     2,
-       2,     3,     2,     2,     1,     3,     2,     2,     2,     3,
-       2,     0,     3,     0,     8,     2,     0,     8,     0,     0,
-      10,     0,     1,     3,     4,     0,     2,     0,     1,     3,
-       1,     3
+       4,     4,     4,     4,     4,     4,     5,     4,     4,     5,
+       1,     1,     1,     1,     7,    10,    11,     3,     6,     4,
+       7,    10,    10,     6,    10,    10,     0,     3,     2,     1,
+       2,     1,     6,     1,     6,     1,     3,     3,     2,     3,
+       1,     1,     0,     0,     0,     2,     2,     3,     1,     1,
+       1,     1,     1,     1,     2,     2,     4,     4,     1,     1,
+       2,     1,     3,     3,     3,     3,     3,     3,     3,     3,
+       3,     3,     3,     3,     2,     3,     3,     3,     3,     2,
+       2,     3,     3,     4,     4,     4,     6,     4,     6,     4,
+       6,     4,     6,     2,     2,     1,     1,     2,     1,     2,
+       2,     2,     1,     2,     2,     1,     2,     4,     4,     6,
+       4,     2,     3,     1,     3,     1,     3,     1,     3,     2,
+       2,     2,     2,     3,     2,     2,     1,     3,     2,     2,
+       2,     3,     2,     0,     3,     0,     8,     2,     0,     8,
+       0,     0,    10,     0,     1,     3,     4,     0,     2,     0,
+       1,     3,     1,     3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -802,105 +808,105 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,    58,    68,     0,    59,   110,   113,     0,     0,
-       0,    62,     0,     0,    67,    61,    60,   141,   106,     0,
-       0,    49,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    57,     0,
-       0,     0,     0,     0,     0,   157,     0,     3,    70,    21,
-       9,    22,     0,     0,     0,     0,     0,    19,    20,   103,
-     104,     7,     8,     5,     4,    67,     0,    69,   112,   111,
-       0,   160,   114,   157,    63,     0,    64,   157,   156,   157,
-     105,   121,   107,     0,   127,     0,   128,     0,   129,   134,
-     130,   132,   143,   102,     0,    47,     0,     0,     0,     0,
-     145,   146,   119,   137,   138,   140,   125,   109,    83,     0,
-       0,     0,     0,     0,   123,   108,   148,     0,    88,    89,
-       0,   158,     0,     1,     6,     0,     0,     0,     0,    44,
-      52,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   157,     0,
-     160,     0,     0,   120,     0,   158,     0,   142,     0,   133,
-     136,     0,   131,    51,     0,     0,     0,    48,     0,     0,
-       0,     0,     0,    56,    51,     0,   139,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,    51,
-       0,    90,    91,     0,     2,     0,    52,     0,     0,    51,
-       0,    26,     0,    53,    79,    80,    78,    81,    82,    75,
-      85,    86,    87,    84,    71,    72,    73,    74,    76,    77,
-     115,   161,    65,    66,   122,   135,   151,    10,    11,    12,
-      17,    14,     0,     0,    16,    13,   151,   118,   126,    94,
-       0,    96,     0,    98,     0,   100,     0,    92,    93,   124,
-     149,   116,   157,   159,    53,     0,    46,    53,     0,    45,
-      28,    52,   152,     0,    18,    15,     0,     0,     0,     0,
-       0,   151,     0,    52,     0,     0,    52,    52,    54,    55,
-       0,     0,   155,   155,    95,    97,    99,   101,     0,   117,
-       0,     0,    52,    51,    32,    27,   153,     0,    53,    53,
-     155,    23,    52,    53,    29,    53,     0,    50,    51,    52,
-      40,     0,   154,   144,   147,    53,    53,    52,    52,    52,
-      42,    38,     0,     0,    39,    35,     0,     0,    52,     0,
-       0,    37,     0,     0,    52,    51,    52,    51,   150,     0,
-      24,    30,    31,    51,    33,     0,    34,     0,    25,    53,
-      36,    52,    52,    41,    43
+       0,     0,    59,    69,     0,    60,   112,   115,     0,     0,
+       0,    63,     0,     0,    68,    62,    61,   143,   108,     0,
+       0,    50,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    58,     0,
+       0,     0,     0,     0,     0,   159,     0,     3,    71,    22,
+       9,    23,     0,     0,     0,     0,     0,    20,    21,   105,
+     106,     7,     8,     5,     4,    68,     0,    70,   114,   113,
+       0,   162,   116,   159,    64,     0,    65,   159,   158,   159,
+     107,   123,   109,     0,   129,     0,   130,     0,   131,   136,
+     132,   134,   145,   104,     0,    48,     0,     0,     0,     0,
+     147,   148,   121,   139,   140,   142,   127,   111,    84,     0,
+       0,     0,     0,     0,   125,   110,   150,     0,    89,    90,
+       0,   160,     0,     1,     6,     0,     0,     0,     0,    45,
+      53,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   159,     0,
+     162,     0,     0,   122,     0,   160,     0,   144,     0,   135,
+     138,     0,   133,    52,     0,     0,     0,    49,     0,     0,
+       0,     0,     0,    57,    52,     0,   141,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    52,
+       0,    91,    92,     0,     2,     0,    53,     0,     0,    52,
+       0,    27,     0,    54,    80,    81,    79,    82,    83,    76,
+      86,    87,    88,    85,    72,    73,    74,    75,    77,    78,
+     117,   163,    66,    67,   124,   137,   153,     0,    10,    11,
+      12,    13,    18,    15,     0,     0,    17,    14,   153,   120,
+     128,    95,     0,    97,     0,    99,     0,   101,     0,    93,
+      94,   126,   151,   118,   159,   161,    54,     0,    47,    54,
+       0,    46,    29,    53,   154,     0,   103,    19,    16,     0,
+       0,     0,     0,     0,   153,     0,    53,     0,     0,    53,
+      53,    55,    56,     0,     0,   157,   157,    96,    98,   100,
+     102,     0,   119,     0,     0,    53,    52,    33,    28,   155,
+       0,    54,    54,   157,    24,    53,    54,    30,    54,     0,
+      51,    52,    53,    41,     0,   156,   146,   149,    54,    54,
+      53,    53,    53,    43,    39,     0,     0,    40,    36,     0,
+       0,    53,     0,     0,    38,     0,     0,    53,    52,    53,
+      52,   152,     0,    25,    31,    32,    52,    34,     0,    35,
+       0,    26,    54,    37,    53,    53,    42,    44
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    46,   278,    47,    48,    49,   279,    51,   336,   319,
-     320,   310,   321,   128,    52,    53,    54,   311,   226,   201,
-     261,    55,    56,    57,    58,    82,   115,   107,    59,    90,
-      91,    60,    79,    61,   163,   174,   189,   271,   263,   298,
-      62,   156,    72
+      -1,    46,   281,    47,    48,    49,   282,    51,   339,   322,
+     323,   313,   324,   128,    52,    53,    54,   314,   226,   201,
+     263,    55,    56,    57,   229,    58,    82,   115,   107,    59,
+      90,    91,    60,    79,    61,   163,   174,   189,   274,   265,
+     301,    62,   156,    72
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -272
+#define YYPACT_NINF -275
 static const yytype_int16 yypact[] =
 {
-     339,   -52,  -272,  -272,   962,  -272,  -272,   962,   962,  1000,
-      37,  -272,   962,  1059,  1097,  -272,  -272,  -272,    34,    66,
-     864,  -272,    72,   962,    41,    57,    77,    81,    90,   962,
-     903,    97,   962,   962,   962,   962,   962,   962,  -272,    98,
-     100,   -41,   962,   962,   962,   962,     2,  -272,  -272,  -272,
-    -272,  -272,    36,   -21,  1156,   784,   962,  1720,  -272,  -272,
-    -272,  -272,  -272,  -272,  -272,    59,   962,  1720,  1720,  1720,
-     962,  1720,    31,   962,  1720,   962,    31,   962,    31,   962,
-    -272,  -272,    51,   962,  -272,   962,  -272,   113,  -272,  1720,
-      43,  -272,  -272,  1191,   131,  -272,   -47,   962,   -39,   108,
-    -272,  -272,  1555,  -272,    43,  -272,  -272,    58,   -48,  1224,
-    1257,  1290,  1323,  1588,  -272,    60,  -272,   133,   -48,   -48,
-    1654,  1720,    29,  -272,   428,  1156,   962,  1156,   111,  1687,
-    -272,  1488,   962,   962,   962,   962,   962,   962,   962,   962,
-     962,   962,   962,   962,   962,   962,   962,   962,   962,  1191,
-    1654,   -73,   962,    62,   -69,  1654,     7,    62,   139,  1720,
-    1720,   962,  -272,  -272,   140,   962,   962,  -272,   962,   962,
-    1522,   962,   962,  -272,  -272,   962,  -272,   143,   962,   962,
-     962,   962,   962,   962,   962,   962,   962,   962,   146,  -272,
-       8,  -272,  -272,   962,  -272,    78,  1720,    79,  1621,   -52,
-     962,  -272,   962,  -272,    22,    22,    22,   -48,   -48,   -48,
-    1720,    22,    22,   147,   238,   238,   -48,   -48,  1720,  1720,
-    -272,  1720,  -272,  -272,  -272,  1720,   164,  -272,  1720,  1720,
-    1720,  1720,   962,   962,  1720,  1720,   164,  1720,  -272,  1720,
-    1356,  1720,  1389,  1720,  1422,  1720,  1455,  1720,  1720,  -272,
-    -272,  -272,   962,  1720,  -272,    -9,  -272,  -272,   784,  1720,
-    1720,   606,  -272,   -22,  1720,  1720,   -22,   962,   962,   962,
-     962,   164,    20,   606,   141,   962,   606,  -272,  -272,  -272,
-     161,   168,    94,    94,  1720,  1720,  1720,  1720,   -22,  -272,
-     167,   962,  1720,    -3,     6,  -272,  -272,   172,  -272,  -272,
-      94,  -272,  1720,  -272,  -272,  -272,   165,  -272,  -272,   165,
-    -272,  1156,  -272,   606,   606,  -272,  -272,   606,   606,   165,
-     165,  -272,  1156,   784,  -272,   145,   151,   517,   606,   175,
-     176,  -272,   177,   159,  -272,  -272,  -272,  -272,  -272,   180,
-    -272,  -272,  -272,  -272,  -272,   784,  -272,   695,  -272,   695,
-    -272,  -272,   606,  -272,  -272
+     342,   -64,  -275,  -275,   991,  -275,  -275,   991,   991,  1063,
+      33,  -275,   991,  1103,  1175,  -275,  -275,  -275,    15,    39,
+     879,  -275,    43,   991,    61,    60,    52,    54,    66,   991,
+     951,    68,   991,   991,   991,   991,   991,   991,  -275,    75,
+      78,    14,   991,   991,   991,   991,     3,  -275,  -275,  -275,
+    -275,  -275,    22,    28,  1215,   797,   991,  1779,  -275,  -275,
+    -275,  -275,  -275,  -275,  -275,    25,   991,  1779,  1779,  1779,
+     991,  1779,    48,   991,  1779,   991,    48,   991,    48,   991,
+    -275,  -275,    49,   991,  -275,   991,  -275,    81,  -275,  1779,
+       5,  -275,  -275,  1250,   128,  -275,   -50,   991,   -41,   106,
+    -275,  -275,  1614,  -275,     5,  -275,  -275,    53,   -74,  1283,
+    1316,  1349,  1382,  1647,  -275,    55,  -275,   132,   -74,   -74,
+    1713,  1779,    27,  -275,   433,  1215,   991,  1215,   109,  1746,
+    -275,  1547,   991,   991,   991,   991,   991,   991,   991,   991,
+     991,   991,   991,   991,   991,   991,   991,   991,   991,  1250,
+    1713,    -9,   991,    58,    -6,  1713,    -2,    58,   136,  1779,
+    1779,   991,  -275,  -275,   105,   991,   991,  -275,   991,   991,
+    1581,   991,   991,  -275,  -275,   991,  -275,   137,   991,   991,
+     991,   991,   991,   991,   991,   991,   991,   991,   138,  -275,
+      11,  -275,  -275,   991,  -275,    70,  1779,    73,  1680,   -64,
+     991,  -275,   991,  -275,   239,   239,   239,   -74,   -74,   -74,
+    1779,   239,   239,   771,    13,    13,   -74,   -74,  1779,  1779,
+    -275,  1779,  -275,  -275,  -275,  1779,   147,   991,  -275,  -275,
+    1779,  1779,  1779,  1779,   991,   991,  1779,  1779,   147,  1779,
+    -275,  1779,  1415,  1779,  1448,  1779,  1481,  1779,  1514,  1779,
+    1779,  -275,  -275,  -275,   991,  1779,  -275,    -5,  -275,  -275,
+     797,  1779,  1779,   615,  -275,   -34,  1779,  1779,  1779,   -34,
+     991,   991,   991,   991,   147,    20,   615,   123,   991,   615,
+    -275,  -275,  -275,   158,   151,    87,    87,  1779,  1779,  1779,
+    1779,   -34,  -275,   160,   991,  1779,    -4,   -16,  -275,  -275,
+     165,  -275,  -275,    87,  -275,  1779,  -275,  -275,  -275,   161,
+    -275,  -275,   161,  -275,  1215,  -275,   615,   615,  -275,  -275,
+     615,   615,   161,   161,  -275,  1215,   797,  -275,   139,   142,
+     524,   615,   167,   168,  -275,   169,   153,  -275,  -275,  -275,
+    -275,  -275,   171,  -275,  -275,  -275,  -275,  -275,   797,  -275,
+     706,  -275,   706,  -275,  -275,   615,  -275,  -275
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -272,  -272,    19,    86,  -272,   -51,     0,  -272,  -272,  -272,
-     -83,  -221,  -107,  -109,  -272,  -272,  -272,  -242,  -116,   -18,
-    -198,  -272,  -272,     1,  -272,  -272,  -272,  -272,  -272,   186,
-     -29,  -272,  -272,  -272,  -272,  -272,  -272,  -272,  -219,  -271,
-    -272,   -26,    -7
+    -275,  -275,    19,    82,  -275,   -51,     0,  -275,  -275,  -275,
+     -90,  -270,  -114,  -109,  -275,  -275,  -275,  -268,   -99,   -19,
+    -198,  -275,  -275,     1,  -275,  -275,  -275,  -275,  -275,  -275,
+     180,   -13,  -275,  -275,  -275,  -275,  -275,  -275,  -275,  -215,
+    -274,  -275,   -23,    -7
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -910,70 +916,62 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -7
 static const yytype_int16 yytable[] =
 {
-      50,   105,   123,   168,   130,    67,    76,    78,    68,    69,
-      71,   171,   299,    74,    71,    71,   195,   266,   197,   122,
-      64,    89,   274,   220,    93,   138,   304,   222,   152,   315,
-     102,    89,   152,   108,   109,   110,   111,   112,   113,   307,
-     169,   275,    63,   118,   119,   120,   121,   153,   172,   146,
-     147,   305,   288,   157,   117,   129,   273,   131,   236,   276,
-     308,   162,    73,   151,   322,   124,   126,   149,   154,    96,
-      97,   150,    63,   250,   121,   176,   150,   322,   155,   281,
-     121,    80,    98,   258,   159,    85,   160,    87,   324,   135,
-     136,    81,   137,    94,    95,   138,    63,    92,   170,   324,
-     313,   314,    99,   223,   251,   317,   100,   318,   193,   252,
-     141,   142,   143,   144,   145,   101,   289,   327,   328,   146,
-     147,   193,   106,   114,    50,   116,   129,   196,   198,   192,
-     193,   125,   152,   204,   205,   206,   207,   208,   209,   210,
+      50,   138,   168,   123,   130,    67,    76,    78,    68,    69,
+      71,   171,   302,    74,    71,    71,   195,   105,   197,   310,
+      64,    89,   122,   269,    93,   146,   147,   307,   277,   318,
+     102,    89,    63,   108,   109,   110,   111,   112,   113,   169,
+     311,   325,   327,   118,   119,   120,   121,   278,   172,    85,
+     153,    87,   308,   327,   325,   129,   157,   131,   276,   291,
+      73,   279,    63,   151,    80,   124,    81,   149,   154,   284,
+      92,   150,    96,    97,   121,   238,   150,   162,   155,    99,
+     121,   100,   135,   136,   159,   137,   160,    98,   138,   220,
+     252,   176,   222,   101,   152,   106,   223,   152,   170,    63,
+     260,   193,   114,   316,   317,   116,   144,   145,   320,   253,
+     321,   117,   146,   147,   254,    94,    95,   126,   292,   125,
+     330,   331,   148,   193,    50,   161,   129,   196,   198,   192,
+     193,   227,   228,   204,   205,   206,   207,   208,   209,   210,
      211,   212,   213,   214,   215,   216,   217,   218,   219,   121,
-     203,   352,   158,   221,   148,   161,   167,   173,   190,   177,
-     199,   188,   225,   193,   224,   227,   228,   229,   238,   230,
-     231,   249,   234,   235,   254,   256,   237,   306,   255,   239,
-     240,   241,   242,   243,   244,   245,   246,   247,   248,   262,
-     295,   291,   323,   296,   253,   297,   301,   312,   307,   335,
-     337,   259,   326,   260,   340,   341,   342,   277,   343,   348,
-     194,   309,   331,   333,   135,   136,   104,   137,   257,   345,
-     138,   347,     0,     0,     0,     0,   272,   349,     0,     0,
-       0,     0,     0,   264,   265,     0,   142,   143,   144,   145,
-       0,     0,     0,   280,   146,   147,     0,     0,     0,     0,
-       0,     0,     0,   121,     0,   290,     0,     0,   293,   294,
-       0,     0,     0,     0,     0,     0,     0,     0,   284,   285,
-     286,   287,   334,     0,   303,     0,   292,     0,     0,     0,
-       0,     0,   282,     0,   316,   283,     0,     0,     0,     0,
-       0,   325,   302,     0,   350,     0,     0,     0,     0,   329,
-     330,   332,     0,     0,     0,   135,   136,   300,   137,     0,
-     339,   138,   129,     0,     0,     0,   344,     0,   346,     0,
-       0,     0,     0,   129,     0,     0,     0,     0,     0,   144,
-     145,     0,     0,   353,   354,   146,   147,     0,     0,    -6,
-       1,     0,     0,     0,     0,     0,     0,   351,     0,   351,
-       2,     3,     4,     5,     0,     6,     7,     8,     9,    10,
-       0,    11,    12,    13,    14,    15,     0,    16,     0,    17,
-       0,     0,     0,    18,     0,    19,    20,    21,     0,     0,
-      22,     0,     0,     0,     0,    23,    24,    25,     0,     0,
-      26,     0,     0,     0,    27,    28,    29,    30,     0,    31,
-       0,     0,     0,     0,     0,     0,     0,     0,    32,     0,
-       0,     0,     0,     0,     0,    33,    34,    35,    36,    37,
-       0,     0,    38,    39,    40,    41,     0,     0,    42,    43,
-       0,     0,     0,    -6,    44,     0,     0,     0,    45,     2,
-       3,     4,     5,     0,     6,     7,     8,     9,    10,     0,
-      11,    12,    13,    14,    15,     0,    16,     0,    17,     0,
-       0,     0,    18,     0,    19,    20,    21,     0,     0,    22,
-       0,     0,     0,     0,    23,    24,    25,     0,     0,    26,
-       0,     0,     0,    27,    28,    29,    30,     0,    31,     0,
-       0,     0,     0,     0,     0,     0,     0,    32,     0,     0,
-       0,     0,     0,     0,    33,    34,    35,    36,    37,     0,
-       0,    38,    39,    40,    41,     0,     0,    42,    43,     0,
-       0,     0,     0,    44,     0,     0,     0,    45,     2,     3,
-       4,     5,     0,     6,     7,     8,     9,    10,     0,    11,
-      12,    13,    65,    15,     0,    16,   338,    17,     0,     0,
-       0,    18,     0,    19,    20,    21,     0,     0,     0,     0,
-       0,     0,     0,    23,    24,    25,     0,     0,    26,     0,
-       0,     0,     0,     0,    29,    30,     0,    31,     0,     0,
-       0,     0,     0,     0,     0,     0,    32,     0,     0,     0,
-       0,     0,     0,    33,    34,    35,    36,    37,     0,     0,
-      38,    39,     0,    41,     0,     0,    42,    43,     0,     0,
-       0,    63,    44,     0,     0,     0,    45,     2,     3,     4,
-       5,     0,     6,     7,     8,     9,    10,     0,    11,    12,
-      13,    65,    15,     0,    16,     0,    17,     0,     0,     0,
+     203,   152,   158,   221,   355,   167,   177,   173,   188,   190,
+     199,   193,   225,   224,   240,   251,   230,   231,   256,   232,
+     233,   258,   236,   237,   264,   294,   239,   257,   299,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   298,
+     300,   304,   315,   340,   255,   338,   310,   309,   343,   344,
+     345,   261,   351,   262,   346,   329,   194,   312,   334,   280,
+     104,     0,   326,     0,     0,     0,   336,     0,   259,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   266,     0,
+       0,   275,     0,     0,     0,   267,   268,     0,     0,   348,
+       0,   350,     0,     0,   283,     0,     0,   352,     0,     0,
+       0,     0,     0,     0,     0,   121,     0,   293,     0,     0,
+     296,   297,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   287,   288,   289,   290,   337,   306,     0,     0,   295,
+       0,     0,     0,     0,   285,     0,   319,     0,   286,     0,
+       0,     0,     0,   328,     0,   305,     0,   353,     0,     0,
+       0,   332,   333,   335,     0,     0,     0,     0,   135,   136,
+     303,   137,   342,     0,   138,   129,     0,     0,   347,     0,
+     349,     0,     0,     0,     0,     0,   129,     0,     0,   141,
+     142,   143,   144,   145,     0,   356,   357,     0,   146,   147,
+       0,     0,    -6,     1,     0,     0,     0,     0,     0,     0,
+     354,     0,   354,     2,     3,     4,     5,     0,     6,     7,
+       8,     9,    10,     0,    11,    12,    13,     0,     0,    14,
+      15,     0,    16,     0,    17,     0,     0,     0,    18,     0,
+      19,    20,    21,     0,     0,    22,     0,     0,     0,     0,
+      23,    24,    25,     0,     0,    26,     0,     0,     0,    27,
+      28,    29,    30,     0,    31,     0,     0,     0,     0,     0,
+       0,     0,     0,    32,     0,     0,     0,     0,     0,     0,
+      33,    34,    35,    36,    37,     0,     0,    38,    39,    40,
+      41,     0,     0,    42,    43,     0,     0,     0,    -6,    44,
+       0,     0,     0,    45,     2,     3,     4,     5,     0,     6,
+       7,     8,     9,    10,     0,    11,    12,    13,     0,     0,
+      14,    15,     0,    16,     0,    17,     0,     0,     0,    18,
+       0,    19,    20,    21,     0,     0,    22,     0,     0,     0,
+       0,    23,    24,    25,     0,     0,    26,     0,     0,     0,
+      27,    28,    29,    30,     0,    31,     0,     0,     0,     0,
+       0,     0,     0,     0,    32,     0,     0,     0,     0,     0,
+       0,    33,    34,    35,    36,    37,     0,     0,    38,    39,
+      40,    41,     0,     0,    42,    43,     0,     0,     0,     0,
+      44,     0,     0,     0,    45,     2,     3,     4,     5,     0,
+       6,     7,     8,     9,    10,     0,    11,    12,    13,     0,
+       0,    65,    15,     0,    16,   341,    17,     0,     0,     0,
       18,     0,    19,    20,    21,     0,     0,     0,     0,     0,
        0,     0,    23,    24,    25,     0,     0,    26,     0,     0,
        0,     0,     0,    29,    30,     0,    31,     0,     0,     0,
@@ -982,302 +980,322 @@ static const yytype_int16 yytable[] =
       39,     0,    41,     0,     0,    42,    43,     0,     0,     0,
       63,    44,     0,     0,     0,    45,     2,     3,     4,     5,
        0,     6,     7,     8,     9,    10,     0,    11,    12,    13,
-      65,    15,     0,    16,     0,    17,     0,     0,     0,    18,
-       0,    19,    20,    21,     0,     0,     0,     0,     0,     0,
-       0,    23,    24,    25,     0,     0,    26,     0,     0,     0,
-       0,     0,    29,    30,     0,    31,     0,     0,     0,     0,
+       0,     0,    65,    15,     0,    16,     0,    17,     0,     0,
+       0,    18,     0,    19,    20,    21,     0,     0,     0,     0,
+       0,     0,     0,    23,    24,    25,     0,     0,    26,     0,
+       0,     0,     0,     0,    29,    30,     0,    31,     0,     0,
+       0,     0,     0,     0,     0,     0,    32,     0,     0,     0,
+       0,     0,     0,    33,    34,    35,    36,    37,     0,     0,
+      38,    39,     0,    41,     0,     0,    42,    43,     0,     0,
+       0,    63,    44,     0,     0,     0,    45,     2,     3,     4,
+       5,     0,     6,     7,     8,     9,    10,     0,    11,    12,
+      13,     0,     0,    65,    15,     0,    16,     0,    17,     0,
+       0,     0,    18,     0,    19,    20,    21,     0,     0,     0,
+       0,     0,     0,     0,    23,    24,    25,     0,     0,    26,
+       0,     0,     0,     0,     0,    29,    30,     0,    31,     0,
+       0,     0,     0,     0,     0,     0,     0,    32,     0,     0,
+       0,     0,     0,     0,    33,    34,    35,    36,    37,     0,
+       0,    38,    39,     0,    41,     0,     0,    42,    43,     0,
+       0,     0,     0,    44,     0,     0,     0,    45,     2,     3,
+       4,     5,     0,     6,     7,     8,     9,    10,     0,    11,
+      12,    13,     0,     0,    65,    15,     0,    16,     0,    17,
+       0,     0,     0,    18,     0,    19,    20,     0,     0,     0,
+     135,   136,     0,   137,     0,    23,   138,    25,     0,     0,
+       0,     0,     0,     0,     0,     0,    29,    30,     0,    31,
+       0,     0,   142,   143,   144,   145,     0,     0,    32,     0,
+     146,   147,     0,     0,     0,    33,    34,    35,    36,    37,
+       0,     0,     0,    39,     0,    41,     0,     0,    42,    43,
+       2,     3,     4,     5,    44,     0,     0,     0,    45,     0,
+       0,    11,    12,    13,     0,     0,    65,    15,     0,    16,
+       0,     0,     0,     0,     0,     0,    83,     0,     0,     0,
+       0,    84,     0,    85,    86,    87,    88,    66,     0,    25,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      32,     0,     0,     0,     0,     0,     0,    33,    34,    35,
+      36,    37,     2,     3,     4,     5,     0,     0,     0,     0,
+      42,    43,     0,    11,    12,    13,    44,     0,    65,    15,
+      45,    16,     0,     0,     0,     0,     0,     0,    83,     0,
+       0,     0,     0,     0,     0,    85,     0,    87,     0,    66,
+       0,    25,     2,     3,     4,     5,     0,     0,     0,     0,
+       0,     0,   103,    11,    12,    13,     0,     0,    65,    15,
+       0,    16,    32,     0,     0,     0,     0,     0,     0,    33,
+      34,    35,    36,    37,     0,     0,     0,     0,     0,    66,
+       0,    25,    42,    43,     0,     0,     0,     0,    44,     0,
+       0,     0,    45,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    32,     0,     0,     0,     0,     0,     0,    33,
+      34,    35,    36,    37,     2,     3,     4,     5,     0,     0,
+       0,     0,    42,    43,     0,    11,    12,    13,    44,     0,
+      65,    15,    45,    16,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    66,     0,    25,     2,     3,     4,     5,     0,     0,
+       0,     0,     0,     0,     0,    11,    12,    13,     0,     0,
+      65,    15,     0,    16,    32,     0,     0,     0,     0,     0,
+       0,    33,    34,    35,    36,    37,     0,     0,     0,     0,
+       0,    66,     0,    25,    42,    43,     0,     0,     0,     0,
+      70,     0,     0,     0,    45,     0,     0,     0,     0,     0,
        0,     0,     0,     0,    32,     0,     0,     0,     0,     0,
-       0,    33,    34,    35,    36,    37,     0,     0,    38,    39,
-       0,    41,     0,     0,    42,    43,     0,     0,     0,     0,
-      44,     0,     0,     0,    45,     2,     3,     4,     5,     0,
-       6,     7,     8,     9,    10,     0,    11,    12,    13,    65,
-      15,     0,    16,     0,    17,     0,     0,     0,    18,     0,
-      19,    20,     0,     0,     0,     0,     0,     0,     0,     0,
-      23,     0,    25,     0,     0,     0,     0,     0,     0,     0,
-       0,    29,    30,     0,    31,     0,     0,     0,     0,     0,
-       0,     0,     0,    32,     0,     0,     0,     0,     0,     0,
-      33,    34,    35,    36,    37,     0,     0,     0,    39,     0,
-      41,     0,     0,    42,    43,     2,     3,     4,     5,    44,
-       0,     0,     0,    45,     0,     0,    11,    12,    13,    65,
-      15,     0,    16,     0,     0,     0,     0,     0,     0,    83,
-       0,     0,     0,     0,    84,     0,    85,    86,    87,    88,
-      66,     0,    25,     0,     2,     3,     4,     5,     0,     0,
-       0,     0,     0,     0,     0,    11,    12,    13,    65,    15,
-       0,    16,     0,    32,     0,     0,     0,     0,    83,     0,
-      33,    34,    35,    36,    37,    85,     0,    87,     0,    66,
-       0,    25,     0,    42,    43,     0,     0,     0,     0,    44,
-       0,     0,   103,    45,     0,     0,     0,     0,     0,     0,
-       0,     0,    32,     2,     3,     4,     5,     0,     0,    33,
-      34,    35,    36,    37,    11,    12,    13,    65,    15,     0,
-      16,     0,    42,    43,     0,     0,     0,     0,    44,     0,
-       0,     0,    45,     0,     0,     0,     0,     0,    66,     0,
-      25,     2,     3,     4,     5,     0,     0,     0,     0,     0,
-       0,     0,    11,    12,    13,    65,    15,     0,    16,     0,
-       0,    32,     0,     0,     0,     0,     0,     0,    33,    34,
-      35,    36,    37,     0,     0,     0,    66,     0,    25,     0,
-       0,    42,    43,     0,     0,     0,     0,    44,     0,     0,
-       0,    45,     0,     0,     0,     0,     0,     0,     0,    32,
-       2,     3,     4,     5,     0,     0,    33,    34,    35,    36,
-      37,    11,    12,    13,    65,    15,     0,    16,     0,    42,
-      43,     0,     0,     0,     0,    70,     0,     0,     0,    45,
-       0,     0,     0,     0,     0,    66,     0,    25,     2,     3,
-       4,     5,     0,     0,     0,     0,     0,     0,     0,    11,
-      12,    13,    65,    15,     0,    16,     0,     0,    32,     0,
-       0,     0,     0,     0,     0,    33,    34,    35,    36,    37,
-       0,     0,     0,    66,     0,    25,     0,     0,    42,    43,
-       0,     0,     0,     0,    75,     0,     0,     0,    45,     0,
-       0,     0,     0,     0,     0,     0,    32,     2,     3,     4,
-       5,     0,     0,    33,    34,    35,    36,    37,    11,    12,
-      13,    65,    15,     0,    16,     0,    42,    43,     0,     0,
-       0,     0,    77,     0,     0,     0,    45,     0,     0,     0,
-       0,     0,    66,     0,    25,     0,     0,     0,     0,     0,
+       0,    33,    34,    35,    36,    37,     2,     3,     4,     5,
+       0,     0,     0,     0,    42,    43,     0,    11,    12,    13,
+      75,     0,    65,    15,    45,    16,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    32,     0,     0,     0,     0,
-     164,     0,    33,    34,    35,    36,    37,     0,     0,     0,
-       0,     0,     0,     0,     0,    42,    43,     0,     0,     0,
-       0,   127,   132,   133,     0,    45,     0,   134,   135,   136,
-       0,   137,   165,   166,   138,   139,   140,     0,   178,     0,
-       0,     0,     0,     0,   179,     0,     0,     0,     0,   141,
+       0,     0,     0,    66,     0,    25,     2,     3,     4,     5,
+       0,     0,     0,     0,     0,     0,     0,    11,    12,    13,
+       0,     0,    65,    15,     0,    16,    32,     0,     0,     0,
+       0,     0,     0,    33,    34,    35,    36,    37,     0,     0,
+       0,     0,     0,    66,     0,    25,    42,    43,     0,     0,
+       0,     0,    77,     0,     0,     0,    45,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    32,     0,     0,     0,
+       0,   164,     0,    33,    34,    35,    36,    37,     0,     0,
+       0,     0,     0,     0,     0,     0,    42,    43,     0,     0,
+       0,     0,   127,   132,   133,     0,    45,     0,   134,   135,
+     136,     0,   137,   165,   166,   138,   139,   140,     0,   178,
+       0,     0,     0,     0,     0,   179,     0,     0,     0,     0,
+     141,   142,   143,   144,   145,     0,   132,   133,     0,   146,
+     147,   134,   135,   136,     0,   137,     0,     0,   138,   139,
+     140,     0,   180,     0,     0,     0,     0,     0,   181,     0,
+       0,     0,     0,   141,   142,   143,   144,   145,     0,   132,
+     133,     0,   146,   147,   134,   135,   136,     0,   137,     0,
+       0,   138,   139,   140,     0,   182,     0,     0,     0,     0,
+       0,   183,     0,     0,     0,     0,   141,   142,   143,   144,
+     145,     0,   132,   133,     0,   146,   147,   134,   135,   136,
+       0,   137,     0,     0,   138,   139,   140,     0,   184,     0,
+       0,     0,     0,     0,   185,     0,     0,     0,     0,   141,
      142,   143,   144,   145,     0,   132,   133,     0,   146,   147,
      134,   135,   136,     0,   137,     0,     0,   138,   139,   140,
-       0,   180,     0,     0,     0,     0,     0,   181,     0,     0,
+       0,   270,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,   141,   142,   143,   144,   145,     0,   132,   133,
        0,   146,   147,   134,   135,   136,     0,   137,     0,     0,
-     138,   139,   140,     0,   182,     0,     0,     0,     0,     0,
-     183,     0,     0,     0,     0,   141,   142,   143,   144,   145,
+     138,   139,   140,     0,   271,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   141,   142,   143,   144,   145,
        0,   132,   133,     0,   146,   147,   134,   135,   136,     0,
-     137,     0,     0,   138,   139,   140,     0,   184,     0,     0,
-       0,     0,     0,   185,     0,     0,     0,     0,   141,   142,
+     137,     0,     0,   138,   139,   140,     0,   272,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   141,   142,
      143,   144,   145,     0,   132,   133,     0,   146,   147,   134,
      135,   136,     0,   137,     0,     0,   138,   139,   140,     0,
-     267,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     273,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,   141,   142,   143,   144,   145,     0,   132,   133,     0,
      146,   147,   134,   135,   136,     0,   137,     0,     0,   138,
-     139,   140,     0,   268,     0,     0,     0,     0,     0,     0,
+     139,   140,     0,     0,     0,     0,     0,     0,     0,   202,
        0,     0,     0,     0,   141,   142,   143,   144,   145,     0,
      132,   133,     0,   146,   147,   134,   135,   136,     0,   137,
-       0,     0,   138,   139,   140,     0,   269,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   141,   142,   143,
+       0,     0,   138,   139,   140,     0,     0,     0,     0,     0,
+       0,     0,     0,   234,     0,     0,     0,   141,   142,   143,
+     144,   145,     0,    63,   132,   133,   146,   147,     0,   134,
+     135,   136,     0,   137,     0,     0,   138,   139,   140,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   175,     0,
+     235,   141,   142,   143,   144,   145,     0,   132,   133,     0,
+     146,   147,   134,   135,   136,     0,   137,     0,     0,   138,
+     139,   140,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   141,   142,   143,   144,   145,     0,
+     132,   133,     0,   146,   147,   134,   135,   136,     0,   137,
+       0,     0,   138,   139,   140,     0,     0,     0,     0,     0,
+     186,   187,     0,     0,     0,     0,     0,   141,   142,   143,
      144,   145,     0,   132,   133,     0,   146,   147,   134,   135,
-     136,     0,   137,     0,     0,   138,   139,   140,     0,   270,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     141,   142,   143,   144,   145,     0,   132,   133,     0,   146,
-     147,   134,   135,   136,     0,   137,     0,     0,   138,   139,
-     140,     0,     0,     0,     0,     0,     0,     0,   202,     0,
-       0,     0,     0,   141,   142,   143,   144,   145,     0,   132,
-     133,     0,   146,   147,   134,   135,   136,     0,   137,     0,
-       0,   138,   139,   140,     0,     0,     0,     0,     0,     0,
-       0,     0,   232,     0,     0,     0,   141,   142,   143,   144,
-     145,     0,    63,   132,   133,   146,   147,     0,   134,   135,
      136,     0,   137,     0,     0,   138,   139,   140,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   175,     0,   233,
-     141,   142,   143,   144,   145,     0,   132,   133,     0,   146,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   200,
+     141,   142,   143,   144,   145,     0,   132,   133,   191,   146,
      147,   134,   135,   136,     0,   137,     0,     0,   138,   139,
      140,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,   141,   142,   143,   144,   145,     0,   132,
-     133,     0,   146,   147,   134,   135,   136,     0,   137,     0,
-       0,   138,   139,   140,     0,     0,     0,     0,     0,   186,
-     187,     0,     0,     0,     0,     0,   141,   142,   143,   144,
+     133,   191,   146,   147,   134,   135,   136,     0,   137,     0,
+       0,   138,   139,   140,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   200,   141,   142,   143,   144,
      145,     0,   132,   133,     0,   146,   147,   134,   135,   136,
        0,   137,     0,     0,   138,   139,   140,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   200,   141,
-     142,   143,   144,   145,     0,   132,   133,   191,   146,   147,
-     134,   135,   136,     0,   137,     0,     0,   138,   139,   140,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   141,   142,   143,   144,   145,     0,   132,   133,
-     191,   146,   147,   134,   135,   136,     0,   137,     0,     0,
-     138,   139,   140,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   200,   141,   142,   143,   144,   145,
-       0,   132,   133,     0,   146,   147,   134,   135,   136,     0,
-     137,     0,     0,   138,   139,   140,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   141,   142,
-     143,   144,   145,     0,     0,     0,     0,   146,   147
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   141,
+     142,   143,   144,   145,     0,     0,     0,     0,   146,   147
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    30,     0,    50,    55,     4,    13,    14,     7,     8,
-       9,    50,   283,    12,    13,    14,   125,   236,   127,    45,
-       1,    20,    31,    96,    23,    73,    29,    96,   101,   300,
-      29,    30,   101,    32,    33,    34,    35,    36,    37,    33,
-      87,    50,    94,    42,    43,    44,    45,    73,    87,    97,
-      98,    54,   271,    79,    95,    54,   254,    56,   174,   257,
-      54,    90,    25,    70,   306,    46,    87,    66,    75,    12,
-      13,    70,    94,   189,    73,   104,    75,   319,    77,   101,
-      79,    47,    25,   199,    83,    42,    85,    44,   309,    67,
-      68,    25,    70,    52,    53,    73,    94,    25,    97,   320,
-     298,   299,    25,    96,    96,   303,    25,   305,   101,   101,
-      88,    89,    90,    91,    92,    25,    96,   315,   316,    97,
-      98,   101,    25,    25,   124,    25,   125,   126,   127,   100,
-     101,    95,   101,   132,   133,   134,   135,   136,   137,   138,
+       0,    75,    52,     0,    55,     4,    13,    14,     7,     8,
+       9,    52,   286,    12,    13,    14,   125,    30,   127,    35,
+       1,    20,    45,   238,    23,    99,   100,    31,    33,   303,
+      29,    30,    96,    32,    33,    34,    35,    36,    37,    89,
+      56,   309,   312,    42,    43,    44,    45,    52,    89,    44,
+      73,    46,    56,   323,   322,    54,    79,    56,   256,   274,
+      27,   259,    96,    70,    49,    46,    27,    66,    75,   103,
+      27,    70,    12,    13,    73,   174,    75,    90,    77,    27,
+      79,    27,    69,    70,    83,    72,    85,    27,    75,    98,
+     189,   104,    98,    27,   103,    27,    98,   103,    97,    96,
+     199,   103,    27,   301,   302,    27,    93,    94,   306,    98,
+     308,    97,    99,   100,   103,    54,    55,    89,    98,    97,
+     318,   319,    97,   103,   124,    44,   125,   126,   127,   102,
+     103,    26,    27,   132,   133,   134,   135,   136,   137,   138,
      139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     131,   349,   101,   152,    95,    42,    25,    49,    25,   101,
-      49,   101,   161,   101,    25,    25,   165,   166,    25,   168,
-     169,    25,   171,   172,    96,    96,   175,   293,   196,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,    25,
-      29,    50,   308,    25,   193,   101,    29,    25,    33,    54,
-      49,   200,   311,   202,    29,    29,    29,   258,    49,    29,
-     124,   294,   319,   322,    67,    68,    30,    70,   199,   335,
-      73,   337,    -1,    -1,    -1,    -1,   252,   343,    -1,    -1,
-      -1,    -1,    -1,   232,   233,    -1,    89,    90,    91,    92,
-      -1,    -1,    -1,   261,    97,    98,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   252,    -1,   273,    -1,    -1,   276,   277,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   267,   268,
-     269,   270,   323,    -1,   292,    -1,   275,    -1,    -1,    -1,
-      -1,    -1,   263,    -1,   302,   266,    -1,    -1,    -1,    -1,
-      -1,   309,   291,    -1,   345,    -1,    -1,    -1,    -1,   317,
-     318,   319,    -1,    -1,    -1,    67,    68,   288,    70,    -1,
-     328,    73,   311,    -1,    -1,    -1,   334,    -1,   336,    -1,
-      -1,    -1,    -1,   322,    -1,    -1,    -1,    -1,    -1,    91,
-      92,    -1,    -1,   351,   352,    97,    98,    -1,    -1,     0,
-       1,    -1,    -1,    -1,    -1,    -1,    -1,   347,    -1,   349,
-      11,    12,    13,    14,    -1,    16,    17,    18,    19,    20,
-      -1,    22,    23,    24,    25,    26,    -1,    28,    -1,    30,
-      -1,    -1,    -1,    34,    -1,    36,    37,    38,    -1,    -1,
-      41,    -1,    -1,    -1,    -1,    46,    47,    48,    -1,    -1,
-      51,    -1,    -1,    -1,    55,    56,    57,    58,    -1,    60,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,
-      -1,    -1,    -1,    -1,    -1,    76,    77,    78,    79,    80,
-      -1,    -1,    83,    84,    85,    86,    -1,    -1,    89,    90,
-      -1,    -1,    -1,    94,    95,    -1,    -1,    -1,    99,    11,
-      12,    13,    14,    -1,    16,    17,    18,    19,    20,    -1,
-      22,    23,    24,    25,    26,    -1,    28,    -1,    30,    -1,
-      -1,    -1,    34,    -1,    36,    37,    38,    -1,    -1,    41,
-      -1,    -1,    -1,    -1,    46,    47,    48,    -1,    -1,    51,
-      -1,    -1,    -1,    55,    56,    57,    58,    -1,    60,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,
-      -1,    -1,    -1,    -1,    76,    77,    78,    79,    80,    -1,
-      -1,    83,    84,    85,    86,    -1,    -1,    89,    90,    -1,
-      -1,    -1,    -1,    95,    -1,    -1,    -1,    99,    11,    12,
-      13,    14,    -1,    16,    17,    18,    19,    20,    -1,    22,
-      23,    24,    25,    26,    -1,    28,    29,    30,    -1,    -1,
-      -1,    34,    -1,    36,    37,    38,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    46,    47,    48,    -1,    -1,    51,    -1,
-      -1,    -1,    -1,    -1,    57,    58,    -1,    60,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,
-      -1,    -1,    -1,    76,    77,    78,    79,    80,    -1,    -1,
-      83,    84,    -1,    86,    -1,    -1,    89,    90,    -1,    -1,
-      -1,    94,    95,    -1,    -1,    -1,    99,    11,    12,    13,
-      14,    -1,    16,    17,    18,    19,    20,    -1,    22,    23,
-      24,    25,    26,    -1,    28,    -1,    30,    -1,    -1,    -1,
-      34,    -1,    36,    37,    38,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    46,    47,    48,    -1,    -1,    51,    -1,    -1,
-      -1,    -1,    -1,    57,    58,    -1,    60,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,
-      -1,    -1,    76,    77,    78,    79,    80,    -1,    -1,    83,
-      84,    -1,    86,    -1,    -1,    89,    90,    -1,    -1,    -1,
-      94,    95,    -1,    -1,    -1,    99,    11,    12,    13,    14,
+     131,   103,   103,   152,   352,    27,   103,    51,   103,    27,
+      51,   103,   161,    27,    27,    27,   165,   166,    98,   168,
+     169,    98,   171,   172,    27,    52,   175,   196,    27,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,    31,
+     103,    31,    27,    51,   193,    56,    35,   296,    31,    31,
+      31,   200,    31,   202,    51,   314,   124,   297,   322,   260,
+      30,    -1,   311,    -1,    -1,    -1,   325,    -1,   199,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   227,    -1,
+      -1,   254,    -1,    -1,    -1,   234,   235,    -1,    -1,   338,
+      -1,   340,    -1,    -1,   263,    -1,    -1,   346,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   254,    -1,   276,    -1,    -1,
+     279,   280,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   270,   271,   272,   273,   326,   295,    -1,    -1,   278,
+      -1,    -1,    -1,    -1,   265,    -1,   305,    -1,   269,    -1,
+      -1,    -1,    -1,   312,    -1,   294,    -1,   348,    -1,    -1,
+      -1,   320,   321,   322,    -1,    -1,    -1,    -1,    69,    70,
+     291,    72,   331,    -1,    75,   314,    -1,    -1,   337,    -1,
+     339,    -1,    -1,    -1,    -1,    -1,   325,    -1,    -1,    90,
+      91,    92,    93,    94,    -1,   354,   355,    -1,    99,   100,
+      -1,    -1,     0,     1,    -1,    -1,    -1,    -1,    -1,    -1,
+     350,    -1,   352,    11,    12,    13,    14,    -1,    16,    17,
+      18,    19,    20,    -1,    22,    23,    24,    -1,    -1,    27,
+      28,    -1,    30,    -1,    32,    -1,    -1,    -1,    36,    -1,
+      38,    39,    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,
+      48,    49,    50,    -1,    -1,    53,    -1,    -1,    -1,    57,
+      58,    59,    60,    -1,    62,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
+      78,    79,    80,    81,    82,    -1,    -1,    85,    86,    87,
+      88,    -1,    -1,    91,    92,    -1,    -1,    -1,    96,    97,
+      -1,    -1,    -1,   101,    11,    12,    13,    14,    -1,    16,
+      17,    18,    19,    20,    -1,    22,    23,    24,    -1,    -1,
+      27,    28,    -1,    30,    -1,    32,    -1,    -1,    -1,    36,
+      -1,    38,    39,    40,    -1,    -1,    43,    -1,    -1,    -1,
+      -1,    48,    49,    50,    -1,    -1,    53,    -1,    -1,    -1,
+      57,    58,    59,    60,    -1,    62,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,
+      -1,    78,    79,    80,    81,    82,    -1,    -1,    85,    86,
+      87,    88,    -1,    -1,    91,    92,    -1,    -1,    -1,    -1,
+      97,    -1,    -1,    -1,   101,    11,    12,    13,    14,    -1,
+      16,    17,    18,    19,    20,    -1,    22,    23,    24,    -1,
+      -1,    27,    28,    -1,    30,    31,    32,    -1,    -1,    -1,
+      36,    -1,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    48,    49,    50,    -1,    -1,    53,    -1,    -1,
+      -1,    -1,    -1,    59,    60,    -1,    62,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,
+      -1,    -1,    78,    79,    80,    81,    82,    -1,    -1,    85,
+      86,    -1,    88,    -1,    -1,    91,    92,    -1,    -1,    -1,
+      96,    97,    -1,    -1,    -1,   101,    11,    12,    13,    14,
       -1,    16,    17,    18,    19,    20,    -1,    22,    23,    24,
-      25,    26,    -1,    28,    -1,    30,    -1,    -1,    -1,    34,
-      -1,    36,    37,    38,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    46,    47,    48,    -1,    -1,    51,    -1,    -1,    -1,
-      -1,    -1,    57,    58,    -1,    60,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,    -1,
-      -1,    76,    77,    78,    79,    80,    -1,    -1,    83,    84,
-      -1,    86,    -1,    -1,    89,    90,    -1,    -1,    -1,    -1,
-      95,    -1,    -1,    -1,    99,    11,    12,    13,    14,    -1,
-      16,    17,    18,    19,    20,    -1,    22,    23,    24,    25,
-      26,    -1,    28,    -1,    30,    -1,    -1,    -1,    34,    -1,
-      36,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      46,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    57,    58,    -1,    60,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,
-      76,    77,    78,    79,    80,    -1,    -1,    -1,    84,    -1,
-      86,    -1,    -1,    89,    90,    11,    12,    13,    14,    95,
-      -1,    -1,    -1,    99,    -1,    -1,    22,    23,    24,    25,
-      26,    -1,    28,    -1,    -1,    -1,    -1,    -1,    -1,    35,
-      -1,    -1,    -1,    -1,    40,    -1,    42,    43,    44,    45,
-      46,    -1,    48,    -1,    11,    12,    13,    14,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    22,    23,    24,    25,    26,
-      -1,    28,    -1,    69,    -1,    -1,    -1,    -1,    35,    -1,
-      76,    77,    78,    79,    80,    42,    -1,    44,    -1,    46,
-      -1,    48,    -1,    89,    90,    -1,    -1,    -1,    -1,    95,
-      -1,    -1,    59,    99,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    69,    11,    12,    13,    14,    -1,    -1,    76,
-      77,    78,    79,    80,    22,    23,    24,    25,    26,    -1,
-      28,    -1,    89,    90,    -1,    -1,    -1,    -1,    95,    -1,
-      -1,    -1,    99,    -1,    -1,    -1,    -1,    -1,    46,    -1,
-      48,    11,    12,    13,    14,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    22,    23,    24,    25,    26,    -1,    28,    -1,
-      -1,    69,    -1,    -1,    -1,    -1,    -1,    -1,    76,    77,
-      78,    79,    80,    -1,    -1,    -1,    46,    -1,    48,    -1,
-      -1,    89,    90,    -1,    -1,    -1,    -1,    95,    -1,    -1,
-      -1,    99,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    69,
-      11,    12,    13,    14,    -1,    -1,    76,    77,    78,    79,
-      80,    22,    23,    24,    25,    26,    -1,    28,    -1,    89,
-      90,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    99,
-      -1,    -1,    -1,    -1,    -1,    46,    -1,    48,    11,    12,
-      13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    22,
-      23,    24,    25,    26,    -1,    28,    -1,    -1,    69,    -1,
-      -1,    -1,    -1,    -1,    -1,    76,    77,    78,    79,    80,
-      -1,    -1,    -1,    46,    -1,    48,    -1,    -1,    89,    90,
-      -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    99,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    69,    11,    12,    13,
-      14,    -1,    -1,    76,    77,    78,    79,    80,    22,    23,
-      24,    25,    26,    -1,    28,    -1,    89,    90,    -1,    -1,
-      -1,    -1,    95,    -1,    -1,    -1,    99,    -1,    -1,    -1,
-      -1,    -1,    46,    -1,    48,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    27,    28,    -1,    30,    -1,    32,    -1,    -1,
+      -1,    36,    -1,    38,    39,    40,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    48,    49,    50,    -1,    -1,    53,    -1,
+      -1,    -1,    -1,    -1,    59,    60,    -1,    62,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
+      -1,    -1,    -1,    78,    79,    80,    81,    82,    -1,    -1,
+      85,    86,    -1,    88,    -1,    -1,    91,    92,    -1,    -1,
+      -1,    96,    97,    -1,    -1,    -1,   101,    11,    12,    13,
+      14,    -1,    16,    17,    18,    19,    20,    -1,    22,    23,
+      24,    -1,    -1,    27,    28,    -1,    30,    -1,    32,    -1,
+      -1,    -1,    36,    -1,    38,    39,    40,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    48,    49,    50,    -1,    -1,    53,
+      -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    62,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,
+      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    -1,
+      -1,    85,    86,    -1,    88,    -1,    -1,    91,    92,    -1,
+      -1,    -1,    -1,    97,    -1,    -1,    -1,   101,    11,    12,
+      13,    14,    -1,    16,    17,    18,    19,    20,    -1,    22,
+      23,    24,    -1,    -1,    27,    28,    -1,    30,    -1,    32,
+      -1,    -1,    -1,    36,    -1,    38,    39,    -1,    -1,    -1,
+      69,    70,    -1,    72,    -1,    48,    75,    50,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    62,
+      -1,    -1,    91,    92,    93,    94,    -1,    -1,    71,    -1,
+      99,   100,    -1,    -1,    -1,    78,    79,    80,    81,    82,
+      -1,    -1,    -1,    86,    -1,    88,    -1,    -1,    91,    92,
+      11,    12,    13,    14,    97,    -1,    -1,    -1,   101,    -1,
+      -1,    22,    23,    24,    -1,    -1,    27,    28,    -1,    30,
+      -1,    -1,    -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,
+      -1,    42,    -1,    44,    45,    46,    47,    48,    -1,    50,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    69,    -1,    -1,    -1,    -1,
-      39,    -1,    76,    77,    78,    79,    80,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    89,    90,    -1,    -1,    -1,
-      -1,    95,    61,    62,    -1,    99,    -1,    66,    67,    68,
-      -1,    70,    71,    72,    73,    74,    75,    -1,    44,    -1,
-      -1,    -1,    -1,    -1,    50,    -1,    -1,    -1,    -1,    88,
-      89,    90,    91,    92,    -1,    61,    62,    -1,    97,    98,
-      66,    67,    68,    -1,    70,    -1,    -1,    73,    74,    75,
-      -1,    44,    -1,    -1,    -1,    -1,    -1,    50,    -1,    -1,
-      -1,    -1,    88,    89,    90,    91,    92,    -1,    61,    62,
-      -1,    97,    98,    66,    67,    68,    -1,    70,    -1,    -1,
-      73,    74,    75,    -1,    44,    -1,    -1,    -1,    -1,    -1,
-      50,    -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,
-      -1,    61,    62,    -1,    97,    98,    66,    67,    68,    -1,
-      70,    -1,    -1,    73,    74,    75,    -1,    44,    -1,    -1,
-      -1,    -1,    -1,    50,    -1,    -1,    -1,    -1,    88,    89,
-      90,    91,    92,    -1,    61,    62,    -1,    97,    98,    66,
-      67,    68,    -1,    70,    -1,    -1,    73,    74,    75,    -1,
-      44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    88,    89,    90,    91,    92,    -1,    61,    62,    -1,
-      97,    98,    66,    67,    68,    -1,    70,    -1,    -1,    73,
-      74,    75,    -1,    44,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    88,    89,    90,    91,    92,    -1,
-      61,    62,    -1,    97,    98,    66,    67,    68,    -1,    70,
-      -1,    -1,    73,    74,    75,    -1,    44,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,
-      91,    92,    -1,    61,    62,    -1,    97,    98,    66,    67,
-      68,    -1,    70,    -1,    -1,    73,    74,    75,    -1,    44,
+      71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
+      81,    82,    11,    12,    13,    14,    -1,    -1,    -1,    -1,
+      91,    92,    -1,    22,    23,    24,    97,    -1,    27,    28,
+     101,    30,    -1,    -1,    -1,    -1,    -1,    -1,    37,    -1,
+      -1,    -1,    -1,    -1,    -1,    44,    -1,    46,    -1,    48,
+      -1,    50,    11,    12,    13,    14,    -1,    -1,    -1,    -1,
+      -1,    -1,    61,    22,    23,    24,    -1,    -1,    27,    28,
+      -1,    30,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,
+      79,    80,    81,    82,    -1,    -1,    -1,    -1,    -1,    48,
+      -1,    50,    91,    92,    -1,    -1,    -1,    -1,    97,    -1,
+      -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,
+      79,    80,    81,    82,    11,    12,    13,    14,    -1,    -1,
+      -1,    -1,    91,    92,    -1,    22,    23,    24,    97,    -1,
+      27,    28,   101,    30,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      88,    89,    90,    91,    92,    -1,    61,    62,    -1,    97,
-      98,    66,    67,    68,    -1,    70,    -1,    -1,    73,    74,
-      75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    50,    -1,
-      -1,    -1,    -1,    88,    89,    90,    91,    92,    -1,    61,
-      62,    -1,    97,    98,    66,    67,    68,    -1,    70,    -1,
-      -1,    73,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    50,    -1,    -1,    -1,    88,    89,    90,    91,
-      92,    -1,    94,    61,    62,    97,    98,    -1,    66,    67,
-      68,    -1,    70,    -1,    -1,    73,    74,    75,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    52,    -1,    87,
-      88,    89,    90,    91,    92,    -1,    61,    62,    -1,    97,
-      98,    66,    67,    68,    -1,    70,    -1,    -1,    73,    74,
-      75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    88,    89,    90,    91,    92,    -1,    61,
-      62,    -1,    97,    98,    66,    67,    68,    -1,    70,    -1,
-      -1,    73,    74,    75,    -1,    -1,    -1,    -1,    -1,    81,
-      82,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,
-      92,    -1,    61,    62,    -1,    97,    98,    66,    67,    68,
-      -1,    70,    -1,    -1,    73,    74,    75,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,
-      89,    90,    91,    92,    -1,    61,    62,    96,    97,    98,
-      66,    67,    68,    -1,    70,    -1,    -1,    73,    74,    75,
+      -1,    48,    -1,    50,    11,    12,    13,    14,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    22,    23,    24,    -1,    -1,
+      27,    28,    -1,    30,    71,    -1,    -1,    -1,    -1,    -1,
+      -1,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
+      -1,    48,    -1,    50,    91,    92,    -1,    -1,    -1,    -1,
+      97,    -1,    -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,
+      -1,    78,    79,    80,    81,    82,    11,    12,    13,    14,
+      -1,    -1,    -1,    -1,    91,    92,    -1,    22,    23,    24,
+      97,    -1,    27,    28,   101,    30,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    88,    89,    90,    91,    92,    -1,    61,    62,
-      96,    97,    98,    66,    67,    68,    -1,    70,    -1,    -1,
-      73,    74,    75,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,    92,
-      -1,    61,    62,    -1,    97,    98,    66,    67,    68,    -1,
-      70,    -1,    -1,    73,    74,    75,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    88,    89,
-      90,    91,    92,    -1,    -1,    -1,    -1,    97,    98
+      -1,    -1,    -1,    48,    -1,    50,    11,    12,    13,    14,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    22,    23,    24,
+      -1,    -1,    27,    28,    -1,    30,    71,    -1,    -1,    -1,
+      -1,    -1,    -1,    78,    79,    80,    81,    82,    -1,    -1,
+      -1,    -1,    -1,    48,    -1,    50,    91,    92,    -1,    -1,
+      -1,    -1,    97,    -1,    -1,    -1,   101,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
+      -1,    41,    -1,    78,    79,    80,    81,    82,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    -1,    -1,
+      -1,    -1,    97,    63,    64,    -1,   101,    -1,    68,    69,
+      70,    -1,    72,    73,    74,    75,    76,    77,    -1,    46,
+      -1,    -1,    -1,    -1,    -1,    52,    -1,    -1,    -1,    -1,
+      90,    91,    92,    93,    94,    -1,    63,    64,    -1,    99,
+     100,    68,    69,    70,    -1,    72,    -1,    -1,    75,    76,
+      77,    -1,    46,    -1,    -1,    -1,    -1,    -1,    52,    -1,
+      -1,    -1,    -1,    90,    91,    92,    93,    94,    -1,    63,
+      64,    -1,    99,   100,    68,    69,    70,    -1,    72,    -1,
+      -1,    75,    76,    77,    -1,    46,    -1,    -1,    -1,    -1,
+      -1,    52,    -1,    -1,    -1,    -1,    90,    91,    92,    93,
+      94,    -1,    63,    64,    -1,    99,   100,    68,    69,    70,
+      -1,    72,    -1,    -1,    75,    76,    77,    -1,    46,    -1,
+      -1,    -1,    -1,    -1,    52,    -1,    -1,    -1,    -1,    90,
+      91,    92,    93,    94,    -1,    63,    64,    -1,    99,   100,
+      68,    69,    70,    -1,    72,    -1,    -1,    75,    76,    77,
+      -1,    46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    90,    91,    92,    93,    94,    -1,    63,    64,
+      -1,    99,   100,    68,    69,    70,    -1,    72,    -1,    -1,
+      75,    76,    77,    -1,    46,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    90,    91,    92,    93,    94,
+      -1,    63,    64,    -1,    99,   100,    68,    69,    70,    -1,
+      72,    -1,    -1,    75,    76,    77,    -1,    46,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,
+      92,    93,    94,    -1,    63,    64,    -1,    99,   100,    68,
+      69,    70,    -1,    72,    -1,    -1,    75,    76,    77,    -1,
+      46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    90,    91,    92,    93,    94,    -1,    63,    64,    -1,
+      99,   100,    68,    69,    70,    -1,    72,    -1,    -1,    75,
+      76,    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    52,
+      -1,    -1,    -1,    -1,    90,    91,    92,    93,    94,    -1,
+      63,    64,    -1,    99,   100,    68,    69,    70,    -1,    72,
+      -1,    -1,    75,    76,    77,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    52,    -1,    -1,    -1,    90,    91,    92,
+      93,    94,    -1,    96,    63,    64,    99,   100,    -1,    68,
+      69,    70,    -1,    72,    -1,    -1,    75,    76,    77,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,
+      89,    90,    91,    92,    93,    94,    -1,    63,    64,    -1,
+      99,   100,    68,    69,    70,    -1,    72,    -1,    -1,    75,
+      76,    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    90,    91,    92,    93,    94,    -1,
+      63,    64,    -1,    99,   100,    68,    69,    70,    -1,    72,
+      -1,    -1,    75,    76,    77,    -1,    -1,    -1,    -1,    -1,
+      83,    84,    -1,    -1,    -1,    -1,    -1,    90,    91,    92,
+      93,    94,    -1,    63,    64,    -1,    99,   100,    68,    69,
+      70,    -1,    72,    -1,    -1,    75,    76,    77,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
+      90,    91,    92,    93,    94,    -1,    63,    64,    98,    99,
+     100,    68,    69,    70,    -1,    72,    -1,    -1,    75,    76,
+      77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    90,    91,    92,    93,    94,    -1,    63,
+      64,    98,    99,   100,    68,    69,    70,    -1,    72,    -1,
+      -1,    75,    76,    77,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
+      94,    -1,    63,    64,    -1,    99,   100,    68,    69,    70,
+      -1,    72,    -1,    -1,    75,    76,    77,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,
+      91,    92,    93,    94,    -1,    -1,    -1,    -1,    99,   100
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1285,41 +1303,41 @@ static const yytype_int16 yycheck[] =
 static const yytype_uint8 yystos[] =
 {
        0,     1,    11,    12,    13,    14,    16,    17,    18,    19,
-      20,    22,    23,    24,    25,    26,    28,    30,    34,    36,
-      37,    38,    41,    46,    47,    48,    51,    55,    56,    57,
-      58,    60,    69,    76,    77,    78,    79,    80,    83,    84,
-      85,    86,    89,    90,    95,    99,   103,   105,   106,   107,
-     108,   109,   116,   117,   118,   123,   124,   125,   126,   130,
-     133,   135,   142,    94,   104,    25,    46,   125,   125,   125,
-      95,   125,   144,    25,   125,    95,   144,    95,   144,   134,
-      47,    25,   127,    35,    40,    42,    43,    44,    45,   125,
-     131,   132,    25,   125,    52,    53,    12,    13,    25,    25,
-      25,    25,   125,    59,   131,   132,    25,   129,   125,   125,
-     125,   125,   125,   125,    25,   128,    25,    95,   125,   125,
-     125,   125,   143,     0,   104,    95,    87,    95,   115,   125,
-     107,   125,    61,    62,    66,    67,    68,    70,    73,    74,
-      75,    88,    89,    90,    91,    92,    97,    98,    95,   125,
-     125,   144,   101,   143,   144,   125,   143,   143,   101,   125,
-     125,    42,   132,   136,    39,    71,    72,    25,    50,    87,
-     125,    50,    87,    49,   137,    52,   132,   101,    44,    50,
-      44,    50,    44,    50,    44,    50,    81,    82,   101,   138,
-      25,    96,   100,   101,   105,   115,   125,   115,   125,    49,
-      87,   121,    50,   104,   125,   125,   125,   125,   125,   125,
-     125,   125,   125,   125,   125,   125,   125,   125,   125,   125,
-      96,   125,    96,    96,    25,   125,   120,    25,   125,   125,
-     125,   125,    50,    87,   125,   125,   120,   125,    25,   125,
-     125,   125,   125,   125,   125,   125,   125,   125,   125,    25,
-     120,    96,   101,   125,    96,   121,    96,   104,   120,   125,
-     125,   122,    25,   140,   125,   125,   140,    44,    44,    44,
-      44,   139,   143,   122,    31,    50,   122,   107,   104,   108,
-     121,   101,   104,   104,   125,   125,   125,   125,   140,    96,
-     121,    50,   125,   121,   121,    29,    25,   101,   141,   141,
-     104,    29,   125,   121,    29,    54,   120,    33,    54,   112,
-     113,   119,    25,   122,   122,   141,   121,   122,   122,   111,
-     112,   114,   119,   120,   113,   121,   115,   122,   122,   121,
-     121,   114,   121,   115,   107,    54,   110,    49,    29,   121,
-      29,    29,    29,    49,   121,   120,   121,   120,    29,   120,
-     107,   108,   122,   121,   121
+      20,    22,    23,    24,    27,    28,    30,    32,    36,    38,
+      39,    40,    43,    48,    49,    50,    53,    57,    58,    59,
+      60,    62,    71,    78,    79,    80,    81,    82,    85,    86,
+      87,    88,    91,    92,    97,   101,   105,   107,   108,   109,
+     110,   111,   118,   119,   120,   125,   126,   127,   129,   133,
+     136,   138,   145,    96,   106,    27,    48,   127,   127,   127,
+      97,   127,   147,    27,   127,    97,   147,    97,   147,   137,
+      49,    27,   130,    37,    42,    44,    45,    46,    47,   127,
+     134,   135,    27,   127,    54,    55,    12,    13,    27,    27,
+      27,    27,   127,    61,   134,   135,    27,   132,   127,   127,
+     127,   127,   127,   127,    27,   131,    27,    97,   127,   127,
+     127,   127,   146,     0,   106,    97,    89,    97,   117,   127,
+     109,   127,    63,    64,    68,    69,    70,    72,    75,    76,
+      77,    90,    91,    92,    93,    94,    99,   100,    97,   127,
+     127,   147,   103,   146,   147,   127,   146,   146,   103,   127,
+     127,    44,   135,   139,    41,    73,    74,    27,    52,    89,
+     127,    52,    89,    51,   140,    54,   135,   103,    46,    52,
+      46,    52,    46,    52,    46,    52,    83,    84,   103,   141,
+      27,    98,   102,   103,   107,   117,   127,   117,   127,    51,
+      89,   123,    52,   106,   127,   127,   127,   127,   127,   127,
+     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
+      98,   127,    98,    98,    27,   127,   122,    26,    27,   128,
+     127,   127,   127,   127,    52,    89,   127,   127,   122,   127,
+      27,   127,   127,   127,   127,   127,   127,   127,   127,   127,
+     127,    27,   122,    98,   103,   127,    98,   123,    98,   106,
+     122,   127,   127,   124,    27,   143,   127,   127,   127,   143,
+      46,    46,    46,    46,   142,   146,   124,    33,    52,   124,
+     109,   106,   110,   123,   103,   106,   106,   127,   127,   127,
+     127,   143,    98,   123,    52,   127,   123,   123,    31,    27,
+     103,   144,   144,   106,    31,   127,   123,    31,    56,   122,
+      35,    56,   114,   115,   121,    27,   124,   124,   144,   123,
+     124,   124,   113,   114,   116,   121,   122,   115,   123,   117,
+     124,   124,   123,   123,   116,   123,   117,   109,    56,   112,
+      51,    31,   123,    31,    31,    31,    51,   123,   122,   123,
+     122,    31,   122,   109,   110,   124,   123,   123
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2158,16 +2176,23 @@ yyreduce:
 
   case 11:
 #line 140 "engines/director/lingo/lingo-gr.y"
-    { (yyval.code) = g_lingo->code1(g_lingo->c_after); ;}
+    {
+			g_lingo->code1(g_lingo->c_assign);
+			(yyval.code) = (yyvsp[(2) - (4)].code); ;}
     break;
 
   case 12:
-#line 141 "engines/director/lingo/lingo-gr.y"
-    { (yyval.code) = g_lingo->code1(g_lingo->c_before); ;}
+#line 143 "engines/director/lingo/lingo-gr.y"
+    { (yyval.code) = g_lingo->code1(g_lingo->c_after); ;}
     break;
 
   case 13:
-#line 142 "engines/director/lingo/lingo-gr.y"
+#line 144 "engines/director/lingo/lingo-gr.y"
+    { (yyval.code) = g_lingo->code1(g_lingo->c_before); ;}
+    break;
+
+  case 14:
+#line 145 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_varpush);
 		g_lingo->codeString((yyvsp[(2) - (4)].s)->c_str());
@@ -2176,8 +2201,8 @@ yyreduce:
 		delete (yyvsp[(2) - (4)].s); ;}
     break;
 
-  case 14:
-#line 148 "engines/director/lingo/lingo-gr.y"
+  case 15:
+#line 151 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(0); // Put dummy id
 		g_lingo->code1(g_lingo->c_theentityassign);
@@ -2188,8 +2213,8 @@ yyreduce:
 		(yyval.code) = (yyvsp[(4) - (4)].code); ;}
     break;
 
-  case 15:
-#line 156 "engines/director/lingo/lingo-gr.y"
+  case 16:
+#line 159 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_swap);
 		g_lingo->code1(g_lingo->c_theentityassign);
@@ -2200,8 +2225,8 @@ yyreduce:
 		(yyval.code) = (yyvsp[(5) - (5)].code); ;}
     break;
 
-  case 16:
-#line 164 "engines/director/lingo/lingo-gr.y"
+  case 17:
+#line 167 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_varpush);
 		g_lingo->codeString((yyvsp[(2) - (4)].s)->c_str());
@@ -2210,8 +2235,8 @@ yyreduce:
 		delete (yyvsp[(2) - (4)].s); ;}
     break;
 
-  case 17:
-#line 170 "engines/director/lingo/lingo-gr.y"
+  case 18:
+#line 173 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(0); // Put dummy id
 		g_lingo->code1(g_lingo->c_theentityassign);
@@ -2222,8 +2247,8 @@ yyreduce:
 		(yyval.code) = (yyvsp[(4) - (4)].code); ;}
     break;
 
-  case 18:
-#line 178 "engines/director/lingo/lingo-gr.y"
+  case 19:
+#line 181 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_swap);
 		g_lingo->code1(g_lingo->c_theentityassign);
@@ -2234,13 +2259,13 @@ yyreduce:
 		(yyval.code) = (yyvsp[(5) - (5)].code); ;}
     break;
 
-  case 19:
-#line 188 "engines/director/lingo/lingo-gr.y"
+  case 20:
+#line 191 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_xpop); ;}
     break;
 
-  case 23:
-#line 198 "engines/director/lingo/lingo-gr.y"
+  case 24:
+#line 201 "engines/director/lingo/lingo-gr.y"
     {
 		inst body = 0, end = 0;
 		WRITE_UINT32(&body, (yyvsp[(5) - (7)].code));
@@ -2251,8 +2276,8 @@ yyreduce:
 		checkEnd((yyvsp[(7) - (7)].s), "repeat", true); ;}
     break;
 
-  case 24:
-#line 211 "engines/director/lingo/lingo-gr.y"
+  case 25:
+#line 214 "engines/director/lingo/lingo-gr.y"
     {
 		inst init = 0, finish = 0, body = 0, end = 0, inc = 0;
 		WRITE_UINT32(&init, (yyvsp[(3) - (10)].code));
@@ -2269,8 +2294,8 @@ yyreduce:
 		checkEnd((yyvsp[(10) - (10)].s), "repeat", true); ;}
     break;
 
-  case 25:
-#line 229 "engines/director/lingo/lingo-gr.y"
+  case 26:
+#line 232 "engines/director/lingo/lingo-gr.y"
     {
 		inst init = 0, finish = 0, body = 0, end = 0, inc = 0;
 		WRITE_UINT32(&init, (yyvsp[(3) - (11)].code));
@@ -2287,8 +2312,8 @@ yyreduce:
 		checkEnd((yyvsp[(11) - (11)].s), "repeat", true); ;}
     break;
 
-  case 26:
-#line 243 "engines/director/lingo/lingo-gr.y"
+  case 27:
+#line 246 "engines/director/lingo/lingo-gr.y"
     {
 			inst end = 0;
 			WRITE_UINT32(&end, (yyvsp[(3) - (3)].code));
@@ -2297,22 +2322,22 @@ yyreduce:
 		;}
     break;
 
-  case 27:
-#line 249 "engines/director/lingo/lingo-gr.y"
+  case 28:
+#line 252 "engines/director/lingo/lingo-gr.y"
     {
 			warning("STUB: TELL is not implemented");
 			checkEnd((yyvsp[(6) - (6)].s), "tell", true); ;}
     break;
 
-  case 28:
-#line 252 "engines/director/lingo/lingo-gr.y"
+  case 29:
+#line 255 "engines/director/lingo/lingo-gr.y"
     {
 			warning("STUB: TELL is not implemented");
 		;}
     break;
 
-  case 29:
-#line 257 "engines/director/lingo/lingo-gr.y"
+  case 30:
+#line 260 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(5) - (7)].code));
@@ -2325,8 +2350,8 @@ yyreduce:
 		g_lingo->processIf(0, 0); ;}
     break;
 
-  case 30:
-#line 267 "engines/director/lingo/lingo-gr.y"
+  case 31:
+#line 270 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(5) - (10)].code));
@@ -2341,8 +2366,8 @@ yyreduce:
 		g_lingo->processIf(0, 0); ;}
     break;
 
-  case 31:
-#line 279 "engines/director/lingo/lingo-gr.y"
+  case 32:
+#line 282 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(5) - (10)].code));
@@ -2357,8 +2382,8 @@ yyreduce:
 		g_lingo->processIf(0, (yyvsp[(9) - (10)].code)); ;}
     break;
 
-  case 32:
-#line 291 "engines/director/lingo/lingo-gr.y"
+  case 33:
+#line 294 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (6)].code));
@@ -2371,8 +2396,8 @@ yyreduce:
 		g_lingo->processIf(0, 0); ;}
     break;
 
-  case 33:
-#line 301 "engines/director/lingo/lingo-gr.y"
+  case 34:
+#line 304 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (10)].code));
@@ -2385,8 +2410,8 @@ yyreduce:
 		g_lingo->processIf(0, 0); ;}
     break;
 
-  case 34:
-#line 311 "engines/director/lingo/lingo-gr.y"
+  case 35:
+#line 314 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0, else1 = 0, end = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (10)].code));
@@ -2399,18 +2424,18 @@ yyreduce:
 		g_lingo->processIf(0, (yyvsp[(10) - (10)].code)); ;}
     break;
 
-  case 35:
-#line 323 "engines/director/lingo/lingo-gr.y"
+  case 36:
+#line 326 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = 0; ;}
     break;
 
-  case 36:
-#line 324 "engines/director/lingo/lingo-gr.y"
+  case 37:
+#line 327 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (3)].code); ;}
     break;
 
-  case 41:
-#line 335 "engines/director/lingo/lingo-gr.y"
+  case 42:
+#line 338 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0;
 		WRITE_UINT32(&then, (yyvsp[(4) - (6)].code));
@@ -2419,8 +2444,8 @@ yyreduce:
 		g_lingo->codeLabel((yyvsp[(1) - (6)].code)); ;}
     break;
 
-  case 43:
-#line 344 "engines/director/lingo/lingo-gr.y"
+  case 44:
+#line 347 "engines/director/lingo/lingo-gr.y"
     {
 		inst then = 0;
 		WRITE_UINT32(&then, (yyvsp[(5) - (6)].code));
@@ -2429,23 +2454,23 @@ yyreduce:
 		g_lingo->codeLabel((yyvsp[(1) - (6)].code)); ;}
     break;
 
-  case 44:
-#line 352 "engines/director/lingo/lingo-gr.y"
+  case 45:
+#line 355 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(STOP); ;}
     break;
 
-  case 45:
-#line 353 "engines/director/lingo/lingo-gr.y"
+  case 46:
+#line 356 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code2(g_lingo->c_eq, STOP); ;}
     break;
 
-  case 47:
-#line 357 "engines/director/lingo/lingo-gr.y"
+  case 48:
+#line 360 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->code3(g_lingo->c_repeatwhilecode, STOP, STOP); ;}
     break;
 
-  case 48:
-#line 360 "engines/director/lingo/lingo-gr.y"
+  case 49:
+#line 363 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code3(g_lingo->c_repeatwithcode, STOP, STOP);
 		g_lingo->code3(STOP, STOP, STOP);
@@ -2453,8 +2478,8 @@ yyreduce:
 		delete (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 49:
-#line 367 "engines/director/lingo/lingo-gr.y"
+  case 50:
+#line 370 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_ifcode);
 		g_lingo->code3(STOP, STOP, STOP);
@@ -2462,8 +2487,8 @@ yyreduce:
 		g_lingo->codeLabel(0); ;}
     break;
 
-  case 50:
-#line 374 "engines/director/lingo/lingo-gr.y"
+  case 51:
+#line 377 "engines/director/lingo/lingo-gr.y"
     {
 		inst skipEnd;
 		WRITE_UINT32(&skipEnd, 1); // We have to skip end to avoid multiple executions
@@ -2472,23 +2497,23 @@ yyreduce:
 		g_lingo->code1(skipEnd); ;}
     break;
 
-  case 51:
-#line 382 "engines/director/lingo/lingo-gr.y"
-    { (yyval.code) = g_lingo->_currentScript->size(); ;}
-    break;
-
   case 52:
 #line 385 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); ;}
+    { (yyval.code) = g_lingo->_currentScript->size(); ;}
     break;
 
   case 53:
 #line 388 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); ;}
+    break;
+
+  case 54:
+#line 391 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->_currentScript->size(); ;}
     break;
 
-  case 56:
-#line 393 "engines/director/lingo/lingo-gr.y"
+  case 57:
+#line 396 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_whencode);
 		g_lingo->code1(STOP);
@@ -2496,80 +2521,80 @@ yyreduce:
 		delete (yyvsp[(2) - (3)].s); ;}
     break;
 
-  case 57:
-#line 399 "engines/director/lingo/lingo-gr.y"
+  case 58:
+#line 402 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_tellcode);
 		g_lingo->code1(STOP); ;}
     break;
 
-  case 58:
-#line 403 "engines/director/lingo/lingo-gr.y"
+  case 59:
+#line 406 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->codeConst((yyvsp[(1) - (1)].i)); ;}
     break;
 
-  case 59:
-#line 404 "engines/director/lingo/lingo-gr.y"
+  case 60:
+#line 407 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_fconstpush);
 		g_lingo->codeFloat((yyvsp[(1) - (1)].f)); ;}
     break;
 
-  case 60:
-#line 407 "engines/director/lingo/lingo-gr.y"
+  case 61:
+#line 410 "engines/director/lingo/lingo-gr.y"
     {											// D3
 		(yyval.code) = g_lingo->code1(g_lingo->c_symbolpush);
 		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); ;}
     break;
 
-  case 61:
-#line 410 "engines/director/lingo/lingo-gr.y"
+  case 62:
+#line 413 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_stringpush);
 		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); ;}
     break;
 
-  case 62:
-#line 413 "engines/director/lingo/lingo-gr.y"
+  case 63:
+#line 416 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeFunc((yyvsp[(1) - (1)].s), 0);
 		delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 63:
-#line 416 "engines/director/lingo/lingo-gr.y"
+  case 64:
+#line 419 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeFunc((yyvsp[(1) - (2)].s), 1);
 		delete (yyvsp[(1) - (2)].s); ;}
     break;
 
-  case 64:
-#line 419 "engines/director/lingo/lingo-gr.y"
+  case 65:
+#line 422 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeFunc((yyvsp[(1) - (2)].s), (yyvsp[(2) - (2)].narg)); ;}
     break;
 
-  case 65:
-#line 420 "engines/director/lingo/lingo-gr.y"
+  case 66:
+#line 423 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeFunc((yyvsp[(1) - (4)].s), (yyvsp[(3) - (4)].narg)); ;}
     break;
 
-  case 66:
-#line 421 "engines/director/lingo/lingo-gr.y"
+  case 67:
+#line 424 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->codeFunc((yyvsp[(1) - (4)].s), (yyvsp[(3) - (4)].narg));
 		delete (yyvsp[(1) - (4)].s); ;}
     break;
 
-  case 67:
-#line 424 "engines/director/lingo/lingo-gr.y"
+  case 68:
+#line 427 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_eval);
 		g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str());
 		delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 68:
-#line 428 "engines/director/lingo/lingo-gr.y"
+  case 69:
+#line 431 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->codeConst(0); // Put dummy id
 		g_lingo->code1(g_lingo->c_theentitypush);
@@ -2579,8 +2604,8 @@ yyreduce:
 		g_lingo->code2(e, f); ;}
     break;
 
-  case 69:
-#line 435 "engines/director/lingo/lingo-gr.y"
+  case 70:
+#line 438 "engines/director/lingo/lingo-gr.y"
     {
 		(yyval.code) = g_lingo->code1(g_lingo->c_theentitypush);
 		inst e = 0, f = 0;
@@ -2589,352 +2614,359 @@ yyreduce:
 		g_lingo->code2(e, f); ;}
     break;
 
-  case 71:
-#line 442 "engines/director/lingo/lingo-gr.y"
+  case 72:
+#line 445 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_add); ;}
     break;
 
-  case 72:
-#line 443 "engines/director/lingo/lingo-gr.y"
+  case 73:
+#line 446 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_sub); ;}
     break;
 
-  case 73:
-#line 444 "engines/director/lingo/lingo-gr.y"
+  case 74:
+#line 447 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_mul); ;}
     break;
 
-  case 74:
-#line 445 "engines/director/lingo/lingo-gr.y"
+  case 75:
+#line 448 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_div); ;}
     break;
 
-  case 75:
-#line 446 "engines/director/lingo/lingo-gr.y"
+  case 76:
+#line 449 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_mod); ;}
     break;
 
-  case 76:
-#line 447 "engines/director/lingo/lingo-gr.y"
+  case 77:
+#line 450 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gt); ;}
     break;
 
-  case 77:
-#line 448 "engines/director/lingo/lingo-gr.y"
+  case 78:
+#line 451 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_lt); ;}
     break;
 
-  case 78:
-#line 449 "engines/director/lingo/lingo-gr.y"
+  case 79:
+#line 452 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_neq); ;}
     break;
 
-  case 79:
-#line 450 "engines/director/lingo/lingo-gr.y"
+  case 80:
+#line 453 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_ge); ;}
     break;
 
-  case 80:
-#line 451 "engines/director/lingo/lingo-gr.y"
+  case 81:
+#line 454 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_le); ;}
     break;
 
-  case 81:
-#line 452 "engines/director/lingo/lingo-gr.y"
+  case 82:
+#line 455 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_and); ;}
     break;
 
-  case 82:
-#line 453 "engines/director/lingo/lingo-gr.y"
+  case 83:
+#line 456 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_or); ;}
     break;
 
-  case 83:
-#line 454 "engines/director/lingo/lingo-gr.y"
+  case 84:
+#line 457 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_not); ;}
     break;
 
-  case 84:
-#line 455 "engines/director/lingo/lingo-gr.y"
+  case 85:
+#line 458 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_ampersand); ;}
     break;
 
-  case 85:
-#line 456 "engines/director/lingo/lingo-gr.y"
+  case 86:
+#line 459 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_concat); ;}
     break;
 
-  case 86:
-#line 457 "engines/director/lingo/lingo-gr.y"
+  case 87:
+#line 460 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_contains); ;}
     break;
 
-  case 87:
-#line 458 "engines/director/lingo/lingo-gr.y"
+  case 88:
+#line 461 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_starts); ;}
     break;
 
-  case 88:
-#line 459 "engines/director/lingo/lingo-gr.y"
+  case 89:
+#line 462 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (2)].code); ;}
     break;
 
-  case 89:
-#line 460 "engines/director/lingo/lingo-gr.y"
+  case 90:
+#line 463 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (2)].code); g_lingo->code1(g_lingo->c_negate); ;}
     break;
 
-  case 90:
-#line 461 "engines/director/lingo/lingo-gr.y"
+  case 91:
+#line 464 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = (yyvsp[(2) - (3)].code); ;}
     break;
 
-  case 91:
-#line 462 "engines/director/lingo/lingo-gr.y"
+  case 92:
+#line 465 "engines/director/lingo/lingo-gr.y"
     { (yyval.code) = g_lingo->codeArray((yyvsp[(2) - (3)].narg)); ;}
     break;
 
-  case 92:
-#line 463 "engines/director/lingo/lingo-gr.y"
+  case 93:
+#line 466 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_intersects); ;}
     break;
 
-  case 93:
-#line 464 "engines/director/lingo/lingo-gr.y"
+  case 94:
+#line 467 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_within); ;}
     break;
 
-  case 94:
-#line 465 "engines/director/lingo/lingo-gr.y"
+  case 95:
+#line 468 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_charOf); ;}
     break;
 
-  case 95:
-#line 466 "engines/director/lingo/lingo-gr.y"
+  case 96:
+#line 469 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_charToOf); ;}
     break;
 
-  case 96:
-#line 467 "engines/director/lingo/lingo-gr.y"
+  case 97:
+#line 470 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_itemOf); ;}
     break;
 
-  case 97:
-#line 468 "engines/director/lingo/lingo-gr.y"
+  case 98:
+#line 471 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_itemToOf); ;}
     break;
 
-  case 98:
-#line 469 "engines/director/lingo/lingo-gr.y"
+  case 99:
+#line 472 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_lineOf); ;}
     break;
 
-  case 99:
-#line 470 "engines/director/lingo/lingo-gr.y"
+  case 100:
+#line 473 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_lineToOf); ;}
     break;
 
-  case 100:
-#line 471 "engines/director/lingo/lingo-gr.y"
+  case 101:
+#line 474 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_wordOf); ;}
     break;
 
-  case 101:
-#line 472 "engines/director/lingo/lingo-gr.y"
+  case 102:
+#line 475 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_wordToOf); ;}
     break;
 
-  case 102:
-#line 475 "engines/director/lingo/lingo-gr.y"
+  case 103:
+#line 478 "engines/director/lingo/lingo-gr.y"
+    {
+		g_lingo->codeFunc((yyvsp[(1) - (2)].s), 1);
+		delete (yyvsp[(1) - (2)].s); ;}
+    break;
+
+  case 104:
+#line 483 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_printtop); ;}
     break;
 
-  case 105:
-#line 478 "engines/director/lingo/lingo-gr.y"
+  case 107:
+#line 486 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_exitRepeat); ;}
     break;
 
-  case 106:
-#line 479 "engines/director/lingo/lingo-gr.y"
+  case 108:
+#line 487 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeConst(0); // Push fake value on stack
 							  g_lingo->code1(g_lingo->c_procret); ;}
     break;
 
-  case 110:
-#line 484 "engines/director/lingo/lingo-gr.y"
+  case 112:
+#line 492 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeFunc((yyvsp[(1) - (1)].s), 0);
 		delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 111:
-#line 487 "engines/director/lingo/lingo-gr.y"
+  case 113:
+#line 495 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeFunc((yyvsp[(1) - (2)].s), 1);
 		delete (yyvsp[(1) - (2)].s); ;}
     break;
 
-  case 112:
-#line 490 "engines/director/lingo/lingo-gr.y"
+  case 114:
+#line 498 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeFunc((yyvsp[(1) - (2)].s), 1);
 		delete (yyvsp[(1) - (2)].s); ;}
     break;
 
-  case 113:
-#line 493 "engines/director/lingo/lingo-gr.y"
+  case 115:
+#line 501 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_voidpush);
 		g_lingo->codeFunc((yyvsp[(1) - (1)].s), 1);
 		delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 114:
-#line 497 "engines/director/lingo/lingo-gr.y"
+  case 116:
+#line 505 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeFunc((yyvsp[(1) - (2)].s), (yyvsp[(2) - (2)].narg)); ;}
     break;
 
-  case 115:
-#line 498 "engines/director/lingo/lingo-gr.y"
+  case 117:
+#line 506 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeFunc((yyvsp[(1) - (4)].s), (yyvsp[(3) - (4)].narg)); ;}
     break;
 
-  case 116:
-#line 499 "engines/director/lingo/lingo-gr.y"
+  case 118:
+#line 507 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeMe((yyvsp[(3) - (4)].s), 0); ;}
     break;
 
-  case 117:
-#line 500 "engines/director/lingo/lingo-gr.y"
+  case 119:
+#line 508 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeMe((yyvsp[(3) - (6)].s), (yyvsp[(5) - (6)].narg)); ;}
     break;
 
-  case 118:
-#line 501 "engines/director/lingo/lingo-gr.y"
+  case 120:
+#line 509 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_open); ;}
     break;
 
-  case 119:
-#line 502 "engines/director/lingo/lingo-gr.y"
+  case 121:
+#line 510 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code2(g_lingo->c_voidpush, g_lingo->c_open); ;}
     break;
 
-  case 120:
-#line 503 "engines/director/lingo/lingo-gr.y"
+  case 122:
+#line 511 "engines/director/lingo/lingo-gr.y"
     { Common::String s(*(yyvsp[(1) - (3)].s)); s += '-'; s += *(yyvsp[(2) - (3)].s); g_lingo->codeFunc(&s, (yyvsp[(3) - (3)].narg)); ;}
     break;
 
-  case 121:
-#line 506 "engines/director/lingo/lingo-gr.y"
+  case 123:
+#line 514 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 122:
-#line 507 "engines/director/lingo/lingo-gr.y"
+  case 124:
+#line 515 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 123:
-#line 510 "engines/director/lingo/lingo-gr.y"
+  case 125:
+#line 518 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_property); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 124:
-#line 511 "engines/director/lingo/lingo-gr.y"
+  case 126:
+#line 519 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_property); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 125:
-#line 514 "engines/director/lingo/lingo-gr.y"
+  case 127:
+#line 522 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 126:
-#line 515 "engines/director/lingo/lingo-gr.y"
+  case 128:
+#line 523 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
     break;
 
-  case 127:
-#line 526 "engines/director/lingo/lingo-gr.y"
+  case 129:
+#line 534 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gotoloop); ;}
     break;
 
-  case 128:
-#line 527 "engines/director/lingo/lingo-gr.y"
+  case 130:
+#line 535 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gotonext); ;}
     break;
 
-  case 129:
-#line 528 "engines/director/lingo/lingo-gr.y"
+  case 131:
+#line 536 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_gotoprevious); ;}
     break;
 
-  case 130:
-#line 529 "engines/director/lingo/lingo-gr.y"
+  case 132:
+#line 537 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(1);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 131:
-#line 532 "engines/director/lingo/lingo-gr.y"
+  case 133:
+#line 540 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(3);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 132:
-#line 535 "engines/director/lingo/lingo-gr.y"
+  case 134:
+#line 543 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(2);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 137:
-#line 548 "engines/director/lingo/lingo-gr.y"
+  case 139:
+#line 556 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_playdone); ;}
     break;
 
-  case 138:
-#line 549 "engines/director/lingo/lingo-gr.y"
+  case 140:
+#line 557 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(1);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 139:
-#line 552 "engines/director/lingo/lingo-gr.y"
+  case 141:
+#line 560 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(3);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 140:
-#line 555 "engines/director/lingo/lingo-gr.y"
+  case 142:
+#line 563 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(2);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 141:
-#line 558 "engines/director/lingo/lingo-gr.y"
+  case 143:
+#line 566 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeSetImmediate(true); ;}
     break;
 
-  case 142:
-#line 558 "engines/director/lingo/lingo-gr.y"
+  case 144:
+#line 566 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeFunc((yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].narg)); ;}
     break;
 
-  case 143:
-#line 588 "engines/director/lingo/lingo-gr.y"
+  case 145:
+#line 596 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 144:
-#line 589 "engines/director/lingo/lingo-gr.y"
+  case 146:
+#line 597 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeConst(0); // Push fake value on stack
 			g_lingo->code1(g_lingo->c_procret);
@@ -2942,38 +2974,38 @@ yyreduce:
 			g_lingo->_indef = false; ;}
     break;
 
-  case 145:
-#line 594 "engines/director/lingo/lingo-gr.y"
+  case 147:
+#line 602 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeFactory(*(yyvsp[(2) - (2)].s));
 		;}
     break;
 
-  case 146:
-#line 597 "engines/director/lingo/lingo-gr.y"
+  case 148:
+#line 605 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; ;}
     break;
 
-  case 147:
-#line 598 "engines/director/lingo/lingo-gr.y"
+  case 149:
+#line 606 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->code1(g_lingo->c_procret);
 			g_lingo->define(*(yyvsp[(2) - (8)].s), (yyvsp[(4) - (8)].code), (yyvsp[(5) - (8)].narg) + 1, &g_lingo->_currentFactory);
 			g_lingo->_indef = false; ;}
     break;
 
-  case 148:
-#line 602 "engines/director/lingo/lingo-gr.y"
+  case 150:
+#line 610 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 149:
-#line 603 "engines/director/lingo/lingo-gr.y"
+  case 151:
+#line 611 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_ignoreMe = true; ;}
     break;
 
-  case 150:
-#line 603 "engines/director/lingo/lingo-gr.y"
+  case 152:
+#line 611 "engines/director/lingo/lingo-gr.y"
     {
 				g_lingo->codeConst(0); // Push fake value on stack
 				g_lingo->code1(g_lingo->c_procret);
@@ -2985,33 +3017,33 @@ yyreduce:
 			;}
     break;
 
-  case 151:
-#line 613 "engines/director/lingo/lingo-gr.y"
+  case 153:
+#line 621 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
-  case 152:
-#line 614 "engines/director/lingo/lingo-gr.y"
+  case 154:
+#line 622 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;}
     break;
 
-  case 153:
-#line 615 "engines/director/lingo/lingo-gr.y"
+  case 155:
+#line 623 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
-  case 154:
-#line 616 "engines/director/lingo/lingo-gr.y"
+  case 156:
+#line 624 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;}
     break;
 
-  case 155:
-#line 619 "engines/director/lingo/lingo-gr.y"
+  case 157:
+#line 627 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArgStore(); ;}
     break;
 
-  case 156:
-#line 623 "engines/director/lingo/lingo-gr.y"
+  case 158:
+#line 631 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_call);
 		g_lingo->codeString((yyvsp[(1) - (2)].s)->c_str());
@@ -3020,34 +3052,34 @@ yyreduce:
 		g_lingo->code1(numpar); ;}
     break;
 
-  case 157:
-#line 631 "engines/director/lingo/lingo-gr.y"
+  case 159:
+#line 639 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
-  case 158:
-#line 632 "engines/director/lingo/lingo-gr.y"
+  case 160:
+#line 640 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 1; ;}
     break;
 
-  case 159:
-#line 633 "engines/director/lingo/lingo-gr.y"
+  case 161:
+#line 641 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
-  case 160:
-#line 636 "engines/director/lingo/lingo-gr.y"
+  case 162:
+#line 644 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 1; ;}
     break;
 
-  case 161:
-#line 637 "engines/director/lingo/lingo-gr.y"
+  case 163:
+#line 645 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 3051 "engines/director/lingo/lingo-gr.cpp"
+#line 3083 "engines/director/lingo/lingo-gr.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -3261,6 +3293,6 @@ yyreturn:
 }
 
 
-#line 640 "engines/director/lingo/lingo-gr.y"
+#line 648 "engines/director/lingo/lingo-gr.y"
 
 
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 0bd7595..054d55a 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -61,68 +61,70 @@
      FBLTINNOARGS = 277,
      FBLTINONEARG = 278,
      FBLTINARGLIST = 279,
-     ID = 280,
-     STRING = 281,
-     HANDLER = 282,
-     SYMBOL = 283,
-     ENDCLAUSE = 284,
-     tPLAYACCEL = 285,
-     tDOWN = 286,
-     tELSE = 287,
-     tNLELSIF = 288,
-     tEXIT = 289,
-     tFRAME = 290,
-     tGLOBAL = 291,
-     tGO = 292,
-     tIF = 293,
-     tINTO = 294,
-     tLOOP = 295,
-     tMACRO = 296,
-     tMOVIE = 297,
-     tNEXT = 298,
-     tOF = 299,
-     tPREVIOUS = 300,
-     tPUT = 301,
-     tREPEAT = 302,
-     tSET = 303,
-     tTHEN = 304,
-     tTO = 305,
-     tWHEN = 306,
-     tWITH = 307,
-     tWHILE = 308,
-     tNLELSE = 309,
-     tFACTORY = 310,
-     tMETHOD = 311,
-     tOPEN = 312,
-     tPLAY = 313,
-     tDONE = 314,
-     tINSTANCE = 315,
-     tGE = 316,
-     tLE = 317,
-     tGT = 318,
-     tLT = 319,
-     tEQ = 320,
-     tNEQ = 321,
-     tAND = 322,
-     tOR = 323,
-     tNOT = 324,
-     tMOD = 325,
-     tAFTER = 326,
-     tBEFORE = 327,
-     tCONCAT = 328,
-     tCONTAINS = 329,
-     tSTARTS = 330,
-     tCHAR = 331,
-     tITEM = 332,
-     tLINE = 333,
-     tWORD = 334,
-     tSPRITE = 335,
-     tINTERSECTS = 336,
-     tWITHIN = 337,
-     tTELL = 338,
-     tPROPERTY = 339,
-     tON = 340,
-     tME = 341
+     RBLTIN = 280,
+     RBLTINONEARG = 281,
+     ID = 282,
+     STRING = 283,
+     HANDLER = 284,
+     SYMBOL = 285,
+     ENDCLAUSE = 286,
+     tPLAYACCEL = 287,
+     tDOWN = 288,
+     tELSE = 289,
+     tNLELSIF = 290,
+     tEXIT = 291,
+     tFRAME = 292,
+     tGLOBAL = 293,
+     tGO = 294,
+     tIF = 295,
+     tINTO = 296,
+     tLOOP = 297,
+     tMACRO = 298,
+     tMOVIE = 299,
+     tNEXT = 300,
+     tOF = 301,
+     tPREVIOUS = 302,
+     tPUT = 303,
+     tREPEAT = 304,
+     tSET = 305,
+     tTHEN = 306,
+     tTO = 307,
+     tWHEN = 308,
+     tWITH = 309,
+     tWHILE = 310,
+     tNLELSE = 311,
+     tFACTORY = 312,
+     tMETHOD = 313,
+     tOPEN = 314,
+     tPLAY = 315,
+     tDONE = 316,
+     tINSTANCE = 317,
+     tGE = 318,
+     tLE = 319,
+     tGT = 320,
+     tLT = 321,
+     tEQ = 322,
+     tNEQ = 323,
+     tAND = 324,
+     tOR = 325,
+     tNOT = 326,
+     tMOD = 327,
+     tAFTER = 328,
+     tBEFORE = 329,
+     tCONCAT = 330,
+     tCONTAINS = 331,
+     tSTARTS = 332,
+     tCHAR = 333,
+     tITEM = 334,
+     tLINE = 335,
+     tWORD = 336,
+     tSPRITE = 337,
+     tINTERSECTS = 338,
+     tWITHIN = 339,
+     tTELL = 340,
+     tPROPERTY = 341,
+     tON = 342,
+     tME = 343
    };
 #endif
 /* Tokens.  */
@@ -148,68 +150,70 @@
 #define FBLTINNOARGS 277
 #define FBLTINONEARG 278
 #define FBLTINARGLIST 279
-#define ID 280
-#define STRING 281
-#define HANDLER 282
-#define SYMBOL 283
-#define ENDCLAUSE 284
-#define tPLAYACCEL 285
-#define tDOWN 286
-#define tELSE 287
-#define tNLELSIF 288
-#define tEXIT 289
-#define tFRAME 290
-#define tGLOBAL 291
-#define tGO 292
-#define tIF 293
-#define tINTO 294
-#define tLOOP 295
-#define tMACRO 296
-#define tMOVIE 297
-#define tNEXT 298
-#define tOF 299
-#define tPREVIOUS 300
-#define tPUT 301
-#define tREPEAT 302
-#define tSET 303
-#define tTHEN 304
-#define tTO 305
-#define tWHEN 306
-#define tWITH 307
-#define tWHILE 308
-#define tNLELSE 309
-#define tFACTORY 310
-#define tMETHOD 311
-#define tOPEN 312
-#define tPLAY 313
-#define tDONE 314
-#define tINSTANCE 315
-#define tGE 316
-#define tLE 317
-#define tGT 318
-#define tLT 319
-#define tEQ 320
-#define tNEQ 321
-#define tAND 322
-#define tOR 323
-#define tNOT 324
-#define tMOD 325
-#define tAFTER 326
-#define tBEFORE 327
-#define tCONCAT 328
-#define tCONTAINS 329
-#define tSTARTS 330
-#define tCHAR 331
-#define tITEM 332
-#define tLINE 333
-#define tWORD 334
-#define tSPRITE 335
-#define tINTERSECTS 336
-#define tWITHIN 337
-#define tTELL 338
-#define tPROPERTY 339
-#define tON 340
-#define tME 341
+#define RBLTIN 280
+#define RBLTINONEARG 281
+#define ID 282
+#define STRING 283
+#define HANDLER 284
+#define SYMBOL 285
+#define ENDCLAUSE 286
+#define tPLAYACCEL 287
+#define tDOWN 288
+#define tELSE 289
+#define tNLELSIF 290
+#define tEXIT 291
+#define tFRAME 292
+#define tGLOBAL 293
+#define tGO 294
+#define tIF 295
+#define tINTO 296
+#define tLOOP 297
+#define tMACRO 298
+#define tMOVIE 299
+#define tNEXT 300
+#define tOF 301
+#define tPREVIOUS 302
+#define tPUT 303
+#define tREPEAT 304
+#define tSET 305
+#define tTHEN 306
+#define tTO 307
+#define tWHEN 308
+#define tWITH 309
+#define tWHILE 310
+#define tNLELSE 311
+#define tFACTORY 312
+#define tMETHOD 313
+#define tOPEN 314
+#define tPLAY 315
+#define tDONE 316
+#define tINSTANCE 317
+#define tGE 318
+#define tLE 319
+#define tGT 320
+#define tLT 321
+#define tEQ 322
+#define tNEQ 323
+#define tAND 324
+#define tOR 325
+#define tNOT 326
+#define tMOD 327
+#define tAFTER 328
+#define tBEFORE 329
+#define tCONCAT 330
+#define tCONTAINS 331
+#define tSTARTS 332
+#define tCHAR 333
+#define tITEM 334
+#define tLINE 335
+#define tWORD 336
+#define tSPRITE 337
+#define tINTERSECTS 338
+#define tWITHIN 339
+#define tTELL 340
+#define tPROPERTY 341
+#define tON 342
+#define tME 343
 
 
 
@@ -227,7 +231,7 @@ typedef union YYSTYPE
 	Common::Array<double> *arr;
 }
 /* Line 1529 of yacc.c.  */
-#line 231 "engines/director/lingo/lingo-gr.hpp"
+#line 235 "engines/director/lingo/lingo-gr.hpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 1e3c721..4bbbbcd 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -92,7 +92,7 @@ void checkEnd(Common::String *token, const char *expect, bool required) {
 %token<e> THEENTITY THEENTITYWITHID
 %token<f> FLOAT
 %token<s> BLTIN BLTINNOARGS BLTINNOARGSORONE BLTINONEARG BLTINARGLIST TWOWORDBUILTIN
-%token<s> FBLTIN FBLTINNOARGS FBLTINONEARG FBLTINARGLIST
+%token<s> FBLTIN FBLTINNOARGS FBLTINONEARG FBLTINARGLIST RBLTIN RBLTINONEARG
 %token<s> ID STRING HANDLER SYMBOL
 %token<s> ENDCLAUSE tPLAYACCEL
 %token tDOWN tELSE tNLELSIF tEXIT tFRAME tGLOBAL tGO tIF tINTO tLOOP tMACRO
@@ -137,6 +137,9 @@ asgn: tPUT expr tINTO ID 		{
 		g_lingo->code1(g_lingo->c_assign);
 		$$ = $2;
 		delete $4; }
+	| tPUT expr tINTO reference 		{
+			g_lingo->code1(g_lingo->c_assign);
+			$$ = $2; }
 	| tPUT expr tAFTER expr 		{ $$ = g_lingo->code1(g_lingo->c_after); }		// D3
 	| tPUT expr tBEFORE expr 		{ $$ = g_lingo->code1(g_lingo->c_before); }		// D3
 	| tSET ID '=' expr			{
@@ -472,6 +475,11 @@ expr: INT		{ $$ = g_lingo->codeConst($1); }
 	| tWORD expr tTO expr tOF expr		{ g_lingo->code1(g_lingo->c_wordToOf); }
 	;
 
+reference: 	RBLTINONEARG expr		{
+		g_lingo->codeFunc($1, 1);
+		delete $1; }
+	;
+
 proc: tPUT expr				{ g_lingo->code1(g_lingo->c_printtop); }
 	| gotofunc
 	| playfunc
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index 54e6294..995faf6 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -1504,7 +1504,13 @@ YY_RULE_SETUP
 
 		if (g_lingo->_builtins.contains(yytext)) {
 			int type = g_lingo->_builtins[yytext]->type;
-			if ((type == BLTIN || type == FBLTIN) && g_lingo->_builtins[yytext]->parens == false) {
+			if ((type == BLTIN || type == FBLTIN || type == RBLTIN) && g_lingo->_builtins[yytext]->parens == false) {
+				if (type == RBLTIN) {
+					if (g_lingo->_builtins[yytext]->nargs != 1 || g_lingo->_builtins[yytext]->maxArgs != 1)
+						error("Incorrectly set RBLTIN %s", yytext);
+
+					return RBLTINONEARG;
+				}
 				if (g_lingo->_builtins[yytext]->nargs == 0) {
 					if (g_lingo->_builtins[yytext]->maxArgs == 0)
 						return type == BLTIN ? BLTINNOARGS : FBLTINNOARGS;
@@ -1528,41 +1534,41 @@ YY_RULE_SETUP
 	YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 305 "engines/director/lingo/lingo-lex.l"
+#line 311 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.f = atof(yytext); return FLOAT; }
 	YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 306 "engines/director/lingo/lingo-lex.l"
+#line 312 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 307 "engines/director/lingo/lingo-lex.l"
+#line 313 "engines/director/lingo/lingo-lex.l"
 { count(); return *yytext; }
 	YY_BREAK
 case 69:
 /* rule 69 can match eol */
 YY_RULE_SETUP
-#line 308 "engines/director/lingo/lingo-lex.l"
+#line 314 "engines/director/lingo/lingo-lex.l"
 { return '\n'; }
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 309 "engines/director/lingo/lingo-lex.l"
+#line 315 "engines/director/lingo/lingo-lex.l"
 { count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 310 "engines/director/lingo/lingo-lex.l"
+#line 316 "engines/director/lingo/lingo-lex.l"
 { count(); }
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 312 "engines/director/lingo/lingo-lex.l"
+#line 318 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1566 "engines/director/lingo/lingo-lex.cpp"
+#line 1572 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -2525,7 +2531,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 312 "engines/director/lingo/lingo-lex.l"
+#line 318 "engines/director/lingo/lingo-lex.l"
 
 
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index b69e3d0..0f6dd58 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -281,7 +281,13 @@ whitespace [\t ]
 
 		if (g_lingo->_builtins.contains(yytext)) {
 			int type = g_lingo->_builtins[yytext]->type;
-			if ((type == BLTIN || type == FBLTIN) && g_lingo->_builtins[yytext]->parens == false) {
+			if ((type == BLTIN || type == FBLTIN || type == RBLTIN) && g_lingo->_builtins[yytext]->parens == false) {
+				if (type == RBLTIN) {
+					if (g_lingo->_builtins[yytext]->nargs != 1 || g_lingo->_builtins[yytext]->maxArgs != 1)
+						error("Incorrectly set RBLTIN %s", yytext);
+
+					return RBLTINONEARG;
+				}
 				if (g_lingo->_builtins[yytext]->nargs == 0) {
 					if (g_lingo->_builtins[yytext]->maxArgs == 0)
 						return type == BLTIN ? BLTINNOARGS : FBLTINNOARGS;


Commit: ed1d606e9f25cfe3313079a5627a6c08c91f47dd
    https://github.com/scummvm/scummvm/commit/ed1d606e9f25cfe3313079a5627a6c08c91f47dd
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-02-12T11:35:50+01:00

Commit Message:
DIRECTOR: Lingo: Implemented stub for REFERENCE built-ins

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


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index ecf7fe2..be0a191 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -1493,11 +1493,23 @@ void Lingo::factoryCall(Common::String &name, int nargs) {
 // References
 ///////////////////
 void Lingo::b_cast(int nargs) {
+	Datum d = g_lingo->pop();
+
 	warning("STUB: b_cast");
+
+	d.type = REFERENCE;
+
+	g_lingo->push(d);
 }
 
 void Lingo::b_field(int nargs) {
+	Datum d = g_lingo->pop();
+
 	warning("STUB: b_field");
+
+	d.type = REFERENCE;
+
+	g_lingo->push(d);
 }
 
 void Lingo::b_me(int nargs) {
@@ -1507,13 +1519,23 @@ void Lingo::b_me(int nargs) {
 }
 
 void Lingo::b_script(int nargs) {
+	Datum d = g_lingo->pop();
+
 	warning("STUB: b_script");
+
+	d.type = REFERENCE;
+
+	g_lingo->push(d);
 }
 
 void Lingo::b_window(int nargs) {
-	g_lingo->printSTUBWithArglist("b_window", nargs);
-	g_lingo->dropStack(nargs);
-	g_lingo->push(Datum(0));
+	Datum d = g_lingo->pop();
+
+	warning("STUB: b_window");
+
+	d.type = REFERENCE;
+
+	g_lingo->push(d);
 }
 
 
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 87cf6da..eeae053 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -299,11 +299,18 @@ void Lingo::c_assign() {
 	d1 = g_lingo->pop();
 	d2 = g_lingo->pop();
 
-	if (d1.type != VAR) {
+	if (d1.type != VAR && d1.type != REFERENCE) {
 		warning("assignment to non-variable");
 		return;
 	}
 
+	if (d1.type == REFERENCE) {
+		warning("STUB: c_assing REFERENCE");
+
+		g_lingo->push(d1);
+		return;
+	}
+
 	if (d1.u.sym->type != INT && d1.u.sym->type != VOID &&
 			d1.u.sym->type != FLOAT && d1.u.sym->type != STRING) {
 		warning("assignment to non-variable '%s'", d1.u.sym->name.c_str());
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 2406a87..8d1e848 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -74,84 +74,85 @@
      RECT = 263,
      ARRAY = 264,
      OBJECT = 265,
-     INT = 266,
-     THEENTITY = 267,
-     THEENTITYWITHID = 268,
-     FLOAT = 269,
-     BLTIN = 270,
-     BLTINNOARGS = 271,
-     BLTINNOARGSORONE = 272,
-     BLTINONEARG = 273,
-     BLTINARGLIST = 274,
-     TWOWORDBUILTIN = 275,
-     FBLTIN = 276,
-     FBLTINNOARGS = 277,
-     FBLTINONEARG = 278,
-     FBLTINARGLIST = 279,
-     RBLTIN = 280,
-     RBLTINONEARG = 281,
-     ID = 282,
-     STRING = 283,
-     HANDLER = 284,
-     SYMBOL = 285,
-     ENDCLAUSE = 286,
-     tPLAYACCEL = 287,
-     tDOWN = 288,
-     tELSE = 289,
-     tNLELSIF = 290,
-     tEXIT = 291,
-     tFRAME = 292,
-     tGLOBAL = 293,
-     tGO = 294,
-     tIF = 295,
-     tINTO = 296,
-     tLOOP = 297,
-     tMACRO = 298,
-     tMOVIE = 299,
-     tNEXT = 300,
-     tOF = 301,
-     tPREVIOUS = 302,
-     tPUT = 303,
-     tREPEAT = 304,
-     tSET = 305,
-     tTHEN = 306,
-     tTO = 307,
-     tWHEN = 308,
-     tWITH = 309,
-     tWHILE = 310,
-     tNLELSE = 311,
-     tFACTORY = 312,
-     tMETHOD = 313,
-     tOPEN = 314,
-     tPLAY = 315,
-     tDONE = 316,
-     tINSTANCE = 317,
-     tGE = 318,
-     tLE = 319,
-     tGT = 320,
-     tLT = 321,
-     tEQ = 322,
-     tNEQ = 323,
-     tAND = 324,
-     tOR = 325,
-     tNOT = 326,
-     tMOD = 327,
-     tAFTER = 328,
-     tBEFORE = 329,
-     tCONCAT = 330,
-     tCONTAINS = 331,
-     tSTARTS = 332,
-     tCHAR = 333,
-     tITEM = 334,
-     tLINE = 335,
-     tWORD = 336,
-     tSPRITE = 337,
-     tINTERSECTS = 338,
-     tWITHIN = 339,
-     tTELL = 340,
-     tPROPERTY = 341,
-     tON = 342,
-     tME = 343
+     REFERENCE = 266,
+     INT = 267,
+     THEENTITY = 268,
+     THEENTITYWITHID = 269,
+     FLOAT = 270,
+     BLTIN = 271,
+     BLTINNOARGS = 272,
+     BLTINNOARGSORONE = 273,
+     BLTINONEARG = 274,
+     BLTINARGLIST = 275,
+     TWOWORDBUILTIN = 276,
+     FBLTIN = 277,
+     FBLTINNOARGS = 278,
+     FBLTINONEARG = 279,
+     FBLTINARGLIST = 280,
+     RBLTIN = 281,
+     RBLTINONEARG = 282,
+     ID = 283,
+     STRING = 284,
+     HANDLER = 285,
+     SYMBOL = 286,
+     ENDCLAUSE = 287,
+     tPLAYACCEL = 288,
+     tDOWN = 289,
+     tELSE = 290,
+     tNLELSIF = 291,
+     tEXIT = 292,
+     tFRAME = 293,
+     tGLOBAL = 294,
+     tGO = 295,
+     tIF = 296,
+     tINTO = 297,
+     tLOOP = 298,
+     tMACRO = 299,
+     tMOVIE = 300,
+     tNEXT = 301,
+     tOF = 302,
+     tPREVIOUS = 303,
+     tPUT = 304,
+     tREPEAT = 305,
+     tSET = 306,
+     tTHEN = 307,
+     tTO = 308,
+     tWHEN = 309,
+     tWITH = 310,
+     tWHILE = 311,
+     tNLELSE = 312,
+     tFACTORY = 313,
+     tMETHOD = 314,
+     tOPEN = 315,
+     tPLAY = 316,
+     tDONE = 317,
+     tINSTANCE = 318,
+     tGE = 319,
+     tLE = 320,
+     tGT = 321,
+     tLT = 322,
+     tEQ = 323,
+     tNEQ = 324,
+     tAND = 325,
+     tOR = 326,
+     tNOT = 327,
+     tMOD = 328,
+     tAFTER = 329,
+     tBEFORE = 330,
+     tCONCAT = 331,
+     tCONTAINS = 332,
+     tSTARTS = 333,
+     tCHAR = 334,
+     tITEM = 335,
+     tLINE = 336,
+     tWORD = 337,
+     tSPRITE = 338,
+     tINTERSECTS = 339,
+     tWITHIN = 340,
+     tTELL = 341,
+     tPROPERTY = 342,
+     tON = 343,
+     tME = 344
    };
 #endif
 /* Tokens.  */
@@ -163,84 +164,85 @@
 #define RECT 263
 #define ARRAY 264
 #define OBJECT 265
-#define INT 266
-#define THEENTITY 267
-#define THEENTITYWITHID 268
-#define FLOAT 269
-#define BLTIN 270
-#define BLTINNOARGS 271
-#define BLTINNOARGSORONE 272
-#define BLTINONEARG 273
-#define BLTINARGLIST 274
-#define TWOWORDBUILTIN 275
-#define FBLTIN 276
-#define FBLTINNOARGS 277
-#define FBLTINONEARG 278
-#define FBLTINARGLIST 279
-#define RBLTIN 280
-#define RBLTINONEARG 281
-#define ID 282
-#define STRING 283
-#define HANDLER 284
-#define SYMBOL 285
-#define ENDCLAUSE 286
-#define tPLAYACCEL 287
-#define tDOWN 288
-#define tELSE 289
-#define tNLELSIF 290
-#define tEXIT 291
-#define tFRAME 292
-#define tGLOBAL 293
-#define tGO 294
-#define tIF 295
-#define tINTO 296
-#define tLOOP 297
-#define tMACRO 298
-#define tMOVIE 299
-#define tNEXT 300
-#define tOF 301
-#define tPREVIOUS 302
-#define tPUT 303
-#define tREPEAT 304
-#define tSET 305
-#define tTHEN 306
-#define tTO 307
-#define tWHEN 308
-#define tWITH 309
-#define tWHILE 310
-#define tNLELSE 311
-#define tFACTORY 312
-#define tMETHOD 313
-#define tOPEN 314
-#define tPLAY 315
-#define tDONE 316
-#define tINSTANCE 317
-#define tGE 318
-#define tLE 319
-#define tGT 320
-#define tLT 321
-#define tEQ 322
-#define tNEQ 323
-#define tAND 324
-#define tOR 325
-#define tNOT 326
-#define tMOD 327
-#define tAFTER 328
-#define tBEFORE 329
-#define tCONCAT 330
-#define tCONTAINS 331
-#define tSTARTS 332
-#define tCHAR 333
-#define tITEM 334
-#define tLINE 335
-#define tWORD 336
-#define tSPRITE 337
-#define tINTERSECTS 338
-#define tWITHIN 339
-#define tTELL 340
-#define tPROPERTY 341
-#define tON 342
-#define tME 343
+#define REFERENCE 266
+#define INT 267
+#define THEENTITY 268
+#define THEENTITYWITHID 269
+#define FLOAT 270
+#define BLTIN 271
+#define BLTINNOARGS 272
+#define BLTINNOARGSORONE 273
+#define BLTINONEARG 274
+#define BLTINARGLIST 275
+#define TWOWORDBUILTIN 276
+#define FBLTIN 277
+#define FBLTINNOARGS 278
+#define FBLTINONEARG 279
+#define FBLTINARGLIST 280
+#define RBLTIN 281
+#define RBLTINONEARG 282
+#define ID 283
+#define STRING 284
+#define HANDLER 285
+#define SYMBOL 286
+#define ENDCLAUSE 287
+#define tPLAYACCEL 288
+#define tDOWN 289
+#define tELSE 290
+#define tNLELSIF 291
+#define tEXIT 292
+#define tFRAME 293
+#define tGLOBAL 294
+#define tGO 295
+#define tIF 296
+#define tINTO 297
+#define tLOOP 298
+#define tMACRO 299
+#define tMOVIE 300
+#define tNEXT 301
+#define tOF 302
+#define tPREVIOUS 303
+#define tPUT 304
+#define tREPEAT 305
+#define tSET 306
+#define tTHEN 307
+#define tTO 308
+#define tWHEN 309
+#define tWITH 310
+#define tWHILE 311
+#define tNLELSE 312
+#define tFACTORY 313
+#define tMETHOD 314
+#define tOPEN 315
+#define tPLAY 316
+#define tDONE 317
+#define tINSTANCE 318
+#define tGE 319
+#define tLE 320
+#define tGT 321
+#define tLT 322
+#define tEQ 323
+#define tNEQ 324
+#define tAND 325
+#define tOR 326
+#define tNOT 327
+#define tMOD 328
+#define tAFTER 329
+#define tBEFORE 330
+#define tCONCAT 331
+#define tCONTAINS 332
+#define tSTARTS 333
+#define tCHAR 334
+#define tITEM 335
+#define tLINE 336
+#define tWORD 337
+#define tSPRITE 338
+#define tINTERSECTS 339
+#define tWITHIN 340
+#define tTELL 341
+#define tPROPERTY 342
+#define tON 343
+#define tME 344
 
 
 
@@ -308,7 +310,7 @@ typedef union YYSTYPE
 	Common::Array<double> *arr;
 }
 /* Line 193 of yacc.c.  */
-#line 312 "engines/director/lingo/lingo-gr.cpp"
+#line 314 "engines/director/lingo/lingo-gr.cpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -321,7 +323,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 325 "engines/director/lingo/lingo-gr.cpp"
+#line 327 "engines/director/lingo/lingo-gr.cpp"
 
 #ifdef short
 # undef short
@@ -539,7 +541,7 @@ union yyalloc
 #define YYLAST   1879
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  104
+#define YYNTOKENS  105
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  44
 /* YYNRULES -- Number of rules.  */
@@ -549,7 +551,7 @@ union yyalloc
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   343
+#define YYMAXUTOK   344
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -558,15 +560,15 @@ union yyalloc
 static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      96,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      97,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,    95,    90,     2,
-      97,    98,    93,    91,   103,    92,     2,    94,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    96,    91,     2,
+      98,    99,    94,    92,   104,    93,     2,    95,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     100,    89,    99,     2,     2,     2,     2,     2,     2,     2,
+     101,    90,   100,     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,   101,     2,   102,     2,     2,     2,     2,     2,     2,
+       2,   102,     2,   103,     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,
@@ -591,7 +593,7 @@ static const yytype_uint8 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
+      85,    86,    87,    88,    89
 };
 
 #if YYDEBUG
@@ -621,69 +623,69 @@ static const yytype_uint16 yyprhs[] =
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     105,     0,    -1,   105,   106,   107,    -1,   107,    -1,     1,
-     106,    -1,    96,    -1,    -1,   138,    -1,   145,    -1,   110,
-      -1,    48,   127,    41,    27,    -1,    48,   127,    41,   128,
-      -1,    48,   127,    73,   127,    -1,    48,   127,    74,   127,
-      -1,    50,    27,    89,   127,    -1,    50,    12,    89,   127,
-      -1,    50,    13,   127,    89,   127,    -1,    50,    27,    52,
-     127,    -1,    50,    12,    52,   127,    -1,    50,    13,   127,
-      52,   127,    -1,   127,    -1,   129,    -1,   109,    -1,   111,
-      -1,   118,    97,   117,    98,   124,   123,    31,    -1,   119,
-      89,   127,   123,    52,   127,   123,   124,   123,    31,    -1,
-     119,    89,   127,   123,    33,    52,   127,   123,   124,   123,
-      31,    -1,   125,   109,   123,    -1,   126,   127,   106,   124,
-     123,    31,    -1,   126,   127,    52,   127,    -1,   120,   117,
-      51,   106,   124,   123,    31,    -1,   120,   117,    51,   106,
-     124,   123,    56,   124,   123,    31,    -1,   120,   117,    51,
-     106,   124,   123,   122,   113,   123,    31,    -1,   120,   117,
-      51,   122,   109,   123,    -1,   120,   117,    51,   122,   109,
-     123,    56,   122,   109,   123,    -1,   120,   117,    51,   122,
-     109,   123,   114,   123,   112,   123,    -1,    -1,    56,   122,
-     109,    -1,   113,   116,    -1,   116,    -1,   114,   115,    -1,
-     115,    -1,   121,   117,    51,   122,   110,   123,    -1,   114,
-      -1,   121,   117,    51,   122,   124,   123,    -1,   127,    -1,
-     127,    89,   127,    -1,    97,   117,    98,    -1,    49,    55,
-      -1,    49,    54,    27,    -1,    40,    -1,    35,    -1,    -1,
-      -1,    -1,   124,   106,    -1,   124,   110,    -1,    53,    27,
-      51,    -1,    85,    -1,    11,    -1,    14,    -1,    30,    -1,
-      28,    -1,    22,    -1,    23,   127,    -1,    24,   147,    -1,
-      24,    97,   147,    98,    -1,    27,    97,   146,    98,    -1,
-      27,    -1,    12,    -1,    13,   127,    -1,   108,    -1,   127,
-      91,   127,    -1,   127,    92,   127,    -1,   127,    93,   127,
-      -1,   127,    94,   127,    -1,   127,    72,   127,    -1,   127,
-      99,   127,    -1,   127,   100,   127,    -1,   127,    68,   127,
-      -1,   127,    63,   127,    -1,   127,    64,   127,    -1,   127,
-      69,   127,    -1,   127,    70,   127,    -1,    71,   127,    -1,
-     127,    90,   127,    -1,   127,    75,   127,    -1,   127,    76,
-     127,    -1,   127,    77,   127,    -1,    91,   127,    -1,    92,
-     127,    -1,    97,   127,    98,    -1,   101,   146,   102,    -1,
-      82,   127,    83,   127,    -1,    82,   127,    84,   127,    -1,
-      78,   127,    46,   127,    -1,    78,   127,    52,   127,    46,
-     127,    -1,    79,   127,    46,   127,    -1,    79,   127,    52,
-     127,    46,   127,    -1,    80,   127,    46,   127,    -1,    80,
-     127,    52,   127,    46,   127,    -1,    81,   127,    46,   127,
-      -1,    81,   127,    52,   127,    46,   127,    -1,    26,   127,
-      -1,    48,   127,    -1,   133,    -1,   136,    -1,    36,    49,
-      -1,    36,    -1,    38,   130,    -1,    86,   131,    -1,    62,
-     132,    -1,    16,    -1,    18,   127,    -1,    17,   127,    -1,
-      17,    -1,    19,   147,    -1,    19,    97,   147,    98,    -1,
-      88,    97,    27,    98,    -1,    88,    97,    27,   103,   146,
-      98,    -1,    59,   127,    54,   127,    -1,    59,   127,    -1,
-      20,    27,   146,    -1,    27,    -1,   130,   103,    27,    -1,
-      27,    -1,   131,   103,    27,    -1,    27,    -1,   132,   103,
-      27,    -1,    39,    42,    -1,    39,    45,    -1,    39,    47,
-      -1,    39,   134,    -1,    39,   134,   135,    -1,    39,   135,
-      -1,    37,   127,    -1,   127,    -1,    46,    44,   127,    -1,
-      44,   127,    -1,    60,    61,    -1,    60,   134,    -1,    60,
-     134,   135,    -1,    60,   135,    -1,    -1,    32,   137,   146,
-      -1,    -1,    43,    27,   139,   122,   143,   106,   144,   124,
-      -1,    57,    27,    -1,    -1,    58,    27,   140,   122,   143,
-     106,   144,   124,    -1,    -1,    -1,    87,    27,   141,   122,
-     142,   143,   106,   144,   124,    31,    -1,    -1,    27,    -1,
-     143,   103,    27,    -1,   143,   106,   103,    27,    -1,    -1,
-      27,   147,    -1,    -1,   127,    -1,   146,   103,   127,    -1,
-     127,    -1,   147,   103,   127,    -1
+     106,     0,    -1,   106,   107,   108,    -1,   108,    -1,     1,
+     107,    -1,    97,    -1,    -1,   139,    -1,   146,    -1,   111,
+      -1,    49,   128,    42,    28,    -1,    49,   128,    42,   129,
+      -1,    49,   128,    74,   128,    -1,    49,   128,    75,   128,
+      -1,    51,    28,    90,   128,    -1,    51,    13,    90,   128,
+      -1,    51,    14,   128,    90,   128,    -1,    51,    28,    53,
+     128,    -1,    51,    13,    53,   128,    -1,    51,    14,   128,
+      53,   128,    -1,   128,    -1,   130,    -1,   110,    -1,   112,
+      -1,   119,    98,   118,    99,   125,   124,    32,    -1,   120,
+      90,   128,   124,    53,   128,   124,   125,   124,    32,    -1,
+     120,    90,   128,   124,    34,    53,   128,   124,   125,   124,
+      32,    -1,   126,   110,   124,    -1,   127,   128,   107,   125,
+     124,    32,    -1,   127,   128,    53,   128,    -1,   121,   118,
+      52,   107,   125,   124,    32,    -1,   121,   118,    52,   107,
+     125,   124,    57,   125,   124,    32,    -1,   121,   118,    52,
+     107,   125,   124,   123,   114,   124,    32,    -1,   121,   118,
+      52,   123,   110,   124,    -1,   121,   118,    52,   123,   110,
+     124,    57,   123,   110,   124,    -1,   121,   118,    52,   123,
+     110,   124,   115,   124,   113,   124,    -1,    -1,    57,   123,
+     110,    -1,   114,   117,    -1,   117,    -1,   115,   116,    -1,
+     116,    -1,   122,   118,    52,   123,   111,   124,    -1,   115,
+      -1,   122,   118,    52,   123,   125,   124,    -1,   128,    -1,
+     128,    90,   128,    -1,    98,   118,    99,    -1,    50,    56,
+      -1,    50,    55,    28,    -1,    41,    -1,    36,    -1,    -1,
+      -1,    -1,   125,   107,    -1,   125,   111,    -1,    54,    28,
+      52,    -1,    86,    -1,    12,    -1,    15,    -1,    31,    -1,
+      29,    -1,    23,    -1,    24,   128,    -1,    25,   148,    -1,
+      25,    98,   148,    99,    -1,    28,    98,   147,    99,    -1,
+      28,    -1,    13,    -1,    14,   128,    -1,   109,    -1,   128,
+      92,   128,    -1,   128,    93,   128,    -1,   128,    94,   128,
+      -1,   128,    95,   128,    -1,   128,    73,   128,    -1,   128,
+     100,   128,    -1,   128,   101,   128,    -1,   128,    69,   128,
+      -1,   128,    64,   128,    -1,   128,    65,   128,    -1,   128,
+      70,   128,    -1,   128,    71,   128,    -1,    72,   128,    -1,
+     128,    91,   128,    -1,   128,    76,   128,    -1,   128,    77,
+     128,    -1,   128,    78,   128,    -1,    92,   128,    -1,    93,
+     128,    -1,    98,   128,    99,    -1,   102,   147,   103,    -1,
+      83,   128,    84,   128,    -1,    83,   128,    85,   128,    -1,
+      79,   128,    47,   128,    -1,    79,   128,    53,   128,    47,
+     128,    -1,    80,   128,    47,   128,    -1,    80,   128,    53,
+     128,    47,   128,    -1,    81,   128,    47,   128,    -1,    81,
+     128,    53,   128,    47,   128,    -1,    82,   128,    47,   128,
+      -1,    82,   128,    53,   128,    47,   128,    -1,    27,   128,
+      -1,    49,   128,    -1,   134,    -1,   137,    -1,    37,    50,
+      -1,    37,    -1,    39,   131,    -1,    87,   132,    -1,    63,
+     133,    -1,    17,    -1,    19,   128,    -1,    18,   128,    -1,
+      18,    -1,    20,   148,    -1,    20,    98,   148,    99,    -1,
+      89,    98,    28,    99,    -1,    89,    98,    28,   104,   147,
+      99,    -1,    60,   128,    55,   128,    -1,    60,   128,    -1,
+      21,    28,   147,    -1,    28,    -1,   131,   104,    28,    -1,
+      28,    -1,   132,   104,    28,    -1,    28,    -1,   133,   104,
+      28,    -1,    40,    43,    -1,    40,    46,    -1,    40,    48,
+      -1,    40,   135,    -1,    40,   135,   136,    -1,    40,   136,
+      -1,    38,   128,    -1,   128,    -1,    47,    45,   128,    -1,
+      45,   128,    -1,    61,    62,    -1,    61,   135,    -1,    61,
+     135,   136,    -1,    61,   136,    -1,    -1,    33,   138,   147,
+      -1,    -1,    44,    28,   140,   123,   144,   107,   145,   125,
+      -1,    58,    28,    -1,    -1,    59,    28,   141,   123,   144,
+     107,   145,   125,    -1,    -1,    -1,    88,    28,   142,   123,
+     143,   144,   107,   145,   125,    32,    -1,    -1,    28,    -1,
+     144,   104,    28,    -1,   144,   107,   104,    28,    -1,    -1,
+      28,   148,    -1,    -1,   128,    -1,   147,   104,   128,    -1,
+     128,    -1,   148,   104,   128,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -715,7 +717,7 @@ static const yytype_uint16 yyrline[] =
 static const char *const yytname[] =
 {
   "$end", "error", "$undefined", "UNARY", "CASTREF", "VOID", "VAR",
-  "POINT", "RECT", "ARRAY", "OBJECT", "INT", "THEENTITY",
+  "POINT", "RECT", "ARRAY", "OBJECT", "REFERENCE", "INT", "THEENTITY",
   "THEENTITYWITHID", "FLOAT", "BLTIN", "BLTINNOARGS", "BLTINNOARGSORONE",
   "BLTINONEARG", "BLTINARGLIST", "TWOWORDBUILTIN", "FBLTIN",
   "FBLTINNOARGS", "FBLTINONEARG", "FBLTINARGLIST", "RBLTIN",
@@ -753,32 +755,32 @@ static const yytype_uint16 yytoknum[] =
      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
-     335,   336,   337,   338,   339,   340,   341,   342,   343,    61,
-      38,    43,    45,    42,    47,    37,    10,    40,    41,    62,
-      60,    91,    93,    44
+     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
+      61,    38,    43,    45,    42,    47,    37,    10,    40,    41,
+      62,    60,    91,    93,    44
 };
 # endif
 
 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const yytype_uint8 yyr1[] =
 {
-       0,   104,   105,   105,   105,   106,   107,   107,   107,   107,
-     108,   108,   108,   108,   108,   108,   108,   108,   108,   108,
-     109,   109,   110,   110,   110,   110,   110,   110,   110,   110,
-     111,   111,   111,   111,   111,   111,   112,   112,   113,   113,
-     114,   114,   115,   116,   116,   117,   117,   117,   118,   119,
-     120,   121,   122,   123,   124,   124,   124,   125,   126,   127,
-     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
-     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
-     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
-     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
-     127,   127,   127,   128,   129,   129,   129,   129,   129,   129,
-     129,   129,   129,   129,   129,   129,   129,   129,   129,   129,
-     129,   129,   129,   130,   130,   131,   131,   132,   132,   133,
-     133,   133,   133,   133,   133,   134,   134,   135,   135,   136,
-     136,   136,   136,   137,   136,   139,   138,   138,   140,   138,
-     141,   142,   138,   143,   143,   143,   143,   144,   145,   146,
-     146,   146,   147,   147
+       0,   105,   106,   106,   106,   107,   108,   108,   108,   108,
+     109,   109,   109,   109,   109,   109,   109,   109,   109,   109,
+     110,   110,   111,   111,   111,   111,   111,   111,   111,   111,
+     112,   112,   112,   112,   112,   112,   113,   113,   114,   114,
+     115,   115,   116,   117,   117,   118,   118,   118,   119,   120,
+     121,   122,   123,   124,   125,   125,   125,   126,   127,   128,
+     128,   128,   128,   128,   128,   128,   128,   128,   128,   128,
+     128,   128,   128,   128,   128,   128,   128,   128,   128,   128,
+     128,   128,   128,   128,   128,   128,   128,   128,   128,   128,
+     128,   128,   128,   128,   128,   128,   128,   128,   128,   128,
+     128,   128,   128,   129,   130,   130,   130,   130,   130,   130,
+     130,   130,   130,   130,   130,   130,   130,   130,   130,   130,
+     130,   130,   130,   131,   131,   132,   132,   133,   133,   134,
+     134,   134,   134,   134,   134,   135,   135,   136,   136,   137,
+     137,   137,   137,   138,   137,   140,   139,   139,   141,   139,
+     142,   143,   139,   144,   144,   144,   144,   145,   146,   147,
+     147,   147,   148,   148
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -858,55 +860,55 @@ static const yytype_int16 yydefgoto[] =
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -275
+#define YYPACT_NINF -271
 static const yytype_int16 yypact[] =
 {
-     342,   -64,  -275,  -275,   991,  -275,  -275,   991,   991,  1063,
-      33,  -275,   991,  1103,  1175,  -275,  -275,  -275,    15,    39,
-     879,  -275,    43,   991,    61,    60,    52,    54,    66,   991,
-     951,    68,   991,   991,   991,   991,   991,   991,  -275,    75,
-      78,    14,   991,   991,   991,   991,     3,  -275,  -275,  -275,
-    -275,  -275,    22,    28,  1215,   797,   991,  1779,  -275,  -275,
-    -275,  -275,  -275,  -275,  -275,    25,   991,  1779,  1779,  1779,
-     991,  1779,    48,   991,  1779,   991,    48,   991,    48,   991,
-    -275,  -275,    49,   991,  -275,   991,  -275,    81,  -275,  1779,
-       5,  -275,  -275,  1250,   128,  -275,   -50,   991,   -41,   106,
-    -275,  -275,  1614,  -275,     5,  -275,  -275,    53,   -74,  1283,
-    1316,  1349,  1382,  1647,  -275,    55,  -275,   132,   -74,   -74,
-    1713,  1779,    27,  -275,   433,  1215,   991,  1215,   109,  1746,
-    -275,  1547,   991,   991,   991,   991,   991,   991,   991,   991,
-     991,   991,   991,   991,   991,   991,   991,   991,   991,  1250,
-    1713,    -9,   991,    58,    -6,  1713,    -2,    58,   136,  1779,
-    1779,   991,  -275,  -275,   105,   991,   991,  -275,   991,   991,
-    1581,   991,   991,  -275,  -275,   991,  -275,   137,   991,   991,
-     991,   991,   991,   991,   991,   991,   991,   991,   138,  -275,
-      11,  -275,  -275,   991,  -275,    70,  1779,    73,  1680,   -64,
-     991,  -275,   991,  -275,   239,   239,   239,   -74,   -74,   -74,
-    1779,   239,   239,   771,    13,    13,   -74,   -74,  1779,  1779,
-    -275,  1779,  -275,  -275,  -275,  1779,   147,   991,  -275,  -275,
-    1779,  1779,  1779,  1779,   991,   991,  1779,  1779,   147,  1779,
-    -275,  1779,  1415,  1779,  1448,  1779,  1481,  1779,  1514,  1779,
-    1779,  -275,  -275,  -275,   991,  1779,  -275,    -5,  -275,  -275,
-     797,  1779,  1779,   615,  -275,   -34,  1779,  1779,  1779,   -34,
-     991,   991,   991,   991,   147,    20,   615,   123,   991,   615,
-    -275,  -275,  -275,   158,   151,    87,    87,  1779,  1779,  1779,
-    1779,   -34,  -275,   160,   991,  1779,    -4,   -16,  -275,  -275,
-     165,  -275,  -275,    87,  -275,  1779,  -275,  -275,  -275,   161,
-    -275,  -275,   161,  -275,  1215,  -275,   615,   615,  -275,  -275,
-     615,   615,   161,   161,  -275,  1215,   797,  -275,   139,   142,
-     524,   615,   167,   168,  -275,   169,   153,  -275,  -275,  -275,
-    -275,  -275,   171,  -275,  -275,  -275,  -275,  -275,   797,  -275,
-     706,  -275,   706,  -275,  -275,   615,  -275,  -275
+     341,   -56,  -271,  -271,   990,  -271,  -271,   990,   990,  1062,
+      23,  -271,   990,  1102,  1174,  -271,  -271,  -271,     3,    36,
+     878,  -271,    42,   990,    46,    81,    44,    51,    53,   990,
+     950,    61,   990,   990,   990,   990,   990,   990,  -271,    65,
+      69,     7,   990,   990,   990,   990,     2,  -271,  -271,  -271,
+    -271,  -271,    13,    33,  1214,   796,   990,  1778,  -271,  -271,
+    -271,  -271,  -271,  -271,  -271,    20,   990,  1778,  1778,  1778,
+     990,  1778,    25,   990,  1778,   990,    25,   990,    25,   990,
+    -271,  -271,    47,   990,  -271,   990,  -271,   107,  -271,  1778,
+     -18,  -271,  -271,  1249,   127,  -271,   -36,   990,   -30,   104,
+    -271,  -271,  1613,  -271,   -18,  -271,  -271,    54,   -75,  1282,
+    1315,  1348,  1381,  1646,  -271,    55,  -271,   129,   -75,   -75,
+    1712,  1778,    28,  -271,   432,  1214,   990,  1214,   108,  1745,
+    -271,  1546,   990,   990,   990,   990,   990,   990,   990,   990,
+     990,   990,   990,   990,   990,   990,   990,   990,   990,  1249,
+    1712,   -12,   990,    57,    -8,  1712,    15,    57,   135,  1778,
+    1778,   990,  -271,  -271,    88,   990,   990,  -271,   990,   990,
+    1580,   990,   990,  -271,  -271,   990,  -271,   136,   990,   990,
+     990,   990,   990,   990,   990,   990,   990,   990,   137,  -271,
+      18,  -271,  -271,   990,  -271,    72,  1778,    75,  1679,   -56,
+     990,  -271,   990,  -271,   238,   238,   238,   -75,   -75,   -75,
+    1778,   238,   238,   770,    12,    12,   -75,   -75,  1778,  1778,
+    -271,  1778,  -271,  -271,  -271,  1778,   140,   990,  -271,  -271,
+    1778,  1778,  1778,  1778,   990,   990,  1778,  1778,   140,  1778,
+    -271,  1778,  1414,  1778,  1447,  1778,  1480,  1778,  1513,  1778,
+    1778,  -271,  -271,  -271,   990,  1778,  -271,    -6,  -271,  -271,
+     796,  1778,  1778,   614,  -271,   -35,  1778,  1778,  1778,   -35,
+     990,   990,   990,   990,   140,    26,   614,   122,   990,   614,
+    -271,  -271,  -271,   146,   161,    86,    86,  1778,  1778,  1778,
+    1778,   -35,  -271,   159,   990,  1778,   -25,   -17,  -271,  -271,
+     164,  -271,  -271,    86,  -271,  1778,  -271,  -271,  -271,   157,
+    -271,  -271,   157,  -271,  1214,  -271,   614,   614,  -271,  -271,
+     614,   614,   157,   157,  -271,  1214,   796,  -271,   138,   144,
+     523,   614,   166,   167,  -271,   168,   150,  -271,  -271,  -271,
+    -271,  -271,   172,  -271,  -271,  -271,  -271,  -271,   796,  -271,
+     705,  -271,   705,  -271,  -271,   614,  -271,  -271
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -275,  -275,    19,    82,  -275,   -51,     0,  -275,  -275,  -275,
-     -90,  -270,  -114,  -109,  -275,  -275,  -275,  -268,   -99,   -19,
-    -198,  -275,  -275,     1,  -275,  -275,  -275,  -275,  -275,  -275,
-     180,   -13,  -275,  -275,  -275,  -275,  -275,  -275,  -275,  -215,
-    -274,  -275,   -23,    -7
+    -271,  -271,    19,    82,  -271,   -51,     0,  -271,  -271,  -271,
+     -90,  -264,  -114,  -109,  -271,  -271,  -271,  -270,   -99,   -19,
+    -198,  -271,  -271,     1,  -271,  -271,  -271,  -271,  -271,  -271,
+     180,   -27,  -271,  -271,  -271,  -271,  -271,  -271,  -271,  -232,
+    -237,  -271,   -23,    -2
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -916,27 +918,27 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -7
 static const yytype_int16 yytable[] =
 {
-      50,   138,   168,   123,   130,    67,    76,    78,    68,    69,
-      71,   171,   302,    74,    71,    71,   195,   105,   197,   310,
-      64,    89,   122,   269,    93,   146,   147,   307,   277,   318,
-     102,    89,    63,   108,   109,   110,   111,   112,   113,   169,
-     311,   325,   327,   118,   119,   120,   121,   278,   172,    85,
-     153,    87,   308,   327,   325,   129,   157,   131,   276,   291,
-      73,   279,    63,   151,    80,   124,    81,   149,   154,   284,
-      92,   150,    96,    97,   121,   238,   150,   162,   155,    99,
-     121,   100,   135,   136,   159,   137,   160,    98,   138,   220,
-     252,   176,   222,   101,   152,   106,   223,   152,   170,    63,
-     260,   193,   114,   316,   317,   116,   144,   145,   320,   253,
-     321,   117,   146,   147,   254,    94,    95,   126,   292,   125,
-     330,   331,   148,   193,    50,   161,   129,   196,   198,   192,
-     193,   227,   228,   204,   205,   206,   207,   208,   209,   210,
+      50,   138,   123,   105,   130,    67,   269,   307,    68,    69,
+      71,    76,    78,    74,    71,    71,   195,   168,   197,   310,
+      64,    89,   122,   171,    93,   146,   147,    85,   277,    87,
+     102,    89,   308,   108,   109,   110,   111,   112,   113,   325,
+     311,    63,   291,   118,   119,   120,   121,   278,   327,   302,
+     153,    73,   325,    80,   169,   129,   157,   131,   276,   327,
+     172,   279,    63,   162,    81,   124,   318,   149,   151,   284,
+      92,   150,    99,   154,   121,   238,   150,   176,   155,   100,
+     121,   101,   135,   136,   159,   137,   160,   220,   138,   106,
+     252,   222,   152,   114,    96,    97,   152,   116,   170,    63,
+     260,    94,    95,   316,   317,   117,   144,   145,   320,    98,
+     321,   125,   146,   147,   223,   227,   228,   253,   148,   193,
+     330,   331,   254,   126,    50,   292,   129,   196,   198,   152,
+     193,   192,   193,   204,   205,   206,   207,   208,   209,   210,
      211,   212,   213,   214,   215,   216,   217,   218,   219,   121,
-     203,   152,   158,   221,   355,   167,   177,   173,   188,   190,
-     199,   193,   225,   224,   240,   251,   230,   231,   256,   232,
-     233,   258,   236,   237,   264,   294,   239,   257,   299,   241,
-     242,   243,   244,   245,   246,   247,   248,   249,   250,   298,
-     300,   304,   315,   340,   255,   338,   310,   309,   343,   344,
-     345,   261,   351,   262,   346,   329,   194,   312,   334,   280,
+     203,   158,   161,   221,   355,   167,   173,   190,   177,   188,
+     199,   193,   225,   224,   240,   251,   230,   231,   264,   232,
+     233,   256,   236,   237,   258,   294,   239,   257,   298,   241,
+     242,   243,   244,   245,   246,   247,   248,   249,   250,   299,
+     300,   304,   315,   310,   255,   338,   340,   309,   343,   344,
+     345,   261,   346,   262,   351,   329,   194,   312,   334,   280,
      104,     0,   326,     0,     0,     0,   336,     0,   259,     0,
        0,     0,     0,     0,     0,     0,     0,     0,   266,     0,
        0,   275,     0,     0,     0,   267,   268,     0,     0,   348,
@@ -950,7 +952,7 @@ static const yytype_int16 yytable[] =
      303,   137,   342,     0,   138,   129,     0,     0,   347,     0,
      349,     0,     0,     0,     0,     0,   129,     0,     0,   141,
      142,   143,   144,   145,     0,   356,   357,     0,   146,   147,
-       0,     0,    -6,     1,     0,     0,     0,     0,     0,     0,
+       0,    -6,     1,     0,     0,     0,     0,     0,     0,     0,
      354,     0,   354,     2,     3,     4,     5,     0,     6,     7,
        8,     9,    10,     0,    11,    12,    13,     0,     0,    14,
       15,     0,    16,     0,    17,     0,     0,     0,    18,     0,
@@ -1108,27 +1110,27 @@ static const yytype_int16 yytable[] =
 
 static const yytype_int16 yycheck[] =
 {
-       0,    75,    52,     0,    55,     4,    13,    14,     7,     8,
-       9,    52,   286,    12,    13,    14,   125,    30,   127,    35,
-       1,    20,    45,   238,    23,    99,   100,    31,    33,   303,
-      29,    30,    96,    32,    33,    34,    35,    36,    37,    89,
-      56,   309,   312,    42,    43,    44,    45,    52,    89,    44,
-      73,    46,    56,   323,   322,    54,    79,    56,   256,   274,
-      27,   259,    96,    70,    49,    46,    27,    66,    75,   103,
-      27,    70,    12,    13,    73,   174,    75,    90,    77,    27,
-      79,    27,    69,    70,    83,    72,    85,    27,    75,    98,
-     189,   104,    98,    27,   103,    27,    98,   103,    97,    96,
-     199,   103,    27,   301,   302,    27,    93,    94,   306,    98,
-     308,    97,    99,   100,   103,    54,    55,    89,    98,    97,
-     318,   319,    97,   103,   124,    44,   125,   126,   127,   102,
-     103,    26,    27,   132,   133,   134,   135,   136,   137,   138,
+       0,    76,     0,    30,    55,     4,   238,    32,     7,     8,
+       9,    13,    14,    12,    13,    14,   125,    53,   127,    36,
+       1,    20,    45,    53,    23,   100,   101,    45,    34,    47,
+      29,    30,    57,    32,    33,    34,    35,    36,    37,   309,
+      57,    97,   274,    42,    43,    44,    45,    53,   312,   286,
+      73,    28,   322,    50,    90,    54,    79,    56,   256,   323,
+      90,   259,    97,    90,    28,    46,   303,    66,    70,   104,
+      28,    70,    28,    75,    73,   174,    75,   104,    77,    28,
+      79,    28,    70,    71,    83,    73,    85,    99,    76,    28,
+     189,    99,   104,    28,    13,    14,   104,    28,    97,    97,
+     199,    55,    56,   301,   302,    98,    94,    95,   306,    28,
+     308,    98,   100,   101,    99,    27,    28,    99,    98,   104,
+     318,   319,   104,    90,   124,    99,   125,   126,   127,   104,
+     104,   103,   104,   132,   133,   134,   135,   136,   137,   138,
      139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
-     131,   103,   103,   152,   352,    27,   103,    51,   103,    27,
-      51,   103,   161,    27,    27,    27,   165,   166,    98,   168,
-     169,    98,   171,   172,    27,    52,   175,   196,    27,   178,
-     179,   180,   181,   182,   183,   184,   185,   186,   187,    31,
-     103,    31,    27,    51,   193,    56,    35,   296,    31,    31,
-      31,   200,    31,   202,    51,   314,   124,   297,   322,   260,
+     131,   104,    45,   152,   352,    28,    52,    28,   104,   104,
+      52,   104,   161,    28,    28,    28,   165,   166,    28,   168,
+     169,    99,   171,   172,    99,    53,   175,   196,    32,   178,
+     179,   180,   181,   182,   183,   184,   185,   186,   187,    28,
+     104,    32,    28,    36,   193,    57,    52,   296,    32,    32,
+      32,   200,    52,   202,    32,   314,   124,   297,   322,   260,
       30,    -1,   311,    -1,    -1,    -1,   325,    -1,   199,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   227,    -1,
       -1,   254,    -1,    -1,    -1,   234,   235,    -1,    -1,   338,
@@ -1138,206 +1140,206 @@ static const yytype_int16 yycheck[] =
       -1,   270,   271,   272,   273,   326,   295,    -1,    -1,   278,
       -1,    -1,    -1,    -1,   265,    -1,   305,    -1,   269,    -1,
       -1,    -1,    -1,   312,    -1,   294,    -1,   348,    -1,    -1,
-      -1,   320,   321,   322,    -1,    -1,    -1,    -1,    69,    70,
-     291,    72,   331,    -1,    75,   314,    -1,    -1,   337,    -1,
-     339,    -1,    -1,    -1,    -1,    -1,   325,    -1,    -1,    90,
-      91,    92,    93,    94,    -1,   354,   355,    -1,    99,   100,
-      -1,    -1,     0,     1,    -1,    -1,    -1,    -1,    -1,    -1,
-     350,    -1,   352,    11,    12,    13,    14,    -1,    16,    17,
-      18,    19,    20,    -1,    22,    23,    24,    -1,    -1,    27,
-      28,    -1,    30,    -1,    32,    -1,    -1,    -1,    36,    -1,
-      38,    39,    40,    -1,    -1,    43,    -1,    -1,    -1,    -1,
-      48,    49,    50,    -1,    -1,    53,    -1,    -1,    -1,    57,
-      58,    59,    60,    -1,    62,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,
-      78,    79,    80,    81,    82,    -1,    -1,    85,    86,    87,
-      88,    -1,    -1,    91,    92,    -1,    -1,    -1,    96,    97,
-      -1,    -1,    -1,   101,    11,    12,    13,    14,    -1,    16,
-      17,    18,    19,    20,    -1,    22,    23,    24,    -1,    -1,
-      27,    28,    -1,    30,    -1,    32,    -1,    -1,    -1,    36,
-      -1,    38,    39,    40,    -1,    -1,    43,    -1,    -1,    -1,
-      -1,    48,    49,    50,    -1,    -1,    53,    -1,    -1,    -1,
-      57,    58,    59,    60,    -1,    62,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,
-      -1,    78,    79,    80,    81,    82,    -1,    -1,    85,    86,
-      87,    88,    -1,    -1,    91,    92,    -1,    -1,    -1,    -1,
-      97,    -1,    -1,    -1,   101,    11,    12,    13,    14,    -1,
-      16,    17,    18,    19,    20,    -1,    22,    23,    24,    -1,
-      -1,    27,    28,    -1,    30,    31,    32,    -1,    -1,    -1,
-      36,    -1,    38,    39,    40,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    48,    49,    50,    -1,    -1,    53,    -1,    -1,
-      -1,    -1,    -1,    59,    60,    -1,    62,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,
-      -1,    -1,    78,    79,    80,    81,    82,    -1,    -1,    85,
-      86,    -1,    88,    -1,    -1,    91,    92,    -1,    -1,    -1,
-      96,    97,    -1,    -1,    -1,   101,    11,    12,    13,    14,
-      -1,    16,    17,    18,    19,    20,    -1,    22,    23,    24,
-      -1,    -1,    27,    28,    -1,    30,    -1,    32,    -1,    -1,
-      -1,    36,    -1,    38,    39,    40,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    48,    49,    50,    -1,    -1,    53,    -1,
-      -1,    -1,    -1,    -1,    59,    60,    -1,    62,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
-      -1,    -1,    -1,    78,    79,    80,    81,    82,    -1,    -1,
-      85,    86,    -1,    88,    -1,    -1,    91,    92,    -1,    -1,
-      -1,    96,    97,    -1,    -1,    -1,   101,    11,    12,    13,
-      14,    -1,    16,    17,    18,    19,    20,    -1,    22,    23,
-      24,    -1,    -1,    27,    28,    -1,    30,    -1,    32,    -1,
-      -1,    -1,    36,    -1,    38,    39,    40,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    48,    49,    50,    -1,    -1,    53,
-      -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    62,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,
-      -1,    -1,    -1,    -1,    78,    79,    80,    81,    82,    -1,
-      -1,    85,    86,    -1,    88,    -1,    -1,    91,    92,    -1,
-      -1,    -1,    -1,    97,    -1,    -1,    -1,   101,    11,    12,
-      13,    14,    -1,    16,    17,    18,    19,    20,    -1,    22,
-      23,    24,    -1,    -1,    27,    28,    -1,    30,    -1,    32,
-      -1,    -1,    -1,    36,    -1,    38,    39,    -1,    -1,    -1,
-      69,    70,    -1,    72,    -1,    48,    75,    50,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    62,
-      -1,    -1,    91,    92,    93,    94,    -1,    -1,    71,    -1,
-      99,   100,    -1,    -1,    -1,    78,    79,    80,    81,    82,
-      -1,    -1,    -1,    86,    -1,    88,    -1,    -1,    91,    92,
-      11,    12,    13,    14,    97,    -1,    -1,    -1,   101,    -1,
-      -1,    22,    23,    24,    -1,    -1,    27,    28,    -1,    30,
-      -1,    -1,    -1,    -1,    -1,    -1,    37,    -1,    -1,    -1,
-      -1,    42,    -1,    44,    45,    46,    47,    48,    -1,    50,
+      -1,   320,   321,   322,    -1,    -1,    -1,    -1,    70,    71,
+     291,    73,   331,    -1,    76,   314,    -1,    -1,   337,    -1,
+     339,    -1,    -1,    -1,    -1,    -1,   325,    -1,    -1,    91,
+      92,    93,    94,    95,    -1,   354,   355,    -1,   100,   101,
+      -1,     0,     1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     350,    -1,   352,    12,    13,    14,    15,    -1,    17,    18,
+      19,    20,    21,    -1,    23,    24,    25,    -1,    -1,    28,
+      29,    -1,    31,    -1,    33,    -1,    -1,    -1,    37,    -1,
+      39,    40,    41,    -1,    -1,    44,    -1,    -1,    -1,    -1,
+      49,    50,    51,    -1,    -1,    54,    -1,    -1,    -1,    58,
+      59,    60,    61,    -1,    63,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    72,    -1,    -1,    -1,    -1,    -1,    -1,
+      79,    80,    81,    82,    83,    -1,    -1,    86,    87,    88,
+      89,    -1,    -1,    92,    93,    -1,    -1,    -1,    97,    98,
+      -1,    -1,    -1,   102,    12,    13,    14,    15,    -1,    17,
+      18,    19,    20,    21,    -1,    23,    24,    25,    -1,    -1,
+      28,    29,    -1,    31,    -1,    33,    -1,    -1,    -1,    37,
+      -1,    39,    40,    41,    -1,    -1,    44,    -1,    -1,    -1,
+      -1,    49,    50,    51,    -1,    -1,    54,    -1,    -1,    -1,
+      58,    59,    60,    61,    -1,    63,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    -1,    -1,
+      -1,    79,    80,    81,    82,    83,    -1,    -1,    86,    87,
+      88,    89,    -1,    -1,    92,    93,    -1,    -1,    -1,    -1,
+      98,    -1,    -1,    -1,   102,    12,    13,    14,    15,    -1,
+      17,    18,    19,    20,    21,    -1,    23,    24,    25,    -1,
+      -1,    28,    29,    -1,    31,    32,    33,    -1,    -1,    -1,
+      37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    49,    50,    51,    -1,    -1,    54,    -1,    -1,
+      -1,    -1,    -1,    60,    61,    -1,    63,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    -1,
+      -1,    -1,    79,    80,    81,    82,    83,    -1,    -1,    86,
+      87,    -1,    89,    -1,    -1,    92,    93,    -1,    -1,    -1,
+      97,    98,    -1,    -1,    -1,   102,    12,    13,    14,    15,
+      -1,    17,    18,    19,    20,    21,    -1,    23,    24,    25,
+      -1,    -1,    28,    29,    -1,    31,    -1,    33,    -1,    -1,
+      -1,    37,    -1,    39,    40,    41,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    49,    50,    51,    -1,    -1,    54,    -1,
+      -1,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
+      -1,    -1,    -1,    79,    80,    81,    82,    83,    -1,    -1,
+      86,    87,    -1,    89,    -1,    -1,    92,    93,    -1,    -1,
+      -1,    97,    98,    -1,    -1,    -1,   102,    12,    13,    14,
+      15,    -1,    17,    18,    19,    20,    21,    -1,    23,    24,
+      25,    -1,    -1,    28,    29,    -1,    31,    -1,    33,    -1,
+      -1,    -1,    37,    -1,    39,    40,    41,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    49,    50,    51,    -1,    -1,    54,
+      -1,    -1,    -1,    -1,    -1,    60,    61,    -1,    63,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,
+      -1,    -1,    -1,    -1,    79,    80,    81,    82,    83,    -1,
+      -1,    86,    87,    -1,    89,    -1,    -1,    92,    93,    -1,
+      -1,    -1,    -1,    98,    -1,    -1,    -1,   102,    12,    13,
+      14,    15,    -1,    17,    18,    19,    20,    21,    -1,    23,
+      24,    25,    -1,    -1,    28,    29,    -1,    31,    -1,    33,
+      -1,    -1,    -1,    37,    -1,    39,    40,    -1,    -1,    -1,
+      70,    71,    -1,    73,    -1,    49,    76,    51,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    60,    61,    -1,    63,
+      -1,    -1,    92,    93,    94,    95,    -1,    -1,    72,    -1,
+     100,   101,    -1,    -1,    -1,    79,    80,    81,    82,    83,
+      -1,    -1,    -1,    87,    -1,    89,    -1,    -1,    92,    93,
+      12,    13,    14,    15,    98,    -1,    -1,    -1,   102,    -1,
+      -1,    23,    24,    25,    -1,    -1,    28,    29,    -1,    31,
+      -1,    -1,    -1,    -1,    -1,    -1,    38,    -1,    -1,    -1,
+      -1,    43,    -1,    45,    46,    47,    48,    49,    -1,    51,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      71,    -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,
-      81,    82,    11,    12,    13,    14,    -1,    -1,    -1,    -1,
-      91,    92,    -1,    22,    23,    24,    97,    -1,    27,    28,
-     101,    30,    -1,    -1,    -1,    -1,    -1,    -1,    37,    -1,
-      -1,    -1,    -1,    -1,    -1,    44,    -1,    46,    -1,    48,
-      -1,    50,    11,    12,    13,    14,    -1,    -1,    -1,    -1,
-      -1,    -1,    61,    22,    23,    24,    -1,    -1,    27,    28,
-      -1,    30,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,
-      79,    80,    81,    82,    -1,    -1,    -1,    -1,    -1,    48,
-      -1,    50,    91,    92,    -1,    -1,    -1,    -1,    97,    -1,
-      -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,    -1,    78,
-      79,    80,    81,    82,    11,    12,    13,    14,    -1,    -1,
-      -1,    -1,    91,    92,    -1,    22,    23,    24,    97,    -1,
-      27,    28,   101,    30,    -1,    -1,    -1,    -1,    -1,    -1,
+      72,    -1,    -1,    -1,    -1,    -1,    -1,    79,    80,    81,
+      82,    83,    12,    13,    14,    15,    -1,    -1,    -1,    -1,
+      92,    93,    -1,    23,    24,    25,    98,    -1,    28,    29,
+     102,    31,    -1,    -1,    -1,    -1,    -1,    -1,    38,    -1,
+      -1,    -1,    -1,    -1,    -1,    45,    -1,    47,    -1,    49,
+      -1,    51,    12,    13,    14,    15,    -1,    -1,    -1,    -1,
+      -1,    -1,    62,    23,    24,    25,    -1,    -1,    28,    29,
+      -1,    31,    72,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+      80,    81,    82,    83,    -1,    -1,    -1,    -1,    -1,    49,
+      -1,    51,    92,    93,    -1,    -1,    -1,    -1,    98,    -1,
+      -1,    -1,   102,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    72,    -1,    -1,    -1,    -1,    -1,    -1,    79,
+      80,    81,    82,    83,    12,    13,    14,    15,    -1,    -1,
+      -1,    -1,    92,    93,    -1,    23,    24,    25,    98,    -1,
+      28,    29,   102,    31,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    48,    -1,    50,    11,    12,    13,    14,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    22,    23,    24,    -1,    -1,
-      27,    28,    -1,    30,    71,    -1,    -1,    -1,    -1,    -1,
-      -1,    78,    79,    80,    81,    82,    -1,    -1,    -1,    -1,
-      -1,    48,    -1,    50,    91,    92,    -1,    -1,    -1,    -1,
-      97,    -1,    -1,    -1,   101,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,    -1,    -1,
-      -1,    78,    79,    80,    81,    82,    11,    12,    13,    14,
-      -1,    -1,    -1,    -1,    91,    92,    -1,    22,    23,    24,
-      97,    -1,    27,    28,   101,    30,    -1,    -1,    -1,    -1,
+      -1,    49,    -1,    51,    12,    13,    14,    15,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    23,    24,    25,    -1,    -1,
+      28,    29,    -1,    31,    72,    -1,    -1,    -1,    -1,    -1,
+      -1,    79,    80,    81,    82,    83,    -1,    -1,    -1,    -1,
+      -1,    49,    -1,    51,    92,    93,    -1,    -1,    -1,    -1,
+      98,    -1,    -1,    -1,   102,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,    -1,    -1,
+      -1,    79,    80,    81,    82,    83,    12,    13,    14,    15,
+      -1,    -1,    -1,    -1,    92,    93,    -1,    23,    24,    25,
+      98,    -1,    28,    29,   102,    31,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    48,    -1,    50,    11,    12,    13,    14,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    22,    23,    24,
-      -1,    -1,    27,    28,    -1,    30,    71,    -1,    -1,    -1,
-      -1,    -1,    -1,    78,    79,    80,    81,    82,    -1,    -1,
-      -1,    -1,    -1,    48,    -1,    50,    91,    92,    -1,    -1,
-      -1,    -1,    97,    -1,    -1,    -1,   101,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    71,    -1,    -1,    -1,
-      -1,    41,    -1,    78,    79,    80,    81,    82,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    91,    92,    -1,    -1,
-      -1,    -1,    97,    63,    64,    -1,   101,    -1,    68,    69,
-      70,    -1,    72,    73,    74,    75,    76,    77,    -1,    46,
-      -1,    -1,    -1,    -1,    -1,    52,    -1,    -1,    -1,    -1,
-      90,    91,    92,    93,    94,    -1,    63,    64,    -1,    99,
-     100,    68,    69,    70,    -1,    72,    -1,    -1,    75,    76,
-      77,    -1,    46,    -1,    -1,    -1,    -1,    -1,    52,    -1,
-      -1,    -1,    -1,    90,    91,    92,    93,    94,    -1,    63,
-      64,    -1,    99,   100,    68,    69,    70,    -1,    72,    -1,
-      -1,    75,    76,    77,    -1,    46,    -1,    -1,    -1,    -1,
-      -1,    52,    -1,    -1,    -1,    -1,    90,    91,    92,    93,
-      94,    -1,    63,    64,    -1,    99,   100,    68,    69,    70,
-      -1,    72,    -1,    -1,    75,    76,    77,    -1,    46,    -1,
-      -1,    -1,    -1,    -1,    52,    -1,    -1,    -1,    -1,    90,
-      91,    92,    93,    94,    -1,    63,    64,    -1,    99,   100,
-      68,    69,    70,    -1,    72,    -1,    -1,    75,    76,    77,
-      -1,    46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    90,    91,    92,    93,    94,    -1,    63,    64,
-      -1,    99,   100,    68,    69,    70,    -1,    72,    -1,    -1,
-      75,    76,    77,    -1,    46,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    90,    91,    92,    93,    94,
-      -1,    63,    64,    -1,    99,   100,    68,    69,    70,    -1,
-      72,    -1,    -1,    75,    76,    77,    -1,    46,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,    91,
-      92,    93,    94,    -1,    63,    64,    -1,    99,   100,    68,
-      69,    70,    -1,    72,    -1,    -1,    75,    76,    77,    -1,
-      46,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    90,    91,    92,    93,    94,    -1,    63,    64,    -1,
-      99,   100,    68,    69,    70,    -1,    72,    -1,    -1,    75,
-      76,    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    52,
-      -1,    -1,    -1,    -1,    90,    91,    92,    93,    94,    -1,
-      63,    64,    -1,    99,   100,    68,    69,    70,    -1,    72,
-      -1,    -1,    75,    76,    77,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    52,    -1,    -1,    -1,    90,    91,    92,
-      93,    94,    -1,    96,    63,    64,    99,   100,    -1,    68,
-      69,    70,    -1,    72,    -1,    -1,    75,    76,    77,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    54,    -1,
-      89,    90,    91,    92,    93,    94,    -1,    63,    64,    -1,
-      99,   100,    68,    69,    70,    -1,    72,    -1,    -1,    75,
-      76,    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    90,    91,    92,    93,    94,    -1,
-      63,    64,    -1,    99,   100,    68,    69,    70,    -1,    72,
-      -1,    -1,    75,    76,    77,    -1,    -1,    -1,    -1,    -1,
-      83,    84,    -1,    -1,    -1,    -1,    -1,    90,    91,    92,
-      93,    94,    -1,    63,    64,    -1,    99,   100,    68,    69,
-      70,    -1,    72,    -1,    -1,    75,    76,    77,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    89,
-      90,    91,    92,    93,    94,    -1,    63,    64,    98,    99,
-     100,    68,    69,    70,    -1,    72,    -1,    -1,    75,    76,
-      77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    90,    91,    92,    93,    94,    -1,    63,
-      64,    98,    99,   100,    68,    69,    70,    -1,    72,    -1,
-      -1,    75,    76,    77,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    89,    90,    91,    92,    93,
-      94,    -1,    63,    64,    -1,    99,   100,    68,    69,    70,
-      -1,    72,    -1,    -1,    75,    76,    77,    -1,    -1,    -1,
+      -1,    -1,    -1,    49,    -1,    51,    12,    13,    14,    15,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    23,    24,    25,
+      -1,    -1,    28,    29,    -1,    31,    72,    -1,    -1,    -1,
+      -1,    -1,    -1,    79,    80,    81,    82,    83,    -1,    -1,
+      -1,    -1,    -1,    49,    -1,    51,    92,    93,    -1,    -1,
+      -1,    -1,    98,    -1,    -1,    -1,   102,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    72,    -1,    -1,    -1,
+      -1,    42,    -1,    79,    80,    81,    82,    83,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    92,    93,    -1,    -1,
+      -1,    -1,    98,    64,    65,    -1,   102,    -1,    69,    70,
+      71,    -1,    73,    74,    75,    76,    77,    78,    -1,    47,
+      -1,    -1,    -1,    -1,    -1,    53,    -1,    -1,    -1,    -1,
+      91,    92,    93,    94,    95,    -1,    64,    65,    -1,   100,
+     101,    69,    70,    71,    -1,    73,    -1,    -1,    76,    77,
+      78,    -1,    47,    -1,    -1,    -1,    -1,    -1,    53,    -1,
+      -1,    -1,    -1,    91,    92,    93,    94,    95,    -1,    64,
+      65,    -1,   100,   101,    69,    70,    71,    -1,    73,    -1,
+      -1,    76,    77,    78,    -1,    47,    -1,    -1,    -1,    -1,
+      -1,    53,    -1,    -1,    -1,    -1,    91,    92,    93,    94,
+      95,    -1,    64,    65,    -1,   100,   101,    69,    70,    71,
+      -1,    73,    -1,    -1,    76,    77,    78,    -1,    47,    -1,
+      -1,    -1,    -1,    -1,    53,    -1,    -1,    -1,    -1,    91,
+      92,    93,    94,    95,    -1,    64,    65,    -1,   100,   101,
+      69,    70,    71,    -1,    73,    -1,    -1,    76,    77,    78,
+      -1,    47,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    91,    92,    93,    94,    95,    -1,    64,    65,
+      -1,   100,   101,    69,    70,    71,    -1,    73,    -1,    -1,
+      76,    77,    78,    -1,    47,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    91,    92,    93,    94,    95,
+      -1,    64,    65,    -1,   100,   101,    69,    70,    71,    -1,
+      73,    -1,    -1,    76,    77,    78,    -1,    47,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,    92,
+      93,    94,    95,    -1,    64,    65,    -1,   100,   101,    69,
+      70,    71,    -1,    73,    -1,    -1,    76,    77,    78,    -1,
+      47,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    91,    92,    93,    94,    95,    -1,    64,    65,    -1,
+     100,   101,    69,    70,    71,    -1,    73,    -1,    -1,    76,
+      77,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    53,
+      -1,    -1,    -1,    -1,    91,    92,    93,    94,    95,    -1,
+      64,    65,    -1,   100,   101,    69,    70,    71,    -1,    73,
+      -1,    -1,    76,    77,    78,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    53,    -1,    -1,    -1,    91,    92,    93,
+      94,    95,    -1,    97,    64,    65,   100,   101,    -1,    69,
+      70,    71,    -1,    73,    -1,    -1,    76,    77,    78,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    55,    -1,
+      90,    91,    92,    93,    94,    95,    -1,    64,    65,    -1,
+     100,   101,    69,    70,    71,    -1,    73,    -1,    -1,    76,
+      77,    78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    91,    92,    93,    94,    95,    -1,
+      64,    65,    -1,   100,   101,    69,    70,    71,    -1,    73,
+      -1,    -1,    76,    77,    78,    -1,    -1,    -1,    -1,    -1,
+      84,    85,    -1,    -1,    -1,    -1,    -1,    91,    92,    93,
+      94,    95,    -1,    64,    65,    -1,   100,   101,    69,    70,
+      71,    -1,    73,    -1,    -1,    76,    77,    78,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    90,
-      91,    92,    93,    94,    -1,    -1,    -1,    -1,    99,   100
+      91,    92,    93,    94,    95,    -1,    64,    65,    99,   100,
+     101,    69,    70,    71,    -1,    73,    -1,    -1,    76,    77,
+      78,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    91,    92,    93,    94,    95,    -1,    64,
+      65,    99,   100,   101,    69,    70,    71,    -1,    73,    -1,
+      -1,    76,    77,    78,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    90,    91,    92,    93,    94,
+      95,    -1,    64,    65,    -1,   100,   101,    69,    70,    71,
+      -1,    73,    -1,    -1,    76,    77,    78,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    91,
+      92,    93,    94,    95,    -1,    -1,    -1,    -1,   100,   101
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
    symbol of state STATE-NUM.  */
 static const yytype_uint8 yystos[] =
 {
-       0,     1,    11,    12,    13,    14,    16,    17,    18,    19,
-      20,    22,    23,    24,    27,    28,    30,    32,    36,    38,
-      39,    40,    43,    48,    49,    50,    53,    57,    58,    59,
-      60,    62,    71,    78,    79,    80,    81,    82,    85,    86,
-      87,    88,    91,    92,    97,   101,   105,   107,   108,   109,
-     110,   111,   118,   119,   120,   125,   126,   127,   129,   133,
-     136,   138,   145,    96,   106,    27,    48,   127,   127,   127,
-      97,   127,   147,    27,   127,    97,   147,    97,   147,   137,
-      49,    27,   130,    37,    42,    44,    45,    46,    47,   127,
-     134,   135,    27,   127,    54,    55,    12,    13,    27,    27,
-      27,    27,   127,    61,   134,   135,    27,   132,   127,   127,
-     127,   127,   127,   127,    27,   131,    27,    97,   127,   127,
-     127,   127,   146,     0,   106,    97,    89,    97,   117,   127,
-     109,   127,    63,    64,    68,    69,    70,    72,    75,    76,
-      77,    90,    91,    92,    93,    94,    99,   100,    97,   127,
-     127,   147,   103,   146,   147,   127,   146,   146,   103,   127,
-     127,    44,   135,   139,    41,    73,    74,    27,    52,    89,
-     127,    52,    89,    51,   140,    54,   135,   103,    46,    52,
-      46,    52,    46,    52,    46,    52,    83,    84,   103,   141,
-      27,    98,   102,   103,   107,   117,   127,   117,   127,    51,
-      89,   123,    52,   106,   127,   127,   127,   127,   127,   127,
-     127,   127,   127,   127,   127,   127,   127,   127,   127,   127,
-      98,   127,    98,    98,    27,   127,   122,    26,    27,   128,
-     127,   127,   127,   127,    52,    89,   127,   127,   122,   127,
-      27,   127,   127,   127,   127,   127,   127,   127,   127,   127,
-     127,    27,   122,    98,   103,   127,    98,   123,    98,   106,
-     122,   127,   127,   124,    27,   143,   127,   127,   127,   143,
-      46,    46,    46,    46,   142,   146,   124,    33,    52,   124,
-     109,   106,   110,   123,   103,   106,   106,   127,   127,   127,
-     127,   143,    98,   123,    52,   127,   123,   123,    31,    27,
-     103,   144,   144,   106,    31,   127,   123,    31,    56,   122,
-      35,    56,   114,   115,   121,    27,   124,   124,   144,   123,
-     124,   124,   113,   114,   116,   121,   122,   115,   123,   117,
-     124,   124,   123,   123,   116,   123,   117,   109,    56,   112,
-      51,    31,   123,    31,    31,    31,    51,   123,   122,   123,
-     122,    31,   122,   109,   110,   124,   123,   123
+       0,     1,    12,    13,    14,    15,    17,    18,    19,    20,
+      21,    23,    24,    25,    28,    29,    31,    33,    37,    39,
+      40,    41,    44,    49,    50,    51,    54,    58,    59,    60,
+      61,    63,    72,    79,    80,    81,    82,    83,    86,    87,
+      88,    89,    92,    93,    98,   102,   106,   108,   109,   110,
+     111,   112,   119,   120,   121,   126,   127,   128,   130,   134,
+     137,   139,   146,    97,   107,    28,    49,   128,   128,   128,
+      98,   128,   148,    28,   128,    98,   148,    98,   148,   138,
+      50,    28,   131,    38,    43,    45,    46,    47,    48,   128,
+     135,   136,    28,   128,    55,    56,    13,    14,    28,    28,
+      28,    28,   128,    62,   135,   136,    28,   133,   128,   128,
+     128,   128,   128,   128,    28,   132,    28,    98,   128,   128,
+     128,   128,   147,     0,   107,    98,    90,    98,   118,   128,
+     110,   128,    64,    65,    69,    70,    71,    73,    76,    77,
+      78,    91,    92,    93,    94,    95,   100,   101,    98,   128,
+     128,   148,   104,   147,   148,   128,   147,   147,   104,   128,
+     128,    45,   136,   140,    42,    74,    75,    28,    53,    90,
+     128,    53,    90,    52,   141,    55,   136,   104,    47,    53,
+      47,    53,    47,    53,    47,    53,    84,    85,   104,   142,
+      28,    99,   103,   104,   108,   118,   128,   118,   128,    52,
+      90,   124,    53,   107,   128,   128,   128,   128,   128,   128,
+     128,   128,   128,   128,   128,   128,   128,   128,   128,   128,
+      99,   128,    99,    99,    28,   128,   123,    27,    28,   129,
+     128,   128,   128,   128,    53,    90,   128,   128,   123,   128,
+      28,   128,   128,   128,   128,   128,   128,   128,   128,   128,
+     128,    28,   123,    99,   104,   128,    99,   124,    99,   107,
+     123,   128,   128,   125,    28,   144,   128,   128,   128,   144,
+      47,    47,    47,    47,   143,   147,   125,    34,    53,   125,
+     110,   107,   111,   124,   104,   107,   107,   128,   128,   128,
+     128,   144,    99,   124,    53,   128,   124,   124,    32,    28,
+     104,   145,   145,   107,    32,   128,   124,    32,    57,   123,
+      36,    57,   115,   116,   122,    28,   125,   125,   145,   124,
+     125,   125,   114,   115,   117,   122,   123,   116,   124,   118,
+     125,   125,   124,   124,   117,   124,   118,   110,    57,   113,
+      52,    32,   124,    32,    32,    32,    52,   124,   123,   124,
+     123,    32,   123,   110,   111,   125,   124,   124
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -3079,7 +3081,7 @@ yyreduce:
 
 
 /* Line 1267 of yacc.c.  */
-#line 3083 "engines/director/lingo/lingo-gr.cpp"
+#line 3085 "engines/director/lingo/lingo-gr.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 054d55a..fc29598 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -47,84 +47,85 @@
      RECT = 263,
      ARRAY = 264,
      OBJECT = 265,
-     INT = 266,
-     THEENTITY = 267,
-     THEENTITYWITHID = 268,
-     FLOAT = 269,
-     BLTIN = 270,
-     BLTINNOARGS = 271,
-     BLTINNOARGSORONE = 272,
-     BLTINONEARG = 273,
-     BLTINARGLIST = 274,
-     TWOWORDBUILTIN = 275,
-     FBLTIN = 276,
-     FBLTINNOARGS = 277,
-     FBLTINONEARG = 278,
-     FBLTINARGLIST = 279,
-     RBLTIN = 280,
-     RBLTINONEARG = 281,
-     ID = 282,
-     STRING = 283,
-     HANDLER = 284,
-     SYMBOL = 285,
-     ENDCLAUSE = 286,
-     tPLAYACCEL = 287,
-     tDOWN = 288,
-     tELSE = 289,
-     tNLELSIF = 290,
-     tEXIT = 291,
-     tFRAME = 292,
-     tGLOBAL = 293,
-     tGO = 294,
-     tIF = 295,
-     tINTO = 296,
-     tLOOP = 297,
-     tMACRO = 298,
-     tMOVIE = 299,
-     tNEXT = 300,
-     tOF = 301,
-     tPREVIOUS = 302,
-     tPUT = 303,
-     tREPEAT = 304,
-     tSET = 305,
-     tTHEN = 306,
-     tTO = 307,
-     tWHEN = 308,
-     tWITH = 309,
-     tWHILE = 310,
-     tNLELSE = 311,
-     tFACTORY = 312,
-     tMETHOD = 313,
-     tOPEN = 314,
-     tPLAY = 315,
-     tDONE = 316,
-     tINSTANCE = 317,
-     tGE = 318,
-     tLE = 319,
-     tGT = 320,
-     tLT = 321,
-     tEQ = 322,
-     tNEQ = 323,
-     tAND = 324,
-     tOR = 325,
-     tNOT = 326,
-     tMOD = 327,
-     tAFTER = 328,
-     tBEFORE = 329,
-     tCONCAT = 330,
-     tCONTAINS = 331,
-     tSTARTS = 332,
-     tCHAR = 333,
-     tITEM = 334,
-     tLINE = 335,
-     tWORD = 336,
-     tSPRITE = 337,
-     tINTERSECTS = 338,
-     tWITHIN = 339,
-     tTELL = 340,
-     tPROPERTY = 341,
-     tON = 342,
-     tME = 343
+     REFERENCE = 266,
+     INT = 267,
+     THEENTITY = 268,
+     THEENTITYWITHID = 269,
+     FLOAT = 270,
+     BLTIN = 271,
+     BLTINNOARGS = 272,
+     BLTINNOARGSORONE = 273,
+     BLTINONEARG = 274,
+     BLTINARGLIST = 275,
+     TWOWORDBUILTIN = 276,
+     FBLTIN = 277,
+     FBLTINNOARGS = 278,
+     FBLTINONEARG = 279,
+     FBLTINARGLIST = 280,
+     RBLTIN = 281,
+     RBLTINONEARG = 282,
+     ID = 283,
+     STRING = 284,
+     HANDLER = 285,
+     SYMBOL = 286,
+     ENDCLAUSE = 287,
+     tPLAYACCEL = 288,
+     tDOWN = 289,
+     tELSE = 290,
+     tNLELSIF = 291,
+     tEXIT = 292,
+     tFRAME = 293,
+     tGLOBAL = 294,
+     tGO = 295,
+     tIF = 296,
+     tINTO = 297,
+     tLOOP = 298,
+     tMACRO = 299,
+     tMOVIE = 300,
+     tNEXT = 301,
+     tOF = 302,
+     tPREVIOUS = 303,
+     tPUT = 304,
+     tREPEAT = 305,
+     tSET = 306,
+     tTHEN = 307,
+     tTO = 308,
+     tWHEN = 309,
+     tWITH = 310,
+     tWHILE = 311,
+     tNLELSE = 312,
+     tFACTORY = 313,
+     tMETHOD = 314,
+     tOPEN = 315,
+     tPLAY = 316,
+     tDONE = 317,
+     tINSTANCE = 318,
+     tGE = 319,
+     tLE = 320,
+     tGT = 321,
+     tLT = 322,
+     tEQ = 323,
+     tNEQ = 324,
+     tAND = 325,
+     tOR = 326,
+     tNOT = 327,
+     tMOD = 328,
+     tAFTER = 329,
+     tBEFORE = 330,
+     tCONCAT = 331,
+     tCONTAINS = 332,
+     tSTARTS = 333,
+     tCHAR = 334,
+     tITEM = 335,
+     tLINE = 336,
+     tWORD = 337,
+     tSPRITE = 338,
+     tINTERSECTS = 339,
+     tWITHIN = 340,
+     tTELL = 341,
+     tPROPERTY = 342,
+     tON = 343,
+     tME = 344
    };
 #endif
 /* Tokens.  */
@@ -136,84 +137,85 @@
 #define RECT 263
 #define ARRAY 264
 #define OBJECT 265
-#define INT 266
-#define THEENTITY 267
-#define THEENTITYWITHID 268
-#define FLOAT 269
-#define BLTIN 270
-#define BLTINNOARGS 271
-#define BLTINNOARGSORONE 272
-#define BLTINONEARG 273
-#define BLTINARGLIST 274
-#define TWOWORDBUILTIN 275
-#define FBLTIN 276
-#define FBLTINNOARGS 277
-#define FBLTINONEARG 278
-#define FBLTINARGLIST 279
-#define RBLTIN 280
-#define RBLTINONEARG 281
-#define ID 282
-#define STRING 283
-#define HANDLER 284
-#define SYMBOL 285
-#define ENDCLAUSE 286
-#define tPLAYACCEL 287
-#define tDOWN 288
-#define tELSE 289
-#define tNLELSIF 290
-#define tEXIT 291
-#define tFRAME 292
-#define tGLOBAL 293
-#define tGO 294
-#define tIF 295
-#define tINTO 296
-#define tLOOP 297
-#define tMACRO 298
-#define tMOVIE 299
-#define tNEXT 300
-#define tOF 301
-#define tPREVIOUS 302
-#define tPUT 303
-#define tREPEAT 304
-#define tSET 305
-#define tTHEN 306
-#define tTO 307
-#define tWHEN 308
-#define tWITH 309
-#define tWHILE 310
-#define tNLELSE 311
-#define tFACTORY 312
-#define tMETHOD 313
-#define tOPEN 314
-#define tPLAY 315
-#define tDONE 316
-#define tINSTANCE 317
-#define tGE 318
-#define tLE 319
-#define tGT 320
-#define tLT 321
-#define tEQ 322
-#define tNEQ 323
-#define tAND 324
-#define tOR 325
-#define tNOT 326
-#define tMOD 327
-#define tAFTER 328
-#define tBEFORE 329
-#define tCONCAT 330
-#define tCONTAINS 331
-#define tSTARTS 332
-#define tCHAR 333
-#define tITEM 334
-#define tLINE 335
-#define tWORD 336
-#define tSPRITE 337
-#define tINTERSECTS 338
-#define tWITHIN 339
-#define tTELL 340
-#define tPROPERTY 341
-#define tON 342
-#define tME 343
+#define REFERENCE 266
+#define INT 267
+#define THEENTITY 268
+#define THEENTITYWITHID 269
+#define FLOAT 270
+#define BLTIN 271
+#define BLTINNOARGS 272
+#define BLTINNOARGSORONE 273
+#define BLTINONEARG 274
+#define BLTINARGLIST 275
+#define TWOWORDBUILTIN 276
+#define FBLTIN 277
+#define FBLTINNOARGS 278
+#define FBLTINONEARG 279
+#define FBLTINARGLIST 280
+#define RBLTIN 281
+#define RBLTINONEARG 282
+#define ID 283
+#define STRING 284
+#define HANDLER 285
+#define SYMBOL 286
+#define ENDCLAUSE 287
+#define tPLAYACCEL 288
+#define tDOWN 289
+#define tELSE 290
+#define tNLELSIF 291
+#define tEXIT 292
+#define tFRAME 293
+#define tGLOBAL 294
+#define tGO 295
+#define tIF 296
+#define tINTO 297
+#define tLOOP 298
+#define tMACRO 299
+#define tMOVIE 300
+#define tNEXT 301
+#define tOF 302
+#define tPREVIOUS 303
+#define tPUT 304
+#define tREPEAT 305
+#define tSET 306
+#define tTHEN 307
+#define tTO 308
+#define tWHEN 309
+#define tWITH 310
+#define tWHILE 311
+#define tNLELSE 312
+#define tFACTORY 313
+#define tMETHOD 314
+#define tOPEN 315
+#define tPLAY 316
+#define tDONE 317
+#define tINSTANCE 318
+#define tGE 319
+#define tLE 320
+#define tGT 321
+#define tLT 322
+#define tEQ 323
+#define tNEQ 324
+#define tAND 325
+#define tOR 326
+#define tNOT 327
+#define tMOD 328
+#define tAFTER 329
+#define tBEFORE 330
+#define tCONCAT 331
+#define tCONTAINS 332
+#define tSTARTS 333
+#define tCHAR 334
+#define tITEM 335
+#define tLINE 336
+#define tWORD 337
+#define tSPRITE 338
+#define tINTERSECTS 339
+#define tWITHIN 340
+#define tTELL 341
+#define tPROPERTY 342
+#define tON 343
+#define tME 344
 
 
 
@@ -231,7 +233,7 @@ typedef union YYSTYPE
 	Common::Array<double> *arr;
 }
 /* Line 1529 of yacc.c.  */
-#line 235 "engines/director/lingo/lingo-gr.hpp"
+#line 237 "engines/director/lingo/lingo-gr.hpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index 4bbbbcd..86f8743 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -87,7 +87,7 @@ void checkEnd(Common::String *token, const char *expect, bool required) {
 }
 
 %token UNARY
-%token CASTREF VOID VAR POINT RECT ARRAY OBJECT
+%token CASTREF VOID VAR POINT RECT ARRAY OBJECT REFERENCE
 %token<i> INT
 %token<e> THEENTITY THEENTITYWITHID
 %token<f> FLOAT


Commit: d4a718bf8407e92b3866343a12035891d92d78b8
    https://github.com/scummvm/scummvm/commit/d4a718bf8407e92b3866343a12035891d92d78b8
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-02-12T11:58:19+01:00

Commit Message:
DIRECTOR: Lingo: Implemented \xC2 continuation symbol support

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


diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index 995faf6..c9a7be7 100644
--- a/engines/director/lingo/lingo-lex.cpp
+++ b/engines/director/lingo/lingo-lex.cpp
@@ -364,8 +364,8 @@ static void yy_fatal_error (yyconst char msg[]  );
 	*yy_cp = '\0'; \
 	(yy_c_buf_p) = yy_cp;
 
-#define YY_NUM_RULES 72
-#define YY_END_OF_BUFFER 73
+#define YY_NUM_RULES 73
+#define YY_END_OF_BUFFER 74
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -373,37 +373,38 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[271] =
+static yyconst flex_int16_t yy_accept[273] =
     {   0,
-        0,    0,   73,   71,    3,   69,   69,   71,   71,   71,
-       68,   68,   68,   67,   68,   68,   65,   65,   65,   65,
-       65,   65,   65,   65,   65,   65,   65,   65,   65,   65,
-       65,   65,   65,   65,    2,    2,    3,   69,    0,    0,
-        0,    0,    0,   70,    4,   64,    1,   66,   67,   63,
-       61,   62,   65,   65,   65,   65,   65,   65,   65,   65,
-       65,   65,   65,   65,   65,   22,   12,   65,   65,   65,
-       65,   65,   65,   65,   65,   65,   35,   36,   65,   38,
-       65,   65,   65,   65,   65,   65,   65,   65,   65,   54,
-       65,   65,   65,    2,    2,    0,    4,    1,   66,   65,
-
-        6,   65,   65,   65,   65,   65,   65,   16,   65,   65,
-       65,   65,    0,   65,   65,   65,   65,   65,   65,   65,
-       31,   65,   65,   34,   65,   65,   65,   65,   43,   65,
-       45,   65,   65,   65,   65,   65,   65,   65,   65,    0,
-       65,   65,    8,   65,   10,   11,   15,    0,   16,   18,
-       65,   65,   65,    0,   65,   65,   25,   26,   27,   28,
-       65,   65,   65,   33,   37,   39,   65,   65,   65,   65,
-       65,   47,    0,   53,   58,   65,   56,   60,   14,    5,
-       65,   65,   16,   16,   65,   19,   65,   21,   65,   65,
-       29,   65,   32,   65,   65,   65,   65,   65,   65,   52,
-
-       52,   52,   59,   65,    0,    7,   65,   16,   65,   20,
-       65,   65,   30,   65,   65,   65,   44,   55,   46,    0,
-        0,   52,   52,   57,    0,   65,   17,   65,   65,   65,
-       65,   65,    0,    0,    0,    0,   52,   52,   13,    9,
-       23,   65,   65,   41,   42,    0,    0,    0,   52,   52,
-       65,   40,    0,    0,    0,    0,    0,   24,   51,   50,
-       51,    0,    0,    0,    0,    0,    0,   48,   49,    0
+        0,    0,   74,   72,    4,   70,   70,   72,   72,   72,
+       69,   69,   69,   68,   69,   69,   66,   66,   66,   66,
+       66,   66,   66,   66,   66,   66,   66,   66,   66,   66,
+       66,   66,   66,   66,   72,    3,    3,    4,   70,    0,
+        0,    0,    0,    0,   71,    5,   65,    2,   67,   68,
+       64,   62,   63,   66,   66,   66,   66,   66,   66,   66,
+       66,   66,   66,   66,   66,   66,   23,   13,   66,   66,
+       66,   66,   66,   66,   66,   66,   66,   36,   37,   66,
+       39,   66,   66,   66,   66,   66,   66,   66,   66,   66,
+       55,   66,   66,   66,    1,    3,    3,    0,    5,    2,
+
+       67,   66,    7,   66,   66,   66,   66,   66,   66,   17,
+       66,   66,   66,   66,    0,   66,   66,   66,   66,   66,
+       66,   66,   32,   66,   66,   35,   66,   66,   66,   66,
+       44,   66,   46,   66,   66,   66,   66,   66,   66,   66,
+       66,    0,   66,   66,    9,   66,   11,   12,   16,    0,
+       17,   19,   66,   66,   66,    0,   66,   66,   26,   27,
+       28,   29,   66,   66,   66,   34,   38,   40,   66,   66,
+       66,   66,   66,   48,    0,   54,   59,   66,   57,   61,
+       15,    6,   66,   66,   17,   17,   66,   20,   66,   22,
+       66,   66,   30,   66,   33,   66,   66,   66,   66,   66,
+
+       66,   53,   53,   53,   60,   66,    0,    8,   66,   17,
+       66,   21,   66,   66,   31,   66,   66,   66,   45,   56,
+       47,    0,    0,   53,   53,   58,    0,   66,   18,   66,
+       66,   66,   66,   66,    0,    0,    0,    0,   53,   53,
+       14,   10,   24,   66,   66,   42,   43,    0,    0,    0,
+       53,   53,   66,   41,    0,    0,    0,    0,    0,   25,
+       52,   51,   52,    0,    0,    0,    0,    0,    0,   49,
+       50,    0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -428,7 +429,7 @@ static yyconst flex_int32_t yy_ec[256] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        1,    1,    1,   65,    1,    1,    1,    1,    1,    1,
 
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -438,7 +439,7 @@ static yyconst flex_int32_t yy_ec[256] =
         1,    1,    1,    1,    1
     } ;
 
-static yyconst flex_int32_t yy_meta[65] =
+static yyconst flex_int32_t yy_meta[66] =
     {   0,
         1,    2,    3,    3,    2,    1,    1,    1,    1,    1,
         1,    1,    4,    1,    1,    1,    5,    5,    5,    5,
@@ -446,80 +447,80 @@ static yyconst flex_int32_t yy_meta[65] =
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         6,    5,    5,    5,    5,    5,    5,    5,    5,    5,
         5,    5,    5,    5,    5,    5,    5,    5,    5,    5,
-        5,    5,    5,    5
+        5,    5,    5,    5,    1
     } ;
 
-static yyconst flex_int16_t yy_base[282] =
+static yyconst flex_int16_t yy_base[284] =
     {   0,
-        0,   63,  159,  697,   67,   71,   75,   79,  147,    0,
-      697,  133,  126,   54,   70,   94,   65,   67,   65,   61,
-       71,   87,   72,    0,  103,   81,  119,  109,  135,  118,
-       82,  112,  153,  155,  191,  208,  212,  697,  216,  179,
-      224,  119,   99,  697,    0,  697,    0,   88,   95,  697,
-      697,  697,    0,  113,   96,  105,  159,  169,  194,  172,
-      188,  199,  215,  218,  201,   88,    0,  203,  218,  212,
-      212,  224,  213,  226,  211,  216,    0,    0,  223,    0,
-      235,  237,  219,  226,  238,  243,  262,  255,  259,    0,
-      263,  251,  257,  290,  313,  262,    0,    0,   84,  277,
-
-        0,  271,  269,  268,  278,  278,  287,  184,  276,  277,
-      291,  303,  327,  293,  309,  306,  301,  306,  307,  317,
-        0,  317,  309,    0,  316,  308,  312,  319,    0,  330,
-        0,  328,  323,  330,  377,  330,  333,  341,  350,  350,
-      342,  344,    0,  368,    0,    0,    0,  386,    0,    0,
-      357,  368,  375,  364,  380,  367,    0,    0,    0,    0,
-      372,  373,  377,    0,    0,  387,  382,  387,  392,  377,
-      378,    0,  414,    0,    0,  394,  395,    0,  423,    0,
-      400,  406,    0,    0,  402,    0,  411,  697,  410,  408,
-        0,  423,    0,  425,  417,  416,  415,  430,  419,  450,
-
-      465,  476,    0,  432,  478,    0,  435,    0,  447,    0,
-      435,  463,    0,  470,  455,  457,    0,    0,    0,  492,
-      475,  491,  519,    0,  476,  468,    0,  484,  487,  492,
-      483,  478,  531,  502,  513,  514,  538,  545,  697,    0,
-        0,  510,  526,    0,    0,  519,  554,  529,  560,  561,
-      524,    0,  546,  570,  547,  581,  582,    0,  697,  586,
-      697,  593,  552,  598,  567,  603,  604,  605,  613,  697,
-      652,  654,  657,  660,  666,  671,  676,  679,  684,  686,
-      691
+        0,   64,  160,  702,   68,   72,   76,   80,  148,    0,
+      702,  129,  106,   55,   71,   95,   66,   68,   66,   62,
+       72,   88,   73,    0,  104,   82,  120,  110,  136,  119,
+       83,  113,  154,  156,  105,  192,  209,  213,  702,  217,
+      180,  225,  120,  100,  702,    0,  702,    0,   89,  130,
+      702,  702,  702,    0,  114,  108,  155,  181,  178,  195,
+      191,  189,  210,  217,  220,  202,   89,    0,  205,  220,
+      214,  214,  226,  215,  232,  212,  219,    0,    0,  226,
+        0,  238,  252,  224,  234,  241,  246,  267,  254,  264,
+        0,  265,  253,  259,  702,  292,  315,  265,    0,    0,
+
+       85,  280,    0,  274,  274,  273,  281,  284,  293,  320,
+      286,  289,  301,  312,  333,  299,  319,  308,  320,  312,
+      313,  320,    0,  322,  315,    0,  322,  312,  317,  325,
+        0,  336,    0,  334,  328,  335,  385,  335,  344,  353,
+      359,  360,  350,  356,    0,  374,    0,    0,    0,  185,
+        0,    0,  363,  373,  379,  368,  382,  368,    0,    0,
+        0,    0,  373,  375,  387,    0,    0,  392,  385,  390,
+      395,  380,  383,    0,  418,    0,    0,  405,  403,    0,
+      395,    0,  409,  406,    0,    0,  407,    0,  414,  702,
+      414,  410,    0,  412,    0,  427,  418,  416,  415,  433,
+
+      424,  473,  475,  479,    0,  433,  488,    0,  434,    0,
+      430,    0,  447,  474,    0,  477,  452,  463,    0,    0,
+        0,  495,  483,  497,  499,    0,  486,  471,    0,  493,
+      497,  498,  476,  483,  522,  509,  514,  512,  543,  555,
+      702,    0,    0,  508,  519,    0,    0,  515,  561,  530,
+      567,  578,  534,    0,  538,  584,  550,  589,  593,    0,
+      702,  595,  702,  599,  559,  603,  563,  610,  615,  616,
+      620,  702,  657,  659,  662,  665,  671,  676,  681,  684,
+      689,  691,  696
     } ;
 
-static yyconst flex_int16_t yy_def[282] =
+static yyconst flex_int16_t yy_def[284] =
     {   0,
-      270,    1,  270,  270,  270,  270,  270,  270,  271,  272,
-      270,  270,  270,  270,  270,  270,  273,  273,  273,  273,
-      273,  273,  273,  273,  273,  273,  273,  273,  273,  273,
-      273,  273,  273,  273,  270,  270,  270,  270,  270,  270,
-      270,  270,  271,  270,  274,  270,  275,  270,  270,  270,
-      270,  270,  273,  273,  273,  273,  273,  273,  273,  273,
-      273,  273,  273,  273,  273,  273,  273,  273,  273,  273,
-      273,  273,  273,  273,  273,  273,  273,  273,  273,  273,
-      273,  273,  273,  273,  273,  273,  273,  273,  273,  273,
-      273,  273,  273,  270,  270,  270,  274,  275,  270,  273,
-
-      273,  273,  273,  273,  273,  273,  273,  276,  273,  273,
-      273,  273,  270,  273,  273,  273,  273,  273,  273,  273,
-      273,  273,  273,  273,  273,  273,  273,  273,  273,  273,
-      273,  273,  273,  273,  273,  273,  273,  273,  273,  270,
-      273,  273,  273,  273,  273,  273,  273,  277,  278,  273,
-      273,  273,  273,  270,  273,  273,  273,  273,  273,  273,
-      273,  273,  273,  273,  273,  273,  273,  273,  273,  273,
-      273,  273,  279,  273,  273,  273,  273,  273,  270,  273,
-      273,  273,  280,  278,  273,  273,  273,  270,  273,  273,
-      273,  273,  273,  273,  273,  273,  273,  273,  273,  279,
-
-      279,  279,  273,  273,  270,  273,  273,  280,  273,  273,
-      273,  273,  273,  273,  273,  273,  273,  273,  273,  270,
-      270,  279,  279,  273,  270,  273,  273,  273,  273,  273,
-      273,  273,  270,  270,  270,  270,  279,  279,  270,  273,
-      273,  273,  273,  273,  273,  270,  270,  270,  279,  279,
-      273,  273,  270,  281,  270,  270,  270,  273,  270,  281,
-      270,  270,  270,  270,  270,  270,  270,  281,  281,    0,
-      270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
-      270
+      272,    1,  272,  272,  272,  272,  272,  272,  273,  274,
+      272,  272,  272,  272,  272,  272,  275,  275,  275,  275,
+      275,  275,  275,  275,  275,  275,  275,  275,  275,  275,
+      275,  275,  275,  275,  272,  272,  272,  272,  272,  272,
+      272,  272,  272,  273,  272,  276,  272,  277,  272,  272,
+      272,  272,  272,  275,  275,  275,  275,  275,  275,  275,
+      275,  275,  275,  275,  275,  275,  275,  275,  275,  275,
+      275,  275,  275,  275,  275,  275,  275,  275,  275,  275,
+      275,  275,  275,  275,  275,  275,  275,  275,  275,  275,
+      275,  275,  275,  275,  272,  272,  272,  272,  276,  277,
+
+      272,  275,  275,  275,  275,  275,  275,  275,  275,  278,
+      275,  275,  275,  275,  272,  275,  275,  275,  275,  275,
+      275,  275,  275,  275,  275,  275,  275,  275,  275,  275,
+      275,  275,  275,  275,  275,  275,  275,  275,  275,  275,
+      275,  272,  275,  275,  275,  275,  275,  275,  275,  279,
+      280,  275,  275,  275,  275,  272,  275,  275,  275,  275,
+      275,  275,  275,  275,  275,  275,  275,  275,  275,  275,
+      275,  275,  275,  275,  281,  275,  275,  275,  275,  275,
+      272,  275,  275,  275,  282,  280,  275,  275,  275,  272,
+      275,  275,  275,  275,  275,  275,  275,  275,  275,  275,
+
+      275,  281,  281,  281,  275,  275,  272,  275,  275,  282,
+      275,  275,  275,  275,  275,  275,  275,  275,  275,  275,
+      275,  272,  272,  281,  281,  275,  272,  275,  275,  275,
+      275,  275,  275,  275,  272,  272,  272,  272,  281,  281,
+      272,  275,  275,  275,  275,  275,  275,  272,  272,  272,
+      281,  281,  275,  275,  272,  283,  272,  272,  272,  275,
+      272,  283,  272,  272,  272,  272,  272,  272,  272,  283,
+      283,    0,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  272
     } ;
 
-static yyconst flex_int16_t yy_nxt[762] =
+static yyconst flex_int16_t yy_nxt[768] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,   11,
        13,    4,   14,   15,   11,   16,   17,   18,   19,   20,
@@ -527,87 +528,87 @@ static yyconst flex_int16_t yy_nxt[762] =
        30,   24,   31,   32,   33,   24,   24,   34,   24,   24,
        24,   17,   18,   19,   20,   21,   22,   23,   24,   25,
        26,   27,   28,   29,   30,   24,   31,   32,   33,   24,
-       24,   34,   24,   24,   35,   48,   49,   36,   37,   38,
-       38,   39,   40,   41,   41,   40,   40,   41,   41,   40,
-       39,   38,   38,   39,   50,   51,   54,   56,   57,  113,
-       59,   42,  113,   55,   58,   42,   99,   60,   65,   61,
-
-       99,   66,   84,   63,   44,   70,   48,   49,   52,   62,
-       71,   54,   56,   57,   59,  101,   42,   55,   58,   64,
-       42,   60,   65,   61,   67,   66,  102,   84,   63,   75,
-       70,   68,   85,   62,   71,   72,   47,   69,   76,   73,
-      101,   46,   86,   64,   81,   96,   87,  100,   74,   67,
-       82,  102,   44,   83,   75,   68,   77,   85,  270,  270,
-       72,   69,   76,   78,   73,   79,   86,   80,   81,   96,
-       87,  100,   74,   88,   82,  103,   89,   83,   91,   92,
-       40,   77,   90,   40,   93,  148,  270,   78,  148,   79,
-      270,   80,   94,   38,   38,   95,   53,  104,   88,   42,
-
-      103,   89,  270,   91,   92,  107,   90,  108,   93,   95,
-       38,   38,   95,   37,   38,   38,   39,   39,   38,   38,
-       39,  104,  105,  109,   42,   40,   41,   41,   40,  107,
-      112,  106,  108,  110,  111,  270,  114,  115,  116,  270,
-      117,  118,  119,  125,   42,  121,  105,  120,  109,  123,
-      124,  126,  270,  129,  112,  106,  130,  127,  110,  111,
-      114,  115,  122,  116,  117,  118,  128,  119,  125,   42,
-      121,  120,  131,  123,  124,  132,  126,  129,  133,  135,
-      130,  134,  127,  136,  270,  138,  122,  137,  270,  139,
-      128,   94,   38,   38,   95,  140,  131,  141,  145,  132,
-
-      142,  143,  144,  133,  135,  134,  146,  147,  136,  138,
-      150,  151,  137,  139,   95,   38,   38,   95,  152,  140,
-      153,  159,  141,  145,  142,  143,  144,  155,  113,  156,
-      146,  113,  147,  158,  150,  151,  160,  270,  157,  161,
-      162,  163,  152,  164,  165,  153,  159,  166,  167,  168,
-      169,  155,  170,  270,  156,  171,  172,  158,  175,  176,
-      160,  154,  157,  161,  177,  162,  163,  164,  165,  178,
-      179,  166,  167,  168,  180,  169,  181,  170,  173,  171,
-      172,  173,  175,  176,  182,  154,  185,  148,  186,  177,
-      148,  187,  270,  188,  178,  179,  189,  193,  180,  190,
-
-      181,  191,  192,  194,  270,  174,  195,  196,  197,  182,
-      185,  198,  199,  186,  203,  173,  187,  188,  173,  204,
-      206,  189,  193,  190,  205,  191,  192,  205,  194,  174,
-      207,  195,  196,  197,  209,  198,  199,  210,  211,  203,
-      201,  212,  213,  214,  204,  206,  215,  202,  216,  217,
-      218,  220,  219,  228,  220,  207,  270,  270,  209,  221,
-      224,  210,  211,  226,  201,  212,  220,  213,  214,  220,
-      215,  202,  216,  217,  221,  218,  219,  220,  228,  205,
-      220,  222,  205,  229,  224,  221,  227,  226,  230,  270,
-      231,  232,  220,  233,  234,  220,  233,  239,  270,  270,
-
-      221,  240,  225,  270,  241,  242,  222,  223,  229,  236,
-      227,  234,  243,  230,  231,  232,  244,  245,  246,  234,
-      220,  235,  239,  220,  237,  240,  236,  225,  221,  241,
-      242,  223,  233,  236,  247,  233,  234,  243,  248,  220,
-      244,  245,  220,  246,  251,  235,  220,  221,  237,  220,
-      236,  238,  252,  253,  221,  254,  255,  258,  254,  247,
-      235,  256,  257,  248,  256,  257,  259,  261,  251,  221,
-      221,  254,  249,  266,  254,  238,  252,  253,  270,  250,
-      255,  258,  262,  264,  235,  262,  264,  270,  267,  270,
-      270,  259,  261,  270,  262,  270,  249,  262,  266,  264,
-
-      234,  234,  264,  250,  268,  269,  268,  268,  269,  268,
-      263,  265,  270,  267,  269,  236,  236,  269,  270,  270,
-      270,  270,  263,  270,  270,  234,  234,  265,  270,  270,
-      270,  270,  270,  270,  263,  265,  270,  270,  270,  236,
-      236,  270,  270,  270,  270,  270,  263,  270,  270,  270,
-      270,  265,   43,   43,  270,   43,   43,   43,   45,   45,
-       53,   53,   53,   97,   97,   97,   98,   98,  270,   98,
-       98,   98,  149,  270,  149,  149,  149,  183,  270,  270,
-      183,  183,  184,  184,  184,  200,  270,  270,  200,  208,
-      208,  208,  260,  270,  270,  260,    3,  270,  270,  270,
-
-      270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
-      270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
-      270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
-      270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
-      270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
-      270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
-      270
+       24,   34,   24,   24,   35,   36,   49,   50,   37,   38,
+       39,   39,   40,   41,   42,   42,   41,   41,   42,   42,
+       41,   40,   39,   39,   40,   51,   52,   55,   57,   58,
+      115,   60,   43,  115,   56,   59,   43,  101,   61,   66,
+
+       62,  101,   67,   85,   64,   45,   71,   95,   95,   53,
+       63,   72,   55,   57,   58,   60,   48,   43,   56,   59,
+       65,   43,   61,   66,   62,   68,   67,  103,   85,   64,
+       76,   71,   69,   86,   63,   72,   73,   47,   70,   77,
+       74,   49,   50,   87,   65,   82,   98,   88,  102,   75,
+       68,   83,  103,   45,   84,   76,   69,   78,   86,  272,
+      272,   73,   70,   77,   79,   74,   80,   87,   81,   82,
+       98,   88,  102,   75,   89,   83,  104,   90,   84,   92,
+       93,   41,   78,   91,   41,   94,  150,  272,   79,  150,
+       80,  272,   81,   96,   39,   39,   97,  105,  272,   89,
+
+       43,  104,   90,  272,   92,   93,  106,   91,  110,   94,
+       97,   39,   39,   97,   38,   39,   39,   40,   40,   39,
+       39,   40,  105,  107,  109,   43,   41,   42,   42,   41,
+      106,  114,  108,  110,  111,  112,  113,  272,  116,  117,
+      118,  272,  119,  120,  121,   43,  127,  107,  109,  122,
+      125,  123,  272,  126,  128,  114,  108,  272,  131,  111,
+      112,  113,  116,  117,  132,  118,  119,  120,  124,  121,
+       43,  127,  129,  122,  125,  133,  123,  126,  134,  128,
+      136,  130,  131,  135,  137,  138,  272,  140,  132,  139,
+      272,  141,  124,   96,   39,   39,   97,  129,  142,  133,
+
+      143,  147,  134,  144,  136,  130,  145,  146,  135,  137,
+      138,  140,  148,  149,  139,  141,   97,   39,   39,   97,
+      152,  150,  142,  153,  150,  143,  147,  144,  154,  155,
+      145,  146,   54,  157,  115,  160,  148,  115,  149,  158,
+      161,  272,  162,  164,  152,  163,  165,  153,  159,  166,
+      167,  168,  154,  169,  155,  170,  171,  157,  172,  160,
+      173,  174,  272,  177,  158,  161,  162,  156,  164,  163,
+      178,  165,  159,  166,  167,  168,  179,  169,  180,  170,
+      181,  171,  182,  172,  173,  174,  175,  177,  183,  175,
+      184,  156,  187,  188,  178,  189,  207,  190,  191,  207,
+
+      192,  179,  193,  180,  194,  181,  182,  195,  196,  197,
+      198,  199,  183,  176,  200,  184,  187,  201,  188,  175,
+      189,  190,  175,  191,  192,  205,  193,  206,  194,  208,
+      209,  215,  195,  196,  197,  198,  199,  176,  200,  211,
+      212,  201,  213,  214,  203,  216,  272,  217,  218,  219,
+      205,  204,  206,  220,  208,  209,  215,  221,  272,  272,
+      272,  226,  228,  211,  212,  230,  213,  214,  203,  229,
+      216,  217,  218,  219,  222,  204,  222,  222,  220,  222,
+      222,  221,  223,  222,  223,  226,  228,  233,  223,  207,
+      230,  224,  207,  229,  231,  232,  235,  234,  222,  235,
+
+      222,  222,  236,  222,  242,  272,  223,  241,  223,  246,
+      225,  233,  227,  243,  236,  244,  224,  238,  245,  231,
+      232,  234,  247,  235,  237,  248,  235,  236,  242,  238,
+      239,  240,  241,  246,  225,  249,  250,  227,  243,  236,
+      244,  238,  253,  245,  222,  254,  247,  222,  237,  255,
+      248,  237,  223,  238,  239,  240,  222,  257,  261,  222,
+      249,  250,  256,  272,  223,  256,  253,  260,  258,  254,
+      263,  258,  272,  255,  272,  237,  223,  251,  272,  259,
+      268,  257,  259,  261,  269,  256,  272,  223,  256,  252,
+      264,  260,  272,  264,  266,  263,  272,  266,  272,  272,
+
+      264,  251,  272,  264,  266,  268,  272,  266,  236,  269,
+      272,  270,  236,  252,  270,  272,  271,  270,  265,  271,
+      270,  271,  267,  238,  271,  272,  272,  238,  265,  272,
+      272,  272,  267,  236,  272,  272,  272,  236,  272,  272,
+      272,  272,  265,  272,  272,  272,  267,  238,  272,  272,
+      272,  238,  265,  272,  272,  272,  267,   44,   44,  272,
+       44,   44,   44,   46,   46,   54,   54,   54,   99,   99,
+       99,  100,  100,  272,  100,  100,  100,  151,  272,  151,
+      151,  151,  185,  272,  272,  185,  185,  186,  186,  186,
+      202,  272,  272,  202,  210,  210,  210,  262,  272,  272,
+
+      262,    3,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  272,  272,  272,  272,  272
     } ;
 
-static yyconst flex_int16_t yy_chk[762] =
+static yyconst flex_int16_t yy_chk[768] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -615,84 +616,84 @@ static yyconst flex_int16_t yy_chk[762] =
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
-        1,    1,    1,    1,    2,   14,   14,    2,    5,    5,
-        5,    5,    6,    6,    6,    6,    7,    7,    7,    7,
-        8,    8,    8,    8,   15,   15,   17,   18,   19,   66,
-       20,    6,   66,   17,   19,    7,   99,   21,   23,   21,
-
-       48,   23,   31,   22,   43,   26,   49,   49,   16,   21,
-       26,   17,   18,   19,   20,   55,    6,   17,   19,   22,
-        7,   21,   23,   21,   25,   23,   56,   31,   22,   28,
-       26,   25,   32,   21,   26,   27,   13,   25,   28,   27,
-       55,   12,   32,   22,   30,   42,   32,   54,   27,   25,
-       30,   56,    9,   30,   28,   25,   29,   32,    3,    0,
-       27,   25,   28,   29,   27,   29,   32,   29,   30,   42,
-       32,   54,   27,   33,   30,   57,   33,   30,   34,   34,
-       40,   29,   33,   40,   34,  108,    0,   29,  108,   29,
-        0,   29,   35,   35,   35,   35,  108,   58,   33,   40,
-
-       57,   33,    0,   34,   34,   60,   33,   61,   34,   36,
-       36,   36,   36,   37,   37,   37,   37,   39,   39,   39,
-       39,   58,   59,   62,   40,   41,   41,   41,   41,   60,
-       65,   59,   61,   63,   64,    0,   68,   68,   69,    0,
-       70,   71,   72,   79,   41,   74,   59,   73,   62,   75,
-       76,   81,    0,   83,   65,   59,   84,   82,   63,   64,
-       68,   68,   74,   69,   70,   71,   82,   72,   79,   41,
-       74,   73,   85,   75,   76,   86,   81,   83,   87,   89,
-       84,   88,   82,   91,    0,   92,   74,   91,    0,   93,
-       82,   94,   94,   94,   94,   96,   85,  100,  105,   86,
-
-      102,  103,  104,   87,   89,   88,  106,  107,   91,   92,
-      109,  110,   91,   93,   95,   95,   95,   95,  111,   96,
-      112,  117,  100,  105,  102,  103,  104,  114,  113,  115,
-      106,  113,  107,  116,  109,  110,  118,    0,  115,  119,
-      120,  122,  111,  123,  125,  112,  117,  126,  127,  128,
-      130,  114,  132,    0,  115,  133,  134,  116,  136,  137,
-      118,  113,  115,  119,  138,  120,  122,  123,  125,  139,
-      140,  126,  127,  128,  141,  130,  142,  132,  135,  133,
-      134,  135,  136,  137,  144,  113,  151,  148,  152,  138,
-      148,  153,    0,  154,  139,  140,  155,  163,  141,  156,
-
-      142,  161,  162,  166,    0,  135,  167,  168,  169,  144,
-      151,  170,  171,  152,  176,  173,  153,  154,  173,  177,
-      181,  155,  163,  156,  179,  161,  162,  179,  166,  135,
-      182,  167,  168,  169,  185,  170,  171,  187,  189,  176,
-      173,  190,  192,  194,  177,  181,  195,  173,  196,  197,
-      198,  200,  199,  211,  200,  182,    0,    0,  185,  200,
-      204,  187,  189,  207,  173,  190,  201,  192,  194,  201,
-      195,  173,  196,  197,  201,  198,  199,  202,  211,  205,
-      202,  201,  205,  212,  204,  202,  209,  207,  214,    0,
-      215,  216,  222,  220,  221,  222,  220,  225,    0,    0,
-
-      222,  226,  205,    0,  228,  229,  201,  202,  212,  221,
-      209,  220,  230,  214,  215,  216,  231,  232,  234,  221,
-      223,  220,  225,  223,  222,  226,  220,  205,  223,  228,
-      229,  202,  233,  221,  235,  233,  220,  230,  236,  237,
-      231,  232,  237,  234,  242,  220,  238,  237,  222,  238,
-      220,  223,  243,  246,  238,  247,  248,  251,  247,  235,
-      233,  249,  250,  236,  249,  250,  253,  255,  242,  249,
-      250,  254,  237,  263,  254,  223,  243,  246,    0,  238,
-      248,  251,  256,  257,  233,  256,  257,  260,  265,    0,
-      260,  253,  255,    0,  262,    0,  237,  262,  263,  264,
-
-      256,  257,  264,  238,  266,  267,  268,  266,  267,  268,
-      256,  257,    0,  265,  269,  256,  257,  269,    0,    0,
-        0,    0,  262,    0,    0,  256,  257,  264,    0,    0,
-        0,    0,    0,    0,  256,  257,    0,    0,    0,  256,
-      257,    0,    0,    0,    0,    0,  262,    0,    0,    0,
-        0,  264,  271,  271,    0,  271,  271,  271,  272,  272,
-      273,  273,  273,  274,  274,  274,  275,  275,    0,  275,
-      275,  275,  276,    0,  276,  276,  276,  277,    0,    0,
-      277,  277,  278,  278,  278,  279,    0,    0,  279,  280,
-      280,  280,  281,    0,    0,  281,  270,  270,  270,  270,
-
-      270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
-      270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
-      270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
-      270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
-      270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
-      270,  270,  270,  270,  270,  270,  270,  270,  270,  270,
-      270
+        1,    1,    1,    1,    1,    2,   14,   14,    2,    5,
+        5,    5,    5,    6,    6,    6,    6,    7,    7,    7,
+        7,    8,    8,    8,    8,   15,   15,   17,   18,   19,
+       67,   20,    6,   67,   17,   19,    7,  101,   21,   23,
+
+       21,   49,   23,   31,   22,   44,   26,   35,   35,   16,
+       21,   26,   17,   18,   19,   20,   13,    6,   17,   19,
+       22,    7,   21,   23,   21,   25,   23,   56,   31,   22,
+       28,   26,   25,   32,   21,   26,   27,   12,   25,   28,
+       27,   50,   50,   32,   22,   30,   43,   32,   55,   27,
+       25,   30,   56,    9,   30,   28,   25,   29,   32,    3,
+        0,   27,   25,   28,   29,   27,   29,   32,   29,   30,
+       43,   32,   55,   27,   33,   30,   57,   33,   30,   34,
+       34,   41,   29,   33,   41,   34,  150,    0,   29,  150,
+       29,    0,   29,   36,   36,   36,   36,   58,    0,   33,
+
+       41,   57,   33,    0,   34,   34,   59,   33,   62,   34,
+       37,   37,   37,   37,   38,   38,   38,   38,   40,   40,
+       40,   40,   58,   60,   61,   41,   42,   42,   42,   42,
+       59,   66,   60,   62,   63,   64,   65,    0,   69,   69,
+       70,    0,   71,   72,   73,   42,   80,   60,   61,   74,
+       76,   75,    0,   77,   82,   66,   60,    0,   84,   63,
+       64,   65,   69,   69,   85,   70,   71,   72,   75,   73,
+       42,   80,   83,   74,   76,   86,   75,   77,   87,   82,
+       89,   83,   84,   88,   90,   92,    0,   93,   85,   92,
+        0,   94,   75,   96,   96,   96,   96,   83,   98,   86,
+
+      102,  107,   87,  104,   89,   83,  105,  106,   88,   90,
+       92,   93,  108,  109,   92,   94,   97,   97,   97,   97,
+      111,  110,   98,  112,  110,  102,  107,  104,  113,  114,
+      105,  106,  110,  116,  115,  118,  108,  115,  109,  117,
+      119,    0,  120,  122,  111,  121,  124,  112,  117,  125,
+      127,  128,  113,  129,  114,  130,  132,  116,  134,  118,
+      135,  136,    0,  138,  117,  119,  120,  115,  122,  121,
+      139,  124,  117,  125,  127,  128,  140,  129,  141,  130,
+      142,  132,  143,  134,  135,  136,  137,  138,  144,  137,
+      146,  115,  153,  154,  139,  155,  181,  156,  157,  181,
+
+      158,  140,  163,  141,  164,  142,  143,  165,  168,  169,
+      170,  171,  144,  137,  172,  146,  153,  173,  154,  175,
+      155,  156,  175,  157,  158,  178,  163,  179,  164,  183,
+      184,  194,  165,  168,  169,  170,  171,  137,  172,  187,
+      189,  173,  191,  192,  175,  196,    0,  197,  198,  199,
+      178,  175,  179,  200,  183,  184,  194,  201,    0,    0,
+        0,  206,  209,  187,  189,  213,  191,  192,  175,  211,
+      196,  197,  198,  199,  202,  175,  203,  202,  200,  203,
+      204,  201,  202,  204,  203,  206,  209,  217,  204,  207,
+      213,  203,  207,  211,  214,  216,  222,  218,  224,  222,
+
+      225,  224,  223,  225,  228,    0,  224,  227,  225,  233,
+      204,  217,  207,  230,  222,  231,  203,  223,  232,  214,
+      216,  218,  234,  235,  222,  236,  235,  223,  228,  222,
+      224,  225,  227,  233,  204,  237,  238,  207,  230,  222,
+      231,  223,  244,  232,  239,  245,  234,  239,  222,  248,
+      236,  235,  239,  222,  224,  225,  240,  250,  255,  240,
+      237,  238,  249,    0,  240,  249,  244,  253,  251,  245,
+      257,  251,    0,  248,    0,  235,  251,  239,    0,  252,
+      265,  250,  252,  255,  267,  256,    0,  252,  256,  240,
+      258,  253,    0,  258,  259,  257,  262,  259,    0,  262,
+
+      264,  239,    0,  264,  266,  265,    0,  266,  258,  267,
+        0,  268,  259,  240,  268,    0,  269,  270,  258,  269,
+      270,  271,  259,  258,  271,    0,    0,  259,  264,    0,
+        0,    0,  266,  258,    0,    0,    0,  259,    0,    0,
+        0,    0,  258,    0,    0,    0,  259,  258,    0,    0,
+        0,  259,  264,    0,    0,    0,  266,  273,  273,    0,
+      273,  273,  273,  274,  274,  275,  275,  275,  276,  276,
+      276,  277,  277,    0,  277,  277,  277,  278,    0,  278,
+      278,  278,  279,    0,    0,  279,  279,  280,  280,  280,
+      281,    0,    0,  281,  282,  282,  282,  283,    0,    0,
+
+      283,  272,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  272,  272,  272,  272,  272,  272,  272,  272,
+      272,  272,  272,  272,  272,  272,  272
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -780,7 +781,7 @@ static int checkImmediate(int token) {
 	return token;
 }
 
-#line 784 "engines/director/lingo/lingo-lex.cpp"
+#line 785 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -966,7 +967,7 @@ YY_DECL
 #line 85 "engines/director/lingo/lingo-lex.l"
 
 
-#line 970 "engines/director/lingo/lingo-lex.cpp"
+#line 971 "engines/director/lingo/lingo-lex.cpp"
 
 	if ( !(yy_init) )
 		{
@@ -1020,13 +1021,13 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 271 )
+				if ( yy_current_state >= 273 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			++yy_cp;
 			}
-		while ( yy_base[yy_current_state] != 697 );
+		while ( yy_base[yy_current_state] != 702 );
 
 yy_find_action:
 		yy_act = yy_accept[yy_current_state];
@@ -1051,85 +1052,91 @@ do_action:	/* This label is used only to access EOF actions. */
 			goto yy_find_action;
 
 case 1:
+/* rule 1 can match eol */
 YY_RULE_SETUP
 #line 87 "engines/director/lingo/lingo-lex.l"
-
+{ g_lingo->_linenumber++; g_lingo->_colnumber = 0; }
 	YY_BREAK
 case 2:
 YY_RULE_SETUP
 #line 88 "engines/director/lingo/lingo-lex.l"
-{ count(); }
+
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
 #line 89 "engines/director/lingo/lingo-lex.l"
-{ count(); return ' '; }
+{ count(); }
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 91 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.s = new Common::String(yytext); return SYMBOL; }	// D3
+#line 90 "engines/director/lingo/lingo-lex.l"
+{ count(); return ' '; }
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 93 "engines/director/lingo/lingo-lex.l"
-{ count(); return tAFTER; }		// D3
+#line 92 "engines/director/lingo/lingo-lex.l"
+{ count(); yylval.s = new Common::String(yytext); return SYMBOL; }	// D3
 	YY_BREAK
 case 6:
 YY_RULE_SETUP
 #line 94 "engines/director/lingo/lingo-lex.l"
-{ count(); return tAND; }
+{ count(); return tAFTER; }		// D3
 	YY_BREAK
 case 7:
 YY_RULE_SETUP
 #line 95 "engines/director/lingo/lingo-lex.l"
-{ count(); return tBEFORE; }	// D3
+{ count(); return tAND; }
 	YY_BREAK
 case 8:
 YY_RULE_SETUP
 #line 96 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCHAR; }		// D3
+{ count(); return tBEFORE; }	// D3
 	YY_BREAK
 case 9:
 YY_RULE_SETUP
 #line 97 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCONTAINS; }
+{ count(); return tCHAR; }		// D3
 	YY_BREAK
 case 10:
 YY_RULE_SETUP
 #line 98 "engines/director/lingo/lingo-lex.l"
-{ count(); return tDONE; }
+{ count(); return tCONTAINS; }
 	YY_BREAK
 case 11:
 YY_RULE_SETUP
 #line 99 "engines/director/lingo/lingo-lex.l"
-{ count(); return tDOWN; }
+{ count(); return tDONE; }
 	YY_BREAK
 case 12:
 YY_RULE_SETUP
 #line 100 "engines/director/lingo/lingo-lex.l"
-{ count(); return tIF; }
+{ count(); return tDOWN; }
 	YY_BREAK
 case 13:
-/* rule 13 can match eol */
 YY_RULE_SETUP
 #line 101 "engines/director/lingo/lingo-lex.l"
-{ countnl(); return tNLELSIF; }
+{ count(); return tIF; }
 	YY_BREAK
 case 14:
 /* rule 14 can match eol */
 YY_RULE_SETUP
 #line 102 "engines/director/lingo/lingo-lex.l"
-{ countnl(); return tNLELSE; }
+{ countnl(); return tNLELSIF; }
 	YY_BREAK
 case 15:
+/* rule 15 can match eol */
 YY_RULE_SETUP
 #line 103 "engines/director/lingo/lingo-lex.l"
-{ count(); return tELSE; }
+{ countnl(); return tNLELSE; }
 	YY_BREAK
 case 16:
 YY_RULE_SETUP
 #line 104 "engines/director/lingo/lingo-lex.l"
+{ count(); return tELSE; }
+	YY_BREAK
+case 17:
+YY_RULE_SETUP
+#line 105 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1142,30 +1149,25 @@ YY_RULE_SETUP
 		return ENDCLAUSE;
 	}
 	YY_BREAK
-case 17:
-YY_RULE_SETUP
-#line 115 "engines/director/lingo/lingo-lex.l"
-{ count(); return tFACTORY; }
-	YY_BREAK
 case 18:
 YY_RULE_SETUP
 #line 116 "engines/director/lingo/lingo-lex.l"
-{ count(); return tEXIT; }
+{ count(); return tFACTORY; }
 	YY_BREAK
 case 19:
 YY_RULE_SETUP
 #line 117 "engines/director/lingo/lingo-lex.l"
-{ count(); return tFRAME; }
+{ count(); return tEXIT; }
 	YY_BREAK
 case 20:
 YY_RULE_SETUP
 #line 118 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGLOBAL; }
+{ count(); return tFRAME; }
 	YY_BREAK
 case 21:
 YY_RULE_SETUP
 #line 119 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGO; }
+{ count(); return tGLOBAL; }
 	YY_BREAK
 case 22:
 YY_RULE_SETUP
@@ -1175,131 +1177,136 @@ YY_RULE_SETUP
 case 23:
 YY_RULE_SETUP
 #line 121 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINSTANCE; }
+{ count(); return tGO; }
 	YY_BREAK
 case 24:
 YY_RULE_SETUP
 #line 122 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTERSECTS; }
+{ count(); return tINSTANCE; }
 	YY_BREAK
 case 25:
 YY_RULE_SETUP
 #line 123 "engines/director/lingo/lingo-lex.l"
-{ count(); return tINTO; }
+{ count(); return tINTERSECTS; }
 	YY_BREAK
 case 26:
 YY_RULE_SETUP
 #line 124 "engines/director/lingo/lingo-lex.l"
-{ count(); return tITEM; }
+{ count(); return tINTO; }
 	YY_BREAK
 case 27:
 YY_RULE_SETUP
 #line 125 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLINE; }
+{ count(); return tITEM; }
 	YY_BREAK
 case 28:
 YY_RULE_SETUP
 #line 126 "engines/director/lingo/lingo-lex.l"
-{ count(); return checkImmediate(tLOOP); }
+{ count(); return tLINE; }
 	YY_BREAK
 case 29:
 YY_RULE_SETUP
 #line 127 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMACRO; }
+{ count(); return checkImmediate(tLOOP); }
 	YY_BREAK
 case 30:
 YY_RULE_SETUP
 #line 128 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMETHOD; }
+{ count(); return tMACRO; }
 	YY_BREAK
 case 31:
 YY_RULE_SETUP
 #line 129 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMOD; }
+{ count(); return tMETHOD; }
 	YY_BREAK
 case 32:
 YY_RULE_SETUP
 #line 130 "engines/director/lingo/lingo-lex.l"
-{ count(); return tMOVIE; }
+{ count(); return tMOD; }
 	YY_BREAK
 case 33:
 YY_RULE_SETUP
 #line 131 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEXT; }
+{ count(); return tMOVIE; }
 	YY_BREAK
 case 34:
 YY_RULE_SETUP
 #line 132 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNOT; }
+{ count(); return tNEXT; }
 	YY_BREAK
 case 35:
 YY_RULE_SETUP
 #line 133 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOF; }
+{ count(); return tNOT; }
 	YY_BREAK
 case 36:
 YY_RULE_SETUP
 #line 134 "engines/director/lingo/lingo-lex.l"
-{ count(); return tON; }		// D3
+{ count(); return tOF; }
 	YY_BREAK
 case 37:
 YY_RULE_SETUP
 #line 135 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOPEN; }
+{ count(); return tON; }		// D3
 	YY_BREAK
 case 38:
 YY_RULE_SETUP
 #line 136 "engines/director/lingo/lingo-lex.l"
-{ count(); return tOR; }
+{ count(); return tOPEN; }
 	YY_BREAK
 case 39:
 YY_RULE_SETUP
 #line 137 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPLAY; }
+{ count(); return tOR; }
 	YY_BREAK
 case 40:
 YY_RULE_SETUP
 #line 138 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.s = new Common::String(yytext); return tPLAYACCEL; }
+{ count(); return tPLAY; }
 	YY_BREAK
 case 41:
 YY_RULE_SETUP
 #line 139 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPREVIOUS; }
+{ count(); yylval.s = new Common::String(yytext); return tPLAYACCEL; }
 	YY_BREAK
 case 42:
 YY_RULE_SETUP
 #line 140 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPROPERTY; }	// D4
+{ count(); return tPREVIOUS; }
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 141 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPUT; }
+{ count(); return tPROPERTY; }	// D4
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 142 "engines/director/lingo/lingo-lex.l"
-{ count(); return checkImmediate(tREPEAT); }
+{ count(); return tPUT; }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 143 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSET; }
+{ count(); return checkImmediate(tREPEAT); }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 144 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSTARTS; }
+{ count(); return tSET; }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 145 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTELL; }
+{ count(); return tSTARTS; }
 	YY_BREAK
 case 48:
 YY_RULE_SETUP
 #line 146 "engines/director/lingo/lingo-lex.l"
+{ count(); return tTELL; }
+	YY_BREAK
+case 49:
+YY_RULE_SETUP
+#line 147 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1309,9 +1316,9 @@ YY_RULE_SETUP
 		return THEENTITYWITHID;
 	}
 	YY_BREAK
-case 49:
+case 50:
 YY_RULE_SETUP
-#line 154 "engines/director/lingo/lingo-lex.l"
+#line 155 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1321,9 +1328,9 @@ YY_RULE_SETUP
 		return THEENTITYWITHID;
 	}
 	YY_BREAK
-case 50:
+case 51:
 YY_RULE_SETUP
-#line 162 "engines/director/lingo/lingo-lex.l"
+#line 163 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1365,9 +1372,9 @@ YY_RULE_SETUP
 		warning("Unhandled the entity %s", ptr);
 	}
 	YY_BREAK
-case 51:
+case 52:
 YY_RULE_SETUP
-#line 202 "engines/director/lingo/lingo-lex.l"
+#line 203 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1400,9 +1407,9 @@ YY_RULE_SETUP
 			return THEENTITY;
 	}
 	YY_BREAK
-case 52:
+case 53:
 YY_RULE_SETUP
-#line 233 "engines/director/lingo/lingo-lex.l"
+#line 234 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1423,69 +1430,69 @@ YY_RULE_SETUP
 		warning("Unhandled the entity %s", ptr);
 	}
 	YY_BREAK
-case 53:
-YY_RULE_SETUP
-#line 252 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTHEN; }
-	YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 253 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTO; }
+{ count(); return tTHEN; }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 254 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSPRITE; }
+{ count(); return tTO; }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 255 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITH; }
+{ count(); return tSPRITE; }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 256 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITHIN; }
+{ count(); return tWITH; }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 257 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHEN; }
+{ count(); return tWITHIN; }
 	YY_BREAK
 case 59:
 YY_RULE_SETUP
 #line 258 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHILE; }
+{ count(); return tWHEN; }
 	YY_BREAK
 case 60:
 YY_RULE_SETUP
 #line 259 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWORD; }
+{ count(); return tWHILE; }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 261 "engines/director/lingo/lingo-lex.l"
-{ count(); return tNEQ; }
+#line 260 "engines/director/lingo/lingo-lex.l"
+{ count(); return tWORD; }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
 #line 262 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGE; }
+{ count(); return tNEQ; }
 	YY_BREAK
 case 63:
 YY_RULE_SETUP
 #line 263 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLE; }
+{ count(); return tGE; }
 	YY_BREAK
 case 64:
 YY_RULE_SETUP
 #line 264 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCONCAT; }
+{ count(); return tLE; }
 	YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 266 "engines/director/lingo/lingo-lex.l"
+#line 265 "engines/director/lingo/lingo-lex.l"
+{ count(); return tCONCAT; }
+	YY_BREAK
+case 66:
+YY_RULE_SETUP
+#line 267 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1532,43 +1539,43 @@ YY_RULE_SETUP
 		return ID;
 	}
 	YY_BREAK
-case 66:
-YY_RULE_SETUP
-#line 311 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.f = atof(yytext); return FLOAT; }
-	YY_BREAK
 case 67:
 YY_RULE_SETUP
 #line 312 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
+{ count(); yylval.f = atof(yytext); return FLOAT; }
 	YY_BREAK
 case 68:
 YY_RULE_SETUP
 #line 313 "engines/director/lingo/lingo-lex.l"
-{ count(); return *yytext; }
+{ count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
 	YY_BREAK
 case 69:
-/* rule 69 can match eol */
 YY_RULE_SETUP
 #line 314 "engines/director/lingo/lingo-lex.l"
-{ return '\n'; }
+{ count(); return *yytext; }
 	YY_BREAK
 case 70:
+/* rule 70 can match eol */
 YY_RULE_SETUP
 #line 315 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
+{ return '\n'; }
 	YY_BREAK
 case 71:
 YY_RULE_SETUP
 #line 316 "engines/director/lingo/lingo-lex.l"
-{ count(); }
+{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
 	YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 318 "engines/director/lingo/lingo-lex.l"
+#line 317 "engines/director/lingo/lingo-lex.l"
+{ count(); }
+	YY_BREAK
+case 73:
+YY_RULE_SETUP
+#line 319 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1572 "engines/director/lingo/lingo-lex.cpp"
+#line 1579 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1861,7 +1868,7 @@ static int yy_get_next_buffer (void)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 271 )
+			if ( yy_current_state >= 273 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1889,11 +1896,11 @@ static int yy_get_next_buffer (void)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 271 )
+		if ( yy_current_state >= 273 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 270);
+	yy_is_jam = (yy_current_state == 272);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2531,7 +2538,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 318 "engines/director/lingo/lingo-lex.l"
+#line 319 "engines/director/lingo/lingo-lex.l"
 
 
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index 0f6dd58..a53a2f0 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -84,6 +84,7 @@ whitespace [\t ]
 
 %%
 
+\xC2[\r\n]	{ g_lingo->_linenumber++; g_lingo->_colnumber = 0; }
 --[^\r\n]*
 ^{whitespace}+	{ count(); }
 [\t]+						{ count(); return ' '; }





More information about the Scummvm-git-logs mailing list