Author: Matti Picus <[email protected]>
Branch: py3.5
Changeset: r94411:42681276e562
Date: 2018-04-22 23:57 +0300
http://bitbucket.org/pypy/pypy/changeset/42681276e562/
Log: replace 7ac5e33a8260, applevel datetime inherit from a cpyext-
friendly class
diff --git a/lib-python/3/datetime.py b/lib-python/3/datetime.py
--- a/lib-python/3/datetime.py
+++ b/lib-python/3/datetime.py
@@ -7,6 +7,9 @@
import time as _time
import math as _math
+# for cpyext, use these as base classes
+from __pypy__._pypydatetime import dateinterop, deltainterop, timeinterop
+
def _cmp(x, y):
return 0 if x == y else 1 if x > y else -1
@@ -316,7 +319,7 @@
return q
-class timedelta:
+class timedelta(deltainterop):
"""Represent the difference between two datetime objects.
Supported operators:
@@ -429,7 +432,7 @@
if abs(d) > 999999999:
raise OverflowError("timedelta # of days is too large: %d" % d)
- self = object.__new__(cls)
+ self = deltainterop.__new__(cls)
self._days = d
self._seconds = s
self._microseconds = us
@@ -638,7 +641,7 @@
microseconds=999999)
timedelta.resolution = timedelta(microseconds=1)
-class date:
+class date(dateinterop):
"""Concrete date type.
Constructors:
@@ -678,12 +681,12 @@
if month is None and isinstance(year, bytes) and len(year) == 4 and \
1 <= year[2] <= 12:
# Pickle support
- self = object.__new__(cls)
+ self = dateinterop.__new__(cls)
self.__setstate(year)
self._hashcode = -1
return self
year, month, day = _check_date_fields(year, month, day)
- self = object.__new__(cls)
+ self = dateinterop.__new__(cls)
self._year = year
self._month = month
self._day = day
@@ -1008,7 +1011,7 @@
_tzinfo_class = tzinfo
-class time:
+class time(timeinterop):
"""Time with time zone.
Constructors:
@@ -1044,14 +1047,14 @@
"""
if isinstance(hour, bytes) and len(hour) == 6 and hour[0] < 24:
# Pickle support
- self = object.__new__(cls)
+ self = timeinterop.__new__(cls)
self.__setstate(hour, minute or None)
self._hashcode = -1
return self
hour, minute, second, microsecond = _check_time_fields(
hour, minute, second, microsecond)
_check_tzinfo_arg(tzinfo)
- self = object.__new__(cls)
+ self = timeinterop.__new__(cls)
self._hour = hour
self._minute = minute
self._second = second
@@ -1329,7 +1332,7 @@
microsecond=0, tzinfo=None):
if isinstance(year, bytes) and len(year) == 10 and 1 <= year[2] <= 12:
# Pickle support
- self = object.__new__(cls)
+ self = dateinterop.__new__(cls)
self.__setstate(year, month)
self._hashcode = -1
return self
@@ -1337,7 +1340,7 @@
hour, minute, second, microsecond = _check_time_fields(
hour, minute, second, microsecond)
_check_tzinfo_arg(tzinfo)
- self = object.__new__(cls)
+ self = dateinterop.__new__(cls)
self._year = year
self._month = month
self._day = day
diff --git a/pypy/module/cpyext/cdatetime.py b/pypy/module/cpyext/cdatetime.py
--- a/pypy/module/cpyext/cdatetime.py
+++ b/pypy/module/cpyext/cdatetime.py
@@ -40,26 +40,18 @@
w_type = space.getattr(w_datetime, space.newtext("datetime"))
datetimeAPI.c_DateTimeType = rffi.cast(
PyTypeObjectPtr, make_ref(space, w_type))
- datetimeAPI.c_DateTimeType.c_tp_basicsize = rffi.sizeof(
- cts.gettype('PyDateTime_DateTime'))
w_type = space.getattr(w_datetime, space.newtext("time"))
datetimeAPI.c_TimeType = rffi.cast(
PyTypeObjectPtr, make_ref(space, w_type))
- datetimeAPI.c_TimeType.c_tp_basicsize = rffi.sizeof(
- cts.gettype('PyDateTime_Time'))
w_type = space.getattr(w_datetime, space.newtext("timedelta"))
datetimeAPI.c_DeltaType = rffi.cast(
PyTypeObjectPtr, make_ref(space, w_type))
- datetimeAPI.c_DeltaType.c_tp_basicsize = rffi.sizeof(
- cts.gettype('PyDateTime_Delta'))
w_type = space.getattr(w_datetime, space.newtext("tzinfo"))
datetimeAPI.c_TZInfoType = rffi.cast(
PyTypeObjectPtr, make_ref(space, w_type))
- datetimeAPI.c_TZInfoType.c_tp_basicsize = rffi.sizeof(
- cts.gettype('PyDateTime_TZInfo'))
datetimeAPI.c_Date_FromDate = llhelper(
_PyDate_FromDate.api_func.functype,
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit