[Scummvm-git-logs] scummvm master -> 7b631126a54de4ea2333bd96ec96e8390d2660ec
neuromancer
noreply at scummvm.org
Mon Dec 8 20:33:27 UTC 2025
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .
Summary:
7b631126a5 PRIVATE: correctly parse N+ values using NUM_PLUS type
Commit: 7b631126a54de4ea2333bd96ec96e8390d2660ec
https://github.com/scummvm/scummvm/commit/7b631126a54de4ea2333bd96ec96e8390d2660ec
Author: neuromancer (gustavo.grieco at gmail.com)
Date: 2025-12-08T21:33:14+01:00
Commit Message:
PRIVATE: correctly parse N+ values using NUM_PLUS type
Changed paths:
engines/private/grammar.cpp
engines/private/grammar.y
engines/private/tokens.h
diff --git a/engines/private/grammar.cpp b/engines/private/grammar.cpp
index 155339afab5..576af885b2b 100644
--- a/engines/private/grammar.cpp
+++ b/engines/private/grammar.cpp
@@ -95,6 +95,8 @@ using namespace Settings;
extern int PRIVATE_lex();
//extern int PRIVATE_parse();
+int markplus();
+
void PRIVATE_xerror(const char *str) {
}
@@ -104,7 +106,7 @@ int PRIVATE_wrap() {
-#line 108 "engines/private/grammar.cpp"
+#line 110 "engines/private/grammar.cpp"
# ifndef YY_CAST
# ifdef __cplusplus
@@ -138,51 +140,52 @@ enum yysymbol_kind_t
YYSYMBOL_NAME = 3, /* NAME */
YYSYMBOL_STRING = 4, /* STRING */
YYSYMBOL_NUM = 5, /* NUM */
- YYSYMBOL_LTE = 6, /* LTE */
- YYSYMBOL_GTE = 7, /* GTE */
- YYSYMBOL_NEQ = 8, /* NEQ */
- YYSYMBOL_EQ = 9, /* EQ */
- YYSYMBOL_FALSETOK = 10, /* FALSETOK */
- YYSYMBOL_TRUETOK = 11, /* TRUETOK */
- YYSYMBOL_NULLTOK = 12, /* NULLTOK */
- YYSYMBOL_IFTOK = 13, /* IFTOK */
- YYSYMBOL_ELSETOK = 14, /* ELSETOK */
- YYSYMBOL_RECT = 15, /* RECT */
- YYSYMBOL_GOTOTOK = 16, /* GOTOTOK */
- YYSYMBOL_DEBUGTOK = 17, /* DEBUGTOK */
- YYSYMBOL_EMITCODEONTOK = 18, /* EMITCODEONTOK */
- YYSYMBOL_EMITCODEOFFTOK = 19, /* EMITCODEOFFTOK */
- YYSYMBOL_RESETIDTOK = 20, /* RESETIDTOK */
- YYSYMBOL_DEFINETOK = 21, /* DEFINETOK */
- YYSYMBOL_SETTINGTOK = 22, /* SETTINGTOK */
- YYSYMBOL_RANDOMTOK = 23, /* RANDOMTOK */
- YYSYMBOL_24_ = 24, /* '{' */
- YYSYMBOL_25_ = 25, /* '}' */
- YYSYMBOL_26_ = 26, /* ',' */
- YYSYMBOL_27_ = 27, /* ';' */
- YYSYMBOL_28_ = 28, /* '(' */
- YYSYMBOL_29_ = 29, /* ')' */
- YYSYMBOL_30_ = 30, /* '!' */
- YYSYMBOL_31_ = 31, /* '+' */
- YYSYMBOL_32_ = 32, /* '<' */
- YYSYMBOL_33_ = 33, /* '>' */
- YYSYMBOL_34_ = 34, /* '%' */
- YYSYMBOL_YYACCEPT = 35, /* $accept */
- YYSYMBOL_lines = 36, /* lines */
- YYSYMBOL_line = 37, /* line */
- YYSYMBOL_debug = 38, /* debug */
- YYSYMBOL_statements = 39, /* statements */
- YYSYMBOL_statement = 40, /* statement */
- YYSYMBOL_body = 41, /* body */
- YYSYMBOL_end = 42, /* end */
- YYSYMBOL_if = 43, /* if */
- YYSYMBOL_cond = 44, /* cond */
- YYSYMBOL_define = 45, /* define */
- YYSYMBOL_fcall = 46, /* fcall */
- YYSYMBOL_startp = 47, /* startp */
- YYSYMBOL_params = 48, /* params */
- YYSYMBOL_value = 49, /* value */
- YYSYMBOL_expr = 50 /* expr */
+ YYSYMBOL_NUM_PLUS = 6, /* NUM_PLUS */
+ YYSYMBOL_LTE = 7, /* LTE */
+ YYSYMBOL_GTE = 8, /* GTE */
+ YYSYMBOL_NEQ = 9, /* NEQ */
+ YYSYMBOL_EQ = 10, /* EQ */
+ YYSYMBOL_FALSETOK = 11, /* FALSETOK */
+ YYSYMBOL_TRUETOK = 12, /* TRUETOK */
+ YYSYMBOL_NULLTOK = 13, /* NULLTOK */
+ YYSYMBOL_IFTOK = 14, /* IFTOK */
+ YYSYMBOL_ELSETOK = 15, /* ELSETOK */
+ YYSYMBOL_RECT = 16, /* RECT */
+ YYSYMBOL_GOTOTOK = 17, /* GOTOTOK */
+ YYSYMBOL_DEBUGTOK = 18, /* DEBUGTOK */
+ YYSYMBOL_EMITCODEONTOK = 19, /* EMITCODEONTOK */
+ YYSYMBOL_EMITCODEOFFTOK = 20, /* EMITCODEOFFTOK */
+ YYSYMBOL_RESETIDTOK = 21, /* RESETIDTOK */
+ YYSYMBOL_DEFINETOK = 22, /* DEFINETOK */
+ YYSYMBOL_SETTINGTOK = 23, /* SETTINGTOK */
+ YYSYMBOL_RANDOMTOK = 24, /* RANDOMTOK */
+ YYSYMBOL_25_ = 25, /* '{' */
+ YYSYMBOL_26_ = 26, /* '}' */
+ YYSYMBOL_27_ = 27, /* ',' */
+ YYSYMBOL_28_ = 28, /* ';' */
+ YYSYMBOL_29_ = 29, /* '(' */
+ YYSYMBOL_30_ = 30, /* ')' */
+ YYSYMBOL_31_ = 31, /* '!' */
+ YYSYMBOL_32_ = 32, /* '+' */
+ YYSYMBOL_33_ = 33, /* '<' */
+ YYSYMBOL_34_ = 34, /* '>' */
+ YYSYMBOL_35_ = 35, /* '%' */
+ YYSYMBOL_YYACCEPT = 36, /* $accept */
+ YYSYMBOL_lines = 37, /* lines */
+ YYSYMBOL_line = 38, /* line */
+ YYSYMBOL_debug = 39, /* debug */
+ YYSYMBOL_statements = 40, /* statements */
+ YYSYMBOL_statement = 41, /* statement */
+ YYSYMBOL_body = 42, /* body */
+ YYSYMBOL_end = 43, /* end */
+ YYSYMBOL_if = 44, /* if */
+ YYSYMBOL_cond = 45, /* cond */
+ YYSYMBOL_define = 46, /* define */
+ YYSYMBOL_fcall = 47, /* fcall */
+ YYSYMBOL_startp = 48, /* startp */
+ YYSYMBOL_params = 49, /* params */
+ YYSYMBOL_value = 50, /* value */
+ YYSYMBOL_expr = 51 /* expr */
};
typedef enum yysymbol_kind_t yysymbol_kind_t;
@@ -510,10 +513,10 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 12
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 124
+#define YYLAST 127
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 35
+#define YYNTOKENS 36
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 16
/* YYNRULES -- Number of rules. */
@@ -522,7 +525,7 @@ union yyalloc
#define YYNSTATES 116
/* YYMAXUTOK -- Last valid token kind. */
-#define YYMAXUTOK 278
+#define YYMAXUTOK 279
/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -539,16 +542,16 @@ static const yytype_int8 yytranslate[] =
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 30, 2, 2, 2, 34, 2, 2,
- 28, 29, 2, 31, 26, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 27,
- 32, 2, 33, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 31, 2, 2, 2, 35, 2, 2,
+ 29, 30, 2, 32, 27, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 28,
+ 33, 2, 34, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 24, 2, 25, 2, 2, 2, 2,
+ 2, 2, 2, 25, 2, 26, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -563,19 +566,19 @@ static const yytype_int8 yytranslate[] =
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24
};
#if PRIVATE_DEBUG
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint8 yyrline[] =
{
- 0, 95, 95, 96, 99, 100, 101, 102, 103, 104,
- 108, 109, 112, 113, 116, 123, 124, 129, 137, 138,
- 141, 144, 147, 150, 151, 156, 160, 161, 164, 172,
- 173, 181, 184, 185, 186, 187, 188, 191, 192, 193,
- 194, 195, 196, 199, 200, 201, 202, 203, 204, 205,
- 206, 207, 208, 209
+ 0, 98, 98, 99, 102, 103, 104, 105, 106, 107,
+ 111, 112, 115, 116, 119, 126, 127, 132, 140, 141,
+ 144, 147, 150, 153, 154, 159, 163, 164, 167, 175,
+ 176, 184, 187, 188, 189, 190, 191, 194, 195, 196,
+ 197, 198, 199, 202, 203, 204, 205, 206, 207, 208,
+ 209, 210, 211, 212
};
#endif
@@ -592,13 +595,13 @@ static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
static const char *const yytname[] =
{
"\"end of file\"", "error", "\"invalid token\"", "NAME", "STRING",
- "NUM", "LTE", "GTE", "NEQ", "EQ", "FALSETOK", "TRUETOK", "NULLTOK",
- "IFTOK", "ELSETOK", "RECT", "GOTOTOK", "DEBUGTOK", "EMITCODEONTOK",
- "EMITCODEOFFTOK", "RESETIDTOK", "DEFINETOK", "SETTINGTOK", "RANDOMTOK",
- "'{'", "'}'", "','", "';'", "'('", "')'", "'!'", "'+'", "'<'", "'>'",
- "'%'", "$accept", "lines", "line", "debug", "statements", "statement",
- "body", "end", "if", "cond", "define", "fcall", "startp", "params",
- "value", "expr", YY_NULLPTR
+ "NUM", "NUM_PLUS", "LTE", "GTE", "NEQ", "EQ", "FALSETOK", "TRUETOK",
+ "NULLTOK", "IFTOK", "ELSETOK", "RECT", "GOTOTOK", "DEBUGTOK",
+ "EMITCODEONTOK", "EMITCODEOFFTOK", "RESETIDTOK", "DEFINETOK",
+ "SETTINGTOK", "RANDOMTOK", "'{'", "'}'", "','", "';'", "'('", "')'",
+ "'!'", "'+'", "'<'", "'>'", "'%'", "$accept", "lines", "line", "debug",
+ "statements", "statement", "body", "end", "if", "cond", "define",
+ "fcall", "startp", "params", "value", "expr", YY_NULLPTR
};
static const char *
@@ -608,7 +611,7 @@ yysymbol_name (yysymbol_kind_t yysymbol)
}
#endif
-#define YYPACT_NINF (-75)
+#define YYPACT_NINF (-74)
#define yypact_value_is_default(Yyn) \
((Yyn) == YYPACT_NINF)
@@ -622,18 +625,18 @@ yysymbol_name (yysymbol_kind_t yysymbol)
STATE-NUM. */
static const yytype_int8 yypact[] =
{
- 67, -10, -75, -75, -75, 12, 19, 28, 67, 26,
- 13, 27, -75, -75, 17, 5, 36, 51, 26, -75,
- 24, 30, 25, -75, 37, 4, 49, 51, 50, 52,
- -75, 6, -75, -75, 47, 53, 78, -75, -75, 15,
- 20, -75, 54, -75, 1, 64, -75, 62, -75, -75,
- -75, -75, -75, -75, 66, 65, 40, 63, 51, -75,
- -75, 88, 25, 68, 69, 70, 71, 93, -75, 95,
- -75, 65, 65, 65, 65, 65, 65, 65, -75, 76,
- 89, 79, 1, -75, 1, 80, 73, -75, -75, -75,
- -75, -75, -75, -75, -75, 20, 97, -75, -75, 99,
- 81, -75, 82, 83, -75, -75, 106, 107, 87, 85,
- 110, -75, 90, 91, 36, -75
+ 69, -17, -74, -74, -74, 12, 13, 19, 69, 21,
+ 2, 6, -74, -74, -1, 18, 40, 36, 21, -74,
+ 22, 20, 16, -74, 25, 4, 29, 36, 42, 23,
+ -74, 7, -74, -74, 52, 30, 71, -74, -74, 17,
+ 56, -74, 46, -74, 1, 53, -74, 49, -74, -74,
+ -74, -74, -74, -74, 64, 73, 28, 65, 36, -74,
+ -74, 77, 16, 67, 70, 68, 72, 89, -74, 95,
+ -74, 73, 73, 73, 73, 73, 73, 73, -74, 75,
+ 87, 76, 1, -74, 1, 78, 74, -74, -74, -74,
+ -74, -74, -74, -74, -74, 56, 99, -74, -74, 101,
+ 80, -74, 81, 84, -74, -74, 102, 107, 86, 85,
+ 109, -74, 88, 90, 40, -74
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -658,8 +661,8 @@ static const yytype_int8 yydefact[] =
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int8 yypgoto[] =
{
- -75, 108, -75, 100, -24, -39, 29, 21, -75, -75,
- -31, -42, -75, -74, -14, 84
+ -74, 108, -74, 103, -24, -39, 24, 26, -74, -74,
+ -31, -42, -74, -73, -8, 83
};
/* YYDEFGOTO[NTERM-NUM]. */
@@ -674,65 +677,65 @@ static const yytype_int8 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int8 yytable[] =
{
- 43, 59, 64, 38, 62, 49, 50, 35, 97, 20,
- 98, 51, 52, 53, 9, 10, 24, 63, 48, 49,
- 50, 42, 11, 22, 54, 51, 52, 53, 12, 14,
- 19, 55, 36, 23, 79, 24, 25, 16, 54, 20,
- 64, 70, 64, 18, 58, 55, 71, 72, 73, 74,
- 31, 17, 45, 33, 22, 32, 59, 87, 88, 89,
- 90, 91, 92, 93, 23, 34, 24, 25, 48, 49,
- 50, 75, 76, 77, 37, 51, 52, 53, 39, 41,
- 46, 47, 61, 115, 1, 2, 3, 4, 5, 6,
- 67, 68, 78, 81, 69, 82, 36, 84, 85, 83,
- 86, 94, 102, 95, 103, 96, 99, 100, 106, 107,
- 104, 108, 109, 110, 111, 112, 13, 114, 30, 113,
- 0, 0, 105, 57, 101
+ 43, 59, 64, 38, 62, 49, 50, 35, 9, 97,
+ 20, 98, 51, 52, 53, 10, 11, 24, 63, 12,
+ 48, 49, 50, 42, 14, 54, 18, 16, 51, 52,
+ 53, 17, 55, 36, 79, 71, 72, 73, 74, 22,
+ 64, 54, 64, 20, 19, 33, 32, 70, 55, 31,
+ 23, 41, 24, 25, 34, 37, 59, 45, 46, 22,
+ 75, 76, 77, 87, 88, 89, 90, 91, 92, 93,
+ 23, 39, 24, 25, 47, 61, 48, 49, 50, 68,
+ 67, 58, 81, 115, 51, 52, 53, 1, 2, 3,
+ 4, 5, 6, 69, 85, 78, 36, 82, 83, 84,
+ 86, 94, 95, 96, 102, 99, 103, 108, 106, 100,
+ 104, 107, 109, 110, 112, 111, 13, 114, 113, 101,
+ 0, 30, 57, 0, 0, 0, 0, 105
};
static const yytype_int8 yycheck[] =
{
- 31, 40, 44, 27, 3, 4, 5, 3, 82, 3,
- 84, 10, 11, 12, 24, 3, 15, 16, 3, 4,
- 5, 15, 3, 3, 23, 10, 11, 12, 0, 3,
- 25, 30, 28, 13, 58, 15, 16, 24, 23, 3,
- 82, 55, 84, 26, 24, 30, 6, 7, 8, 9,
- 26, 24, 5, 28, 3, 25, 95, 71, 72, 73,
- 74, 75, 76, 77, 13, 28, 15, 16, 3, 4,
- 5, 31, 32, 33, 25, 10, 11, 12, 28, 27,
- 27, 3, 28, 114, 17, 18, 19, 20, 21, 22,
- 26, 29, 29, 5, 28, 26, 28, 26, 5, 29,
- 5, 25, 5, 14, 5, 26, 26, 34, 26, 26,
- 29, 5, 5, 26, 29, 5, 8, 26, 18, 29,
- -1, -1, 101, 39, 95
+ 31, 40, 44, 27, 3, 4, 5, 3, 25, 82,
+ 3, 84, 11, 12, 13, 3, 3, 16, 17, 0,
+ 3, 4, 5, 16, 3, 24, 27, 25, 11, 12,
+ 13, 25, 31, 29, 58, 7, 8, 9, 10, 3,
+ 82, 24, 84, 3, 26, 29, 26, 55, 31, 27,
+ 14, 28, 16, 17, 29, 26, 95, 5, 28, 3,
+ 32, 33, 34, 71, 72, 73, 74, 75, 76, 77,
+ 14, 29, 16, 17, 3, 29, 3, 4, 5, 30,
+ 27, 25, 5, 114, 11, 12, 13, 18, 19, 20,
+ 21, 22, 23, 29, 5, 30, 29, 27, 30, 27,
+ 5, 26, 15, 27, 5, 27, 5, 5, 27, 35,
+ 30, 27, 5, 27, 5, 30, 8, 27, 30, 95,
+ -1, 18, 39, -1, -1, -1, -1, 101
};
/* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
state STATE-NUM. */
static const yytype_int8 yystos[] =
{
- 0, 17, 18, 19, 20, 21, 22, 36, 37, 24,
- 3, 3, 0, 36, 3, 38, 24, 24, 26, 25,
- 3, 45, 3, 13, 15, 16, 39, 40, 43, 46,
- 38, 26, 25, 28, 28, 3, 28, 25, 39, 28,
- 44, 27, 15, 45, 47, 5, 27, 3, 3, 4,
- 5, 10, 11, 12, 23, 30, 49, 50, 24, 40,
- 41, 28, 3, 16, 46, 48, 50, 26, 29, 28,
- 49, 6, 7, 8, 9, 31, 32, 33, 29, 39,
- 42, 5, 26, 29, 26, 5, 5, 49, 49, 49,
- 49, 49, 49, 49, 25, 14, 26, 48, 48, 26,
- 34, 41, 5, 5, 29, 42, 26, 26, 5, 5,
- 26, 29, 5, 29, 26, 45
+ 0, 18, 19, 20, 21, 22, 23, 37, 38, 25,
+ 3, 3, 0, 37, 3, 39, 25, 25, 27, 26,
+ 3, 46, 3, 14, 16, 17, 40, 41, 44, 47,
+ 39, 27, 26, 29, 29, 3, 29, 26, 40, 29,
+ 45, 28, 16, 46, 48, 5, 28, 3, 3, 4,
+ 5, 11, 12, 13, 24, 31, 50, 51, 25, 41,
+ 42, 29, 3, 17, 47, 49, 51, 27, 30, 29,
+ 50, 7, 8, 9, 10, 32, 33, 34, 30, 40,
+ 43, 5, 27, 30, 27, 5, 5, 50, 50, 50,
+ 50, 50, 50, 50, 26, 15, 27, 49, 49, 27,
+ 35, 42, 5, 5, 30, 43, 27, 27, 5, 5,
+ 27, 30, 5, 30, 27, 46
};
/* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */
static const yytype_int8 yyr1[] =
{
- 0, 35, 36, 36, 37, 37, 37, 37, 37, 37,
- 38, 38, 39, 39, 40, 40, 40, 40, 41, 41,
- 42, 43, 44, 45, 45, 45, 45, 45, 46, 46,
- 46, 47, 48, 48, 48, 48, 48, 49, 49, 49,
- 49, 49, 49, 50, 50, 50, 50, 50, 50, 50,
- 50, 50, 50, 50
+ 0, 36, 37, 37, 38, 38, 38, 38, 38, 38,
+ 39, 39, 40, 40, 41, 41, 41, 41, 42, 42,
+ 43, 44, 45, 46, 46, 46, 46, 46, 47, 47,
+ 47, 48, 49, 49, 49, 49, 49, 50, 50, 50,
+ 50, 50, 50, 51, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 51
};
/* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */
@@ -1207,50 +1210,50 @@ yyreduce:
switch (yyn)
{
case 4: /* line: DEBUGTOK '{' debug '}' */
-#line 99 "engines/private/grammar.y"
+#line 102 "engines/private/grammar.y"
{ /* Not used in the game */ }
-#line 1213 "engines/private/grammar.cpp"
+#line 1216 "engines/private/grammar.cpp"
break;
case 5: /* line: EMITCODEONTOK */
-#line 100 "engines/private/grammar.y"
+#line 103 "engines/private/grammar.y"
{ /* Unclear what this is */ }
-#line 1219 "engines/private/grammar.cpp"
+#line 1222 "engines/private/grammar.cpp"
break;
case 6: /* line: EMITCODEOFFTOK */
-#line 101 "engines/private/grammar.y"
+#line 104 "engines/private/grammar.y"
{ /* Unclear what this is */ }
-#line 1225 "engines/private/grammar.cpp"
+#line 1228 "engines/private/grammar.cpp"
break;
case 7: /* line: RESETIDTOK */
-#line 102 "engines/private/grammar.y"
+#line 105 "engines/private/grammar.y"
{ /* Unclear what this is */ }
-#line 1231 "engines/private/grammar.cpp"
+#line 1234 "engines/private/grammar.cpp"
break;
case 8: /* line: DEFINETOK NAME '{' define '}' */
-#line 103 "engines/private/grammar.y"
+#line 106 "engines/private/grammar.y"
{ g_private->maps.installAll((yyvsp[-3].s)); }
-#line 1237 "engines/private/grammar.cpp"
+#line 1240 "engines/private/grammar.cpp"
break;
case 9: /* line: SETTINGTOK NAME '{' statements '}' */
-#line 104 "engines/private/grammar.y"
+#line 107 "engines/private/grammar.y"
{ g_setts->save((yyvsp[-3].s));
g_setts->init(); }
-#line 1244 "engines/private/grammar.cpp"
+#line 1247 "engines/private/grammar.cpp"
break;
case 12: /* statements: %empty */
-#line 112 "engines/private/grammar.y"
+#line 115 "engines/private/grammar.y"
{ (yyval.inst) = g_vm->_progp; }
-#line 1250 "engines/private/grammar.cpp"
+#line 1253 "engines/private/grammar.cpp"
break;
case 14: /* statement: GOTOTOK NAME ';' */
-#line 116 "engines/private/grammar.y"
+#line 119 "engines/private/grammar.y"
{
(yyval.inst) = g_vm->_progp;
code2(strpush, (Inst) g_private->maps.constant(STRING, 0, (yyvsp[-1].s)));
@@ -1258,99 +1261,99 @@ yyreduce:
code2(strpush, (Inst) g_private->maps.constant(STRING, 0, "goto"));
code1(funcpush);
}
-#line 1262 "engines/private/grammar.cpp"
+#line 1265 "engines/private/grammar.cpp"
break;
case 15: /* statement: fcall ';' */
-#line 123 "engines/private/grammar.y"
+#line 126 "engines/private/grammar.y"
{ (yyval.inst) = (yyvsp[-1].inst); }
-#line 1268 "engines/private/grammar.cpp"
+#line 1271 "engines/private/grammar.cpp"
break;
case 16: /* statement: if cond body end */
-#line 124 "engines/private/grammar.y"
+#line 127 "engines/private/grammar.y"
{
/* else-less if */
((yyvsp[-3].inst))[1] = (Inst)(yyvsp[-1].inst); /* thenpart */
((yyvsp[-3].inst))[3] = (Inst)(yyvsp[0].inst);
}
-#line 1278 "engines/private/grammar.cpp"
+#line 1281 "engines/private/grammar.cpp"
break;
case 17: /* statement: if cond body end ELSETOK body end */
-#line 129 "engines/private/grammar.y"
+#line 132 "engines/private/grammar.y"
{
/* if with else */
((yyvsp[-6].inst))[1] = (Inst)(yyvsp[-4].inst); /* thenpart */
((yyvsp[-6].inst))[2] = (Inst)(yyvsp[-1].inst); /* elsepart */
((yyvsp[-6].inst))[3] = (Inst)(yyvsp[0].inst);
}
-#line 1289 "engines/private/grammar.cpp"
+#line 1292 "engines/private/grammar.cpp"
break;
case 18: /* body: statement */
-#line 137 "engines/private/grammar.y"
+#line 140 "engines/private/grammar.y"
{ (yyval.inst) = (yyvsp[0].inst); }
-#line 1295 "engines/private/grammar.cpp"
+#line 1298 "engines/private/grammar.cpp"
break;
case 19: /* body: '{' statements '}' */
-#line 138 "engines/private/grammar.y"
+#line 141 "engines/private/grammar.y"
{ (yyval.inst) = (yyvsp[-1].inst); }
-#line 1301 "engines/private/grammar.cpp"
+#line 1304 "engines/private/grammar.cpp"
break;
case 20: /* end: %empty */
-#line 141 "engines/private/grammar.y"
+#line 144 "engines/private/grammar.y"
{ code1(STOP); (yyval.inst) = g_vm->_progp; }
-#line 1307 "engines/private/grammar.cpp"
+#line 1310 "engines/private/grammar.cpp"
break;
case 21: /* if: IFTOK */
-#line 144 "engines/private/grammar.y"
+#line 147 "engines/private/grammar.y"
{ (yyval.inst) = code1(ifcode); code3(STOP, STOP, STOP); }
-#line 1313 "engines/private/grammar.cpp"
+#line 1316 "engines/private/grammar.cpp"
break;
case 22: /* cond: '(' expr ')' */
-#line 147 "engines/private/grammar.y"
+#line 150 "engines/private/grammar.y"
{ code1(STOP); (yyval.inst) = (yyvsp[-1].inst); }
-#line 1319 "engines/private/grammar.cpp"
+#line 1322 "engines/private/grammar.cpp"
break;
case 24: /* define: NAME ',' RECT '(' NUM ',' NUM ',' NUM ',' NUM ')' ',' define */
-#line 151 "engines/private/grammar.y"
+#line 154 "engines/private/grammar.y"
{
Common::Rect *r = new Common::Rect((yyvsp[-9].sym)->u.val, (yyvsp[-7].sym)->u.val, (yyvsp[-5].sym)->u.val, (yyvsp[-3].sym)->u.val);
assert(r->isValidRect());
g_private->maps.defineSymbol((yyvsp[-13].s), r);
}
-#line 1329 "engines/private/grammar.cpp"
+#line 1332 "engines/private/grammar.cpp"
break;
case 25: /* define: NAME ',' RECT '(' NUM ',' NUM ',' NUM ',' NUM ')' */
-#line 156 "engines/private/grammar.y"
+#line 159 "engines/private/grammar.y"
{
Common::Rect *r = new Common::Rect((yyvsp[-7].sym)->u.val, (yyvsp[-5].sym)->u.val, (yyvsp[-3].sym)->u.val, (yyvsp[-1].sym)->u.val);
g_private->maps.defineSymbol((yyvsp[-11].s), r);
}
-#line 1338 "engines/private/grammar.cpp"
+#line 1341 "engines/private/grammar.cpp"
break;
case 26: /* define: NAME ',' define */
-#line 160 "engines/private/grammar.y"
+#line 163 "engines/private/grammar.y"
{ g_private->maps.defineSymbol((yyvsp[-2].s), NULL); }
-#line 1344 "engines/private/grammar.cpp"
+#line 1347 "engines/private/grammar.cpp"
break;
case 27: /* define: NAME */
-#line 161 "engines/private/grammar.y"
+#line 164 "engines/private/grammar.y"
{ g_private->maps.defineSymbol((yyvsp[0].s), NULL); }
-#line 1350 "engines/private/grammar.cpp"
+#line 1353 "engines/private/grammar.cpp"
break;
case 28: /* fcall: GOTOTOK '(' NAME ')' */
-#line 164 "engines/private/grammar.y"
+#line 167 "engines/private/grammar.y"
{
(yyval.inst) = g_vm->_progp;
code2(strpush, (Inst) g_private->maps.constant(STRING, 0, (yyvsp[-1].s)));
@@ -1358,166 +1361,166 @@ yyreduce:
code2(strpush, (Inst) g_private->maps.constant(STRING, 0, "goto"));
code1(funcpush);
}
-#line 1362 "engines/private/grammar.cpp"
+#line 1365 "engines/private/grammar.cpp"
break;
case 29: /* fcall: RECT '(' NUM ',' NUM ',' NUM ',' NUM ')' */
-#line 172 "engines/private/grammar.y"
+#line 175 "engines/private/grammar.y"
{ (yyval.inst) = g_vm->_progp; }
-#line 1368 "engines/private/grammar.cpp"
+#line 1371 "engines/private/grammar.cpp"
break;
case 30: /* fcall: NAME '(' startp params ')' */
-#line 173 "engines/private/grammar.y"
+#line 176 "engines/private/grammar.y"
{
(yyval.inst) = (yyvsp[-2].inst);
code2(constpush, (Inst) g_private->maps.constant(NUM, (yyvsp[-1].narg), NULL));
code2(strpush, (Inst) g_private->maps.constant(STRING, 0, (yyvsp[-4].s)));
code1(funcpush);
}
-#line 1379 "engines/private/grammar.cpp"
+#line 1382 "engines/private/grammar.cpp"
break;
case 31: /* startp: %empty */
-#line 181 "engines/private/grammar.y"
+#line 184 "engines/private/grammar.y"
{ (yyval.inst) = g_vm->_progp; }
-#line 1385 "engines/private/grammar.cpp"
+#line 1388 "engines/private/grammar.cpp"
break;
case 32: /* params: %empty */
-#line 184 "engines/private/grammar.y"
+#line 187 "engines/private/grammar.y"
{ (yyval.narg) = 0; }
-#line 1391 "engines/private/grammar.cpp"
+#line 1394 "engines/private/grammar.cpp"
break;
case 33: /* params: fcall ',' params */
-#line 185 "engines/private/grammar.y"
+#line 188 "engines/private/grammar.y"
{ (yyval.narg) = (yyvsp[0].narg) + 1; }
-#line 1397 "engines/private/grammar.cpp"
+#line 1400 "engines/private/grammar.cpp"
break;
case 34: /* params: expr ',' params */
-#line 186 "engines/private/grammar.y"
+#line 189 "engines/private/grammar.y"
{ (yyval.narg) = (yyvsp[0].narg) + 1; }
-#line 1403 "engines/private/grammar.cpp"
+#line 1406 "engines/private/grammar.cpp"
break;
case 35: /* params: expr */
-#line 187 "engines/private/grammar.y"
+#line 190 "engines/private/grammar.y"
{ (yyval.narg) = 1; }
-#line 1409 "engines/private/grammar.cpp"
+#line 1412 "engines/private/grammar.cpp"
break;
case 36: /* params: fcall */
-#line 188 "engines/private/grammar.y"
+#line 191 "engines/private/grammar.y"
{ (yyval.narg) = 1; }
-#line 1415 "engines/private/grammar.cpp"
+#line 1418 "engines/private/grammar.cpp"
break;
case 37: /* value: NULLTOK */
-#line 191 "engines/private/grammar.y"
+#line 194 "engines/private/grammar.y"
{ code2(constpush, (Inst) g_private->maps.constant(NUM, 0, NULL)); }
-#line 1421 "engines/private/grammar.cpp"
+#line 1424 "engines/private/grammar.cpp"
break;
case 38: /* value: FALSETOK */
-#line 192 "engines/private/grammar.y"
+#line 195 "engines/private/grammar.y"
{ code2(constpush, (Inst) g_private->maps.constant(NUM, 0, NULL)); }
-#line 1427 "engines/private/grammar.cpp"
+#line 1430 "engines/private/grammar.cpp"
break;
case 39: /* value: TRUETOK */
-#line 193 "engines/private/grammar.y"
+#line 196 "engines/private/grammar.y"
{ code2(constpush, (Inst) g_private->maps.constant(NUM, 1, NULL)); }
-#line 1433 "engines/private/grammar.cpp"
+#line 1436 "engines/private/grammar.cpp"
break;
case 40: /* value: NUM */
-#line 194 "engines/private/grammar.y"
+#line 197 "engines/private/grammar.y"
{ code2(constpush, (Inst)(yyvsp[0].sym)); }
-#line 1439 "engines/private/grammar.cpp"
+#line 1442 "engines/private/grammar.cpp"
break;
case 41: /* value: STRING */
-#line 195 "engines/private/grammar.y"
+#line 198 "engines/private/grammar.y"
{ code2(strpush, (Inst)(yyvsp[0].sym)); }
-#line 1445 "engines/private/grammar.cpp"
+#line 1448 "engines/private/grammar.cpp"
break;
case 42: /* value: NAME */
-#line 196 "engines/private/grammar.y"
+#line 199 "engines/private/grammar.y"
{ code1(varpush); code1((Inst) g_private->maps.lookupName((yyvsp[0].s))); code1(eval); }
-#line 1451 "engines/private/grammar.cpp"
+#line 1454 "engines/private/grammar.cpp"
break;
case 43: /* expr: value */
-#line 199 "engines/private/grammar.y"
+#line 202 "engines/private/grammar.y"
{ (yyval.inst) = (yyvsp[0].inst); }
-#line 1457 "engines/private/grammar.cpp"
+#line 1460 "engines/private/grammar.cpp"
break;
case 44: /* expr: '!' value */
-#line 200 "engines/private/grammar.y"
+#line 203 "engines/private/grammar.y"
{ code1(negate); (yyval.inst) = (yyvsp[0].inst); }
-#line 1463 "engines/private/grammar.cpp"
+#line 1466 "engines/private/grammar.cpp"
break;
case 45: /* expr: value EQ value */
-#line 201 "engines/private/grammar.y"
+#line 204 "engines/private/grammar.y"
{ code1(eq); }
-#line 1469 "engines/private/grammar.cpp"
+#line 1472 "engines/private/grammar.cpp"
break;
case 46: /* expr: value NEQ value */
-#line 202 "engines/private/grammar.y"
+#line 205 "engines/private/grammar.y"
{ code1(ne); }
-#line 1475 "engines/private/grammar.cpp"
+#line 1478 "engines/private/grammar.cpp"
break;
case 47: /* expr: value '+' value */
-#line 203 "engines/private/grammar.y"
+#line 206 "engines/private/grammar.y"
{ code1(add); }
-#line 1481 "engines/private/grammar.cpp"
+#line 1484 "engines/private/grammar.cpp"
break;
case 48: /* expr: value '<' value */
-#line 204 "engines/private/grammar.y"
+#line 207 "engines/private/grammar.y"
{ code1(lt); }
-#line 1487 "engines/private/grammar.cpp"
+#line 1490 "engines/private/grammar.cpp"
break;
case 49: /* expr: value '>' value */
-#line 205 "engines/private/grammar.y"
+#line 208 "engines/private/grammar.y"
{ code1(gt); }
-#line 1493 "engines/private/grammar.cpp"
+#line 1496 "engines/private/grammar.cpp"
break;
case 50: /* expr: value LTE value */
-#line 206 "engines/private/grammar.y"
+#line 209 "engines/private/grammar.y"
{ code1(le); }
-#line 1499 "engines/private/grammar.cpp"
+#line 1502 "engines/private/grammar.cpp"
break;
case 51: /* expr: value GTE value */
-#line 207 "engines/private/grammar.y"
+#line 210 "engines/private/grammar.y"
{ code1(ge); }
-#line 1505 "engines/private/grammar.cpp"
+#line 1508 "engines/private/grammar.cpp"
break;
case 52: /* expr: value '+' */
-#line 208 "engines/private/grammar.y"
- { (yyval.inst) = (yyvsp[-1].inst); }
-#line 1511 "engines/private/grammar.cpp"
+#line 211 "engines/private/grammar.y"
+ { code1(markplus); (yyval.inst) = (yyvsp[-1].inst); }
+#line 1514 "engines/private/grammar.cpp"
break;
case 53: /* expr: RANDOMTOK '(' NUM '%' ')' */
-#line 209 "engines/private/grammar.y"
+#line 212 "engines/private/grammar.y"
{ code3(constpush, (Inst)(yyvsp[-2].sym), randbool); }
-#line 1517 "engines/private/grammar.cpp"
+#line 1520 "engines/private/grammar.cpp"
break;
-#line 1521 "engines/private/grammar.cpp"
+#line 1524 "engines/private/grammar.cpp"
default: break;
}
@@ -1710,3 +1713,14 @@ yyreturnlab:
return yyresult;
}
+#line 215 "engines/private/grammar.y"
+
+
+int markplus() {
+ Datum d = pop();
+ if (d.type == NUM) {
+ d.type = NUM_PLUS;
+ }
+ push(d);
+ return 0;
+}
diff --git a/engines/private/grammar.y b/engines/private/grammar.y
index a176d960470..8b1615f825f 100644
--- a/engines/private/grammar.y
+++ b/engines/private/grammar.y
@@ -66,6 +66,8 @@ using namespace Settings;
extern int PRIVATE_lex();
//extern int PRIVATE_parse();
+int markplus();
+
void PRIVATE_xerror(const char *str) {
}
@@ -86,6 +88,7 @@ int PRIVATE_wrap() {
%token<s> NAME
%token<sym> STRING NUM
+%token NUM_PLUS
%type <inst> body if startp cond end expr statements statement fcall value
%token LTE GTE NEQ EQ FALSETOK TRUETOK NULLTOK IFTOK ELSETOK RECT GOTOTOK DEBUGTOK EMITCODEONTOK EMITCODEOFFTOK RESETIDTOK DEFINETOK SETTINGTOK RANDOMTOK
%type<narg> params
@@ -205,6 +208,17 @@ expr: value { $$ = $1; }
| value '>' value { code1(gt); }
| value LTE value { code1(le); }
| value GTE value { code1(ge); }
- | value '+' { $$ = $1; } // unclear what it should do
+ | value '+' { code1(markplus); $$ = $1; }
| RANDOMTOK '(' NUM '%' ')' { code3(constpush, (Inst)$NUM, randbool); }
;
+
+%%
+
+int markplus() {
+ Datum d = pop();
+ if (d.type == NUM) {
+ d.type = NUM_PLUS;
+ }
+ push(d);
+ return 0;
+}
diff --git a/engines/private/tokens.h b/engines/private/tokens.h
index 40b3b61d1ff..e76fecaa635 100644
--- a/engines/private/tokens.h
+++ b/engines/private/tokens.h
@@ -65,24 +65,25 @@ extern int PRIVATE_debug;
NAME = 258, /* NAME */
STRING = 259, /* STRING */
NUM = 260, /* NUM */
- LTE = 261, /* LTE */
- GTE = 262, /* GTE */
- NEQ = 263, /* NEQ */
- EQ = 264, /* EQ */
- FALSETOK = 265, /* FALSETOK */
- TRUETOK = 266, /* TRUETOK */
- NULLTOK = 267, /* NULLTOK */
- IFTOK = 268, /* IFTOK */
- ELSETOK = 269, /* ELSETOK */
- RECT = 270, /* RECT */
- GOTOTOK = 271, /* GOTOTOK */
- DEBUGTOK = 272, /* DEBUGTOK */
- EMITCODEONTOK = 273, /* EMITCODEONTOK */
- EMITCODEOFFTOK = 274, /* EMITCODEOFFTOK */
- RESETIDTOK = 275, /* RESETIDTOK */
- DEFINETOK = 276, /* DEFINETOK */
- SETTINGTOK = 277, /* SETTINGTOK */
- RANDOMTOK = 278 /* RANDOMTOK */
+ NUM_PLUS = 261, /* NUM_PLUS */
+ LTE = 262, /* LTE */
+ GTE = 263, /* GTE */
+ NEQ = 264, /* NEQ */
+ EQ = 265, /* EQ */
+ FALSETOK = 266, /* FALSETOK */
+ TRUETOK = 267, /* TRUETOK */
+ NULLTOK = 268, /* NULLTOK */
+ IFTOK = 269, /* IFTOK */
+ ELSETOK = 270, /* ELSETOK */
+ RECT = 271, /* RECT */
+ GOTOTOK = 272, /* GOTOTOK */
+ DEBUGTOK = 273, /* DEBUGTOK */
+ EMITCODEONTOK = 274, /* EMITCODEONTOK */
+ EMITCODEOFFTOK = 275, /* EMITCODEOFFTOK */
+ RESETIDTOK = 276, /* RESETIDTOK */
+ DEFINETOK = 277, /* DEFINETOK */
+ SETTINGTOK = 278, /* SETTINGTOK */
+ RANDOMTOK = 279 /* RANDOMTOK */
};
typedef enum PRIVATE_tokentype PRIVATE_token_kind_t;
#endif
@@ -91,7 +92,7 @@ extern int PRIVATE_debug;
#if ! defined PRIVATE_STYPE && ! defined PRIVATE_STYPE_IS_DECLARED
union PRIVATE_STYPE
{
-#line 79 "engines/private/grammar.y"
+#line 81 "engines/private/grammar.y"
Private::Symbol *sym; /* symbol table pointer */
int (**inst)(); /* machine instruction */
@@ -99,7 +100,7 @@ union PRIVATE_STYPE
int *i; /* integer value */
int narg; /* auxiliary value to count function arguments */
-#line 103 "engines/private/tokens.h"
+#line 104 "engines/private/tokens.h"
};
typedef union PRIVATE_STYPE PRIVATE_STYPE;
More information about the Scummvm-git-logs
mailing list