예제 #1
0
파일: toplevel.py 프로젝트: bl0b/cppy
def func_signature(ast):
    print ast
    params = []
    cv = None
    for x in ast[1:]:
        if x[0] == 'func_type':
            ftype = x[1]
        elif x[0] == 'func_id':
            print "FUNC ID", x[1:]
            if type(x[1]) is Function:
                fid = x[1].name
            else:
                fid = x[1][1]
        elif x[0] == 'func_param':
            params.append(x[1])
        elif x[0] == 'opt_cv_qualifier':
            cv = (a[0] for a in x[1:])
    print "ftype", ftype
    print "fid", fid
    print "fparam", params
    f = id_engine.resolve(fid, True)
    if f is Entity.Null:
        f = Function(fid, id_engine.current())
    sig = f.create_signature(ftype, params, cv)
    id_engine.enter(f.scopes[sig])
    return ('func_signature', fid, sig)
예제 #2
0
파일: toplevel.py 프로젝트: bl0b/cppy
def NAMESPACE_ENTER(ast):
    sym = ast[1][1]
    n = id_engine.resolve(sym, True)
    print "enter namespace ?", n
    if n is Entity.Null:
        n = Namespace(sym, id_engine.current())
        print "new namespace !", n
    id_engine.enter(n)
    return id_engine.current()
예제 #3
0
파일: toplevel.py 프로젝트: bl0b/cppy
def template_type_decl_prefix(ast):
    free_params = []
    print ast
    #for x in ast[2:]:
    #    if x[0] == 'symbol':
    #        sym = x[1]
    decl = ast[-1]
    sym = decl[-1][1]
    kw = decl[-2][1]
    ret = TemplateType(sym, id_engine.current(), kw, ast[1], [])
    id_engine.enter(ret)
    return ret
예제 #4
0
파일: toplevel.py 프로젝트: bl0b/cppy
def _ENTER_STRUC(ast):
    if ast[2][0] == 'symbol':
        sym = ast[2][1]
        ret = id_engine.resolve(sym)
    else:
        sym = make_anon()
        ret = Entity.Null
    if ret is Entity.Null:
        ret = StructuredType(sym, id_engine.current())
    print "_ENTER_STRUC current =", id_engine.current()
    id_engine.enter(ret)
    print "_ENTER_STRUC in_struc =", id_engine.current()
    return ret
예제 #5
0
파일: toplevel.py 프로젝트: bl0b/cppy
def enter_template_free_params(ast):
    ret = Scope(None, id_engine.current())
    id_engine.enter(ret)
    return ret
예제 #6
0
파일: statements.py 프로젝트: bl0b/cppy
def _ENTER_LOCAL_SCOPE(ast):
    ret = Scope(None, id_engine.current())
    id_engine.enter(ret)
    return tuple()