[Python-checkins] python/dist/src/Python getargs.c,2.95,2.96

nascheme@users.sourceforge.net nascheme@users.sourceforge.net
Tue, 04 Feb 2003 12:55:46 -0800


Update of /cvsroot/python/python/dist/src/Python
In directory sc8-pr-cvs1:/tmp/cvs-serv8360/Python

Modified Files:
	getargs.c 
Log Message:
If a float is passed where a int is expected, issue a DeprecationWarning
instead of raising a TypeError.  Closes #660144 (again).


Index: getargs.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Python/getargs.c,v
retrieving revision 2.95
retrieving revision 2.96
diff -C2 -d -r2.95 -r2.96
*** getargs.c	24 Jan 2003 22:15:21 -0000	2.95
--- getargs.c	4 Feb 2003 20:55:40 -0000	2.96
***************
*** 388,391 ****
--- 388,404 ----
  #define CONV_UNICODE "(unicode conversion error)"
  
+ /* explicitly check for float arguments when integers are expected.  For now
+  * signal a warning.  Returns true if an exception was raised. */
+ static int
+ float_argument_error(PyObject *arg)
+ {
+ 	if (PyFloat_Check(arg) &&
+ 	    PyErr_Warn(PyExc_DeprecationWarning,
+ 		       "integer argument expected, got float" ))
+ 		return 1;
+ 	else
+ 		return 0;
+ }
+ 
  /* Convert a non-tuple argument.  Return NULL if conversion went OK,
     or a string with a message describing the failure.  The message is
***************
*** 410,415 ****
  		char *p = va_arg(*p_va, char *);
  		long ival;
! 		if (PyFloat_Check(arg))
! 			return converterr("integer", arg, msgbuf, bufsize);
  		ival = PyInt_AsLong(arg);
  		if (ival == -1 && PyErr_Occurred())
--- 423,428 ----
  		char *p = va_arg(*p_va, char *);
  		long ival;
! 		if (float_argument_error(arg))
! 			return NULL;
  		ival = PyInt_AsLong(arg);
  		if (ival == -1 && PyErr_Occurred())
***************
*** 434,439 ****
  		char *p = va_arg(*p_va, char *);
  		long ival;
! 		if (PyFloat_Check(arg))
! 			return converterr("integer", arg, msgbuf, bufsize);
  		ival = PyInt_AsLong(arg);
  		if (ival == -1 && PyErr_Occurred())
--- 447,452 ----
  		char *p = va_arg(*p_va, char *);
  		long ival;
! 		if (float_argument_error(arg))
! 			return NULL;
  		ival = PyInt_AsLong(arg);
  		if (ival == -1 && PyErr_Occurred())
***************
*** 457,462 ****
  		short *p = va_arg(*p_va, short *);
  		long ival;
! 		if (PyFloat_Check(arg))
! 			return converterr("integer", arg, msgbuf, bufsize);
  		ival = PyInt_AsLong(arg);
  		if (ival == -1 && PyErr_Occurred())
--- 470,475 ----
  		short *p = va_arg(*p_va, short *);
  		long ival;
! 		if (float_argument_error(arg))
! 			return NULL;
  		ival = PyInt_AsLong(arg);
  		if (ival == -1 && PyErr_Occurred())
***************
*** 481,486 ****
  		unsigned short *p = va_arg(*p_va, unsigned short *);
  		long ival;
! 		if (PyFloat_Check(arg))
! 			return converterr("integer", arg, msgbuf, bufsize);
  		ival = PyInt_AsLong(arg);
  		if (ival == -1 && PyErr_Occurred())
--- 494,499 ----
  		unsigned short *p = va_arg(*p_va, unsigned short *);
  		long ival;
! 		if (float_argument_error(arg))
! 			return NULL;
  		ival = PyInt_AsLong(arg);
  		if (ival == -1 && PyErr_Occurred())
***************
*** 504,509 ****
  		int *p = va_arg(*p_va, int *);
  		long ival;
! 		if (PyFloat_Check(arg))
! 			return converterr("integer", arg, msgbuf, bufsize);
  		ival = PyInt_AsLong(arg);
  		if (ival == -1 && PyErr_Occurred())
--- 517,522 ----
  		int *p = va_arg(*p_va, int *);
  		long ival;
! 		if (float_argument_error(arg))
! 			return NULL;
  		ival = PyInt_AsLong(arg);
  		if (ival == -1 && PyErr_Occurred())
***************
*** 527,532 ****
  		long *p = va_arg(*p_va, long *);
  		long ival;
! 		if (PyFloat_Check(arg))
! 			return converterr("integer", arg, msgbuf, bufsize);
  		ival = PyInt_AsLong(arg);
  		if (ival == -1 && PyErr_Occurred())
--- 540,545 ----
  		long *p = va_arg(*p_va, long *);
  		long ival;
! 		if (float_argument_error(arg))
! 			return NULL;
  		ival = PyInt_AsLong(arg);
  		if (ival == -1 && PyErr_Occurred())