summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Belopolsky <alexander.belopolsky@gmail.com>2010-06-16 22:38:15 (GMT)
committerAlexander Belopolsky <alexander.belopolsky@gmail.com>2010-06-16 22:38:15 (GMT)
commitd95a586d7760731c6c842a1bdfdbb572257bb8ed (patch)
tree252a1a2c0b5165ed85414163a6afa3a70bfb3c6c
parent294f27141f170a09916341a8fcc49903b8e4359e (diff)
downloadcpython-d95a586d7760731c6c842a1bdfdbb572257bb8ed.zip
cpython-d95a586d7760731c6c842a1bdfdbb572257bb8ed.tar.gz
cpython-d95a586d7760731c6c842a1bdfdbb572257bb8ed.tar.bz2
Issue #9012: "Separate compilation of time and datetime modules."
Segregated code shared between time and datetime modules into Modules/_time.c. Added a new header file, Modules/_time.h, which will be used instead of Include/timefuncs.h for declarations shared between time and datetime modules.
-rw-r--r--Modules/_time.c28
-rw-r--r--Modules/_time.h3
-rw-r--r--Modules/timemodule.c26
-rw-r--r--setup.py4
4 files changed, 33 insertions, 28 deletions
diff --git a/Modules/_time.c b/Modules/_time.c
new file mode 100644
index 0000000..9b63c20
--- /dev/null
+++ b/Modules/_time.c
@@ -0,0 +1,28 @@
+#include "Python.h"
+#include "_time.h"
+
+/* Exposed in timefuncs.h. */
+time_t
+_PyTime_DoubleToTimet(double x)
+{
+ time_t result;
+ double diff;
+
+ result = (time_t)x;
+ /* How much info did we lose? time_t may be an integral or
+ * floating type, and we don't know which. If it's integral,
+ * we don't know whether C truncates, rounds, returns the floor,
+ * etc. If we lost a second or more, the C rounding is
+ * unreasonable, or the input just doesn't fit in a time_t;
+ * call it an error regardless. Note that the original cast to
+ * time_t can cause a C error too, but nothing we can do to
+ * worm around that.
+ */
+ diff = x - (double)result;
+ if (diff <= -1.0 || diff >= 1.0) {
+ PyErr_SetString(PyExc_ValueError,
+ "timestamp out of range for platform time_t");
+ result = (time_t)-1;
+ }
+ return result;
+}
diff --git a/Modules/_time.h b/Modules/_time.h
new file mode 100644
index 0000000..816593b
--- /dev/null
+++ b/Modules/_time.h
@@ -0,0 +1,3 @@
+/* XXX: It is probably best to move timefuncs.h content in here, and
+ remove it but user code may rely on it. */
+#include "timefuncs.h"
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 18fe13f..c4b5014 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -90,32 +90,6 @@ static double floattime(void);
/* For Y2K check */
static PyObject *moddict;
-/* Exposed in timefuncs.h. */
-time_t
-_PyTime_DoubleToTimet(double x)
-{
- time_t result;
- double diff;
-
- result = (time_t)x;
- /* How much info did we lose? time_t may be an integral or
- * floating type, and we don't know which. If it's integral,
- * we don't know whether C truncates, rounds, returns the floor,
- * etc. If we lost a second or more, the C rounding is
- * unreasonable, or the input just doesn't fit in a time_t;
- * call it an error regardless. Note that the original cast to
- * time_t can cause a C error too, but nothing we can do to
- * worm around that.
- */
- diff = x - (double)result;
- if (diff <= -1.0 || diff >= 1.0) {
- PyErr_SetString(PyExc_ValueError,
- "timestamp out of range for platform time_t");
- result = (time_t)-1;
- }
- return result;
-}
-
static PyObject *
time_time(PyObject *self, PyObject *unused)
{
diff --git a/setup.py b/setup.py
index 18e1cd6..ab7909e 100644
--- a/setup.py
+++ b/setup.py
@@ -450,9 +450,9 @@ class PyBuildExt(build_ext):
depends=['_math.h'],
libraries=math_libs) )
# time operations and variables
- exts.append( Extension('time', ['timemodule.c'],
+ exts.append( Extension('time', ['timemodule.c', '_time.c'],
libraries=math_libs) )
- exts.append( Extension('datetime', ['datetimemodule.c', 'timemodule.c'],
+ exts.append( Extension('datetime', ['datetimemodule.c', '_time.c'],
libraries=math_libs) )
# fast iterator tools implemented in C
exts.append( Extension("itertools", ["itertoolsmodule.c"]) )