diff options
author | Eugene Sandulenko | 2016-08-08 20:10:20 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2016-08-08 20:11:07 +0200 |
commit | 9985d076602d46ff3fed1288f65c7d4d4d01e8c3 (patch) | |
tree | e3f1cf44009bb66bc8720da98008d37a31fe7971 /engines | |
parent | b9badf61bfca47fdfe45495a199c72c3fba08039 (diff) | |
download | scummvm-rg350-9985d076602d46ff3fed1288f65c7d4d4d01e8c3.tar.gz scummvm-rg350-9985d076602d46ff3fed1288f65c7d4d4d01e8c3.tar.bz2 scummvm-rg350-9985d076602d46ff3fed1288f65c7d4d4d01e8c3.zip |
DIRECTOR: Lingo: Improve 'go to' command
Diffstat (limited to 'engines')
-rw-r--r-- | engines/director/lingo/lingo-code.cpp | 18 | ||||
-rw-r--r-- | engines/director/lingo/lingo-gr.cpp | 558 | ||||
-rw-r--r-- | engines/director/lingo/lingo-gr.y | 47 |
3 files changed, 299 insertions, 324 deletions
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp index 82640f85db..21cfef735d 100644 --- a/engines/director/lingo/lingo-code.cpp +++ b/engines/director/lingo/lingo-code.cpp @@ -674,13 +674,21 @@ void Lingo::c_mciwait() { } void Lingo::c_goto() { - Common::String frame((char *)&(*g_lingo->_currentScript)[g_lingo->_pc]); - g_lingo->_pc += g_lingo->calcStringAlignment(frame.c_str()); + Datum mode = g_lingo->pop(); + Datum frame, movie; - Common::String movie((char *)&(*g_lingo->_currentScript)[g_lingo->_pc]); - g_lingo->_pc += g_lingo->calcStringAlignment(movie.c_str()); + if (mode.u.i == 1 || mode.u.i == 3) + frame = g_lingo->pop(); + + if (mode.u.i == 2 || mode.u.i == 3) + movie = g_lingo->pop(); + + frame.toString(); + movie.toString(); + + warning("c_goto(%s, %s)", frame.u.s->c_str(), movie.u.s->c_str()); - g_lingo->func_goto(frame, movie); + //g_lingo->func_goto(frame, movie); } void Lingo::c_gotoloop() { diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp index a9b8dc69d9..b939bcea52 100644 --- a/engines/director/lingo/lingo-gr.cpp +++ b/engines/director/lingo/lingo-gr.cpp @@ -490,7 +490,7 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 91 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 855 +#define YYLAST 939 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 84 @@ -608,8 +608,8 @@ static const yytype_int8 yyrhs[] = 17, -1, 19, 118, -1, 52, 105, 47, 105, -1, 52, 105, -1, 20, -1, 107, 83, 20, -1, 30, 33, -1, 30, 38, -1, 30, 40, -1, 30, 109, - -1, 30, 109, 110, -1, 30, 110, -1, 28, 21, - -1, 21, -1, 39, 37, 21, -1, 37, 21, -1, + -1, 30, 109, 110, -1, 30, 110, -1, 28, 105, + -1, 105, -1, 39, 37, 105, -1, 37, 105, -1, 53, 54, -1, 53, 109, -1, 53, 109, 110, -1, 53, 110, -1, -1, 34, 20, 113, 102, 115, 86, 116, 104, -1, 50, 20, -1, -1, 51, 20, 114, @@ -621,19 +621,19 @@ static const yytype_int8 yyrhs[] = /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 103, 103, 104, 105, 108, 113, 114, 115, 116, - 117, 118, 121, 127, 133, 141, 149, 155, 163, 172, - 173, 175, 176, 181, 192, 208, 220, 225, 232, 241, - 250, 260, 270, 281, 282, 285, 286, 289, 290, 293, - 301, 302, 310, 311, 312, 314, 316, 322, 328, 335, - 337, 339, 340, 341, 344, 345, 348, 351, 355, 358, - 362, 369, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 399, 400, 401, 402, 403, 404, - 406, 407, 410, 413, 416, 417, 418, 421, 422, 433, - 434, 435, 436, 441, 447, 454, 455, 458, 459, 462, - 463, 468, 474, 506, 506, 512, 515, 515, 521, 522, - 523, 524, 526, 530, 538, 539, 540 + 0, 102, 102, 103, 104, 107, 112, 113, 114, 115, + 116, 117, 120, 126, 132, 140, 148, 154, 162, 171, + 172, 174, 175, 180, 191, 207, 219, 224, 231, 240, + 249, 259, 269, 280, 281, 284, 285, 288, 289, 292, + 300, 301, 309, 310, 311, 313, 315, 321, 327, 334, + 336, 338, 339, 340, 343, 344, 347, 350, 354, 357, + 361, 368, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 398, 399, 400, 401, 402, 403, + 405, 406, 409, 412, 415, 416, 417, 420, 421, 432, + 433, 434, 435, 438, 441, 446, 447, 450, 451, 454, + 455, 458, 461, 491, 491, 497, 500, 500, 506, 507, + 508, 509, 511, 515, 523, 524, 525 }; #endif @@ -727,7 +727,7 @@ static const yytype_uint8 yydefact[] = 0, 0, 0, 3, 62, 21, 11, 22, 0, 0, 0, 19, 8, 87, 88, 7, 9, 5, 4, 59, 0, 62, 61, 92, 91, 125, 94, 124, 124, 97, - 90, 106, 0, 99, 0, 100, 0, 101, 102, 104, + 90, 0, 99, 0, 100, 0, 101, 106, 102, 104, 113, 84, 85, 86, 0, 45, 0, 0, 0, 0, 115, 116, 96, 109, 110, 112, 74, 0, 79, 80, 0, 1, 6, 0, 0, 0, 0, 42, 0, 0, @@ -761,45 +761,45 @@ static const yytype_int16 yydefgoto[] = /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -197 +#define YYPACT_NINF -199 static const yytype_int16 yypact[] = { - 248, -51, -197, -197, 169, -197, -197, 169, 169, 169, - 49, -197, -197, 18, 178, -197, 32, 2, 37, 169, - 14, 15, 39, 44, 45, 169, -7, 169, 169, 169, - 169, 169, 6, -197, 7, -197, -197, -197, -2, 4, - 394, 729, -197, -197, -197, -197, -197, -197, -197, -1, - 169, -197, 729, 729, 729, 729, 11, 169, 169, -197, - 13, -197, 59, -197, 61, -197, 48, -197, 17, -197, - -197, -197, -197, 556, 66, -197, -30, 169, -28, 43, - -197, -197, 609, -197, 17, -197, 773, 631, 773, 773, - 680, -197, 348, 394, 169, 394, 46, 707, 169, 169, + 248, -50, -199, -199, 169, -199, -199, 169, 169, 169, + 49, -199, -199, 9, 588, -199, 13, 26, 18, 169, + 4, 11, 34, 36, 39, 169, 626, 169, 169, 169, + 169, 169, 6, -199, 7, -199, -199, -199, -17, -7, + 394, 813, -199, -199, -199, -199, -199, -199, -199, -16, + 169, -199, 813, 813, 813, 813, -18, 169, 169, -199, + -6, 169, -199, 169, -199, 43, -199, 813, -5, -199, + -199, -199, -199, 640, 56, -199, -36, 169, -28, 38, + -199, -199, 693, -199, -5, -199, 857, 715, 857, 857, + 764, -199, 348, 394, 169, 394, 42, 791, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, - 169, 169, 169, 556, 169, -54, 11, 68, -197, -197, - 72, -197, -197, 69, -197, 169, 169, 587, 169, 169, - 169, -197, 169, -197, 169, 169, -197, -197, 21, 729, - 22, 653, -51, 169, 729, 729, 729, 729, 729, 729, - 729, 729, 751, 751, 773, 773, 729, 729, 729, 729, - -197, -197, -197, 82, -197, 729, 729, 169, 169, 729, - 729, 729, 82, 729, 729, 729, -197, 10, -197, -197, - 542, 729, -197, -59, 729, 729, -59, 411, 58, 169, - 411, -197, -197, 84, 24, 24, -197, -197, 83, 169, - 729, -10, -3, -197, 88, -197, -197, 75, 729, -197, - 89, -197, 94, -197, -197, 94, -197, 394, -197, 411, - 411, -197, -197, 411, -197, 411, 94, 94, -197, 394, - 542, -197, 76, 77, 411, 102, 106, -197, 111, 112, - -197, -197, -197, -197, 131, 116, 128, 129, -14, -197, - 542, -197, 479, 119, -197, -197, -197, 411, -197, -197, - -197, -197, -197 + 169, 169, 169, 640, 169, -58, -18, 65, 813, 813, + 169, -199, -199, 67, -199, 169, 169, 671, 169, 169, + 169, -199, 169, -199, 169, 169, -199, -199, 10, 813, + 14, 737, -50, 169, 813, 813, 813, 813, 813, 813, + 813, 813, 835, 835, 857, 857, 813, 813, 813, 813, + -199, -199, 813, 68, -199, 813, 813, 169, 169, 813, + 813, 813, 68, 813, 813, 813, -199, -4, -199, -199, + 542, 813, -199, -57, 813, 813, -57, 411, 45, 169, + 411, -199, -199, 74, 20, 20, -199, -199, 70, 169, + 813, -10, -3, -199, 80, -199, -199, 59, 813, -199, + 76, -199, 83, -199, -199, 83, -199, 394, -199, 411, + 411, -199, -199, 411, -199, 411, 83, 83, -199, 394, + 542, -199, 60, 73, 411, 93, 94, -199, 95, 81, + -199, -199, -199, -199, 102, 90, 106, 125, -14, -199, + 542, -199, 479, 116, -199, -199, -199, 411, -199, -199, + -199, -199, -199 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -197, -197, 12, 70, 3, -172, 0, -197, -197, -197, - -39, -196, -62, -91, -197, -197, -197, -192, -9, 115, - -169, 41, 5, -197, -197, 139, -17, -197, -197, -197, - -197, -4, -23, -197, 16 + -199, -199, 12, 71, 3, -172, 0, -199, -199, -199, + -45, -197, -67, -91, -199, -199, -199, -198, -9, 115, + -169, 41, 5, -199, -199, 134, -11, -199, -199, -199, + -199, -8, -33, -199, 17 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -809,28 +809,28 @@ static const yytype_int16 yypgoto[] = #define YYTABLE_NINF -60 static const yytype_int16 yytable[] = { - 36, 58, 138, 34, 140, 42, 91, -10, 191, 85, - 190, -51, -51, 48, 61, 125, 210, 128, 47, 231, - 229, 62, 213, 71, 193, 160, 47, 76, 77, 114, - 64, 231, 66, 188, 229, 78, 219, 220, 59, 211, - 223, 126, 225, 129, 92, 52, 214, 83, 53, 54, - 55, 121, 70, 234, 64, 189, 66, 72, 240, 79, - 73, 74, 75, -51, 80, 81, 82, 133, 86, 87, - 88, 89, 90, 115, 116, 94, 93, 57, 258, 257, - 118, 97, 119, 47, -10, 120, 124, 130, 161, 164, - 142, 113, 36, 162, 114, 34, 117, 42, 55, 55, - 176, 178, 182, 199, 203, -59, -59, 204, 218, 207, - -59, -59, -59, 163, -59, -59, -59, 221, 127, 213, - 224, 243, 172, -59, -59, 241, 233, 57, 245, -59, - -59, -59, 246, 180, 97, 139, 141, 247, 239, 144, + 36, 58, 138, 34, 140, 42, 91, -10, 191, 125, + 190, -51, -51, 48, 229, 85, 210, 128, 231, 188, + 47, 160, 213, 76, 77, 114, 193, 47, 229, 59, + 231, 78, 63, 70, 65, 126, 219, 220, 72, 211, + 223, 189, 225, 129, 92, 52, 214, 71, 53, 54, + 55, 74, 75, 234, 79, 67, 80, 121, 240, 81, + 73, 93, 57, -51, 94, 114, 82, 67, 86, 87, + 88, 89, 90, 133, 115, 116, 124, 117, 258, 257, + 120, 97, 130, 47, -10, 161, 142, 164, 182, 176, + 199, 113, 36, 178, 203, 34, 207, 42, 55, 55, + 218, 221, 118, 204, 119, -59, -59, 224, 213, 241, + -59, -59, -59, 163, -59, -59, -59, 243, 127, 245, + 246, 247, 172, -59, -59, 248, 233, 57, 253, -59, + -59, -59, 254, 180, 97, 139, 141, 255, 239, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, - 155, 156, 157, 158, 179, 159, 248, 253, 254, 255, - 256, 260, 137, 215, 237, 84, 165, 166, 186, 169, - 170, 171, 206, 173, 0, 174, 175, 0, 0, 0, + 155, 156, 157, 158, 179, 159, 256, 215, 260, 237, + 84, 162, 206, 137, 186, 0, 165, 166, 0, 169, + 170, 171, 0, 173, 0, 174, 175, 0, 0, 0, 2, 3, 4, 5, 181, 6, 0, 0, 0, 49, - 11, 0, 212, 0, 0, 194, 0, 0, 195, 61, - 0, 0, 0, 0, 0, 230, 62, 0, 184, 185, - 50, 63, 21, 0, 0, 64, 65, 66, 67, 0, + 11, 0, 212, 0, 0, 194, 0, 0, 195, 0, + 0, 0, 0, 0, 0, 230, 0, 0, 184, 185, + 50, 0, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 0, 250, 27, 0, 0, 0, 28, 0, 0, 208, 29, 30, 0, 0, 0, 0, 31, -6, 1, @@ -867,60 +867,68 @@ static const yytype_int16 yytable[] = 0, 29, 30, 2, 3, 4, 5, 31, 6, 7, 8, 9, 49, 11, 0, 0, 0, 0, 0, 12, 0, 13, 14, 0, 0, 0, 0, 17, 18, 0, - 0, 0, 0, 19, 0, 21, 0, 0, 123, 0, - 0, 0, 0, 0, 25, 26, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 27, 0, 0, 0, - 28, 0, 98, 99, 29, 30, 0, 100, 101, 102, - 31, 103, 104, 105, 0, 0, 0, 0, 106, 107, - 108, 109, 167, 0, 0, 0, 110, 111, 112, 0, - 0, 0, 0, 98, 99, 0, 0, 0, 100, 101, - 102, 0, 103, 104, 105, 0, 132, 0, 168, 106, - 107, 108, 109, 0, 0, 98, 99, 110, 111, 112, - 100, 101, 102, 0, 103, 104, 105, 0, 0, 0, - 0, 106, 107, 108, 109, 0, 0, 98, 99, 110, - 111, 112, 100, 101, 102, 0, 103, 104, 105, 0, - 134, 135, 0, 106, 107, 108, 109, 0, 0, 98, + 0, 0, 0, 19, 0, 21, 0, 0, 0, 0, + 0, 0, 0, 0, 25, 26, 0, 0, 0, 2, + 3, 4, 5, 0, 6, 0, 27, 0, 49, 11, + 28, 0, 0, 0, 29, 30, 61, 0, 0, 0, + 31, 62, 0, 0, 0, 63, 64, 65, 66, 50, + 0, 21, 0, 0, 0, 0, 0, 2, 3, 4, + 5, 0, 6, 0, 0, 0, 49, 11, 0, 0, + 0, 0, 27, 0, 61, 0, 28, 0, 0, 0, + 29, 30, 0, 63, 0, 65, 31, 50, 0, 21, + 0, 0, 123, 0, 0, 0, 0, 0, 0, 0, + 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 27, 0, 0, 0, 28, 0, 98, 99, 29, 30, + 0, 100, 101, 102, 31, 103, 104, 105, 0, 0, + 0, 0, 106, 107, 108, 109, 167, 0, 0, 0, + 110, 111, 112, 0, 0, 0, 0, 98, 99, 0, + 0, 0, 100, 101, 102, 0, 103, 104, 105, 0, + 132, 0, 168, 106, 107, 108, 109, 0, 0, 98, 99, 110, 111, 112, 100, 101, 102, 0, 103, 104, - 105, 0, 0, 0, 143, 106, 107, 108, 109, 0, - 0, 0, 136, 110, 111, 112, 98, 99, 0, 0, - 0, 100, 101, 102, 0, 103, 104, 105, 0, 0, - 0, 0, 106, 107, 108, 109, 0, 0, 0, 136, - 110, 111, 112, 98, 99, 0, 0, 0, 100, 101, + 105, 0, 0, 0, 0, 106, 107, 108, 109, 0, + 0, 98, 99, 110, 111, 112, 100, 101, 102, 0, + 103, 104, 105, 0, 134, 135, 0, 106, 107, 108, + 109, 0, 0, 98, 99, 110, 111, 112, 100, 101, 102, 0, 103, 104, 105, 0, 0, 0, 143, 106, - 107, 108, 109, 0, 0, 98, 99, 110, 111, 112, - 100, 101, 102, 0, 103, 104, 105, 0, 0, 0, - 0, 106, 107, 108, 109, 0, 0, 98, 99, 110, - 111, 112, 100, 101, 102, 0, 103, 104, 105, 0, - 0, 0, 0, 0, 0, 108, 109, 0, 0, 98, + 107, 108, 109, 0, 0, 0, 136, 110, 111, 112, + 98, 99, 0, 0, 0, 100, 101, 102, 0, 103, + 104, 105, 0, 0, 0, 0, 106, 107, 108, 109, + 0, 0, 0, 136, 110, 111, 112, 98, 99, 0, + 0, 0, 100, 101, 102, 0, 103, 104, 105, 0, + 0, 0, 143, 106, 107, 108, 109, 0, 0, 98, 99, 110, 111, 112, 100, 101, 102, 0, 103, 104, - 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 110, 111, 112 + 105, 0, 0, 0, 0, 106, 107, 108, 109, 0, + 0, 98, 99, 110, 111, 112, 100, 101, 102, 0, + 103, 104, 105, 0, 0, 0, 0, 0, 0, 108, + 109, 0, 0, 98, 99, 110, 111, 112, 100, 101, + 102, 0, 103, 104, 105, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 110, 111, 112 }; static const yytype_int16 yycheck[] = { - 0, 10, 93, 0, 95, 0, 0, 0, 180, 26, - 179, 25, 26, 1, 21, 45, 26, 45, 77, 215, - 212, 28, 25, 21, 83, 79, 77, 12, 13, 83, - 37, 227, 39, 23, 226, 20, 205, 206, 20, 49, - 209, 71, 211, 71, 32, 4, 49, 54, 7, 8, - 9, 68, 20, 222, 37, 45, 39, 20, 230, 20, - 19, 47, 48, 77, 20, 20, 25, 84, 27, 28, - 29, 30, 31, 57, 58, 71, 78, 78, 250, 248, - 21, 40, 21, 77, 77, 37, 20, 44, 20, 20, - 44, 50, 92, 21, 83, 92, 83, 92, 57, 58, - 79, 79, 20, 45, 20, 56, 57, 83, 20, 26, - 61, 62, 63, 122, 65, 66, 67, 42, 77, 25, - 31, 44, 131, 74, 75, 49, 217, 78, 26, 80, - 81, 82, 26, 142, 93, 94, 95, 26, 229, 98, + 0, 10, 93, 0, 95, 0, 0, 0, 180, 45, + 179, 25, 26, 1, 212, 26, 26, 45, 215, 23, + 77, 79, 25, 12, 13, 83, 83, 77, 226, 20, + 227, 20, 37, 20, 39, 71, 205, 206, 20, 49, + 209, 45, 211, 71, 32, 4, 49, 21, 7, 8, + 9, 47, 48, 222, 20, 14, 20, 68, 230, 20, + 19, 78, 78, 77, 71, 83, 25, 26, 27, 28, + 29, 30, 31, 84, 57, 58, 20, 83, 250, 248, + 37, 40, 44, 77, 77, 20, 44, 20, 20, 79, + 45, 50, 92, 79, 20, 92, 26, 92, 57, 58, + 20, 42, 61, 83, 63, 56, 57, 31, 25, 49, + 61, 62, 63, 122, 65, 66, 67, 44, 77, 26, + 26, 26, 131, 74, 75, 44, 217, 78, 26, 80, + 81, 82, 42, 142, 93, 94, 95, 31, 229, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, - 109, 110, 111, 112, 142, 114, 44, 26, 42, 31, - 31, 42, 92, 202, 226, 26, 125, 126, 172, 128, - 129, 130, 195, 132, -1, 134, 135, -1, -1, -1, + 109, 110, 111, 112, 142, 114, 31, 202, 42, 226, + 26, 120, 195, 92, 172, -1, 125, 126, -1, 128, + 129, 130, -1, 132, -1, 134, 135, -1, -1, -1, 11, 12, 13, 14, 143, 16, -1, -1, -1, 20, - 21, -1, 201, -1, -1, 183, -1, -1, 186, 21, - -1, -1, -1, -1, -1, 214, 28, -1, 167, 168, - 41, 33, 43, -1, -1, 37, 38, 39, 40, -1, + 21, -1, 201, -1, -1, 183, -1, -1, 186, -1, + -1, -1, -1, -1, -1, 214, -1, -1, 167, 168, + 41, -1, 43, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 189, -1, 241, 64, -1, -1, -1, 68, -1, -1, 199, 72, 73, -1, -1, -1, -1, 78, 0, 1, @@ -957,34 +965,42 @@ static const yytype_int16 yycheck[] = -1, 72, 73, 11, 12, 13, 14, 78, 16, 17, 18, 19, 20, 21, -1, -1, -1, -1, -1, 27, -1, 29, 30, -1, -1, -1, -1, 35, 36, -1, - -1, -1, -1, 41, -1, 43, -1, -1, 32, -1, - -1, -1, -1, -1, 52, 53, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 64, -1, -1, -1, - 68, -1, 56, 57, 72, 73, -1, 61, 62, 63, - 78, 65, 66, 67, -1, -1, -1, -1, 72, 73, - 74, 75, 45, -1, -1, -1, 80, 81, 82, -1, - -1, -1, -1, 56, 57, -1, -1, -1, 61, 62, - 63, -1, 65, 66, 67, -1, 47, -1, 71, 72, - 73, 74, 75, -1, -1, 56, 57, 80, 81, 82, - 61, 62, 63, -1, 65, 66, 67, -1, -1, -1, - -1, 72, 73, 74, 75, -1, -1, 56, 57, 80, - 81, 82, 61, 62, 63, -1, 65, 66, 67, -1, - 69, 70, -1, 72, 73, 74, 75, -1, -1, 56, + -1, -1, -1, 41, -1, 43, -1, -1, -1, -1, + -1, -1, -1, -1, 52, 53, -1, -1, -1, 11, + 12, 13, 14, -1, 16, -1, 64, -1, 20, 21, + 68, -1, -1, -1, 72, 73, 28, -1, -1, -1, + 78, 33, -1, -1, -1, 37, 38, 39, 40, 41, + -1, 43, -1, -1, -1, -1, -1, 11, 12, 13, + 14, -1, 16, -1, -1, -1, 20, 21, -1, -1, + -1, -1, 64, -1, 28, -1, 68, -1, -1, -1, + 72, 73, -1, 37, -1, 39, 78, 41, -1, 43, + -1, -1, 32, -1, -1, -1, -1, -1, -1, -1, + 54, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 64, -1, -1, -1, 68, -1, 56, 57, 72, 73, + -1, 61, 62, 63, 78, 65, 66, 67, -1, -1, + -1, -1, 72, 73, 74, 75, 45, -1, -1, -1, + 80, 81, 82, -1, -1, -1, -1, 56, 57, -1, + -1, -1, 61, 62, 63, -1, 65, 66, 67, -1, + 47, -1, 71, 72, 73, 74, 75, -1, -1, 56, 57, 80, 81, 82, 61, 62, 63, -1, 65, 66, - 67, -1, -1, -1, 71, 72, 73, 74, 75, -1, - -1, -1, 79, 80, 81, 82, 56, 57, -1, -1, - -1, 61, 62, 63, -1, 65, 66, 67, -1, -1, - -1, -1, 72, 73, 74, 75, -1, -1, -1, 79, - 80, 81, 82, 56, 57, -1, -1, -1, 61, 62, + 67, -1, -1, -1, -1, 72, 73, 74, 75, -1, + -1, 56, 57, 80, 81, 82, 61, 62, 63, -1, + 65, 66, 67, -1, 69, 70, -1, 72, 73, 74, + 75, -1, -1, 56, 57, 80, 81, 82, 61, 62, 63, -1, 65, 66, 67, -1, -1, -1, 71, 72, - 73, 74, 75, -1, -1, 56, 57, 80, 81, 82, - 61, 62, 63, -1, 65, 66, 67, -1, -1, -1, - -1, 72, 73, 74, 75, -1, -1, 56, 57, 80, - 81, 82, 61, 62, 63, -1, 65, 66, 67, -1, - -1, -1, -1, -1, -1, 74, 75, -1, -1, 56, + 73, 74, 75, -1, -1, -1, 79, 80, 81, 82, + 56, 57, -1, -1, -1, 61, 62, 63, -1, 65, + 66, 67, -1, -1, -1, -1, 72, 73, 74, 75, + -1, -1, -1, 79, 80, 81, 82, 56, 57, -1, + -1, -1, 61, 62, 63, -1, 65, 66, 67, -1, + -1, -1, 71, 72, 73, 74, 75, -1, -1, 56, 57, 80, 81, 82, 61, 62, 63, -1, 65, 66, - 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 80, 81, 82 + 67, -1, -1, -1, -1, 72, 73, 74, 75, -1, + -1, 56, 57, 80, 81, 82, 61, 62, 63, -1, + 65, 66, 67, -1, -1, -1, -1, -1, -1, 74, + 75, -1, -1, 56, 57, 80, 81, 82, 61, 62, + 63, -1, 65, 66, 67, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 80, 81, 82 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -997,17 +1013,17 @@ static const yytype_uint8 yystos[] = 73, 78, 85, 87, 88, 89, 90, 91, 98, 99, 100, 105, 106, 108, 111, 112, 117, 77, 86, 20, 41, 88, 105, 105, 105, 105, 118, 78, 102, 20, - 107, 21, 28, 33, 37, 38, 39, 40, 109, 110, + 107, 28, 33, 37, 38, 39, 40, 105, 109, 110, 20, 21, 20, 105, 47, 48, 12, 13, 20, 20, 20, 20, 105, 54, 109, 110, 105, 105, 105, 105, 105, 0, 86, 78, 71, 78, 97, 105, 56, 57, 61, 62, 63, 65, 66, 67, 72, 73, 74, 75, - 80, 81, 82, 105, 83, 118, 118, 83, 21, 21, + 80, 81, 82, 105, 83, 118, 118, 83, 105, 105, 37, 110, 113, 32, 20, 45, 71, 105, 45, 71, 44, 114, 47, 110, 69, 70, 79, 87, 97, 105, 97, 105, 44, 71, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, - 79, 20, 21, 102, 20, 105, 105, 45, 71, 105, + 79, 20, 105, 102, 20, 105, 105, 45, 71, 105, 105, 105, 102, 105, 105, 105, 79, 103, 79, 86, 102, 105, 20, 115, 105, 105, 115, 104, 23, 45, 104, 89, 106, 83, 86, 86, 86, 90, 103, 45, @@ -1832,12 +1848,12 @@ yyreduce: switch (yyn) { case 4: -#line 105 "engines/director/lingo/lingo-gr.y" +#line 104 "engines/director/lingo/lingo-gr.y" { yyerrok; ;} break; case 5: -#line 108 "engines/director/lingo/lingo-gr.y" +#line 107 "engines/director/lingo/lingo-gr.y" { g_lingo->_linenumber++; g_lingo->_colnumber = 1; @@ -1845,12 +1861,12 @@ yyreduce: break; case 10: -#line 117 "engines/director/lingo/lingo-gr.y" +#line 116 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_xpop); ;} break; case 12: -#line 121 "engines/director/lingo/lingo-gr.y" +#line 120 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_varpush); g_lingo->codeString((yyvsp[(4) - (4)].s)->c_str()); @@ -1860,7 +1876,7 @@ yyreduce: break; case 13: -#line 127 "engines/director/lingo/lingo-gr.y" +#line 126 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_varpush); g_lingo->codeString((yyvsp[(2) - (4)].s)->c_str()); @@ -1870,7 +1886,7 @@ yyreduce: break; case 14: -#line 133 "engines/director/lingo/lingo-gr.y" +#line 132 "engines/director/lingo/lingo-gr.y" { g_lingo->codeConst(0); // Put dummy id g_lingo->code1(g_lingo->c_theentityassign); @@ -1882,7 +1898,7 @@ yyreduce: break; case 15: -#line 141 "engines/director/lingo/lingo-gr.y" +#line 140 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_swap); g_lingo->code1(g_lingo->c_theentityassign); @@ -1894,7 +1910,7 @@ yyreduce: break; case 16: -#line 149 "engines/director/lingo/lingo-gr.y" +#line 148 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_varpush); g_lingo->codeString((yyvsp[(2) - (4)].s)->c_str()); @@ -1904,7 +1920,7 @@ yyreduce: break; case 17: -#line 155 "engines/director/lingo/lingo-gr.y" +#line 154 "engines/director/lingo/lingo-gr.y" { g_lingo->codeConst(0); // Put dummy id g_lingo->code1(g_lingo->c_theentityassign); @@ -1916,7 +1932,7 @@ yyreduce: break; case 18: -#line 163 "engines/director/lingo/lingo-gr.y" +#line 162 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_swap); g_lingo->code1(g_lingo->c_theentityassign); @@ -1928,12 +1944,12 @@ yyreduce: break; case 19: -#line 172 "engines/director/lingo/lingo-gr.y" +#line 171 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_xpop); ;} break; case 23: -#line 181 "engines/director/lingo/lingo-gr.y" +#line 180 "engines/director/lingo/lingo-gr.y" { inst body = 0, end = 0; WRITE_UINT32(&body, (yyvsp[(5) - (8)].code)); @@ -1943,7 +1959,7 @@ yyreduce: break; case 24: -#line 192 "engines/director/lingo/lingo-gr.y" +#line 191 "engines/director/lingo/lingo-gr.y" { inst init = 0, finish = 0, body = 0, end = 0, inc = 0; WRITE_UINT32(&init, (yyvsp[(3) - (11)].code)); @@ -1959,7 +1975,7 @@ yyreduce: break; case 25: -#line 208 "engines/director/lingo/lingo-gr.y" +#line 207 "engines/director/lingo/lingo-gr.y" { inst init = 0, finish = 0, body = 0, end = 0, inc = 0; WRITE_UINT32(&init, (yyvsp[(3) - (12)].code)); @@ -1975,14 +1991,14 @@ yyreduce: break; case 26: -#line 220 "engines/director/lingo/lingo-gr.y" +#line 219 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_ifcode); ;} break; case 27: -#line 225 "engines/director/lingo/lingo-gr.y" +#line 224 "engines/director/lingo/lingo-gr.y" { inst then = 0, end = 0; WRITE_UINT32(&then, (yyvsp[(5) - (8)].code)); @@ -1993,7 +2009,7 @@ yyreduce: break; case 28: -#line 232 "engines/director/lingo/lingo-gr.y" +#line 231 "engines/director/lingo/lingo-gr.y" { inst then = 0, else1 = 0, end = 0; WRITE_UINT32(&then, (yyvsp[(5) - (11)].code)); @@ -2006,7 +2022,7 @@ yyreduce: break; case 29: -#line 241 "engines/director/lingo/lingo-gr.y" +#line 240 "engines/director/lingo/lingo-gr.y" { inst then = 0, else1 = 0, end = 0; WRITE_UINT32(&then, (yyvsp[(5) - (11)].code)); @@ -2019,7 +2035,7 @@ yyreduce: break; case 30: -#line 250 "engines/director/lingo/lingo-gr.y" +#line 249 "engines/director/lingo/lingo-gr.y" { inst then = 0, else1 = 0, end = 0; WRITE_UINT32(&then, (yyvsp[(4) - (6)].code)); @@ -2033,7 +2049,7 @@ yyreduce: break; case 31: -#line 260 "engines/director/lingo/lingo-gr.y" +#line 259 "engines/director/lingo/lingo-gr.y" { inst then = 0, else1 = 0, end = 0; WRITE_UINT32(&then, (yyvsp[(4) - (10)].code)); @@ -2047,7 +2063,7 @@ yyreduce: break; case 32: -#line 270 "engines/director/lingo/lingo-gr.y" +#line 269 "engines/director/lingo/lingo-gr.y" { inst then = 0, else1 = 0, end = 0; WRITE_UINT32(&then, (yyvsp[(4) - (10)].code)); @@ -2061,17 +2077,17 @@ yyreduce: break; case 33: -#line 281 "engines/director/lingo/lingo-gr.y" +#line 280 "engines/director/lingo/lingo-gr.y" { (yyval.code) = 0; ;} break; case 34: -#line 282 "engines/director/lingo/lingo-gr.y" +#line 281 "engines/director/lingo/lingo-gr.y" { (yyval.code) = (yyvsp[(2) - (3)].code); ;} break; case 39: -#line 293 "engines/director/lingo/lingo-gr.y" +#line 292 "engines/director/lingo/lingo-gr.y" { inst then = 0; WRITE_UINT32(&then, (yyvsp[(4) - (6)].code)); @@ -2081,7 +2097,7 @@ yyreduce: break; case 41: -#line 302 "engines/director/lingo/lingo-gr.y" +#line 301 "engines/director/lingo/lingo-gr.y" { inst then = 0; WRITE_UINT32(&then, (yyvsp[(4) - (5)].code)); @@ -2091,22 +2107,22 @@ yyreduce: break; case 42: -#line 310 "engines/director/lingo/lingo-gr.y" +#line 309 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(STOP); ;} break; case 43: -#line 311 "engines/director/lingo/lingo-gr.y" +#line 310 "engines/director/lingo/lingo-gr.y" { g_lingo->code2(g_lingo->c_eq, STOP); ;} break; case 45: -#line 314 "engines/director/lingo/lingo-gr.y" +#line 313 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->code3(g_lingo->c_repeatwhilecode, STOP, STOP); ;} break; case 46: -#line 316 "engines/director/lingo/lingo-gr.y" +#line 315 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->code3(g_lingo->c_repeatwithcode, STOP, STOP); g_lingo->code3(STOP, STOP, STOP); @@ -2115,7 +2131,7 @@ yyreduce: break; case 47: -#line 322 "engines/director/lingo/lingo-gr.y" +#line 321 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->code1(g_lingo->c_ifcode); g_lingo->code3(STOP, STOP, STOP); @@ -2124,7 +2140,7 @@ yyreduce: break; case 48: -#line 328 "engines/director/lingo/lingo-gr.y" +#line 327 "engines/director/lingo/lingo-gr.y" { inst skipEnd; WRITE_UINT32(&skipEnd, 1); // We have to skip end to avoid multiple executions @@ -2134,41 +2150,41 @@ yyreduce: break; case 49: -#line 335 "engines/director/lingo/lingo-gr.y" +#line 334 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->_currentScript->size(); ;} break; case 50: -#line 337 "engines/director/lingo/lingo-gr.y" +#line 336 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); ;} break; case 51: -#line 339 "engines/director/lingo/lingo-gr.y" +#line 338 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->_currentScript->size(); ;} break; case 54: -#line 344 "engines/director/lingo/lingo-gr.y" +#line 343 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->codeConst((yyvsp[(1) - (1)].i)); ;} break; case 55: -#line 345 "engines/director/lingo/lingo-gr.y" +#line 344 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->code1(g_lingo->c_fconstpush); g_lingo->codeFloat((yyvsp[(1) - (1)].f)); ;} break; case 56: -#line 348 "engines/director/lingo/lingo-gr.y" +#line 347 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->code1(g_lingo->c_stringpush); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); ;} break; case 57: -#line 351 "engines/director/lingo/lingo-gr.y" +#line 350 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->code1(g_lingo->_handlers[*(yyvsp[(1) - (1)].s)]->u.func); g_lingo->codeConst(0); // Put dummy value @@ -2176,14 +2192,14 @@ yyreduce: break; case 58: -#line 355 "engines/director/lingo/lingo-gr.y" +#line 354 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->codeFunc((yyvsp[(1) - (4)].s), (yyvsp[(3) - (4)].narg)); delete (yyvsp[(1) - (4)].s); ;} break; case 59: -#line 358 "engines/director/lingo/lingo-gr.y" +#line 357 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->code1(g_lingo->c_eval); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); @@ -2191,7 +2207,7 @@ yyreduce: break; case 60: -#line 362 "engines/director/lingo/lingo-gr.y" +#line 361 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->codeConst(0); // Put dummy id g_lingo->code1(g_lingo->c_theentitypush); @@ -2202,7 +2218,7 @@ yyreduce: break; case 61: -#line 369 "engines/director/lingo/lingo-gr.y" +#line 368 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->code1(g_lingo->c_theentitypush); inst e = 0, f = 0; @@ -2212,280 +2228,246 @@ yyreduce: break; case 63: -#line 376 "engines/director/lingo/lingo-gr.y" +#line 375 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_add); ;} break; case 64: -#line 377 "engines/director/lingo/lingo-gr.y" +#line 376 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_sub); ;} break; case 65: -#line 378 "engines/director/lingo/lingo-gr.y" +#line 377 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_mul); ;} break; case 66: -#line 379 "engines/director/lingo/lingo-gr.y" +#line 378 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_div); ;} break; case 67: -#line 380 "engines/director/lingo/lingo-gr.y" +#line 379 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_gt); ;} break; case 68: -#line 381 "engines/director/lingo/lingo-gr.y" +#line 380 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_lt); ;} break; case 69: -#line 382 "engines/director/lingo/lingo-gr.y" +#line 381 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_neq); ;} break; case 70: -#line 383 "engines/director/lingo/lingo-gr.y" +#line 382 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_ge); ;} break; case 71: -#line 384 "engines/director/lingo/lingo-gr.y" +#line 383 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_le); ;} break; case 72: -#line 385 "engines/director/lingo/lingo-gr.y" +#line 384 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_and); ;} break; case 73: -#line 386 "engines/director/lingo/lingo-gr.y" +#line 385 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_or); ;} break; case 74: -#line 387 "engines/director/lingo/lingo-gr.y" +#line 386 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_not); ;} break; case 75: -#line 388 "engines/director/lingo/lingo-gr.y" +#line 387 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_ampersand); ;} break; case 76: -#line 389 "engines/director/lingo/lingo-gr.y" +#line 388 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_concat); ;} break; case 77: -#line 390 "engines/director/lingo/lingo-gr.y" +#line 389 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_contains); ;} break; case 78: -#line 391 "engines/director/lingo/lingo-gr.y" +#line 390 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_starts); ;} break; case 79: -#line 392 "engines/director/lingo/lingo-gr.y" +#line 391 "engines/director/lingo/lingo-gr.y" { (yyval.code) = (yyvsp[(2) - (2)].code); ;} break; case 80: -#line 393 "engines/director/lingo/lingo-gr.y" +#line 392 "engines/director/lingo/lingo-gr.y" { (yyval.code) = (yyvsp[(2) - (2)].code); g_lingo->code1(g_lingo->c_negate); ;} break; case 81: -#line 394 "engines/director/lingo/lingo-gr.y" +#line 393 "engines/director/lingo/lingo-gr.y" { (yyval.code) = (yyvsp[(2) - (3)].code); ;} break; case 82: -#line 395 "engines/director/lingo/lingo-gr.y" +#line 394 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_intersects); ;} break; case 83: -#line 396 "engines/director/lingo/lingo-gr.y" +#line 395 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_within); ;} break; case 84: -#line 399 "engines/director/lingo/lingo-gr.y" +#line 398 "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); ;} break; case 85: -#line 400 "engines/director/lingo/lingo-gr.y" +#line 399 "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); ;} break; case 86: -#line 401 "engines/director/lingo/lingo-gr.y" +#line 400 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_printtop); ;} break; case 89: -#line 404 "engines/director/lingo/lingo-gr.y" +#line 403 "engines/director/lingo/lingo-gr.y" { g_lingo->codeConst(0); // Push fake value on stack g_lingo->code1(g_lingo->c_procret); ;} break; case 91: -#line 407 "engines/director/lingo/lingo-gr.y" +#line 406 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->_handlers[*(yyvsp[(1) - (2)].s)]->u.func); delete (yyvsp[(1) - (2)].s); ;} break; case 92: -#line 410 "engines/director/lingo/lingo-gr.y" +#line 409 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->_handlers[*(yyvsp[(1) - (2)].s)]->u.func); delete (yyvsp[(1) - (2)].s); ;} break; case 93: -#line 413 "engines/director/lingo/lingo-gr.y" +#line 412 "engines/director/lingo/lingo-gr.y" { g_lingo->code2(g_lingo->c_voidpush, g_lingo->_handlers[*(yyvsp[(1) - (1)].s)]->u.func); delete (yyvsp[(1) - (1)].s); ;} break; case 94: -#line 416 "engines/director/lingo/lingo-gr.y" +#line 415 "engines/director/lingo/lingo-gr.y" { g_lingo->codeFunc((yyvsp[(1) - (2)].s), (yyvsp[(2) - (2)].narg)); ;} break; case 95: -#line 417 "engines/director/lingo/lingo-gr.y" +#line 416 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_open); ;} break; case 96: -#line 418 "engines/director/lingo/lingo-gr.y" +#line 417 "engines/director/lingo/lingo-gr.y" { g_lingo->code2(g_lingo->c_voidpush, g_lingo->c_open); ;} break; case 97: -#line 421 "engines/director/lingo/lingo-gr.y" +#line 420 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_global); g_lingo->codeString((yyvsp[(1) - (1)].s)->c_str()); delete (yyvsp[(1) - (1)].s); ;} break; case 98: -#line 422 "engines/director/lingo/lingo-gr.y" +#line 421 "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 99: -#line 433 "engines/director/lingo/lingo-gr.y" +#line 432 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_gotoloop); ;} break; case 100: -#line 434 "engines/director/lingo/lingo-gr.y" +#line 433 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_gotonext); ;} break; case 101: -#line 435 "engines/director/lingo/lingo-gr.y" +#line 434 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_gotoprevious); ;} break; case 102: -#line 436 "engines/director/lingo/lingo-gr.y" +#line 435 "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->codeConst(1); + g_lingo->code1(g_lingo->c_goto); ;} break; case 103: -#line 441 "engines/director/lingo/lingo-gr.y" +#line 438 "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->codeConst(3); + g_lingo->code1(g_lingo->c_goto); ;} break; case 104: -#line 447 "engines/director/lingo/lingo-gr.y" +#line 441 "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 105: -#line 454 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = (yyvsp[(2) - (2)].s); ;} - break; - - case 106: -#line 455 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = (yyvsp[(1) - (1)].s); ;} - break; - - case 107: -#line 458 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = (yyvsp[(3) - (3)].s); ;} - break; - - case 108: -#line 459 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = (yyvsp[(2) - (2)].s); ;} + g_lingo->codeConst(2); + g_lingo->code1(g_lingo->c_goto); ;} break; case 109: -#line 462 "engines/director/lingo/lingo-gr.y" +#line 454 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_playdone); ;} break; case 110: -#line 463 "engines/director/lingo/lingo-gr.y" +#line 455 "engines/director/lingo/lingo-gr.y" { - g_lingo->code1(g_lingo->c_play); - g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); - g_lingo->codeString(""); - delete (yyvsp[(2) - (2)].s); ;} + g_lingo->codeConst(1); + g_lingo->code1(g_lingo->c_play); ;} break; case 111: -#line 468 "engines/director/lingo/lingo-gr.y" +#line 458 "engines/director/lingo/lingo-gr.y" { - g_lingo->code1(g_lingo->c_play); - 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->codeConst(3); + g_lingo->code1(g_lingo->c_play); ;} break; case 112: -#line 474 "engines/director/lingo/lingo-gr.y" +#line 461 "engines/director/lingo/lingo-gr.y" { - g_lingo->code1(g_lingo->c_play); - g_lingo->codeString(""); - g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); - delete (yyvsp[(2) - (2)].s); ;} + g_lingo->codeConst(2); + g_lingo->code1(g_lingo->c_play); ;} break; case 113: -#line 506 "engines/director/lingo/lingo-gr.y" +#line 491 "engines/director/lingo/lingo-gr.y" { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;} break; case 114: -#line 507 "engines/director/lingo/lingo-gr.y" +#line 492 "engines/director/lingo/lingo-gr.y" { g_lingo->codeConst(0); // Push fake value on stack g_lingo->code1(g_lingo->c_procret); @@ -2494,19 +2476,19 @@ yyreduce: break; case 115: -#line 512 "engines/director/lingo/lingo-gr.y" +#line 497 "engines/director/lingo/lingo-gr.y" { g_lingo->codeFactory(*(yyvsp[(2) - (2)].s)); ;} break; case 116: -#line 515 "engines/director/lingo/lingo-gr.y" +#line 500 "engines/director/lingo/lingo-gr.y" { g_lingo->_indef = true; ;} break; case 117: -#line 516 "engines/director/lingo/lingo-gr.y" +#line 501 "engines/director/lingo/lingo-gr.y" { g_lingo->codeConst(0); // Push fake value on stack g_lingo->code1(g_lingo->c_procret); @@ -2515,32 +2497,32 @@ yyreduce: break; case 118: -#line 521 "engines/director/lingo/lingo-gr.y" +#line 506 "engines/director/lingo/lingo-gr.y" { (yyval.narg) = 0; ;} break; case 119: -#line 522 "engines/director/lingo/lingo-gr.y" +#line 507 "engines/director/lingo/lingo-gr.y" { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;} break; case 120: -#line 523 "engines/director/lingo/lingo-gr.y" +#line 508 "engines/director/lingo/lingo-gr.y" { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;} break; case 121: -#line 524 "engines/director/lingo/lingo-gr.y" +#line 509 "engines/director/lingo/lingo-gr.y" { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;} break; case 122: -#line 526 "engines/director/lingo/lingo-gr.y" +#line 511 "engines/director/lingo/lingo-gr.y" { g_lingo->codeArgStore(); ;} break; case 123: -#line 530 "engines/director/lingo/lingo-gr.y" +#line 515 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_call); g_lingo->codeString((yyvsp[(1) - (3)].s)->c_str()); @@ -2550,23 +2532,23 @@ yyreduce: break; case 124: -#line 538 "engines/director/lingo/lingo-gr.y" +#line 523 "engines/director/lingo/lingo-gr.y" { (yyval.narg) = 0; ;} break; case 125: -#line 539 "engines/director/lingo/lingo-gr.y" +#line 524 "engines/director/lingo/lingo-gr.y" { (yyval.narg) = 1; ;} break; case 126: -#line 540 "engines/director/lingo/lingo-gr.y" +#line 525 "engines/director/lingo/lingo-gr.y" { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;} break; /* Line 1267 of yacc.c. */ -#line 2570 "engines/director/lingo/lingo-gr.cpp" +#line 2552 "engines/director/lingo/lingo-gr.cpp" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -2780,6 +2762,6 @@ yyreturn: } -#line 543 "engines/director/lingo/lingo-gr.y" +#line 528 "engines/director/lingo/lingo-gr.y" diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y index 117b3ea50c..84dd5db80d 100644 --- a/engines/director/lingo/lingo-gr.y +++ b/engines/director/lingo/lingo-gr.y @@ -90,7 +90,6 @@ void yyerror(char *s) { %token tSPRITE tINTERSECTS tWITHIN %type<code> asgn begin elseif elsestmtoneliner end expr if repeatwhile repeatwith stmtlist -%type<s> gotoframe gotomovie %type<narg> argdef arglist %right '=' @@ -434,48 +433,34 @@ gotofunc: tGO tLOOP { g_lingo->code1(g_lingo->c_gotoloop); } | tGO tNEXT { g_lingo->code1(g_lingo->c_gotonext); } | tGO tPREVIOUS { g_lingo->code1(g_lingo->c_gotoprevious); } | tGO gotoframe { - g_lingo->code1(g_lingo->c_goto); - g_lingo->codeString($2->c_str()); - g_lingo->codeString(""); - delete $2; } + g_lingo->codeConst(1); + g_lingo->code1(g_lingo->c_goto); } | tGO gotoframe gotomovie { - g_lingo->code1(g_lingo->c_goto); - g_lingo->codeString($2->c_str()); - g_lingo->codeString($3->c_str()); - delete $2; - delete $3; } + g_lingo->codeConst(3); + g_lingo->code1(g_lingo->c_goto); } | tGO gotomovie { - g_lingo->code1(g_lingo->c_goto); - g_lingo->codeString(""); - g_lingo->codeString($2->c_str()); - delete $2; } + g_lingo->codeConst(2); + g_lingo->code1(g_lingo->c_goto); } ; -gotoframe: tFRAME STRING { $$ = $2; } - | STRING { $$ = $1; } +gotoframe: tFRAME expr + | expr ; -gotomovie: tOF tMOVIE STRING { $$ = $3; } - | tMOVIE STRING { $$ = $2; } +gotomovie: tOF tMOVIE expr + | tMOVIE expr ; playfunc: tPLAY tDONE { g_lingo->code1(g_lingo->c_playdone); } | tPLAY gotoframe { - g_lingo->code1(g_lingo->c_play); - g_lingo->codeString($2->c_str()); - g_lingo->codeString(""); - delete $2; } + g_lingo->codeConst(1); + g_lingo->code1(g_lingo->c_play); } | tPLAY gotoframe gotomovie { - g_lingo->code1(g_lingo->c_play); - g_lingo->codeString($2->c_str()); - g_lingo->codeString($3->c_str()); - delete $2; - delete $3; } + g_lingo->codeConst(3); + g_lingo->code1(g_lingo->c_play); } | tPLAY gotomovie { - g_lingo->code1(g_lingo->c_play); - g_lingo->codeString(""); - g_lingo->codeString($2->c_str()); - delete $2; } + g_lingo->codeConst(2); + g_lingo->code1(g_lingo->c_play); } ; // macro |