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)
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()
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
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
def enter_template_free_params(ast): ret = Scope(None, id_engine.current()) id_engine.enter(ret) return ret
def _ENTER_LOCAL_SCOPE(ast): ret = Scope(None, id_engine.current()) id_engine.enter(ret) return tuple()