def default(self, n, live): if isinstance(n, ArithInstr): n.live = live | free_vars(n.lhs) \ | reduce(lambda a,b: a | b, [free_vars(r) for r in n.rhs], set([])) return n.live else: n.live = Visitor.default(self, n, live) return n.live
def visitIndirectCallX86(self, n, live): n.live = live | free_vars(n.funptr) return n.live
def visitReturn(self, n, live): n.live = free_vars(n.value) return n.live
def visitSetIfNotEqInstr(self, n, live): n.live = live - free_vars(n.lhs) return n.live
def visitIntMoveZeroExtendInstr(self, n, live): n.live = (live - free_vars(n.lhs)) | free_vars(n.rhs[0]) return n.live
def visitIntNotInstr(self, n, live): n.live = live | free_vars(n.lhs) return n.live
def visitIf(self, n, live): then_live = self.dispatch(n.tests[0][1], live) else_live = self.dispatch(n.else_, live) n.live = then_live | else_live | free_vars(n.tests[0][0]) return n.live