mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	bpo-1635741: Port symtable module to multiphase initialization (GH-23361)
Signed-off-by: Christian Heimes <christian@python.org>
This commit is contained in:
		
							parent
							
								
									d1e38d4023
								
							
						
					
					
						commit
						c7011012fa
					
				
					 2 changed files with 51 additions and 45 deletions
				
			
		|  | @ -0,0 +1,2 @@ | ||||||
|  | Port :mod:`symtable` extension module to multiphase initialization | ||||||
|  | (:pep:`489`) | ||||||
|  | @ -71,56 +71,60 @@ static PyMethodDef symtable_methods[] = { | ||||||
|     {NULL,              NULL}           /* sentinel */ |     {NULL,              NULL}           /* sentinel */ | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | static int | ||||||
|  | symtable_init_stentry_type(PyObject *m) | ||||||
|  | { | ||||||
|  |     return PyType_Ready(&PySTEntry_Type); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static int | ||||||
|  | symtable_init_constants(PyObject *m) | ||||||
|  | { | ||||||
|  |     if (PyModule_AddIntMacro(m, USE) < 0) return -1; | ||||||
|  |     if (PyModule_AddIntMacro(m, DEF_GLOBAL) < 0) return -1; | ||||||
|  |     if (PyModule_AddIntMacro(m, DEF_NONLOCAL) < 0) return -1; | ||||||
|  |     if (PyModule_AddIntMacro(m, DEF_LOCAL) < 0) return -1; | ||||||
|  |     if (PyModule_AddIntMacro(m, DEF_PARAM) < 0) return -1; | ||||||
|  |     if (PyModule_AddIntMacro(m, DEF_FREE) < 0) return -1; | ||||||
|  |     if (PyModule_AddIntMacro(m, DEF_FREE_CLASS) < 0) return -1; | ||||||
|  |     if (PyModule_AddIntMacro(m, DEF_IMPORT) < 0) return -1; | ||||||
|  |     if (PyModule_AddIntMacro(m, DEF_BOUND) < 0) return -1; | ||||||
|  |     if (PyModule_AddIntMacro(m, DEF_ANNOT) < 0) return -1; | ||||||
|  | 
 | ||||||
|  |     if (PyModule_AddIntConstant(m, "TYPE_FUNCTION", FunctionBlock) < 0) | ||||||
|  |         return -1; | ||||||
|  |     if (PyModule_AddIntConstant(m, "TYPE_CLASS", ClassBlock) < 0) return -1; | ||||||
|  |     if (PyModule_AddIntConstant(m, "TYPE_MODULE", ModuleBlock) < 0) | ||||||
|  |         return -1; | ||||||
|  | 
 | ||||||
|  |     if (PyModule_AddIntMacro(m, LOCAL) < 0) return -1; | ||||||
|  |     if (PyModule_AddIntMacro(m, GLOBAL_EXPLICIT) < 0) return -1; | ||||||
|  |     if (PyModule_AddIntMacro(m, GLOBAL_IMPLICIT) < 0) return -1; | ||||||
|  |     if (PyModule_AddIntMacro(m, FREE) < 0) return -1; | ||||||
|  |     if (PyModule_AddIntMacro(m, CELL) < 0) return -1; | ||||||
|  | 
 | ||||||
|  |     if (PyModule_AddIntConstant(m, "SCOPE_OFF", SCOPE_OFFSET) < 0) return -1; | ||||||
|  |     if (PyModule_AddIntMacro(m, SCOPE_MASK) < 0) return -1; | ||||||
|  | 
 | ||||||
|  |     return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static PyModuleDef_Slot symtable_slots[] = { | ||||||
|  |     {Py_mod_exec, symtable_init_stentry_type}, | ||||||
|  |     {Py_mod_exec, symtable_init_constants}, | ||||||
|  |     {0, NULL} | ||||||
|  | }; | ||||||
|  | 
 | ||||||
| static struct PyModuleDef symtablemodule = { | static struct PyModuleDef symtablemodule = { | ||||||
|     PyModuleDef_HEAD_INIT, |     PyModuleDef_HEAD_INIT, | ||||||
|     "_symtable", |     .m_name = "_symtable", | ||||||
|     NULL, |     .m_size = 0, | ||||||
|     -1, |     .m_methods = symtable_methods, | ||||||
|     symtable_methods, |     .m_slots = symtable_slots, | ||||||
|     NULL, |  | ||||||
|     NULL, |  | ||||||
|     NULL, |  | ||||||
|     NULL |  | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| PyMODINIT_FUNC | PyMODINIT_FUNC | ||||||
| PyInit__symtable(void) | PyInit__symtable(void) | ||||||
| { | { | ||||||
|     PyObject *m; |     return PyModuleDef_Init(&symtablemodule); | ||||||
| 
 |  | ||||||
|     if (PyType_Ready(&PySTEntry_Type) < 0) |  | ||||||
|         return NULL; |  | ||||||
| 
 |  | ||||||
|     m = PyModule_Create(&symtablemodule); |  | ||||||
|     if (m == NULL) |  | ||||||
|         return NULL; |  | ||||||
|     PyModule_AddIntMacro(m, USE); |  | ||||||
|     PyModule_AddIntMacro(m, DEF_GLOBAL); |  | ||||||
|     PyModule_AddIntMacro(m, DEF_NONLOCAL); |  | ||||||
|     PyModule_AddIntMacro(m, DEF_LOCAL); |  | ||||||
|     PyModule_AddIntMacro(m, DEF_PARAM); |  | ||||||
|     PyModule_AddIntMacro(m, DEF_FREE); |  | ||||||
|     PyModule_AddIntMacro(m, DEF_FREE_CLASS); |  | ||||||
|     PyModule_AddIntMacro(m, DEF_IMPORT); |  | ||||||
|     PyModule_AddIntMacro(m, DEF_BOUND); |  | ||||||
|     PyModule_AddIntMacro(m, DEF_ANNOT); |  | ||||||
| 
 |  | ||||||
|     PyModule_AddIntConstant(m, "TYPE_FUNCTION", FunctionBlock); |  | ||||||
|     PyModule_AddIntConstant(m, "TYPE_CLASS", ClassBlock); |  | ||||||
|     PyModule_AddIntConstant(m, "TYPE_MODULE", ModuleBlock); |  | ||||||
| 
 |  | ||||||
|     PyModule_AddIntMacro(m, LOCAL); |  | ||||||
|     PyModule_AddIntMacro(m, GLOBAL_EXPLICIT); |  | ||||||
|     PyModule_AddIntMacro(m, GLOBAL_IMPLICIT); |  | ||||||
|     PyModule_AddIntMacro(m, FREE); |  | ||||||
|     PyModule_AddIntMacro(m, CELL); |  | ||||||
| 
 |  | ||||||
|     PyModule_AddIntConstant(m, "SCOPE_OFF", SCOPE_OFFSET); |  | ||||||
|     PyModule_AddIntMacro(m, SCOPE_MASK); |  | ||||||
| 
 |  | ||||||
|     if (PyErr_Occurred()) { |  | ||||||
|         Py_DECREF(m); |  | ||||||
|         m = 0; |  | ||||||
|     } |  | ||||||
|     return m; |  | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Christian Heimes
						Christian Heimes