[Python-checkins] python/nondist/sandbox/datetime datetime.c,1.70,1.71 datetime.h,1.17,1.18 obj_date.c,1.53,1.54 obj_datetime.c,1.55,1.56 obj_datetimetz.c,1.15,1.16 obj_delta.c,1.27,1.28 obj_time.c,1.17,1.18 obj_timetz.c,1.27,1.28

tim_one@users.sourceforge.net tim_one@users.sourceforge.net
Sat, 14 Dec 2002 09:42:12 -0800


Update of /cvsroot/python/python/nondist/sandbox/datetime
In directory sc8-pr-cvs1:/tmp/cvs-serv21596

Modified Files:
	datetime.c datetime.h obj_date.c obj_datetime.c 
	obj_datetimetz.c obj_delta.c obj_time.c obj_timetz.c 
Log Message:
Finally bit the moldy int-vs-long bullet.  We use int everywhere now,
except where we absolutely can't.  Should have done this the first day.


Index: datetime.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/datetime.c,v
retrieving revision 1.70
retrieving revision 1.71
diff -C2 -d -r1.70 -r1.71
*** datetime.c	14 Dec 2002 16:23:34 -0000	1.70
--- datetime.c	14 Dec 2002 17:42:09 -0000	1.71
***************
*** 11,14 ****
--- 11,23 ----
  #include "datetime.h"
  
+ /* We require that C int be at least 32 bits, and use int virtually
+  * everywhere.  In just a few cases we use a temp long, where a Python
+  * API returns a C long.  In such cases, we have to ensure that the
+  * final result fits in a C int (this can be an issue on 64-bit boxes).
+  */
+ #if SIZEOF_INT < 4
+ #	error "datetime.c requires that C int have at least 32 bits"
+ #endif
+ 
  #define MINYEAR 1
  #define MAXYEAR 9999
***************
*** 96,103 ****
   * overflow case).
   */
! static long
! divmod(long x, long y, long *r)
  {
! 	long quo;
  
  	assert(y > 0);
--- 105,112 ----
   * overflow case).
   */
