hdl.xfrm: sample cache should be per-fragment.

This commit is contained in:
whitequark 2019-08-15 02:42:14 +00:00
parent fa0fa056ba
commit 40abaef858

View file

@ -491,8 +491,8 @@ class SampleDomainInjector(ValueTransformer, StatementTransformer):
class SampleLowerer(FragmentTransformer, ValueTransformer, StatementTransformer): class SampleLowerer(FragmentTransformer, ValueTransformer, StatementTransformer):
def __init__(self): def __init__(self):
self.sample_cache = ValueDict() self.sample_cache = None
self.sample_stmts = OrderedDict() self.sample_stmts = None
def _name_reset(self, value): def _name_reset(self, value):
if isinstance(value, Const): if isinstance(value, Const):
@ -527,13 +527,14 @@ class SampleLowerer(FragmentTransformer, ValueTransformer, StatementTransformer)
self.sample_cache[value] = sample self.sample_cache[value] = sample
return sample return sample
def on_fragment(self, fragment): def map_statements(self, fragment, new_fragment):
new_fragment = super().on_fragment(fragment) self.sample_cache = ValueDict()
self.sample_stmts = OrderedDict()
new_fragment.add_statements(map(self.on_statement, fragment.statements))
for domain, stmts in self.sample_stmts.items(): for domain, stmts in self.sample_stmts.items():
new_fragment.add_statements(stmts) new_fragment.add_statements(stmts)
for stmt in stmts: for stmt in stmts:
new_fragment.add_driver(stmt.lhs, domain) new_fragment.add_driver(stmt.lhs, domain)
return new_fragment
class SwitchCleaner(StatementVisitor): class SwitchCleaner(StatementVisitor):