def p_jump_statement_2(p): '''jump_statement : RETURN expression ';' ''' # print m.symbols p[0] = {} if 'const' in p[2] : l = "ret {0} {1}".format(p[2]['type'], p[2]['val']) p[0]['code'] = cg.indent(l) elif not m.symbols.is_pointer(p[2]['id']) : l = "ret {0} {1}".format(m.symbols.type(p[2]['id']), m.symbols.var(p[2]['id'])) p[0]['code'] = p[2]['code'] + cg.indent(l) else : p[0]['id'], l1 = cg.load(p[2]['id'], "jump_statement") l2 = "ret {0} {1}".format(m.symbols.dereference(p[2]['id']), m.symbols.var(p[0]['id'])) p[0]['code'] = p[2]['code'] + l1 + cg.indent(l2) m.new_label()
def label(comment): new = m.new_label() l = "\n{0}: ;{1}".format(new, comment) return new, indent(l, 0)
def p_jump_statement_1(p): '''jump_statement : RETURN ';' ''' p[0] = {} p[0]['code'] = cg.indent("ret void") m.new_label()