! static int
! divmod(int x, int y, int *r)
  {
! 	int quo;
  
  	assert(y > 0);
***************
*** 172,176 ****
   * start with year 1, so days_before_year(1) == 0.
   */
! static long
  days_before_year(int year)
  {
--- 181,185 ----
   * start with year 1, so days_before_year(1) == 0.
   */
! static int
  days_before_year(int year)
  {
***************
*** 195,199 ****
  /* ordinal -> year, month, day, considering 01-Jan-0001 as day 1. */
  static void
! ord_to_ymd(long      ordinal, long *year, long *month, long *day)
  {
  	int n, n1, n4, n100, n400, leapyear, preceding;
--- 204,208 ----
  /* ordinal -> year, month, day, considering 01-Jan-0001 as day 1. */
  static void
! ord_to_ymd(int ordinal, int *year, int *month, int *day)
  {
  	int n, n1, n4, n100, n400, leapyear, preceding;
***************
*** 278,282 ****
  
  /* year, month, day -> ordinal, considering 01-Jan-0001 as day 1. */
! static long
  ymd_to_ord(int year, int month, int day)
  {
--- 287,291 ----
  
  /* year, month, day -> ordinal, considering 01-Jan-0001 as day 1. */
! static int
  ymd_to_ord(int year, int month, int day)
  {
***************
*** 316,331 ****
   */
  static int
! check_delta_day_range(long days, PyObject *exception)
  {
- 	char buf[200];
- 
  	if (-MAX_DELTA_DAYS <= days && days <= MAX_DELTA_DAYS)
  		return 0;
! 	/* PyErr_Format() ignores the "l" in "%ld", which isn't correct
! 	 * on boxes where sizeof(long) > sizeof(int).  So roll our own.
! 	 */
! 	PyOS_snprintf(buf, sizeof(buf), "days=%ld; must have magnitude <= %d",
! 		      days, MAX_DELTA_DAYS);
! 	PyErr_SetString(exception, buf);
  	return -1;
  }
--- 325,335 ----
   */
  static int
! check_delta_day_range(int days, PyObject *exception)
  {
  	if (-MAX_DELTA_DAYS <= days && days <= MAX_DELTA_DAYS)
  		return 0;
! 	PyErr_Format(exception,
! 		     "days=%d; must have magnitude <= %d",
! 		     days);
  	return -1;
  }
***************
*** 335,339 ****
   */
  static int
! check_date_args(long year, long month, long day)
  {
  
--- 339,343 ----
   */
  static int
! check_date_args(int year, int month, int day)
  {
  
***************
*** 360,364 ****
   */
  static int
! check_time_args(long h, long m, long s, long us)
  {
  	if (h < 0 || h > 23) {
--- 364,368 ----
   */
  static int
! check_time_args(int h, int m, int s, int us)
  {
  	if (h < 0 || h > 23) {
***************
*** 392,406 ****
   * factor "lo" units.  factor must be > 0.  If *lo is less than 0, or
   * at least factor, enough of *lo is converted into "hi" units so that
!  * 0 <= *lo < factor.  The input values must be such that long overflow
   * is impossible.
   */
  static void
! normalize_pair(long *hi, long *lo, long factor)
  {
  	assert(factor > 0);
  	assert(lo != hi);
  	if (*lo < 0 || *lo >= factor) {
! 		const long num_hi = divmod(*lo, factor, lo);
! 		const long new_hi = *hi + num_hi;
  		assert(! SIGNED_ADD_OVERFLOWED(new_hi, *hi, num_hi));
  		*hi = new_hi;
--- 396,410 ----
   * factor "lo" units.  factor must be > 0.  If *lo is less than 0, or
   * at least factor, enough of *lo is converted into "hi" units so that
!  * 0 <= *lo < factor.  The input values must be such that int overflow
   * is impossible.
   */
  static void
! normalize_pair(int *hi, int *lo, int factor)
  {
  	assert(factor > 0);
  	assert(lo != hi);
  	if (*lo < 0 || *lo >= factor) {
! 		const int num_hi = divmod(*lo, factor, lo);
! 		const int new_hi = *hi + num_hi;
  		assert(! SIGNED_ADD_OVERFLOWED(new_hi, *hi, num_hi));
  		*hi = new_hi;
***************
*** 416,420 ****
   */
  static void
! normalize_d_s_us(long *d, long *s, long *us)
  {
  	if (*us < 0 || *us >= 1000000) {
--- 420,424 ----
   */
  static void
! normalize_d_s_us(int *d, int *s, int *us)
  {
  	if (*us < 0 || *us >= 1000000) {
***************
*** 443,447 ****
   */
  static void
! normalize_y_m_d(long *y, long *m, long *d)
  {
  	int dim;	/* # of days in month */
--- 447,451 ----
   */
  static void
! normalize_y_m_d(int *y, int *m, int *d)
  {
  	int dim;	/* # of days in month */
***************
*** 462,466 ****
  	}
  	assert(1 <= *m && *m <= 12);
- 	assert(INT_MIN < *y && *y < INT_MAX);  /* so cast to int is safe */
  
  	/* Now only day can be out of bounds (year may also be out of bounds
--- 466,469 ----
***************
*** 469,473 ****
  	 * method here is principled and explainable.
  	 */
! 	dim = days_in_month((int)*y, (int)*m);
  	if (*d < 1 || *d > dim) {
  		/* Move day-1 days from the first of the month.  First try to
--- 472,476 ----
  	 * method here is principled and explainable.
  	 */
! 	dim = days_in_month(*y, *m);
  	if (*d < 1 || *d > dim) {
  		/* Move day-1 days from the first of the month.  First try to
***************
*** 478,482 ****
  			--*m;
  			if (*m > 0)
! 				*d = days_in_month((int)*y, (int)*m);
  			else {
  				--*y;
--- 481,485 ----
  			--*m;
  			if (*m > 0)
! 				*d = days_in_month(*y, *m);
  			else {
  				--*y;
***************
*** 495,499 ****
  		}
  		else {
! 			long ordinal = ymd_to_ord((int)*y, (int)*m, 1) +
  						  *d - 1;
  			ord_to_ymd(ordinal, y, m, d);
--- 498,502 ----
  		}
  		else {
! 			int ordinal = ymd_to_ord(*y, *m, 1) +
  						  *d - 1;
  			ord_to_ymd(ordinal, y, m, d);
***************
*** 509,513 ****
   */
  static int
! normalize_date(long *year, long *month, long *day)
  {
  	int result;
--- 512,516 ----
   */
  static int
! normalize_date(int *year, int *month, int *day)
  {
  	int result;
***************
*** 528,534 ****
   */
  static int
! normalize_datetime(long *year, long *month, long *day,
!                    long *hour, long *minute, long *second,
!                    long *microsecond)
  {
  	normalize_pair(second, microsecond, 1000000);
--- 531,537 ----
   */
  static int
! normalize_datetime(int *year, int *month, int *day,
!                    int *hour, int *minute, int *second,
!                    int *microsecond)
  {
  	normalize_pair(second, microsecond, 1000000);
***************
*** 566,574 ****
   * *none is set to 0 and the offset is returned.
   */
! static long
  call_utcoffset(PyObject *tzinfo, PyObject *tzinfoarg, int *none)
  {
  	PyObject *u;
! 	long result = -1;
  
  	assert(tzinfo != NULL);
--- 569,577 ----
   * *none is set to 0 and the offset is returned.
   */
! static int
  call_utcoffset(PyObject *tzinfo, PyObject *tzinfoarg, int *none)
  {
  	PyObject *u;
! 	long result = -1;	/* Py{Inr,Long}_AsLong return long */
  
  	assert(tzinfo != NULL);
***************
*** 597,600 ****
--- 600,605 ----
  	}
  
+ Done:
+ 	Py_DECREF(u);
  	if (result < -1439 || result > 1439) {
  		PyErr_Format(PyExc_ValueError,
***************
*** 604,611 ****
  		result = -1;
  	}
! 
! Done:
! 	Py_DECREF(u);
! 	return result;
  }
  
--- 609,613 ----
  		result = -1;
  	}
! 	return (int)result;
  }
  
***************
*** 641,645 ****
   */
  static naivety
! classify_object(PyObject *op, long *offset)
  {
  	int none;
--- 643,647 ----
   */
  static naivety
! classify_object(PyObject *op, int *offset)
  {
  	int none;
***************
*** 785,791 ****
  		PyObject *tzinfo, PyObject *tzinfoarg)
  {
! 	long offset;
! 	long hours;
! 	long minutes;
  	char sign;
  	int none;
--- 787,793 ----
  		PyObject *tzinfo, PyObject *tzinfoarg)
  {
! 	int offset;
! 	int hours;
! 	int minutes;
  	char sign;
  	int none;
***************
*** 857,861 ****
   */
  static PyObject *
! diff_to_bool(long diff, int op)
  {
  	PyObject *result;
--- 859,863 ----
   */
  static PyObject *
! diff_to_bool(int diff, int op)
  {
  	PyObject *result;
***************
*** 949,953 ****
  static PyObject *
  new_datetimetz(int year, int month, int day, int hour, int minute,
!              int second, int usecond, PyObject *tzinfo)
  {
  	PyDateTime_DateTimeTZ *self;
--- 951,955 ----
  static PyObject *
  new_datetimetz(int year, int month, int day, int hour, int minute,
! 	       int second, int usecond, PyObject *tzinfo)
  {
  	PyDateTime_DateTimeTZ *self;
***************
*** 999,1003 ****
   */
  static PyObject *
! new_delta(long days, long seconds, long microseconds, int normalize)
  {
  	PyDateTime_Delta *self;
--- 1001,1005 ----
   */
  static PyObject *
! new_delta(int days, int seconds, int microseconds, int normalize)
  {
  	PyDateTime_Delta *self;

Index: datetime.h
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/datetime.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** datetime.h	13 Dec 2002 19:00:53 -0000	1.17
--- datetime.h	14 Dec 2002 17:42:09 -0000	1.18
***************
*** 69,75 ****
  	PyObject_HEAD
  	long hashcode;		/* -1 when unknown */
! 	long days;		/* -MAX_DELTA_DAYS <= days <= MAX_DELTA_DAYS */
! 	long seconds;		/* 0 <= seconds < 24*3600 is invariant */
! 	long microseconds;	/* 0 <= microseconds < 1000000 is invariant */
  } PyDateTime_Delta;
  
--- 69,75 ----
  	PyObject_HEAD
  	long hashcode;		/* -1 when unknown */
! 	int days;		/* -MAX_DELTA_DAYS <= days <= MAX_DELTA_DAYS */
! 	int seconds;		/* 0 <= seconds < 24*3600 is invariant */
! 	int microseconds;	/* 0 <= microseconds < 1000000 is invariant */
  } PyDateTime_Delta;
  

Index: obj_date.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_date.c,v
retrieving revision 1.53
retrieving revision 1.54
diff -C2 -d -r1.53 -r1.54
*** obj_date.c	14 Dec 2002 16:23:34 -0000	1.53
--- obj_date.c	14 Dec 2002 17:42:09 -0000	1.54
***************
*** 8,12 ****
  date_year(PyDateTime_Date *self, void *unused)
  {
! 	return (PyInt_FromLong(GET_YEAR(self)));
  }
  
--- 8,12 ----
  date_year(PyDateTime_Date *self, void *unused)
  {
! 	return PyInt_FromLong(GET_YEAR(self));
  }
  
***************
*** 14,18 ****
  date_month(PyDateTime_Date *self, void *unused)
  {
! 	return (PyInt_FromLong(GET_MONTH(self)));
  }
  
--- 14,18 ----
  date_month(PyDateTime_Date *self, void *unused)
  {
! 	return PyInt_FromLong(GET_MONTH(self));
  }
  
***************
*** 20,24 ****
  date_day(PyDateTime_Date *self, void *unused)
  {
! 	return (PyInt_FromLong(GET_DAY(self)));
  }
  
--- 20,24 ----
  date_day(PyDateTime_Date *self, void *unused)
  {
! 	return PyInt_FromLong(GET_DAY(self));
  }
  
***************
*** 36,42 ****
  {
  	PyObject *self = NULL;
! 	long year;
! 	long month;
! 	long day;
  
  	static char *keywords[] = {
--- 36,42 ----
  {
  	PyObject *self = NULL;
! 	int year;
! 	int month;
! 	int day;
  
  	static char *keywords[] = {
***************
*** 44,52 ****
  	};
  
! 	if (PyArg_ParseTupleAndKeywords(args, kw, "lll", keywords,
  					&year, &month, &day)) {
  		if (check_date_args(year, month, day) < 0)
  			return NULL;
! 		self = new_date((int)year, (int)month, (int)day);
  	}
  	return self;
--- 44,52 ----
  	};
  
! 	if (PyArg_ParseTupleAndKeywords(args, kw, "iii", keywords,
  					&year, &month, &day)) {
  		if (check_date_args(year, month, day) < 0)
  			return NULL;
! 		self = new_date(year, month, day);
  	}
  	return self;
***************
*** 119,128 ****
  {
  	PyObject *result = NULL;
! 	long ordinal;
  
! 	if (PyArg_ParseTuple(args, "l:fromordinal", &ordinal)) {
! 		long year;
! 		long month;
! 		long day;
  
  		if (ordinal < 1)
--- 119,128 ----
  {
  	PyObject *result = NULL;
! 	int ordinal;
  
! 	if (PyArg_ParseTuple(args, "i:fromordinal", &ordinal)) {
! 		int year;
! 		int month;
! 		int day;
  
  		if (ordinal < 1)
***************
*** 131,135 ****
  		else {
  			ord_to_ymd(ordinal, &year, &month, &day);
! 			result = PyObject_CallFunction(cls, "lll",
  						       year, month, day);
  		}
--- 131,135 ----
  		else {
  			ord_to_ymd(ordinal, &year, &month, &day);
! 			result = PyObject_CallFunction(cls, "iii",
  						       year, month, day);
  		}
***************
*** 149,160 ****
  {
  	PyObject *result = NULL;
! 	long year = GET_YEAR(date);
! 	long month = GET_MONTH(date);
! 	long deltadays = GET_TD_DAYS(delta);
  	/* C-level overflow is impossible because |deltadays| < 1e9. */
! 	long day = GET_DAY(date) + (negate ? -deltadays : deltadays);
  
  	if (normalize_date(&year, &month, &day) >= 0)
! 		result = new_date((int)year, (int)month, (int)day);
  	return result;
  }
--- 149,160 ----
  {
  	PyObject *result = NULL;
! 	int year = GET_YEAR(date);
! 	int month = GET_MONTH(date);
! 	int deltadays = GET_TD_DAYS(delta);
  	/* C-level overflow is impossible because |deltadays| < 1e9. */
! 	int day = GET_DAY(date) + (negate ? -deltadays : deltadays);
  
  	if (normalize_date(&year, &month, &day) >= 0)
! 		result = new_date(year, month, day);
  	return result;
  }
***************
*** 199,208 ****
  		if (PyDate_CheckExact(right)) {
  			/* date - date */
! 			long left_ord = ymd_to_ord(GET_YEAR(left),
! 						   GET_MONTH(left),
! 						   GET_DAY(left));
! 			long right_ord = ymd_to_ord(GET_YEAR(right),
! 						    GET_MONTH(right),
! 						    GET_DAY(right));
  			return new_delta(left_ord - right_ord, 0, 0, 0);
  		}
--- 199,208 ----
  		if (PyDate_CheckExact(right)) {
  			/* date - date */
! 			int left_ord = ymd_to_ord(GET_YEAR(left),
! 						  GET_MONTH(left),
! 						  GET_DAY(left));
! 			int right_ord = ymd_to_ord(GET_YEAR(right),
! 						   GET_MONTH(right),
! 						   GET_DAY(right));
  			return new_delta(left_ord - right_ord, 0, 0, 0);
  		}
***************
*** 290,296 ****
  	int  year         = GET_YEAR(self);
  	int  week1_monday = iso_week1_monday(year);
! 	long today        = ymd_to_ord(year, GET_MONTH(self), GET_DAY(self));
! 	long  week;
! 	long  day;
  
  	week = divmod(today - week1_monday, 7, &day);
--- 290,296 ----
  	int  year         = GET_YEAR(self);
  	int  week1_monday = iso_week1_monday(year);
! 	int today         = ymd_to_ord(year, GET_MONTH(self), GET_DAY(self));
! 	int  week;
! 	int  day;
  
  	week = divmod(today - week1_monday, 7, &day);
***************
*** 304,308 ****
  		week = 0;
  	}
! 	return Py_BuildValue("iii", year, (int)week + 1, (int)day + 1);
  }
  
--- 304,308 ----
  		week = 0;
  	}
! 	return Py_BuildValue("iii", year, week + 1, day + 1);
  }
  
***************
*** 316,320 ****
  date_richcompare(PyDateTime_Date *self, PyObject *other, int op)
  {
! 	long diff;
  
  	if (! PyDate_Check(other)) {
--- 316,320 ----
  date_richcompare(PyDateTime_Date *self, PyObject *other, int op)
  {
! 	int diff;
  
  	if (! PyDate_Check(other)) {

Index: obj_datetime.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_datetime.c,v
retrieving revision 1.55
retrieving revision 1.56
diff -C2 -d -r1.55 -r1.56
*** obj_datetime.c	14 Dec 2002 16:23:34 -0000	1.55
--- obj_datetime.c	14 Dec 2002 17:42:09 -0000	1.56
***************
*** 43,53 ****
  {
  	PyObject *self = NULL;
! 	long year;
! 	long month;
! 	long day;
! 	long hour = 0;
! 	long minute = 0;
! 	long second = 0;
! 	long usecond = 0;
  
  	static char *keywords[] = {
--- 43,53 ----
  {
  	PyObject *self = NULL;
! 	int year;
! 	int month;
! 	int day;
! 	int hour = 0;
! 	int minute = 0;
! 	int second = 0;
! 	int usecond = 0;
  
  	static char *keywords[] = {
***************
*** 56,60 ****
  	};
  
! 	if (PyArg_ParseTupleAndKeywords(args, kw, "lll|llll", keywords,
  					&year, &month, &day, &hour, &minute,
  					&second, &usecond)) {
--- 56,60 ----
  	};
  
! 	if (PyArg_ParseTupleAndKeywords(args, kw, "iii|iiii", keywords,
  					&year, &month, &day, &hour, &minute,
  					&second, &usecond)) {
***************
*** 63,69 ****
  		if (check_time_args(hour, minute, second, usecond) < 0)
  			return NULL;
! 		self = new_datetime((int)year, (int)month, (int)day, 
! 				     (int)hour, (int)minute, (int)second,
! 				     (int)usecond);
  	}
  	return self;
--- 63,68 ----
  		if (check_time_args(hour, minute, second, usecond) < 0)
  			return NULL;
! 		self = new_datetime(year, month, day, 
! 				    hour, minute, second, usecond);
  	}
  	return self;
***************
*** 79,83 ****
   */
  static PyObject *
! datetime_from_timet_and_us(PyObject *cls, TM_FUNC f, time_t timet, long us)
  {
  	struct tm *tm;
--- 78,82 ----
   */
  static PyObject *
! datetime_from_timet_and_us(PyObject *cls, TM_FUNC f, time_t timet, int us)
  {
  	struct tm *tm;
***************
*** 86,90 ****
  	tm = f(&timet);
  	if (tm)
! 		result = PyObject_CallFunction(cls, "iiiiiil",
  					       tm->tm_year + 1900,
  					       tm->tm_mon + 1,
--- 85,89 ----
  	tm = f(&timet);
  	if (tm)
! 		result = PyObject_CallFunction(cls, "iiiiiii",
  					       tm->tm_year + 1900,
  					       tm->tm_mon + 1,
***************
*** 112,116 ****
  {
  	time_t timet = (time_t)timestamp;
! 	long us = (long)((timestamp - (double)timet) * 1e6);
  
  	return datetime_from_timet_and_us(cls, f, timet, us);
--- 111,115 ----
  {
  	time_t timet = (time_t)timestamp;
! 	int us = (int)((timestamp - (double)timet) * 1e6);
  
  	return datetime_from_timet_and_us(cls, f, timet, us);
***************
*** 243,254 ****
  	 * invariant bounds on the member values.
  	 */
! 	long year = GET_YEAR(date);
! 	long month = GET_MONTH(date);
! 	long day = GET_DAY(date) + GET_TD_DAYS(delta);
! 	long hour = DATE_GET_HOUR(date);
! 	long minute = DATE_GET_MINUTE(date);
! 	long second = DATE_GET_SECOND(date) + GET_TD_SECONDS(delta);
! 	long microsecond = DATE_GET_MICROSECOND(date) +
! 			   GET_TD_MICROSECONDS(delta);
  
  	if (normalize_datetime(&year, &month, &day,
--- 242,253 ----
  	 * invariant bounds on the member values.
  	 */
! 	int year = GET_YEAR(date);
! 	int month = GET_MONTH(date);
! 	int day = GET_DAY(date) + GET_TD_DAYS(delta);
! 	int hour = DATE_GET_HOUR(date);
! 	int minute = DATE_GET_MINUTE(date);
! 	int second = DATE_GET_SECOND(date) + GET_TD_SECONDS(delta);
! 	int microsecond = DATE_GET_MICROSECOND(date) +
! 			  GET_TD_MICROSECONDS(delta);
  
  	if (normalize_datetime(&year, &month, &day,
***************
*** 256,262 ****
  		return NULL;
  	else
! 		return new_datetime((int)year, (int)month, (int)day,
! 				    (int)hour, (int)minute, (int)second,
! 				    (int)microsecond);
  }
  
--- 255,260 ----
  		return NULL;
  	else
! 		return new_datetime(year, month, day,
! 				    hour, minute, second, microsecond);
  }
  
***************
*** 267,278 ****
  	 * invariant bounds on the member values.
  	 */
! 	long year = GET_YEAR(date);
! 	long month = GET_MONTH(date);
! 	long day = GET_DAY(date) - GET_TD_DAYS(delta);
! 	long hour = DATE_GET_HOUR(date);
! 	long minute = DATE_GET_MINUTE(date);
! 	long second = DATE_GET_SECOND(date) - GET_TD_SECONDS(delta);
! 	long microsecond = DATE_GET_MICROSECOND(date) -
! 			   GET_TD_MICROSECONDS(delta);
  
  	if (normalize_datetime(&year, &month, &day,
--- 265,276 ----
  	 * invariant bounds on the member values.
  	 */
! 	int year = GET_YEAR(date);
! 	int month = GET_MONTH(date);
! 	int day = GET_DAY(date) - GET_TD_DAYS(delta);
! 	int hour = DATE_GET_HOUR(date);
! 	int minute = DATE_GET_MINUTE(date);
! 	int second = DATE_GET_SECOND(date) - GET_TD_SECONDS(delta);
! 	int microsecond = DATE_GET_MICROSECOND(date) -
! 			  GET_TD_MICROSECONDS(delta);
  
  	if (normalize_datetime(&year, &month, &day,
***************
*** 280,286 ****
  		return NULL;
  	else
! 		return new_datetime((int)year, (int)month, (int)day,
! 				    (int)hour, (int)minute, (int)second,
! 				    (int)microsecond);
  }
  
--- 278,283 ----
  		return NULL;
  	else
! 		return new_datetime(year, month, day,
! 				    hour, minute, second, microsecond);
  }
  
***************
*** 288,305 ****
  sub_datetime_datetime(PyDateTime_DateTime *left, PyDateTime_DateTime *right)
  {
! 	long days1 = ymd_to_ord(GET_YEAR(left),
! 				GET_MONTH(left),
! 				GET_DAY(left));
! 	long days2 = ymd_to_ord(GET_YEAR(right),
! 				GET_MONTH(right),
! 				GET_DAY(right));
  	/* These can't overflow, since the values are normalized.  At most
  	 * this gives the number of seconds in one day.
  	 */
! 	long delta_s = (DATE_GET_HOUR(left) - DATE_GET_HOUR(right)) * 3600 +
! 	               (DATE_GET_MINUTE(left) - DATE_GET_MINUTE(right)) * 60 +
! 		       DATE_GET_SECOND(left) - DATE_GET_SECOND(right);
! 	long delta_us = DATE_GET_MICROSECOND(left) -
! 			DATE_GET_MICROSECOND(right);
  
  	return new_delta(days1 - days2, delta_s, delta_us, 1);
--- 285,300 ----
  sub_datetime_datetime(PyDateTime_DateTime *left, PyDateTime_DateTime *right)
  {
! 	int days1 = ymd_to_ord(GET_YEAR(left), GET_MONTH(left), GET_DAY(left));
! 	int days2 = ymd_to_ord(GET_YEAR(right),
! 			       GET_MONTH(right),
! 			       GET_DAY(right));
  	/* These can't overflow, since the values are normalized.  At most
  	 * this gives the number of seconds in one day.
  	 */
! 	int delta_s = (DATE_GET_HOUR(left) - DATE_GET_HOUR(right)) * 3600 +
! 	              (DATE_GET_MINUTE(left) - DATE_GET_MINUTE(right)) * 60 +
! 		      DATE_GET_SECOND(left) - DATE_GET_SECOND(right);
! 	int delta_us = DATE_GET_MICROSECOND(left) -
! 		       DATE_GET_MICROSECOND(right);
  
  	return new_delta(days1 - days2, delta_s, delta_us, 1);
***************
*** 431,437 ****
  datetime_richcompare(PyDateTime_DateTime *self, PyObject *other, int op)
  {
! 	long diff;
  	naivety n1, n2;
! 	long offset1, offset2;
  
  	if (! PyDateTime_Check(other)) {
--- 426,432 ----
  datetime_richcompare(PyDateTime_DateTime *self, PyObject *other, int op)
  {
! 	int diff;
  	naivety n1, n2;
! 	int offset1, offset2;
  
  	if (! PyDateTime_Check(other)) {
***************
*** 469,473 ****
  		 */
  		PyDateTime_Delta *delta;
! 		long days, seconds, us;
  
  		assert(offset1 != offset2);	/* else last "if" handled it */
--- 464,468 ----
  		 */
  		PyDateTime_Delta *delta;
! 		int days, seconds, us;
  
  		assert(offset1 != offset2);	/* else last "if" handled it */
***************
*** 501,505 ****
  	if (self->hashcode == -1) {
  		naivety n;
! 		long offset;
  
  		n = classify_object((PyObject *)self, &offset);
--- 496,500 ----
  	if (self->hashcode == -1) {
  		naivety n;
! 		int offset;
  
  		n = classify_object((PyObject *)self, &offset);
***************
*** 515,520 ****
  		}
  		else {
! 			long days;
! 			long seconds;
  			PyDateTime_Delta *delta;
  
--- 510,515 ----
  		}
  		else {
! 			int days;
! 			int seconds;
  			PyDateTime_Delta *delta;
  

Index: obj_datetimetz.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_datetimetz.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** obj_datetimetz.c	14 Dec 2002 16:23:34 -0000	1.15
--- obj_datetimetz.c	14 Dec 2002 17:42:09 -0000	1.16
***************
*** 27,37 ****
  {
  	PyObject *self = NULL;
! 	long year;
! 	long month;
! 	long day;
! 	long hour = 0;
! 	long minute = 0;
! 	long second = 0;
! 	long usecond = 0;
  	PyObject *tzinfo = Py_None;
  
--- 27,37 ----
  {
  	PyObject *self = NULL;
! 	int year;
! 	int month;
! 	int day;
! 	int hour = 0;
! 	int minute = 0;
! 	int second = 0;
! 	int usecond = 0;
  	PyObject *tzinfo = Py_None;
  
***************
*** 41,45 ****
  	};
  
! 	if (PyArg_ParseTupleAndKeywords(args, kw, "lll|llllO", keywords,
  					&year, &month, &day, &hour, &minute,
  					&second, &usecond, &tzinfo)) {
--- 41,45 ----
  	};
  
! 	if (PyArg_ParseTupleAndKeywords(args, kw, "iii|iiiiO", keywords,
  					&year, &month, &day, &hour, &minute,
  					&second, &usecond, &tzinfo)) {
***************
*** 50,56 ****
  		if (check_tzinfo_subclass(tzinfo, "tzinfo argument") < 0)
  			return NULL;
! 		self = new_datetimetz((int)year, (int)month, (int)day,
! 				      (int)hour, (int)minute, (int)second,
! 				      (int)usecond,
  				      tzinfo);
  	}
--- 50,55 ----
  		if (check_tzinfo_subclass(tzinfo, "tzinfo argument") < 0)
  			return NULL;
! 		self = new_datetimetz(year, month, day,
! 				      hour, minute, second, usecond,
  				      tzinfo);
  	}
***************
*** 66,70 ****
   */
  static PyObject *
! datetimetz_from_timet_and_us(PyObject *cls, TM_FUNC f, time_t timet, long us)
  {
  	struct tm *tm;
--- 65,69 ----
   */
  static PyObject *
! datetimetz_from_timet_and_us(PyObject *cls, TM_FUNC f, time_t timet, int us)
  {
  	struct tm *tm;
***************
*** 73,77 ****
  	tm = f(&timet);
  	if (tm)
! 		result = PyObject_CallFunction(cls, "iiiiiil",
  					       tm->tm_year + 1900,
  					       tm->tm_mon + 1,
--- 72,76 ----
  	tm = f(&timet);
  	if (tm)
! 		result = PyObject_CallFunction(cls, "iiiiiii",
  					       tm->tm_year + 1900,
  					       tm->tm_mon + 1,
***************
*** 99,103 ****
  {
  	time_t timet = (time_t)timestamp;
! 	long us = (long)((timestamp - (double)timet) * 1e6);
  
  	return datetimetz_from_timet_and_us(cls, f, timet, us);
--- 98,102 ----
  {
  	time_t timet = (time_t)timestamp;
! 	int us = (int)((timestamp - (double)timet) * 1e6);
  
  	return datetimetz_from_timet_and_us(cls, f, timet, us);
***************
*** 288,292 ****
  			/* datetime - datetime */
  			naivety n1, n2;
! 			long offset1, offset2;
  			PyDateTime_Delta *delta;
  
--- 287,291 ----
  			/* datetime - datetime */
  			naivety n1, n2;
! 			int offset1, offset2;
  			PyDateTime_Delta *delta;
  

Index: obj_delta.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_delta.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -C2 -d -r1.27 -r1.28
*** obj_delta.c	13 Dec 2002 19:22:32 -0000	1.27
--- obj_delta.c	14 Dec 2002 17:42:09 -0000	1.28
***************
*** 62,68 ****
  microseconds_to_delta(PyObject *pyus)
  {
! 	long us;
! 	long s;
! 	long d;
  
  	PyObject *tuple = NULL;
--- 62,68 ----
  microseconds_to_delta(PyObject *pyus)
  {
! 	int us;
! 	int s;
! 	int d;
  
  	PyObject *tuple = NULL;
***************
*** 175,182 ****
  		 * invariant bounds.
  		 */
! 		long days = GET_TD_DAYS(left) + GET_TD_DAYS(right);
! 		long seconds = GET_TD_SECONDS(left) + GET_TD_SECONDS(right);
! 		long microseconds = GET_TD_MICROSECONDS(left) +
! 				    GET_TD_MICROSECONDS(right);
  		result = new_delta(days, seconds, microseconds, 1);
  	}
--- 175,182 ----
  		 * invariant bounds.
  		 */
! 		int days = GET_TD_DAYS(left) + GET_TD_DAYS(right);
! 		int seconds = GET_TD_SECONDS(left) + GET_TD_SECONDS(right);
! 		int microseconds = GET_TD_MICROSECONDS(left) +
! 				   GET_TD_MICROSECONDS(right);
  		result = new_delta(days, seconds, microseconds, 1);
  	}
***************
*** 252,256 ****
  delta_richcompare(PyDateTime_Delta *self, PyObject *other, int op)
  {
! 	long diff;
  
  	if (! PyDelta_CheckExact(other)) {
--- 252,256 ----
  delta_richcompare(PyDateTime_Delta *self, PyObject *other, int op)
  {
! 	int diff;
  
  	if (! PyDelta_CheckExact(other)) {
***************
*** 520,524 ****
  {
  	if (GET_TD_MICROSECONDS(self) != 0)
! 		return PyString_FromFormat("%s(%ld, %ld, %ld)",
  					   self->ob_type->tp_name,
  					   GET_TD_DAYS(self),
--- 520,524 ----
  {
  	if (GET_TD_MICROSECONDS(self) != 0)
! 		return PyString_FromFormat("%s(%d, %d, %d)",
  					   self->ob_type->tp_name,
  					   GET_TD_DAYS(self),
***************
*** 526,535 ****
  					   GET_TD_MICROSECONDS(self));
  	if (GET_TD_SECONDS(self) != 0)
! 		return PyString_FromFormat("%s(%ld, %ld)",
  					   self->ob_type->tp_name,
  					   GET_TD_DAYS(self),
  					   GET_TD_SECONDS(self));
  
! 	return PyString_FromFormat("%s(%ld)",
  				   self->ob_type->tp_name,
  				   GET_TD_DAYS(self));
--- 526,535 ----
  					   GET_TD_MICROSECONDS(self));
  	if (GET_TD_SECONDS(self) != 0)
! 		return PyString_FromFormat("%s(%d, %d)",
  					   self->ob_type->tp_name,
  					   GET_TD_DAYS(self),
  					   GET_TD_SECONDS(self));
  
! 	return PyString_FromFormat("%s(%d)",
  				   self->ob_type->tp_name,
  				   GET_TD_DAYS(self));
***************
*** 539,547 ****
  delta_str(PyDateTime_Delta *self)
  {
! 	long days = GET_TD_DAYS(self);
! 	long seconds = GET_TD_SECONDS(self);
! 	long us = GET_TD_MICROSECONDS(self);
! 	long hours;
! 	long minutes;
  	char buf[500];
  	int i = 0;
--- 539,547 ----
  delta_str(PyDateTime_Delta *self)
  {
! 	int days = GET_TD_DAYS(self);
! 	int seconds = GET_TD_SECONDS(self);
! 	int us = GET_TD_MICROSECONDS(self);
! 	int hours;
! 	int minutes;
  	char buf[500];
  	int i = 0;
***************
*** 551,565 ****
  
  	if (days) {
! 		i += sprintf(buf + i, "%d day%s, ", (int)days,
  			     (days == 1 || days == -1) ? "" : "s");
  		assert(i < sizeof(buf));
  	}
  
! 	i += sprintf(buf + i, "%d:%02d:%02d", (int)hours, (int)minutes,
! 					      (int)seconds);
  	assert(i < sizeof(buf));
  
  	if (us) {
! 		i += sprintf(buf + i, ".%06d", (int)us);
  		assert(i < sizeof(buf));
  	}
--- 551,564 ----
  
  	if (days) {
! 		i += sprintf(buf + i, "%d day%s, ", days,
  			     (days == 1 || days == -1) ? "" : "s");
  		assert(i < sizeof(buf));
  	}
  
! 	i += sprintf(buf + i, "%d:%02d:%02d", hours, minutes, seconds);
  	assert(i < sizeof(buf));
  
  	if (us) {
! 		i += sprintf(buf + i, ".%06d", us);
  		assert(i < sizeof(buf));
  	}
***************
*** 575,581 ****
  delta_getstate(PyDateTime_Delta *self)
  {
! 	return Py_BuildValue("iii", (int)GET_TD_DAYS(self),
! 				    (int)GET_TD_SECONDS(self),
! 				    (int)GET_TD_MICROSECONDS(self));
  }
  
--- 574,580 ----
  delta_getstate(PyDateTime_Delta *self)
  {
! 	return Py_BuildValue("iii", GET_TD_DAYS(self),
! 				    GET_TD_SECONDS(self),
! 				    GET_TD_MICROSECONDS(self));
  }
  
***************
*** 583,591 ****
  delta_setstate(PyDateTime_Delta *self, PyObject *state)
  {
! 	long day;
! 	long second;
! 	long us;
  
! 	if (!PyArg_ParseTuple(state, "lll:__setstate__", &day, &second, &us))
  		return NULL;
  
--- 582,590 ----
  delta_setstate(PyDateTime_Delta *self, PyObject *state)
  {
! 	int day;
! 	int second;
! 	int us;
  
! 	if (!PyArg_ParseTuple(state, "iii:__setstate__", &day, &second, &us))
  		return NULL;
  

Index: obj_time.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_time.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** obj_time.c	14 Dec 2002 16:53:14 -0000	1.17
--- obj_time.c	14 Dec 2002 17:42:09 -0000	1.18
***************
*** 43,50 ****
  {
  	PyObject *self = NULL;
! 	long hour = 0;
! 	long minute = 0;
! 	long second = 0;
! 	long usecond = 0;
  
  	static char *keywords[] = {
--- 43,50 ----
  {
  	PyObject *self = NULL;
! 	int hour = 0;
! 	int minute = 0;
! 	int second = 0;
! 	int usecond = 0;
  
  	static char *keywords[] = {
***************
*** 52,61 ****
  	};
  
! 	if (PyArg_ParseTupleAndKeywords(args, kw, "|llll", keywords,
  					&hour, &minute, &second, &usecond)) {
  		if (check_time_args(hour, minute, second, usecond) < 0)
  			return NULL;
! 		self = new_time((int)hour, (int)minute, (int)second,
! 				(int)usecond);
  	}
  	return self;
--- 52,60 ----
  	};
  
! 	if (PyArg_ParseTupleAndKeywords(args, kw, "|iiii", keywords,
  					&hour, &minute, &second, &usecond)) {
  		if (check_time_args(hour, minute, second, usecond) < 0)
  			return NULL;
! 		self = new_time(hour, minute, second, usecond);
  	}
  	return self;
***************
*** 137,143 ****
  time_richcompare(PyDateTime_Time *self, PyObject *other, int op)
  {
! 	long diff;
  	naivety n1, n2;
! 	long offset1, offset2;
  
  	if (! PyTime_Check(other)) {
--- 136,142 ----
  time_richcompare(PyDateTime_Time *self, PyObject *other, int op)
  {
! 	int diff;
  	naivety n1, n2;
! 	int offset1, offset2;
  
  	if (! PyTime_Check(other)) {
***************
*** 201,205 ****
  	if (self->hashcode == -1) {
  		naivety n;
! 		long offset;
  		PyObject *temp;
  
--- 200,204 ----
  	if (self->hashcode == -1) {
  		naivety n;
! 		int offset;
  		PyObject *temp;
  
***************
*** 213,218 ****
  			temp = time_getstate(self);
  		else {
! 			long hour;
! 			long minute;
  
  			assert(n == OFFSET_AWARE);
--- 212,217 ----
  			temp = time_getstate(self);
  		else {
! 			int hour;
! 			int minute;
  
  			assert(n == OFFSET_AWARE);
***************
*** 223,231 ****
  				      &minute);
  			if (0 <= hour && hour < 24)
! 				temp = new_time((int)hour, (int)minute,
  						TIME_GET_SECOND(self),
  						TIME_GET_MICROSECOND(self));
  			else
! 				temp = Py_BuildValue("llii",
  					   hour, minute,
  					   TIME_GET_SECOND(self),
--- 222,230 ----
  				      &minute);
  			if (0 <= hour && hour < 24)
! 				temp = new_time(hour, minute,
  						TIME_GET_SECOND(self),
  						TIME_GET_MICROSECOND(self));
  			else
! 				temp = Py_BuildValue("iiii",
  					   hour, minute,
  					   TIME_GET_SECOND(self),

Index: obj_timetz.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_timetz.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -C2 -d -r1.27 -r1.28
*** obj_timetz.c	14 Dec 2002 16:23:34 -0000	1.27
--- obj_timetz.c	14 Dec 2002 17:42:09 -0000	1.28
***************
*** 27,34 ****
  {
  	PyObject *self = NULL;
! 	long hour = 0;
! 	long minute = 0;
! 	long second = 0;
! 	long usecond = 0;
  	PyObject *tzinfo = Py_None;
  
--- 27,34 ----
  {
  	PyObject *self = NULL;
! 	int hour = 0;
! 	int minute = 0;
! 	int second = 0;
! 	int usecond = 0;
  	PyObject *tzinfo = Py_None;
  
***************
*** 44,50 ****
  		if (check_tzinfo_subclass(tzinfo, "tzinfo argument") < 0)
  			return NULL;
! 		self = new_timetz((int)hour, (int)minute, (int)second, 
! 				  (int)usecond,
! 				  tzinfo);
  	}
  	return self;
--- 44,48 ----
  		if (check_tzinfo_subclass(tzinfo, "tzinfo argument") < 0)
  			return NULL;
! 		self = new_timetz(hour, minute, second, usecond, tzinfo);
  	}
  	return self;
***************
*** 160,164 ****
  timetz_nonzero(PyDateTime_TimeTZ *self)
  {
! 	long offset;
  	int none;
  
--- 158,162 ----
  timetz_nonzero(PyDateTime_TimeTZ *self)
  {
! 	int offset;
  	int none;