py/lexer: Reorder operator tokens to match corresponding binary ops.
This commit is contained in:
parent
78e0e76b4f
commit
6ce7c051e8
58
py/lexer.h
58
py/lexer.h
@ -96,25 +96,43 @@ typedef enum _mp_token_kind_t {
|
||||
MP_TOKEN_KW_WITH,
|
||||
MP_TOKEN_KW_YIELD,
|
||||
|
||||
MP_TOKEN_OP_TILDE,
|
||||
|
||||
// Order of these 6 matches corresponding mp_binary_op_t operator
|
||||
MP_TOKEN_OP_LESS,
|
||||
MP_TOKEN_OP_MORE,
|
||||
MP_TOKEN_OP_DBL_EQUAL,
|
||||
MP_TOKEN_OP_LESS_EQUAL,
|
||||
MP_TOKEN_OP_MORE_EQUAL,
|
||||
MP_TOKEN_OP_NOT_EQUAL,
|
||||
|
||||
// Order of these 12 matches corresponding mp_binary_op_t operator
|
||||
MP_TOKEN_OP_PIPE,
|
||||
MP_TOKEN_OP_CARET,
|
||||
MP_TOKEN_OP_AMPERSAND,
|
||||
MP_TOKEN_OP_DBL_LESS,
|
||||
MP_TOKEN_OP_DBL_MORE,
|
||||
MP_TOKEN_OP_PLUS,
|
||||
MP_TOKEN_OP_MINUS,
|
||||
MP_TOKEN_OP_STAR,
|
||||
MP_TOKEN_OP_DBL_STAR,
|
||||
MP_TOKEN_OP_SLASH,
|
||||
MP_TOKEN_OP_DBL_SLASH,
|
||||
MP_TOKEN_OP_SLASH,
|
||||
MP_TOKEN_OP_PERCENT,
|
||||
MP_TOKEN_OP_LESS,
|
||||
MP_TOKEN_OP_DBL_LESS,
|
||||
MP_TOKEN_OP_MORE,
|
||||
MP_TOKEN_OP_DBL_MORE,
|
||||
MP_TOKEN_OP_AMPERSAND,
|
||||
MP_TOKEN_OP_PIPE,
|
||||
MP_TOKEN_OP_CARET,
|
||||
MP_TOKEN_OP_TILDE,
|
||||
MP_TOKEN_OP_LESS_EQUAL,
|
||||
MP_TOKEN_OP_MORE_EQUAL,
|
||||
MP_TOKEN_OP_DBL_EQUAL,
|
||||
MP_TOKEN_OP_NOT_EQUAL,
|
||||
MP_TOKEN_OP_DBL_STAR,
|
||||
|
||||
// Order of these 12 matches corresponding mp_binary_op_t operator
|
||||
MP_TOKEN_DEL_PIPE_EQUAL,
|
||||
MP_TOKEN_DEL_CARET_EQUAL,
|
||||
MP_TOKEN_DEL_AMPERSAND_EQUAL,
|
||||
MP_TOKEN_DEL_DBL_LESS_EQUAL,
|
||||
MP_TOKEN_DEL_DBL_MORE_EQUAL,
|
||||
MP_TOKEN_DEL_PLUS_EQUAL,
|
||||
MP_TOKEN_DEL_MINUS_EQUAL,
|
||||
MP_TOKEN_DEL_STAR_EQUAL,
|
||||
MP_TOKEN_DEL_DBL_SLASH_EQUAL,
|
||||
MP_TOKEN_DEL_SLASH_EQUAL,
|
||||
MP_TOKEN_DEL_PERCENT_EQUAL,
|
||||
MP_TOKEN_DEL_DBL_STAR_EQUAL,
|
||||
|
||||
MP_TOKEN_DEL_PAREN_OPEN,
|
||||
MP_TOKEN_DEL_PAREN_CLOSE,
|
||||
@ -128,18 +146,6 @@ typedef enum _mp_token_kind_t {
|
||||
MP_TOKEN_DEL_SEMICOLON,
|
||||
MP_TOKEN_DEL_AT,
|
||||
MP_TOKEN_DEL_EQUAL,
|
||||
MP_TOKEN_DEL_PLUS_EQUAL,
|
||||
MP_TOKEN_DEL_MINUS_EQUAL,
|
||||
MP_TOKEN_DEL_STAR_EQUAL,
|
||||
MP_TOKEN_DEL_SLASH_EQUAL,
|
||||
MP_TOKEN_DEL_DBL_SLASH_EQUAL,
|
||||
MP_TOKEN_DEL_PERCENT_EQUAL,
|
||||
MP_TOKEN_DEL_AMPERSAND_EQUAL,
|
||||
MP_TOKEN_DEL_PIPE_EQUAL,
|
||||
MP_TOKEN_DEL_CARET_EQUAL,
|
||||
MP_TOKEN_DEL_DBL_MORE_EQUAL,
|
||||
MP_TOKEN_DEL_DBL_LESS_EQUAL,
|
||||
MP_TOKEN_DEL_DBL_STAR_EQUAL,
|
||||
MP_TOKEN_DEL_MINUS_MORE,
|
||||
} mp_token_kind_t;
|
||||
|
||||
|
12
py/parse.c
12
py/parse.c
@ -645,19 +645,17 @@ STATIC bool fold_constants(parser_t *parser, uint8_t rule_id, size_t num_args) {
|
||||
}
|
||||
mp_token_kind_t tok = MP_PARSE_NODE_LEAF_ARG(peek_result(parser, i));
|
||||
static const uint8_t token_to_op[] = {
|
||||
MP_BINARY_OP_LSHIFT,
|
||||
MP_BINARY_OP_RSHIFT,
|
||||
MP_BINARY_OP_ADD,
|
||||
MP_BINARY_OP_SUBTRACT,
|
||||
MP_BINARY_OP_MULTIPLY,
|
||||
255,//MP_BINARY_OP_POWER,
|
||||
255,//MP_BINARY_OP_TRUE_DIVIDE,
|
||||
MP_BINARY_OP_FLOOR_DIVIDE,
|
||||
255,//MP_BINARY_OP_TRUE_DIVIDE,
|
||||
MP_BINARY_OP_MODULO,
|
||||
255,//MP_BINARY_OP_LESS
|
||||
MP_BINARY_OP_LSHIFT,
|
||||
255,//MP_BINARY_OP_MORE
|
||||
MP_BINARY_OP_RSHIFT,
|
||||
255,//MP_BINARY_OP_POWER,
|
||||
};
|
||||
mp_binary_op_t op = token_to_op[tok - MP_TOKEN_OP_PLUS];
|
||||
mp_binary_op_t op = token_to_op[tok - MP_TOKEN_OP_DBL_LESS];
|
||||
if (op == (mp_binary_op_t)255) {
|
||||
return false;
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ typedef enum {
|
||||
// Note: the first 9+12+12 of these are used in bytecode and changing
|
||||
// them requires changing the bytecode version.
|
||||
typedef enum {
|
||||
// 9 relational operations, should return a bool
|
||||
// 9 relational operations, should return a bool; order of first 6 matches corresponding mp_token_kind_t
|
||||
MP_BINARY_OP_LESS,
|
||||
MP_BINARY_OP_MORE,
|
||||
MP_BINARY_OP_EQUAL,
|
||||
@ -81,7 +81,7 @@ typedef enum {
|
||||
MP_BINARY_OP_IS,
|
||||
MP_BINARY_OP_EXCEPTION_MATCH,
|
||||
|
||||
// 12 inplace arithmetic operations
|
||||
// 12 inplace arithmetic operations; order matches corresponding mp_token_kind_t
|
||||
MP_BINARY_OP_INPLACE_OR,
|
||||
MP_BINARY_OP_INPLACE_XOR,
|
||||
MP_BINARY_OP_INPLACE_AND,
|
||||
@ -95,7 +95,7 @@ typedef enum {
|
||||
MP_BINARY_OP_INPLACE_MODULO,
|
||||
MP_BINARY_OP_INPLACE_POWER,
|
||||
|
||||
// 12 normal arithmetic operations
|
||||
// 12 normal arithmetic operations; order matches corresponding mp_token_kind_t
|
||||
MP_BINARY_OP_OR,
|
||||
MP_BINARY_OP_XOR,
|
||||
MP_BINARY_OP_AND,
|
||||
|
Loading…
x
Reference in New Issue
Block a user