def run(ast, args=[]): frame = Frame() ast = rewrite(ast, replace_nodes) log.final_ast("the final AST is:\n", ast) ast = rewrite(ast, populate_top_frame, frame=frame) log.topframe("the top frame is\n", frame) with frame as newframe: func = newframe['main'] newframe['argc'] = Int(len(args)) newframe['argv'] = Array(args) func.run(newframe)
def run(ast, args=['<progname>'], check_types=False): ast = rewrite(ast, replace_nodes) log.final_ast("the final AST is:\n", ast) frame = Frame() ast.eval(frame) log.topframe("the top frame is\n", frame) if 'main' not in frame: print("no main function defined, exiting") return 0 # type inference if check_types: with frame as newframe: newframe['argc'] = Int(len(args)) newframe['argv'] = Array(map(Str, args)) main = newframe['main'] main.infer_type(newframe) assert main.type.ret == Int, \ "main() should return Int but got %s" % main.type.ret with frame as newframe: newframe['argc'] = Int(len(args)) newframe['argv'] = Array(map(Str, args)) r = newframe['main'].Call(newframe) if isinstance(r, Int): return r.to_int() else: return 0