def visitIfExpFlat(self, n, target): #Setup Label caseLs, endIfL = generate_if_labels(1) elseL = caseLs[0] # Test Instructions test = [] test += self.dispatch(n.test, target) test += [Comp86(x86FALSE, target)] test += [JumpEqual86(elseL)] # Then Instructions then = [] then += self.dispatch(n.then, target) then += [Jump86(endIfL)] # Else Instructions else_ = [] else_ += [Label86(elseL)] else_ += self.dispatch(n.else_, target) else_ += [Label86(endIfL)] return (test + [If86(then, else_)])
def visitIf(self, n, func_name): #Setup Label caseLs, endIfL = generate_if_labels(len(n.tests)) def make_branches(testlist, caseLs, else_): if testlist: test, body = testlist[0] tmp = Var86(generate_name(IFTEMP)) tinstrs = self.dispatch(test, tmp) tinstrs += [Comp86(x86FALSE, tmp)] tinstrs += [JumpEqual86(caseLs[0])] ninstrs = self.dispatch(body, func_name) ninstrs += [Jump86(endIfL)] einstrs = [Label86(caseLs[0])] + make_branches(testlist[1:], caseLs[1:], else_) return tinstrs + [If86(ninstrs, einstrs)] else: instrs = self.dispatch(else_, func_name) instrs += [Label86(endIfL)] return instrs return make_branches(n.tests, caseLs, n.else_)