From 93db3edd0088d1a1376ea3793a9a8b39004a9c58 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Sat, 10 Nov 2012 14:37:33 +0100 Subject: [PATCH] pytholite/compiler: support while loops --- migen/pytholite/compiler.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/migen/pytholite/compiler.py b/migen/pytholite/compiler.py index 14fb248b..d526fa8e 100644 --- a/migen/pytholite/compiler.py +++ b/migen/pytholite/compiler.py @@ -111,6 +111,17 @@ class _Compiler: states.append(test_state) states += states_t + 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: raise NotImplementedError return states, exit_states @@ -224,6 +235,10 @@ class _Compiler: return r 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] if isinstance(r, _Register): r = r.storage -- 2.30.2