diff --git a/engines/director/lingo/lingo-ast.h b/engines/director/lingo/lingo-ast.h index f39882280ad..bc1635acc57 100644 --- a/engines/director/lingo/lingo-ast.h +++ b/engines/director/lingo/lingo-ast.h @@ -43,6 +43,7 @@ struct RepeatWhileNode; struct RepeatWithToNode; struct NextRepeatNode; struct ExitRepeatNode; +struct ExitNode; struct IntNode; struct FloatNode; struct SymbolNode; @@ -87,6 +88,7 @@ enum NodeType { kRepeatWithToNode, kNextRepeatNode, kExitRepeatNode, + kExitNode, kIntNode, kFloatNode, kSymbolNode, @@ -125,6 +127,7 @@ public: virtual void visitRepeatWithToNode(RepeatWithToNode *node) = 0; virtual void visitNextRepeatNode(NextRepeatNode *node) = 0; virtual void visitExitRepeatNode(ExitRepeatNode *node) = 0; + virtual void visitExitNode(ExitNode *node) = 0; virtual void visitIntNode(IntNode *node) = 0; virtual void visitFloatNode(FloatNode *node) = 0; virtual void visitSymbolNode(SymbolNode *node) = 0; @@ -454,6 +457,16 @@ struct ExitRepeatNode : StmtNode { } }; +/* ExitNode */ + +struct ExitNode : StmtNode { + ExitNode() : StmtNode(kExitNode) {} + virtual ~ExitNode() {} + virtual void accept(NodeVisitor *visitor) { + visitor->visitExitNode(this); + } +}; + /* IntNode */ struct IntNode : ExprNode { diff --git a/engines/director/lingo/lingo-codegen.cpp b/engines/director/lingo/lingo-codegen.cpp index ecce15946e5..c5db7e3a959 100644 --- a/engines/director/lingo/lingo-codegen.cpp +++ b/engines/director/lingo/lingo-codegen.cpp @@ -665,6 +665,12 @@ void LingoCompiler::visitExitRepeatNode(ExitRepeatNode *node) { } } +/* ExitNode */ + +void LingoCompiler::visitExitNode(ExitNode *node) { + code1(LC::c_procret); +} + /* IntNode */ void LingoCompiler::visitIntNode(IntNode *node) { diff --git a/engines/director/lingo/lingo-codegen.h b/engines/director/lingo/lingo-codegen.h index a6e73dcc3a6..193359741f7 100644 --- a/engines/director/lingo/lingo-codegen.h +++ b/engines/director/lingo/lingo-codegen.h @@ -94,6 +94,7 @@ public: virtual void visitRepeatWithToNode(RepeatWithToNode *node); virtual void visitNextRepeatNode(NextRepeatNode *node); virtual void visitExitRepeatNode(ExitRepeatNode *node); + virtual void visitExitNode(ExitNode *node); virtual void visitIntNode(IntNode *node); virtual void visitFloatNode(FloatNode *node); virtual void visitSymbolNode(SymbolNode *node); diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp index 0c7923eb103..69af1d1294c 100644 --- a/engines/director/lingo/lingo-gr.cpp +++ b/engines/director/lingo/lingo-gr.cpp @@ -673,18 +673,18 @@ static const yytype_int16 yyrline[] = 0, 194, 194, 196, 202, 209, 210, 211, 212, 213, 242, 246, 248, 250, 251, 254, 260, 267, 268, 273, 277, 281, 282, 283, 288, 289, 290, 291, 292, 293, - 294, 297, 299, 302, 304, 305, 306, 307, 310, 311, - 312, 313, 314, 316, 317, 318, 319, 320, 323, 324, - 325, 326, 327, 329, 330, 331, 332, 333, 334, 335, - 336, 337, 340, 341, 344, 348, 358, 359, 360, 361, - 364, 365, 366, 369, 370, 371, 372, 373, 374, 377, - 378, 379, 380, 383, 383, 385, 386, 387, 390, 394, - 398, 404, 408, 412, 416, 418, 420, 424, 425, 429, - 435, 442, 443, 448, 449, 450, 451, 452, 453, 454, - 455, 456, 457, 460, 462, 466, 470, 471, 474, 475, - 476, 479, 483, 488, 489, 490, 493, 494, 495, 496, - 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, - 507, 508, 509, 510, 513, 514, 517, 521 + 294, 299, 302, 304, 305, 306, 307, 310, 311, 312, + 313, 314, 316, 317, 318, 319, 320, 323, 324, 325, + 326, 327, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 340, 341, 344, 348, 358, 359, 360, 361, 364, + 365, 366, 369, 370, 371, 372, 373, 374, 375, 378, + 379, 380, 381, 384, 384, 386, 387, 388, 391, 395, + 399, 405, 409, 413, 417, 419, 421, 425, 426, 430, + 436, 443, 444, 449, 450, 451, 452, 453, 454, 455, + 456, 457, 458, 461, 463, 467, 471, 472, 475, 476, + 477, 480, 484, 489, 490, 491, 494, 495, 496, 497, + 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, + 508, 509, 510, 511, 514, 515, 518, 522 }; #endif @@ -759,33 +759,33 @@ static const yytype_int16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - 618, -183, -183, -183, -183, -183, -183, -183, -21, 1417, - 388, -183, -183, 1417, -183, -15, -183, -183, 467, 3, + 618, -183, -183, -183, -183, -183, -183, -183, -31, 1417, + 388, -183, -183, 1417, -183, -21, -183, -183, 467, 3, 1417, -183, -183, -183, -183, 1417, -183, -183, 1417, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, -183, 1417, 1417, -183, -183, 4, 618, -183, -183, -183, -183, 546, -183, -183, -183, -183, -183, - -183, -183, -183, -74, -183, -183, -183, -183, -183, -59, + -183, -183, -183, -74, -183, -183, -183, -183, -183, -65, -58, -183, -183, -183, -183, 388, 388, 388, 388, 307, -53, -183, -183, -183, -183, 96, 1417, -48, 388, 1438, - -43, -32, 1417, 388, -183, -183, -26, -34, -22, -20, - 1417, -183, -183, 388, 1591, -19, -183, -183, 1417, -183, - -183, -183, 1451, -23, -14, -10, -77, -68, -183, -9, + -43, -23, 1417, 388, -183, -183, -26, -34, -20, -19, + 1417, -183, -183, 388, 1591, -16, -183, -183, 1417, -183, + -183, -183, 1451, -15, -14, -22, -73, -64, -183, -10, 388, 1116, 388, 388, 388, 388, 388, 388, 388, 388, - 388, 388, 388, 388, 388, 388, 388, 388, 388, -16, + 388, 388, 388, 388, 388, 388, 388, 388, 388, -4, -183, 1451, -24, 1417, 1417, 1417, -183, 388, 20, 1491, - -183, -183, 388, -65, -183, -183, -2, -12, -183, -183, - -183, 388, 388, -183, 388, 1358, -183, -183, -4, 1177, - 64, 58, 58, 58, 58, 1604, 1604, -183, -50, 58, + -183, -183, 388, -62, -183, -183, -2, -1, -183, -183, + -183, 388, 388, -183, 388, 1358, -183, -183, 1, 1177, + 61, 58, 58, 58, 58, 1604, 1604, -183, -50, 58, 58, 58, 58, -50, -47, -47, -183, -183, 1177, 5, -183, 9, 11, 12, 1591, 388, 1177, 1504, 1417, -183, - -183, 13, -183, -183, 1177, 15, 1591, 1591, 1591, -23, + -183, 13, -183, -183, 1177, 15, 1591, 1591, 1591, -15, -14, -3, -183, -183, -183, -183, 679, -183, -183, 1238, - 1177, -183, -183, -183, -183, 52, 741, -183, 1417, -65, - 809, -183, 1299, 24, -183, 1177, -183, 48, 388, 25, - 30, -183, 1417, 1177, -183, -183, 870, 388, 1541, -183, - 1177, -29, -183, 932, 31, 1554, 1177, 1177, -183, 1417, - 33, -183, 1177, 994, -183, -183, 1055, 34, 36, -183, + 1177, -183, -183, -183, -183, 52, 741, -183, 1417, -62, + 809, -183, 1299, 24, -183, 1177, -183, 69, 388, 30, + 31, -183, 1417, 1177, -183, -183, 870, 388, 1541, -183, + 1177, -29, -183, 932, 33, 1554, 1177, 1177, -183, 1417, + 34, -183, 1177, 994, -183, -183, 1055, 36, 38, -183, -183 }; @@ -794,30 +794,30 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 0, 24, 46, 28, 32, 49, 58, 30, 31, 62, - 0, 33, 35, 0, 39, 40, 42, 47, 144, 48, - 50, 53, 56, 59, 57, 0, 43, 45, 62, 26, - 44, 41, 38, 25, 27, 51, 29, 36, 37, 61, - 55, 34, 60, 52, 62, 0, 54, 5, 0, 2, - 3, 6, 7, 8, 144, 9, 66, 70, 71, 72, - 67, 68, 69, 0, 31, 40, 48, 50, 64, 0, - 63, 103, 104, 106, 105, 41, 0, 0, 0, 144, - 113, 116, 111, 126, 112, 0, 62, 0, 144, 146, + 0, 24, 45, 28, 31, 48, 57, 30, 0, 61, + 0, 32, 34, 0, 38, 39, 41, 46, 144, 47, + 49, 52, 55, 58, 56, 0, 42, 44, 61, 26, + 43, 40, 37, 25, 27, 50, 29, 35, 36, 60, + 54, 33, 59, 51, 61, 0, 53, 5, 0, 2, + 3, 6, 7, 8, 144, 9, 65, 69, 70, 71, + 66, 67, 68, 0, 78, 39, 47, 49, 63, 0, + 62, 103, 104, 106, 105, 40, 0, 0, 0, 144, + 113, 116, 111, 126, 112, 0, 61, 0, 144, 146, 0, 145, 0, 0, 113, 115, 0, 0, 0, 0, - 62, 1, 4, 144, 146, 0, 78, 85, 0, 109, + 61, 1, 4, 144, 146, 0, 77, 85, 0, 109, 107, 108, 0, 106, 105, 0, 113, 0, 121, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 77, 146, 0, 0, 0, 0, 76, 0, 0, 0, - 83, 84, 0, 13, 87, 86, 0, 0, 74, 65, + 76, 146, 0, 0, 0, 0, 75, 0, 0, 0, + 83, 84, 0, 13, 87, 86, 0, 0, 73, 64, 117, 0, 0, 119, 0, 0, 120, 118, 0, 97, 88, 136, 137, 134, 135, 138, 139, 131, 141, 142, 143, 133, 132, 140, 127, 128, 129, 130, 97, 0, 114, 0, 0, 0, 147, 0, 97, 0, 0, 17, 18, 11, 14, 15, 97, 0, 125, 123, 124, 0, 0, 0, 122, 110, 101, 102, 0, 98, 99, 0, - 10, 75, 79, 80, 81, 0, 0, 82, 62, 0, - 20, 73, 0, 0, 100, 97, 90, 0, 0, 0, + 10, 74, 79, 80, 81, 0, 0, 82, 61, 0, + 20, 72, 0, 0, 100, 97, 90, 0, 0, 0, 0, 16, 21, 97, 92, 89, 0, 0, 0, 94, 97, 0, 22, 0, 0, 0, 97, 12, 19, 0, 0, 91, 97, 0, 23, 93, 0, 0, 0, 95, @@ -827,10 +827,10 @@ static const yytype_uint8 yydefact[] = /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -183, -183, -183, 75, -183, -183, -183, -183, -183, -104, + -183, -183, -183, 76, -183, -183, -183, -183, -183, -100, -183, -183, 0, -27, -183, 2, -183, -183, -183, -183, -183, -183, -183, -183, -182, -183, -170, -183, -17, -82, - -183, -35, -183, -183, -36, 145, -49, -183 + -183, -35, -183, -183, -13, 145, -49, -183 }; /* YYDEFGOTO[NTERM-NUM]. */ @@ -847,22 +847,22 @@ static const yytype_uint8 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 54, 98, 55, 95, 101, 105, 220, 128, 198, 68, - 128, 120, 106, 86, 226, 164, 150, 99, 63, 165, - 94, 199, 230, 166, 87, 97, 151, 107, 68, 108, + 54, 98, 55, 95, 101, 105, 220, 128, 63, 68, + 128, 198, 106, 86, 226, 120, 150, 99, 87, 164, + 94, 107, 230, 165, 199, 97, 151, 166, 68, 108, 119, 135, 136, 137, 138, 120, 137, 138, 140, 142, 109, 110, 111, 146, 68, 100, 234, 92, 93, 54, - 234, 55, 153, 246, 157, 147, 234, 258, 259, 139, - 234, 253, 192, 193, 154, 189, 155, 158, 257, 161, - 188, 168, 195, 156, 263, 237, 234, 205, 162, 116, - 266, 163, 167, 234, 204, 213, 68, 234, 219, 164, - 247, 221, 148, 234, 238, 222, 234, 223, 224, 229, + 234, 55, 153, 246, 157, 64, 234, 258, 259, 139, + 234, 253, 192, 193, 147, 189, 154, 155, 257, 163, + 158, 168, 195, 156, 263, 237, 234, 161, 162, 116, + 266, 167, 188, 234, 204, 219, 68, 234, 205, 164, + 213, 221, 148, 234, 238, 222, 234, 223, 224, 229, 68, 231, 122, 123, 124, 125, 126, 127, 159, 128, - 245, 249, 129, 130, 131, 128, 250, 261, 129, 265, - 269, 54, 270, 170, 102, 241, 190, 190, 190, 212, + 245, 247, 129, 130, 131, 128, 249, 250, 129, 261, + 265, 54, 269, 170, 270, 102, 190, 190, 190, 241, 132, 133, 134, 135, 136, 137, 138, 121, 134, 135, 136, 137, 138, 94, 94, 94, 122, 123, 124, 125, - 126, 127, 0, 128, 0, 85, 129, 130, 131, 0, + 126, 127, 212, 128, 0, 85, 129, 130, 131, 0, 0, 0, 0, 89, 0, 211, 0, 0, 0, 54, 0, 0, 0, 0, 132, 133, 134, 135, 136, 137, 138, 0, 0, 0, 0, 0, 0, 0, 54, 0, @@ -880,7 +880,7 @@ static const yytype_int16 yytable[] = 0, 0, 0, 0, 0, 0, 206, 207, 0, 208, 0, 0, 71, 0, 0, 0, 0, 72, 0, 0, 1, 113, 114, 0, 2, 0, 3, 4, 5, 6, - 7, 0, 0, 64, 0, 0, 0, 0, 11, 12, + 7, 0, 0, 0, 0, 0, 0, 0, 11, 12, 225, 14, 65, 16, 17, 0, 66, 67, 0, 21, 22, 23, 24, 0, 26, 27, 0, 0, 0, 0, 0, 29, 30, 75, 32, 33, 34, 0, 0, 35, @@ -888,7 +888,7 @@ static const yytype_int16 yytable[] = 0, 0, 0, 248, 46, 0, 0, 0, 76, 77, 0, 0, 255, 71, 0, 78, 0, 79, 72, 115, 0, 1, 73, 74, 0, 2, 0, 3, 4, 5, - 6, 7, 0, 0, 64, 0, 0, 0, 0, 11, + 6, 7, 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, 14, 65, 16, 17, 0, 66, 67, 0, 21, 22, 23, 24, 0, 26, 27, 0, 0, 0, 0, 0, 29, 30, 75, 32, 33, 34, 0, 0, @@ -896,7 +896,7 @@ static const yytype_int16 yytable[] = 0, 0, 0, 0, 0, 46, 0, 0, 0, 76, 77, 0, 71, 0, 0, 0, 78, 72, 79, 0, 1, 73, 74, 0, 2, 0, 3, 4, 5, 6, - 7, 0, 0, 64, 0, 0, 0, 0, 11, 12, + 7, 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, 14, 65, 16, 17, 0, 66, 67, 0, 21, 22, 23, 24, 0, 26, 27, 0, 0, 0, 0, 0, 29, 30, 75, 32, 33, 34, 0, 0, 35, @@ -904,7 +904,7 @@ static const yytype_int16 yytable[] = 0, 0, 0, 0, 46, 0, 0, 0, 76, 77, 0, 71, 0, 0, 0, 88, 72, 79, 0, 1, 73, 74, 0, 2, 0, 3, 4, 5, 6, 7, - 0, 0, 64, 0, 0, 0, 0, 11, 12, 0, + 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, 14, 65, 16, 17, 0, 66, 67, 0, 21, 22, 23, 24, 0, 26, 27, 0, 0, 0, 0, 0, 29, 30, 75, 32, 33, 34, 0, 0, 35, 36, @@ -985,13 +985,13 @@ static const yytype_int16 yytable[] = 0, 0, 0, 29, 30, 31, 32, 33, 34, 0, 0, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 1, 209, 210, 0, 2, 46, 3, 4, 5, - 6, 7, 0, 0, 64, 243, 0, 0, 0, 11, + 6, 7, 0, 0, 0, 243, 0, 0, 0, 11, 12, 0, 14, 65, 16, 17, 0, 66, 67, 0, 21, 22, 23, 24, 0, 26, 27, 0, 0, 0, 0, 0, 29, 30, 31, 32, 33, 34, 0, 0, 35, 36, 37, 38, 39, 40, 41, 42, 43, 0, 1, 0, 0, 0, 2, 46, 3, 4, 5, 6, - 7, 0, 0, 64, 0, 0, 0, 0, 11, 12, + 7, 0, 0, 0, 0, 0, 0, 0, 11, 12, 0, 14, 65, 16, 17, 0, 66, 67, 0, 21, 22, 23, 24, 0, 26, 27, 0, 0, 0, 0, 143, 29, 30, 31, 32, 33, 34, 0, 0, 35, @@ -1020,22 +1020,22 @@ static const yytype_int16 yytable[] = static const yytype_int16 yycheck[] = { - 0, 28, 0, 20, 0, 54, 188, 57, 73, 9, - 57, 88, 86, 13, 196, 92, 42, 44, 39, 87, - 20, 86, 204, 91, 39, 25, 52, 86, 28, 87, + 0, 28, 0, 20, 0, 54, 188, 57, 39, 9, + 57, 73, 86, 13, 196, 88, 42, 44, 39, 92, + 20, 86, 204, 87, 86, 25, 52, 91, 28, 87, 79, 81, 82, 83, 84, 88, 83, 84, 86, 88, 75, 76, 77, 86, 44, 45, 216, 44, 45, 49, - 220, 49, 86, 235, 103, 87, 226, 86, 87, 86, - 230, 243, 144, 145, 86, 89, 86, 86, 250, 92, - 86, 120, 52, 100, 256, 23, 246, 89, 92, 79, - 262, 91, 91, 253, 86, 89, 86, 257, 24, 92, - 42, 86, 92, 263, 42, 86, 266, 86, 86, 86, + 220, 49, 86, 235, 103, 86, 226, 86, 87, 86, + 230, 243, 144, 145, 87, 89, 86, 86, 250, 91, + 86, 120, 52, 100, 256, 23, 246, 92, 92, 79, + 262, 91, 86, 253, 86, 24, 86, 257, 89, 92, + 89, 86, 92, 263, 42, 86, 266, 86, 86, 86, 100, 86, 50, 51, 52, 53, 54, 55, 108, 57, - 86, 86, 60, 61, 62, 57, 86, 86, 60, 86, - 86, 121, 86, 121, 49, 229, 143, 144, 145, 165, + 86, 42, 60, 61, 62, 57, 86, 86, 60, 86, + 86, 121, 86, 121, 86, 49, 143, 144, 145, 229, 78, 79, 80, 81, 82, 83, 84, 41, 80, 81, 82, 83, 84, 143, 144, 145, 50, 51, 52, 53, - 54, 55, -1, 57, -1, 10, 60, 61, 62, -1, + 54, 55, 165, 57, -1, 10, 60, 61, 62, -1, -1, -1, -1, 18, -1, 165, -1, -1, -1, 169, -1, -1, -1, -1, 78, 79, 80, 81, 82, 83, 84, -1, -1, -1, -1, -1, -1, -1, 188, -1, @@ -1053,7 +1053,7 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, 161, 162, -1, 164, -1, -1, 5, -1, -1, -1, -1, 10, -1, -1, 13, 14, 15, -1, 17, -1, 19, 20, 21, 22, - 23, -1, -1, 26, -1, -1, -1, -1, 31, 32, + 23, -1, -1, -1, -1, -1, -1, -1, 31, 32, 195, 34, 35, 36, 37, -1, 39, 40, -1, 42, 43, 44, 45, -1, 47, 48, -1, -1, -1, -1, -1, 54, 55, 56, 57, 58, 59, -1, -1, 62, @@ -1061,7 +1061,7 @@ static const yytype_int16 yycheck[] = -1, -1, -1, 238, 77, -1, -1, -1, 81, 82, -1, -1, 247, 5, -1, 88, -1, 90, 10, 92, -1, 13, 14, 15, -1, 17, -1, 19, 20, 21, - 22, 23, -1, -1, 26, -1, -1, -1, -1, 31, + 22, 23, -1, -1, -1, -1, -1, -1, -1, 31, 32, -1, 34, 35, 36, 37, -1, 39, 40, -1, 42, 43, 44, 45, -1, 47, 48, -1, -1, -1, -1, -1, 54, 55, 56, 57, 58, 59, -1, -1, @@ -1069,7 +1069,7 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, 77, -1, -1, -1, 81, 82, -1, 5, -1, -1, -1, 88, 10, 90, -1, 13, 14, 15, -1, 17, -1, 19, 20, 21, 22, - 23, -1, -1, 26, -1, -1, -1, -1, 31, 32, + 23, -1, -1, -1, -1, -1, -1, -1, 31, 32, -1, 34, 35, 36, 37, -1, 39, 40, -1, 42, 43, 44, 45, -1, 47, 48, -1, -1, -1, -1, -1, 54, 55, 56, 57, 58, 59, -1, -1, 62, @@ -1077,7 +1077,7 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, 77, -1, -1, -1, 81, 82, -1, 5, -1, -1, -1, 88, 10, 90, -1, 13, 14, 15, -1, 17, -1, 19, 20, 21, 22, 23, - -1, -1, 26, -1, -1, -1, -1, 31, 32, -1, + -1, -1, -1, -1, -1, -1, -1, 31, 32, -1, 34, 35, 36, 37, -1, 39, 40, -1, 42, 43, 44, 45, -1, 47, 48, -1, -1, -1, -1, -1, 54, 55, 56, 57, 58, 59, -1, -1, 62, 63, @@ -1158,13 +1158,13 @@ static const yytype_int16 yycheck[] = -1, -1, -1, 54, 55, 56, 57, 58, 59, -1, -1, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 13, 14, 15, -1, 17, 77, 19, 20, 21, - 22, 23, -1, -1, 26, 86, -1, -1, -1, 31, + 22, 23, -1, -1, -1, 86, -1, -1, -1, 31, 32, -1, 34, 35, 36, 37, -1, 39, 40, -1, 42, 43, 44, 45, -1, 47, 48, -1, -1, -1, -1, -1, 54, 55, 56, 57, 58, 59, -1, -1, 62, 63, 64, 65, 66, 67, 68, 69, 70, -1, 13, -1, -1, -1, 17, 77, 19, 20, 21, 22, - 23, -1, -1, 26, -1, -1, -1, -1, 31, 32, + 23, -1, -1, -1, -1, -1, -1, -1, 31, 32, -1, 34, 35, 36, 37, -1, 39, 40, -1, 42, 43, 44, 45, -1, 47, 48, -1, -1, -1, -1, 32, 54, 55, 56, 57, 58, 59, -1, -1, 62, @@ -1201,7 +1201,7 @@ static const yytype_uint8 yystos[] = 55, 56, 57, 58, 59, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 77, 86, 94, 95, 96, 97, 98, 103, 105, 108, 109, 110, 111, 113, - 114, 115, 116, 39, 26, 35, 39, 40, 105, 106, + 114, 115, 116, 39, 86, 35, 39, 40, 105, 106, 107, 5, 10, 14, 15, 56, 81, 82, 88, 90, 105, 120, 121, 124, 125, 128, 105, 39, 88, 128, 129, 130, 44, 45, 105, 121, 123, 105, 106, 106, @@ -1234,8 +1234,8 @@ 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, 105, 105, 105, 105, 105, - 105, 105, 106, 106, 107, 107, 108, 108, 108, 108, - 109, 109, 109, 110, 110, 110, 110, 110, 110, 111, + 105, 106, 106, 107, 107, 108, 108, 108, 108, 109, + 109, 109, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 112, 112, 113, 113, 113, 114, 114, 115, 115, 115, 115, 116, 116, 116, 117, 117, 118, 118, 119, 119, 120, 120, 120, 120, 120, 120, 120, @@ -1254,8 +1254,8 @@ static const yytype_int8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 1, 1, 3, 1, 1, 1, 1, - 1, 1, 1, 5, 3, 5, 3, 3, 3, 5, + 1, 0, 1, 1, 3, 1, 1, 1, 1, 1, + 1, 1, 5, 3, 5, 3, 3, 3, 2, 5, 5, 5, 5, 1, 1, 3, 3, 3, 4, 7, 6, 9, 7, 10, 7, 11, 12, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, @@ -1991,295 +1991,295 @@ yyreduce: #line 1992 "engines/director/lingo/lingo-gr.cpp" break; - case 31: /* ID: tEXIT */ -#line 297 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("exit"); } + case 31: /* ID: tFIELD */ +#line 299 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("field"); } #line 1998 "engines/director/lingo/lingo-gr.cpp" break; - case 32: /* ID: tFIELD */ -#line 299 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("field"); } + case 32: /* ID: tIN */ +#line 302 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("in"); } #line 2004 "engines/director/lingo/lingo-gr.cpp" break; - case 33: /* ID: tIN */ -#line 302 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("in"); } + case 33: /* ID: tINTERSECTS */ +#line 304 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("intersects"); } #line 2010 "engines/director/lingo/lingo-gr.cpp" break; - case 34: /* ID: tINTERSECTS */ -#line 304 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("intersects"); } + case 34: /* ID: tINTO */ +#line 305 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("into"); } #line 2016 "engines/director/lingo/lingo-gr.cpp" break; - case 35: /* ID: tINTO */ -#line 305 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("into"); } + case 35: /* ID: tITEM */ +#line 306 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("item"); } #line 2022 "engines/director/lingo/lingo-gr.cpp" break; - case 36: /* ID: tITEM */ -#line 306 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("item"); } + case 36: /* ID: tLINE */ +#line 307 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("line"); } #line 2028 "engines/director/lingo/lingo-gr.cpp" break; - case 37: /* ID: tLINE */ -#line 307 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("line"); } + case 37: /* ID: tMOD */ +#line 310 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("mod"); } #line 2034 "engines/director/lingo/lingo-gr.cpp" break; - case 38: /* ID: tMOD */ -#line 310 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("mod"); } + case 38: /* ID: tMOVIE */ +#line 311 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("movie"); } #line 2040 "engines/director/lingo/lingo-gr.cpp" break; - case 39: /* ID: tMOVIE */ -#line 311 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("movie"); } + case 39: /* ID: tNEXT */ +#line 312 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("next"); } #line 2046 "engines/director/lingo/lingo-gr.cpp" break; - case 40: /* ID: tNEXT */ -#line 312 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("next"); } + case 40: /* ID: tNOT */ +#line 313 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("not"); } #line 2052 "engines/director/lingo/lingo-gr.cpp" break; - case 41: /* ID: tNOT */ -#line 313 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("not"); } + case 41: /* ID: tOF */ +#line 314 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("of"); } #line 2058 "engines/director/lingo/lingo-gr.cpp" break; - case 42: /* ID: tOF */ -#line 314 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("of"); } + case 42: /* ID: tOPEN */ +#line 316 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("open"); } #line 2064 "engines/director/lingo/lingo-gr.cpp" break; - case 43: /* ID: tOPEN */ -#line 316 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("open"); } + case 43: /* ID: tOR */ +#line 317 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("or"); } #line 2070 "engines/director/lingo/lingo-gr.cpp" break; - case 44: /* ID: tOR */ -#line 317 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("or"); } + case 44: /* ID: tPLAY */ +#line 318 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("play"); } #line 2076 "engines/director/lingo/lingo-gr.cpp" break; - case 45: /* ID: tPLAY */ -#line 318 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("play"); } + case 45: /* ID: tPLAYACCEL */ +#line 319 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("playAccel"); } #line 2082 "engines/director/lingo/lingo-gr.cpp" break; - case 46: /* ID: tPLAYACCEL */ -#line 319 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("playAccel"); } + case 46: /* ID: tPREVIOUS */ +#line 320 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("previous"); } #line 2088 "engines/director/lingo/lingo-gr.cpp" break; - case 47: /* ID: tPREVIOUS */ -#line 320 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("previous"); } + case 47: /* ID: tREPEAT */ +#line 323 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("repeat"); } #line 2094 "engines/director/lingo/lingo-gr.cpp" break; - case 48: /* ID: tREPEAT */ -#line 323 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("repeat"); } + case 48: /* ID: tSCRIPT */ +#line 324 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("script"); } #line 2100 "engines/director/lingo/lingo-gr.cpp" break; - case 49: /* ID: tSCRIPT */ -#line 324 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("script"); } + case 49: /* ID: tSET */ +#line 325 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("set"); } #line 2106 "engines/director/lingo/lingo-gr.cpp" break; - case 50: /* ID: tSET */ -#line 325 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("set"); } + case 50: /* ID: tSTARTS */ +#line 326 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("starts"); } #line 2112 "engines/director/lingo/lingo-gr.cpp" break; - case 51: /* ID: tSTARTS */ -#line 326 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("starts"); } + case 51: /* ID: tTELL */ +#line 327 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("tell"); } #line 2118 "engines/director/lingo/lingo-gr.cpp" break; - case 52: /* ID: tTELL */ -#line 327 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("tell"); } + case 52: /* ID: tTO */ +#line 329 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("to"); } #line 2124 "engines/director/lingo/lingo-gr.cpp" break; - case 53: /* ID: tTO */ -#line 329 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("to"); } + case 53: /* ID: tASSERTERROR */ +#line 330 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("scummvmAssertError"); } #line 2130 "engines/director/lingo/lingo-gr.cpp" break; - case 54: /* ID: tASSERTERROR */ -#line 330 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("scummvmAssertError"); } + case 54: /* ID: tSPRITE */ +#line 331 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("sprite"); } #line 2136 "engines/director/lingo/lingo-gr.cpp" break; - case 55: /* ID: tSPRITE */ -#line 331 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("sprite"); } + case 55: /* ID: tWHEN */ +#line 332 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("when"); } #line 2142 "engines/director/lingo/lingo-gr.cpp" break; - case 56: /* ID: tWHEN */ -#line 332 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("when"); } + case 56: /* ID: tWHILE */ +#line 333 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("while"); } #line 2148 "engines/director/lingo/lingo-gr.cpp" break; - case 57: /* ID: tWHILE */ -#line 333 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("while"); } + case 57: /* ID: tWINDOW */ +#line 334 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("window"); } #line 2154 "engines/director/lingo/lingo-gr.cpp" break; - case 58: /* ID: tWINDOW */ -#line 334 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("window"); } + case 58: /* ID: tWITH */ +#line 335 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("with"); } #line 2160 "engines/director/lingo/lingo-gr.cpp" break; - case 59: /* ID: tWITH */ -#line 335 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("with"); } + case 59: /* ID: tWITHIN */ +#line 336 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("within"); } #line 2166 "engines/director/lingo/lingo-gr.cpp" break; - case 60: /* ID: tWITHIN */ -#line 336 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("within"); } + case 60: /* ID: tWORD */ +#line 337 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = new Common::String("word"); } #line 2172 "engines/director/lingo/lingo-gr.cpp" break; - case 61: /* ID: tWORD */ -#line 337 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = new Common::String("word"); } + case 61: /* idlist: %empty */ +#line 340 "engines/director/lingo/lingo-gr.y" + { (yyval.idlist) = new IDList; } #line 2178 "engines/director/lingo/lingo-gr.cpp" break; - case 62: /* idlist: %empty */ -#line 340 "engines/director/lingo/lingo-gr.y" - { (yyval.idlist) = new IDList; } -#line 2184 "engines/director/lingo/lingo-gr.cpp" - break; - - case 64: /* nonemptyidlist: ID */ + case 63: /* nonemptyidlist: ID */ #line 344 "engines/director/lingo/lingo-gr.y" { Common::Array *list = new IDList; list->push_back((yyvsp[0].s)); (yyval.idlist) = list; } -#line 2193 "engines/director/lingo/lingo-gr.cpp" +#line 2187 "engines/director/lingo/lingo-gr.cpp" break; - case 65: /* nonemptyidlist: nonemptyidlist ',' ID */ + case 64: /* nonemptyidlist: nonemptyidlist ',' ID */ #line 348 "engines/director/lingo/lingo-gr.y" { (yyvsp[-2].idlist)->push_back((yyvsp[0].s)); (yyval.idlist) = (yyvsp[-2].idlist); } +#line 2195 "engines/director/lingo/lingo-gr.cpp" + break; + + case 72: /* proc: ID '(' exprlist ')' '\n' */ +#line 369 "engines/director/lingo/lingo-gr.y" + { (yyval.node) = new CmdNode((yyvsp[-4].s), (yyvsp[-2].nodelist)); } #line 2201 "engines/director/lingo/lingo-gr.cpp" break; - case 73: /* proc: ID '(' exprlist ')' '\n' */ -#line 369 "engines/director/lingo/lingo-gr.y" - { (yyval.node) = new CmdNode((yyvsp[-4].s), (yyvsp[-2].nodelist)); } + case 73: /* proc: ID exprlist '\n' */ +#line 370 "engines/director/lingo/lingo-gr.y" + { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); } #line 2207 "engines/director/lingo/lingo-gr.cpp" break; - case 74: /* proc: ID exprlist '\n' */ -#line 370 "engines/director/lingo/lingo-gr.y" - { (yyval.node) = new CmdNode((yyvsp[-2].s), (yyvsp[-1].nodelist)); } + case 74: /* proc: tPUT '(' exprlist ')' '\n' */ +#line 371 "engines/director/lingo/lingo-gr.y" + { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-2].nodelist)); } #line 2213 "engines/director/lingo/lingo-gr.cpp" break; - case 75: /* proc: tPUT '(' exprlist ')' '\n' */ -#line 371 "engines/director/lingo/lingo-gr.y" - { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-2].nodelist)); } + case 75: /* proc: tPUT exprlist '\n' */ +#line 372 "engines/director/lingo/lingo-gr.y" + { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); } #line 2219 "engines/director/lingo/lingo-gr.cpp" break; - case 76: /* proc: tPUT exprlist '\n' */ -#line 372 "engines/director/lingo/lingo-gr.y" - { (yyval.node) = new CmdNode(new Common::String("put"), (yyvsp[-1].nodelist)); } + case 76: /* proc: tNEXT tREPEAT '\n' */ +#line 373 "engines/director/lingo/lingo-gr.y" + { (yyval.node) = new NextRepeatNode(); } #line 2225 "engines/director/lingo/lingo-gr.cpp" break; - case 77: /* proc: tNEXT tREPEAT '\n' */ -#line 373 "engines/director/lingo/lingo-gr.y" - { (yyval.node) = new NextRepeatNode(); } + case 77: /* proc: tEXIT tREPEAT '\n' */ +#line 374 "engines/director/lingo/lingo-gr.y" + { (yyval.node) = new ExitRepeatNode(); } #line 2231 "engines/director/lingo/lingo-gr.cpp" break; - case 78: /* proc: tEXIT tREPEAT '\n' */ -#line 374 "engines/director/lingo/lingo-gr.y" - { (yyval.node) = new ExitRepeatNode(); } + case 78: /* proc: tEXIT '\n' */ +#line 375 "engines/director/lingo/lingo-gr.y" + { (yyval.node) = new ExitNode(); } #line 2237 "engines/director/lingo/lingo-gr.cpp" break; case 79: /* asgn: tPUT expr tINTO varorchunk '\n' */ -#line 377 "engines/director/lingo/lingo-gr.y" +#line 378 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new PutIntoNode((yyvsp[-3].node), (yyvsp[-1].node)); } #line 2243 "engines/director/lingo/lingo-gr.cpp" break; case 80: /* asgn: tPUT expr tAFTER varorchunk '\n' */ -#line 378 "engines/director/lingo/lingo-gr.y" +#line 379 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new PutAfterNode((yyvsp[-3].node), (yyvsp[-1].node)); } #line 2249 "engines/director/lingo/lingo-gr.cpp" break; case 81: /* asgn: tPUT expr tBEFORE varorchunk '\n' */ -#line 379 "engines/director/lingo/lingo-gr.y" +#line 380 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new PutBeforeNode((yyvsp[-3].node), (yyvsp[-1].node)); } #line 2255 "engines/director/lingo/lingo-gr.cpp" break; case 82: /* asgn: tSET varorthe to expr '\n' */ -#line 380 "engines/director/lingo/lingo-gr.y" +#line 381 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new SetNode((yyvsp[-3].node), (yyvsp[-1].node)); } #line 2261 "engines/director/lingo/lingo-gr.cpp" break; case 85: /* definevars: tGLOBAL idlist '\n' */ -#line 385 "engines/director/lingo/lingo-gr.y" +#line 386 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new GlobalNode((yyvsp[-1].idlist)); } #line 2267 "engines/director/lingo/lingo-gr.cpp" break; case 86: /* definevars: tPROPERTY idlist '\n' */ -#line 386 "engines/director/lingo/lingo-gr.y" +#line 387 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new PropertyNode((yyvsp[-1].idlist)); } #line 2273 "engines/director/lingo/lingo-gr.cpp" break; case 87: /* definevars: tINSTANCE idlist '\n' */ -#line 387 "engines/director/lingo/lingo-gr.y" +#line 388 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new InstanceNode((yyvsp[-1].idlist)); } #line 2279 "engines/director/lingo/lingo-gr.cpp" break; case 88: /* ifstmt: tIF expr tTHEN stmt */ -#line 390 "engines/director/lingo/lingo-gr.y" +#line 391 "engines/director/lingo/lingo-gr.y" { NodeList *stmtlist = new NodeList; stmtlist->push_back((yyvsp[0].node)); @@ -2288,14 +2288,14 @@ yyreduce: break; case 89: /* ifstmt: tIF expr tTHEN '\n' stmtlist tENDIF '\n' */ -#line 394 "engines/director/lingo/lingo-gr.y" +#line 395 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new IfStmtNode((yyvsp[-5].node), (yyvsp[-2].nodelist)); } #line 2295 "engines/director/lingo/lingo-gr.cpp" break; case 90: /* ifelsestmt: tIF expr tTHEN stmt tELSE stmt */ -#line 398 "engines/director/lingo/lingo-gr.y" +#line 399 "engines/director/lingo/lingo-gr.y" { NodeList *stmtlist1 = new NodeList; stmtlist1->push_back((yyvsp[-2].node)); @@ -2306,7 +2306,7 @@ yyreduce: break; case 91: /* ifelsestmt: tIF expr tTHEN stmt tELSE '\n' stmtlist tENDIF '\n' */ -#line 404 "engines/director/lingo/lingo-gr.y" +#line 405 "engines/director/lingo/lingo-gr.y" { NodeList *stmtlist1 = new NodeList; stmtlist1->push_back((yyvsp[-5].node)); @@ -2315,7 +2315,7 @@ yyreduce: break; case 92: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE stmt */ -#line 408 "engines/director/lingo/lingo-gr.y" +#line 409 "engines/director/lingo/lingo-gr.y" { NodeList *stmtlist2 = new NodeList; stmtlist2->push_back((yyvsp[0].node)); @@ -2324,41 +2324,41 @@ yyreduce: break; case 93: /* ifelsestmt: tIF expr tTHEN '\n' stmtlist tELSE '\n' stmtlist tENDIF '\n' */ -#line 412 "engines/director/lingo/lingo-gr.y" +#line 413 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new IfElseStmtNode((yyvsp[-8].node), (yyvsp[-5].nodelist), (yyvsp[-2].nodelist)); } #line 2331 "engines/director/lingo/lingo-gr.cpp" break; case 94: /* loop: tREPEAT tWHILE expr '\n' stmtlist tENDREPEAT '\n' */ -#line 416 "engines/director/lingo/lingo-gr.y" +#line 417 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new RepeatWhileNode((yyvsp[-4].node), (yyvsp[-2].nodelist)); } #line 2338 "engines/director/lingo/lingo-gr.cpp" break; case 95: /* loop: tREPEAT tWITH ID tEQ expr tTO expr '\n' stmtlist tENDREPEAT '\n' */ -#line 418 "engines/director/lingo/lingo-gr.y" +#line 419 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new RepeatWithToNode((yyvsp[-8].s), (yyvsp[-6].node), false, (yyvsp[-4].node), (yyvsp[-2].nodelist)); } #line 2345 "engines/director/lingo/lingo-gr.cpp" break; case 96: /* loop: tREPEAT tWITH ID tEQ expr tDOWN tTO expr '\n' stmtlist tENDREPEAT '\n' */ -#line 420 "engines/director/lingo/lingo-gr.y" +#line 421 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new RepeatWithToNode((yyvsp[-9].s), (yyvsp[-7].node), true, (yyvsp[-4].node), (yyvsp[-2].nodelist)); } #line 2352 "engines/director/lingo/lingo-gr.cpp" break; case 97: /* stmtlist: %empty */ -#line 424 "engines/director/lingo/lingo-gr.y" +#line 425 "engines/director/lingo/lingo-gr.y" { (yyval.nodelist) = new NodeList; } #line 2358 "engines/director/lingo/lingo-gr.cpp" break; case 99: /* nonemptystmtlist: stmtlistline */ -#line 429 "engines/director/lingo/lingo-gr.y" +#line 430 "engines/director/lingo/lingo-gr.y" { NodeList *list = new NodeList; if ((yyvsp[0].node)) { @@ -2369,7 +2369,7 @@ yyreduce: break; case 100: /* nonemptystmtlist: stmtlist stmtlistline */ -#line 435 "engines/director/lingo/lingo-gr.y" +#line 436 "engines/director/lingo/lingo-gr.y" { if ((yyvsp[0].node)) { (yyvsp[-1].nodelist)->push_back((yyvsp[0].node)); @@ -2379,91 +2379,91 @@ yyreduce: break; case 101: /* stmtlistline: '\n' */ -#line 442 "engines/director/lingo/lingo-gr.y" +#line 443 "engines/director/lingo/lingo-gr.y" { (yyval.node) = nullptr; } #line 2385 "engines/director/lingo/lingo-gr.cpp" break; case 103: /* simpleexprnoparens: tINT */ -#line 448 "engines/director/lingo/lingo-gr.y" +#line 449 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new IntNode((yyvsp[0].i)); } #line 2391 "engines/director/lingo/lingo-gr.cpp" break; case 104: /* simpleexprnoparens: tFLOAT */ -#line 449 "engines/director/lingo/lingo-gr.y" +#line 450 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new FloatNode((yyvsp[0].f)); } #line 2397 "engines/director/lingo/lingo-gr.cpp" break; case 105: /* simpleexprnoparens: tSYMBOL */ -#line 450 "engines/director/lingo/lingo-gr.y" +#line 451 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new SymbolNode((yyvsp[0].s)); } #line 2403 "engines/director/lingo/lingo-gr.cpp" break; case 106: /* simpleexprnoparens: tSTRING */ -#line 451 "engines/director/lingo/lingo-gr.y" +#line 452 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new StringNode((yyvsp[0].s)); } #line 2409 "engines/director/lingo/lingo-gr.cpp" break; case 107: /* simpleexprnoparens: '+' simpleexpr */ -#line 452 "engines/director/lingo/lingo-gr.y" +#line 453 "engines/director/lingo/lingo-gr.y" { (yyval.node) = (yyvsp[0].node); } #line 2415 "engines/director/lingo/lingo-gr.cpp" break; case 108: /* simpleexprnoparens: '-' simpleexpr */ -#line 453 "engines/director/lingo/lingo-gr.y" +#line 454 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new UnaryOpNode(LC::c_negate, (yyvsp[0].node)); } #line 2421 "engines/director/lingo/lingo-gr.cpp" break; case 109: /* simpleexprnoparens: tNOT simpleexpr */ -#line 454 "engines/director/lingo/lingo-gr.y" +#line 455 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new UnaryOpNode(LC::c_not, (yyvsp[0].node)); } #line 2427 "engines/director/lingo/lingo-gr.cpp" break; case 110: /* simpleexprnoparens: ID '(' exprlist ')' */ -#line 455 "engines/director/lingo/lingo-gr.y" +#line 456 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new FuncNode((yyvsp[-3].s), (yyvsp[-1].nodelist)); } #line 2433 "engines/director/lingo/lingo-gr.cpp" break; case 113: /* var: ID */ -#line 460 "engines/director/lingo/lingo-gr.y" +#line 461 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new VarNode((yyvsp[0].s)); } #line 2439 "engines/director/lingo/lingo-gr.cpp" break; case 117: /* simpleexpr: '(' expr ')' */ -#line 471 "engines/director/lingo/lingo-gr.y" +#line 472 "engines/director/lingo/lingo-gr.y" { (yyval.node) = (yyvsp[-1].node); } #line 2445 "engines/director/lingo/lingo-gr.cpp" break; case 118: /* list: '[' exprlist ']' */ -#line 474 "engines/director/lingo/lingo-gr.y" +#line 475 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new ListNode((yyvsp[-1].nodelist)); } #line 2451 "engines/director/lingo/lingo-gr.cpp" break; case 119: /* list: '[' ':' ']' */ -#line 475 "engines/director/lingo/lingo-gr.y" +#line 476 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new PropListNode(new NodeList); } #line 2457 "engines/director/lingo/lingo-gr.cpp" break; case 120: /* list: '[' proplist ']' */ -#line 476 "engines/director/lingo/lingo-gr.y" +#line 477 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new PropListNode((yyvsp[-1].nodelist)); } #line 2463 "engines/director/lingo/lingo-gr.cpp" break; case 121: /* proplist: proppair */ -#line 479 "engines/director/lingo/lingo-gr.y" +#line 480 "engines/director/lingo/lingo-gr.y" { NodeList *list = new NodeList; list->push_back((yyvsp[0].node)); @@ -2472,7 +2472,7 @@ yyreduce: break; case 122: /* proplist: proplist ',' proppair */ -#line 483 "engines/director/lingo/lingo-gr.y" +#line 484 "engines/director/lingo/lingo-gr.y" { (yyvsp[-2].nodelist)->push_back((yyvsp[0].node)); (yyval.nodelist) = (yyvsp[-2].nodelist); } @@ -2480,139 +2480,139 @@ yyreduce: break; case 123: /* proppair: tSYMBOL ':' expr */ -#line 488 "engines/director/lingo/lingo-gr.y" +#line 489 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); } #line 2486 "engines/director/lingo/lingo-gr.cpp" break; case 124: /* proppair: ID ':' expr */ -#line 489 "engines/director/lingo/lingo-gr.y" +#line 490 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new PropPairNode(new SymbolNode((yyvsp[-2].s)), (yyvsp[0].node)); } #line 2492 "engines/director/lingo/lingo-gr.cpp" break; case 125: /* proppair: tSTRING ':' expr */ -#line 490 "engines/director/lingo/lingo-gr.y" +#line 491 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new PropPairNode(new StringNode((yyvsp[-2].s)), (yyvsp[0].node)); } #line 2498 "engines/director/lingo/lingo-gr.cpp" break; case 126: /* expr: simpleexpr */ -#line 493 "engines/director/lingo/lingo-gr.y" +#line 494 "engines/director/lingo/lingo-gr.y" { (yyval.node) = (yyvsp[0].node); } #line 2504 "engines/director/lingo/lingo-gr.cpp" break; case 127: /* expr: expr '+' expr */ -#line 494 "engines/director/lingo/lingo-gr.y" +#line 495 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new BinaryOpNode(LC::c_add, (yyvsp[-2].node), (yyvsp[0].node)); } #line 2510 "engines/director/lingo/lingo-gr.cpp" break; case 128: /* expr: expr '-' expr */ -#line 495 "engines/director/lingo/lingo-gr.y" +#line 496 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new BinaryOpNode(LC::c_sub, (yyvsp[-2].node), (yyvsp[0].node)); } #line 2516 "engines/director/lingo/lingo-gr.cpp" break; case 129: /* expr: expr '*' expr */ -#line 496 "engines/director/lingo/lingo-gr.y" +#line 497 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new BinaryOpNode(LC::c_mul, (yyvsp[-2].node), (yyvsp[0].node)); } #line 2522 "engines/director/lingo/lingo-gr.cpp" break; case 130: /* expr: expr '/' expr */ -#line 497 "engines/director/lingo/lingo-gr.y" +#line 498 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new BinaryOpNode(LC::c_div, (yyvsp[-2].node), (yyvsp[0].node)); } #line 2528 "engines/director/lingo/lingo-gr.cpp" break; case 131: /* expr: expr tMOD expr */ -#line 498 "engines/director/lingo/lingo-gr.y" +#line 499 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new BinaryOpNode(LC::c_mod, (yyvsp[-2].node), (yyvsp[0].node)); } #line 2534 "engines/director/lingo/lingo-gr.cpp" break; case 132: /* expr: expr '>' expr */ -#line 499 "engines/director/lingo/lingo-gr.y" +#line 500 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new BinaryOpNode(LC::c_gt, (yyvsp[-2].node), (yyvsp[0].node)); } #line 2540 "engines/director/lingo/lingo-gr.cpp" break; case 133: /* expr: expr '<' expr */ -#line 500 "engines/director/lingo/lingo-gr.y" +#line 501 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new BinaryOpNode(LC::c_lt, (yyvsp[-2].node), (yyvsp[0].node)); } #line 2546 "engines/director/lingo/lingo-gr.cpp" break; case 134: /* expr: expr tEQ expr */ -#line 501 "engines/director/lingo/lingo-gr.y" +#line 502 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new BinaryOpNode(LC::c_eq, (yyvsp[-2].node), (yyvsp[0].node)); } #line 2552 "engines/director/lingo/lingo-gr.cpp" break; case 135: /* expr: expr tNEQ expr */ -#line 502 "engines/director/lingo/lingo-gr.y" +#line 503 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new BinaryOpNode(LC::c_neq, (yyvsp[-2].node), (yyvsp[0].node)); } #line 2558 "engines/director/lingo/lingo-gr.cpp" break; case 136: /* expr: expr tGE expr */ -#line 503 "engines/director/lingo/lingo-gr.y" +#line 504 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new BinaryOpNode(LC::c_ge, (yyvsp[-2].node), (yyvsp[0].node)); } #line 2564 "engines/director/lingo/lingo-gr.cpp" break; case 137: /* expr: expr tLE expr */ -#line 504 "engines/director/lingo/lingo-gr.y" +#line 505 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new BinaryOpNode(LC::c_le, (yyvsp[-2].node), (yyvsp[0].node)); } #line 2570 "engines/director/lingo/lingo-gr.cpp" break; case 138: /* expr: expr tAND expr */ -#line 505 "engines/director/lingo/lingo-gr.y" +#line 506 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new BinaryOpNode(LC::c_and, (yyvsp[-2].node), (yyvsp[0].node)); } #line 2576 "engines/director/lingo/lingo-gr.cpp" break; case 139: /* expr: expr tOR expr */ -#line 506 "engines/director/lingo/lingo-gr.y" +#line 507 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new BinaryOpNode(LC::c_or, (yyvsp[-2].node), (yyvsp[0].node)); } #line 2582 "engines/director/lingo/lingo-gr.cpp" break; case 140: /* expr: expr '&' expr */ -#line 507 "engines/director/lingo/lingo-gr.y" +#line 508 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new BinaryOpNode(LC::c_ampersand, (yyvsp[-2].node), (yyvsp[0].node)); } #line 2588 "engines/director/lingo/lingo-gr.cpp" break; case 141: /* expr: expr tCONCAT expr */ -#line 508 "engines/director/lingo/lingo-gr.y" +#line 509 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new BinaryOpNode(LC::c_concat, (yyvsp[-2].node), (yyvsp[0].node)); } #line 2594 "engines/director/lingo/lingo-gr.cpp" break; case 142: /* expr: expr tCONTAINS expr */ -#line 509 "engines/director/lingo/lingo-gr.y" +#line 510 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new BinaryOpNode(LC::c_contains, (yyvsp[-2].node), (yyvsp[0].node)); } #line 2600 "engines/director/lingo/lingo-gr.cpp" break; case 143: /* expr: expr tSTARTS expr */ -#line 510 "engines/director/lingo/lingo-gr.y" +#line 511 "engines/director/lingo/lingo-gr.y" { (yyval.node) = new BinaryOpNode(LC::c_starts, (yyvsp[-2].node), (yyvsp[0].node)); } #line 2606 "engines/director/lingo/lingo-gr.cpp" break; case 144: /* exprlist: %empty */ -#line 513 "engines/director/lingo/lingo-gr.y" +#line 514 "engines/director/lingo/lingo-gr.y" { (yyval.nodelist) = new NodeList; } #line 2612 "engines/director/lingo/lingo-gr.cpp" break; case 146: /* nonemptyexprlist: expr */ -#line 517 "engines/director/lingo/lingo-gr.y" +#line 518 "engines/director/lingo/lingo-gr.y" { NodeList *list = new NodeList; list->push_back((yyvsp[0].node)); @@ -2621,7 +2621,7 @@ yyreduce: break; case 147: /* nonemptyexprlist: nonemptyexprlist ',' expr */ -#line 521 "engines/director/lingo/lingo-gr.y" +#line 522 "engines/director/lingo/lingo-gr.y" { (yyvsp[-2].nodelist)->push_back((yyvsp[0].node)); (yyval.nodelist) = (yyvsp[-2].nodelist); } @@ -2828,7 +2828,7 @@ yyreturn: return yyresult; } -#line 526 "engines/director/lingo/lingo-gr.y" +#line 527 "engines/director/lingo/lingo-gr.y" int yyreport_syntax_error(const yypcontext_t *ctx) { diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y index 52ce924d557..447ae6257a3 100644 --- a/engines/director/lingo/lingo-gr.y +++ b/engines/director/lingo/lingo-gr.y @@ -294,7 +294,7 @@ ID: tVARID | tDOWN { $$ = new Common::String("down"); } // tENDCLAUSE // tELSE - | tEXIT { $$ = new Common::String("exit"); } + // | tEXIT { $$ = new Common::String("exit"); } // tFACTORY | tFIELD { $$ = new Common::String("field"); } // | tGLOBAL { $$ = new Common::String("global"); } @@ -372,6 +372,7 @@ proc: ID '(' exprlist[args] ')' '\n' { $$ = new CmdNode($ID, $args); } | tPUT exprlist[args] '\n' { $$ = new CmdNode(new Common::String("put"), $args); } | tNEXT tREPEAT '\n' { $$ = new NextRepeatNode(); } | tEXIT tREPEAT '\n' { $$ = new ExitRepeatNode(); } + | tEXIT '\n' { $$ = new ExitNode(); } ; asgn: tPUT expr tINTO varorchunk '\n' { $$ = new PutIntoNode($expr, $varorchunk); }