diff options
author | Eugene Sandulenko | 2016-08-20 11:37:17 +0200 |
---|---|---|
committer | Eugene Sandulenko | 2016-08-20 11:37:17 +0200 |
commit | 1660b859a186bc57155c144756b312fd614113c6 (patch) | |
tree | d7920c9f30bc9e50ef413671aded8bea1aed7a82 /engines | |
parent | ff60ee30ada8657d61ba93f3cfa85323c22e6a64 (diff) | |
download | scummvm-rg350-1660b859a186bc57155c144756b312fd614113c6.tar.gz scummvm-rg350-1660b859a186bc57155c144756b312fd614113c6.tar.bz2 scummvm-rg350-1660b859a186bc57155c144756b312fd614113c6.zip |
DIRECTOR: Lingo: Implemented 'exit repeat' keyword
Diffstat (limited to 'engines')
-rw-r--r-- | engines/director/lingo/lingo-code.cpp | 15 | ||||
-rw-r--r-- | engines/director/lingo/lingo-gr.cpp | 723 | ||||
-rw-r--r-- | engines/director/lingo/lingo-gr.y | 1 | ||||
-rw-r--r-- | engines/director/lingo/lingo.cpp | 2 | ||||
-rw-r--r-- | engines/director/lingo/lingo.h | 3 |
5 files changed, 383 insertions, 361 deletions
diff --git a/engines/director/lingo/lingo-code.cpp b/engines/director/lingo/lingo-code.cpp index 8712f0990c..f9770f5ec4 100644 --- a/engines/director/lingo/lingo-code.cpp +++ b/engines/director/lingo/lingo-code.cpp @@ -91,6 +91,7 @@ static struct FuncDescr { { Lingo::c_le, "c_le", "" }, { Lingo::c_repeatwhilecode,"c_repeatwhilecode","oo" }, { Lingo::c_repeatwithcode,"c_repeatwithcode","ooooos" }, + { Lingo::c_exitRepeat, "c_exitRepeat", "" }, { Lingo::c_ifcode, "c_ifcode", "oooi" }, { Lingo::c_whencode, "c_whencode", "os" }, { Lingo::c_goto, "c_goto", "" }, @@ -644,6 +645,11 @@ void Lingo::c_repeatwhilecode(void) { if (g_lingo->_returning) break; + if (g_lingo->_exitRepeat) { + g_lingo->_exitRepeat = false; + break; + } + g_lingo->execute(savepc + 2); /* condition */ d = g_lingo->pop(); d.toInt(); @@ -680,6 +686,11 @@ void Lingo::c_repeatwithcode(void) { if (g_lingo->_returning) break; + if (g_lingo->_exitRepeat) { + g_lingo->_exitRepeat = false; + break; + } + counter->u.i += inc; g_lingo->execute(finish); /* condition */ d = g_lingo->pop(); @@ -693,6 +704,10 @@ void Lingo::c_repeatwithcode(void) { g_lingo->_pc = end; /* next stmt */ } +void Lingo::c_exitRepeat(void) { + g_lingo->_exitRepeat = true; +} + void Lingo::c_ifcode() { Datum d; int savepc = g_lingo->_pc; /* then part */ diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp index be5b3eb571..4b6abc2b56 100644 --- a/engines/director/lingo/lingo-gr.cpp +++ b/engines/director/lingo/lingo-gr.cpp @@ -486,18 +486,18 @@ union yyalloc #endif /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 88 +#define YYFINAL 89 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 931 +#define YYLAST 910 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 83 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 36 /* YYNRULES -- Number of rules. */ -#define YYNRULES 125 +#define YYNRULES 126 /* YYNRULES -- Number of states. */ -#define YYNSTATES 261 +#define YYNSTATES 262 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -557,11 +557,11 @@ static const yytype_uint16 yyprhs[] = 222, 223, 224, 227, 230, 234, 236, 238, 240, 242, 247, 249, 251, 254, 256, 260, 264, 268, 272, 276, 280, 284, 288, 292, 296, 300, 303, 307, 311, 315, - 319, 322, 325, 329, 334, 339, 342, 344, 346, 348, - 351, 354, 357, 359, 362, 367, 370, 372, 376, 379, - 382, 385, 388, 392, 395, 398, 400, 404, 407, 410, - 413, 417, 420, 421, 430, 433, 434, 443, 444, 446, - 450, 455, 456, 460, 461, 463 + 319, 322, 325, 329, 334, 339, 342, 344, 346, 349, + 351, 354, 357, 360, 362, 365, 370, 373, 375, 379, + 382, 385, 388, 391, 395, 398, 401, 403, 407, 410, + 413, 416, 420, 423, 424, 433, 436, 437, 446, 447, + 449, 453, 458, 459, 463, 464, 466 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ @@ -601,19 +601,19 @@ static const yytype_int8 yyrhs[] = -1, 105, 65, 105, -1, 105, 66, 105, -1, 71, 105, -1, 72, 105, -1, 77, 105, 78, -1, 67, 105, 68, 105, -1, 67, 105, 69, 105, -1, 40, - 105, -1, 108, -1, 111, -1, 28, -1, 30, 107, - -1, 19, 105, -1, 18, 105, -1, 18, -1, 20, - 118, -1, 51, 105, 46, 105, -1, 51, 105, -1, - 21, -1, 107, 82, 21, -1, 31, 34, -1, 31, - 37, -1, 31, 39, -1, 31, 109, -1, 31, 109, - 110, -1, 31, 110, -1, 29, 105, -1, 105, -1, - 38, 36, 105, -1, 36, 105, -1, 52, 53, -1, - 52, 109, -1, 52, 109, 110, -1, 52, 110, -1, - -1, 35, 21, 113, 101, 115, 85, 116, 103, -1, - 49, 21, -1, -1, 50, 21, 114, 101, 115, 85, - 116, 103, -1, -1, 21, -1, 115, 82, 21, -1, - 115, 85, 82, 21, -1, -1, 21, 101, 118, -1, - -1, 105, -1, 118, 82, 105, -1 + 105, -1, 108, -1, 111, -1, 28, 41, -1, 28, + -1, 30, 107, -1, 19, 105, -1, 18, 105, -1, + 18, -1, 20, 118, -1, 51, 105, 46, 105, -1, + 51, 105, -1, 21, -1, 107, 82, 21, -1, 31, + 34, -1, 31, 37, -1, 31, 39, -1, 31, 109, + -1, 31, 109, 110, -1, 31, 110, -1, 29, 105, + -1, 105, -1, 38, 36, 105, -1, 36, 105, -1, + 52, 53, -1, 52, 109, -1, 52, 109, 110, -1, + 52, 110, -1, -1, 35, 21, 113, 101, 115, 85, + 116, 103, -1, 49, 21, -1, -1, 50, 21, 114, + 101, 115, 85, 116, 103, -1, -1, 21, -1, 115, + 82, 21, -1, 115, 85, 82, 21, -1, -1, 21, + 101, 118, -1, -1, 105, -1, 118, 82, 105, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ @@ -627,11 +627,11 @@ static const yytype_uint16 yyrline[] = 340, 342, 343, 344, 347, 353, 354, 357, 360, 364, 367, 371, 378, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 408, 409, 410, 411, 413, - 414, 417, 420, 423, 424, 425, 428, 429, 440, 441, - 442, 443, 446, 449, 454, 455, 458, 459, 462, 463, - 466, 469, 499, 499, 505, 508, 508, 513, 514, 515, - 516, 518, 522, 530, 531, 532 + 401, 402, 403, 404, 405, 408, 409, 410, 411, 412, + 414, 415, 418, 421, 424, 425, 426, 429, 430, 441, + 442, 443, 444, 447, 450, 455, 456, 459, 460, 463, + 464, 467, 470, 500, 500, 506, 509, 509, 514, 515, + 516, 517, 519, 523, 531, 532, 533 }; #endif @@ -690,10 +690,10 @@ static const yytype_uint8 yyr1[] = 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, - 106, 106, 106, 106, 106, 106, 107, 107, 108, 108, - 108, 108, 108, 108, 109, 109, 110, 110, 111, 111, - 111, 111, 113, 112, 112, 114, 112, 115, 115, 115, - 115, 116, 117, 118, 118, 118 + 106, 106, 106, 106, 106, 106, 106, 107, 107, 108, + 108, 108, 108, 108, 108, 109, 109, 110, 110, 111, + 111, 111, 111, 113, 112, 112, 114, 112, 115, 115, + 115, 115, 116, 117, 118, 118, 118 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -707,11 +707,11 @@ static const yytype_uint8 yyr2[] = 0, 0, 2, 2, 3, 1, 1, 1, 1, 4, 1, 1, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, - 2, 2, 3, 4, 4, 2, 1, 1, 1, 2, - 2, 2, 1, 2, 4, 2, 1, 3, 2, 2, - 2, 2, 3, 2, 2, 1, 3, 2, 2, 2, - 3, 2, 0, 8, 2, 0, 8, 0, 1, 3, - 4, 0, 3, 0, 1, 3 + 2, 2, 3, 4, 4, 2, 1, 1, 2, 1, + 2, 2, 2, 1, 2, 4, 2, 1, 3, 2, + 2, 2, 2, 3, 2, 2, 1, 3, 2, 2, + 2, 3, 2, 0, 8, 2, 0, 8, 0, 1, + 3, 4, 0, 3, 0, 1, 3 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -719,85 +719,85 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 0, 0, 55, 61, 0, 56, 58, 92, 0, 123, - 49, 57, 88, 0, 0, 47, 0, 0, 0, 0, + 0, 0, 55, 61, 0, 56, 58, 93, 0, 124, + 49, 57, 89, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 63, 21, 11, 22, 0, 0, 0, 0, 19, 8, 86, 87, 7, 9, 5, 4, 60, 0, - 63, 62, 91, 90, 124, 93, 123, 123, 96, 89, - 0, 98, 0, 99, 0, 100, 105, 101, 103, 112, - 85, 0, 45, 0, 0, 0, 0, 114, 115, 95, - 108, 109, 111, 75, 0, 80, 81, 0, 1, 6, - 0, 0, 0, 0, 42, 50, 0, 0, 0, 0, + 63, 62, 92, 91, 125, 94, 124, 124, 88, 97, + 90, 0, 99, 0, 100, 0, 101, 106, 102, 104, + 113, 85, 0, 45, 0, 0, 0, 0, 115, 116, + 96, 109, 110, 112, 75, 0, 80, 81, 0, 1, + 6, 0, 0, 0, 0, 42, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 122, 0, 104, 107, 0, 102, - 49, 0, 46, 0, 0, 0, 0, 0, 54, 49, - 0, 110, 0, 0, 82, 2, 0, 50, 0, 0, - 49, 0, 26, 71, 72, 70, 73, 74, 77, 78, - 79, 64, 65, 66, 67, 68, 69, 76, 125, 59, - 97, 106, 117, 12, 17, 14, 0, 0, 16, 13, - 117, 94, 83, 84, 51, 0, 44, 51, 0, 43, - 118, 0, 18, 15, 0, 50, 0, 0, 50, 50, - 20, 0, 121, 121, 52, 53, 0, 0, 50, 49, - 30, 119, 0, 51, 51, 0, 50, 51, 0, 51, - 0, 48, 49, 50, 38, 0, 120, 113, 116, 23, - 51, 50, 27, 50, 50, 40, 36, 0, 0, 37, - 33, 0, 50, 0, 0, 35, 0, 0, 50, 49, - 50, 49, 0, 0, 0, 0, 49, 31, 0, 32, - 0, 0, 24, 28, 29, 50, 34, 50, 25, 41, - 39 + 0, 0, 0, 0, 0, 123, 0, 105, 108, 0, + 103, 49, 0, 46, 0, 0, 0, 0, 0, 54, + 49, 0, 111, 0, 0, 82, 2, 0, 50, 0, + 0, 49, 0, 26, 71, 72, 70, 73, 74, 77, + 78, 79, 64, 65, 66, 67, 68, 69, 76, 126, + 59, 98, 107, 118, 12, 17, 14, 0, 0, 16, + 13, 118, 95, 83, 84, 51, 0, 44, 51, 0, + 43, 119, 0, 18, 15, 0, 50, 0, 0, 50, + 50, 20, 0, 122, 122, 52, 53, 0, 0, 50, + 49, 30, 120, 0, 51, 51, 0, 50, 51, 0, + 51, 0, 48, 49, 50, 38, 0, 121, 114, 117, + 23, 51, 50, 27, 50, 50, 40, 36, 0, 0, + 37, 33, 0, 50, 0, 0, 35, 0, 0, 50, + 49, 50, 49, 0, 0, 0, 0, 49, 31, 0, + 32, 0, 0, 24, 28, 29, 50, 34, 50, 25, + 41, 39 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 30, 194, 31, 50, 33, 195, 35, 240, 224, - 225, 214, 226, 93, 36, 37, 38, 215, 250, 142, - 185, 39, 40, 190, 59, 42, 67, 68, 43, 44, - 120, 129, 181, 203, 45, 55 + -1, 30, 195, 31, 50, 33, 196, 35, 241, 225, + 226, 215, 227, 94, 36, 37, 38, 216, 251, 143, + 186, 39, 40, 191, 60, 42, 68, 69, 43, 44, + 121, 130, 182, 204, 45, 55 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -195 +#define YYPACT_NINF -197 static const yytype_int16 yypact[] = { - 254, -59, -195, -195, 364, -195, -195, 364, 364, 364, - 801, -195, -195, 14, 552, -195, 23, 364, 10, 6, - 30, 32, 39, 364, 592, 364, 364, 364, 364, 364, - 4, -195, 5, -195, -195, -195, -51, 1, 491, 364, - 779, -195, -195, -195, -195, -195, -195, -195, -5, 364, - -195, 779, 779, 779, 779, -8, 364, 364, -195, -3, - 364, -195, 364, -195, 37, -195, 779, 12, -195, -195, - 606, 61, -195, -31, 364, -30, 40, -195, -195, 659, - -195, 12, -195, 850, 681, 850, 850, 730, -195, 320, - 491, 364, 491, 41, 757, 779, 364, 364, 364, 364, - 364, 364, 364, 364, 364, 364, 364, 364, 364, 364, - 364, 606, 364, -57, -8, 64, 779, 779, 364, -195, - -195, 65, -195, 364, 364, 637, 364, 364, -195, -195, - 364, -195, 364, 364, -195, -195, 15, 779, 18, 703, - -59, 364, -195, 779, 779, 779, 779, 779, 779, 779, - 779, 828, 828, 850, 850, 779, 779, 779, 779, -195, - -195, 779, 67, -195, 779, 779, 364, 364, 779, 779, - 67, 779, 779, 779, -195, -1, -195, -195, 508, 779, - -195, -58, 779, 779, -58, 381, 46, 364, 381, -195, - -195, 76, 17, 17, -195, -195, 74, 364, 779, -20, - -11, -195, 81, -195, -195, 62, 779, -195, 72, -195, - 79, -195, -195, 79, -195, 491, -195, 381, 381, -195, - -195, 381, -195, 381, 79, 79, -195, 491, 508, -195, - 58, 66, 381, 80, 83, -195, 86, 71, -195, -195, - -195, -195, 88, 75, 85, 87, -17, -195, 508, -195, - 447, 77, -195, -195, -195, 381, -195, -195, -195, -195, - -195 + 255, -59, -197, -197, 365, -197, -197, 365, 365, 365, + 802, -197, -7, 19, 553, -197, 27, 365, 22, 84, + 51, 58, 61, 365, 593, 365, 365, 365, 365, 365, + 4, -197, 5, -197, -197, -197, -51, -27, 492, 365, + 780, -197, -197, -197, -197, -197, -197, -197, 9, 365, + -197, 780, 780, 780, 780, 6, 365, 365, -197, -197, + 18, 365, -197, 365, -197, 53, -197, 780, 37, -197, + -197, 607, 70, -197, -35, 365, -34, 59, -197, -197, + 660, -197, 37, -197, -42, 682, -42, -42, 731, -197, + 321, 492, 365, 492, 60, 758, 780, 365, 365, 365, + 365, 365, 365, 365, 365, 365, 365, 365, 365, 365, + 365, 365, 607, 365, -57, 6, 83, 780, 780, 365, + -197, -197, 85, -197, 365, 365, 638, 365, 365, -197, + -197, 365, -197, 365, 365, -197, -197, 29, 780, 30, + 704, -59, 365, -197, 780, 780, 780, 780, 780, 780, + 780, 780, 829, 829, -42, -42, 780, 780, 780, 780, + -197, -197, 780, 88, -197, 780, 780, 365, 365, 780, + 780, 88, 780, 780, 780, -197, 7, -197, -197, 509, + 780, -197, -32, 780, 780, -32, 382, 66, 365, 382, + -197, -197, 90, 32, 32, -197, -197, 89, 365, 780, + 1, -15, -197, 94, -197, -197, 76, 780, -197, 86, + -197, 93, -197, -197, 93, -197, 492, -197, 382, 382, + -197, -197, 382, -197, 382, 93, 93, -197, 492, 509, + -197, 72, 79, 382, 96, 97, -197, 98, 91, -197, + -197, -197, -197, 100, 87, 101, 118, -20, -197, 509, + -197, 448, 112, -197, -197, -197, 382, -197, -197, -197, + -197, -197 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -195, -195, 11, 19, 2, -170, 0, -195, -195, -195, - -79, -191, -102, -61, -195, -195, -195, -194, -9, -12, - -171, -195, 38, 3, -195, -195, 99, -13, -195, -195, - -195, -195, -46, -67, -195, 13 + -197, -197, 11, 64, 2, -171, 0, -197, -197, -197, + -45, -143, -67, -61, -197, -197, -197, -196, -9, -12, + -151, -197, 38, 3, -197, -197, 135, -8, -197, -197, + -197, -197, -11, -33, -197, 28 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -807,198 +807,194 @@ static const yytype_int16 yypgoto[] = #define YYTABLE_NINF -61 static const yytype_int16 yytable[] = { - 34, 57, 32, 41, 88, -10, 188, 208, 189, -51, - -51, 82, 47, 123, 126, 211, 227, 46, 46, 73, - 74, 159, 229, 186, 191, 112, 90, 75, 209, 136, - 227, 138, 217, 218, 229, 58, 221, 212, 223, 124, - 127, 89, 51, 187, 69, 52, 53, 54, 62, 232, - 64, 76, 66, 77, 119, 70, 71, 72, 238, -51, - 78, 79, 66, 83, 84, 85, 86, 87, 131, 113, - 114, 91, 56, 118, 112, 255, 94, 95, 256, 115, - 46, -10, 122, 128, 140, 160, 163, 111, 180, 34, - 197, 32, 41, 174, 54, 54, 176, 201, 116, 202, - 117, 205, 216, 219, 222, 211, 239, 243, 135, 241, - 244, 162, 125, 245, 246, 251, 252, 253, 258, 254, - 170, 213, 235, 81, 184, 175, 204, 0, 94, 137, - 139, 178, 0, 0, 143, 144, 145, 146, 147, 148, - 149, 150, 151, 152, 153, 154, 155, 156, 157, 0, - 158, 177, 0, 0, 231, 0, 161, 0, 0, 0, - 0, 164, 165, 0, 168, 169, 237, 0, 171, 0, - 172, 173, 0, 196, 0, 0, 199, 200, 0, 179, - 0, 0, 0, 0, 0, 0, 207, 0, 0, 0, - 210, 0, 192, 0, 220, 193, 0, 0, 0, 0, - 0, 230, 0, 228, 182, 183, 0, 0, 0, 233, - 0, 234, 236, 0, 0, 0, 0, 0, 0, 0, - 242, 0, 0, 0, 0, 198, 247, 0, 249, 0, - 248, 0, 0, 0, 0, 206, 0, 0, 0, 0, - 0, 0, 0, 259, 0, 260, 0, 0, 0, 0, - 257, 0, 0, 94, -6, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 94, 2, 3, 4, 5, - 0, 6, 7, 8, 9, 10, 11, 0, 0, 0, - 0, 0, 12, 0, 13, 14, 15, 0, 0, 16, - 0, 0, 0, 0, 17, 18, 19, 0, 0, 20, - 0, 0, 0, 21, 22, 23, 24, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, - 0, 26, 0, 0, 0, 27, 28, 0, 0, 0, - -6, 29, 2, 3, 4, 5, 0, 6, 7, 8, - 9, 10, 11, 0, 0, 0, 0, 0, 12, 0, - 13, 14, 15, 0, 0, 16, 0, 0, 0, 0, - 17, 18, 19, 0, 0, 20, 0, 0, 0, 21, - 22, 23, 24, 0, 0, 0, 2, 3, 4, 5, - 0, 6, 0, 25, 0, 48, 11, 26, 0, 0, - 0, 27, 28, 2, 3, 4, 5, 29, 6, 7, - 8, 9, 48, 11, 49, 0, 19, 0, 0, 12, - 0, 13, 14, 15, 0, 0, 0, 0, 0, 0, - 0, 17, 18, 19, 0, 0, 20, 25, 0, 0, - 0, 26, 23, 24, 0, 27, 28, 0, 0, 0, - 0, 29, 0, 0, 25, 0, 0, 0, 26, 0, - 0, 0, 27, 28, 0, 0, 0, 46, 29, 2, - 3, 4, 5, 0, 6, 7, 8, 9, 48, 11, - 0, 0, 0, 0, 0, 12, 0, 13, 14, 15, - 0, 0, 0, 0, 0, 0, 0, 17, 18, 19, - 0, 0, 20, 0, 0, 0, 0, 0, 23, 24, - 0, 0, 0, 2, 3, 4, 5, 0, 6, 0, - 25, 0, 48, 11, 26, 0, 0, 0, 27, 28, - 2, 3, 4, 5, 29, 6, 7, 8, 9, 48, - 11, 49, 0, 19, 0, 0, 12, 0, 13, 14, - 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, - 19, 0, 0, 0, 25, 0, 0, 0, 26, 23, - 24, 0, 27, 28, 2, 3, 4, 5, 92, 6, + 34, 57, 32, 41, 89, -10, -51, -51, 190, 124, + 127, 212, 47, 97, 98, 228, 83, 46, 99, 100, + 101, 160, 102, 103, 104, 113, 91, 189, 209, 228, + 137, 187, 139, 213, 58, 125, 128, 109, 110, 111, + 59, 90, 51, 92, 46, 52, 53, 54, 70, 210, + 192, 188, 67, 218, 219, 71, -51, 222, 239, 224, + 120, 80, 67, 84, 85, 86, 87, 88, 72, 73, + 233, 230, 77, 63, 132, 65, 95, 96, 257, 78, + 46, -10, 79, 230, 114, 115, 56, 112, 113, 119, + 34, 123, 32, 41, 54, 54, 256, 74, 75, 117, + 116, 118, 129, 141, 161, 76, 164, 175, 177, 181, + 198, 202, 163, 126, 203, 217, 206, 220, 223, 212, + 240, 171, 242, 244, 245, 246, 176, 252, 253, 95, + 138, 140, 179, 254, 247, 144, 145, 146, 147, 148, + 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, + 255, 159, 178, 259, 136, 232, 214, 162, 236, 82, + 185, 205, 165, 166, 0, 169, 170, 238, 0, 172, + 0, 173, 174, 0, 197, 0, 0, 200, 201, 0, + 180, 0, 0, 0, 0, 0, 0, 208, 0, 0, + 0, 211, 0, 193, 0, 221, 194, 0, 0, 0, + 0, 0, 231, 0, 229, 183, 184, 0, 0, 0, + 234, 0, 235, 237, 0, 0, 0, 0, 0, 0, + 0, 243, 0, 0, 0, 0, 199, 248, 0, 250, + 0, 249, 0, 0, 0, 0, 207, 0, 0, 0, + 0, 0, 0, 0, 260, 0, 261, 0, 0, 0, + 0, 258, 0, 0, 95, -6, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 95, 2, 3, 4, + 5, 0, 6, 7, 8, 9, 10, 11, 0, 0, + 0, 0, 0, 12, 0, 13, 14, 15, 0, 0, + 16, 0, 0, 0, 0, 17, 18, 19, 0, 0, + 20, 0, 0, 0, 21, 22, 23, 24, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, + 0, 0, 26, 0, 0, 0, 27, 28, 0, 0, + 0, -6, 29, 2, 3, 4, 5, 0, 6, 7, + 8, 9, 10, 11, 0, 0, 0, 0, 0, 12, + 0, 13, 14, 15, 0, 0, 16, 0, 0, 0, + 0, 17, 18, 19, 0, 0, 20, 0, 0, 0, + 21, 22, 23, 24, 0, 0, 0, 2, 3, 4, + 5, 0, 6, 0, 25, 0, 48, 11, 26, 0, + 0, 0, 27, 28, 2, 3, 4, 5, 29, 6, + 7, 8, 9, 48, 11, 49, 0, 19, 0, 0, + 12, 0, 13, 14, 15, 0, 0, 0, 0, 0, + 0, 0, 17, 18, 19, 0, 0, 20, 25, 0, + 0, 0, 26, 23, 24, 0, 27, 28, 0, 0, + 0, 0, 29, 0, 0, 25, 0, 0, 0, 26, + 0, 0, 0, 27, 28, 0, 0, 0, 46, 29, + 2, 3, 4, 5, 0, 6, 7, 8, 9, 48, + 11, 0, 0, 0, 0, 0, 12, 0, 13, 14, + 15, 0, 0, 0, 0, 0, 0, 0, 17, 18, + 19, 0, 0, 20, 0, 0, 0, 0, 0, 23, + 24, 0, 0, 0, 2, 3, 4, 5, 0, 6, 0, 25, 0, 48, 11, 26, 0, 0, 0, 27, - 28, 60, 0, 0, 0, 29, 61, 0, 62, 63, - 64, 65, 49, 0, 19, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 3, 4, 5, 0, 6, - 0, 0, 0, 48, 11, 25, 0, 0, 0, 26, - 0, 60, 0, 27, 28, 0, 0, 0, 62, 29, - 64, 0, 49, 0, 19, 0, 0, 0, 0, 121, - 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 25, 0, 0, 0, 26, - 0, 96, 97, 27, 28, 0, 98, 99, 100, 29, - 101, 102, 103, 0, 0, 0, 0, 104, 105, 106, - 107, 166, 0, 0, 0, 108, 109, 110, 0, 0, - 0, 0, 96, 97, 0, 0, 0, 98, 99, 100, - 0, 101, 102, 103, 0, 130, 0, 167, 104, 105, - 106, 107, 0, 0, 96, 97, 108, 109, 110, 98, - 99, 100, 0, 101, 102, 103, 0, 0, 0, 0, - 104, 105, 106, 107, 0, 0, 96, 97, 108, 109, - 110, 98, 99, 100, 0, 101, 102, 103, 0, 132, - 133, 0, 104, 105, 106, 107, 0, 0, 96, 97, - 108, 109, 110, 98, 99, 100, 0, 101, 102, 103, - 0, 0, 0, 141, 104, 105, 106, 107, 0, 0, - 0, 134, 108, 109, 110, 96, 97, 0, 0, 0, - 98, 99, 100, 0, 101, 102, 103, 0, 0, 0, - 0, 104, 105, 106, 107, 0, 0, 0, 134, 108, - 109, 110, 96, 97, 0, 0, 0, 98, 99, 100, - 0, 101, 102, 103, 0, 0, 0, 141, 104, 105, - 106, 107, 0, 0, 96, 97, 108, 109, 110, 98, - 99, 100, 0, 101, 102, 103, 0, 0, 0, 0, - 104, 105, 106, 107, 0, 0, -60, -60, 108, 109, - 110, -60, -60, -60, 0, -60, -60, -60, 0, 0, - 0, 0, 0, 0, -60, -60, 0, 0, 56, 0, - -60, -60, -60, 96, 97, 0, 0, 0, 98, 99, - 100, 0, 101, 102, 103, 0, 0, 0, 0, 0, - 0, 106, 107, 0, 0, 96, 97, 108, 109, 110, - 98, 99, 100, 0, 101, 102, 103, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, - 109, 110 + 28, 2, 3, 4, 5, 29, 6, 7, 8, 9, + 48, 11, 49, 0, 19, 0, 0, 12, 0, 13, + 14, 0, 0, 0, 0, 0, 0, 0, 0, 17, + 0, 19, 0, 0, 0, 25, 0, 0, 0, 26, + 23, 24, 0, 27, 28, 2, 3, 4, 5, 93, + 6, 0, 25, 0, 48, 11, 26, 0, 0, 0, + 27, 28, 61, 0, 0, 0, 29, 62, 0, 63, + 64, 65, 66, 49, 0, 19, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 3, 4, 5, 0, + 6, 0, 0, 0, 48, 11, 25, 0, 0, 0, + 26, 0, 61, 0, 27, 28, 0, 0, 0, 63, + 29, 65, 0, 49, 0, 19, 0, 0, 0, 0, + 122, 0, 0, 0, 0, 0, 81, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, + 26, 0, 97, 98, 27, 28, 0, 99, 100, 101, + 29, 102, 103, 104, 0, 0, 0, 0, 105, 106, + 107, 108, 167, 0, 0, 0, 109, 110, 111, 0, + 0, 0, 0, 97, 98, 0, 0, 0, 99, 100, + 101, 0, 102, 103, 104, 0, 131, 0, 168, 105, + 106, 107, 108, 0, 0, 97, 98, 109, 110, 111, + 99, 100, 101, 0, 102, 103, 104, 0, 0, 0, + 0, 105, 106, 107, 108, 0, 0, 97, 98, 109, + 110, 111, 99, 100, 101, 0, 102, 103, 104, 0, + 133, 134, 0, 105, 106, 107, 108, 0, 0, 97, + 98, 109, 110, 111, 99, 100, 101, 0, 102, 103, + 104, 0, 0, 0, 142, 105, 106, 107, 108, 0, + 0, 0, 135, 109, 110, 111, 97, 98, 0, 0, + 0, 99, 100, 101, 0, 102, 103, 104, 0, 0, + 0, 0, 105, 106, 107, 108, 0, 0, 0, 135, + 109, 110, 111, 97, 98, 0, 0, 0, 99, 100, + 101, 0, 102, 103, 104, 0, 0, 0, 142, 105, + 106, 107, 108, 0, 0, 97, 98, 109, 110, 111, + 99, 100, 101, 0, 102, 103, 104, 0, 0, 0, + 0, 105, 106, 107, 108, 0, 0, -60, -60, 109, + 110, 111, -60, -60, -60, 0, -60, -60, -60, 0, + 0, 0, 0, 0, 0, -60, -60, 0, 0, 56, + 0, -60, -60, -60, 97, 98, 0, 0, 0, 99, + 100, 101, 0, 102, 103, 104, 0, 0, 0, 0, + 0, 0, 107, 108, 0, 0, 0, 0, 109, 110, + 111 }; static const yytype_int16 yycheck[] = { - 0, 10, 0, 0, 0, 0, 177, 27, 178, 26, - 27, 24, 1, 44, 44, 26, 210, 76, 76, 13, - 14, 78, 213, 24, 82, 82, 77, 21, 48, 90, - 224, 92, 203, 204, 225, 21, 207, 48, 209, 70, - 70, 30, 4, 44, 21, 7, 8, 9, 36, 220, - 38, 21, 14, 21, 67, 17, 46, 47, 228, 76, - 21, 23, 24, 25, 26, 27, 28, 29, 81, 56, - 57, 70, 77, 36, 82, 246, 38, 39, 248, 82, - 76, 76, 21, 43, 43, 21, 21, 49, 21, 89, - 44, 89, 89, 78, 56, 57, 78, 21, 60, 82, - 62, 27, 21, 41, 32, 26, 48, 27, 89, 43, - 27, 120, 74, 27, 43, 27, 41, 32, 41, 32, - 129, 200, 224, 24, 170, 137, 193, -1, 90, 91, - 92, 140, -1, -1, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, -1, - 112, 140, -1, -1, 215, -1, 118, -1, -1, -1, - -1, 123, 124, -1, 126, 127, 227, -1, 130, -1, - 132, 133, -1, 185, -1, -1, 188, 189, -1, 141, - -1, -1, -1, -1, -1, -1, 198, -1, -1, -1, - 199, -1, 181, -1, 206, 184, -1, -1, -1, -1, - -1, 213, -1, 212, 166, 167, -1, -1, -1, 221, - -1, 223, 224, -1, -1, -1, -1, -1, -1, -1, - 232, -1, -1, -1, -1, 187, 238, -1, 240, -1, - 239, -1, -1, -1, -1, 197, -1, -1, -1, -1, - -1, -1, -1, 255, -1, 257, -1, -1, -1, -1, - 250, -1, -1, 215, 0, 1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 227, 12, 13, 14, 15, - -1, 17, 18, 19, 20, 21, 22, -1, -1, -1, - -1, -1, 28, -1, 30, 31, 32, -1, -1, 35, - -1, -1, -1, -1, 40, 41, 42, -1, -1, 45, - -1, -1, -1, 49, 50, 51, 52, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 63, -1, -1, - -1, 67, -1, -1, -1, 71, 72, -1, -1, -1, - 76, 77, 12, 13, 14, 15, -1, 17, 18, 19, - 20, 21, 22, -1, -1, -1, -1, -1, 28, -1, - 30, 31, 32, -1, -1, 35, -1, -1, -1, -1, - 40, 41, 42, -1, -1, 45, -1, -1, -1, 49, - 50, 51, 52, -1, -1, -1, 12, 13, 14, 15, - -1, 17, -1, 63, -1, 21, 22, 67, -1, -1, - -1, 71, 72, 12, 13, 14, 15, 77, 17, 18, - 19, 20, 21, 22, 40, -1, 42, -1, -1, 28, - -1, 30, 31, 32, -1, -1, -1, -1, -1, -1, - -1, 40, 41, 42, -1, -1, 45, 63, -1, -1, - -1, 67, 51, 52, -1, 71, 72, -1, -1, -1, - -1, 77, -1, -1, 63, -1, -1, -1, 67, -1, - -1, -1, 71, 72, -1, -1, -1, 76, 77, 12, - 13, 14, 15, -1, 17, 18, 19, 20, 21, 22, - -1, -1, -1, -1, -1, 28, -1, 30, 31, 32, - -1, -1, -1, -1, -1, -1, -1, 40, 41, 42, - -1, -1, 45, -1, -1, -1, -1, -1, 51, 52, - -1, -1, -1, 12, 13, 14, 15, -1, 17, -1, - 63, -1, 21, 22, 67, -1, -1, -1, 71, 72, - 12, 13, 14, 15, 77, 17, 18, 19, 20, 21, - 22, 40, -1, 42, -1, -1, 28, -1, 30, 31, - -1, -1, -1, -1, -1, -1, -1, -1, 40, -1, - 42, -1, -1, -1, 63, -1, -1, -1, 67, 51, - 52, -1, 71, 72, 12, 13, 14, 15, 77, 17, + 0, 10, 0, 0, 0, 0, 26, 27, 179, 44, + 44, 26, 1, 55, 56, 211, 24, 76, 60, 61, + 62, 78, 64, 65, 66, 82, 77, 178, 27, 225, + 91, 24, 93, 48, 41, 70, 70, 79, 80, 81, + 21, 30, 4, 70, 76, 7, 8, 9, 21, 48, + 82, 44, 14, 204, 205, 17, 76, 208, 229, 210, + 68, 23, 24, 25, 26, 27, 28, 29, 46, 47, + 221, 214, 21, 36, 82, 38, 38, 39, 249, 21, + 76, 76, 21, 226, 56, 57, 77, 49, 82, 36, + 90, 21, 90, 90, 56, 57, 247, 13, 14, 61, + 82, 63, 43, 43, 21, 21, 21, 78, 78, 21, + 44, 21, 121, 75, 82, 21, 27, 41, 32, 26, + 48, 130, 43, 27, 27, 27, 138, 27, 41, 91, + 92, 93, 141, 32, 43, 97, 98, 99, 100, 101, + 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, + 32, 113, 141, 41, 90, 216, 201, 119, 225, 24, + 171, 194, 124, 125, -1, 127, 128, 228, -1, 131, + -1, 133, 134, -1, 186, -1, -1, 189, 190, -1, + 142, -1, -1, -1, -1, -1, -1, 199, -1, -1, + -1, 200, -1, 182, -1, 207, 185, -1, -1, -1, + -1, -1, 214, -1, 213, 167, 168, -1, -1, -1, + 222, -1, 224, 225, -1, -1, -1, -1, -1, -1, + -1, 233, -1, -1, -1, -1, 188, 239, -1, 241, + -1, 240, -1, -1, -1, -1, 198, -1, -1, -1, + -1, -1, -1, -1, 256, -1, 258, -1, -1, -1, + -1, 251, -1, -1, 216, 0, 1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 228, 12, 13, 14, + 15, -1, 17, 18, 19, 20, 21, 22, -1, -1, + -1, -1, -1, 28, -1, 30, 31, 32, -1, -1, + 35, -1, -1, -1, -1, 40, 41, 42, -1, -1, + 45, -1, -1, -1, 49, 50, 51, 52, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 63, -1, + -1, -1, 67, -1, -1, -1, 71, 72, -1, -1, + -1, 76, 77, 12, 13, 14, 15, -1, 17, 18, + 19, 20, 21, 22, -1, -1, -1, -1, -1, 28, + -1, 30, 31, 32, -1, -1, 35, -1, -1, -1, + -1, 40, 41, 42, -1, -1, 45, -1, -1, -1, + 49, 50, 51, 52, -1, -1, -1, 12, 13, 14, + 15, -1, 17, -1, 63, -1, 21, 22, 67, -1, + -1, -1, 71, 72, 12, 13, 14, 15, 77, 17, + 18, 19, 20, 21, 22, 40, -1, 42, -1, -1, + 28, -1, 30, 31, 32, -1, -1, -1, -1, -1, + -1, -1, 40, 41, 42, -1, -1, 45, 63, -1, + -1, -1, 67, 51, 52, -1, 71, 72, -1, -1, + -1, -1, 77, -1, -1, 63, -1, -1, -1, 67, + -1, -1, -1, 71, 72, -1, -1, -1, 76, 77, + 12, 13, 14, 15, -1, 17, 18, 19, 20, 21, + 22, -1, -1, -1, -1, -1, 28, -1, 30, 31, + 32, -1, -1, -1, -1, -1, -1, -1, 40, 41, + 42, -1, -1, 45, -1, -1, -1, -1, -1, 51, + 52, -1, -1, -1, 12, 13, 14, 15, -1, 17, -1, 63, -1, 21, 22, 67, -1, -1, -1, 71, - 72, 29, -1, -1, -1, 77, 34, -1, 36, 37, - 38, 39, 40, -1, 42, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 12, 13, 14, 15, -1, 17, - -1, -1, -1, 21, 22, 63, -1, -1, -1, 67, - -1, 29, -1, 71, 72, -1, -1, -1, 36, 77, - 38, -1, 40, -1, 42, -1, -1, -1, -1, 33, - -1, -1, -1, -1, -1, 53, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 63, -1, -1, -1, 67, - -1, 55, 56, 71, 72, -1, 60, 61, 62, 77, - 64, 65, 66, -1, -1, -1, -1, 71, 72, 73, - 74, 44, -1, -1, -1, 79, 80, 81, -1, -1, - -1, -1, 55, 56, -1, -1, -1, 60, 61, 62, - -1, 64, 65, 66, -1, 46, -1, 70, 71, 72, - 73, 74, -1, -1, 55, 56, 79, 80, 81, 60, - 61, 62, -1, 64, 65, 66, -1, -1, -1, -1, - 71, 72, 73, 74, -1, -1, 55, 56, 79, 80, - 81, 60, 61, 62, -1, 64, 65, 66, -1, 68, - 69, -1, 71, 72, 73, 74, -1, -1, 55, 56, - 79, 80, 81, 60, 61, 62, -1, 64, 65, 66, - -1, -1, -1, 70, 71, 72, 73, 74, -1, -1, - -1, 78, 79, 80, 81, 55, 56, -1, -1, -1, + 72, 12, 13, 14, 15, 77, 17, 18, 19, 20, + 21, 22, 40, -1, 42, -1, -1, 28, -1, 30, + 31, -1, -1, -1, -1, -1, -1, -1, -1, 40, + -1, 42, -1, -1, -1, 63, -1, -1, -1, 67, + 51, 52, -1, 71, 72, 12, 13, 14, 15, 77, + 17, -1, 63, -1, 21, 22, 67, -1, -1, -1, + 71, 72, 29, -1, -1, -1, 77, 34, -1, 36, + 37, 38, 39, 40, -1, 42, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 12, 13, 14, 15, -1, + 17, -1, -1, -1, 21, 22, 63, -1, -1, -1, + 67, -1, 29, -1, 71, 72, -1, -1, -1, 36, + 77, 38, -1, 40, -1, 42, -1, -1, -1, -1, + 33, -1, -1, -1, -1, -1, 53, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 63, -1, -1, -1, + 67, -1, 55, 56, 71, 72, -1, 60, 61, 62, + 77, 64, 65, 66, -1, -1, -1, -1, 71, 72, + 73, 74, 44, -1, -1, -1, 79, 80, 81, -1, + -1, -1, -1, 55, 56, -1, -1, -1, 60, 61, + 62, -1, 64, 65, 66, -1, 46, -1, 70, 71, + 72, 73, 74, -1, -1, 55, 56, 79, 80, 81, 60, 61, 62, -1, 64, 65, 66, -1, -1, -1, - -1, 71, 72, 73, 74, -1, -1, -1, 78, 79, - 80, 81, 55, 56, -1, -1, -1, 60, 61, 62, - -1, 64, 65, 66, -1, -1, -1, 70, 71, 72, - 73, 74, -1, -1, 55, 56, 79, 80, 81, 60, - 61, 62, -1, 64, 65, 66, -1, -1, -1, -1, - 71, 72, 73, 74, -1, -1, 55, 56, 79, 80, - 81, 60, 61, 62, -1, 64, 65, 66, -1, -1, - -1, -1, -1, -1, 73, 74, -1, -1, 77, -1, + -1, 71, 72, 73, 74, -1, -1, 55, 56, 79, + 80, 81, 60, 61, 62, -1, 64, 65, 66, -1, + 68, 69, -1, 71, 72, 73, 74, -1, -1, 55, + 56, 79, 80, 81, 60, 61, 62, -1, 64, 65, + 66, -1, -1, -1, 70, 71, 72, 73, 74, -1, + -1, -1, 78, 79, 80, 81, 55, 56, -1, -1, + -1, 60, 61, 62, -1, 64, 65, 66, -1, -1, + -1, -1, 71, 72, 73, 74, -1, -1, -1, 78, 79, 80, 81, 55, 56, -1, -1, -1, 60, 61, - 62, -1, 64, 65, 66, -1, -1, -1, -1, -1, - -1, 73, 74, -1, -1, 55, 56, 79, 80, 81, + 62, -1, 64, 65, 66, -1, -1, -1, 70, 71, + 72, 73, 74, -1, -1, 55, 56, 79, 80, 81, 60, 61, 62, -1, 64, 65, 66, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 79, - 80, 81 + -1, 71, 72, 73, 74, -1, -1, 55, 56, 79, + 80, 81, 60, 61, 62, -1, 64, 65, 66, -1, + -1, -1, -1, -1, -1, 73, 74, -1, -1, 77, + -1, 79, 80, 81, 55, 56, -1, -1, -1, 60, + 61, 62, -1, 64, 65, 66, -1, -1, -1, -1, + -1, -1, 73, 74, -1, -1, -1, -1, 79, 80, + 81 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -1010,28 +1006,28 @@ static const yytype_uint8 yystos[] = 45, 49, 50, 51, 52, 63, 67, 71, 72, 77, 84, 86, 87, 88, 89, 90, 97, 98, 99, 104, 105, 106, 108, 111, 112, 117, 76, 85, 21, 40, - 87, 105, 105, 105, 105, 118, 77, 101, 21, 107, - 29, 34, 36, 37, 38, 39, 105, 109, 110, 21, - 105, 46, 47, 13, 14, 21, 21, 21, 21, 105, - 53, 109, 110, 105, 105, 105, 105, 105, 0, 85, - 77, 70, 77, 96, 105, 105, 55, 56, 60, 61, - 62, 64, 65, 66, 71, 72, 73, 74, 79, 80, - 81, 105, 82, 118, 118, 82, 105, 105, 36, 110, - 113, 33, 21, 44, 70, 105, 44, 70, 43, 114, - 46, 110, 68, 69, 78, 86, 96, 105, 96, 105, - 43, 70, 102, 105, 105, 105, 105, 105, 105, 105, - 105, 105, 105, 105, 105, 105, 105, 105, 105, 78, - 21, 105, 101, 21, 105, 105, 44, 70, 105, 105, - 101, 105, 105, 105, 78, 102, 78, 85, 101, 105, - 21, 115, 105, 105, 115, 103, 24, 44, 103, 88, - 106, 82, 85, 85, 85, 89, 102, 44, 105, 102, - 102, 21, 82, 116, 116, 27, 105, 102, 27, 48, - 101, 26, 48, 93, 94, 100, 21, 103, 103, 41, - 102, 103, 32, 103, 92, 93, 95, 100, 101, 94, - 102, 96, 103, 102, 102, 95, 102, 96, 88, 48, - 91, 43, 102, 27, 27, 27, 43, 102, 101, 102, - 101, 27, 41, 32, 32, 103, 88, 89, 41, 102, - 102 + 87, 105, 105, 105, 105, 118, 77, 101, 41, 21, + 107, 29, 34, 36, 37, 38, 39, 105, 109, 110, + 21, 105, 46, 47, 13, 14, 21, 21, 21, 21, + 105, 53, 109, 110, 105, 105, 105, 105, 105, 0, + 85, 77, 70, 77, 96, 105, 105, 55, 56, 60, + 61, 62, 64, 65, 66, 71, 72, 73, 74, 79, + 80, 81, 105, 82, 118, 118, 82, 105, 105, 36, + 110, 113, 33, 21, 44, 70, 105, 44, 70, 43, + 114, 46, 110, 68, 69, 78, 86, 96, 105, 96, + 105, 43, 70, 102, 105, 105, 105, 105, 105, 105, + 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, + 78, 21, 105, 101, 21, 105, 105, 44, 70, 105, + 105, 101, 105, 105, 105, 78, 102, 78, 85, 101, + 105, 21, 115, 105, 105, 115, 103, 24, 44, 103, + 88, 106, 82, 85, 85, 85, 89, 102, 44, 105, + 102, 102, 21, 82, 116, 116, 27, 105, 102, 27, + 48, 101, 26, 48, 93, 94, 100, 21, 103, 103, + 41, 102, 103, 32, 103, 92, 93, 95, 100, 101, + 94, 102, 96, 103, 102, 102, 95, 102, 96, 88, + 48, 91, 43, 102, 27, 27, 27, 43, 102, 101, + 102, 101, 27, 41, 32, 32, 103, 88, 89, 41, + 102, 102 }; #define yyerrok (yyerrstatus = 0) @@ -2349,125 +2345,130 @@ yyreduce: case 88: #line 411 "engines/director/lingo/lingo-gr.y" + { g_lingo->code1(g_lingo->c_exitRepeat); ;} + break; + + case 89: +#line 412 "engines/director/lingo/lingo-gr.y" { g_lingo->codeConst(0); // Push fake value on stack g_lingo->code1(g_lingo->c_procret); ;} break; - case 90: -#line 414 "engines/director/lingo/lingo-gr.y" + case 91: +#line 415 "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 91: -#line 417 "engines/director/lingo/lingo-gr.y" + case 92: +#line 418 "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 420 "engines/director/lingo/lingo-gr.y" + case 93: +#line 421 "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 93: -#line 423 "engines/director/lingo/lingo-gr.y" - { g_lingo->codeFunc((yyvsp[(1) - (2)].s), (yyvsp[(2) - (2)].narg)); ;} - break; - case 94: #line 424 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_open); ;} + { g_lingo->codeFunc((yyvsp[(1) - (2)].s), (yyvsp[(2) - (2)].narg)); ;} break; case 95: #line 425 "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 96: -#line 428 "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 426 "engines/director/lingo/lingo-gr.y" + { g_lingo->code2(g_lingo->c_voidpush, g_lingo->c_open); ;} break; case 97: #line 429 "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 98: -#line 440 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_gotoloop); ;} +#line 430 "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 441 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_gotonext); ;} + { g_lingo->code1(g_lingo->c_gotoloop); ;} break; case 100: #line 442 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_gotoprevious); ;} + { g_lingo->code1(g_lingo->c_gotonext); ;} break; case 101: #line 443 "engines/director/lingo/lingo-gr.y" + { g_lingo->code1(g_lingo->c_gotoprevious); ;} + break; + + case 102: +#line 444 "engines/director/lingo/lingo-gr.y" { g_lingo->codeConst(1); g_lingo->code1(g_lingo->c_goto); ;} break; - case 102: -#line 446 "engines/director/lingo/lingo-gr.y" + case 103: +#line 447 "engines/director/lingo/lingo-gr.y" { g_lingo->codeConst(3); g_lingo->code1(g_lingo->c_goto); ;} break; - case 103: -#line 449 "engines/director/lingo/lingo-gr.y" + case 104: +#line 450 "engines/director/lingo/lingo-gr.y" { g_lingo->codeConst(2); g_lingo->code1(g_lingo->c_goto); ;} break; - case 108: -#line 462 "engines/director/lingo/lingo-gr.y" + case 109: +#line 463 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_playdone); ;} break; - case 109: -#line 463 "engines/director/lingo/lingo-gr.y" + case 110: +#line 464 "engines/director/lingo/lingo-gr.y" { g_lingo->codeConst(1); g_lingo->code1(g_lingo->c_play); ;} break; - case 110: -#line 466 "engines/director/lingo/lingo-gr.y" + case 111: +#line 467 "engines/director/lingo/lingo-gr.y" { g_lingo->codeConst(3); g_lingo->code1(g_lingo->c_play); ;} break; - case 111: -#line 469 "engines/director/lingo/lingo-gr.y" + case 112: +#line 470 "engines/director/lingo/lingo-gr.y" { g_lingo->codeConst(2); g_lingo->code1(g_lingo->c_play); ;} break; - case 112: -#line 499 "engines/director/lingo/lingo-gr.y" + case 113: +#line 500 "engines/director/lingo/lingo-gr.y" { g_lingo->_indef = true; g_lingo->_currentFactory.clear(); ;} break; - case 113: -#line 500 "engines/director/lingo/lingo-gr.y" + case 114: +#line 501 "engines/director/lingo/lingo-gr.y" { g_lingo->codeConst(0); // Push fake value on stack g_lingo->code1(g_lingo->c_procret); @@ -2475,53 +2476,53 @@ yyreduce: g_lingo->_indef = false; ;} break; - case 114: -#line 505 "engines/director/lingo/lingo-gr.y" + case 115: +#line 506 "engines/director/lingo/lingo-gr.y" { g_lingo->codeFactory(*(yyvsp[(2) - (2)].s)); ;} break; - case 115: -#line 508 "engines/director/lingo/lingo-gr.y" + case 116: +#line 509 "engines/director/lingo/lingo-gr.y" { g_lingo->_indef = true; ;} break; - case 116: -#line 509 "engines/director/lingo/lingo-gr.y" + case 117: +#line 510 "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 117: -#line 513 "engines/director/lingo/lingo-gr.y" - { (yyval.narg) = 0; ;} - break; - case 118: #line 514 "engines/director/lingo/lingo-gr.y" - { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;} + { (yyval.narg) = 0; ;} break; case 119: #line 515 "engines/director/lingo/lingo-gr.y" - { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;} + { g_lingo->codeArg((yyvsp[(1) - (1)].s)); (yyval.narg) = 1; ;} break; case 120: #line 516 "engines/director/lingo/lingo-gr.y" - { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;} + { g_lingo->codeArg((yyvsp[(3) - (3)].s)); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;} break; case 121: -#line 518 "engines/director/lingo/lingo-gr.y" - { g_lingo->codeArgStore(); ;} +#line 517 "engines/director/lingo/lingo-gr.y" + { g_lingo->codeArg((yyvsp[(4) - (4)].s)); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;} break; case 122: -#line 522 "engines/director/lingo/lingo-gr.y" +#line 519 "engines/director/lingo/lingo-gr.y" + { g_lingo->codeArgStore(); ;} + break; + + case 123: +#line 523 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_call); g_lingo->codeString((yyvsp[(1) - (3)].s)->c_str()); @@ -2530,24 +2531,24 @@ yyreduce: g_lingo->code1(numpar); ;} break; - case 123: -#line 530 "engines/director/lingo/lingo-gr.y" - { (yyval.narg) = 0; ;} - break; - case 124: #line 531 "engines/director/lingo/lingo-gr.y" - { (yyval.narg) = 1; ;} + { (yyval.narg) = 0; ;} break; case 125: #line 532 "engines/director/lingo/lingo-gr.y" + { (yyval.narg) = 1; ;} + break; + + case 126: +#line 533 "engines/director/lingo/lingo-gr.y" { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;} break; /* Line 1267 of yacc.c. */ -#line 2551 "engines/director/lingo/lingo-gr.cpp" +#line 2552 "engines/director/lingo/lingo-gr.cpp" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -2761,6 +2762,6 @@ yyreturn: } -#line 535 "engines/director/lingo/lingo-gr.y" +#line 536 "engines/director/lingo/lingo-gr.y" diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y index f74244e5fd..aff4199215 100644 --- a/engines/director/lingo/lingo-gr.y +++ b/engines/director/lingo/lingo-gr.y @@ -408,6 +408,7 @@ expr: INT { $$ = g_lingo->codeConst($1); } func: tPUT expr { g_lingo->code1(g_lingo->c_printtop); } | gotofunc | playfunc + | tEXIT tREPEAT { g_lingo->code1(g_lingo->c_exitRepeat); } | tEXIT { g_lingo->codeConst(0); // Push fake value on stack g_lingo->code1(g_lingo->c_procret); } | tGLOBAL globallist diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp index d37da42670..d3e84a0d7c 100644 --- a/engines/director/lingo/lingo.cpp +++ b/engines/director/lingo/lingo.cpp @@ -104,6 +104,8 @@ Lingo::Lingo(DirectorEngine *vm) : _vm(vm) { _floatPrecision = 4; _floatPrecisionFormat = "%.4f"; + _exitRepeat = false; + warning("Lingo Inited"); } diff --git a/engines/director/lingo/lingo.h b/engines/director/lingo/lingo.h index 71708cf910..9707afb56e 100644 --- a/engines/director/lingo/lingo.h +++ b/engines/director/lingo/lingo.h @@ -268,6 +268,7 @@ public: static void c_repeatwithcode(); static void c_ifcode(); static void c_whencode(); + static void c_exitRepeat(); static void c_eq(); static void c_neq(); static void c_gt(); @@ -425,6 +426,8 @@ public: bool _inFactory; Common::String _currentFactory; + bool _exitRepeat; + private: int parse(const char *code); void push(Datum d); |