diff --git a/engines/director/lingo/lingo-gr.cpp b/engines/director/lingo/lingo-gr.cpp index 3968b5607ace..d1262f1baabb 100644 --- a/engines/director/lingo/lingo-gr.cpp +++ b/engines/director/lingo/lingo-gr.cpp @@ -420,14 +420,14 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 51 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 298 +#define YYLAST 255 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 51 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 21 /* YYNRULES -- Number of rules. */ -#define YYNRULES 76 +#define YYNRULES 75 /* YYNRULES -- Number of states. */ #define YYNSTATES 155 @@ -478,59 +478,59 @@ static const yytype_uint8 yytranslate[] = YYRHS. */ static const yytype_uint16 yyprhs[] = { - 0, 0, 3, 7, 10, 12, 13, 15, 17, 19, - 21, 23, 25, 26, 31, 36, 41, 43, 45, 53, - 64, 73, 85, 98, 100, 104, 108, 111, 115, 117, - 118, 119, 120, 123, 126, 128, 130, 132, 136, 140, - 144, 148, 152, 156, 160, 164, 168, 171, 174, 178, - 184, 187, 190, 193, 195, 197, 200, 203, 206, 209, - 213, 216, 220, 223, 226, 228, 232, 235, 239, 240, - 247, 248, 250, 254, 259, 260, 262 + 0, 0, 3, 7, 9, 10, 12, 14, 16, 18, + 20, 22, 23, 28, 33, 38, 40, 42, 50, 61, + 70, 82, 95, 97, 101, 105, 108, 112, 114, 115, + 116, 117, 120, 123, 125, 127, 129, 133, 137, 141, + 145, 149, 153, 157, 161, 165, 168, 171, 175, 181, + 184, 187, 190, 192, 194, 197, 200, 203, 206, 210, + 213, 217, 220, 223, 225, 229, 232, 236, 237, 245, + 246, 248, 252, 257, 258, 260 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { - 52, 0, -1, 53, 45, 52, -1, 53, 52, -1, - 53, -1, -1, 68, -1, 64, -1, 54, -1, 55, - -1, 63, -1, 1, -1, -1, 26, 63, 17, 7, - -1, 28, 7, 39, 63, -1, 28, 7, 30, 63, - -1, 63, -1, 64, -1, 59, 56, 29, 62, 61, - 12, 16, -1, 59, 56, 29, 62, 61, 11, 62, - 61, 12, 16, -1, 57, 46, 56, 47, 62, 61, - 12, 27, -1, 58, 39, 63, 61, 30, 63, 61, - 62, 61, 12, 27, -1, 58, 39, 63, 61, 10, - 30, 63, 61, 62, 61, 12, 27, -1, 63, -1, - 63, 39, 63, -1, 46, 56, 47, -1, 27, 32, - -1, 27, 31, 7, -1, 16, -1, -1, -1, -1, - 62, 45, -1, 62, 55, -1, 5, -1, 7, -1, - 54, -1, 63, 40, 63, -1, 63, 41, 63, -1, - 63, 42, 63, -1, 63, 43, 63, -1, 63, 48, - 63, -1, 63, 49, 63, -1, 63, 38, 63, -1, - 63, 33, 63, -1, 63, 34, 63, -1, 40, 63, - -1, 41, 63, -1, 46, 63, 47, -1, 7, 60, - 46, 71, 47, -1, 20, 8, -1, 21, 7, -1, - 26, 63, -1, 65, -1, 13, -1, 15, 18, -1, - 15, 23, -1, 15, 25, -1, 15, 66, -1, 15, - 66, 67, -1, 15, 67, -1, 30, 14, 8, -1, - 14, 8, -1, 30, 8, -1, 8, -1, 24, 22, - 8, -1, 22, 8, -1, 30, 22, 8, -1, -1, - 19, 7, 69, 60, 70, 62, -1, -1, 7, -1, - 70, 50, 7, -1, 70, 50, 45, 7, -1, -1, - 63, -1, 71, 50, 63, -1 + 52, 0, -1, 53, 45, 52, -1, 53, -1, -1, + 68, -1, 64, -1, 54, -1, 55, -1, 63, -1, + 1, -1, -1, 26, 63, 17, 7, -1, 28, 7, + 39, 63, -1, 28, 7, 30, 63, -1, 63, -1, + 64, -1, 59, 56, 29, 62, 61, 12, 16, -1, + 59, 56, 29, 62, 61, 11, 62, 61, 12, 16, + -1, 57, 46, 56, 47, 62, 61, 12, 27, -1, + 58, 39, 63, 61, 30, 63, 61, 62, 61, 12, + 27, -1, 58, 39, 63, 61, 10, 30, 63, 61, + 62, 61, 12, 27, -1, 63, -1, 63, 39, 63, + -1, 46, 56, 47, -1, 27, 32, -1, 27, 31, + 7, -1, 16, -1, -1, -1, -1, 62, 45, -1, + 62, 55, -1, 5, -1, 7, -1, 54, -1, 63, + 40, 63, -1, 63, 41, 63, -1, 63, 42, 63, + -1, 63, 43, 63, -1, 63, 48, 63, -1, 63, + 49, 63, -1, 63, 38, 63, -1, 63, 33, 63, + -1, 63, 34, 63, -1, 40, 63, -1, 41, 63, + -1, 46, 63, 47, -1, 7, 60, 46, 71, 47, + -1, 20, 8, -1, 21, 7, -1, 26, 63, -1, + 65, -1, 13, -1, 15, 18, -1, 15, 23, -1, + 15, 25, -1, 15, 66, -1, 15, 66, 67, -1, + 15, 67, -1, 30, 14, 8, -1, 14, 8, -1, + 30, 8, -1, 8, -1, 24, 22, 8, -1, 22, + 8, -1, 30, 22, 8, -1, -1, 19, 7, 69, + 60, 70, 45, 62, -1, -1, 7, -1, 70, 50, + 7, -1, 70, 50, 45, 7, -1, -1, 63, -1, + 71, 50, 63, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 92, 92, 93, 94, 97, 98, 99, 100, 101, - 102, 103, 104, 107, 113, 119, 127, 128, 129, 135, - 147, 158, 174, 188, 189, 190, 192, 194, 200, 202, - 204, 206, 207, 208, 211, 216, 219, 220, 221, 222, - 223, 224, 225, 226, 227, 228, 229, 230, 231, 234, - 240, 241, 242, 243, 244, 255, 256, 257, 258, 263, - 269, 276, 277, 278, 279, 282, 283, 284, 312, 312, - 318, 319, 320, 321, 324, 325, 326 + 0, 92, 92, 93, 96, 97, 98, 99, 100, 101, + 102, 103, 106, 112, 118, 126, 127, 128, 134, 146, + 157, 173, 187, 188, 189, 191, 193, 199, 201, 203, + 205, 206, 207, 210, 215, 218, 219, 220, 221, 222, + 223, 224, 225, 226, 227, 228, 229, 230, 233, 239, + 240, 241, 242, 243, 254, 255, 256, 257, 262, 268, + 275, 276, 277, 278, 281, 282, 283, 311, 311, 317, + 318, 319, 320, 323, 324, 325 }; #endif @@ -569,27 +569,27 @@ static const yytype_uint16 yytoknum[] = /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 51, 52, 52, 52, 53, 53, 53, 53, 53, - 53, 53, 53, 54, 54, 54, 55, 55, 55, 55, - 55, 55, 55, 56, 56, 56, 57, 58, 59, 60, - 61, 62, 62, 62, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 64, - 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, - 65, 66, 66, 66, 66, 67, 67, 67, 69, 68, - 70, 70, 70, 70, 71, 71, 71 + 0, 51, 52, 52, 53, 53, 53, 53, 53, 53, + 53, 53, 54, 54, 54, 55, 55, 55, 55, 55, + 55, 55, 56, 56, 56, 57, 58, 59, 60, 61, + 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, + 63, 63, 63, 63, 63, 63, 63, 63, 64, 64, + 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, + 66, 66, 66, 66, 67, 67, 67, 69, 68, 70, + 70, 70, 70, 71, 71, 71 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { - 0, 2, 3, 2, 1, 0, 1, 1, 1, 1, - 1, 1, 0, 4, 4, 4, 1, 1, 7, 10, - 8, 11, 12, 1, 3, 3, 2, 3, 1, 0, - 0, 0, 2, 2, 1, 1, 1, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 2, 2, 3, 5, - 2, 2, 2, 1, 1, 2, 2, 2, 2, 3, - 2, 3, 2, 2, 1, 3, 2, 3, 0, 6, - 0, 1, 3, 4, 0, 1, 3 + 0, 2, 3, 1, 0, 1, 1, 1, 1, 1, + 1, 0, 4, 4, 4, 1, 1, 7, 10, 8, + 11, 12, 1, 3, 3, 2, 3, 1, 0, 0, + 0, 2, 2, 1, 1, 1, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 2, 2, 3, 5, 2, + 2, 2, 1, 1, 2, 2, 2, 2, 3, 2, + 3, 2, 2, 1, 3, 2, 3, 0, 7, 0, + 1, 3, 4, 0, 1, 3 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -597,134 +597,126 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 0, 11, 34, 35, 54, 0, 28, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 8, 9, - 0, 0, 0, 10, 7, 53, 6, 0, 64, 0, - 55, 0, 56, 0, 57, 0, 58, 60, 68, 50, - 51, 35, 0, 36, 52, 0, 26, 0, 46, 47, - 0, 1, 0, 3, 0, 0, 0, 0, 23, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 74, 62, - 66, 0, 63, 0, 0, 0, 59, 29, 0, 0, - 27, 0, 0, 48, 2, 0, 30, 0, 0, 31, - 0, 44, 45, 43, 37, 38, 39, 40, 41, 42, - 75, 0, 65, 61, 67, 70, 13, 15, 14, 31, - 0, 25, 30, 24, 49, 0, 71, 31, 30, 0, - 0, 32, 33, 0, 16, 17, 76, 0, 69, 0, - 0, 30, 31, 0, 72, 0, 0, 30, 31, 30, - 18, 73, 20, 31, 30, 0, 30, 0, 0, 0, - 0, 19, 0, 21, 22 + 0, 10, 33, 34, 53, 0, 27, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 35, 8, + 0, 0, 0, 9, 6, 52, 5, 0, 63, 0, + 54, 0, 55, 0, 56, 0, 57, 59, 67, 49, + 50, 34, 0, 35, 51, 0, 25, 0, 45, 46, + 0, 1, 0, 0, 0, 0, 0, 22, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 73, 61, 65, + 0, 62, 0, 0, 0, 58, 28, 0, 0, 26, + 0, 0, 47, 2, 0, 29, 0, 0, 30, 0, + 43, 44, 42, 36, 37, 38, 39, 40, 41, 74, + 0, 64, 60, 66, 69, 12, 14, 13, 30, 0, + 24, 29, 23, 48, 0, 70, 0, 29, 0, 0, + 31, 32, 0, 15, 16, 75, 30, 0, 0, 0, + 29, 30, 0, 68, 71, 0, 0, 29, 30, 29, + 17, 72, 19, 30, 29, 0, 29, 0, 0, 0, + 0, 18, 0, 20, 21 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { - -1, 16, 17, 43, 122, 57, 20, 21, 22, 27, - 110, 112, 124, 125, 25, 36, 37, 26, 77, 117, - 101 + -1, 16, 17, 43, 121, 56, 20, 21, 22, 27, + 109, 111, 123, 124, 25, 36, 37, 26, 76, 116, + 100 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -98 +#define YYPACT_NINF -106 static const yytype_int16 yypact[] = { - 72, -98, -98, -25, -98, 208, -98, 38, -4, 43, - -2, 74, 67, -2, -2, -2, 34, 121, 159, -98, - 32, 41, 118, 237, -98, -98, -98, 40, -98, 76, - -98, 86, -98, 79, -98, 61, 27, -98, -98, -98, - -98, -98, -2, -98, 172, 89, -98, -14, -1, -1, - 213, -98, 72, -98, 118, -2, 118, 78, 225, -2, - -2, -2, -2, -2, -2, -2, -2, -2, -2, -98, - -98, 95, -98, 100, 101, 88, -98, -98, 172, 104, - -98, -2, -2, -98, -98, 69, 237, 77, 201, -98, - -2, 237, 237, 237, 249, 249, -1, -1, 237, 237, - 237, -19, -98, -98, -98, 107, -98, 237, 237, -98, - -3, -98, 158, 237, -98, -2, -98, 81, 158, 97, - -2, -98, -98, 18, 237, -98, 237, -5, 158, 117, - -2, 237, -98, 103, -98, 125, 106, 237, -98, 158, - -98, -98, -98, -98, 158, 123, 158, 126, 127, 133, - 112, -98, 124, -98, -98 + 71, -106, -106, -39, -106, 165, -106, 22, 3, 26, + 98, 17, 30, 98, 98, 98, 44, 24, 1, -106, + 27, 31, 140, 194, -106, -106, -106, 28, -106, 67, + -106, 69, -106, 57, -106, 13, 6, -106, -106, -106, + -106, -106, 98, -106, 129, 75, -106, -21, 206, 206, + 170, -106, 71, 140, 98, 140, 54, 182, 98, 98, + 98, 98, 98, 98, 98, 98, 98, 98, -106, -106, + 77, -106, 80, 85, 72, -106, -106, 129, 88, -106, + 98, 98, -106, -106, 49, 194, 53, 158, -106, 98, + 194, 194, 194, 116, 116, 206, 206, 194, 194, 194, + -30, -106, -106, -106, 94, -106, 194, 194, -106, -7, + -106, 115, 194, -106, 98, -106, -26, 115, 74, 98, + -106, -106, 39, 194, -106, 194, -106, -5, 90, 98, + 194, -106, 91, 115, -106, 99, 81, 194, -106, 115, + -106, -106, -106, -106, 115, 97, 115, 101, 102, 103, + 83, -106, 96, -106, -106 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { - -98, -9, -98, 1, 6, -45, -98, -98, -98, 73, - -42, -97, 0, 19, -98, -98, 116, -98, -98, -98, - -98 + -106, 73, -106, 4, 5, -8, -106, -106, -106, 45, + -105, -100, 0, 16, -106, -106, 104, -106, -106, -106, + -106 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ -#define YYTABLE_NINF -37 +#define YYTABLE_NINF -29 static const yytype_int16 yytable[] = { - 23, 18, 134, 2, 39, 41, 19, 119, 53, 85, - 44, 87, 118, 48, 49, 50, 81, 23, 18, 24, - 128, -29, 58, 19, 42, 82, 12, 120, 114, 132, - 133, 115, 59, 60, 51, 139, 24, 61, 13, 14, - 135, 144, 78, 84, 15, 38, 146, 66, 67, 31, - 40, 33, 23, 18, 58, 86, 88, 75, 19, 91, - 92, 93, 94, 95, 96, 97, 98, 99, 100, 72, - 123, 24, -5, 1, 47, 73, 129, 2, 54, 3, - 55, 107, 108, 74, 69, 4, 68, 5, 6, 138, - 113, 7, 8, 9, 70, 143, 80, 145, 10, 11, - 12, 71, 147, 102, 149, 45, 46, 89, 103, 104, - 74, 106, 13, 14, 116, 126, 109, -5, 15, 140, - 131, -4, 1, 2, 111, 41, 2, 130, 3, 136, - 137, 127, 141, 142, 4, 148, 5, 6, 150, 153, - 7, 8, 9, 151, 42, 152, 12, 10, 11, 12, - 105, 154, 76, 0, 0, 0, 0, 0, 13, 14, - 0, 13, 14, 2, 56, 3, 52, 15, 0, 0, - 0, 4, 0, 5, 6, 0, 0, 0, 8, 9, - 0, 0, 0, 0, 10, 11, 12, 0, 0, 79, - 0, 0, -36, -36, 0, 0, 0, -36, 13, 14, - 0, -36, -36, 121, 15, 59, 60, -36, -36, 0, - 61, 0, 62, 63, 64, 65, 28, 0, 0, 0, - 66, 67, 29, 0, 0, 0, 30, 0, 0, 0, - 31, 32, 33, 34, 59, 60, 0, 0, 35, 61, - 90, 62, 63, 64, 65, 0, 59, 60, 83, 66, - 67, 61, 0, 62, 63, 64, 65, 0, 59, 60, - 83, 66, 67, 61, 90, 62, 63, 64, 65, 0, - 59, 60, 0, 66, 67, 61, 0, 62, 63, 64, - 65, 0, 59, 60, 0, 66, 67, 61, 0, 0, - 0, 64, 65, 0, 0, 0, 0, 66, 67 + 23, -7, 134, 118, 18, 19, 122, -28, 117, 80, + 44, 39, 128, 48, 49, 50, 24, 113, 81, 126, + 114, 71, 57, 119, 127, 138, 133, 72, 31, 38, + 33, 139, 143, 40, 145, 73, 74, 47, 144, 147, + 135, 149, 77, 146, 51, 84, -7, 86, 45, 46, + 131, 132, 23, 57, 85, 87, 18, 19, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99, 24, 52, + 54, -4, 1, 53, 67, 68, 2, 69, 3, 70, + 106, 107, 79, 88, 4, 101, 5, 6, 102, 112, + 7, 8, 9, 103, 73, 105, 108, 10, 11, 12, + 110, 115, 136, 2, 129, 41, 141, 140, 142, 148, + 153, 13, 14, 150, 125, 152, -4, 15, 151, 130, + 2, 104, 3, 154, 42, 83, 12, 0, 4, 137, + 5, 6, 0, 0, 0, 8, 9, 0, 13, 14, + 75, 10, 11, 12, 15, 2, 78, 41, 0, 58, + 59, 0, 0, 0, 60, 13, 14, 0, 63, 64, + 120, 15, 58, 59, 65, 66, 42, 60, 12, 61, + 62, 63, 64, 28, 0, 0, 0, 65, 66, 29, + 13, 14, 0, 30, 0, 0, 55, 31, 32, 33, + 34, 58, 59, 0, 0, 35, 60, 89, 61, 62, + 63, 64, 0, 58, 59, 82, 65, 66, 60, 0, + 61, 62, 63, 64, 0, 58, 59, 82, 65, 66, + 60, 89, 61, 62, 63, 64, 0, 58, 59, 0, + 65, 66, 60, 0, 61, 62, 63, 64, 0, 58, + 59, 0, 65, 66, 60, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 65, 66 }; static const yytype_int16 yycheck[] = { - 0, 0, 7, 5, 8, 7, 0, 10, 17, 54, - 10, 56, 109, 13, 14, 15, 30, 17, 17, 0, - 117, 46, 22, 17, 26, 39, 28, 30, 47, 11, - 12, 50, 33, 34, 0, 132, 17, 38, 40, 41, - 45, 138, 42, 52, 46, 7, 143, 48, 49, 22, - 7, 24, 52, 52, 54, 55, 56, 30, 52, 59, - 60, 61, 62, 63, 64, 65, 66, 67, 68, 8, - 112, 52, 0, 1, 7, 14, 118, 5, 46, 7, - 39, 81, 82, 22, 8, 13, 46, 15, 16, 131, - 90, 19, 20, 21, 8, 137, 7, 139, 26, 27, - 28, 22, 144, 8, 146, 31, 32, 29, 8, 8, - 22, 7, 40, 41, 7, 115, 47, 45, 46, 16, - 120, 0, 1, 5, 47, 7, 5, 30, 7, 12, - 130, 50, 7, 27, 13, 12, 15, 16, 12, 27, - 19, 20, 21, 16, 26, 12, 28, 26, 27, 28, - 77, 27, 36, -1, -1, -1, -1, -1, 40, 41, - -1, 40, 41, 5, 46, 7, 45, 46, -1, -1, - -1, 13, -1, 15, 16, -1, -1, -1, 20, 21, - -1, -1, -1, -1, 26, 27, 28, -1, -1, 17, - -1, -1, 33, 34, -1, -1, -1, 38, 40, 41, - -1, 42, 43, 45, 46, 33, 34, 48, 49, -1, - 38, -1, 40, 41, 42, 43, 8, -1, -1, -1, - 48, 49, 14, -1, -1, -1, 18, -1, -1, -1, - 22, 23, 24, 25, 33, 34, -1, -1, 30, 38, - 39, 40, 41, 42, 43, -1, 33, 34, 47, 48, - 49, 38, -1, 40, 41, 42, 43, -1, 33, 34, - 47, 48, 49, 38, 39, 40, 41, 42, 43, -1, - 33, 34, -1, 48, 49, 38, -1, 40, 41, 42, - 43, -1, 33, 34, -1, 48, 49, 38, -1, -1, - -1, 42, 43, -1, -1, -1, -1, 48, 49 + 0, 0, 7, 10, 0, 0, 111, 46, 108, 30, + 10, 8, 117, 13, 14, 15, 0, 47, 39, 45, + 50, 8, 22, 30, 50, 130, 126, 14, 22, 7, + 24, 131, 137, 7, 139, 22, 30, 7, 138, 144, + 45, 146, 42, 143, 0, 53, 45, 55, 31, 32, + 11, 12, 52, 53, 54, 55, 52, 52, 58, 59, + 60, 61, 62, 63, 64, 65, 66, 67, 52, 45, + 39, 0, 1, 46, 46, 8, 5, 8, 7, 22, + 80, 81, 7, 29, 13, 8, 15, 16, 8, 89, + 19, 20, 21, 8, 22, 7, 47, 26, 27, 28, + 47, 7, 12, 5, 30, 7, 7, 16, 27, 12, + 27, 40, 41, 12, 114, 12, 45, 46, 16, 119, + 5, 76, 7, 27, 26, 52, 28, -1, 13, 129, + 15, 16, -1, -1, -1, 20, 21, -1, 40, 41, + 36, 26, 27, 28, 46, 5, 17, 7, -1, 33, + 34, -1, -1, -1, 38, 40, 41, -1, 42, 43, + 45, 46, 33, 34, 48, 49, 26, 38, 28, 40, + 41, 42, 43, 8, -1, -1, -1, 48, 49, 14, + 40, 41, -1, 18, -1, -1, 46, 22, 23, 24, + 25, 33, 34, -1, -1, 30, 38, 39, 40, 41, + 42, 43, -1, 33, 34, 47, 48, 49, 38, -1, + 40, 41, 42, 43, -1, 33, 34, 47, 48, 49, + 38, 39, 40, 41, 42, 43, -1, 33, 34, -1, + 48, 49, 38, -1, 40, 41, 42, 43, -1, 33, + 34, -1, 48, 49, 38, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 48, 49 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -736,15 +728,15 @@ static const yytype_uint8 yystos[] = 57, 58, 59, 63, 64, 65, 68, 60, 8, 14, 18, 22, 23, 24, 25, 30, 66, 67, 7, 8, 7, 7, 26, 54, 63, 31, 32, 7, 63, 63, - 63, 0, 45, 52, 46, 39, 46, 56, 63, 33, - 34, 38, 40, 41, 42, 43, 48, 49, 46, 8, - 8, 22, 8, 14, 22, 30, 67, 69, 63, 17, - 7, 30, 39, 47, 52, 56, 63, 56, 63, 29, - 39, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 71, 8, 8, 8, 60, 7, 63, 63, 47, - 61, 47, 62, 63, 47, 50, 7, 70, 62, 10, - 30, 45, 55, 61, 63, 64, 63, 50, 62, 61, - 30, 63, 11, 12, 7, 45, 12, 63, 61, 62, + 63, 0, 45, 46, 39, 46, 56, 63, 33, 34, + 38, 40, 41, 42, 43, 48, 49, 46, 8, 8, + 22, 8, 14, 22, 30, 67, 69, 63, 17, 7, + 30, 39, 47, 52, 56, 63, 56, 63, 29, 39, + 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, + 71, 8, 8, 8, 60, 7, 63, 63, 47, 61, + 47, 62, 63, 47, 50, 7, 70, 62, 10, 30, + 45, 55, 61, 63, 64, 63, 45, 50, 61, 30, + 63, 11, 12, 62, 7, 45, 12, 63, 61, 62, 16, 7, 27, 61, 62, 61, 62, 61, 12, 61, 12, 16, 12, 27, 27 }; @@ -1560,18 +1552,18 @@ yyparse () YY_REDUCE_PRINT (yyn); switch (yyn) { - case 8: -#line 100 "engines/director/lingo/lingo-gr.y" + case 7: +#line 99 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_xpop); ;} break; - case 11: -#line 103 "engines/director/lingo/lingo-gr.y" + case 10: +#line 102 "engines/director/lingo/lingo-gr.y" { yyerrok; ;} break; - case 13: -#line 107 "engines/director/lingo/lingo-gr.y" + case 12: +#line 106 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_varpush); g_lingo->codeString((yyvsp[(4) - (4)].s)->c_str()); @@ -1580,8 +1572,8 @@ yyparse () delete (yyvsp[(4) - (4)].s); ;} break; - case 14: -#line 113 "engines/director/lingo/lingo-gr.y" + case 13: +#line 112 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_varpush); g_lingo->codeString((yyvsp[(2) - (4)].s)->c_str()); @@ -1590,8 +1582,8 @@ yyparse () delete (yyvsp[(2) - (4)].s); ;} break; - case 15: -#line 119 "engines/director/lingo/lingo-gr.y" + case 14: +#line 118 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_varpush); g_lingo->codeString((yyvsp[(2) - (4)].s)->c_str()); @@ -1600,13 +1592,13 @@ yyparse () delete (yyvsp[(2) - (4)].s); ;} break; - case 16: -#line 127 "engines/director/lingo/lingo-gr.y" + case 15: +#line 126 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_xpop); ;} break; - case 18: -#line 129 "engines/director/lingo/lingo-gr.y" + case 17: +#line 128 "engines/director/lingo/lingo-gr.y" { inst then = 0, end = 0; WRITE_UINT32(&then, (yyvsp[(4) - (7)].code)); @@ -1615,8 +1607,8 @@ yyparse () (*g_lingo->_currentScript)[(yyvsp[(1) - (7)].code) + 3] = end; ;} break; - case 19: -#line 135 "engines/director/lingo/lingo-gr.y" + case 18: +#line 134 "engines/director/lingo/lingo-gr.y" { inst then = 0, else1 = 0, end = 0; WRITE_UINT32(&then, (yyvsp[(4) - (10)].code)); @@ -1627,8 +1619,8 @@ yyparse () (*g_lingo->_currentScript)[(yyvsp[(1) - (10)].code) + 3] = end; ;} break; - case 20: -#line 147 "engines/director/lingo/lingo-gr.y" + case 19: +#line 146 "engines/director/lingo/lingo-gr.y" { inst body = 0, end = 0; WRITE_UINT32(&body, (yyvsp[(5) - (8)].code)); @@ -1637,8 +1629,8 @@ yyparse () (*g_lingo->_currentScript)[(yyvsp[(1) - (8)].code) + 2] = end; ;} break; - case 21: -#line 158 "engines/director/lingo/lingo-gr.y" + case 20: +#line 157 "engines/director/lingo/lingo-gr.y" { inst init = 0, finish = 0, body = 0, end = 0, inc = 0; WRITE_UINT32(&init, (yyvsp[(3) - (11)].code)); @@ -1653,8 +1645,8 @@ yyparse () (*g_lingo->_currentScript)[(yyvsp[(1) - (11)].code) + 5] = end; ;} break; - case 22: -#line 174 "engines/director/lingo/lingo-gr.y" + case 21: +#line 173 "engines/director/lingo/lingo-gr.y" { inst init = 0, finish = 0, body = 0, end = 0, inc = 0; WRITE_UINT32(&init, (yyvsp[(3) - (12)].code)); @@ -1669,23 +1661,23 @@ yyparse () (*g_lingo->_currentScript)[(yyvsp[(1) - (12)].code) + 5] = end; ;} break; - case 23: -#line 188 "engines/director/lingo/lingo-gr.y" + case 22: +#line 187 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(STOP); ;} break; - case 24: -#line 189 "engines/director/lingo/lingo-gr.y" + case 23: +#line 188 "engines/director/lingo/lingo-gr.y" { g_lingo->code2(g_lingo->c_eq, STOP); ;} break; - case 26: -#line 192 "engines/director/lingo/lingo-gr.y" + case 25: +#line 191 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->code3(g_lingo->c_repeatwhilecode, STOP, STOP); ;} break; - case 27: -#line 194 "engines/director/lingo/lingo-gr.y" + case 26: +#line 193 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->code3(g_lingo->c_repeatwithcode, STOP, STOP); g_lingo->code3(STOP, STOP, STOP); @@ -1693,28 +1685,28 @@ yyparse () delete (yyvsp[(3) - (3)].s); ;} break; - case 28: -#line 200 "engines/director/lingo/lingo-gr.y" + case 27: +#line 199 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->code1(g_lingo->c_ifcode); g_lingo->code3(STOP, STOP, STOP); ;} break; - case 29: -#line 202 "engines/director/lingo/lingo-gr.y" + case 28: +#line 201 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->_currentScript->size(); ;} break; - case 30: -#line 204 "engines/director/lingo/lingo-gr.y" + case 29: +#line 203 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(STOP); (yyval.code) = g_lingo->_currentScript->size(); ;} break; - case 31: -#line 206 "engines/director/lingo/lingo-gr.y" + case 30: +#line 205 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->_currentScript->size(); ;} break; - case 34: -#line 211 "engines/director/lingo/lingo-gr.y" + case 33: +#line 210 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->code1(g_lingo->c_constpush); inst i = 0; @@ -1722,75 +1714,75 @@ yyparse () g_lingo->code1(i); ;} break; - case 35: -#line 216 "engines/director/lingo/lingo-gr.y" + case 34: +#line 215 "engines/director/lingo/lingo-gr.y" { (yyval.code) = g_lingo->codeId(*(yyvsp[(1) - (1)].s)); delete (yyvsp[(1) - (1)].s); ;} break; + case 36: +#line 219 "engines/director/lingo/lingo-gr.y" + { g_lingo->code1(g_lingo->c_add); ;} + break; + case 37: #line 220 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_add); ;} + { g_lingo->code1(g_lingo->c_sub); ;} break; case 38: #line 221 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_sub); ;} + { g_lingo->code1(g_lingo->c_mul); ;} break; case 39: #line 222 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_mul); ;} + { g_lingo->code1(g_lingo->c_div); ;} break; case 40: #line 223 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_div); ;} + { g_lingo->code1(g_lingo->c_gt); ;} break; case 41: #line 224 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_gt); ;} + { g_lingo->code1(g_lingo->c_lt); ;} break; case 42: #line 225 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_lt); ;} + { g_lingo->code1(g_lingo->c_neq); ;} break; case 43: #line 226 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_neq); ;} + { g_lingo->code1(g_lingo->c_ge); ;} break; case 44: #line 227 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_ge); ;} + { g_lingo->code1(g_lingo->c_le); ;} break; case 45: #line 228 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_le); ;} + { (yyval.code) = (yyvsp[(2) - (2)].code); ;} break; case 46: #line 229 "engines/director/lingo/lingo-gr.y" - { (yyval.code) = (yyvsp[(2) - (2)].code); ;} + { (yyval.code) = (yyvsp[(2) - (2)].code); g_lingo->code1(g_lingo->c_negate); ;} break; case 47: #line 230 "engines/director/lingo/lingo-gr.y" - { (yyval.code) = (yyvsp[(2) - (2)].code); g_lingo->code1(g_lingo->c_negate); ;} - break; - - case 48: -#line 231 "engines/director/lingo/lingo-gr.y" { (yyval.code) = (yyvsp[(2) - (3)].code); ;} break; - case 49: -#line 234 "engines/director/lingo/lingo-gr.y" + case 48: +#line 233 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_call); g_lingo->codeString((yyvsp[(1) - (5)].s)->c_str()); @@ -1799,43 +1791,43 @@ yyparse () g_lingo->code1(numpar); ;} break; + case 49: +#line 239 "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 50: #line 240 "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); ;} + { g_lingo->code1(g_lingo->c_mciwait); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); delete (yyvsp[(2) - (2)].s); ;} break; case 51: #line 241 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_mciwait); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); delete (yyvsp[(2) - (2)].s); ;} + { g_lingo->code1(g_lingo->c_printtop); ;} break; - case 52: -#line 242 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_printtop); ;} + case 53: +#line 243 "engines/director/lingo/lingo-gr.y" + { g_lingo->code1(g_lingo->c_exit); ;} break; case 54: -#line 244 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_exit); ;} +#line 254 "engines/director/lingo/lingo-gr.y" + { g_lingo->code1(g_lingo->c_gotoloop); ;} break; case 55: #line 255 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_gotoloop); ;} + { g_lingo->code1(g_lingo->c_gotonext); ;} break; case 56: #line 256 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_gotonext); ;} + { g_lingo->code1(g_lingo->c_gotoprevious); ;} break; case 57: #line 257 "engines/director/lingo/lingo-gr.y" - { g_lingo->code1(g_lingo->c_gotoprevious); ;} - break; - - case 58: -#line 258 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_goto); g_lingo->codeString((yyvsp[(2) - (2)].s)->c_str()); @@ -1843,8 +1835,8 @@ yyparse () delete (yyvsp[(2) - (2)].s); ;} break; - case 59: -#line 263 "engines/director/lingo/lingo-gr.y" + case 58: +#line 262 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_goto); g_lingo->codeString((yyvsp[(2) - (3)].s)->c_str()); @@ -1853,8 +1845,8 @@ yyparse () delete (yyvsp[(3) - (3)].s); ;} break; - case 60: -#line 269 "engines/director/lingo/lingo-gr.y" + case 59: +#line 268 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_goto); g_lingo->codeString(""); @@ -1862,9 +1854,14 @@ yyparse () delete (yyvsp[(2) - (2)].s); ;} break; + case 60: +#line 275 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = (yyvsp[(3) - (3)].s); ;} + break; + case 61: #line 276 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = (yyvsp[(3) - (3)].s); ;} + { (yyval.s) = (yyvsp[(2) - (2)].s); ;} break; case 62: @@ -1874,80 +1871,75 @@ yyparse () case 63: #line 278 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = (yyvsp[(2) - (2)].s); ;} + { (yyval.s) = (yyvsp[(1) - (1)].s); ;} break; case 64: -#line 279 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = (yyvsp[(1) - (1)].s); ;} +#line 281 "engines/director/lingo/lingo-gr.y" + { (yyval.s) = (yyvsp[(3) - (3)].s); ;} break; case 65: #line 282 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = (yyvsp[(3) - (3)].s); ;} + { (yyval.s) = (yyvsp[(2) - (2)].s); ;} break; case 66: #line 283 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = (yyvsp[(2) - (2)].s); ;} + { (yyval.s) = (yyvsp[(3) - (3)].s); ;} break; case 67: -#line 284 "engines/director/lingo/lingo-gr.y" - { (yyval.s) = (yyvsp[(3) - (3)].s); ;} +#line 311 "engines/director/lingo/lingo-gr.y" + { g_lingo->_indef = true; ;} break; case 68: #line 312 "engines/director/lingo/lingo-gr.y" - { g_lingo->_indef = true; ;} - break; - - case 69: -#line 313 "engines/director/lingo/lingo-gr.y" { g_lingo->code1(g_lingo->c_procret); - g_lingo->define(*(yyvsp[(2) - (6)].s), (yyvsp[(4) - (6)].code), (yyvsp[(5) - (6)].narg)); + g_lingo->define(*(yyvsp[(2) - (7)].s), (yyvsp[(4) - (7)].code), (yyvsp[(5) - (7)].narg)); g_lingo->_indef = false; ;} break; + case 69: +#line 317 "engines/director/lingo/lingo-gr.y" + { (yyval.narg) = 0; ;} + break; + case 70: #line 318 "engines/director/lingo/lingo-gr.y" - { (yyval.narg) = 0; ;} + { g_lingo->codeArg(*(yyvsp[(1) - (1)].s)); delete (yyvsp[(1) - (1)].s); (yyval.narg) = 1; ;} break; case 71: #line 319 "engines/director/lingo/lingo-gr.y" - { g_lingo->codeArg(*(yyvsp[(1) - (1)].s)); delete (yyvsp[(1) - (1)].s); (yyval.narg) = 1; ;} + { g_lingo->codeArg(*(yyvsp[(3) - (3)].s)); delete (yyvsp[(3) - (3)].s); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;} break; case 72: #line 320 "engines/director/lingo/lingo-gr.y" - { g_lingo->codeArg(*(yyvsp[(3) - (3)].s)); delete (yyvsp[(3) - (3)].s); (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;} + { g_lingo->codeArg(*(yyvsp[(4) - (4)].s)); delete (yyvsp[(4) - (4)].s); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;} break; case 73: -#line 321 "engines/director/lingo/lingo-gr.y" - { g_lingo->codeArg(*(yyvsp[(4) - (4)].s)); delete (yyvsp[(4) - (4)].s); (yyval.narg) = (yyvsp[(1) - (4)].narg) + 1; ;} +#line 323 "engines/director/lingo/lingo-gr.y" + { (yyval.narg) = 0; ;} break; case 74: #line 324 "engines/director/lingo/lingo-gr.y" - { (yyval.narg) = 0; ;} + { (yyval.narg) = 1; ;} break; case 75: #line 325 "engines/director/lingo/lingo-gr.y" - { (yyval.narg) = 1; ;} - break; - - case 76: -#line 326 "engines/director/lingo/lingo-gr.y" { (yyval.narg) = (yyvsp[(1) - (3)].narg) + 1; ;} break; /* Line 1267 of yacc.c. */ -#line 1951 "engines/director/lingo/lingo-gr.cpp" +#line 1943 "engines/director/lingo/lingo-gr.cpp" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); @@ -2161,6 +2153,6 @@ yyparse () } -#line 329 "engines/director/lingo/lingo-gr.y" +#line 328 "engines/director/lingo/lingo-gr.y" diff --git a/engines/director/lingo/lingo-gr.y b/engines/director/lingo/lingo-gr.y index c87b17e3808d..94a2b78a1cdd 100644 --- a/engines/director/lingo/lingo-gr.y +++ b/engines/director/lingo/lingo-gr.y @@ -90,7 +90,6 @@ using namespace Director; %% program: programline '\n' program - | programline program | programline ; @@ -310,7 +309,7 @@ gotomovie: tOF tMOVIE STRING { $$ = $3; } // See also: // on keyword defn: tMACRO ID { g_lingo->_indef = true; } - begin argdef stmtlist { + begin argdef '\n' stmtlist { g_lingo->code1(g_lingo->c_procret); g_lingo->define(*$2, $4, $5); g_lingo->_indef = false; } diff --git a/engines/director/lingo/lingo.cpp b/engines/director/lingo/lingo.cpp index b65fd81d9a4f..0ecd6893eb7c 100644 --- a/engines/director/lingo/lingo.cpp +++ b/engines/director/lingo/lingo.cpp @@ -122,9 +122,32 @@ void Lingo::addCode(Common::String code, ScriptType type, uint16 id) { _currentScriptType = type; _scripts[type][id] = _currentScript; - parse(code.c_str()); + // macros have conflicting grammar. Thus we ease life for the parser. + if (code.contains("\nmacro ")) { + const char *begin = strstr(code.c_str(), "\nmacro ") + 1; + char *end; + bool first = true; - code1(STOP); + while ((end = strstr(begin, "\nmacro "))) { + if (first) { + begin = code.c_str(); + first = false; + } + Common::String chunk(begin, end); + + parse(chunk.c_str()); + + _currentScript->clear(); + + begin = end + 1; + } + + parse(begin); + } else { + parse(code.c_str()); + + code1(STOP); + } Common::hexdump((byte *)&_currentScript->front(), _currentScript->size() * sizeof(inst)); }