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

sev- sev at scummvm.org
Wed Feb 8 22:12:39 CET 2017


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

Summary:
03e7c3ca60 DIRECTOR: Lingo: Documented D4 "Operators and math functions" Lingo
c8236bb285 DIRECTOR: Lingo: Documented D4 "Output" Lingo
eb179c5241 DIRECTOR: Lingo: Documented D4 "Parent scripts" Lingo
c0dd0f4f53 DIRECTOR: Lingo: Documented D4 "Playing movies" Lingo
d8a103d9e2 DIRECTOR: Lingo: Documented D4 "Predefined methods and special messages" Lingo


Commit: 03e7c3ca60c60e0001772550b97946f8a10db34c
    https://github.com/scummvm/scummvm/commit/03e7c3ca60c60e0001772550b97946f8a10db34c
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-02-08T20:32:53+01:00

Commit Message:
DIRECTOR: Lingo: Documented D4 "Operators and math functions" Lingo

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


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 2005aa1..101e0fb 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -32,19 +32,19 @@ static struct BuiltinProto {
 	bool parens;
 } builtins[] = {
 	// Math
-	{ "abs",			Lingo::b_abs,			1, 1, true },	// D2
-	{ "atan",			Lingo::b_atan,			1, 1, true },	//			D4
-	{ "cos",			Lingo::b_cos,			1, 1, true },	//			D4
-	{ "exp",			Lingo::b_exp,			1, 1, true },	//			D4
-	{ "float",			Lingo::b_float,			1, 1, true },	//			D4
-	{ "integer",		Lingo::b_integer,		1, 1, true },
-	{ "log",			Lingo::b_log,			1, 1, true },	//			D4
-	{ "pi",				Lingo::b_pi,			0, 0, true },	//			D4
-	{ "power",			Lingo::b_power,			2, 2, true },	//			D4
-	{ "random",			Lingo::b_random,		1, 1, true },	// D2
-	{ "sin",			Lingo::b_sin,			1, 1, true },
-	{ "sqrt",			Lingo::b_sqrt,			1, 1, true },	// D2
-	{ "tan",			Lingo::b_tan,			1, 1, true },	//			D4
+	{ "abs",			Lingo::b_abs,			1, 1, true },	// D2 function
+	{ "atan",			Lingo::b_atan,			1, 1, true },	//			D4 function
+	{ "cos",			Lingo::b_cos,			1, 1, true },	//			D4 function
+	{ "exp",			Lingo::b_exp,			1, 1, true },	//			D4 function
+	{ "float",			Lingo::b_float,			1, 1, true },	//			D4 function
+	{ "integer",		Lingo::b_integer,		1, 1, true },	//		D3 f
+	{ "log",			Lingo::b_log,			1, 1, true },	//			D4 f
+	{ "pi",				Lingo::b_pi,			0, 0, true },	//			D4 f
+	{ "power",			Lingo::b_power,			2, 2, true },	//			D4 f
+	{ "random",			Lingo::b_random,		1, 1, true },	// D2 f
+	{ "sin",			Lingo::b_sin,			1, 1, true },	//			D4 f
+	{ "sqrt",			Lingo::b_sqrt,			1, 1, true },	// D2 f
+	{ "tan",			Lingo::b_tan,			1, 1, true },	//			D4 f
 	// String
 	{ "chars",			Lingo::b_chars,			3, 3, true },	// D2
 	{ "charToNum",		Lingo::b_charToNum,		1, 1, true },	// D2
@@ -54,13 +54,13 @@ static struct BuiltinProto {
 	{ "numToChar",		Lingo::b_numToChar,		1, 1, true },	// D2
 	{ "offset",			Lingo::b_offset,		2, 2, true },	// D2
 	{ "string",			Lingo::b_string,		1, 1, true },	// D2
-	{ "value",		 	Lingo::b_value,			1, 1, true },	// D2
+	{ "value",		 	Lingo::b_value,			1, 1, true },	// D2 f
 	// Lists
 	{ "add",			Lingo::b_add,			2, 2, false },	//			D4 command
 	{ "addAt",			Lingo::b_addAt,			3, 3, false },	//			D4 c
 	{ "addProp",		Lingo::b_addProp,		3, 3, false },	//			D4 c
 	{ "append",			Lingo::b_append,		2, 2, false },	//			D4 c
-	{ "count",			Lingo::b_count,			1, 1, true },	//			D4 function
+	{ "count",			Lingo::b_count,			1, 1, true },	//			D4 f
 	{ "deleteAt",		Lingo::b_deleteAt,		2, 2, false },	//			D4 c
 	{ "deleteProp",		Lingo::b_deleteProp,	2, 2, false },	//			D4 c
 	{ "findPos",		Lingo::b_findPos,		2, 2, true },	//			D4 f
@@ -208,16 +208,21 @@ static const char *twoWordBuiltins[] = {
 };
 
 static const char *builtinFunctions[] = {
+	"abs",
+	"atan",
 	"backspace",
 	"cast",
+	"cos",
 	"count",
 	"empty",
 	"enter",
+	"exp",
 	"false",
 	"field",
 	"findEmpty",
 	"findPos",
 	"findPosNear",
+	"float",
 	"getaProp",
 	"getAt",
 	"getLast",
@@ -228,22 +233,31 @@ static const char *builtinFunctions[] = {
 	"getPropAt",
 	"ilk",
 	"inflate",
+	"integer",
 	"integerp",
 	"intersect",
 	"list",
 	"listP",
+	"log",
 	"max",
 	"min",
 	"objectp",
+	"pi",
 	"pictureP",
+	"power",
+	"random",
 	"rollOver",
 	"quote",
 	"return",
+	"sin",
+	"sqrt",
 	"soundBusy",
 	"stringp",
 	"symbolp",
 	"tab",
+	"tan",
 	"true",
+	"value",
 	"version",
 	"window",
 	"xFactoryList",
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index ec94d06..35a5707 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -70,6 +70,7 @@ TheEntity entities[] = {
 	{ kTheLastRoll,			"lastRoll",			false },	// D2 f
 	{ kTheLines,			"lines",			false },	//		 D3
 	{ kTheMachineType,		"machineType",		false },	// D2 f
+	{ kTheMaxInteger,		"maxInteger",		false },	//				D4 f
 	{ kTheMemorySize,		"memorySize",		false },	// D2 f
 	{ kTheMenu,				"menu",				true  },
 	{ kTheMenus,			"menus",			false },
@@ -100,6 +101,7 @@ TheEntity entities[] = {
 	{ kThePreloadEventAbort,"preloadEventAbort",false },
 	{ kThePreLoadRAM,		"preLoadRAM",		false },	//				D4 p
 	{ kTheQuickTimePresent,	"quickTimePresent",	false },	//				D4 f
+	{ kTheRandomSeed,		"randomSeed",		false },	//				D4 p
 	{ kTheResult,			"result",			false },	// D2 f
 	{ kTheRightMouseDown,	"rightMouseDown",	false },
 	{ kTheRightMouseUp,		"rightMouseUp",		false },
diff --git a/engines/director/lingo/lingo-the.h b/engines/director/lingo/lingo-the.h
index 24f5e26..994fcc9 100644
--- a/engines/director/lingo/lingo-the.h
+++ b/engines/director/lingo/lingo-the.h
@@ -68,6 +68,7 @@ enum TheEntityType {
 	kTheLastRoll,
 	kTheLines,
 	kTheMachineType,
+	kTheMaxInteger,
 	kTheMemorySize,
 	kTheMenu,
 	kTheMenuItem,
@@ -98,6 +99,7 @@ enum TheEntityType {
 	kThePreloadEventAbort,
 	kThePreLoadRAM,
 	kTheQuickTimePresent,
+	kTheRandomSeed,
 	kTheResult,
 	kTheRightMouseDown,
 	kTheRightMouseUp,


Commit: c8236bb2858f800b673b3041f2c711bcf495ae9d
    https://github.com/scummvm/scummvm/commit/c8236bb2858f800b673b3041f2c711bcf495ae9d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-02-08T21:11:54+01:00

Commit Message:
DIRECTOR: Lingo: Documented D4 "Output" Lingo

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


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 101e0fb..0172f92 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -131,7 +131,7 @@ static struct BuiltinProto {
 	{ "framesToHMS",	Lingo::b_framesToHMS,	4, 4, false },	//		D3
 	{ "HMStoFrames",	Lingo::b_HMStoFrames,	4, 4, false },	//		D3
 	{ "param",	 		Lingo::b_param,			1, 1, true },	//			D4 f
-	{ "printFrom",	 	Lingo::b_printFrom,		-1,0, false },	// D2
+	{ "printFrom",	 	Lingo::b_printFrom,		-1,0, false },	// D2 c
 		// put													// D2
 		// set													// D2
 	{ "showGlobals",	Lingo::b_showGlobals,	0, 0, false },	// D2
@@ -242,6 +242,7 @@ static const char *builtinFunctions[] = {
 	"max",
 	"min",
 	"objectp",
+	"param",
 	"pi",
 	"pictureP",
 	"power",


Commit: eb179c52416c9f24f61504671d205efa340379b3
    https://github.com/scummvm/scummvm/commit/eb179c52416c9f24f61504671d205efa340379b3
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-02-08T21:30:29+01:00

Commit Message:
DIRECTOR: Lingo: Documented D4 "Parent scripts" Lingo

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
    engines/director/lingo/lingo.h


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 0172f92..9e95fcb 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -127,6 +127,7 @@ static struct BuiltinProto {
 	{ "symbolp",		Lingo::b_symbolp,		1, 1, true },	// D2 f
 	// Misc
 	{ "alert",	 		Lingo::b_alert,			1, 1, false },	// D2 c
+	{ "birth",	 		Lingo::b_birth,			-1,0, false },	//			D4 f
 	{ "cursor",	 		Lingo::b_cursor,		1, 1, false },	// D2 c
 	{ "framesToHMS",	Lingo::b_framesToHMS,	4, 4, false },	//		D3
 	{ "HMStoFrames",	Lingo::b_HMStoFrames,	4, 4, false },	//		D3
@@ -182,6 +183,7 @@ static struct BuiltinProto {
 	{ "moveToBack",		Lingo::b_moveToBack,	1, 1, false },	//			D4 c
 	{ "moveToFront",	Lingo::b_moveToFront,	1, 1, false },	//			D4 c
 	// Constants
+	{ "ancestor",		Lingo::b_ancestor,		0, 0, false },	//			D4
 	{ "backspace",		Lingo::b_backspace,		0, 0, false },	// D2
 	{ "empty",			Lingo::b_empty,			0, 0, false },	// D2
 	{ "enter",			Lingo::b_enter,			0, 0, false },	// D2
@@ -195,6 +197,7 @@ static struct BuiltinProto {
 	{ "cast",			Lingo::b_cast,			1, 1, false },	//			D4 f
 	{ "field",			Lingo::b_field,			1, 1, false },	//		D3 f
 	{ "me",				Lingo::b_me,			-1,0, false },	//		D3
+	{ "script",			Lingo::b_script,		1, 1, false },	//			D4 f
 	{ "window",			Lingo::b_window,		1, 1, false },	//			D4 f
 
 	{ 0, 0, 0, 0, false }
@@ -211,6 +214,7 @@ static const char *builtinFunctions[] = {
 	"abs",
 	"atan",
 	"backspace",
+	"birth",
 	"cast",
 	"cos",
 	"count",
@@ -250,6 +254,7 @@ static const char *builtinFunctions[] = {
 	"rollOver",
 	"quote",
 	"return",
+	"script",
 	"sin",
 	"sqrt",
 	"soundBusy",
@@ -964,6 +969,14 @@ void Lingo::b_alert(int nargs) {
 	delete d.u.s;
 }
 
+void Lingo::b_birth(int nargs) {
+	g_lingo->printSTUBWithArglist("b_birth", nargs);
+
+	g_lingo->dropStack(nargs);
+
+	g_lingo->push(Datum(0));
+}
+
 void Lingo::b_cursor(int nargs) {
 	Datum d = g_lingo->pop();
 	d.toInt();
@@ -1263,6 +1276,11 @@ void Lingo::b_soundStop(int nargs) {
 ///////////////////
 // Constants
 ///////////////////
+void Lingo::b_ancestor(int nargs) {
+	warning("STUB: b_ancestor");
+	g_lingo->push(Datum(0));
+}
+
 void Lingo::b_backspace(int nargs) {
 	g_lingo->push(Datum(new Common::String("\b")));
 }
@@ -1366,6 +1384,10 @@ void Lingo::b_me(int nargs) {
 	g_lingo->dropStack(nargs);
 }
 
+void Lingo::b_script(int nargs) {
+	warning("STUB: b_script");
+}
+
 void Lingo::b_window(int nargs) {
 	g_lingo->printSTUBWithArglist("b_window", nargs);
 	g_lingo->dropStack(nargs);
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp
index 9e73717..04310d9 100644
--- a/engines/director/lingo/lingo-code.cpp
+++ b/engines/director/lingo/lingo-code.cpp
@@ -115,6 +115,7 @@ static struct FuncDescr {
 	{ Lingo::c_call,		"c_call",		"si" },
 	{ Lingo::c_procret,		"c_procret",	"" },
 	{ Lingo::c_global,		"c_global",		"s" },
+	{ Lingo::c_property,	"c_property",	"s" },
 	{ Lingo::c_instance,	"c_instance",	"s" },
 	{ Lingo::c_open,		"c_open",		"" },
 	{ 0, 0, 0 }
@@ -1140,6 +1141,14 @@ void Lingo::c_global() {
 	delete s;
 }
 
+void Lingo::c_property() {
+	Common::String name((char *)&(*g_lingo->_currentScript)[g_lingo->_pc]);
+
+	g_lingo->_pc += g_lingo->calcStringAlignment(name.c_str());
+
+	warning("STUB: c_property()");
+}
+
 void Lingo::c_instance() {
 	Common::String name((char *)&(*g_lingo->_currentScript)[g_lingo->_pc]);
 
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 2bafc1e..f59cae7 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -146,8 +146,9 @@
      tINTERSECTS = 335,
      tWITHIN = 336,
      tTELL = 337,
-     tON = 338,
-     tME = 339
+     tPROPERTY = 338,
+     tON = 339,
+     tME = 340
    };
 #endif
 /* Tokens.  */
@@ -231,8 +232,9 @@
 #define tINTERSECTS 335
 #define tWITHIN 336
 #define tTELL 337
-#define tON 338
-#define tME 339
+#define tPROPERTY 338
+#define tON 339
+#define tME 340
 
 
 
@@ -300,7 +302,7 @@ typedef union YYSTYPE
 	Common::Array<double> *arr;
 }
 /* Line 193 of yacc.c.  */
-#line 304 "engines/director/lingo/lingo-gr.cpp"
+#line 306 "engines/director/lingo/lingo-gr.cpp"
 	YYSTYPE;
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
@@ -313,7 +315,7 @@ typedef union YYSTYPE
 
 
 /* Line 216 of yacc.c.  */
-#line 317 "engines/director/lingo/lingo-gr.cpp"
+#line 319 "engines/director/lingo/lingo-gr.cpp"
 
 #ifdef short
 # undef short
@@ -526,22 +528,22 @@ union yyalloc
 #endif
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  116
+#define YYFINAL  119
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1602
+#define YYLAST   1668
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  100
+#define YYNTOKENS  101
 /* YYNNTS -- Number of nonterminals.  */
-#define YYNNTS  42
+#define YYNNTS  43
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  155
+#define YYNRULES  158
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  341
+#define YYNSTATES  346
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   339
+#define YYMAXUTOK   340
 
 #define YYTRANSLATE(YYX)						\
   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -550,15 +552,15 @@ union yyalloc
 static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      92,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      93,     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,    91,    86,     2,
-      93,    94,    89,    87,    99,    88,     2,    90,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,    92,    87,     2,
+      94,    95,    90,    88,   100,    89,     2,    91,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-      96,    85,    95,     2,     2,     2,     2,     2,     2,     2,
+      97,    86,    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,     2,
-       2,    97,     2,    98,     2,     2,     2,     2,     2,     2,
+       2,    98,     2,    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,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -582,7 +584,8 @@ static const yytype_uint8 yytranslate[] =
       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85
 };
 
 #if YYDEBUG
@@ -600,77 +603,78 @@ static const yytype_uint16 yyprhs[] =
      280,   284,   288,   292,   296,   300,   304,   308,   312,   316,
      320,   324,   327,   331,   335,   339,   343,   346,   349,   353,
      357,   362,   367,   372,   379,   384,   391,   396,   403,   408,
-     415,   418,   420,   422,   425,   427,   430,   433,   435,   438,
-     441,   443,   446,   451,   458,   463,   466,   470,   472,   476,
-     478,   482,   485,   488,   491,   494,   498,   501,   504,   506,
-     510,   513,   516,   519,   523,   526,   527,   531,   532,   541,
-     544,   545,   554,   555,   556,   567,   568,   570,   574,   579,
-     580,   583,   584,   586,   590,   592
+     415,   418,   420,   422,   425,   427,   430,   433,   436,   438,
+     441,   444,   446,   449,   454,   461,   466,   469,   473,   475,
+     479,   481,   485,   487,   491,   494,   497,   500,   503,   507,
+     510,   513,   515,   519,   522,   525,   528,   532,   535,   536,
+     540,   541,   550,   553,   554,   563,   564,   565,   576,   577,
+     579,   583,   588,   589,   592,   593,   595,   599,   601
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
 static const yytype_int16 yyrhs[] =
 {
-     101,     0,    -1,   101,   102,   103,    -1,   103,    -1,     1,
-     102,    -1,    92,    -1,    -1,   132,    -1,   139,    -1,   106,
-      -1,    45,   123,    38,    24,    -1,    45,   123,    70,   123,
-      -1,    45,   123,    71,   123,    -1,    47,    24,    85,   123,
-      -1,    47,    12,    85,   123,    -1,    47,    13,   123,    85,
-     123,    -1,    47,    24,    49,   123,    -1,    47,    12,    49,
-     123,    -1,    47,    13,   123,    49,   123,    -1,   123,    -1,
-     124,    -1,   105,    -1,   107,    -1,   114,    93,   113,    94,
-     120,   119,    28,    -1,   115,    85,   123,   119,    49,   123,
-     119,   120,   119,    28,    -1,   115,    85,   123,   119,    30,
-      49,   123,   119,   120,   119,    28,    -1,   121,   105,   119,
-      -1,   122,   123,   102,   120,   119,    28,    -1,   122,   123,
-      49,   123,    -1,   116,   113,    48,   102,   120,   119,    28,
-      -1,   116,   113,    48,   102,   120,   119,    53,   120,   119,
-      28,    -1,   116,   113,    48,   102,   120,   119,   118,   109,
-     119,    28,    -1,   116,   113,    48,   118,   105,   119,    -1,
-     116,   113,    48,   118,   105,   119,    53,   118,   105,   119,
-      -1,   116,   113,    48,   118,   105,   119,   110,   119,   108,
-     119,    -1,    -1,    53,   118,   105,    -1,   109,   112,    -1,
-     112,    -1,   110,   111,    -1,   111,    -1,   117,   113,    48,
-     118,   106,   119,    -1,   110,    -1,   117,   113,    48,   118,
-     120,   119,    -1,   123,    -1,   123,    85,   123,    -1,    93,
-     113,    94,    -1,    46,    52,    -1,    46,    51,    24,    -1,
-      37,    -1,    32,    -1,    -1,    -1,    -1,   120,   102,    -1,
-     120,   106,    -1,    50,    24,    48,    -1,    82,    -1,    11,
+     102,     0,    -1,   102,   103,   104,    -1,   104,    -1,     1,
+     103,    -1,    93,    -1,    -1,   134,    -1,   141,    -1,   107,
+      -1,    45,   124,    38,    24,    -1,    45,   124,    70,   124,
+      -1,    45,   124,    71,   124,    -1,    47,    24,    86,   124,
+      -1,    47,    12,    86,   124,    -1,    47,    13,   124,    86,
+     124,    -1,    47,    24,    49,   124,    -1,    47,    12,    49,
+     124,    -1,    47,    13,   124,    49,   124,    -1,   124,    -1,
+     125,    -1,   106,    -1,   108,    -1,   115,    94,   114,    95,
+     121,   120,    28,    -1,   116,    86,   124,   120,    49,   124,
+     120,   121,   120,    28,    -1,   116,    86,   124,   120,    30,
+      49,   124,   120,   121,   120,    28,    -1,   122,   106,   120,
+      -1,   123,   124,   103,   121,   120,    28,    -1,   123,   124,
+      49,   124,    -1,   117,   114,    48,   103,   121,   120,    28,
+      -1,   117,   114,    48,   103,   121,   120,    53,   121,   120,
+      28,    -1,   117,   114,    48,   103,   121,   120,   119,   110,
+     120,    28,    -1,   117,   114,    48,   119,   106,   120,    -1,
+     117,   114,    48,   119,   106,   120,    53,   119,   106,   120,
+      -1,   117,   114,    48,   119,   106,   120,   111,   120,   109,
+     120,    -1,    -1,    53,   119,   106,    -1,   110,   113,    -1,
+     113,    -1,   111,   112,    -1,   112,    -1,   118,   114,    48,
+     119,   107,   120,    -1,   111,    -1,   118,   114,    48,   119,
+     121,   120,    -1,   124,    -1,   124,    86,   124,    -1,    94,
+     114,    95,    -1,    46,    52,    -1,    46,    51,    24,    -1,
+      37,    -1,    32,    -1,    -1,    -1,    -1,   121,   103,    -1,
+     121,   107,    -1,    50,    24,    48,    -1,    82,    -1,    11,
       -1,    14,    -1,    27,    -1,    25,    -1,    22,    -1,    23,
-     123,    -1,    24,    93,   140,    94,    -1,    24,    -1,    12,
-      -1,    13,   123,    -1,   104,    -1,   123,    87,   123,    -1,
-     123,    88,   123,    -1,   123,    89,   123,    -1,   123,    90,
-     123,    -1,   123,    69,   123,    -1,   123,    95,   123,    -1,
-     123,    96,   123,    -1,   123,    65,   123,    -1,   123,    60,
-     123,    -1,   123,    61,   123,    -1,   123,    66,   123,    -1,
-     123,    67,   123,    -1,    68,   123,    -1,   123,    86,   123,
-      -1,   123,    72,   123,    -1,   123,    73,   123,    -1,   123,
-      74,   123,    -1,    87,   123,    -1,    88,   123,    -1,    93,
-     123,    94,    -1,    97,   140,    98,    -1,    79,   123,    80,
-     123,    -1,    79,   123,    81,   123,    -1,    75,   123,    43,
-     123,    -1,    75,   123,    49,   123,    43,   123,    -1,    76,
-     123,    43,   123,    -1,    76,   123,    49,   123,    43,   123,
-      -1,    77,   123,    43,   123,    -1,    77,   123,    49,   123,
-      43,   123,    -1,    78,   123,    43,   123,    -1,    78,   123,
-      49,   123,    43,   123,    -1,    45,   123,    -1,   127,    -1,
-     130,    -1,    33,    46,    -1,    33,    -1,    35,   125,    -1,
-      59,   126,    -1,    16,    -1,    18,   123,    -1,    17,   123,
-      -1,    17,    -1,    19,   141,    -1,    84,    93,    24,    94,
-      -1,    84,    93,    24,    99,   140,    94,    -1,    56,   123,
-      51,   123,    -1,    56,   123,    -1,    20,    24,   140,    -1,
-      24,    -1,   125,    99,    24,    -1,    24,    -1,   126,    99,
-      24,    -1,    36,    39,    -1,    36,    42,    -1,    36,    44,
-      -1,    36,   128,    -1,    36,   128,   129,    -1,    36,   129,
-      -1,    34,   123,    -1,   123,    -1,    43,    41,   123,    -1,
-      41,   123,    -1,    57,    58,    -1,    57,   128,    -1,    57,
-     128,   129,    -1,    57,   129,    -1,    -1,    29,   131,   140,
-      -1,    -1,    40,    24,   133,   118,   137,   102,   138,   120,
-      -1,    54,    24,    -1,    -1,    55,    24,   134,   118,   137,
-     102,   138,   120,    -1,    -1,    -1,    83,    24,   135,   118,
-     136,   137,   102,   138,   120,    28,    -1,    -1,    24,    -1,
-     137,    99,    24,    -1,   137,   102,    99,    24,    -1,    -1,
-      24,   141,    -1,    -1,   123,    -1,   140,    99,   123,    -1,
-     123,    -1,   141,    99,   123,    -1
+     124,    -1,    24,    94,   142,    95,    -1,    24,    -1,    12,
+      -1,    13,   124,    -1,   105,    -1,   124,    88,   124,    -1,
+     124,    89,   124,    -1,   124,    90,   124,    -1,   124,    91,
+     124,    -1,   124,    69,   124,    -1,   124,    96,   124,    -1,
+     124,    97,   124,    -1,   124,    65,   124,    -1,   124,    60,
+     124,    -1,   124,    61,   124,    -1,   124,    66,   124,    -1,
+     124,    67,   124,    -1,    68,   124,    -1,   124,    87,   124,
+      -1,   124,    72,   124,    -1,   124,    73,   124,    -1,   124,
+      74,   124,    -1,    88,   124,    -1,    89,   124,    -1,    94,
+     124,    95,    -1,    98,   142,    99,    -1,    79,   124,    80,
+     124,    -1,    79,   124,    81,   124,    -1,    75,   124,    43,
+     124,    -1,    75,   124,    49,   124,    43,   124,    -1,    76,
+     124,    43,   124,    -1,    76,   124,    49,   124,    43,   124,
+      -1,    77,   124,    43,   124,    -1,    77,   124,    49,   124,
+      43,   124,    -1,    78,   124,    43,   124,    -1,    78,   124,
+      49,   124,    43,   124,    -1,    45,   124,    -1,   129,    -1,
+     132,    -1,    33,    46,    -1,    33,    -1,    35,   126,    -1,
+      83,   127,    -1,    59,   128,    -1,    16,    -1,    18,   124,
+      -1,    17,   124,    -1,    17,    -1,    19,   143,    -1,    85,
+      94,    24,    95,    -1,    85,    94,    24,   100,   142,    95,
+      -1,    56,   124,    51,   124,    -1,    56,   124,    -1,    20,
+      24,   142,    -1,    24,    -1,   126,   100,    24,    -1,    24,
+      -1,   127,   100,    24,    -1,    24,    -1,   128,   100,    24,
+      -1,    36,    39,    -1,    36,    42,    -1,    36,    44,    -1,
+      36,   130,    -1,    36,   130,   131,    -1,    36,   131,    -1,
+      34,   124,    -1,   124,    -1,    43,    41,   124,    -1,    41,
+     124,    -1,    57,    58,    -1,    57,   130,    -1,    57,   130,
+     131,    -1,    57,   131,    -1,    -1,    29,   133,   142,    -1,
+      -1,    40,    24,   135,   119,   139,   103,   140,   121,    -1,
+      54,    24,    -1,    -1,    55,    24,   136,   119,   139,   103,
+     140,   121,    -1,    -1,    -1,    84,    24,   137,   119,   138,
+     139,   103,   140,   121,    28,    -1,    -1,    24,    -1,   139,
+     100,    24,    -1,   139,   103,   100,    24,    -1,    -1,    24,
+     143,    -1,    -1,   124,    -1,   142,   100,   124,    -1,   124,
+      -1,   143,   100,   124,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -686,12 +690,12 @@ static const yytype_uint16 yyrline[] =
      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,
-     473,   474,   475,   476,   477,   479,   480,   481,   484,   487,
-     490,   493,   494,   495,   496,   497,   498,   501,   502,   505,
-     506,   517,   518,   519,   520,   523,   526,   531,   532,   535,
-     536,   539,   540,   543,   546,   549,   549,   579,   579,   585,
-     588,   588,   593,   594,   593,   604,   605,   606,   607,   610,
-     614,   622,   623,   624,   627,   628
+     473,   474,   475,   476,   477,   479,   480,   481,   482,   485,
+     488,   491,   494,   495,   496,   497,   498,   499,   502,   503,
+     506,   507,   510,   511,   522,   523,   524,   525,   528,   531,
+     536,   537,   540,   541,   544,   545,   548,   551,   554,   554,
+     584,   584,   590,   593,   593,   598,   599,   598,   609,   610,
+     611,   612,   615,   619,   627,   628,   629,   632,   633
 };
 #endif
 
@@ -712,15 +716,16 @@ static const char *const yytname[] =
   "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", "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", "instancelist", "gotofunc",
-  "gotoframe", "gotomovie", "playfunc", "@1", "defn", "@2", "@3", "@4",
-  "@5", "argdef", "argstore", "macro", "arglist", "nonemptyarglist", 0
+  "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
 };
 #endif
 
@@ -737,30 +742,31 @@ 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,    61,    38,    43,    45,    42,
-      47,    37,    10,    40,    41,    62,    60,    91,    93,    44
+     335,   336,   337,   338,   339,   340,    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,   100,   101,   101,   101,   102,   103,   103,   103,   103,
-     104,   104,   104,   104,   104,   104,   104,   104,   104,   105,
-     105,   106,   106,   106,   106,   106,   106,   106,   106,   107,
-     107,   107,   107,   107,   107,   108,   108,   109,   109,   110,
-     110,   111,   112,   112,   113,   113,   113,   114,   115,   116,
-     117,   118,   119,   120,   120,   120,   121,   122,   123,   123,
-     123,   123,   123,   123,   123,   123,   123,   123,   123,   123,
-     123,   123,   123,   123,   123,   123,   123,   123,   123,   123,
-     123,   123,   123,   123,   123,   123,   123,   123,   123,   123,
-     123,   123,   123,   123,   123,   123,   123,   123,   123,   123,
+       0,   101,   102,   102,   102,   103,   104,   104,   104,   104,
+     105,   105,   105,   105,   105,   105,   105,   105,   105,   106,
+     106,   107,   107,   107,   107,   107,   107,   107,   107,   108,
+     108,   108,   108,   108,   108,   109,   109,   110,   110,   111,
+     111,   112,   113,   113,   114,   114,   114,   115,   116,   117,
+     118,   119,   120,   121,   121,   121,   122,   123,   124,   124,
      124,   124,   124,   124,   124,   124,   124,   124,   124,   124,
-     124,   124,   124,   124,   124,   124,   124,   125,   125,   126,
-     126,   127,   127,   127,   127,   127,   127,   128,   128,   129,
-     129,   130,   130,   130,   130,   131,   130,   133,   132,   132,
-     134,   132,   135,   136,   132,   137,   137,   137,   137,   138,
-     139,   140,   140,   140,   141,   141
+     124,   124,   124,   124,   124,   124,   124,   124,   124,   124,
+     124,   124,   124,   124,   124,   124,   124,   124,   124,   124,
+     124,   124,   124,   124,   124,   124,   124,   124,   124,   124,
+     125,   125,   125,   125,   125,   125,   125,   125,   125,   125,
+     125,   125,   125,   125,   125,   125,   125,   125,   126,   126,
+     127,   127,   128,   128,   129,   129,   129,   129,   129,   129,
+     130,   130,   131,   131,   132,   132,   132,   132,   133,   132,
+     135,   134,   134,   136,   134,   137,   138,   134,   139,   139,
+     139,   139,   140,   141,   142,   142,   142,   143,   143
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -776,12 +782,12 @@ static const yytype_uint8 yyr2[] =
        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
        3,     2,     3,     3,     3,     3,     2,     2,     3,     3,
        4,     4,     4,     6,     4,     6,     4,     6,     4,     6,
-       2,     1,     1,     2,     1,     2,     2,     1,     2,     2,
-       1,     2,     4,     6,     4,     2,     3,     1,     3,     1,
-       3,     2,     2,     2,     2,     3,     2,     2,     1,     3,
-       2,     2,     2,     3,     2,     0,     3,     0,     8,     2,
-       0,     8,     0,     0,    10,     0,     1,     3,     4,     0,
-       2,     0,     1,     3,     1,     3
+       2,     1,     1,     2,     1,     2,     2,     2,     1,     2,
+       2,     1,     2,     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
@@ -789,103 +795,103 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint8 yydefact[] =
 {
-       0,     0,    58,    66,     0,    59,   107,   110,     0,     0,
-       0,    62,     0,    65,    61,    60,   135,   104,     0,     0,
+       0,     0,    58,    66,     0,    59,   108,   111,     0,     0,
+       0,    62,     0,    65,    61,    60,   138,   104,     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,   151,     0,     3,    68,    21,     9,    22,
-       0,     0,     0,     0,     0,    19,    20,   101,   102,     7,
-       8,     5,     4,    65,     0,    67,   109,   108,   154,   111,
-     151,    63,   151,   150,   151,   103,   117,   105,     0,   121,
-       0,   122,     0,   123,   128,   124,   126,   137,   100,     0,
-      47,     0,     0,     0,     0,   139,   140,   115,   131,   132,
-     134,   119,   106,    81,     0,     0,     0,     0,     0,   142,
-       0,    86,    87,     0,   152,     0,     1,     6,     0,     0,
-       0,     0,    44,    52,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   154,     0,     3,    68,    21,     9,
+      22,     0,     0,     0,     0,     0,    19,    20,   101,   102,
+       7,     8,     5,     4,    65,     0,    67,   110,   109,   157,
+     112,   154,    63,   154,   153,   154,   103,   118,   105,     0,
+     124,     0,   125,     0,   126,   131,   127,   129,   140,   100,
+       0,    47,     0,     0,     0,     0,   142,   143,   116,   134,
+     135,   137,   122,   107,    81,     0,     0,     0,     0,     0,
+     120,   106,   145,     0,    86,    87,     0,   155,     0,     1,
+       6,     0,     0,     0,     0,    44,    52,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   151,     0,     0,   116,   152,     0,   136,     0,   127,
-     130,     0,   125,    51,     0,     0,     0,    48,     0,     0,
-       0,     0,     0,    56,    51,     0,   133,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    51,     0,
-      88,    89,     0,     2,     0,    52,     0,     0,    51,     0,
-      26,     0,    53,    77,    78,    76,    79,    80,    73,    83,
-      84,    85,    82,    69,    70,    71,    72,    74,    75,   155,
-      64,   118,   129,   145,    10,    11,    12,    17,    14,     0,
-       0,    16,    13,   145,   114,   120,    92,     0,    94,     0,
-      96,     0,    98,     0,    90,    91,   143,   112,   151,   153,
-      53,     0,    46,    53,     0,    45,    28,    52,   146,     0,
-      18,    15,     0,     0,     0,     0,     0,   145,     0,    52,
-       0,     0,    52,    52,    54,    55,     0,     0,   149,   149,
-      93,    95,    97,    99,     0,   113,     0,     0,    52,    51,
-      32,    27,   147,     0,    53,    53,   149,    23,    52,    53,
-      29,    53,     0,    50,    51,    52,    40,     0,   148,   138,
-     141,    53,    53,    52,    52,    52,    42,    38,     0,     0,
-      39,    35,     0,     0,    52,     0,     0,    37,     0,     0,
-      52,    51,    52,    51,   144,     0,    24,    30,    31,    51,
-      33,     0,    34,     0,    25,    53,    36,    52,    52,    41,
-      43
+       0,     0,     0,     0,   154,     0,     0,   117,   155,     0,
+     139,     0,   130,   133,     0,   128,    51,     0,     0,     0,
+      48,     0,     0,     0,     0,     0,    56,    51,     0,   136,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    51,     0,    88,    89,     0,     2,     0,    52,
+       0,     0,    51,     0,    26,     0,    53,    77,    78,    76,
+      79,    80,    73,    83,    84,    85,    82,    69,    70,    71,
+      72,    74,    75,   158,    64,   119,   132,   148,    10,    11,
+      12,    17,    14,     0,     0,    16,    13,   148,   115,   123,
+      92,     0,    94,     0,    96,     0,    98,     0,    90,    91,
+     121,   146,   113,   154,   156,    53,     0,    46,    53,     0,
+      45,    28,    52,   149,     0,    18,    15,     0,     0,     0,
+       0,     0,   148,     0,    52,     0,     0,    52,    52,    54,
+      55,     0,     0,   152,   152,    93,    95,    97,    99,     0,
+     114,     0,     0,    52,    51,    32,    27,   150,     0,    53,
+      53,   152,    23,    52,    53,    29,    53,     0,    50,    51,
+      52,    40,     0,   151,   141,   144,    53,    53,    52,    52,
+      52,    42,    38,     0,     0,    39,    35,     0,     0,    52,
+       0,     0,    37,     0,     0,    52,    51,    52,    51,   147,
+       0,    24,    30,    31,    51,    33,     0,    34,     0,    25,
+      53,    36,    52,    52,    41,    43
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,    44,   264,    45,    46,    47,   265,    49,   322,   305,
-     306,   296,   307,   121,    50,    51,    52,   297,   213,   190,
-     247,    53,    54,    55,    56,    77,   102,    57,    85,    86,
-      58,    74,    59,   153,   164,   178,   257,   249,   284,    60,
-     146,    69
+      -1,    45,   269,    46,    47,    48,   270,    50,   327,   310,
+     311,   301,   312,   124,    51,    52,    53,   302,   217,   194,
+     252,    54,    55,    56,    57,    78,   111,   103,    58,    86,
+      87,    59,    75,    60,   156,   167,   182,   262,   254,   289,
+      61,   149,    70
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -278
+#define YYPACT_NINF -264
 static const yytype_int16 yypact[] =
 {
-     294,   -36,  -278,  -278,   902,  -278,  -278,   902,   902,   902,
-       7,  -278,   902,   960,  -278,  -278,  -278,    18,    46,   807,
-    -278,    54,   902,    52,    48,    63,    66,    68,   902,   865,
-      70,   902,   902,   902,   902,   902,   902,  -278,    73,   -17,
-     902,   902,   902,   902,     6,  -278,  -278,  -278,  -278,  -278,
-       8,    14,   997,   729,   902,  1506,  -278,  -278,  -278,  -278,
-    -278,  -278,  -278,    29,   902,  1506,  1506,  1506,  1506,    17,
-     902,  1506,   902,    17,   902,  -278,  -278,    24,   902,  -278,
-     902,  -278,    77,  -278,  1506,    25,  -278,  -278,  1026,   101,
-    -278,   -45,   902,   -38,    95,  -278,  -278,  1346,  -278,    25,
-    -278,  -278,    49,   -13,  1058,  1090,  1122,  1154,  1378,  -278,
-     121,   -13,   -13,  1442,  1506,    12,  -278,   381,   997,   902,
-     997,   102,  1474,  -278,   706,   902,   902,   902,   902,   902,
-     902,   902,   902,   902,   902,   902,   902,   902,   902,   902,
-     902,   902,  1026,   902,    50,  1442,   -78,    50,   127,  1506,
-    1506,   902,  -278,  -278,   130,   902,   902,  -278,   902,   902,
-    1314,   902,   902,  -278,  -278,   902,  -278,   131,   902,   902,
-     902,   902,   902,   902,   902,   902,   902,   902,  -278,   -77,
-    -278,  -278,   902,  -278,    64,  1506,    67,  1410,   -36,   902,
-    -278,   902,  -278,    19,    19,    19,   -13,   -13,   -13,  1506,
-      19,    19,   197,   140,   140,   -13,   -13,  1506,  1506,  1506,
-    -278,  -278,  1506,   141,  -278,  1506,  1506,  1506,  1506,   902,
-     902,  1506,  1506,   141,  1506,  -278,  1506,  1186,  1506,  1218,
-    1506,  1250,  1506,  1282,  1506,  1506,  -278,  -278,   902,  1506,
-    -278,     9,  -278,  -278,   729,  1506,  1506,   555,  -278,   -73,
-    1506,  1506,   -73,   902,   902,   902,   902,   141,   -10,   555,
-     115,   902,   555,  -278,  -278,  -278,   139,   155,    82,    82,
-    1506,  1506,  1506,  1506,   -73,  -278,   154,   902,  1506,    -3,
-      -5,  -278,  -278,   160,  -278,  -278,    82,  -278,  1506,  -278,
-    -278,  -278,   153,  -278,  -278,   153,  -278,   997,  -278,   555,
-     555,  -278,  -278,   555,   555,   153,   153,  -278,   997,   729,
-    -278,   134,   146,   468,   555,   161,   168,  -278,   171,   152,
-    -278,  -278,  -278,  -278,  -278,   176,  -278,  -278,  -278,  -278,
-    -278,   729,  -278,   642,  -278,   642,  -278,  -278,   555,  -278,
-    -278
+     330,   -86,  -264,  -264,   928,  -264,  -264,   928,   928,   928,
+      -3,  -264,   928,   967,  -264,  -264,  -264,   -21,     7,   849,
+    -264,    31,   928,    38,    40,    37,    43,    59,   928,   888,
+      61,   928,   928,   928,   928,   928,   928,  -264,    63,    69,
+       3,   928,   928,   928,   928,     2,  -264,  -264,  -264,  -264,
+    -264,     4,    13,  1007,   770,   928,  1571,  -264,  -264,  -264,
+    -264,  -264,  -264,  -264,     6,   928,  1571,  1571,  1571,  1571,
+       5,   928,  1571,   928,     5,   928,  -264,  -264,     9,   928,
+    -264,   928,  -264,    62,  -264,  1571,    32,  -264,  -264,  1042,
+      80,  -264,   -48,   928,   -45,    64,  -264,  -264,  1406,  -264,
+      32,  -264,  -264,    10,   -57,  1075,  1108,  1141,  1174,  1439,
+    -264,    11,  -264,    83,   -57,   -57,  1505,  1571,    -8,  -264,
+     418,  1007,   928,  1007,    65,  1538,  -264,  1339,   928,   928,
+     928,   928,   928,   928,   928,   928,   928,   928,   928,   928,
+     928,   928,   928,   928,   928,  1042,   928,    14,  1505,   -78,
+      14,    91,  1571,  1571,   928,  -264,  -264,    92,   928,   928,
+    -264,   928,   928,  1373,   928,   928,  -264,  -264,   928,  -264,
+      93,   928,   928,   928,   928,   928,   928,   928,   928,   928,
+     928,    97,  -264,   -30,  -264,  -264,   928,  -264,    30,  1571,
+      33,  1472,   -86,   928,  -264,   928,  -264,   123,   123,   123,
+     -57,   -57,   -57,  1571,   123,   123,   229,   238,   238,   -57,
+     -57,  1571,  1571,  1571,  -264,  -264,  1571,   102,  -264,  1571,
+    1571,  1571,  1571,   928,   928,  1571,  1571,   102,  1571,  -264,
+    1571,  1207,  1571,  1240,  1571,  1273,  1571,  1306,  1571,  1571,
+    -264,  -264,  -264,   928,  1571,  -264,    29,  -264,  -264,   770,
+    1571,  1571,   594,  -264,   -12,  1571,  1571,   -12,   928,   928,
+     928,   928,   102,   -16,   594,    78,   928,   594,  -264,  -264,
+    -264,   118,   124,    49,    49,  1571,  1571,  1571,  1571,   -12,
+    -264,   125,   928,  1571,    -2,    -5,  -264,  -264,   127,  -264,
+    -264,    49,  -264,  1571,  -264,  -264,  -264,   122,  -264,  -264,
+     122,  -264,  1007,  -264,   594,   594,  -264,  -264,   594,   594,
+     122,   122,  -264,  1007,   770,  -264,   103,   109,   506,   594,
+     130,   133,  -264,   136,   119,  -264,  -264,  -264,  -264,  -264,
+     140,  -264,  -264,  -264,  -264,  -264,   770,  -264,   682,  -264,
+     682,  -264,  -264,   594,  -264,  -264
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -278,  -278,    23,    71,  -278,   -51,     0,  -278,  -278,  -278,
-     -75,  -226,   -97,  -117,  -278,  -278,  -278,  -277,  -126,   -61,
-    -189,  -278,  -278,     1,  -278,  -278,  -278,  -278,   181,   -22,
-    -278,  -278,  -278,  -278,  -278,  -278,  -278,  -211,  -212,  -278,
-     -25,   201
+    -264,  -264,    23,    51,  -264,   -51,     0,  -264,  -264,  -264,
+    -103,  -242,  -127,  -105,  -264,  -264,  -264,  -248,   -96,   -19,
+    -188,  -264,  -264,     1,  -264,  -264,  -264,  -264,  -264,   155,
+     -23,  -264,  -264,  -264,  -264,  -264,  -264,  -264,  -215,  -263,
+    -264,   -25,   172
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
@@ -895,332 +901,344 @@ static const yytype_int16 yypgoto[] =
 #define YYTABLE_NINF -7
 static const yytype_int16 yytable[] =
 {
-      48,   184,   123,   186,   158,    65,   116,   100,    66,    67,
-      68,   161,   252,    71,    68,   308,   210,   237,   115,    61,
-      84,   182,   238,    88,    62,   290,   267,   293,   308,    97,
-      84,    70,   103,   104,   105,   106,   107,   108,   223,   260,
-     159,   111,   112,   113,   114,   144,   274,   162,   294,   147,
-     291,   259,   236,   122,   262,   124,    61,   285,   261,   131,
-      91,    92,   244,   152,    75,   142,    80,   117,    82,   310,
-      76,   114,    93,   145,   301,   114,   110,   166,    87,   149,
-     310,   150,   139,   140,   275,   128,   129,    94,   130,   182,
-      95,   131,    96,   160,   101,   299,   300,   109,    61,   119,
-     303,   118,   304,    89,    90,   134,   135,   136,   137,   138,
-     181,   182,   313,   314,   139,   140,   143,    48,   151,   122,
-     185,   187,   141,   148,   241,   157,   193,   194,   195,   196,
-     197,   198,   199,   200,   201,   202,   203,   204,   205,   206,
-     207,   208,   114,   163,   209,   179,   338,   192,   167,   182,
-     188,   211,   212,   292,   214,   225,   215,   216,   240,   217,
-     218,   242,   221,   222,   277,   248,   224,   281,   309,   226,
-     227,   228,   229,   230,   231,   232,   233,   234,   235,   282,
-     312,   283,   287,   239,   298,   293,   266,   321,   183,   326,
-     245,   319,   246,   263,   323,   331,   327,   333,   276,   328,
-     329,   279,   280,   335,   334,   295,   128,   129,   317,   130,
-      99,   243,   131,   258,    73,     0,     0,   289,     0,     0,
-     250,   251,     0,     0,     0,     0,     0,   302,     0,   137,
-     138,     0,     0,     0,   311,   139,   140,     0,     0,   114,
-       0,     0,   315,   316,   318,     0,     0,     0,     0,     0,
-       0,     0,     0,   325,   270,   271,   272,   273,   320,   330,
-       0,   332,   278,   128,   129,     0,   130,     0,     0,   131,
-       0,     0,   268,     0,     0,   269,   339,   340,   288,     0,
-     336,     0,     0,     0,   135,   136,   137,   138,     0,     0,
-       0,     0,   139,   140,    -6,     1,     0,   286,   122,     0,
-       0,     0,     0,     0,     0,     2,     3,     4,     5,   122,
-       6,     7,     8,     9,    10,     0,    11,    12,    13,    14,
-       0,    15,     0,    16,     0,     0,     0,    17,     0,    18,
-      19,    20,     0,   337,    21,   337,     0,     0,     0,    22,
-      23,    24,     0,     0,    25,     0,     0,     0,    26,    27,
-      28,    29,     0,    30,     0,     0,     0,     0,     0,     0,
-       0,     0,    31,     0,     0,     0,     0,     0,     0,    32,
-      33,    34,    35,    36,     0,     0,    37,    38,    39,     0,
-       0,    40,    41,     0,     0,     0,    -6,    42,     0,     0,
-       0,    43,     2,     3,     4,     5,     0,     6,     7,     8,
-       9,    10,     0,    11,    12,    13,    14,     0,    15,     0,
-      16,     0,     0,     0,    17,     0,    18,    19,    20,     0,
-       0,    21,     0,     0,     0,     0,    22,    23,    24,     0,
-       0,    25,     0,     0,     0,    26,    27,    28,    29,     0,
-      30,     0,     0,     0,     0,     0,     0,     0,     0,    31,
-       0,     0,     0,     0,     0,     0,    32,    33,    34,    35,
-      36,     0,     0,    37,    38,    39,     0,     0,    40,    41,
-       0,     0,     0,     0,    42,     0,     0,     0,    43,     2,
+      49,   161,   119,   126,   164,    66,   101,    62,    67,    68,
+      69,   290,   257,    72,    69,   134,   188,   214,   190,   118,
+      85,    71,   186,    89,    63,    76,   295,   298,   306,    98,
+      85,    77,   104,   105,   106,   107,   108,   109,   162,   142,
+     143,   165,   114,   115,   116,   117,   147,   279,   299,   313,
+     150,   296,    92,    93,   125,    88,   127,   264,   315,   265,
+     267,    95,   313,   155,    94,   242,   145,    96,   120,   315,
+     243,   227,   117,    81,   148,    83,   117,   169,   266,   280,
+     152,    62,   153,    97,   186,   102,   241,   110,   272,    90,
+      91,   185,   186,   112,   163,    62,   249,   113,   121,   122,
+     144,   304,   305,   154,   160,   146,   308,   183,   309,   151,
+     170,   181,   166,   192,   186,   215,   218,   229,   318,   319,
+      49,   240,   125,   189,   191,   245,   253,   282,   247,   197,
+     198,   199,   200,   201,   202,   203,   204,   205,   206,   207,
+     208,   209,   210,   211,   212,   117,   286,   213,   287,   288,
+     196,   303,   343,   292,   298,   216,   326,   328,   331,   219,
+     220,   332,   221,   222,   333,   225,   226,   334,   339,   228,
+     246,   187,   230,   231,   232,   233,   234,   235,   236,   237,
+     238,   239,   300,   322,   100,    74,     0,   244,   297,   131,
+     132,     0,   133,     0,   250,   134,   251,   317,   268,     0,
+       0,     0,     0,   314,     0,     0,     0,     0,   324,     0,
+     137,   138,   139,   140,   141,   248,     0,     0,   263,   142,
+     143,     0,     0,     0,   255,   256,     0,     0,     0,     0,
+     336,     0,   338,   271,     0,     0,     0,     0,   340,     0,
+       0,     0,     0,     0,   117,   281,     0,     0,   284,   285,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   275,
+     276,   277,   278,   325,   294,     0,     0,   283,     0,     0,
+       0,     0,     0,     0,   307,     0,     0,   273,     0,     0,
+     274,   316,     0,   293,     0,   341,     0,     0,     0,   320,
+     321,   323,     0,     0,     0,   131,   132,     0,   133,     0,
+     330,   134,   291,   125,   131,   132,   335,   133,   337,     0,
+     134,     0,     0,     0,   125,     0,     0,   138,   139,   140,
+     141,     0,     0,   344,   345,   142,   143,     0,   140,   141,
+      -6,     1,     0,     0,   142,   143,     0,     0,   342,     0,
+     342,     2,     3,     4,     5,     0,     6,     7,     8,     9,
+      10,     0,    11,    12,    13,    14,     0,    15,     0,    16,
+       0,     0,     0,    17,     0,    18,    19,    20,     0,     0,
+      21,     0,     0,     0,     0,    22,    23,    24,     0,     0,
+      25,     0,     0,     0,    26,    27,    28,    29,     0,    30,
+       0,     0,     0,     0,     0,     0,     0,     0,    31,     0,
+       0,     0,     0,     0,     0,    32,    33,    34,    35,    36,
+       0,     0,    37,    38,    39,    40,     0,     0,    41,    42,
+       0,     0,     0,    -6,    43,     0,     0,     0,    44,     2,
        3,     4,     5,     0,     6,     7,     8,     9,    10,     0,
-      11,    12,    63,    14,     0,    15,   324,    16,     0,     0,
-       0,    17,     0,    18,    19,    20,     0,     0,     0,     0,
+      11,    12,    13,    14,     0,    15,     0,    16,     0,     0,
+       0,    17,     0,    18,    19,    20,     0,     0,    21,     0,
        0,     0,     0,    22,    23,    24,     0,     0,    25,     0,
-       0,     0,     0,     0,    28,    29,     0,    30,     0,     0,
+       0,     0,    26,    27,    28,    29,     0,    30,     0,     0,
        0,     0,     0,     0,     0,     0,    31,     0,     0,     0,
        0,     0,     0,    32,    33,    34,    35,    36,     0,     0,
-      37,     0,    39,     0,     0,    40,    41,     0,     0,     0,
-      61,    42,     0,     0,     0,    43,     2,     3,     4,     5,
-       0,     6,     7,     8,     9,    10,     0,    11,    12,    63,
-      14,     0,    15,     0,    16,     0,     0,     0,    17,     0,
-      18,    19,    20,     0,     0,     0,     0,     0,     0,     0,
-      22,    23,    24,     0,     0,    25,     0,     0,     0,     0,
-       0,    28,    29,     0,    30,     0,     0,     0,     0,     0,
-       0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
-      32,    33,    34,    35,    36,     0,     0,    37,     0,    39,
-       0,     0,    40,    41,     0,     0,     0,    61,    42,     0,
-       0,     0,    43,     2,     3,     4,     5,     0,     6,     7,
-       8,     9,    10,     0,    11,    12,    63,    14,     0,    15,
+      37,    38,    39,    40,     0,     0,    41,    42,     0,     0,
+       0,     0,    43,     0,     0,     0,    44,     2,     3,     4,
+       5,     0,     6,     7,     8,     9,    10,     0,    11,    12,
+      64,    14,     0,    15,   329,    16,     0,     0,     0,    17,
+       0,    18,    19,    20,     0,     0,     0,     0,     0,     0,
+       0,    22,    23,    24,     0,     0,    25,     0,     0,     0,
+       0,     0,    28,    29,     0,    30,     0,     0,     0,     0,
+       0,     0,     0,     0,    31,     0,     0,     0,     0,     0,
+       0,    32,    33,    34,    35,    36,     0,     0,    37,    38,
+       0,    40,     0,     0,    41,    42,     0,     0,     0,    62,
+      43,     0,     0,     0,    44,     2,     3,     4,     5,     0,
+       6,     7,     8,     9,    10,     0,    11,    12,    64,    14,
+       0,    15,     0,    16,     0,     0,     0,    17,     0,    18,
+      19,    20,     0,     0,     0,     0,     0,     0,     0,    22,
+      23,    24,     0,     0,    25,     0,     0,     0,     0,     0,
+      28,    29,     0,    30,     0,     0,     0,     0,     0,     0,
+       0,     0,    31,     0,     0,     0,     0,     0,     0,    32,
+      33,    34,    35,    36,     0,     0,    37,    38,     0,    40,
+       0,     0,    41,    42,     0,     0,     0,    62,    43,     0,
+       0,     0,    44,     2,     3,     4,     5,     0,     6,     7,
+       8,     9,    10,     0,    11,    12,    64,    14,     0,    15,
        0,    16,     0,     0,     0,    17,     0,    18,    19,    20,
        0,     0,     0,     0,     0,     0,     0,    22,    23,    24,
        0,     0,    25,     0,     0,     0,     0,     0,    28,    29,
        0,    30,     0,     0,     0,     0,     0,     0,     0,     0,
       31,     0,     0,     0,     0,     0,     0,    32,    33,    34,
-      35,    36,     0,     0,    37,     0,    39,     0,     0,    40,
-      41,     0,     0,     0,     0,    42,     0,     0,     0,    43,
-       2,     3,     4,     5,     0,     6,     7,     8,     9,    10,
-       0,    11,    12,    63,    14,   191,    15,     0,    16,     0,
-       0,     0,    17,     0,    18,    19,   125,   126,     0,     0,
-       0,   127,   128,   129,    22,   130,    24,     0,   131,   132,
-     133,     0,     0,     0,     0,    28,    29,     0,    30,     0,
-       0,     0,   134,   135,   136,   137,   138,    31,    61,     0,
-       0,   139,   140,     0,    32,    33,    34,    35,    36,     0,
-       0,     0,     0,    39,     0,     0,    40,    41,     2,     3,
-       4,     5,    42,     0,     0,     0,    43,     0,     0,    11,
-      12,    63,    14,     0,    15,     0,     0,     0,     0,     0,
-       0,    78,     0,     0,     0,     0,    79,     0,    80,    81,
-      82,    83,    64,     0,    24,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    31,     2,     3,     4,     5,
-       0,     0,    32,    33,    34,    35,    36,    11,    12,    63,
-      14,     0,    15,     0,    40,    41,     0,     0,     0,    78,
-      42,     0,     0,     0,    43,     0,    80,     0,    82,     0,
-      64,     0,    24,     2,     3,     4,     5,     0,     0,     0,
-       0,     0,     0,    98,    11,    12,    63,    14,     0,    15,
-       0,     0,     0,    31,     0,     0,     0,     0,     0,     0,
-      32,    33,    34,    35,    36,     0,     0,    64,     0,    24,
-       0,     0,    40,    41,     0,     0,     0,     0,    42,     0,
-       0,     0,    43,     0,     0,     0,     0,     0,     0,     0,
-      31,     2,     3,     4,     5,     0,     0,    32,    33,    34,
-      35,    36,    11,    12,    63,    14,     0,    15,     0,    40,
-      41,     0,     0,     0,     0,    42,     0,     0,     0,    43,
-       0,     0,     0,     0,     0,    64,     0,    24,     2,     3,
-       4,     5,     0,     0,     0,     0,     0,     0,     0,    11,
-      12,    63,    14,     0,    15,     0,     0,     0,    31,     0,
+      35,    36,     0,     0,    37,    38,     0,    40,     0,     0,
+      41,    42,     0,     0,     0,     0,    43,     0,     0,     0,
+      44,     2,     3,     4,     5,     0,     6,     7,     8,     9,
+      10,     0,    11,    12,    64,    14,     0,    15,     0,    16,
+       0,     0,     0,    17,     0,    18,    19,     0,     0,     0,
+       0,     0,     0,     0,     0,    22,     0,    24,     0,     0,
+       0,     0,     0,     0,     0,     0,    28,    29,     0,    30,
+       0,     0,     0,     0,     0,     0,     0,     0,    31,     0,
        0,     0,     0,     0,     0,    32,    33,    34,    35,    36,
-       0,     0,    64,     0,    24,     0,     0,    40,    41,     0,
-       0,     0,     0,    72,     0,     0,     0,    43,     0,     0,
-       0,     0,     0,     0,   154,    31,     0,     0,     0,     0,
+       0,     0,     0,    38,     0,    40,     0,     0,    41,    42,
+       2,     3,     4,     5,    43,     0,     0,     0,    44,     0,
+       0,    11,    12,    64,    14,     0,    15,     0,     0,     0,
+       0,     0,     0,    79,     0,     0,     0,     0,    80,     0,
+      81,    82,    83,    84,    65,     0,    24,     0,     0,     2,
+       3,     4,     5,     0,     0,     0,     0,     0,     0,     0,
+      11,    12,    64,    14,     0,    15,     0,    31,     0,     0,
+       0,     0,    79,     0,    32,    33,    34,    35,    36,    81,
+       0,    83,     0,    65,     0,    24,     0,    41,    42,     2,
+       3,     4,     5,    43,     0,     0,    99,    44,     0,     0,
+      11,    12,    64,    14,     0,    15,    31,     0,     0,     0,
+       0,     0,     0,    32,    33,    34,    35,    36,     0,     0,
+       0,     0,     0,    65,     0,    24,    41,    42,     2,     3,
+       4,     5,    43,     0,     0,     0,    44,     0,     0,    11,
+      12,    64,    14,     0,    15,     0,    31,     0,     0,     0,
+       0,     0,     0,    32,    33,    34,    35,    36,     0,     0,
+       0,     0,    65,     0,    24,     0,    41,    42,     2,     3,
+       4,     5,    43,     0,     0,     0,    44,     0,     0,    11,
+      12,    64,    14,     0,    15,    31,     0,     0,     0,     0,
        0,     0,    32,    33,    34,    35,    36,     0,     0,     0,
-       0,     0,     0,     0,    40,    41,   125,   126,     0,     0,
-     120,   127,   128,   129,    43,   130,   155,   156,   131,   132,
-     133,   168,     0,     0,     0,     0,     0,   169,     0,     0,
-       0,     0,   134,   135,   136,   137,   138,     0,   125,   126,
-       0,   139,   140,   127,   128,   129,     0,   130,     0,     0,
-     131,   132,   133,   170,     0,     0,     0,     0,     0,   171,
-       0,     0,     0,     0,   134,   135,   136,   137,   138,     0,
-     125,   126,     0,   139,   140,   127,   128,   129,     0,   130,
-       0,     0,   131,   132,   133,   172,     0,     0,     0,     0,
-       0,   173,     0,     0,     0,     0,   134,   135,   136,   137,
-     138,     0,   125,   126,     0,   139,   140,   127,   128,   129,
-       0,   130,     0,     0,   131,   132,   133,   174,     0,     0,
-       0,     0,     0,   175,     0,     0,     0,     0,   134,   135,
-     136,   137,   138,     0,   125,   126,     0,   139,   140,   127,
-     128,   129,     0,   130,     0,     0,   131,   132,   133,   253,
+       0,     0,    65,     0,    24,    41,    42,     0,     0,     0,
+       0,    73,     0,     0,     0,    44,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,    31,     0,     0,     0,     0,
+     157,     0,    32,    33,    34,    35,    36,     0,     0,     0,
+       0,     0,     0,     0,     0,    41,    42,     0,     0,     0,
+       0,   123,   128,   129,     0,    44,     0,   130,   131,   132,
+       0,   133,   158,   159,   134,   135,   136,     0,   171,     0,
+       0,     0,     0,     0,   172,     0,     0,     0,     0,   137,
+     138,   139,   140,   141,     0,   128,   129,     0,   142,   143,
+     130,   131,   132,     0,   133,     0,     0,   134,   135,   136,
+       0,   173,     0,     0,     0,     0,     0,   174,     0,     0,
+       0,     0,   137,   138,   139,   140,   141,     0,   128,   129,
+       0,   142,   143,   130,   131,   132,     0,   133,     0,     0,
+     134,   135,   136,     0,   175,     0,     0,     0,     0,     0,
+     176,     0,     0,     0,     0,   137,   138,   139,   140,   141,
+       0,   128,   129,     0,   142,   143,   130,   131,   132,     0,
+     133,     0,     0,   134,   135,   136,     0,   177,     0,     0,
+       0,     0,     0,   178,     0,     0,     0,     0,   137,   138,
+     139,   140,   141,     0,   128,   129,     0,   142,   143,   130,
+     131,   132,     0,   133,     0,     0,   134,   135,   136,     0,
+     258,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   137,   138,   139,   140,   141,     0,   128,   129,     0,
+     142,   143,   130,   131,   132,     0,   133,     0,     0,   134,
+     135,   136,     0,   259,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   137,   138,   139,   140,   141,     0,
+     128,   129,     0,   142,   143,   130,   131,   132,     0,   133,
+       0,     0,   134,   135,   136,     0,   260,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   137,   138,   139,
+     140,   141,     0,   128,   129,     0,   142,   143,   130,   131,
+     132,     0,   133,     0,     0,   134,   135,   136,     0,   261,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     134,   135,   136,   137,   138,     0,   125,   126,     0,   139,
-     140,   127,   128,   129,     0,   130,     0,     0,   131,   132,
-     133,   254,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   134,   135,   136,   137,   138,     0,   125,   126,
-       0,   139,   140,   127,   128,   129,     0,   130,     0,     0,
-     131,   132,   133,   255,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   134,   135,   136,   137,   138,     0,
-     125,   126,     0,   139,   140,   127,   128,   129,     0,   130,
-       0,     0,   131,   132,   133,   256,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   134,   135,   136,   137,
-     138,     0,   125,   126,     0,   139,   140,   127,   128,   129,
-       0,   130,     0,     0,   131,   132,   133,     0,     0,     0,
-       0,     0,     0,   219,     0,     0,     0,     0,   134,   135,
-     136,   137,   138,     0,   125,   126,     0,   139,   140,   127,
-     128,   129,     0,   130,     0,     0,   131,   132,   133,     0,
-       0,     0,     0,     0,     0,     0,     0,   165,     0,   220,
-     134,   135,   136,   137,   138,     0,   125,   126,     0,   139,
-     140,   127,   128,   129,     0,   130,     0,     0,   131,   132,
-     133,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   134,   135,   136,   137,   138,     0,   125,   126,
-       0,   139,   140,   127,   128,   129,     0,   130,     0,     0,
-     131,   132,   133,     0,     0,     0,     0,     0,   176,   177,
-       0,     0,     0,     0,   134,   135,   136,   137,   138,     0,
-     125,   126,     0,   139,   140,   127,   128,   129,     0,   130,
-       0,     0,   131,   132,   133,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   189,   134,   135,   136,   137,
-     138,     0,   125,   126,   180,   139,   140,   127,   128,   129,
-       0,   130,     0,     0,   131,   132,   133,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   134,   135,
-     136,   137,   138,     0,   125,   126,   180,   139,   140,   127,
-     128,   129,     0,   130,     0,     0,   131,   132,   133,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   189,
-     134,   135,   136,   137,   138,     0,   125,   126,     0,   139,
-     140,   127,   128,   129,     0,   130,     0,     0,   131,   132,
-     133,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   134,   135,   136,   137,   138,     0,     0,     0,
-       0,   139,   140
+     137,   138,   139,   140,   141,     0,   128,   129,     0,   142,
+     143,   130,   131,   132,     0,   133,     0,     0,   134,   135,
+     136,     0,     0,     0,     0,     0,     0,     0,   195,     0,
+       0,     0,     0,   137,   138,   139,   140,   141,     0,   128,
+     129,     0,   142,   143,   130,   131,   132,     0,   133,     0,
+       0,   134,   135,   136,     0,     0,     0,     0,     0,     0,
+       0,     0,   223,     0,     0,     0,   137,   138,   139,   140,
+     141,     0,    62,   128,   129,   142,   143,     0,   130,   131,
+     132,     0,   133,     0,     0,   134,   135,   136,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   168,     0,   224,
+     137,   138,   139,   140,   141,     0,   128,   129,     0,   142,
+     143,   130,   131,   132,     0,   133,     0,     0,   134,   135,
+     136,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   137,   138,   139,   140,   141,     0,   128,
+     129,     0,   142,   143,   130,   131,   132,     0,   133,     0,
+       0,   134,   135,   136,     0,     0,     0,     0,     0,   179,
+     180,     0,     0,     0,     0,     0,   137,   138,   139,   140,
+     141,     0,   128,   129,     0,   142,   143,   130,   131,   132,
+       0,   133,     0,     0,   134,   135,   136,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   193,   137,
+     138,   139,   140,   141,     0,   128,   129,   184,   142,   143,
+     130,   131,   132,     0,   133,     0,     0,   134,   135,   136,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   137,   138,   139,   140,   141,     0,   128,   129,
+     184,   142,   143,   130,   131,   132,     0,   133,     0,     0,
+     134,   135,   136,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   193,   137,   138,   139,   140,   141,
+       0,   128,   129,     0,   142,   143,   130,   131,   132,     0,
+     133,     0,     0,   134,   135,   136,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   137,   138,
+     139,   140,   141,     0,     0,     0,     0,   142,   143
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,   118,    53,   120,    49,     4,     0,    29,     7,     8,
-       9,    49,   223,    12,    13,   292,    94,    94,    43,    92,
-      19,    99,    99,    22,     1,    28,    99,    32,   305,    28,
-      29,    24,    31,    32,    33,    34,    35,    36,   164,    30,
-      85,    40,    41,    42,    43,    70,   257,    85,    53,    74,
-      53,   240,   178,    52,   243,    54,    92,   269,    49,    72,
-      12,    13,   188,    85,    46,    64,    41,    44,    43,   295,
-      24,    70,    24,    72,   286,    74,    93,    99,    24,    78,
-     306,    80,    95,    96,    94,    66,    67,    24,    69,    99,
-      24,    72,    24,    92,    24,   284,   285,    24,    92,    85,
-     289,    93,   291,    51,    52,    86,    87,    88,    89,    90,
-      98,    99,   301,   302,    95,    96,    99,   117,    41,   118,
-     119,   120,    93,    99,   185,    24,   125,   126,   127,   128,
+       0,    49,     0,    54,    49,     4,    29,    93,     7,     8,
+       9,   274,   227,    12,    13,    72,   121,    95,   123,    44,
+      19,    24,   100,    22,     1,    46,    28,    32,   291,    28,
+      29,    24,    31,    32,    33,    34,    35,    36,    86,    96,
+      97,    86,    41,    42,    43,    44,    71,   262,    53,   297,
+      75,    53,    12,    13,    53,    24,    55,   245,   300,    30,
+     248,    24,   310,    86,    24,    95,    65,    24,    45,   311,
+     100,   167,    71,    41,    73,    43,    75,   100,    49,    95,
+      79,    93,    81,    24,   100,    24,   182,    24,   100,    51,
+      52,    99,   100,    24,    93,    93,   192,    94,    94,    86,
+      94,   289,   290,    41,    24,   100,   294,    24,   296,   100,
+     100,   100,    48,    48,   100,    24,    24,    24,   306,   307,
+     120,    24,   121,   122,   123,    95,    24,    49,    95,   128,
      129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
-     139,   140,   141,    48,   143,    24,   335,   124,    99,    99,
-      48,    24,   151,   279,    24,    24,   155,   156,    94,   158,
-     159,    94,   161,   162,    49,    24,   165,    28,   294,   168,
-     169,   170,   171,   172,   173,   174,   175,   176,   177,    24,
-     297,    99,    28,   182,    24,    32,   247,    53,   117,    28,
-     189,   308,   191,   244,    48,   321,    28,   323,   259,    28,
-      48,   262,   263,   329,    28,   280,    66,    67,   305,    69,
-      29,   188,    72,   238,    13,    -1,    -1,   278,    -1,    -1,
-     219,   220,    -1,    -1,    -1,    -1,    -1,   288,    -1,    89,
-      90,    -1,    -1,    -1,   295,    95,    96,    -1,    -1,   238,
-      -1,    -1,   303,   304,   305,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   314,   253,   254,   255,   256,   309,   320,
-      -1,   322,   261,    66,    67,    -1,    69,    -1,    -1,    72,
-      -1,    -1,   249,    -1,    -1,   252,   337,   338,   277,    -1,
-     331,    -1,    -1,    -1,    87,    88,    89,    90,    -1,    -1,
-      -1,    -1,    95,    96,     0,     1,    -1,   274,   297,    -1,
-      -1,    -1,    -1,    -1,    -1,    11,    12,    13,    14,   308,
-      16,    17,    18,    19,    20,    -1,    22,    23,    24,    25,
-      -1,    27,    -1,    29,    -1,    -1,    -1,    33,    -1,    35,
-      36,    37,    -1,   333,    40,   335,    -1,    -1,    -1,    45,
-      46,    47,    -1,    -1,    50,    -1,    -1,    -1,    54,    55,
-      56,    57,    -1,    59,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,    75,
-      76,    77,    78,    79,    -1,    -1,    82,    83,    84,    -1,
-      -1,    87,    88,    -1,    -1,    -1,    92,    93,    -1,    -1,
-      -1,    97,    11,    12,    13,    14,    -1,    16,    17,    18,
-      19,    20,    -1,    22,    23,    24,    25,    -1,    27,    -1,
-      29,    -1,    -1,    -1,    33,    -1,    35,    36,    37,    -1,
-      -1,    40,    -1,    -1,    -1,    -1,    45,    46,    47,    -1,
-      -1,    50,    -1,    -1,    -1,    54,    55,    56,    57,    -1,
-      59,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,
-      -1,    -1,    -1,    -1,    -1,    -1,    75,    76,    77,    78,
-      79,    -1,    -1,    82,    83,    84,    -1,    -1,    87,    88,
-      -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    97,    11,
+     139,   140,   141,   142,   143,   144,    28,   146,    24,   100,
+     127,    24,   340,    28,    32,   154,    53,    48,    28,   158,
+     159,    28,   161,   162,    28,   164,   165,    48,    28,   168,
+     189,   120,   171,   172,   173,   174,   175,   176,   177,   178,
+     179,   180,   285,   310,    29,    13,    -1,   186,   284,    66,
+      67,    -1,    69,    -1,   193,    72,   195,   302,   249,    -1,
+      -1,    -1,    -1,   299,    -1,    -1,    -1,    -1,   313,    -1,
+      87,    88,    89,    90,    91,   192,    -1,    -1,   243,    96,
+      97,    -1,    -1,    -1,   223,   224,    -1,    -1,    -1,    -1,
+     326,    -1,   328,   252,    -1,    -1,    -1,    -1,   334,    -1,
+      -1,    -1,    -1,    -1,   243,   264,    -1,    -1,   267,   268,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   258,
+     259,   260,   261,   314,   283,    -1,    -1,   266,    -1,    -1,
+      -1,    -1,    -1,    -1,   293,    -1,    -1,   254,    -1,    -1,
+     257,   300,    -1,   282,    -1,   336,    -1,    -1,    -1,   308,
+     309,   310,    -1,    -1,    -1,    66,    67,    -1,    69,    -1,
+     319,    72,   279,   302,    66,    67,   325,    69,   327,    -1,
+      72,    -1,    -1,    -1,   313,    -1,    -1,    88,    89,    90,
+      91,    -1,    -1,   342,   343,    96,    97,    -1,    90,    91,
+       0,     1,    -1,    -1,    96,    97,    -1,    -1,   338,    -1,
+     340,    11,    12,    13,    14,    -1,    16,    17,    18,    19,
+      20,    -1,    22,    23,    24,    25,    -1,    27,    -1,    29,
+      -1,    -1,    -1,    33,    -1,    35,    36,    37,    -1,    -1,
+      40,    -1,    -1,    -1,    -1,    45,    46,    47,    -1,    -1,
+      50,    -1,    -1,    -1,    54,    55,    56,    57,    -1,    59,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,
+      -1,    -1,    -1,    -1,    -1,    75,    76,    77,    78,    79,
+      -1,    -1,    82,    83,    84,    85,    -1,    -1,    88,    89,
+      -1,    -1,    -1,    93,    94,    -1,    -1,    -1,    98,    11,
       12,    13,    14,    -1,    16,    17,    18,    19,    20,    -1,
-      22,    23,    24,    25,    -1,    27,    28,    29,    -1,    -1,
-      -1,    33,    -1,    35,    36,    37,    -1,    -1,    -1,    -1,
+      22,    23,    24,    25,    -1,    27,    -1,    29,    -1,    -1,
+      -1,    33,    -1,    35,    36,    37,    -1,    -1,    40,    -1,
       -1,    -1,    -1,    45,    46,    47,    -1,    -1,    50,    -1,
-      -1,    -1,    -1,    -1,    56,    57,    -1,    59,    -1,    -1,
+      -1,    -1,    54,    55,    56,    57,    -1,    59,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    -1,
       -1,    -1,    -1,    75,    76,    77,    78,    79,    -1,    -1,
-      82,    -1,    84,    -1,    -1,    87,    88,    -1,    -1,    -1,
-      92,    93,    -1,    -1,    -1,    97,    11,    12,    13,    14,
-      -1,    16,    17,    18,    19,    20,    -1,    22,    23,    24,
-      25,    -1,    27,    -1,    29,    -1,    -1,    -1,    33,    -1,
-      35,    36,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      45,    46,    47,    -1,    -1,    50,    -1,    -1,    -1,    -1,
-      -1,    56,    57,    -1,    59,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,
-      75,    76,    77,    78,    79,    -1,    -1,    82,    -1,    84,
-      -1,    -1,    87,    88,    -1,    -1,    -1,    92,    93,    -1,
-      -1,    -1,    97,    11,    12,    13,    14,    -1,    16,    17,
+      82,    83,    84,    85,    -1,    -1,    88,    89,    -1,    -1,
+      -1,    -1,    94,    -1,    -1,    -1,    98,    11,    12,    13,
+      14,    -1,    16,    17,    18,    19,    20,    -1,    22,    23,
+      24,    25,    -1,    27,    28,    29,    -1,    -1,    -1,    33,
+      -1,    35,    36,    37,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    45,    46,    47,    -1,    -1,    50,    -1,    -1,    -1,
+      -1,    -1,    56,    57,    -1,    59,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,
+      -1,    75,    76,    77,    78,    79,    -1,    -1,    82,    83,
+      -1,    85,    -1,    -1,    88,    89,    -1,    -1,    -1,    93,
+      94,    -1,    -1,    -1,    98,    11,    12,    13,    14,    -1,
+      16,    17,    18,    19,    20,    -1,    22,    23,    24,    25,
+      -1,    27,    -1,    29,    -1,    -1,    -1,    33,    -1,    35,
+      36,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,
+      46,    47,    -1,    -1,    50,    -1,    -1,    -1,    -1,    -1,
+      56,    57,    -1,    59,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,    75,
+      76,    77,    78,    79,    -1,    -1,    82,    83,    -1,    85,
+      -1,    -1,    88,    89,    -1,    -1,    -1,    93,    94,    -1,
+      -1,    -1,    98,    11,    12,    13,    14,    -1,    16,    17,
       18,    19,    20,    -1,    22,    23,    24,    25,    -1,    27,
       -1,    29,    -1,    -1,    -1,    33,    -1,    35,    36,    37,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
       -1,    -1,    50,    -1,    -1,    -1,    -1,    -1,    56,    57,
       -1,    59,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       68,    -1,    -1,    -1,    -1,    -1,    -1,    75,    76,    77,
-      78,    79,    -1,    -1,    82,    -1,    84,    -1,    -1,    87,
-      88,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    97,
-      11,    12,    13,    14,    -1,    16,    17,    18,    19,    20,
-      -1,    22,    23,    24,    25,    49,    27,    -1,    29,    -1,
-      -1,    -1,    33,    -1,    35,    36,    60,    61,    -1,    -1,
-      -1,    65,    66,    67,    45,    69,    47,    -1,    72,    73,
-      74,    -1,    -1,    -1,    -1,    56,    57,    -1,    59,    -1,
-      -1,    -1,    86,    87,    88,    89,    90,    68,    92,    -1,
-      -1,    95,    96,    -1,    75,    76,    77,    78,    79,    -1,
-      -1,    -1,    -1,    84,    -1,    -1,    87,    88,    11,    12,
-      13,    14,    93,    -1,    -1,    -1,    97,    -1,    -1,    22,
-      23,    24,    25,    -1,    27,    -1,    -1,    -1,    -1,    -1,
-      -1,    34,    -1,    -1,    -1,    -1,    39,    -1,    41,    42,
-      43,    44,    45,    -1,    47,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    68,    11,    12,    13,    14,
-      -1,    -1,    75,    76,    77,    78,    79,    22,    23,    24,
-      25,    -1,    27,    -1,    87,    88,    -1,    -1,    -1,    34,
-      93,    -1,    -1,    -1,    97,    -1,    41,    -1,    43,    -1,
-      45,    -1,    47,    11,    12,    13,    14,    -1,    -1,    -1,
-      -1,    -1,    -1,    58,    22,    23,    24,    25,    -1,    27,
-      -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,    -1,    -1,
-      75,    76,    77,    78,    79,    -1,    -1,    45,    -1,    47,
-      -1,    -1,    87,    88,    -1,    -1,    -1,    -1,    93,    -1,
-      -1,    -1,    97,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      68,    11,    12,    13,    14,    -1,    -1,    75,    76,    77,
-      78,    79,    22,    23,    24,    25,    -1,    27,    -1,    87,
-      88,    -1,    -1,    -1,    -1,    93,    -1,    -1,    -1,    97,
-      -1,    -1,    -1,    -1,    -1,    45,    -1,    47,    11,    12,
-      13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    22,
-      23,    24,    25,    -1,    27,    -1,    -1,    -1,    68,    -1,
+      78,    79,    -1,    -1,    82,    83,    -1,    85,    -1,    -1,
+      88,    89,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,
+      98,    11,    12,    13,    14,    -1,    16,    17,    18,    19,
+      20,    -1,    22,    23,    24,    25,    -1,    27,    -1,    29,
+      -1,    -1,    -1,    33,    -1,    35,    36,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    45,    -1,    47,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    56,    57,    -1,    59,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    -1,
       -1,    -1,    -1,    -1,    -1,    75,    76,    77,    78,    79,
-      -1,    -1,    45,    -1,    47,    -1,    -1,    87,    88,    -1,
-      -1,    -1,    -1,    93,    -1,    -1,    -1,    97,    -1,    -1,
-      -1,    -1,    -1,    -1,    38,    68,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    83,    -1,    85,    -1,    -1,    88,    89,
+      11,    12,    13,    14,    94,    -1,    -1,    -1,    98,    -1,
+      -1,    22,    23,    24,    25,    -1,    27,    -1,    -1,    -1,
+      -1,    -1,    -1,    34,    -1,    -1,    -1,    -1,    39,    -1,
+      41,    42,    43,    44,    45,    -1,    47,    -1,    -1,    11,
+      12,    13,    14,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      22,    23,    24,    25,    -1,    27,    -1,    68,    -1,    -1,
+      -1,    -1,    34,    -1,    75,    76,    77,    78,    79,    41,
+      -1,    43,    -1,    45,    -1,    47,    -1,    88,    89,    11,
+      12,    13,    14,    94,    -1,    -1,    58,    98,    -1,    -1,
+      22,    23,    24,    25,    -1,    27,    68,    -1,    -1,    -1,
+      -1,    -1,    -1,    75,    76,    77,    78,    79,    -1,    -1,
+      -1,    -1,    -1,    45,    -1,    47,    88,    89,    11,    12,
+      13,    14,    94,    -1,    -1,    -1,    98,    -1,    -1,    22,
+      23,    24,    25,    -1,    27,    -1,    68,    -1,    -1,    -1,
+      -1,    -1,    -1,    75,    76,    77,    78,    79,    -1,    -1,
+      -1,    -1,    45,    -1,    47,    -1,    88,    89,    11,    12,
+      13,    14,    94,    -1,    -1,    -1,    98,    -1,    -1,    22,
+      23,    24,    25,    -1,    27,    68,    -1,    -1,    -1,    -1,
       -1,    -1,    75,    76,    77,    78,    79,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    87,    88,    60,    61,    -1,    -1,
-      93,    65,    66,    67,    97,    69,    70,    71,    72,    73,
-      74,    43,    -1,    -1,    -1,    -1,    -1,    49,    -1,    -1,
-      -1,    -1,    86,    87,    88,    89,    90,    -1,    60,    61,
-      -1,    95,    96,    65,    66,    67,    -1,    69,    -1,    -1,
-      72,    73,    74,    43,    -1,    -1,    -1,    -1,    -1,    49,
-      -1,    -1,    -1,    -1,    86,    87,    88,    89,    90,    -1,
-      60,    61,    -1,    95,    96,    65,    66,    67,    -1,    69,
-      -1,    -1,    72,    73,    74,    43,    -1,    -1,    -1,    -1,
-      -1,    49,    -1,    -1,    -1,    -1,    86,    87,    88,    89,
-      90,    -1,    60,    61,    -1,    95,    96,    65,    66,    67,
-      -1,    69,    -1,    -1,    72,    73,    74,    43,    -1,    -1,
-      -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,    86,    87,
-      88,    89,    90,    -1,    60,    61,    -1,    95,    96,    65,
-      66,    67,    -1,    69,    -1,    -1,    72,    73,    74,    43,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      86,    87,    88,    89,    90,    -1,    60,    61,    -1,    95,
-      96,    65,    66,    67,    -1,    69,    -1,    -1,    72,    73,
-      74,    43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    86,    87,    88,    89,    90,    -1,    60,    61,
-      -1,    95,    96,    65,    66,    67,    -1,    69,    -1,    -1,
-      72,    73,    74,    43,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    86,    87,    88,    89,    90,    -1,
-      60,    61,    -1,    95,    96,    65,    66,    67,    -1,    69,
-      -1,    -1,    72,    73,    74,    43,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    86,    87,    88,    89,
-      90,    -1,    60,    61,    -1,    95,    96,    65,    66,    67,
-      -1,    69,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,
-      -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,    86,    87,
-      88,    89,    90,    -1,    60,    61,    -1,    95,    96,    65,
+      -1,    -1,    45,    -1,    47,    88,    89,    -1,    -1,    -1,
+      -1,    94,    -1,    -1,    -1,    98,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,    -1,    -1,
+      38,    -1,    75,    76,    77,    78,    79,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    88,    89,    -1,    -1,    -1,
+      -1,    94,    60,    61,    -1,    98,    -1,    65,    66,    67,
+      -1,    69,    70,    71,    72,    73,    74,    -1,    43,    -1,
+      -1,    -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,    87,
+      88,    89,    90,    91,    -1,    60,    61,    -1,    96,    97,
+      65,    66,    67,    -1,    69,    -1,    -1,    72,    73,    74,
+      -1,    43,    -1,    -1,    -1,    -1,    -1,    49,    -1,    -1,
+      -1,    -1,    87,    88,    89,    90,    91,    -1,    60,    61,
+      -1,    96,    97,    65,    66,    67,    -1,    69,    -1,    -1,
+      72,    73,    74,    -1,    43,    -1,    -1,    -1,    -1,    -1,
+      49,    -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,
+      -1,    60,    61,    -1,    96,    97,    65,    66,    67,    -1,
+      69,    -1,    -1,    72,    73,    74,    -1,    43,    -1,    -1,
+      -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,    87,    88,
+      89,    90,    91,    -1,    60,    61,    -1,    96,    97,    65,
       66,    67,    -1,    69,    -1,    -1,    72,    73,    74,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    51,    -1,    85,
-      86,    87,    88,    89,    90,    -1,    60,    61,    -1,    95,
-      96,    65,    66,    67,    -1,    69,    -1,    -1,    72,    73,
+      43,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    87,    88,    89,    90,    91,    -1,    60,    61,    -1,
+      96,    97,    65,    66,    67,    -1,    69,    -1,    -1,    72,
+      73,    74,    -1,    43,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    87,    88,    89,    90,    91,    -1,
+      60,    61,    -1,    96,    97,    65,    66,    67,    -1,    69,
+      -1,    -1,    72,    73,    74,    -1,    43,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,
+      90,    91,    -1,    60,    61,    -1,    96,    97,    65,    66,
+      67,    -1,    69,    -1,    -1,    72,    73,    74,    -1,    43,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      87,    88,    89,    90,    91,    -1,    60,    61,    -1,    96,
+      97,    65,    66,    67,    -1,    69,    -1,    -1,    72,    73,
+      74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,    -1,
+      -1,    -1,    -1,    87,    88,    89,    90,    91,    -1,    60,
+      61,    -1,    96,    97,    65,    66,    67,    -1,    69,    -1,
+      -1,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    49,    -1,    -1,    -1,    87,    88,    89,    90,
+      91,    -1,    93,    60,    61,    96,    97,    -1,    65,    66,
+      67,    -1,    69,    -1,    -1,    72,    73,    74,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    51,    -1,    86,
+      87,    88,    89,    90,    91,    -1,    60,    61,    -1,    96,
+      97,    65,    66,    67,    -1,    69,    -1,    -1,    72,    73,
       74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    86,    87,    88,    89,    90,    -1,    60,    61,
-      -1,    95,    96,    65,    66,    67,    -1,    69,    -1,    -1,
-      72,    73,    74,    -1,    -1,    -1,    -1,    -1,    80,    81,
-      -1,    -1,    -1,    -1,    86,    87,    88,    89,    90,    -1,
-      60,    61,    -1,    95,    96,    65,    66,    67,    -1,    69,
-      -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    85,    86,    87,    88,    89,
-      90,    -1,    60,    61,    94,    95,    96,    65,    66,    67,
+      -1,    -1,    -1,    87,    88,    89,    90,    91,    -1,    60,
+      61,    -1,    96,    97,    65,    66,    67,    -1,    69,    -1,
+      -1,    72,    73,    74,    -1,    -1,    -1,    -1,    -1,    80,
+      81,    -1,    -1,    -1,    -1,    -1,    87,    88,    89,    90,
+      91,    -1,    60,    61,    -1,    96,    97,    65,    66,    67,
       -1,    69,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    87,
-      88,    89,    90,    -1,    60,    61,    94,    95,    96,    65,
-      66,    67,    -1,    69,    -1,    -1,    72,    73,    74,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    85,
-      86,    87,    88,    89,    90,    -1,    60,    61,    -1,    95,
-      96,    65,    66,    67,    -1,    69,    -1,    -1,    72,    73,
-      74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    86,    87,    88,    89,    90,    -1,    -1,    -1,
-      -1,    95,    96
+      88,    89,    90,    91,    -1,    60,    61,    95,    96,    97,
+      65,    66,    67,    -1,    69,    -1,    -1,    72,    73,    74,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    87,    88,    89,    90,    91,    -1,    60,    61,
+      95,    96,    97,    65,    66,    67,    -1,    69,    -1,    -1,
+      72,    73,    74,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    86,    87,    88,    89,    90,    91,
+      -1,    60,    61,    -1,    96,    97,    65,    66,    67,    -1,
+      69,    -1,    -1,    72,    73,    74,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    87,    88,
+      89,    90,    91,    -1,    -1,    -1,    -1,    96,    97
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1231,37 +1249,37 @@ static const yytype_uint8 yystos[] =
       20,    22,    23,    24,    25,    27,    29,    33,    35,    36,
       37,    40,    45,    46,    47,    50,    54,    55,    56,    57,
       59,    68,    75,    76,    77,    78,    79,    82,    83,    84,
-      87,    88,    93,    97,   101,   103,   104,   105,   106,   107,
-     114,   115,   116,   121,   122,   123,   124,   127,   130,   132,
-     139,    92,   102,    24,    45,   123,   123,   123,   123,   141,
-      24,   123,    93,   141,   131,    46,    24,   125,    34,    39,
-      41,    42,    43,    44,   123,   128,   129,    24,   123,    51,
-      52,    12,    13,    24,    24,    24,    24,   123,    58,   128,
-     129,    24,   126,   123,   123,   123,   123,   123,   123,    24,
-      93,   123,   123,   123,   123,   140,     0,   102,    93,    85,
-      93,   113,   123,   105,   123,    60,    61,    65,    66,    67,
-      69,    72,    73,    74,    86,    87,    88,    89,    90,    95,
-      96,    93,   123,    99,   140,   123,   140,   140,    99,   123,
-     123,    41,   129,   133,    38,    70,    71,    24,    49,    85,
-     123,    49,    85,    48,   134,    51,   129,    99,    43,    49,
-      43,    49,    43,    49,    43,    49,    80,    81,   135,    24,
-      94,    98,    99,   103,   113,   123,   113,   123,    48,    85,
-     119,    49,   102,   123,   123,   123,   123,   123,   123,   123,
-     123,   123,   123,   123,   123,   123,   123,   123,   123,   123,
-      94,    24,   123,   118,    24,   123,   123,   123,   123,    49,
-      85,   123,   123,   118,   123,    24,   123,   123,   123,   123,
-     123,   123,   123,   123,   123,   123,   118,    94,    99,   123,
-      94,   119,    94,   102,   118,   123,   123,   120,    24,   137,
-     123,   123,   137,    43,    43,    43,    43,   136,   140,   120,
-      30,    49,   120,   105,   102,   106,   119,    99,   102,   102,
-     123,   123,   123,   123,   137,    94,   119,    49,   123,   119,
-     119,    28,    24,    99,   138,   138,   102,    28,   123,   119,
-      28,    53,   118,    32,    53,   110,   111,   117,    24,   120,
-     120,   138,   119,   120,   120,   109,   110,   112,   117,   118,
-     111,   119,   113,   120,   120,   119,   119,   112,   119,   113,
-     105,    53,   108,    48,    28,   119,    28,    28,    28,    48,
-     119,   118,   119,   118,    28,   118,   105,   106,   120,   119,
-     119
+      85,    88,    89,    94,    98,   102,   104,   105,   106,   107,
+     108,   115,   116,   117,   122,   123,   124,   125,   129,   132,
+     134,   141,    93,   103,    24,    45,   124,   124,   124,   124,
+     143,    24,   124,    94,   143,   133,    46,    24,   126,    34,
+      39,    41,    42,    43,    44,   124,   130,   131,    24,   124,
+      51,    52,    12,    13,    24,    24,    24,    24,   124,    58,
+     130,   131,    24,   128,   124,   124,   124,   124,   124,   124,
+      24,   127,    24,    94,   124,   124,   124,   124,   142,     0,
+     103,    94,    86,    94,   114,   124,   106,   124,    60,    61,
+      65,    66,    67,    69,    72,    73,    74,    87,    88,    89,
+      90,    91,    96,    97,    94,   124,   100,   142,   124,   142,
+     142,   100,   124,   124,    41,   131,   135,    38,    70,    71,
+      24,    49,    86,   124,    49,    86,    48,   136,    51,   131,
+     100,    43,    49,    43,    49,    43,    49,    43,    49,    80,
+      81,   100,   137,    24,    95,    99,   100,   104,   114,   124,
+     114,   124,    48,    86,   120,    49,   103,   124,   124,   124,
+     124,   124,   124,   124,   124,   124,   124,   124,   124,   124,
+     124,   124,   124,   124,    95,    24,   124,   119,    24,   124,
+     124,   124,   124,    49,    86,   124,   124,   119,   124,    24,
+     124,   124,   124,   124,   124,   124,   124,   124,   124,   124,
+      24,   119,    95,   100,   124,    95,   120,    95,   103,   119,
+     124,   124,   121,    24,   139,   124,   124,   139,    43,    43,
+      43,    43,   138,   142,   121,    30,    49,   121,   106,   103,
+     107,   120,   100,   103,   103,   124,   124,   124,   124,   139,
+      95,   120,    49,   124,   120,   120,    28,    24,   100,   140,
+     140,   103,    28,   124,   120,    28,    53,   119,    32,    53,
+     111,   112,   118,    24,   121,   121,   140,   120,   121,   121,
+     110,   111,   113,   118,   119,   112,   120,   114,   121,   121,
+     120,   120,   113,   120,   114,   106,    53,   109,    48,    28,
+     120,    28,    28,    28,    48,   120,   119,   120,   119,    28,
+     119,   106,   107,   121,   120,   120
 };
 
 #define yyerrok		(yyerrstatus = 0)
@@ -2692,165 +2710,175 @@ yyreduce:
 							  g_lingo->code1(g_lingo->c_procret); ;}
     break;
 
-  case 107:
-#line 481 "engines/director/lingo/lingo-gr.y"
+  case 108:
+#line 482 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->_builtins[*(yyvsp[(1) - (1)].s)]->u.func);
 		delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 108:
-#line 484 "engines/director/lingo/lingo-gr.y"
+  case 109:
+#line 485 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->_builtins[*(yyvsp[(1) - (2)].s)]->u.func);
 		delete (yyvsp[(1) - (2)].s); ;}
     break;
 
-  case 109:
-#line 487 "engines/director/lingo/lingo-gr.y"
+  case 110:
+#line 488 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->_builtins[*(yyvsp[(1) - (2)].s)]->u.func);
 		delete (yyvsp[(1) - (2)].s); ;}
     break;
 
-  case 110:
-#line 490 "engines/director/lingo/lingo-gr.y"
+  case 111:
+#line 491 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code2(g_lingo->c_voidpush, g_lingo->_builtins[*(yyvsp[(1) - (1)].s)]->u.func);
 		delete (yyvsp[(1) - (1)].s); ;}
     break;
 
-  case 111:
-#line 493 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->codeFunc((yyvsp[(1) - (2)].s), (yyvsp[(2) - (2)].narg)); ;}
-    break;
-
   case 112:
 #line 494 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->codeMe((yyvsp[(3) - (4)].s), 0); ;}
+    { g_lingo->codeFunc((yyvsp[(1) - (2)].s), (yyvsp[(2) - (2)].narg)); ;}
     break;
 
   case 113:
 #line 495 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->codeMe((yyvsp[(3) - (6)].s), (yyvsp[(5) - (6)].narg)); ;}
+    { g_lingo->codeMe((yyvsp[(3) - (4)].s), 0); ;}
     break;
 
   case 114:
 #line 496 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_open); ;}
+    { g_lingo->codeMe((yyvsp[(3) - (6)].s), (yyvsp[(5) - (6)].narg)); ;}
     break;
 
   case 115:
 #line 497 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code2(g_lingo->c_voidpush, g_lingo->c_open); ;}
+    { g_lingo->code1(g_lingo->c_open); ;}
     break;
 
   case 116:
 #line 498 "engines/director/lingo/lingo-gr.y"
-    { Common::String s(*(yyvsp[(1) - (3)].s)); s += '-'; s += *(yyvsp[(2) - (3)].s); g_lingo->codeFunc(&s, (yyvsp[(3) - (3)].narg)); ;}
+    { g_lingo->code2(g_lingo->c_voidpush, g_lingo->c_open); ;}
     break;
 
   case 117:
-#line 501 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
+#line 499 "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 118:
 #line 502 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
+    { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
   case 119:
-#line 505 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
+#line 503 "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 120:
 #line 506 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_instance); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(3) - (3)].s); ;}
+    { g_lingo->code1(g_lingo->c_property); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;}
     break;
 
   case 121:
-#line 517 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotoloop); ;}
+#line 507 "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 122:
-#line 518 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotonext); ;}
+#line 510 "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 123:
-#line 519 "engines/director/lingo/lingo-gr.y"
-    { g_lingo->code1(g_lingo->c_gotoprevious); ;}
+#line 511 "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 124:
-#line 520 "engines/director/lingo/lingo-gr.y"
+#line 522 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_gotoloop); ;}
+    break;
+
+  case 125:
+#line 523 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_gotonext); ;}
+    break;
+
+  case 126:
+#line 524 "engines/director/lingo/lingo-gr.y"
+    { g_lingo->code1(g_lingo->c_gotoprevious); ;}
+    break;
+
+  case 127:
+#line 525 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(1);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 125:
-#line 523 "engines/director/lingo/lingo-gr.y"
+  case 128:
+#line 528 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(3);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 126:
-#line 526 "engines/director/lingo/lingo-gr.y"
+  case 129:
+#line 531 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(2);
 		g_lingo->code1(g_lingo->c_goto); ;}
     break;
 
-  case 131:
-#line 539 "engines/director/lingo/lingo-gr.y"
+  case 134:
+#line 544 "engines/director/lingo/lingo-gr.y"
     { g_lingo->code1(g_lingo->c_playdone); ;}
     break;
 
-  case 132:
-#line 540 "engines/director/lingo/lingo-gr.y"
+  case 135:
+#line 545 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(1);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 133:
-#line 543 "engines/director/lingo/lingo-gr.y"
+  case 136:
+#line 548 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(3);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 134:
-#line 546 "engines/director/lingo/lingo-gr.y"
+  case 137:
+#line 551 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeConst(2);
 		g_lingo->code1(g_lingo->c_play); ;}
     break;
 
-  case 135:
-#line 549 "engines/director/lingo/lingo-gr.y"
+  case 138:
+#line 554 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeSetImmediate(true); ;}
     break;
 
-  case 136:
-#line 549 "engines/director/lingo/lingo-gr.y"
+  case 139:
+#line 554 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->codeSetImmediate(false);
 		g_lingo->codeFunc((yyvsp[(1) - (3)].s), (yyvsp[(3) - (3)].narg)); ;}
     break;
 
-  case 137:
-#line 579 "engines/director/lingo/lingo-gr.y"
+  case 140:
+#line 584 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 138:
-#line 580 "engines/director/lingo/lingo-gr.y"
+  case 141:
+#line 585 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeConst(0); // Push fake value on stack
 			g_lingo->code1(g_lingo->c_procret);
@@ -2858,38 +2886,38 @@ yyreduce:
 			g_lingo->_indef = false; ;}
     break;
 
-  case 139:
-#line 585 "engines/director/lingo/lingo-gr.y"
+  case 142:
+#line 590 "engines/director/lingo/lingo-gr.y"
     {
 			g_lingo->codeFactory(*(yyvsp[(2) - (2)].s));
 		;}
     break;
 
-  case 140:
-#line 588 "engines/director/lingo/lingo-gr.y"
+  case 143:
+#line 593 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; ;}
     break;
 
-  case 141:
-#line 589 "engines/director/lingo/lingo-gr.y"
+  case 144:
+#line 594 "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 142:
-#line 593 "engines/director/lingo/lingo-gr.y"
+  case 145:
+#line 598 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;}
     break;
 
-  case 143:
-#line 594 "engines/director/lingo/lingo-gr.y"
+  case 146:
+#line 599 "engines/director/lingo/lingo-gr.y"
     { g_lingo->_ignoreMe = true; ;}
     break;
 
-  case 144:
-#line 594 "engines/director/lingo/lingo-gr.y"
+  case 147:
+#line 599 "engines/director/lingo/lingo-gr.y"
     {
 				g_lingo->codeConst(0); // Push fake value on stack
 				g_lingo->code1(g_lingo->c_procret);
@@ -2901,33 +2929,33 @@ yyreduce:
 			;}
     break;
 
-  case 145:
-#line 604 "engines/director/lingo/lingo-gr.y"
+  case 148:
+#line 609 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
-  case 146:
-#line 605 "engines/director/lingo/lingo-gr.y"
+  case 149:
+#line 610 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;}
     break;
 
-  case 147:
-#line 606 "engines/director/lingo/lingo-gr.y"
+  case 150:
+#line 611 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
-  case 148:
-#line 607 "engines/director/lingo/lingo-gr.y"
+  case 151:
+#line 612 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;}
     break;
 
-  case 149:
-#line 610 "engines/director/lingo/lingo-gr.y"
+  case 152:
+#line 615 "engines/director/lingo/lingo-gr.y"
     { g_lingo->codeArgStore(); ;}
     break;
 
-  case 150:
-#line 614 "engines/director/lingo/lingo-gr.y"
+  case 153:
+#line 619 "engines/director/lingo/lingo-gr.y"
     {
 		g_lingo->code1(g_lingo->c_call);
 		g_lingo->codeString((yyvsp[(1) - (2)].s)->c_str());
@@ -2936,34 +2964,34 @@ yyreduce:
 		g_lingo->code1(numpar); ;}
     break;
 
-  case 151:
-#line 622 "engines/director/lingo/lingo-gr.y"
+  case 154:
+#line 627 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 0; ;}
     break;
 
-  case 152:
-#line 623 "engines/director/lingo/lingo-gr.y"
+  case 155:
+#line 628 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 1; ;}
     break;
 
-  case 153:
-#line 624 "engines/director/lingo/lingo-gr.y"
+  case 156:
+#line 629 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
-  case 154:
-#line 627 "engines/director/lingo/lingo-gr.y"
+  case 157:
+#line 632 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = 1; ;}
     break;
 
-  case 155:
-#line 628 "engines/director/lingo/lingo-gr.y"
+  case 158:
+#line 633 "engines/director/lingo/lingo-gr.y"
     { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;}
     break;
 
 
 /* Line 1267 of yacc.c.  */
-#line 2967 "engines/director/lingo/lingo-gr.cpp"
+#line 2995 "engines/director/lingo/lingo-gr.cpp"
       default: break;
     }
   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -3177,6 +3205,6 @@ yyreturn:
 }
 
 
-#line 631 "engines/director/lingo/lingo-gr.y"
+#line 636 "engines/director/lingo/lingo-gr.y"
 
 
diff --git a/engines/director/lingo/lingo-gr.h b/engines/director/lingo/lingo-gr.h
index 367837d..2c4b95c 100644
--- a/engines/director/lingo/lingo-gr.h
+++ b/engines/director/lingo/lingo-gr.h
@@ -119,8 +119,9 @@
      tINTERSECTS = 335,
      tWITHIN = 336,
      tTELL = 337,
-     tON = 338,
-     tME = 339
+     tPROPERTY = 338,
+     tON = 339,
+     tME = 340
    };
 #endif
 /* Tokens.  */
@@ -204,8 +205,9 @@
 #define tINTERSECTS 335
 #define tWITHIN 336
 #define tTELL 337
-#define tON 338
-#define tME 339
+#define tPROPERTY 338
+#define tON 339
+#define tME 340
 
 
 
@@ -223,7 +225,7 @@ typedef union YYSTYPE
 	Common::Array<double> *arr;
 }
 /* Line 1529 of yacc.c.  */
-#line 227 "engines/director/lingo/lingo-gr.hpp"
+#line 229 "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 f20c4e8..ee4d8db 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -100,7 +100,7 @@ void checkEnd(Common::String *token, const char *expect, bool required) {
 %token tWITH tWHILE tNLELSE tFACTORY tMETHOD tOPEN tPLAY tDONE tINSTANCE
 %token tGE tLE tGT tLT tEQ tNEQ tAND tOR tNOT tMOD
 %token tAFTER tBEFORE tCONCAT tCONTAINS tSTARTS tCHAR tITEM tLINE tWORD
-%token tSPRITE tINTERSECTS tWITHIN tTELL
+%token tSPRITE tINTERSECTS tWITHIN tTELL tPROPERTY
 %token tON tME
 
 %type<code> asgn begin elseif elsestmtoneliner end expr if when repeatwhile repeatwith stmtlist tell
@@ -477,6 +477,7 @@ proc: tPUT expr				{ g_lingo->code1(g_lingo->c_printtop); }
 	| tEXIT					{ g_lingo->codeConst(0); // Push fake value on stack
 							  g_lingo->code1(g_lingo->c_procret); }
 	| tGLOBAL globallist
+	| tPROPERTY propertylist
 	| tINSTANCE instancelist
 	| BLTINNOARGS 	{
 		g_lingo->code1(g_lingo->_builtins[*$1]->u.func);
@@ -498,8 +499,12 @@ proc: tPUT expr				{ g_lingo->code1(g_lingo->c_printtop); }
 	| TWOWORDBUILTIN ID arglist	{ Common::String s(*$1); s += '-'; s += *$2; g_lingo->codeFunc(&s, $3); }
 	;
 
-globallist: ID				{ g_lingo->code1(g_lingo->c_global); g_lingo->codeString($1->c_str()); delete $1; }
-	| globallist ',' ID		{ g_lingo->code1(g_lingo->c_global); g_lingo->codeString($3->c_str()); delete $3; }
+globallist: ID					{ g_lingo->code1(g_lingo->c_global); g_lingo->codeString($1->c_str()); delete $1; }
+	| globallist ',' ID			{ g_lingo->code1(g_lingo->c_global); g_lingo->codeString($3->c_str()); delete $3; }
+	;
+
+propertylist: ID				{ g_lingo->code1(g_lingo->c_property); g_lingo->codeString($1->c_str()); delete $1; }
+	| propertylist ',' ID		{ g_lingo->code1(g_lingo->c_property); g_lingo->codeString($3->c_str()); delete $3; }
 	;
 
 instancelist: ID				{ g_lingo->code1(g_lingo->c_instance); g_lingo->codeString($1->c_str()); delete $1; }
diff --git a/engines/director/lingo/lingo-lex.cpp b/engines/director/lingo/lingo-lex.cpp
index 829a423..c468801 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 70
-#define YY_END_OF_BUFFER 71
+#define YY_NUM_RULES 71
+#define YY_END_OF_BUFFER 72
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -373,36 +373,37 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_accept[256] =
+static yyconst flex_int16_t yy_accept[262] =
     {   0,
-        0,    0,   71,   69,    3,   67,   67,   69,   69,   69,
-       66,   66,   66,   65,   66,   66,   63,   63,   63,   63,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,   63,   63,   63,    2,    2,    3,   67,    0,    0,
-        0,    0,    0,   68,    4,   62,    1,   64,   65,   61,
-       59,   60,   63,   63,   63,   63,   63,   63,   63,   63,
-       63,   63,   63,   63,   63,   22,   12,   63,   63,   63,
-       63,   63,   63,   63,   63,   63,   35,   36,   63,   38,
-       63,   63,   63,   63,   63,   63,   63,   63,   63,   52,
-       63,   63,   63,    2,    2,    0,    4,    1,   64,   63,
-
-        6,   63,   63,   63,   63,   63,   63,   16,   63,   63,
-       63,   63,    0,   63,   63,   63,   63,   63,   63,   63,
-       31,   63,   63,   34,   63,   63,   63,   42,   63,   44,
-       63,   63,   63,   63,   63,   63,   63,   63,    0,   63,
-       63,    8,   63,   10,   11,   15,    0,   16,   18,   63,
-       63,   63,    0,   63,   63,   25,   26,   27,   28,   63,
-       63,   63,   33,   37,   39,   63,   63,   63,   63,   46,
-        0,   51,   56,   63,   54,   58,   14,    5,   63,   63,
-       16,   16,   63,   19,   63,   21,   63,   63,   29,   63,
-       32,   63,   63,   63,   63,   63,   50,   50,   57,   63,
-
-        0,    7,   63,   16,   63,   20,   63,   63,   30,   63,
-       63,   43,   53,   45,    0,    0,   50,   55,    0,   63,
-       17,   63,   63,   63,   63,    0,    0,    0,    0,   50,
-       13,    9,   23,   63,   63,   41,    0,    0,    0,   50,
-       63,   40,    0,    0,    0,    0,   24,   49,   48,   49,
-        0,    0,    0,   47,    0
+        0,    0,   72,   70,    3,   68,   68,   70,   70,   70,
+       67,   67,   67,   66,   67,   67,   64,   64,   64,   64,
+       64,   64,   64,   64,   64,   64,   64,   64,   64,   64,
+       64,   64,   64,   64,    2,    2,    3,   68,    0,    0,
+        0,    0,    0,   69,    4,   63,    1,   65,   66,   62,
+       60,   61,   64,   64,   64,   64,   64,   64,   64,   64,
+       64,   64,   64,   64,   64,   22,   12,   64,   64,   64,
+       64,   64,   64,   64,   64,   64,   35,   36,   64,   38,
+       64,   64,   64,   64,   64,   64,   64,   64,   64,   53,
+       64,   64,   64,    2,    2,    0,    4,    1,   65,   64,
+
+        6,   64,   64,   64,   64,   64,   64,   16,   64,   64,
+       64,   64,    0,   64,   64,   64,   64,   64,   64,   64,
+       31,   64,   64,   34,   64,   64,   64,   64,   43,   64,
+       45,   64,   64,   64,   64,   64,   64,   64,   64,    0,
+       64,   64,    8,   64,   10,   11,   15,    0,   16,   18,
+       64,   64,   64,    0,   64,   64,   25,   26,   27,   28,
+       64,   64,   64,   33,   37,   39,   64,   64,   64,   64,
+       64,   47,    0,   52,   57,   64,   55,   59,   14,    5,
+       64,   64,   16,   16,   64,   19,   64,   21,   64,   64,
+       29,   64,   32,   64,   64,   64,   64,   64,   64,   51,
+
+       51,   58,   64,    0,    7,   64,   16,   64,   20,   64,
+       64,   30,   64,   64,   64,   44,   54,   46,    0,    0,
+       51,   56,    0,   64,   17,   64,   64,   64,   64,   64,
+        0,    0,    0,    0,   51,   13,    9,   23,   64,   64,
+       41,   42,    0,    0,    0,   51,   64,   40,    0,    0,
+        0,    0,   24,   50,   49,   50,    0,    0,    0,   48,
+        0
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -448,73 +449,75 @@ static yyconst flex_int32_t yy_meta[65] =
         5,    5,    5,    5
     } ;
 
-static yyconst flex_int16_t yy_base[267] =
+static yyconst flex_int16_t yy_base[273] =
     {   0,
-        0,   63,  159,  646,   67,   71,   75,   79,  147,    0,
-      646,  133,  126,   54,   70,   94,   65,   67,   65,   61,
+        0,   63,  159,  660,   67,   71,   75,   79,  147,    0,
+      660,  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,  646,  216,  179,
-      224,  119,   99,  646,    0,  646,    0,   88,   95,  646,
-      646,  646,    0,  113,   96,  105,  159,  169,  194,  172,
+       82,  112,  153,  155,  191,  208,  212,  660,  216,  179,
+      224,  119,   99,  660,    0,  660,    0,   88,   95,  660,
+      660,  660,    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,  232,  222,  227,  232,  240,  237,  249,  259,    0,
-      263,  248,  253,  290,  299,  256,    0,    0,   84,  275,
-
-        0,  268,  266,  271,  287,  282,  291,  184,  280,  281,
-      289,  300,  322,  285,  304,  300,  305,  298,  298,  312,
-        0,  313,  297,    0,  313,  305,  309,    0,  326,    0,
-      323,  321,  332,  360,  331,  337,  325,  347,  347,  338,
-      342,    0,  359,    0,    0,    0,  375,    0,    0,  349,
-      361,  368,  357,  373,  361,    0,    0,    0,    0,  366,
-      367,  370,    0,    0,  381,  375,  385,  369,  370,    0,
-      404,    0,    0,  387,  387,    0,  412,    0,  398,  397,
-        0,    0,  391,    0,  399,  646,  401,  397,    0,  412,
-        0,  415,  406,  404,  419,  408,  441,  451,    0,  416,
-
-      447,    0,  429,    0,  424,    0,  448,  447,    0,  451,
-      438,    0,    0,    0,  471,  451,  475,    0,  453,  444,
-        0,  458,  465,  466,  447,  509,  473,  472,  474,  516,
-      646,    0,    0,  454,  476,    0,  482,  518,  494,  526,
-      495,    0,  512,  532,  514,  542,    0,  646,  538,  646,
-      540,  526,  547,  552,  646,  601,  603,  606,  609,  615,
-      620,  625,  628,  633,  635,  640
+      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,  660,  410,  407,
+        0,  422,    0,  424,  417,  416,  415,  423,  417,  450,
+
+      456,    0,  424,  474,    0,  425,    0,  417,    0,  445,
+      449,    0,  461,  446,  448,    0,    0,    0,  488,  466,
+      482,    0,  463,  462,    0,  470,  475,  476,  468,  463,
+      526,  487,  487,  488,  530,  660,    0,    0,  482,  494,
+        0,    0,  495,  541,  508,  547,  503,    0,  523,  546,
+      529,  553,    0,  660,  557,  660,  561,  531,  562,  566,
+      660,  615,  617,  620,  623,  629,  634,  639,  642,  647,
+      649,  654
     } ;
 
-static yyconst flex_int16_t yy_def[267] =
+static yyconst flex_int16_t yy_def[273] =
     {   0,
-      255,    1,  255,  255,  255,  255,  255,  255,  256,  257,
-      255,  255,  255,  255,  255,  255,  258,  258,  258,  258,
-      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
-      258,  258,  258,  258,  255,  255,  255,  255,  255,  255,
-      255,  255,  256,  255,  259,  255,  260,  255,  255,  255,
-      255,  255,  258,  258,  258,  258,  258,  258,  258,  258,
-      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
-      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
-      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
-      258,  258,  258,  255,  255,  255,  259,  260,  255,  258,
-
-      258,  258,  258,  258,  258,  258,  258,  261,  258,  258,
-      258,  258,  255,  258,  258,  258,  258,  258,  258,  258,
-      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
-      258,  258,  258,  258,  258,  258,  258,  258,  255,  258,
-      258,  258,  258,  258,  258,  258,  262,  263,  258,  258,
-      258,  258,  255,  258,  258,  258,  258,  258,  258,  258,
-      258,  258,  258,  258,  258,  258,  258,  258,  258,  258,
-      264,  258,  258,  258,  258,  258,  255,  258,  258,  258,
-      265,  263,  258,  258,  258,  255,  258,  258,  258,  258,
-      258,  258,  258,  258,  258,  258,  264,  264,  258,  258,
-
-      255,  258,  258,  265,  258,  258,  258,  258,  258,  258,
-      258,  258,  258,  258,  255,  255,  264,  258,  255,  258,
-      258,  258,  258,  258,  258,  255,  255,  255,  255,  264,
-      255,  258,  258,  258,  258,  258,  255,  255,  255,  264,
-      258,  258,  255,  266,  255,  255,  258,  255,  266,  255,
-      255,  255,  255,  266,    0,  255,  255,  255,  255,  255,
-      255,  255,  255,  255,  255,  255
+      261,    1,  261,  261,  261,  261,  261,  261,  262,  263,
+      261,  261,  261,  261,  261,  261,  264,  264,  264,  264,
+      264,  264,  264,  264,  264,  264,  264,  264,  264,  264,
+      264,  264,  264,  264,  261,  261,  261,  261,  261,  261,
+      261,  261,  262,  261,  265,  261,  266,  261,  261,  261,
+      261,  261,  264,  264,  264,  264,  264,  264,  264,  264,
+      264,  264,  264,  264,  264,  264,  264,  264,  264,  264,
+      264,  264,  264,  264,  264,  264,  264,  264,  264,  264,
+      264,  264,  264,  264,  264,  264,  264,  264,  264,  264,
+      264,  264,  264,  261,  261,  261,  265,  266,  261,  264,
+
+      264,  264,  264,  264,  264,  264,  264,  267,  264,  264,
+      264,  264,  261,  264,  264,  264,  264,  264,  264,  264,
+      264,  264,  264,  264,  264,  264,  264,  264,  264,  264,
+      264,  264,  264,  264,  264,  264,  264,  264,  264,  261,
+      264,  264,  264,  264,  264,  264,  264,  268,  269,  264,
+      264,  264,  264,  261,  264,  264,  264,  264,  264,  264,
+      264,  264,  264,  264,  264,  264,  264,  264,  264,  264,
+      264,  264,  270,  264,  264,  264,  264,  264,  261,  264,
+      264,  264,  271,  269,  264,  264,  264,  261,  264,  264,
+      264,  264,  264,  264,  264,  264,  264,  264,  264,  270,
+
+      270,  264,  264,  261,  264,  264,  271,  264,  264,  264,
+      264,  264,  264,  264,  264,  264,  264,  264,  261,  261,
+      270,  264,  261,  264,  264,  264,  264,  264,  264,  264,
+      261,  261,  261,  261,  270,  261,  264,  264,  264,  264,
+      264,  264,  261,  261,  261,  270,  264,  264,  261,  272,
+      261,  261,  264,  261,  272,  261,  261,  261,  261,  272,
+        0,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261
     } ;
 
-static yyconst flex_int16_t yy_nxt[711] =
+static yyconst flex_int16_t yy_nxt[725] =
     {   0,
         4,    5,    6,    7,    8,    9,   10,   11,   12,   11,
        13,    4,   14,   15,   11,   16,   17,   18,   19,   20,
@@ -532,71 +535,73 @@ static yyconst flex_int16_t yy_nxt[711] =
        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,  255,  255,
+       82,  102,   44,   83,   75,   68,   77,   85,  261,  261,
        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,  147,  255,   78,  147,   79,
-      255,   80,   94,   38,   38,   95,   53,  104,   88,   42,
+       40,   77,   90,   40,   93,  148,  261,   78,  148,   79,
+      261,   80,   94,   38,   38,   95,   53,  104,   88,   42,
 
-      103,   89,  255,   91,   92,  107,   90,  108,   93,   95,
+      103,   89,  261,   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,  255,  114,  115,  116,  255,
+      112,  106,  108,  110,  111,  261,  114,  115,  116,  261,
       117,  118,  119,  125,   42,  121,  105,  120,  109,  123,
-      124,  126,  127,  132,  112,  106,  128,  129,  110,  111,
-      114,  115,  122,  116,  117,  118,  130,  119,  125,   42,
-      121,  120,  131,  123,  124,  133,  126,  127,  132,  134,
-      128,  129,  137,  135,  255,  138,  122,  136,  255,  139,
-      130,   94,   38,   38,   95,  140,  131,  141,  142,  133,
-
-       95,   38,   38,   95,  134,  143,  137,  144,  135,  138,
-      145,  146,  136,  139,  149,  150,  151,  152,  255,  154,
-      140,  141,  142,  113,  155,  158,  113,  157,  159,  143,
-      160,  163,  144,  156,  145,  161,  146,  162,  149,  150,
-      151,  164,  152,  154,  165,  166,  167,  168,  175,  155,
-      158,  157,  159,  169,  160,  163,  153,  156,  170,  173,
-      161,  171,  162,  174,  171,  164,  176,  177,  165,  166,
-      178,  167,  168,  175,  179,  180,  147,  169,  183,  147,
-      153,  184,  170,  173,  185,  255,  186,  174,  172,  187,
-      191,  176,  177,  188,  178,  189,  190,  192,  179,  193,
-
-      180,  194,  183,  195,  196,  171,  184,  199,  171,  185,
-      186,  200,  172,  201,  187,  191,  201,  188,  202,  189,
-      190,  203,  192,  205,  193,  206,  194,  195,  196,  207,
-      208,  209,  199,  210,  255,  211,  200,  198,  212,  213,
-      255,  214,  215,  202,  218,  215,  203,  205,  201,  206,
-      216,  201,  215,  207,  208,  215,  209,  220,  210,  211,
-      216,  198,  212,  221,  213,  214,  222,  223,  218,  224,
-      227,  219,  226,  225,  231,  226,  215,  232,  233,  215,
-      236,  220,  217,  234,  216,  229,  235,  221,  241,  237,
-      227,  222,  223,  238,  224,  227,  219,  225,  239,  231,
-
-      228,  232,  242,  233,  236,  229,  217,  230,  234,  229,
-      226,  235,  241,  226,  237,  227,  243,  215,  238,  244,
-      215,  245,  244,  239,  228,  216,  242,  246,  247,  229,
-      246,  230,  248,  244,  250,  216,  244,  255,  228,  255,
-      243,  251,  255,  251,  251,  245,  251,  253,  254,  255,
-      240,  254,  247,  254,  255,  255,  254,  248,  255,  250,
-      255,  227,  228,  255,  255,  255,  255,  255,  255,  252,
-      255,  252,  253,  255,  240,  255,  229,  255,  255,  255,
-      255,  255,  255,  255,  255,  255,  227,  255,  255,  255,
-      255,  255,  255,  252,  255,  252,  255,  255,  255,  255,
-
-      229,   43,   43,  255,   43,   43,   43,   45,   45,   53,
-       53,   53,   97,   97,   97,   98,   98,  255,   98,   98,
-       98,  148,  255,  148,  148,  148,  181,  255,  255,  181,
-      181,  182,  182,  182,  197,  255,  255,  197,  204,  204,
-      204,  249,  255,  255,  249,    3,  255,  255,  255,  255,
-      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
-      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
-      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
-      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
-      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
-
-      255,  255,  255,  255,  255,  255,  255,  255,  255,  255
+      124,  126,  261,  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,  261,  138,  122,  137,  261,  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,  261,  157,  161,
+      162,  163,  152,  164,  165,  153,  159,  166,  167,  168,
+      169,  155,  170,  261,  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,  261,  188,  178,  179,  189,  193,  180,  190,
+
+      181,  191,  192,  194,  261,  174,  195,  196,  197,  182,
+      185,  198,  199,  186,  202,  173,  187,  188,  173,  203,
+      205,  189,  193,  190,  204,  191,  192,  204,  194,  174,
+      206,  195,  196,  197,  208,  198,  199,  209,  210,  202,
+      211,  212,  213,  217,  203,  205,  214,  201,  215,  216,
+      218,  219,  222,  224,  219,  206,  225,  219,  208,  220,
+      219,  209,  210,  226,  211,  220,  212,  213,  217,  227,
+      214,  201,  215,  216,  218,  204,  222,  224,  204,  228,
+      225,  229,  230,  219,  236,  232,  219,  221,  226,  231,
+      238,  220,  231,  239,  227,  237,  240,  261,  223,  261,
+
+      234,  241,  242,  243,  228,  229,  230,  232,  244,  236,
+      232,  221,  245,  261,  235,  238,  247,  233,  239,  237,
+      248,  240,  234,  223,  234,  241,  242,  231,  243,  249,
+      231,  219,  232,  244,  219,  251,  253,  245,  235,  220,
+      247,  233,  250,  254,  248,  250,  234,  250,  252,  256,
+      250,  252,  259,  249,  257,  233,  220,  257,  261,  251,
+      253,  261,  257,  260,  246,  257,  260,  260,  254,  261,
+      260,  261,  232,  261,  256,  261,  261,  259,  261,  233,
+      261,  261,  258,  261,  261,  261,  261,  234,  246,  261,
+      258,  261,  261,  261,  261,  261,  261,  232,  261,  261,
+
+      261,  261,  261,  261,  261,  261,  258,  261,  261,  261,
+      261,  234,  261,  261,  258,   43,   43,  261,   43,   43,
+       43,   45,   45,   53,   53,   53,   97,   97,   97,   98,
+       98,  261,   98,   98,   98,  149,  261,  149,  149,  149,
+      183,  261,  261,  183,  183,  184,  184,  184,  200,  261,
+      261,  200,  207,  207,  207,  255,  261,  261,  255,    3,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  261
     } ;
 
-static yyconst flex_int16_t yy_chk[711] =
+static yyconst flex_int16_t yy_chk[725] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -625,57 +630,59 @@ static yyconst flex_int16_t yy_chk[711] =
        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,   82,   87,   65,   59,   83,   84,   63,   64,
-       68,   68,   74,   69,   70,   71,   85,   72,   79,   41,
-       74,   73,   86,   75,   76,   88,   81,   82,   87,   89,
-       83,   84,   92,   91,    0,   93,   74,   91,    0,   96,
-       85,   94,   94,   94,   94,  100,   86,  102,  103,   88,
-
-       95,   95,   95,   95,   89,  104,   92,  105,   91,   93,
-      106,  107,   91,   96,  109,  110,  111,  112,    0,  114,
-      100,  102,  103,  113,  115,  117,  113,  116,  118,  104,
-      119,  123,  105,  115,  106,  120,  107,  122,  109,  110,
-      111,  125,  112,  114,  126,  127,  129,  131,  137,  115,
-      117,  116,  118,  132,  119,  123,  113,  115,  133,  135,
-      120,  134,  122,  136,  134,  125,  138,  139,  126,  127,
-      140,  129,  131,  137,  141,  143,  147,  132,  150,  147,
-      113,  151,  133,  135,  152,    0,  153,  136,  134,  154,
-      162,  138,  139,  155,  140,  160,  161,  165,  141,  166,
-
-      143,  167,  150,  168,  169,  171,  151,  174,  171,  152,
-      153,  175,  134,  177,  154,  162,  177,  155,  179,  160,
-      161,  180,  165,  183,  166,  185,  167,  168,  169,  187,
-      188,  190,  174,  192,    0,  193,  175,  171,  194,  195,
-        0,  196,  197,  179,  200,  197,  180,  183,  201,  185,
-      197,  201,  198,  187,  188,  198,  190,  203,  192,  193,
-      198,  171,  194,  205,  195,  196,  207,  208,  200,  210,
-      216,  201,  215,  211,  219,  215,  217,  220,  222,  217,
-      225,  203,  198,  223,  217,  216,  224,  205,  234,  227,
-      215,  207,  208,  228,  210,  216,  201,  211,  229,  219,
-
-      215,  220,  235,  222,  225,  215,  198,  217,  223,  216,
-      226,  224,  234,  226,  227,  215,  237,  230,  228,  238,
-      230,  239,  238,  229,  215,  230,  235,  240,  241,  215,
-      240,  217,  243,  244,  245,  240,  244,    0,  226,  249,
-      237,  251,  249,  246,  251,  239,  246,  252,  253,    0,
-      230,  253,  241,  254,    0,    0,  254,  243,    0,  245,
-        0,  246,  226,    0,    0,    0,    0,    0,    0,  251,
-        0,  246,  252,    0,  230,    0,  246,    0,    0,    0,
-        0,    0,    0,    0,    0,    0,  246,    0,    0,    0,
-        0,    0,    0,  251,    0,  246,    0,    0,    0,    0,
-
-      246,  256,  256,    0,  256,  256,  256,  257,  257,  258,
-      258,  258,  259,  259,  259,  260,  260,    0,  260,  260,
-      260,  261,    0,  261,  261,  261,  262,    0,    0,  262,
-      262,  263,  263,  263,  264,    0,    0,  264,  265,  265,
-      265,  266,    0,    0,  266,  255,  255,  255,  255,  255,
-      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
-      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
-      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
-      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
-      255,  255,  255,  255,  255,  255,  255,  255,  255,  255,
-
-      255,  255,  255,  255,  255,  255,  255,  255,  255,  255
+       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,
+      190,  192,  194,  198,  177,  181,  195,  173,  196,  197,
+      199,  200,  203,  206,  200,  182,  208,  201,  185,  200,
+      201,  187,  189,  210,  190,  201,  192,  194,  198,  211,
+      195,  173,  196,  197,  199,  204,  203,  206,  204,  213,
+      208,  214,  215,  221,  223,  220,  221,  201,  210,  219,
+      226,  221,  219,  227,  211,  224,  228,    0,  204,    0,
+
+      220,  229,  230,  232,  213,  214,  215,  219,  233,  223,
+      220,  201,  234,    0,  221,  226,  239,  219,  227,  224,
+      240,  228,  219,  204,  220,  229,  230,  231,  232,  243,
+      231,  235,  219,  233,  235,  245,  247,  234,  221,  235,
+      239,  219,  244,  249,  240,  244,  219,  250,  246,  251,
+      250,  246,  258,  243,  252,  231,  246,  252,  255,  245,
+      247,  255,  257,  259,  235,  257,  259,  260,  249,    0,
+      260,    0,  252,    0,  251,    0,    0,  258,    0,  231,
+        0,    0,  252,    0,    0,    0,    0,  252,  235,    0,
+      257,    0,    0,    0,    0,    0,    0,  252,    0,    0,
+
+        0,    0,    0,    0,    0,    0,  252,    0,    0,    0,
+        0,  252,    0,    0,  257,  262,  262,    0,  262,  262,
+      262,  263,  263,  264,  264,  264,  265,  265,  265,  266,
+      266,    0,  266,  266,  266,  267,    0,  267,  267,  267,
+      268,    0,    0,  268,  268,  269,  269,  269,  270,    0,
+        0,  270,  271,  271,  271,  272,    0,    0,  272,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  261
     } ;
 
 static yy_state_type yy_last_accepting_state;
@@ -760,7 +767,7 @@ static int checkImmediate(int token) {
 	return token;
 }
 
-#line 764 "engines/director/lingo/lingo-lex.cpp"
+#line 771 "engines/director/lingo/lingo-lex.cpp"
 
 #define INITIAL 0
 
@@ -946,7 +953,7 @@ YY_DECL
 #line 82 "engines/director/lingo/lingo-lex.l"
 
 
-#line 950 "engines/director/lingo/lingo-lex.cpp"
+#line 957 "engines/director/lingo/lingo-lex.cpp"
 
 	if ( !(yy_init) )
 		{
@@ -1000,13 +1007,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 >= 256 )
+				if ( yy_current_state >= 262 )
 					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] != 646 );
+		while ( yy_base[yy_current_state] != 660 );
 
 yy_find_action:
 		yy_act = yy_accept[yy_current_state];
@@ -1250,31 +1257,36 @@ YY_RULE_SETUP
 case 42:
 YY_RULE_SETUP
 #line 137 "engines/director/lingo/lingo-lex.l"
-{ count(); return tPUT; }
+{ count(); return tPROPERTY; }	// D4
 	YY_BREAK
 case 43:
 YY_RULE_SETUP
 #line 138 "engines/director/lingo/lingo-lex.l"
-{ count(); return checkImmediate(tREPEAT); }
+{ count(); return tPUT; }
 	YY_BREAK
 case 44:
 YY_RULE_SETUP
 #line 139 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSET; }
+{ count(); return checkImmediate(tREPEAT); }
 	YY_BREAK
 case 45:
 YY_RULE_SETUP
 #line 140 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSTARTS; }
+{ count(); return tSET; }
 	YY_BREAK
 case 46:
 YY_RULE_SETUP
 #line 141 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTELL; }
+{ count(); return tSTARTS; }
 	YY_BREAK
 case 47:
 YY_RULE_SETUP
 #line 142 "engines/director/lingo/lingo-lex.l"
+{ count(); return tTELL; }
+	YY_BREAK
+case 48:
+YY_RULE_SETUP
+#line 143 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1287,9 +1299,9 @@ YY_RULE_SETUP
 		return THEENTITYWITHID;
 	}
 	YY_BREAK
-case 48:
+case 49:
 YY_RULE_SETUP
-#line 153 "engines/director/lingo/lingo-lex.l"
+#line 154 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1334,9 +1346,9 @@ YY_RULE_SETUP
 		warning("Unhandled the entity %s", ptr);
 	}
 	YY_BREAK
-case 49:
+case 50:
 YY_RULE_SETUP
-#line 196 "engines/director/lingo/lingo-lex.l"
+#line 197 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1372,9 +1384,9 @@ YY_RULE_SETUP
 			return THEENTITY;
 	}
 	YY_BREAK
-case 50:
+case 51:
 YY_RULE_SETUP
-#line 230 "engines/director/lingo/lingo-lex.l"
+#line 231 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 
@@ -1398,69 +1410,69 @@ YY_RULE_SETUP
 		warning("Unhandled the entity %s", ptr);
 	}
 	YY_BREAK
-case 51:
-YY_RULE_SETUP
-#line 252 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTHEN; }
-	YY_BREAK
 case 52:
 YY_RULE_SETUP
 #line 253 "engines/director/lingo/lingo-lex.l"
-{ count(); return tTO; }
+{ count(); return tTHEN; }
 	YY_BREAK
 case 53:
 YY_RULE_SETUP
 #line 254 "engines/director/lingo/lingo-lex.l"
-{ count(); return tSPRITE; }
+{ count(); return tTO; }
 	YY_BREAK
 case 54:
 YY_RULE_SETUP
 #line 255 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITH; }
+{ count(); return tSPRITE; }
 	YY_BREAK
 case 55:
 YY_RULE_SETUP
 #line 256 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWITHIN; }
+{ count(); return tWITH; }
 	YY_BREAK
 case 56:
 YY_RULE_SETUP
 #line 257 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHEN; }
+{ count(); return tWITHIN; }
 	YY_BREAK
 case 57:
 YY_RULE_SETUP
 #line 258 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWHILE; }
+{ count(); return tWHEN; }
 	YY_BREAK
 case 58:
 YY_RULE_SETUP
 #line 259 "engines/director/lingo/lingo-lex.l"
-{ count(); return tWORD; }
+{ count(); return tWHILE; }
 	YY_BREAK
 case 59:
 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 60:
 YY_RULE_SETUP
 #line 262 "engines/director/lingo/lingo-lex.l"
-{ count(); return tGE; }
+{ count(); return tNEQ; }
 	YY_BREAK
 case 61:
 YY_RULE_SETUP
 #line 263 "engines/director/lingo/lingo-lex.l"
-{ count(); return tLE; }
+{ count(); return tGE; }
 	YY_BREAK
 case 62:
 YY_RULE_SETUP
 #line 264 "engines/director/lingo/lingo-lex.l"
-{ count(); return tCONCAT; }
+{ count(); return tLE; }
 	YY_BREAK
 case 63:
 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 64:
+YY_RULE_SETUP
+#line 267 "engines/director/lingo/lingo-lex.l"
 {
 		count();
 		yylval.s = new Common::String(yytext);
@@ -1504,43 +1516,43 @@ YY_RULE_SETUP
 		return ID;
 	}
 	YY_BREAK
-case 64:
-YY_RULE_SETUP
-#line 308 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.f = atof(yytext); return FLOAT; }
-	YY_BREAK
 case 65:
 YY_RULE_SETUP
 #line 309 "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 66:
 YY_RULE_SETUP
 #line 310 "engines/director/lingo/lingo-lex.l"
-{ count(); return *yytext; }
+{ count(); yylval.i = strtol(yytext, NULL, 10); return INT; }
 	YY_BREAK
 case 67:
-/* rule 67 can match eol */
 YY_RULE_SETUP
 #line 311 "engines/director/lingo/lingo-lex.l"
-{ return '\n'; }
+{ count(); return *yytext; }
 	YY_BREAK
 case 68:
+/* rule 68 can match eol */
 YY_RULE_SETUP
 #line 312 "engines/director/lingo/lingo-lex.l"
-{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
+{ return '\n'; }
 	YY_BREAK
 case 69:
 YY_RULE_SETUP
 #line 313 "engines/director/lingo/lingo-lex.l"
-
+{ count(); yylval.s = new Common::String(&yytext[1]); yylval.s->deleteLastChar(); return STRING; }
 	YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 315 "engines/director/lingo/lingo-lex.l"
+#line 314 "engines/director/lingo/lingo-lex.l"
+
+	YY_BREAK
+case 71:
+YY_RULE_SETUP
+#line 316 "engines/director/lingo/lingo-lex.l"
 ECHO;
 	YY_BREAK
-#line 1544 "engines/director/lingo/lingo-lex.cpp"
+#line 1556 "engines/director/lingo/lingo-lex.cpp"
 case YY_STATE_EOF(INITIAL):
 	yyterminate();
 
@@ -1833,7 +1845,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 >= 256 )
+			if ( yy_current_state >= 262 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1861,11 +1873,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 >= 256 )
+		if ( yy_current_state >= 262 )
 			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 == 255);
