pytholite/compiler: support while loops

This commit is contained in:
Sebastien Bourdeauducq 2012-11-10 14:37:33 +01:00
parent a901ef46ab
commit 93db3edd00
1 changed files with 15 additions and 0 deletions

View File

@ -111,6 +111,17 @@ class _Compiler:
states.append(test_state) states.append(test_state)
states += states_t + states_f states += states_t + states_f
exit_states += exit_states_t + exit_states_f exit_states += exit_states_t + exit_states_f
elif isinstance(statement, ast.While):
test = self.visit_expr(statement.test)
states_b, exit_states_b = self.visit_block(statement.body)
test_state = [If(test, _AbstractNextState(states_b[0]))]
for exit_state in exit_states_b:
exit_state.insert(0, _AbstractNextState(test_state))
exit_states.append(test_state)
states += states_b
states.append(test_state)
else: else:
raise NotImplementedError raise NotImplementedError
return states, exit_states return states, exit_states
@ -224,6 +235,10 @@ class _Compiler:
return r return r
def visit_expr_name(self, node): def visit_expr_name(self, node):
if node.id == "True":
return Constant(1)
if node.id == "False":
return Constant(0)
r = self.symdict[node.id] r = self.symdict[node.id]
if isinstance(r, _Register): if isinstance(r, _Register):
r = r.storage r = r.storage