py/compile: Fix edge case when constant-folding negation of integer.
Also adds tests specifically for testing constant folding.
diff --git a/py/compile.c b/py/compile.c
index f9d53bc..9d2a6f2 100644
--- a/py/compile.c
+++ b/py/compile.c
@@ -315,7 +315,10 @@
pn = mp_parse_node_new_leaf(MP_PARSE_NODE_SMALL_INT, arg);
} else if (MP_PARSE_NODE_IS_TOKEN_KIND(pns->nodes[0], MP_TOKEN_OP_MINUS)) {
// -int
- pn = mp_parse_node_new_leaf(MP_PARSE_NODE_SMALL_INT, -arg);
+ arg = -arg;
+ if (MP_SMALL_INT_FITS(arg)) {
+ pn = mp_parse_node_new_leaf(MP_PARSE_NODE_SMALL_INT, arg);
+ }
} else {
assert(MP_PARSE_NODE_IS_TOKEN_KIND(pns->nodes[0], MP_TOKEN_OP_TILDE)); // should be
// ~int