aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authorEugene Sandulenko2019-12-02 20:43:08 +0100
committerEugene Sandulenko2019-12-02 20:46:40 +0100
commit5740a2a4b883ccecdacbe5f9f05de3d51c63eed5 (patch)
treed7d9351ba3336681d9fe761ac1f1fbdd4c7758bd /engines
parentede9fcf8a312ce30ac08b8dcf41150d4ac5936f1 (diff)
downloadscummvm-rg350-5740a2a4b883ccecdacbe5f9f05de3d51c63eed5.tar.gz
scummvm-rg350-5740a2a4b883ccecdacbe5f9f05de3d51c63eed5.tar.bz2
scummvm-rg350-5740a2a4b883ccecdacbe5f9f05de3d51c63eed5.zip
DIRECTOR: LINGO: Fix macro calls as part of statement lists
Diffstat (limited to 'engines')
-rw-r--r--engines/director/lingo/lingo-gr.cpp86
-rw-r--r--engines/director/lingo/lingo-gr.y4
-rw-r--r--engines/director/lingo/tests/macros.lingo1
3 files changed, 46 insertions, 45 deletions
diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp
index 457ff22c9f..b462393262 100644
--- a/engines/director/lingo/lingo-gr.cpp
+++ b/engines/director/lingo/lingo-gr.cpp
@@ -604,8 +604,8 @@ static const yytype_uint8 yytranslate[] =
static const yytype_uint16 yyprhs[] =
{
0, 0, 3, 7, 9, 12, 14, 16, 18, 20,
- 22, 23, 25, 27, 29, 34, 39, 44, 49, 54,
- 59, 65, 70, 75, 81, 83, 85, 87, 89, 95,
+ 22, 23, 25, 27, 32, 37, 42, 47, 52, 57,
+ 63, 68, 73, 79, 81, 83, 85, 87, 89, 95,
106, 118, 122, 129, 134, 141, 151, 161, 171, 182,
193, 200, 201, 205, 208, 210, 213, 215, 222, 224,
231, 238, 241, 242, 245, 249, 251, 253, 254, 255,
@@ -628,12 +628,12 @@ static const yytype_int16 yyrhs[] =
{
107, 0, -1, 107, 108, 113, -1, 113, -1, 1,
108, -1, 98, -1, 53, -1, 58, -1, 36, -1,
- 52, -1, -1, 145, -1, 152, -1, 116, -1, 49,
- 134, 42, 28, -1, 49, 134, 42, 135, -1, 49,
- 134, 75, 134, -1, 49, 134, 76, 134, -1, 51,
- 28, 91, 134, -1, 51, 13, 91, 134, -1, 51,
- 14, 134, 91, 134, -1, 51, 28, 54, 134, -1,
- 51, 13, 54, 134, -1, 51, 14, 134, 54, 134,
+ 52, -1, -1, 145, -1, 116, -1, 49, 134, 42,
+ 28, -1, 49, 134, 42, 135, -1, 49, 134, 75,
+ 134, -1, 49, 134, 76, 134, -1, 51, 28, 91,
+ 134, -1, 51, 13, 91, 134, -1, 51, 14, 134,
+ 91, 134, -1, 51, 28, 54, 134, -1, 51, 13,
+ 54, 134, -1, 51, 14, 134, 54, 134, -1, 152,
-1, 134, -1, 136, -1, 115, -1, 117, -1, 125,
123, 131, 130, 32, -1, 126, 91, 134, 130, 54,
134, 130, 131, 130, 32, -1, 126, 91, 134, 130,
@@ -698,8 +698,8 @@ static const yytype_int16 yyrhs[] =
static const yytype_uint16 yyrline[] =
{
0, 121, 121, 122, 123, 126, 133, 140, 147, 154,
- 157, 158, 159, 160, 163, 169, 172, 173, 174, 180,
- 187, 193, 199, 206, 214, 215, 218, 219, 224, 237,
+ 157, 158, 159, 162, 168, 171, 172, 173, 179, 186,
+ 192, 198, 205, 213, 214, 215, 218, 219, 224, 237,
255, 269, 274, 277, 282, 292, 304, 316, 326, 336,
346, 358, 359, 362, 363, 366, 367, 370, 378, 379,
385, 393, 396, 399, 402, 409, 416, 424, 427, 430,
@@ -773,8 +773,8 @@ static const yytype_uint16 yytoknum[] =
static const yytype_uint8 yyr1[] =
{
0, 106, 107, 107, 107, 108, 109, 110, 111, 112,
- 113, 113, 113, 113, 114, 114, 114, 114, 114, 114,
- 114, 114, 114, 114, 115, 115, 116, 116, 116, 116,
+ 113, 113, 113, 114, 114, 114, 114, 114, 114, 114,
+ 114, 114, 114, 115, 115, 115, 116, 116, 116, 116,
116, 116, 116, 116, 117, 117, 117, 117, 117, 117,
117, 118, 118, 119, 119, 120, 120, 121, 122, 122,
122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
@@ -796,8 +796,8 @@ static const yytype_uint8 yyr1[] =
static const yytype_uint8 yyr2[] =
{
0, 2, 3, 1, 2, 1, 1, 1, 1, 1,
- 0, 1, 1, 1, 4, 4, 4, 4, 4, 4,
- 5, 4, 4, 5, 1, 1, 1, 1, 5, 10,
+ 0, 1, 1, 4, 4, 4, 4, 4, 4, 5,
+ 4, 4, 5, 1, 1, 1, 1, 1, 5, 10,
11, 3, 6, 4, 6, 9, 9, 9, 10, 10,
6, 0, 3, 2, 1, 2, 1, 6, 1, 6,
6, 2, 0, 2, 3, 1, 1, 0, 0, 1,
@@ -825,8 +825,8 @@ static const yytype_uint8 yydefact[] =
0, 0, 55, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 63,
0, 0, 0, 0, 0, 0, 169, 0, 3, 77,
- 26, 13, 27, 52, 0, 52, 0, 0, 24, 68,
- 25, 112, 113, 11, 57, 12, 5, 4, 74, 0,
+ 26, 12, 27, 52, 0, 52, 0, 0, 24, 68,
+ 25, 112, 113, 11, 57, 23, 5, 4, 74, 0,
76, 121, 120, 0, 172, 123, 169, 70, 0, 71,
110, 169, 168, 169, 114, 130, 116, 0, 136, 0,
137, 0, 138, 143, 139, 141, 152, 111, 0, 53,
@@ -843,11 +843,11 @@ static const yytype_uint8 yydefact[] =
59, 58, 51, 58, 6, 57, 57, 31, 0, 57,
87, 88, 85, 86, 89, 90, 82, 93, 94, 95,
92, 78, 79, 80, 81, 83, 84, 161, 0, 124,
- 173, 72, 73, 131, 144, 160, 14, 15, 16, 17,
- 22, 19, 0, 0, 21, 18, 160, 127, 135, 102,
+ 173, 72, 73, 131, 144, 160, 13, 14, 15, 16,
+ 21, 18, 0, 0, 20, 17, 160, 127, 135, 102,
0, 104, 0, 106, 0, 108, 0, 100, 101, 133,
125, 169, 171, 60, 61, 0, 0, 58, 0, 33,
- 58, 0, 167, 0, 23, 20, 0, 0, 0, 0,
+ 58, 0, 167, 0, 22, 19, 0, 0, 0, 0,
0, 0, 28, 0, 0, 57, 58, 0, 162, 0,
57, 167, 167, 103, 105, 107, 109, 126, 0, 58,
34, 7, 57, 0, 40, 32, 163, 158, 57, 57,
@@ -986,7 +986,7 @@ static const yytype_int16 yytable[] =
36, 37, 38, 0, 0, 39, 40, 41, 42, 0,
0, 43, 44, 0, 0, 0, 0, 45, 0, 0,
0, 46, 2, 3, 4, 5, 0, 6, 7, 8,
- 9, 10, 0, 11, 12, 13, 0, 14, 68, 16,
+ 9, 10, 0, 11, 12, 13, 0, 14, 15, 16,
0, 17, 324, 18, 0, 0, 0, 19, 0, 20,
21, 22, 0, 0, 0, 0, 0, 0, 0, 24,
25, 26, 0, 0, 0, 27, 0, 0, 0, 0,
@@ -996,7 +996,7 @@ static const yytype_int16 yytable[] =
42, 0, 0, 43, 44, 0, 0, 0, 66, 45,
0, 0, 0, 46, 2, 3, 4, 5, 0, 6,
7, 8, 9, 10, 0, 11, 12, 13, 0, 14,
- 68, 16, 0, 17, 0, 18, 0, 0, 0, 19,
+ 15, 16, 0, 17, 0, 18, 0, 0, 0, 19,
0, 20, 21, 22, 0, 0, 0, 0, 0, 0,
0, 24, 25, 26, 0, 0, 0, 27, 0, 0,
0, 0, 0, 30, 31, 0, 32, 0, 0, 0,
@@ -1005,7 +1005,7 @@ static const yytype_int16 yytable[] =
40, 0, 42, 0, 0, 43, 44, 0, 0, 0,
66, 45, 0, 0, 0, 46, 2, 3, 4, 5,
0, 6, 7, 8, 9, 10, 0, 11, 12, 13,
- 0, 14, 68, 16, 0, 17, 0, 18, 0, 0,
+ 0, 14, 15, 16, 0, 17, 0, 18, 0, 0,
0, 19, 0, 20, 21, 22, 0, 0, 0, 0,
0, 0, 0, 24, 25, 26, 0, 0, 0, 27,
0, 0, 0, 0, 0, 30, 31, 0, 32, 0,
@@ -1014,7 +1014,7 @@ static const yytype_int16 yytable[] =
0, 39, 40, 0, 42, 0, 0, 43, 44, 0,
0, 0, 0, 45, 0, 0, 0, 46, 2, 3,
4, 5, 0, 6, 7, 8, 9, 10, 0, 11,
- 12, 13, 0, 14, 68, 16, 208, 17, 0, 18,
+ 12, 13, 0, 14, 15, 16, 208, 17, 0, 18,
0, 0, 0, 19, 0, 20, 21, 135, 136, 0,
0, 137, 138, 139, 140, 24, 141, 26, 0, 142,
143, 144, 0, 0, 0, 0, 0, 30, 31, 0,
@@ -2188,8 +2188,8 @@ yyreduce:
{ g_lingo->_inCond = false; ;}
break;
- case 14:
-#line 163 "engines/director/lingo/lingo-gr.y"
+ case 13:
+#line 162 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(g_lingo->c_varpush);
g_lingo->codeString((yyvsp[(4) - (4)].s)->c_str());
@@ -2198,25 +2198,25 @@ yyreduce:
delete (yyvsp[(4) - (4)].s); ;}
break;
- case 15:
-#line 169 "engines/director/lingo/lingo-gr.y"
+ case 14:
+#line 168 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(g_lingo->c_assign);
(yyval.code) = (yyvsp[(2) - (4)].code); ;}
break;
- case 16:
-#line 172 "engines/director/lingo/lingo-gr.y"
+ case 15:
+#line 171 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(g_lingo->c_after); ;}
break;
- case 17:
-#line 173 "engines/director/lingo/lingo-gr.y"
+ case 16:
+#line 172 "engines/director/lingo/lingo-gr.y"
{ (yyval.code) = g_lingo->code1(g_lingo->c_before); ;}
break;
- case 18:
-#line 174 "engines/director/lingo/lingo-gr.y"
+ case 17:
+#line 173 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(g_lingo->c_varpush);
g_lingo->codeString((yyvsp[(2) - (4)].s)->c_str());
@@ -2225,8 +2225,8 @@ yyreduce:
delete (yyvsp[(2) - (4)].s); ;}
break;
- case 19:
-#line 180 "engines/director/lingo/lingo-gr.y"
+ case 18:
+#line 179 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(g_lingo->c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2236,8 +2236,8 @@ yyreduce:
(yyval.code) = (yyvsp[(4) - (4)].code); ;}
break;
- case 20:
-#line 187 "engines/director/lingo/lingo-gr.y"
+ case 19:
+#line 186 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(g_lingo->c_swap);
g_lingo->code1(g_lingo->c_theentityassign);
@@ -2246,8 +2246,8 @@ yyreduce:
(yyval.code) = (yyvsp[(5) - (5)].code); ;}
break;
- case 21:
-#line 193 "engines/director/lingo/lingo-gr.y"
+ case 20:
+#line 192 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(g_lingo->c_varpush);
g_lingo->codeString((yyvsp[(2) - (4)].s)->c_str());
@@ -2256,8 +2256,8 @@ yyreduce:
delete (yyvsp[(2) - (4)].s); ;}
break;
- case 22:
-#line 199 "engines/director/lingo/lingo-gr.y"
+ case 21:
+#line 198 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(g_lingo->c_intpush);
g_lingo->codeInt(0); // Put dummy id
@@ -2267,8 +2267,8 @@ yyreduce:
(yyval.code) = (yyvsp[(4) - (4)].code); ;}
break;
- case 23:
-#line 206 "engines/director/lingo/lingo-gr.y"
+ case 22:
+#line 205 "engines/director/lingo/lingo-gr.y"
{
g_lingo->code1(g_lingo->c_swap);
g_lingo->code1(g_lingo->c_theentityassign);
diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y
index d1a33efdf0..fe4030ec72 100644
--- a/engines/director/lingo/lingo-gr.y
+++ b/engines/director/lingo/lingo-gr.y
@@ -156,7 +156,6 @@ then: tTHEN { g_lingo->_inCond = false; }
programline: /* empty */
| defn
- | macro
| stmt
;
@@ -211,7 +210,8 @@ asgn: tPUT expr tINTO ID {
$$ = $5; }
;
-stmtoneliner: expr
+stmtoneliner: macro
+ | expr
| proc
;
diff --git a/engines/director/lingo/tests/macros.lingo b/engines/director/lingo/tests/macros.lingo
index 7ffa557cb7..4282d6c39d 100644
--- a/engines/director/lingo/tests/macros.lingo
+++ b/engines/director/lingo/tests/macros.lingo
@@ -21,6 +21,7 @@ exit
end if
if x >1 then
put x
+check x, 5
exit
end if