8.3 实例化一个编译器
Last updated
Last updated
在编译器启动前,会创建出一个全局编译器状态。编译器状态(compiler
类型)结构体包含了编译器使用的属性,如:编译器标志、栈以及 PyArena
。它还包括了到其他数据结构的链接,如:符号表。
以下是编译器状态中的属性:
字段 | 类型 | 用途 |
---|---|---|
在 PyAST_CompileObject()
中实例化编译器状态:
如果模块没有文档字符串属性(__doc__
),则在此处创建一个空的属性,就像 __annotations__
属性一样;
PyAST_CompileObject()
将传递的值设置为编译器状态文件名,其用于堆栈跟踪和异常处理;
编译器的内存分配区设置成解释器也在使用的内存分配区;有关内存分配区的更多信息请参阅“内存管理”章节中的“自定义内存分配区”;
在编译代码前,会配置所有未来标志。
c_arena
PyArena *
指向内存分配区的指针
c_const_cache
PyObject * (dict)
保存所有常量以及 names
元组的 Python 字典
c_do_not_emit_bytecode
int
关闭字节码编译的标志
c_filename
PyObject *(str)
正在被编译的文件名
c_flags
PyCompilerFlags *
继承的编译器标志(请参见“编译器标志”章节内容)
c_future
PyFutureFeatures *
指向模块的 __future__
的指针
c_interactive
int
交互模式标志
c_nestlevel
int
当前嵌套级别
c_optimize
int
优化级别
c_st
symtable *
编译器符号表
c_stack
PyObject * (list)
保存 compiler_unit
指针的列表
u
compiler_unit *
当前块的编译器状态