Got rid of the timetz type entirely. This was a bit trickier than I

hoped it would be, but not too bad.  A test had to change:
time.__setstate__() can no longer add a non-None tzinfo member to a time
object that didn't already have one, since storage for a tzinfo member
doesn't exist in that case.
This commit is contained in:
Tim Peters 2003-01-10 03:49:02 +00:00
parent a5e8bb94e5
commit 37f398282b
3 changed files with 369 additions and 504 deletions

View File

@ -27,6 +27,11 @@
/* # of bytes for year, month, day, hour, minute, second, and usecond. */
#define _PyDateTime_DATETIME_DATASIZE 10
#define _PyTZINFO_HEAD \
PyObject_HEAD \
long hashcode; \
char hastzinfo; /* boolean flag */
typedef struct
{
PyObject_HEAD
@ -49,20 +54,23 @@ typedef struct
PyObject *tzinfo;
} PyDateTime_DateTimeTZ;
typedef struct
{
PyObject_HEAD
long hashcode;
#define _PyDateTime_TIMEHEAD \
_PyTZINFO_HEAD \
unsigned char data[_PyDateTime_TIME_DATASIZE];
} PyDateTime_Time;
typedef struct
{
PyObject_HEAD
long hashcode;
unsigned char data[_PyDateTime_TIME_DATASIZE];
_PyDateTime_TIMEHEAD
} _PyDateTime_BaseTime; /* hastzinfo false */
typedef struct
{
_PyDateTime_TIMEHEAD
PyObject *tzinfo;
} PyDateTime_TimeTZ;
} PyDateTime_Time; /* hastzinfo true */
typedef struct
{
@ -92,7 +100,7 @@ typedef struct
(((PyDateTime_DateTime*)o)->data[8] << 8) | \
((PyDateTime_DateTime*)o)->data[9])
/* Apply for time and timetz instances. */
/* Apply for time instances. */
#define PyDateTime_TIME_GET_HOUR(o) (((PyDateTime_Time*)o)->data[0])
#define PyDateTime_TIME_GET_MINUTE(o) (((PyDateTime_Time*)o)->data[1])
#define PyDateTime_TIME_GET_SECOND(o) (((PyDateTime_Time*)o)->data[2])
@ -113,9 +121,6 @@ typedef struct
#define PyTime_Check(op) PyObject_TypeCheck(op, &PyDateTime_TimeType)
#define PyTime_CheckExact(op) ((op)->ob_type == &PyDateTime_TimeType)
#define PyTimeTZ_Check(op) PyObject_TypeCheck(op, &PyDateTime_TimeTZType)
#define PyTimeTZ_CheckExact(op) ((op)->ob_type == &PyDateTime_TimeTZType)
#define PyDelta_Check(op) PyObject_TypeCheck(op, &PyDateTime_DeltaType)
#define PyDelta_CheckExact(op) ((op)->ob_type == &PyDateTime_DeltaType)

View File

@ -1857,7 +1857,7 @@ class TestTimeTZ(TestTime, TZInfoBase):
tinfo = PicklableFixedOffset(-300, 'cookie')
orig = self.theclass(5, 6, 7, tzinfo=tinfo)
state = orig.__getstate__()
derived = self.theclass()
derived = self.theclass(tzinfo=FixedOffset(0, "UTC", 0))
derived.__setstate__(state)
self.assertEqual(orig, derived)
self.failUnless(isinstance(derived.tzinfo, PicklableFixedOffset))

File diff suppressed because it is too large Load Diff