def propigateMerge(self, oldlcl, newlcl): for suite, frame in self.pairs: original = frame.readLocal(oldlcl, newlcl) if original and newlcl != original: asgn = Assign(original, [newlcl]) asgn.markMerge() suite.insert(asgn)
def evaluate(self, target=None): # Prevent multiple evaluations if not self.target: # If the merges are chained, try to use the same target? if not target: self.target = Local(None) else: self.target = target # Create the partial merges for e, onExit in zip(self.elements, self.onExits): if isinstance(e, DeferedMerge): e = e.evaluate(self.target) if self.target != e: asgn = Assign(e, self.target) asgn.markMerge() onExit.append(asgn) return self.target