+	yy_is_jam = (yy_current_state == 261);
 
 	return yy_is_jam ? 0 : yy_current_state;
 }
@@ -2503,7 +2515,7 @@ void yyfree (void * ptr )
 
 #define YYTABLES_NAME "yytables"
 
-#line 315 "engines/director/lingo/lingo-lex.l"
+#line 316 "engines/director/lingo/lingo-lex.l"
 
 
 
diff --git a/engines/director/lingo/lingo-lex.l b/engines/director/lingo/lingo-lex.l
index d6bf59a..ff8eb8f 100644
--- a/engines/director/lingo/lingo-lex.l
+++ b/engines/director/lingo/lingo-lex.l
@@ -134,6 +134,7 @@ whitespace [\t ]
 (?i:play)				{ count(); return tPLAY; }
 (?i:playAccel)	{ count(); yylval.s = new Common::String(yytext); return tPLAYACCEL; }
 (?i:previous)		{ count(); return tPREVIOUS; }
+(?i:property)		{ count(); return tPROPERTY; }	// D4
 (?i:put)				{ count(); return tPUT; }
 (?i:repeat)			{ count(); return checkImmediate(tREPEAT); }
 (?i:set)				{ count(); return tSET; }
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 66f3d3a..42aa232 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -309,6 +309,7 @@ public:
 	static void c_gotoprevious();
 	static void c_global();
 	static void c_instance();
