bpo-1635741: Port time module to multiphase initialization (PEP 489) (GH-19107)

This commit is contained in:
Paulo Henrique Silva 2020-03-23 15:58:23 -03:00 committed by GitHub
parent 9a81ab107a
commit bd409bb5b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 54 additions and 51 deletions

View File

@ -0,0 +1,2 @@
Port time module to multiphase initialization (:pep:`489`).
Patch by Paulo Henrique Silva.

View File

@ -1736,82 +1736,64 @@ if it is 1, the time is given in the DST time zone;\n\
if it is -1, mktime() should guess based on the date and time.\n");
static struct PyModuleDef timemodule = {
PyModuleDef_HEAD_INIT,
"time",
module_doc,
-1,
time_methods,
NULL,
NULL,
NULL,
NULL
};
PyMODINIT_FUNC
PyInit_time(void)
static int
time_exec(PyObject *module)
{
PyObject *m;
m = PyModule_Create(&timemodule);
if (m == NULL)
return NULL;
/* Set, or reset, module variables like time.timezone */
if (init_timezone(m) < 0) {
goto error;
if (init_timezone(module) < 0) {
return -1;
}
#if defined(HAVE_CLOCK_GETTIME) || defined(HAVE_CLOCK_SETTIME) || defined(HAVE_CLOCK_GETRES)
#ifdef CLOCK_REALTIME
if (PyModule_AddIntMacro(m, CLOCK_REALTIME) < 0) {
goto error;
if (PyModule_AddIntMacro(module, CLOCK_REALTIME) < 0) {
return -1;
}
#endif
#ifdef CLOCK_MONOTONIC
if (PyModule_AddIntMacro(m, CLOCK_MONOTONIC) < 0) {
goto error;
if (PyModule_AddIntMacro(module, CLOCK_MONOTONIC) < 0) {
return -1;
}
#endif
#ifdef CLOCK_MONOTONIC_RAW
if (PyModule_AddIntMacro(m, CLOCK_MONOTONIC_RAW) < 0) {
goto error;
if (PyModule_AddIntMacro(module, CLOCK_MONOTONIC_RAW) < 0) {
return -1;
}
#endif
#ifdef CLOCK_HIGHRES
if (PyModule_AddIntMacro(m, CLOCK_HIGHRES) < 0) {
goto error;
if (PyModule_AddIntMacro(module, CLOCK_HIGHRES) < 0) {
return -1;
}
#endif
#ifdef CLOCK_PROCESS_CPUTIME_ID
if (PyModule_AddIntMacro(m, CLOCK_PROCESS_CPUTIME_ID) < 0) {
goto error;
if (PyModule_AddIntMacro(module, CLOCK_PROCESS_CPUTIME_ID) < 0) {
return -1;
}
#endif
#ifdef CLOCK_THREAD_CPUTIME_ID
if (PyModule_AddIntMacro(m, CLOCK_THREAD_CPUTIME_ID) < 0) {
goto error;
if (PyModule_AddIntMacro(module, CLOCK_THREAD_CPUTIME_ID) < 0) {
return -1;
}
#endif
#ifdef CLOCK_PROF
if (PyModule_AddIntMacro(m, CLOCK_PROF) < 0) {
goto error;
if (PyModule_AddIntMacro(module, CLOCK_PROF) < 0) {
return -1;
}
#endif
#ifdef CLOCK_BOOTTIME
if (PyModule_AddIntMacro(m, CLOCK_BOOTTIME) < 0) {
goto error;
if (PyModule_AddIntMacro(module, CLOCK_BOOTTIME) < 0) {
return -1;
}
#endif
#ifdef CLOCK_UPTIME
if (PyModule_AddIntMacro(m, CLOCK_UPTIME) < 0) {
goto error;
if (PyModule_AddIntMacro(module, CLOCK_UPTIME) < 0) {
return -1;
}
#endif
#ifdef CLOCK_UPTIME_RAW
if (PyModule_AddIntMacro(m, CLOCK_UPTIME_RAW) < 0) {
goto error;
if (PyModule_AddIntMacro(module, CLOCK_UPTIME_RAW) < 0) {
return -1;
}
#endif
@ -1820,16 +1802,16 @@ PyInit_time(void)
if (!initialized) {
if (PyStructSequence_InitType2(&StructTimeType,
&struct_time_type_desc) < 0) {
goto error;
return -1;
}
}
if (PyModule_AddIntConstant(m, "_STRUCT_TM_ITEMS", 11)) {
goto error;
if (PyModule_AddIntConstant(module, "_STRUCT_TM_ITEMS", 11)) {
return -1;
}
Py_INCREF(&StructTimeType);
if (PyModule_AddObject(m, "struct_time", (PyObject*) &StructTimeType)) {
if (PyModule_AddObject(module, "struct_time", (PyObject*) &StructTimeType)) {
Py_DECREF(&StructTimeType);
goto error;
return -1;
}
initialized = 1;
@ -1840,11 +1822,30 @@ PyInit_time(void)
utc_string = tm.tm_zone;
#endif
return m;
return 0;
}
error:
Py_DECREF(m);
return NULL;
static struct PyModuleDef_Slot time_slots[] = {
{Py_mod_exec, time_exec},
{0, NULL}
};
static struct PyModuleDef timemodule = {
PyModuleDef_HEAD_INIT,
"time",
module_doc,
0,
time_methods,
time_slots,
NULL,
NULL,
NULL
};
PyMODINIT_FUNC
PyInit_time(void)
{
return PyModuleDef_Init(&timemodule);
}
/* Implement pysleep() for various platforms.