def translate(root): glob = {} funcs = {} init_code = [] for item in root: if item[0] == 'fun': func = translate_function(item, glob, funcs) funcs[func.name] = func elif item[0] == 'declare': for var, init in item[2]: cvmtype, name = cvmtypes.declarator((item[1], var)) glob[name] = (cvmtype, init) if init: init_code.extend( translate_declaration(name, (cvmtype, init), glob, funcs)) else: raise Exception('Only function definitions and declarations' 'are allowed at top level.') return glob, funcs, init_code
def add_declaration(loc, decl): for var, init in decl[2]: cvmtype, name = cvmtypes.declarator((decl[1], var)) loc[name] = (cvmtype, init)