summaryrefslogtreecommitdiffstatshomepage
path: root/py
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2019-07-25 12:10:45 +1000
committerDamien George <damien.p.george@gmail.com>2019-09-26 14:37:26 +1000
commit6ce7c051e853e631802aedd39cbffb14dc3f123c (patch)
treef503032cee6eb6375de62d1a0c9d878a6e616478 /py
parent78e0e76b4f91e7c51d757779814447eeaab54f9a (diff)
downloadmicropython-6ce7c051e853e631802aedd39cbffb14dc3f123c.tar.gz
micropython-6ce7c051e853e631802aedd39cbffb14dc3f123c.zip
py/lexer: Reorder operator tokens to match corresponding binary ops.
Diffstat (limited to 'py')
-rw-r--r--py/lexer.h58
-rw-r--r--py/parse.c12
-rw-r--r--py/runtime0.h6
3 files changed, 40 insertions, 36 deletions
diff --git a/py/lexer.h b/py/lexer.h
index a29709107d..321185f10a 100644
--- a/py/lexer.h
+++ b/py/lexer.h
@@ -96,26 +96,44 @@ typedef enum _mp_token_kind_t {
MP_TOKEN_KW_WITH,
MP_TOKEN_KW_YIELD,
- 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_PERCENT,
+ MP_TOKEN_OP_TILDE,
+
+ // Order of these 6 matches corresponding mp_binary_op_t operator
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_DBL_EQUAL,
MP_TOKEN_OP_LESS_EQUAL,
MP_TOKEN_OP_MORE_EQUAL,
- MP_TOKEN_OP_DBL_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_SLASH,
+ MP_TOKEN_OP_SLASH,
+ MP_TOKEN_OP_PERCENT,
+ 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,
MP_TOKEN_DEL_BRACKET_OPEN,
@@ -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;
diff --git a/py/parse.c b/py/parse.c
index 66110e7c3d..946a3b1b34 100644
--- a/py/parse.c
+++ b/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;
}
diff --git a/py/runtime0.h b/py/runtime0.h
index efd439196c..e80e272aea 100644
--- a/py/runtime0.h
+++ b/py/runtime0.h
@@ -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,