Skip to main content

首页

Python源码分析(2):from AST to code object

语法分析得到的一个CST,然后转换成AST,然后编译得到一个Code Object。

PyRun_FileExFlags函数里面, 先通过PyParser_ASTFromFileObject得到一棵AST树

mod = PyParser_ASTFromFileObject(fp, filename, NULL, start, 0, 0,
                                     flags, NULL, arena);

然后通过run_mod编译并运行CodeObject。

static PyObject *
run_mod(mod_ty mod, PyObject *filename, PyObject *globals, PyObject *locals,
            PyCompilerFlags *flags, PyArena *arena)
{
    co = PyAST_CompileObject(mod, filename, flags, -1, arena);
    v = run_eval_code_obj(co, globals, locals);
}

编译的入口在Python/compile.c::PyAST_CompileObject

目录