123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- #ifndef Py_INTERNAL_COMPILE_H
- #define Py_INTERNAL_COMPILE_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- #ifndef Py_BUILD_CORE
- # error "this header requires Py_BUILD_CORE define"
- #endif
- struct _arena; // Type defined in pycore_pyarena.h
- struct _mod; // Type defined in pycore_ast.h
- // Export the symbol for test_peg_generator (built as a library)
- PyAPI_FUNC(PyCodeObject*) _PyAST_Compile(
- struct _mod *mod,
- PyObject *filename,
- PyCompilerFlags *flags,
- int optimize,
- struct _arena *arena);
- static const _PyCompilerSrcLocation NO_LOCATION = {-1, -1, -1, -1};
- typedef struct {
- int optimize;
- int ff_features;
- int recursion_depth; /* current recursion depth */
- int recursion_limit; /* recursion limit */
- } _PyASTOptimizeState;
- extern int _PyAST_Optimize(
- struct _mod *,
- struct _arena *arena,
- _PyASTOptimizeState *state);
- typedef struct {
- int h_offset;
- int h_startdepth;
- int h_preserve_lasti;
- } _PyCompile_ExceptHandlerInfo;
- typedef struct {
- int i_opcode;
- int i_oparg;
- _PyCompilerSrcLocation i_loc;
- _PyCompile_ExceptHandlerInfo i_except_handler_info;
- } _PyCompile_Instruction;
- typedef struct {
- _PyCompile_Instruction *s_instrs;
- int s_allocated;
- int s_used;
- int *s_labelmap; /* label id --> instr offset */
- int s_labelmap_size;
- int s_next_free_label; /* next free label id */
- } _PyCompile_InstructionSequence;
- typedef struct {
- PyObject *u_name;
- PyObject *u_qualname; /* dot-separated qualified name (lazy) */
- /* The following fields are dicts that map objects to
- the index of them in co_XXX. The index is used as
- the argument for opcodes that refer to those collections.
- */
- PyObject *u_consts; /* all constants */
- PyObject *u_names; /* all names */
- PyObject *u_varnames; /* local variables */
- PyObject *u_cellvars; /* cell variables */
- PyObject *u_freevars; /* free variables */
- PyObject *u_fasthidden; /* dict; keys are names that are fast-locals only
- temporarily within an inlined comprehension. When
- value is True, treat as fast-local. */
- Py_ssize_t u_argcount; /* number of arguments for block */
- Py_ssize_t u_posonlyargcount; /* number of positional only arguments for block */
- Py_ssize_t u_kwonlyargcount; /* number of keyword only arguments for block */
- int u_firstlineno; /* the first lineno of the block */
- } _PyCompile_CodeUnitMetadata;
- /* Utility for a number of growing arrays used in the compiler */
- int _PyCompile_EnsureArrayLargeEnough(
- int idx,
- void **array,
- int *alloc,
- int default_alloc,
- size_t item_size);
- int _PyCompile_ConstCacheMergeOne(PyObject *const_cache, PyObject **obj);
- int _PyCompile_InstrSize(int opcode, int oparg);
- /* Access compiler internals for unit testing */
- PyAPI_FUNC(PyObject*) _PyCompile_CodeGen(
- PyObject *ast,
- PyObject *filename,
- PyCompilerFlags *flags,
- int optimize,
- int compile_mode);
- PyAPI_FUNC(PyObject*) _PyCompile_OptimizeCfg(
- PyObject *instructions,
- PyObject *consts,
- int nlocals);
- PyAPI_FUNC(PyCodeObject*)
- _PyCompile_Assemble(_PyCompile_CodeUnitMetadata *umd, PyObject *filename,
- PyObject *instructions);
- #ifdef __cplusplus
- }
- #endif
- #endif /* !Py_INTERNAL_COMPILE_H */
|