From ad9e2fd0e5aa02f5d2ff08034a40f220c604c3cf Mon Sep 17 00:00:00 2001 From: Eugene Sandulenko Date: Tue, 21 Jun 2016 18:46:22 +0200 Subject: DIRECTOR: Lingo: Fix subexpressions --- engines/director/director.cpp | 8 +- engines/director/lingo/lingo-gr.cpp | 334 ++++++++++++++++++------------------ engines/director/lingo/lingo-gr.y | 1 + 3 files changed, 178 insertions(+), 165 deletions(-) diff --git a/engines/director/director.cpp b/engines/director/director.cpp index dd1433b95e..9a5fbabd3e 100644 --- a/engines/director/director.cpp +++ b/engines/director/director.cpp @@ -91,7 +91,13 @@ if (x = 5) then\n\ else\n\ set x = 8\n\ end if\n\ -put x", kMovieScript, 3); +put x\n\ +set y = 1\n\ +repeat while (y < 5)\n\ + set y = y + 1\n\ + put y\n\ +end repeat\n\ +", kMovieScript, 3); _lingo->executeScript(kMovieScript, 3); diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp index 17109efb66..7b0932bfe6 100644 --- a/engines/director/lingo/lingo-gr.cpp +++ b/engines/director/lingo/lingo-gr.cpp @@ -409,16 +409,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 43 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 178 +#define YYLAST 204 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 45 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 15 /* YYNRULES -- Number of rules. */ -#define YYNRULES 58 +#define YYNRULES 59 /* YYNRULES -- Number of states. */ -#define YYNSTATES 111 +#define YYNSTATES 112 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -467,11 +467,11 @@ static const yytype_uint8 yytranslate[] = static const yytype_uint8 yyprhs[] = { 0, 0, 3, 7, 9, 10, 12, 14, 16, 18, - 20, 21, 26, 31, 36, 38, 46, 57, 66, 68, - 72, 76, 79, 81, 82, 83, 86, 89, 91, 93, - 95, 99, 103, 107, 111, 115, 119, 123, 127, 131, - 134, 137, 141, 144, 147, 150, 152, 155, 158, 161, - 164, 168, 171, 175, 178, 181, 183, 187, 190 + 20, 21, 26, 31, 36, 38, 40, 48, 59, 68, + 70, 74, 78, 81, 83, 84, 85, 88, 91, 93, + 95, 97, 101, 105, 109, 113, 117, 121, 125, 129, + 133, 136, 139, 143, 146, 149, 152, 154, 157, 160, + 163, 166, 170, 173, 177, 180, 183, 185, 189, 192 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ @@ -480,34 +480,34 @@ static const yytype_int8 yyrhs[] = 46, 0, -1, 47, 40, 46, -1, 47, -1, -1, 56, -1, 48, -1, 49, -1, 55, -1, 1, -1, -1, 22, 55, 14, 7, -1, 24, 7, 34, 55, - -1, 24, 7, 26, 55, -1, 55, -1, 52, 50, - 25, 54, 53, 11, 9, -1, 52, 50, 25, 54, - 53, 10, 54, 53, 11, 9, -1, 51, 41, 50, - 42, 54, 53, 11, 23, -1, 55, -1, 55, 34, - 55, -1, 41, 50, 42, -1, 23, 27, -1, 9, - -1, -1, -1, 54, 40, -1, 54, 49, -1, 5, - -1, 7, -1, 48, -1, 55, 35, 55, -1, 55, - 36, 55, -1, 55, 37, 55, -1, 55, 38, 55, - -1, 55, 43, 55, -1, 55, 44, 55, -1, 55, - 33, 55, -1, 55, 28, 55, -1, 55, 29, 55, - -1, 35, 55, -1, 36, 55, -1, 41, 55, 42, - -1, 16, 8, -1, 17, 7, -1, 22, 55, -1, - 57, -1, 13, 15, -1, 13, 19, -1, 13, 21, - -1, 13, 58, -1, 13, 58, 59, -1, 13, 59, - -1, 26, 12, 8, -1, 12, 8, -1, 26, 8, - -1, 8, -1, 20, 18, 8, -1, 18, 8, -1, - 26, 18, 8, -1 + -1, 24, 7, 26, 55, -1, 55, -1, 56, -1, + 52, 50, 25, 54, 53, 11, 9, -1, 52, 50, + 25, 54, 53, 10, 54, 53, 11, 9, -1, 51, + 41, 50, 42, 54, 53, 11, 23, -1, 55, -1, + 55, 34, 55, -1, 41, 50, 42, -1, 23, 27, + -1, 9, -1, -1, -1, 54, 40, -1, 54, 49, + -1, 5, -1, 7, -1, 48, -1, 55, 35, 55, + -1, 55, 36, 55, -1, 55, 37, 55, -1, 55, + 38, 55, -1, 55, 43, 55, -1, 55, 44, 55, + -1, 55, 33, 55, -1, 55, 28, 55, -1, 55, + 29, 55, -1, 35, 55, -1, 36, 55, -1, 41, + 55, 42, -1, 16, 8, -1, 17, 7, -1, 22, + 55, -1, 57, -1, 13, 15, -1, 13, 19, -1, + 13, 21, -1, 13, 58, -1, 13, 58, 59, -1, + 13, 59, -1, 26, 12, 8, -1, 12, 8, -1, + 26, 8, -1, 8, -1, 20, 18, 8, -1, 18, + 8, -1, 26, 18, 8, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { 0, 90, 90, 91, 94, 95, 96, 97, 98, 99, - 100, 103, 104, 105, 108, 109, 115, 127, 135, 136, - 137, 139, 141, 143, 145, 146, 147, 150, 151, 152, + 100, 103, 104, 105, 108, 109, 110, 116, 128, 136, + 137, 138, 140, 142, 144, 146, 147, 148, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, - 163, 164, 167, 168, 169, 170, 181, 182, 183, 184, - 185, 186, 189, 190, 191, 192, 195, 196, 197 + 163, 164, 165, 168, 169, 170, 171, 182, 183, 184, + 185, 186, 187, 190, 191, 192, 193, 196, 197, 198 }; #endif @@ -544,22 +544,22 @@ static const yytype_uint16 yytoknum[] = static const yytype_uint8 yyr1[] = { 0, 45, 46, 46, 47, 47, 47, 47, 47, 47, - 47, 48, 48, 48, 49, 49, 49, 49, 50, 50, - 50, 51, 52, 53, 54, 54, 54, 55, 55, 55, + 47, 48, 48, 48, 49, 49, 49, 49, 49, 50, + 50, 50, 51, 52, 53, 54, 54, 54, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, - 55, 55, 56, 56, 56, 56, 57, 57, 57, 57, - 57, 57, 58, 58, 58, 58, 59, 59, 59 + 55, 55, 55, 56, 56, 56, 56, 57, 57, 57, + 57, 57, 57, 58, 58, 58, 58, 59, 59, 59 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 3, 1, 0, 1, 1, 1, 1, 1, - 0, 4, 4, 4, 1, 7, 10, 8, 1, 3, - 3, 2, 1, 0, 0, 2, 2, 1, 1, 1, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, - 2, 3, 2, 2, 2, 1, 2, 2, 2, 2, - 3, 2, 3, 2, 2, 1, 3, 2, 3 + 0, 4, 4, 4, 1, 1, 7, 10, 8, 1, + 3, 3, 2, 1, 0, 0, 2, 2, 1, 1, + 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 2, 2, 3, 2, 2, 2, 1, 2, 2, 2, + 2, 3, 2, 3, 2, 2, 1, 3, 2, 3 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -567,51 +567,51 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 0, 9, 27, 28, 22, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3, 29, 7, 0, 0, - 8, 5, 45, 55, 0, 46, 0, 47, 0, 48, - 0, 49, 51, 42, 43, 0, 29, 44, 21, 0, - 39, 40, 0, 1, 0, 0, 0, 0, 18, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 53, 57, - 0, 54, 0, 0, 0, 50, 0, 0, 0, 0, - 41, 2, 0, 0, 0, 24, 0, 37, 38, 36, - 30, 31, 32, 33, 34, 35, 56, 52, 58, 11, - 13, 12, 24, 20, 23, 19, 23, 25, 26, 0, - 14, 0, 24, 0, 0, 23, 15, 17, 0, 0, - 16 + 0, 9, 28, 29, 23, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3, 30, 7, 0, 0, + 8, 5, 46, 56, 0, 47, 0, 48, 0, 49, + 0, 50, 52, 43, 44, 0, 30, 45, 22, 0, + 40, 41, 0, 1, 0, 0, 0, 0, 19, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 54, 58, + 0, 55, 0, 0, 0, 51, 0, 0, 0, 0, + 42, 2, 0, 0, 0, 25, 0, 38, 39, 37, + 31, 32, 33, 34, 35, 36, 57, 53, 59, 11, + 13, 12, 25, 21, 24, 20, 24, 26, 27, 0, + 14, 15, 0, 25, 0, 0, 24, 16, 18, 0, + 0, 17 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 14, 15, 36, 98, 47, 18, 19, 99, 94, - 100, 21, 22, 31, 32 + 100, 101, 22, 31, 32 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -61 +#define YYPACT_NINF -77 static const yytype_int16 yypact[] = { - 58, -61, -61, -61, -61, 10, 26, -5, 2, 34, - 59, 2, 2, 2, 73, 44, 1, -61, 45, 65, - 122, -61, -61, -61, 77, -61, 96, -61, 90, -61, - 15, 150, -61, -61, -61, 2, -61, 74, -61, 71, - 134, 134, 98, -61, 58, 65, 65, 88, 110, 2, - 2, 2, 2, 2, 2, 2, 2, 2, -61, -61, - 108, -61, 117, 124, 119, -61, 74, 142, 2, 2, - -61, -61, 114, 127, 86, -61, 2, 122, 122, 122, - -23, -23, 134, 134, 122, 122, -61, -61, -61, -61, - 122, 122, -61, -61, 55, 122, 55, -61, -61, 6, - 122, 141, -61, 152, 148, 55, -61, -61, 153, 163, - -61 + 65, -77, -77, -77, -77, 10, -6, 8, 2, -10, + 27, 2, 2, 2, 39, 24, 1, -77, 30, 89, + 148, -77, -77, -77, 34, -77, 71, -77, 62, -77, + 55, 57, -77, -77, -77, 2, -77, 100, -77, 6, + -23, -23, 124, -77, 65, 89, 89, 59, 136, 2, + 2, 2, 2, 2, 2, 2, 2, 2, -77, -77, + 77, -77, 78, 82, 74, -77, 100, 90, 2, 2, + -77, -77, 56, 70, 112, -77, 2, 148, 148, 148, + 160, 160, -23, -23, 148, 148, -77, -77, -77, -77, + 148, 148, -77, -77, 86, 148, 86, -77, -77, 49, + 148, -77, 93, -77, 98, 92, 86, -77, -77, 105, + 108, -77 }; /* YYPGOTO[NTERM-NUM]. */ -static const yytype_int16 yypgoto[] = +static const yytype_int8 yypgoto[] = { - -61, 129, -61, 3, 4, -6, -61, -61, -13, -60, - 0, -61, -61, -61, 143 + -77, 75, -77, 3, 4, 16, -77, -77, -73, -76, + 0, 14, -77, -77, 87 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -621,46 +621,52 @@ static const yytype_int16 yypgoto[] = #define YYTABLE_NINF -7 static const yytype_int8 yytable[] = { - 20, -6, 34, 16, 17, 49, 50, 2, 37, 3, - 51, 40, 41, 42, 54, 55, 102, 103, 23, 48, - 56, 57, 24, 61, 35, 25, 10, 62, 26, 27, - 28, 29, 96, 63, 33, 66, 30, 11, 12, 72, - 73, -6, 105, 13, 20, 48, 74, 16, 17, 77, - 78, 79, 80, 81, 82, 83, 84, 85, -4, 1, - 2, 38, 3, 2, 4, 3, 39, 4, 90, 91, - 2, 5, 3, 43, 6, 7, 95, 35, 9, 10, - 8, 9, 10, 101, 44, 58, 45, 35, 67, 10, - 11, 12, 108, 11, 12, 97, 13, 68, -4, 13, - 11, 12, 49, 50, 59, 69, 46, 51, 60, 52, - 53, 54, 55, 75, 49, 50, 86, 56, 57, 51, - 76, 52, 53, 54, 55, 87, 49, 50, 70, 56, - 57, 51, 88, 52, 53, 54, 55, 63, 49, 50, - 70, 56, 57, 51, 76, 52, 53, 54, 55, 89, - 49, 50, 104, 56, 57, 51, 92, 52, 53, 54, - 55, 106, 49, 50, 109, 56, 57, 51, 26, 93, - 28, 107, 110, 71, 65, 0, 64, 56, 57 + 20, -6, 33, 16, 17, 49, 50, 2, 37, 3, + 51, 40, 41, 42, 21, 34, 96, 38, 23, 48, + 56, 57, 24, 102, 35, 25, 10, 106, 26, 27, + 28, 29, 68, 109, 39, 66, 30, 11, 12, 43, + 69, -6, 58, 13, 20, 48, 74, 16, 17, 77, + 78, 79, 80, 81, 82, 83, 84, 85, 21, 103, + 104, 72, 73, 61, 44, -4, 1, 62, 90, 91, + 2, 45, 3, 63, 4, 26, 95, 28, 5, 59, + 60, 6, 7, 64, 75, 86, 87, 8, 9, 10, + 88, 2, 63, 3, 2, 4, 3, 89, 92, 5, + 11, 12, 6, 7, 105, -4, 13, 107, 8, 9, + 10, 35, 93, 10, 67, 108, 110, 111, 65, 71, + 0, 11, 12, 0, 11, 12, 97, 13, 49, 50, + 46, 0, 0, 51, 0, 52, 53, 54, 55, 0, + 49, 50, 0, 56, 57, 51, 76, 52, 53, 54, + 55, 0, 49, 50, 70, 56, 57, 51, 0, 52, + 53, 54, 55, 0, 49, 50, 70, 56, 57, 51, + 76, 52, 53, 54, 55, 0, 49, 50, 0, 56, + 57, 51, 0, 52, 53, 54, 55, 0, 49, 50, + 0, 56, 57, 51, 0, 0, 0, 54, 55, 0, + 0, 0, 0, 56, 57 }; static const yytype_int8 yycheck[] = { - 0, 0, 7, 0, 0, 28, 29, 5, 8, 7, - 33, 11, 12, 13, 37, 38, 10, 11, 8, 19, - 43, 44, 12, 8, 22, 15, 24, 12, 18, 19, - 20, 21, 92, 18, 8, 35, 26, 35, 36, 45, - 46, 40, 102, 41, 44, 45, 46, 44, 44, 49, - 50, 51, 52, 53, 54, 55, 56, 57, 0, 1, - 5, 27, 7, 5, 9, 7, 7, 9, 68, 69, - 5, 13, 7, 0, 16, 17, 76, 22, 23, 24, - 22, 23, 24, 96, 40, 8, 41, 22, 14, 24, - 35, 36, 105, 35, 36, 40, 41, 26, 40, 41, - 35, 36, 28, 29, 8, 34, 41, 33, 18, 35, - 36, 37, 38, 25, 28, 29, 8, 43, 44, 33, - 34, 35, 36, 37, 38, 8, 28, 29, 42, 43, - 44, 33, 8, 35, 36, 37, 38, 18, 28, 29, - 42, 43, 44, 33, 34, 35, 36, 37, 38, 7, - 28, 29, 11, 43, 44, 33, 42, 35, 36, 37, - 38, 9, 28, 29, 11, 43, 44, 33, 18, 42, - 20, 23, 9, 44, 31, -1, 26, 43, 44 + 0, 0, 8, 0, 0, 28, 29, 5, 8, 7, + 33, 11, 12, 13, 0, 7, 92, 27, 8, 19, + 43, 44, 12, 96, 22, 15, 24, 103, 18, 19, + 20, 21, 26, 106, 7, 35, 26, 35, 36, 0, + 34, 40, 8, 41, 44, 45, 46, 44, 44, 49, + 50, 51, 52, 53, 54, 55, 56, 57, 44, 10, + 11, 45, 46, 8, 40, 0, 1, 12, 68, 69, + 5, 41, 7, 18, 9, 18, 76, 20, 13, 8, + 18, 16, 17, 26, 25, 8, 8, 22, 23, 24, + 8, 5, 18, 7, 5, 9, 7, 7, 42, 13, + 35, 36, 16, 17, 11, 40, 41, 9, 22, 23, + 24, 22, 42, 24, 14, 23, 11, 9, 31, 44, + -1, 35, 36, -1, 35, 36, 40, 41, 28, 29, + 41, -1, -1, 33, -1, 35, 36, 37, 38, -1, + 28, 29, -1, 43, 44, 33, 34, 35, 36, 37, + 38, -1, 28, 29, 42, 43, 44, 33, -1, 35, + 36, 37, 38, -1, 28, 29, 42, 43, 44, 33, + 34, 35, 36, 37, 38, -1, 28, 29, -1, 43, + 44, 33, -1, 35, 36, 37, 38, -1, 28, 29, + -1, 43, 44, 33, -1, -1, -1, 37, 38, -1, + -1, -1, -1, 43, 44 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -677,8 +683,8 @@ static const yytype_uint8 yystos[] = 42, 46, 50, 50, 55, 25, 34, 55, 55, 55, 55, 55, 55, 55, 55, 55, 8, 8, 8, 7, 55, 55, 42, 42, 54, 55, 54, 40, 49, 53, - 55, 53, 10, 11, 11, 54, 9, 23, 53, 11, - 9 + 55, 56, 53, 10, 11, 11, 54, 9, 23, 53, + 11, 9 }; #define yyerrok (yyerrstatus = 0) @@ -1527,8 +1533,8 @@ yyreduce: { g_lingo->code1(g_lingo->c_xpop); ;} break; - case 15: -#line 109 "engines/director/lingo/lingo-gr.y" + case 16: +#line 110 "engines/director/lingo/lingo-gr.y" { inst then, end; WRITE_LE_UINT32(&then, (yyvsp[(4) - (7)].code)); @@ -1537,8 +1543,8 @@ yyreduce: (*g_lingo->_currentScript)[(yyvsp[(1) - (7)].code) + 3] = end; ;} break; - case 16: -#line 115 "engines/director/lingo/lingo-gr.y" + case 17: +#line 116 "engines/director/lingo/lingo-gr.y" { inst then, else1, end; WRITE_LE_UINT32(&then, (yyvsp[(4) - (10)].code)); @@ -1549,8 +1555,8 @@ yyreduce: (*g_lingo->_currentScript)[(yyvsp[(1) - (10)].code) + 3] = end; ;} break; - case 17: -#line 127 "engines/director/lingo/lingo-gr.y" + case 18: +#line 128 "engines/director/lingo/lingo-gr.y" { inst body, end; WRITE_LE_UINT32(&body, (yyvsp[(5) - (8)].code)); @@ -1559,159 +1565,154 @@ yyreduce: (*g_lingo->_currentScript)[(yyvsp[(1) - (8)].code) + 2] = end; ;} break; - case 18: -#line 135 "engines/director/lingo/lingo-gr.y" + case 19: +#line 136 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(STOP); ;} break; - case 19: -#line 136 "engines/director/lingo/lingo-gr.y" + case 20: +#line 137 "engines/director/lingo/lingo-gr.y" { g_lingo->code2(g_lingo->c_eq, STOP); ;} break; - case 21: -#line 139 "engines/director/lingo/lingo-gr.y" + case 22: +#line 140 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->code3(g_lingo->c_whilecode, STOP, STOP); ;} break; - case 22: -#line 141 "engines/director/lingo/lingo-gr.y" + case 23: +#line 142 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->code1(g_lingo->c_ifcode); g_lingo->code3(STOP, STOP, STOP); ;} break; - case 23: -#line 143 "engines/director/lingo/lingo-gr.y" + case 24: +#line 144 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); ;} break; - case 24: -#line 145 "engines/director/lingo/lingo-gr.y" + case 25: +#line 146 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->_currentScript->size(); ;} break; - case 27: -#line 150 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_constpush); inst i; WRITE_LE_UINT32(&i, (yyvsp[(1) - (1)].i)); (yyval.code) = g_lingo->code1(i); ;} - break; - case 28: #line 151 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_varpush); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); (yyval.code) = g_lingo->code1(g_lingo->c_eval); delete (yyvsp[(1) - (1)].s); ;} + { g_lingo->code1(g_lingo->c_constpush); inst i; WRITE_LE_UINT32(&i, (yyvsp[(1) - (1)].i)); (yyval.code) = g_lingo->code1(i); ;} break; - case 30: -#line 153 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_add); ;} + case 29: +#line 152 "engines/director/lingo/lingo-gr.y" + { g_lingo->code1(g_lingo->c_varpush); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); (yyval.code) = g_lingo->code1(g_lingo->c_eval); delete (yyvsp[(1) - (1)].s); ;} break; case 31: #line 154 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_sub); ;} + { g_lingo->code1(g_lingo->c_add); ;} break; case 32: #line 155 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_mul); ;} + { g_lingo->code1(g_lingo->c_sub); ;} break; case 33: #line 156 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_div); ;} + { g_lingo->code1(g_lingo->c_mul); ;} break; case 34: #line 157 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_gt); ;} + { g_lingo->code1(g_lingo->c_div); ;} break; case 35: #line 158 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_lt); ;} + { g_lingo->code1(g_lingo->c_gt); ;} break; case 36: #line 159 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_neq); ;} + { g_lingo->code1(g_lingo->c_lt); ;} break; case 37: #line 160 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_ge); ;} + { g_lingo->code1(g_lingo->c_neq); ;} break; case 38: #line 161 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_le); ;} + { g_lingo->code1(g_lingo->c_ge); ;} break; case 39: #line 162 "engines/director/lingo/lingo-gr.y" - { (yyval.code) = (yyvsp[(2) - (2)].code); ;} + { g_lingo->code1(g_lingo->c_le); ;} break; case 40: #line 163 "engines/director/lingo/lingo-gr.y" - { (yyval.code) = (yyvsp[(2) - (2)].code); g_lingo->code1(g_lingo->c_negate); ;} + { (yyval.code) = (yyvsp[(2) - (2)].code); ;} break; case 41: #line 164 "engines/director/lingo/lingo-gr.y" - { (yyval.code) = (yyvsp[(2) - (3)].code); ;} + { (yyval.code) = (yyvsp[(2) - (2)].code); g_lingo->code1(g_lingo->c_negate); ;} break; case 42: -#line 167 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_mci); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); delete (yyvsp[(2) - (2)].s); ;} +#line 165 "engines/director/lingo/lingo-gr.y" + { (yyval.code) = (yyvsp[(2) - (3)].code); ;} break; case 43: #line 168 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_mciwait); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); delete (yyvsp[(2) - (2)].s); ;} + { g_lingo->code1(g_lingo->c_mci); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); delete (yyvsp[(2) - (2)].s); ;} break; case 44: #line 169 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_printtop); ;} + { g_lingo->code1(g_lingo->c_mciwait); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); delete (yyvsp[(2) - (2)].s); ;} break; - case 46: -#line 181 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_gotoloop); ;} + case 45: +#line 170 "engines/director/lingo/lingo-gr.y" + { g_lingo->code1(g_lingo->c_printtop); ;} break; case 47: #line 182 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_gotonext); ;} + { g_lingo->code1(g_lingo->c_gotoloop); ;} break; case 48: #line 183 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_gotoprevious); ;} + { g_lingo->code1(g_lingo->c_gotonext); ;} break; case 49: #line 184 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_goto); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); g_lingo->codeString(""); delete (yyvsp[(2) - (2)].s); ;} + { g_lingo->code1(g_lingo->c_gotoprevious); ;} break; case 50: #line 185 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_goto); g_lingo->codeString((yyvsp[(2) - (3)].s)->c_str()); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(2) - (3)].s); delete (yyvsp[(3) - (3)].s); ;} + { g_lingo->code1(g_lingo->c_goto); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); g_lingo->codeString(""); delete (yyvsp[(2) - (2)].s); ;} break; case 51: #line 186 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_goto); g_lingo->codeString(""); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); delete (yyvsp[(2) - (2)].s); ;} + { g_lingo->code1(g_lingo->c_goto); g_lingo->codeString((yyvsp[(2) - (3)].s)->c_str()); g_lingo->codeString((yyvsp[(3) - (3)].s)->c_str()); delete (yyvsp[(2) - (3)].s); delete (yyvsp[(3) - (3)].s); ;} break; case 52: -#line 189 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = (yyvsp[(3) - (3)].s); ;} +#line 187 "engines/director/lingo/lingo-gr.y" + { g_lingo->code1(g_lingo->c_goto); g_lingo->codeString(""); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); delete (yyvsp[(2) - (2)].s); ;} break; case 53: #line 190 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = (yyvsp[(2) - (2)].s); ;} + { (yyval.s) = (yyvsp[(3) - (3)].s); ;} break; case 54: @@ -1721,27 +1722,32 @@ yyreduce: case 55: #line 192 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = (yyvsp[(1) - (1)].s); ;} + { (yyval.s) = (yyvsp[(2) - (2)].s); ;} break; case 56: -#line 195 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = (yyvsp[(3) - (3)].s); ;} +#line 193 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = (yyvsp[(1) - (1)].s); ;} break; case 57: #line 196 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = (yyvsp[(2) - (2)].s); ;} + { (yyval.s) = (yyvsp[(3) - (3)].s); ;} break; case 58: #line 197 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = (yyvsp[(2) - (2)].s); ;} + break; + + case 59: +#line 198 "engines/director/lingo/lingo-gr.y" { (yyval.s) = (yyvsp[(3) - (3)].s); ;} break; /* Line 1267 of yacc.c. */ -#line 1745 "engines/director/lingo/lingo-gr.cpp" +#line 1751 "engines/director/lingo/lingo-gr.cpp" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -1955,6 +1961,6 @@ yyreturn: } -#line 236 "engines/director/lingo/lingo-gr.y" +#line 237 "engines/director/lingo/lingo-gr.y" diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y index 8e4f96dcf9..179359c87e 100644 --- a/engines/director/lingo/lingo-gr.y +++ b/engines/director/lingo/lingo-gr.y @@ -106,6 +106,7 @@ asgn: tPUT expr tINTO VAR { g_lingo->code1(g_lingo->c_varpush); g_lingo->codeSt ; stmt: expr { g_lingo->code1(g_lingo->c_xpop); } + | func | if cond tTHEN stmtlist end tEND tIF { inst then, end; WRITE_LE_UINT32(&then, $4); -- cgit v1.2.3