diff options
author | Paul Ganssle <pganssle@users.noreply.github.com> | 2018-11-13 08:02:25 (GMT) |
---|---|---|
committer | Victor Stinner <vstinner@redhat.com> | 2018-11-13 08:02:25 (GMT) |
commit | 0d12672b30b8c6c992bef7564581117ae83e11ad (patch) | |
tree | d2b7a03d5264c1d4cf3b5f786ca15ef9fb1cad44 /Include/datetime.h | |
parent | 3015fb8ce4d25603434b9b44bb7effb98a481532 (diff) | |
download | cpython-0d12672b30b8c6c992bef7564581117ae83e11ad.zip cpython-0d12672b30b8c6c992bef7564581117ae83e11ad.tar.gz cpython-0d12672b30b8c6c992bef7564581117ae83e11ad.tar.bz2 |
bpo-35081: Remove Py_BUILD_CORE from datetime.h (GH-10416)
Datetime macros like PyDate_Check() have two implementations, one using
the C API capsule and one using direct access to the datetime type
symbols defined in _datetimemodule.c. Since the direct access versions
of the macros are only used in _datetimemodule.c, they have been moved
out of "datetime.h" and into _datetimemodule.c.
The _PY_DATETIME_IMPL macro is currently necessary in order to avoid
both duplicate definitions of these macros in _datetimemodule.c and
unnecessary declarations of C API capsule-related macros and varibles in
datetime.h.
Co-Authored-By: Victor Stinner <vstinner@redhat.com>
Diffstat (limited to 'Include/datetime.h')
-rw-r--r-- | Include/datetime.h | 28 |
1 files changed, 7 insertions, 21 deletions
diff --git a/Include/datetime.h b/Include/datetime.h index 059d5ec..00507cb 100644 --- a/Include/datetime.h +++ b/Include/datetime.h @@ -180,26 +180,11 @@ 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 - +/* This block is only used as part of the public API and should not be + * included in _datetimemodule.c, which does not use the C API capsule. + * See bpo-35081 for more details. + * */ +#ifndef _PY_DATETIME_IMPL /* Define global variable for the C API and a macro for setting it. */ static PyDateTime_CAPI *PyDateTimeAPI = NULL; @@ -225,6 +210,7 @@ static PyDateTime_CAPI *PyDateTimeAPI = NULL; #define PyTZInfo_Check(op) PyObject_TypeCheck(op, PyDateTimeAPI->TZInfoType) #define PyTZInfo_CheckExact(op) (Py_TYPE(op) == PyDateTimeAPI->TZInfoType) + /* Macros for accessing constructors in a simplified fashion. */ #define PyDate_FromDate(year, month, day) \ PyDateTimeAPI->Date_FromDate(year, month, day, PyDateTimeAPI->DateType) @@ -264,7 +250,7 @@ static PyDateTime_CAPI *PyDateTimeAPI = NULL; PyDateTimeAPI->Date_FromTimestamp( \ (PyObject*) (PyDateTimeAPI->DateType), args) -#endif /* Py_BUILD_CORE */ +#endif /* !defined(_PY_DATETIME_IMPL) */ #ifdef __cplusplus } |