| 
									
										
										
										
											2021-03-24 00:51:50 +01:00
										 |  |  | #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
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-24 02:23:01 +01:00
										 |  |  | struct _arena;   // Type defined in pycore_pyarena.h
 | 
					
						
							|  |  |  | struct _mod;     // Type defined in pycore_ast.h
 | 
					
						
							| 
									
										
										
										
											2021-03-24 00:51:50 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-25 03:44:11 +02:00
										 |  |  | // Export for 'test_peg_generator' shared extension
 | 
					
						
							| 
									
										
										
										
											2021-03-24 00:51:50 +01:00
										 |  |  | PyAPI_FUNC(PyCodeObject*) _PyAST_Compile( | 
					
						
							|  |  |  |     struct _mod *mod, | 
					
						
							|  |  |  |     PyObject *filename, | 
					
						
							|  |  |  |     PyCompilerFlags *flags, | 
					
						
							|  |  |  |     int optimize, | 
					
						
							| 
									
										
										
										
											2021-03-24 02:23:01 +01:00
										 |  |  |     struct _arena *arena); | 
					
						
							| 
									
										
										
										
											2022-11-02 15:13:07 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-29 12:06:04 +01:00
										 |  |  | static const _PyCompilerSrcLocation NO_LOCATION = {-1, -1, -1, -1}; | 
					
						
							| 
									
										
										
										
											2021-03-24 00:51:50 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | extern int _PyAST_Optimize( | 
					
						
							|  |  |  |     struct _mod *, | 
					
						
							| 
									
										
										
										
											2021-03-24 02:23:01 +01:00
										 |  |  |     struct _arena *arena, | 
					
						
							| 
									
										
										
										
											2023-05-31 20:21:46 +01:00
										 |  |  |     int optimize, | 
					
						
							|  |  |  |     int ff_features); | 
					
						
							| 
									
										
										
										
											2021-03-24 00:51:50 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-29 12:06:04 +01:00
										 |  |  | typedef struct { | 
					
						
							| 
									
										
										
										
											2023-06-27 20:24:58 +01:00
										 |  |  |     int h_label; | 
					
						
							| 
									
										
										
										
											2023-04-29 12:06:04 +01:00
										 |  |  |     int h_startdepth; | 
					
						
							|  |  |  |     int h_preserve_lasti; | 
					
						
							|  |  |  | } _PyCompile_ExceptHandlerInfo; | 
					
						
							| 
									
										
										
										
											2023-04-11 11:15:09 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							|  |  |  |     int i_opcode; | 
					
						
							|  |  |  |     int i_oparg; | 
					
						
							|  |  |  |     _PyCompilerSrcLocation i_loc; | 
					
						
							| 
									
										
										
										
											2023-04-29 12:06:04 +01:00
										 |  |  |     _PyCompile_ExceptHandlerInfo i_except_handler_info; | 
					
						
							| 
									
										
										
										
											2023-06-27 20:24:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /* Used by the assembler */ | 
					
						
							|  |  |  |     int i_target; | 
					
						
							|  |  |  |     int i_offset; | 
					
						
							| 
									
										
										
										
											2023-04-29 12:06:04 +01:00
										 |  |  | } _PyCompile_Instruction; | 
					
						
							| 
									
										
										
										
											2023-04-11 11:15:09 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							| 
									
										
										
										
											2023-04-29 12:06:04 +01:00
										 |  |  |     _PyCompile_Instruction *s_instrs; | 
					
						
							| 
									
										
										
										
											2023-04-11 11:15:09 +01:00
										 |  |  |     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 */ | 
					
						
							| 
									
										
										
										
											2023-05-09 11:02:14 -06:00
										 |  |  |     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. */ | 
					
						
							| 
									
										
										
										
											2023-04-11 11:15:09 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     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; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-31 18:17:59 +01:00
										 |  |  | /* 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); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-24 11:02:53 +01:00
										 |  |  | /* Access compiler internals for unit testing */ | 
					
						
							| 
									
										
										
										
											2022-11-14 13:56:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-07-25 03:44:11 +02:00
										 |  |  | // Export for '_testinternalcapi' shared extension
 | 
					
						
							| 
									
										
										
										
											2023-07-15 19:33:32 +09:00
										 |  |  | PyAPI_FUNC(PyObject*) _PyCompile_CleanDoc(PyObject *doc); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-14 13:56:40 +00:00
										 |  |  | PyAPI_FUNC(PyObject*) _PyCompile_CodeGen( | 
					
						
							|  |  |  |         PyObject *ast, | 
					
						
							|  |  |  |         PyObject *filename, | 
					
						
							|  |  |  |         PyCompilerFlags *flags, | 
					
						
							| 
									
										
										
										
											2023-05-07 18:47:28 +01:00
										 |  |  |         int optimize, | 
					
						
							|  |  |  |         int compile_mode); | 
					
						
							| 
									
										
										
										
											2022-11-14 13:56:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-24 11:02:53 +01:00
										 |  |  | PyAPI_FUNC(PyObject*) _PyCompile_OptimizeCfg( | 
					
						
							|  |  |  |         PyObject *instructions, | 
					
						
							| 
									
										
										
										
											2023-05-18 15:22:03 -06:00
										 |  |  |         PyObject *consts, | 
					
						
							|  |  |  |         int nlocals); | 
					
						
							| 
									
										
										
										
											2022-08-24 11:02:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-05-01 22:29:30 +01:00
										 |  |  | PyAPI_FUNC(PyCodeObject*) | 
					
						
							|  |  |  | _PyCompile_Assemble(_PyCompile_CodeUnitMetadata *umd, PyObject *filename, | 
					
						
							|  |  |  |                     PyObject *instructions); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-24 00:51:50 +01:00
										 |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #endif /* !Py_INTERNAL_COMPILE_H */
 |