@@ -48,6 +48,7 @@ typedef struct _compiler_t {
48
48
qstr qstr_native ;
49
49
qstr qstr_viper ;
50
50
qstr qstr_asm_thumb ;
51
+ qstr qstr_range ;
51
52
52
53
bool is_repl ;
53
54
pass_kind_t pass ;
@@ -1409,9 +1410,9 @@ void compile_for_stmt(compiler_t *comp, py_parse_node_struct_t *pns) {
1409
1410
// this bit optimises: for <x> in range(...), turning it into an explicitly incremented variable
1410
1411
// this is actually slower, but uses no heap memory
1411
1412
// for viper it will be much, much faster
1412
- if (/*comp->scope_cur->emit_options == EMIT_OPT_VIPER &&*/ PY_PARSE_NODE_IS_STRUCT_KIND (pns -> nodes [1 ], PN_power )) {
1413
+ if (/*comp->scope_cur->emit_options == EMIT_OPT_VIPER &&*/ PY_PARSE_NODE_IS_ID ( pns -> nodes [ 0 ]) && PY_PARSE_NODE_IS_STRUCT_KIND (pns -> nodes [1 ], PN_power )) {
1413
1414
py_parse_node_struct_t * pns_it = (py_parse_node_struct_t * )pns -> nodes [1 ];
1414
- if (PY_PARSE_NODE_IS_ID (pns_it -> nodes [0 ]) && PY_PARSE_NODE_IS_STRUCT_KIND (pns_it -> nodes [1 ], PN_trailer_paren ) && PY_PARSE_NODE_IS_NULL (pns_it -> nodes [2 ])) {
1415
+ if (PY_PARSE_NODE_IS_ID (pns_it -> nodes [0 ]) && PY_PARSE_NODE_LEAF_ARG ( pns_it -> nodes [ 0 ]) == comp -> qstr_range && PY_PARSE_NODE_IS_STRUCT_KIND (pns_it -> nodes [1 ], PN_trailer_paren ) && PY_PARSE_NODE_IS_NULL (pns_it -> nodes [2 ])) {
1415
1416
py_parse_node_t pn_range_args = ((py_parse_node_struct_t * )pns_it -> nodes [1 ])-> nodes [0 ];
1416
1417
py_parse_node_t * args ;
1417
1418
int n_args = list_get (& pn_range_args , PN_arglist , & args );
@@ -2853,6 +2854,7 @@ bool py_compile(py_parse_node_t pn, bool is_repl) {
2853
2854
comp -> qstr_native = qstr_from_str_static ("native" );
2854
2855
comp -> qstr_viper = qstr_from_str_static ("viper" );
2855
2856
comp -> qstr_asm_thumb = qstr_from_str_static ("asm_thumb" );
2857
+ comp -> qstr_range = qstr_from_str_static ("range" );
2856
2858
2857
2859
comp -> is_repl = is_repl ;
2858
2860
comp -> had_error = false;
0 commit comments