pytholite/compiler: support range(constants) in for loops
This commit is contained in:
parent
370bab1190
commit
37f113c3ea
|
@ -128,7 +128,7 @@ class _Compiler:
|
|||
target = statement.target.id
|
||||
if target in self.symdict:
|
||||
raise NotImplementedError("For loop target must use an available name")
|
||||
it = ast.literal_eval(statement.iter)
|
||||
it = self.visit_iterator(statement.iter)
|
||||
last_exit_states = []
|
||||
for iteration in it:
|
||||
self.symdict[target] = iteration
|
||||
|
@ -143,6 +143,19 @@ class _Compiler:
|
|||
raise NotImplementedError
|
||||
return states, exit_states
|
||||
|
||||
def visit_iterator(self, node):
|
||||
if isinstance(node, ast.List):
|
||||
return ast.literal_eval(node)
|
||||
elif isinstance(node, ast.Call) and isinstance(node.func, ast.Name):
|
||||
funcname = node.func.id
|
||||
args = map(ast.literal_eval, node.args)
|
||||
if funcname == "range":
|
||||
return range(*args)
|
||||
else:
|
||||
raise NotImplementedError
|
||||
else:
|
||||
raise NotImplementedError
|
||||
|
||||
def visit_assign(self, node):
|
||||
if isinstance(node.targets[0], ast.Name):
|
||||
self.targetname = node.targets[0].id
|
||||
|
|
Loading…
Reference in New Issue