diff --git a/Include/datetime.h b/Include/datetime.h index 059d5ecf7a2113..4da4ef0d8b2d5d 100644 --- a/Include/datetime.h +++ b/Include/datetime.h @@ -180,26 +180,9 @@ typedef struct { #define PyDateTime_CAPSULE_NAME "datetime.datetime_CAPI" -#ifdef Py_BUILD_CORE - -/* Macros for type checking when building the Python core. */ -#define PyDate_Check(op) PyObject_TypeCheck(op, &PyDateTime_DateType) -#define PyDate_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DateType) - -#define PyDateTime_Check(op) PyObject_TypeCheck(op, &PyDateTime_DateTimeType) -#define PyDateTime_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DateTimeType) - -#define PyTime_Check(op) PyObject_TypeCheck(op, &PyDateTime_TimeType) -#define PyTime_CheckExact(op) (Py_TYPE(op) == &PyDateTime_TimeType) - -#define PyDelta_Check(op) PyObject_TypeCheck(op, &PyDateTime_DeltaType) -#define PyDelta_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DeltaType) - -#define PyTZInfo_Check(op) PyObject_TypeCheck(op, &PyDateTime_TZInfoType) -#define PyTZInfo_CheckExact(op) (Py_TYPE(op) == &PyDateTime_TZInfoType) - -#else - +/* When datetime.h is included from _datetimemodule.c, + the macros are defined in _datetimemodule.c. */ +#ifndef _PY_DATETIME_IMPL /* Define global variable for the C API and a macro for setting it. */ static PyDateTime_CAPI *PyDateTimeAPI = NULL; @@ -224,6 +207,8 @@ static PyDateTime_CAPI *PyDateTimeAPI = NULL; #define PyTZInfo_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TZInfoType) #define PyTZInfo_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->TZInfoType) +#endif /* !defined(_PY_DATETIME_IMPL) */ + /* Macros for accessing constructors in a simplified fashion. */ #define PyDate_FromDate(year, month, day) \ @@ -264,8 +249,6 @@ static PyDateTime_CAPI *PyDateTimeAPI = NULL; PyDateTimeAPI->Date_FromTimestamp( \ (PyObject*) (PyDateTimeAPI->DateType), args) -#endif /* Py_BUILD_CORE */ - #ifdef __cplusplus } #endif diff --git a/Modules/_datetimemodule.c b/Modules/_datetimemodule.c index bc4caa02d5f146..a986668332cc81 100644 --- a/Modules/_datetimemodule.c +++ b/Modules/_datetimemodule.c @@ -2,7 +2,12 @@ * http://www.zope.org/Members/fdrake/DateTimeWiki/FrontPage */ +/* When datetime.h is included from _datetimemodule.c, + the macros are defines in _datetimemodule.c. */ +#define _PY_DATETIME_IMPL + #include "Python.h" +#include "datetime.h" #include "structmember.h" #include @@ -11,14 +16,21 @@ # include /* struct timeval */ #endif -/* Differentiate between building the core module and building extension - * modules. - */ -#ifndef Py_BUILD_CORE -#define Py_BUILD_CORE -#endif -#include "datetime.h" -#undef Py_BUILD_CORE +#define PyDate_Check(op) PyObject_TypeCheck(op, &PyDateTime_DateType) +#define PyDate_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DateType) + +#define PyDateTime_Check(op) PyObject_TypeCheck(op, &PyDateTime_DateTimeType) +#define PyDateTime_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DateTimeType) + +#define PyTime_Check(op) PyObject_TypeCheck(op, &PyDateTime_TimeType) +#define PyTime_CheckExact(op) (Py_TYPE(op) == &PyDateTime_TimeType) + +#define PyDelta_Check(op) PyObject_TypeCheck(op, &PyDateTime_DeltaType) +#define PyDelta_CheckExact(op) (Py_TYPE(op) == &PyDateTime_DeltaType) + +#define PyTZInfo_Check(op) PyObject_TypeCheck(op, &PyDateTime_TZInfoType) +#define PyTZInfo_CheckExact(op) (Py_TYPE(op) == &PyDateTime_TZInfoType) + /*[clinic input] module datetime