* 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?)
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 @@
 #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 @@
 	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);
 }