Example #1
0
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()
Example #2
0
def label(comment):
    new = m.new_label()
    l = "\n{0}: ;{1}".format(new, comment)
    return new, indent(l, 0)
Example #3
0
def p_jump_statement_1(p):
    '''jump_statement : RETURN ';' '''
    p[0] = {}
    p[0]['code'] = cg.indent("ret void")
    m.new_label()