[Python-checkins] bpo-1635741: Port symtable module to multiphase initialization (GH-23361)

miss-islington webhook-mailer at python.org
Wed Nov 18 10:03:59 EST 2020


https://github.com/python/cpython/commit/c7011012fac91a30923e39dbce7611f1b3ca8506
commit: c7011012fac91a30923e39dbce7611f1b3ca8506
branch: master
author: Christian Heimes <christian at python.org>
committer: miss-islington <31488909+miss-islington at users.noreply.github.com>
date: 2020-11-18T07:03:51-08:00
summary:

bpo-1635741: Port symtable module to multiphase initialization (GH-23361)



Signed-off-by: Christian Heimes <christian at python.org>

files:
A Misc/NEWS.d/next/C API/2020-11-18-10-52-38.bpo-1635741.FrWAwJ.rst
M Modules/symtablemodule.c

diff --git a/Misc/NEWS.d/next/C API/2020-11-18-10-52-38.bpo-1635741.FrWAwJ.rst b/Misc/NEWS.d/next/C API/2020-11-18-10-52-38.bpo-1635741.FrWAwJ.rst
new file mode 100644
index 0000000000000..9eda94140dd66
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2020-11-18-10-52-38.bpo-1635741.FrWAwJ.rst	
@@ -0,0 +1,2 @@
+Port :mod:`symtable` extension module to multiphase initialization
+(:pep:`489`)
diff --git a/Modules/symtablemodule.c b/Modules/symtablemodule.c
index 9180f185e1e87..f6c378fdaedc1 100644
--- a/Modules/symtablemodule.c
+++ b/Modules/symtablemodule.c
@@ -71,56 +71,60 @@ static PyMethodDef symtable_methods[] = {
     {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 = {
     PyModuleDef_HEAD_INIT,
-    "_symtable",
-    NULL,
-    -1,
-    symtable_methods,
-    NULL,
-    NULL,
-    NULL,
-    NULL
+    .m_name = "_symtable",
+    .m_size = 0,
+    .m_methods = symtable_methods,
+    .m_slots = symtable_slots,
 };
 
 PyMODINIT_FUNC
 PyInit__symtable(void)
 {
-    PyObject *m;
-
-    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;
+    return PyModuleDef_Init(&symtablemodule);
 }



More information about the Python-checkins mailing list