+	static void c_property();
 
 	static void c_play();
 	static void c_playdone();
@@ -377,6 +378,7 @@ public:
 	static void b_symbolp(int nargs);
 
 	static void b_alert(int nargs);
+	static void b_birth(int nargs);
 	static void b_cursor(int nargs);
 	static void b_framesToHMS(int nargs);
 	static void b_HMStoFrames(int nargs);
@@ -461,6 +463,7 @@ public:
 	static void b_soundPlayFile(int nargs);
 	static void b_soundStop(int nargs);
 
+	static void b_ancestor(int nargs);
 	static void b_backspace(int nargs);
 	static void b_empty(int nargs);
 	static void b_enter(int nargs);
@@ -477,6 +480,7 @@ public:
 	static void b_cast(int nargs);
 	static void b_field(int nargs);
 	static void b_me(int nargs);
+	static void b_script(int nargs);
 
 	void func_mci(Common::String &s);
 	void func_mciwait(Common::String &s);


Commit: c0dd0f4f53ea5cbaa12a61db6b7972c399c7b0c6
    https://github.com/scummvm/scummvm/commit/c0dd0f4f53ea5cbaa12a61db6b7972c399c7b0c6
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-02-08T21:45:48+01:00

Commit Message:
DIRECTOR: Lingo: Documented D4 "Playing movies" Lingo

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


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 9e95fcb..92511b1 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -96,20 +96,20 @@ static struct BuiltinProto {
 	{ "xFactoryList",	Lingo::b_xFactoryList,	1, 1, true },	//		D3 f
 	// Control
 	{ "abort",			Lingo::b_abort,			0, 0, false },	//			D4 c
-	{ "continue",		Lingo::b_continue,		0, 0, false },	// D2
+	{ "continue",		Lingo::b_continue,		0, 0, false },	// D2 c
 	{ "dontPassEvent",	Lingo::b_dontPassEvent,	0, 0, false },	// D2 c
 	{ "delay",	 		Lingo::b_delay,			1, 1, false },	// D2
 	{ "do",		 		Lingo::b_do,			1, 1, false },	// D2
 	{ "halt",	 		Lingo::b_halt,			0, 0, false },	//			D4 c
 	{ "nothing",		Lingo::b_nothing,		0, 0, false },	// D2 c
 	{ "pass",			Lingo::b_pass,			0, 0, false },	//			D4 c
-	{ "pause",			Lingo::b_pause,			0, 0, false },	// D2
-		// play													// D2
+	{ "pause",			Lingo::b_pause,			0, 0, false },	// D2 c
+		// play													// D2 c
 	{ "playAccel",		Lingo::b_playAccel,		-1,0, false },	// D2
 		// play done											// D2
-	{ "preLoad",		Lingo::b_preLoad,		-1,0, false },	//		D3
-	{ "preLoadCast",	Lingo::b_preLoadCast,	-1,0, false },	//		D3
-	{ "quit",			Lingo::b_quit,			0, 0, false },	// D2
+	{ "preLoad",		Lingo::b_preLoad,		-1,0, false },	//		D3 c
+	{ "preLoadCast",	Lingo::b_preLoadCast,	-1,0, false },	//		D3 c
+	{ "quit",			Lingo::b_quit,			0, 0, false },	// D2 c
 	{ "restart",		Lingo::b_restart,		0, 0, false },	// D2
 	{ "shutDown",		Lingo::b_shutDown,		0, 0, false },	// D2
 	{ "startTimer",		Lingo::b_startTimer,	0, 0, false },	// D2
@@ -149,8 +149,8 @@ static struct BuiltinProto {
 	{ "importFileInto",	Lingo::b_importFileInto,2, 2, false },	//			D4 c
 	{ "installMenu",	Lingo::b_installMenu,	1, 1, false },	// D2 c
 	{ "intersect",		Lingo::b_intersect,		2, 2, false },	//			D4 f
-	{ "label",			Lingo::b_label,			1, 1, true },	// D2
-	{ "marker",			Lingo::b_marker,		1, 1, true },	// D2
+	{ "label",			Lingo::b_label,			1, 1, true },	// D2 f
+	{ "marker",			Lingo::b_marker,		1, 1, true },	// D2 f
 	{ "move",			Lingo::b_move,			1, 2, false },	//			D4 c
 	{ "moveableSprite",	Lingo::b_moveableSprite,0, 0, false },	// D2
 	{ "pasteClipBoardInto",Lingo::b_pasteClipBoardInto,1, 1, false },	//	D4 c
@@ -159,6 +159,7 @@ static struct BuiltinProto {
 	{ "puppetSprite",	Lingo::b_puppetSprite,	-1,0, false },	// D2
 	{ "puppetTempo",	Lingo::b_puppetTempo,	1, 1, false },	// D2
 	{ "puppetTransition",Lingo::b_puppetTransition,-1,0, false },// D2
+	{ "ramNeeded",		Lingo::b_ramNeeded,		2, 2, true },	//			D4 f
 	{ "rollOver",		Lingo::b_rollOver,		1, 1, true },	// D2 f
 	{ "spriteBox",		Lingo::b_spriteBox,		-1,0, false },	// D2
 	{ "unLoad",			Lingo::b_unLoad,		0, 2, false },	//			D4 c
@@ -240,9 +241,11 @@ static const char *builtinFunctions[] = {
 	"integer",
 	"integerp",
 	"intersect",
+	"label",
 	"list",
 	"listP",
 	"log",
+	"marker",
 	"max",
 	"min",
 	"objectp",
@@ -250,6 +253,7 @@ static const char *builtinFunctions[] = {
 	"pi",
 	"pictureP",
 	"power",
+	"ramNeeded",
 	"random",
 	"rollOver",
 	"quote",
@@ -1132,9 +1136,16 @@ void Lingo::b_puppetTransition(int nargs) {
 	g_lingo->dropStack(nargs);
 }
 
+void Lingo::b_ramNeeded(int nargs) {
+	Datum d = g_lingo->pop();
+	warning("STUB: b_ramNeeded(%d)", d.u.i);
+
+	g_lingo->push(Datum(0));
+}
+
 void Lingo::b_rollOver(int nargs) {
 	Datum d = g_lingo->pop();
-	warning("STUB: b_puppetTempo(%d)", d.u.i);
+	warning("STUB: b_rollOver(%d)", d.u.i);
 
 	g_lingo->push(Datum(0));
 }
diff --git a/engines/director/lingo/lingo-the.cpp b/engines/director/lingo/lingo-the.cpp
index 35a5707..090a7fe 100644
--- a/engines/director/lingo/lingo-the.cpp
+++ b/engines/director/lingo/lingo-the.cpp
@@ -51,6 +51,7 @@ TheEntity entities[] = {
 	{ kTheFixStageSize,		"fixStageSize",		false },	// D2 p
 	{ kTheFloatPrecision,	"floatPrecision",	false },	//		D3 p
 	{ kTheFrame,			"frame",			false },	// D2 f
+	{ kTheFrameLabel,		"frameLabel",		false },	//				D4 p
 	{ kTheFrameScript,		"frameScript",		false },	//				D4 p
 	{ kTheFreeBlock,		"freeBlock",		false },	// D2 f
 	{ kTheFreeBytes,		"freeBytes",		false },	// D2 f
@@ -65,7 +66,7 @@ TheEntity entities[] = {
 	{ kTheLabelList,		"labelList",		false },	//		D3 f
 	{ kTheLastClick,		"lastClick",		false },	// D2 f
 	{ kTheLastEvent,		"lastEvent",		false },	// D2 f
-	{ kTheLastFrame,		"lastFrame",		false },
+	{ kTheLastFrame,		"lastFrame",		false },	//				D4 p
 	{ kTheLastKey,			"lastKey",			false },	// D2 f
 	{ kTheLastRoll,			"lastRoll",			false },	// D2 f
 	{ kTheLines,			"lines",			false },	//		 D3
diff --git a/engines/director/lingo/lingo-the.h b/engines/director/lingo/lingo-the.h
index 994fcc9..e675a2d 100644
--- a/engines/director/lingo/lingo-the.h
+++ b/engines/director/lingo/lingo-the.h
@@ -49,6 +49,7 @@ enum TheEntityType {
 	kTheFixStageSize,
 	kTheFloatPrecision,
 	kTheFrame,
+	kTheFrameLabel,
 	kTheFrameScript,
 	kTheFreeBlock,
 	kTheFreeBytes,
diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h
index 42aa232..83c34fb 100644
--- a/engines/director/lingo/lingo.h
+++ b/engines/director/lingo/lingo.h
@@ -408,6 +408,7 @@ public:
 	static void b_puppetSprite(int nargs);
 	static void b_puppetTempo(int nargs);
 	static void b_puppetTransition(int nargs);
+	static void b_ramNeeded(int nargs);
 	static void b_rollOver(int nargs);
 	static void b_spriteBox(int nargs);
 	static void b_unLoad(int nargs);


Commit: d8a103d9e26f4d9ddb4b17f418559044b003343a
    https://github.com/scummvm/scummvm/commit/d8a103d9e26f4d9ddb4b17f418559044b003343a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2017-02-08T22:11:23+01:00

Commit Message:
DIRECTOR: Lingo: Documented D4 "Predefined methods and special messages" Lingo

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


diff --git a/engines/director/lingo/lingo-builtins.cpp b/engines/director/lingo/lingo-builtins.cpp
index 92511b1..03e1a86 100644
--- a/engines/director/lingo/lingo-builtins.cpp
+++ b/engines/director/lingo/lingo-builtins.cpp
@@ -274,6 +274,22 @@ static const char *builtinFunctions[] = {
 	0
 };
 
+
+static const char *predefinedMethods[] = {
+	"mAtFrame",				// D3
+	"mDescribe",			// D3
+	"mDispose",				// D3
+	"mGet",					// D3
+	"mInstanceRespondsTo",	// D3
+	"mMessageList",			// D3
+	"mName",				// D3
+	"mNew",					// D3
+	"mPerform",				// D3
+	"mPut",					// D3
+	"mRespondsTo",			// D3
+	0
+};
+
 void Lingo::initBuiltIns() {
 	for (BuiltinProto *blt = builtins; blt->name; blt++) {
 		Symbol *sym = new Symbol;
@@ -299,6 +315,13 @@ void Lingo::initBuiltIns() {
 
 	for (const char **b = twoWordBuiltins; *b; b++)
 		_twoWordBuiltins[*b] = true;
+
+	// Set predefined methods
+	for (const char **b = predefinedMethods; *b; b++) {
+		Symbol *s = g_lingo->lookupVar(*b, true, true);
+		s->type = SYMBOL;
+		s->u.s = new Common::String(*b);
+	}
 }
 
 void Lingo::printSTUBWithArglist(const char *funcname, int nargs) {
@@ -1335,20 +1358,6 @@ void Lingo::b_factory(int nargs) {
 	// This is intentionally empty
 }
 
-// TODO:
-// List of predefined methods in D3
-// mAtFrame
-// mDescribe
-// mDispose
-// mGet
-// mInstanceRespondsTo
-// mMessageList
-// mName
-// mNew
-// mPerform
-// mPut
-// mRespondsTo
-
 void Lingo::factoryCall(Common::String &name, int nargs) {
 	Common::String s("factoryCall: ");
 
diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp
index 65f2b2d..94fe706 100644
--- a/engines/director/lingo/lingo-codegen.cpp
+++ b/engines/director/lingo/lingo-codegen.cpp
@@ -142,7 +142,7 @@ Common::String Lingo::decodeInstruction(uint pc, uint *newPc) {
 }
 
 Symbol *Lingo::lookupVar(const char *name, bool create, bool putInGlobalList) {
-	Symbol *sym;
+	Symbol *sym = nullptr;
 
 	// Looking for the cast member constants
 	if (_vm->getVersion() < 4) { // TODO: There could be a flag 'Allow Outdated Lingo' in Movie Info in D4
@@ -165,7 +165,7 @@ Symbol *Lingo::lookupVar(const char *name, bool create, bool putInGlobalList) {
 		}
 	}
 
-	if (!_localvars->contains(name)) { // Create variable if it was not defined
+	if (!_localvars || !_localvars->contains(name)) { // Create variable if it was not defined
 		if (!create)
 			return NULL;
 
@@ -174,7 +174,8 @@ Symbol *Lingo::lookupVar(const char *name, bool create, bool putInGlobalList) {
 		sym->type = VOID;
 		sym->u.i = 0;
 
-		(*_localvars)[name] = sym;
+		if (_localvars)
+			(*_localvars)[name] = sym;
 
 		if (putInGlobalList) {
 			sym->global = true;
diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp
index 9a92d2f..0ce1944 100644
--- a/engines/director/lingo/lingo.cpp
+++ b/engines/director/lingo/lingo.cpp
@@ -91,10 +91,6 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
 		_eventHandlerTypes[t->handler] = t->name;
 	}
 
-	initBuiltIns();
-	initFuncs();
-	initTheEntities();
-
 	_currentScript = 0;
 	_currentScriptType = kMovieScript;
 	_currentEntityId = 0;
@@ -119,6 +115,10 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) {
 
 	_localvars = NULL;
 
+	initBuiltIns();
+	initFuncs();
+	initTheEntities();
+
 	warning("Lingo Inited");
 }
 





More information about the Scummvm-git-logs mailing list