summaryrefslogtreecommitdiff
path: root/Python
diff options
context:
space:
mode:
authorBrett Cannon <brett@python.org>2015-03-27 12:57:16 -0400
committerBrett Cannon <brett@python.org>2015-03-27 12:57:16 -0400
commitff7f428b38d22e1a168fff3f9eac383e8e5511f5 (patch)
tree82ad850a2c0eaefa85db8d92a29b38469db7c442 /Python
parent781692ff6af7747948b956eca9b435c9c93c3407 (diff)
parent992c43fec900e204deffc026318b97ab0f83eff6 (diff)
downloadcpython-git-ff7f428b38d22e1a168fff3f9eac383e8e5511f5.tar.gz
Merge
Diffstat (limited to 'Python')
-rw-r--r--Python/pytime.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/Python/pytime.c b/Python/pytime.c
index 6bf7030cba..2aeeddc943 100644
--- a/Python/pytime.c
+++ b/Python/pytime.c
@@ -424,7 +424,7 @@ _PyTime_FromTimespec(_PyTime_t *tp, struct timespec *ts)
#endif
int
-_PyTime_FromObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t round)
+_PyTime_FromSecondsObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t round)
{
if (PyFloat_Check(obj)) {
double d, err;
@@ -433,8 +433,7 @@ _PyTime_FromObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t round)
d = PyFloat_AsDouble(obj);
d *= 1e9;
- /* FIXME: use sign */
- if (round == _PyTime_ROUND_UP)
+ if ((round == _PyTime_ROUND_UP) ^ (d < 0))
d = ceil(d);
else
d = floor(d);
@@ -471,6 +470,18 @@ _PyTime_FromObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t round)
}
}
+PyObject *
+_PyTime_AsNanosecondsObject(_PyTime_t t)
+{
+#ifdef HAVE_LONG_LONG
+ assert(sizeof(PY_LONG_LONG) >= sizeof(_PyTime_t));
+ return PyLong_FromLongLong((PY_LONG_LONG)t);
+#else
+ assert(sizeof(long) >= sizeof(_PyTime_t));
+ return PyLong_FromLong((long)t);
+#endif
+}
+
static _PyTime_t
_PyTime_Multiply(_PyTime_t t, unsigned int multiply, _PyTime_round_t round)
{