diff options
author | Guido van Rossum <guido@python.org> | 1994-09-28 15:51:32 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1994-09-28 15:51:32 (GMT) |
commit | 03093a248d4ef3af23a5906dea276c01e0c1ae2c (patch) | |
tree | f58e5149812f94b2df57e1be321f227a5236ead6 /Objects/floatobject.c | |
parent | 2929527aede2eab56d39cf5f5244f997479cfe9d (diff) | |
download | cpython-03093a248d4ef3af23a5906dea276c01e0c1ae2c.zip cpython-03093a248d4ef3af23a5906dea276c01e0c1ae2c.tar.gz cpython-03093a248d4ef3af23a5906dea276c01e0c1ae2c.tar.bz2 |
* Include/classobject.h, Objects/classobject.c, Python/ceval.c:
entirely redone operator overloading. The rules for class
instances are now much more relaxed than for other built-in types
(whose coerce must still return two objects of the same type)
* Objects/floatobject.c: add overflow check when converting float
to int and implement truncation towards zero using ceil/float
* Objects/longobject.c: change ValueError to OverflowError when
converting to int
* Objects/rangeobject.c: modernized
* Objects/stringobject.c: use HAVE_LIMITS instead of __STDC__
* Objects/xxobject.c: changed to use new style (not finished?)
Diffstat (limited to 'Objects/floatobject.c')
-rw-r--r-- | Objects/floatobject.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/Objects/floatobject.c b/Objects/floatobject.c index cbdcfd5..b37dd15 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -47,6 +47,18 @@ OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #define CHECK(x) /* Don't know how to check */ #endif +#ifdef HAVE_LIMITS_H +#include <limits.h> +#endif + +#ifndef LONG_MAX +#define LONG_MAX 0X7FFFFFFFL +#endif + +#ifndef LONG_MIN +#define LONG_MIN (-LONG_MAX-1) +#endif + #ifndef macintosh extern double fmod PROTO((double, double)); extern double pow PROTO((double, double)); @@ -397,8 +409,11 @@ float_int(v) object *v; { double x = getfloatvalue(v); - /* XXX should check for overflow */ - /* XXX should define how we round */ + if (x < 0 ? (x = ceil(x)) < (double)LONG_MIN + : (x = floor(x)) > (double)LONG_MAX) { + err_setstr(OverflowError, "float to large to convert"); + return NULL; + } return newintobject((long)x); } |