aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien George2020-04-06 12:19:03 +1000
committerDamien George2020-04-09 16:02:39 +1000
commit4914731e5831b289f7933e53cf34bdc79c7b7403 (patch)
tree6c4177f4771547e4e94eaa95b9bfca3922378ace
parenta5f2ae10fe2daf0acfb4b68090938206857c0582 (diff)
py/parse: Remove unnecessary check in const folding for ** operator.
In this part of the code there is no way to get the ** operator, so no need to check for it. This commit also adds tests for this, and other related, invalid const operations.
-rw-r--r--py/parse.c4
-rw-r--r--tests/micropython/const_error.py9
-rw-r--r--tests/micropython/const_error.py.exp7
3 files changed, 18 insertions, 2 deletions
diff --git a/py/parse.c b/py/parse.c
index 6ac544733..bb18904d7 100644
--- a/py/parse.c
+++ b/py/parse.c
@@ -655,8 +655,8 @@ STATIC bool fold_constants(parser_t *parser, uint8_t rule_id, size_t num_args) {
return false;
}
mp_token_kind_t tok = MP_PARSE_NODE_LEAF_ARG(peek_result(parser, i));
- if (tok == MP_TOKEN_OP_AT || tok == MP_TOKEN_OP_SLASH || tok == MP_TOKEN_OP_DBL_STAR) {
- // Can't fold @ or / or **
+ if (tok == MP_TOKEN_OP_AT || tok == MP_TOKEN_OP_SLASH) {
+ // Can't fold @ or /
return false;
}
mp_binary_op_t op = MP_BINARY_OP_LSHIFT + (tok - MP_TOKEN_OP_DBL_LESS);
diff --git a/tests/micropython/const_error.py b/tests/micropython/const_error.py
index 311cfb4d5..395fe0f77 100644
--- a/tests/micropython/const_error.py
+++ b/tests/micropython/const_error.py
@@ -15,3 +15,12 @@ test_syntax("a = const(x)")
# redefined constant
test_syntax("A = const(1); A = const(2)")
+
+# these operations are not supported within const
+test_syntax("A = const(1 @ 2)")
+test_syntax("A = const(1 / 2)")
+test_syntax("A = const(1 ** 2)")
+test_syntax("A = const(1 << -2)")
+test_syntax("A = const(1 >> -2)")
+test_syntax("A = const(1 % 0)")
+test_syntax("A = const(1 // 0)")
diff --git a/tests/micropython/const_error.py.exp b/tests/micropython/const_error.py.exp
index 5275689b4..3edc3efe9 100644
--- a/tests/micropython/const_error.py.exp
+++ b/tests/micropython/const_error.py.exp
@@ -1,2 +1,9 @@
SyntaxError
SyntaxError
+SyntaxError
+SyntaxError
+SyntaxError
+SyntaxError
+SyntaxError
+SyntaxError
+SyntaxError