From f57da497b2a96ab53de2fac37a34cdbc668c9636 Mon Sep 17 00:00:00 2001 From: Sebastien Bourdeauducq Date: Fri, 9 Nov 2012 23:02:16 +0100 Subject: [PATCH] pytholite/compiler: SymbolStack --- migen/pytholite/compiler.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/migen/pytholite/compiler.py b/migen/pytholite/compiler.py index 14fb248b..28fe19be 100644 --- a/migen/pytholite/compiler.py +++ b/migen/pytholite/compiler.py @@ -55,13 +55,35 @@ class _Register: sync = [Case(self.sel, *cases)] return Fragment(sync=sync) +class _SymbolStack: + def __init__(self): + self.stack = [] + + def push(self, init={}): + self.stack.append(init) + + def pop(self): + return self.stack.pop() + + def __setitem__(self, key, value): + self.stack[-1][key] = value + + def __getitem__(self, key): + for frame in reversed(self.stack): + try: + return frame[key] + except KeyError: + pass + raise KeyError + class _AbstractNextState: def __init__(self, target_state): self.target_state = target_state class _Compiler: def __init__(self, symdict, registers): - self.symdict = symdict + self.symdict = _SymbolStack() + self.symdict.push(symdict) self.registers = registers self.targetname = "" -- 2.30.2