|
9 | 9 | from typing_extensions import Type, ClassVar
|
10 | 10 |
|
11 | 11 | from mypy.nodes import (
|
12 |
| - Lvalue, Expression, TupleExpr, CallExpr, RefExpr, GeneratorExpr, ARG_POS, MemberExpr |
| 12 | + Lvalue, Expression, TupleExpr, CallExpr, RefExpr, GeneratorExpr, ARG_POS, MemberExpr, TypeAlias |
13 | 13 | )
|
14 | 14 | from mypyc.ir.ops import (
|
15 | 15 | Value, BasicBlock, Integer, Branch, Register, TupleGet, TupleSet, IntOp
|
@@ -156,6 +156,11 @@ def loop_contents(
|
156 | 156 | handle_loop(loop_params)
|
157 | 157 |
|
158 | 158 |
|
| 159 | +def is_range_ref(expr: RefExpr) -> bool: |
| 160 | + return (expr.fullname == 'builtins.range' |
| 161 | + or isinstance(expr.node, TypeAlias) and expr.fullname == 'six.moves.xrange') |
| 162 | + |
| 163 | + |
159 | 164 | def make_for_loop_generator(builder: IRBuilder,
|
160 | 165 | index: Lvalue,
|
161 | 166 | expr: Expression,
|
@@ -189,7 +194,7 @@ def make_for_loop_generator(builder: IRBuilder,
|
189 | 194 |
|
190 | 195 | if (isinstance(expr, CallExpr)
|
191 | 196 | and isinstance(expr.callee, RefExpr)):
|
192 |
| - if (expr.callee.fullname == 'builtins.range' |
| 197 | + if (is_range_ref(expr.callee) |
193 | 198 | and (len(expr.args) <= 2
|
194 | 199 | or (len(expr.args) == 3
|
195 | 200 | and builder.extract_int(expr.args[2]) is not None))
|
|
0 commit comments