def make_il(self, il_code, symbol_table, c): """Make code for this node.""" start = il_code.get_label() end = il_code.get_label() il_code.add(control_cmds.Label(start)) c = c.set_continue(start).set_break(end) with report_err(): cond = self.cond.make_il(il_code, symbol_table, c) il_code.add(control_cmds.JumpZero(cond, end)) with report_err(): self.stat.make_il(il_code, symbol_table, c) il_code.add(control_cmds.Jump(start)) il_code.add(control_cmds.Label(end))
def make_il(self, il_code, symbol_table, c): """Make code for this if statement.""" endif_label = il_code.get_label() with report_err(): cond = self.cond.make_il(il_code, symbol_table, c) il_code.add(control_cmds.JumpZero(cond, endif_label)) with report_err(): self.stat.make_il(il_code, symbol_table, c) if self.else_stat: end_label = il_code.get_label() il_code.add(control_cmds.Jump(end_label)) il_code.add(control_cmds.Label(endif_label)) with report_err(): self.else_stat.make_il(il_code, symbol_table, c) il_code.add(control_cmds.Label(end_label)) else: il_code.add(control_cmds.Label(endif_label))