From: Eric Snow Date: Thu, 27 Oct 2022 03:20:54 +0000 (-0600) Subject: gh-98627: Use a Switch in PyModule_FromDefAndSpec2() (gh-98734) X-Git-Tag: v3.12.0a2~224 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=731909ebef3add602374e8a10002c4574bb24d4b;p=thirdparty%2FPython%2Fcpython.git gh-98627: Use a Switch in PyModule_FromDefAndSpec2() (gh-98734) This helps simplify some changes in follow-up PRs. It also matches what we're doing in PyModule_ExecDef(). --- diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c index dba20a0b3646..ee8ef7f5b4a5 100644 --- a/Objects/moduleobject.c +++ b/Objects/moduleobject.c @@ -291,23 +291,27 @@ PyModule_FromDefAndSpec2(PyModuleDef* def, PyObject *spec, int module_api_versio } for (cur_slot = def->m_slots; cur_slot && cur_slot->slot; cur_slot++) { - if (cur_slot->slot == Py_mod_create) { - if (create) { + switch (cur_slot->slot) { + case Py_mod_create: + if (create) { + PyErr_Format( + PyExc_SystemError, + "module %s has multiple create slots", + name); + goto error; + } + create = cur_slot->value; + break; + case Py_mod_exec: + has_execution_slots = 1; + break; + default: + assert(cur_slot->slot < 0 || cur_slot->slot > _Py_mod_LAST_SLOT); PyErr_Format( PyExc_SystemError, - "module %s has multiple create slots", - name); + "module %s uses unknown slot ID %i", + name, cur_slot->slot); goto error; - } - create = cur_slot->value; - } else if (cur_slot->slot < 0 || cur_slot->slot > _Py_mod_LAST_SLOT) { - PyErr_Format( - PyExc_SystemError, - "module %s uses unknown slot ID %i", - name, cur_slot->slot); - goto error; - } else { - has_execution_slots = 1; } }