[Python-checkins] r55175 - python/branches/release25-maint/Objects/classobject.c

kristjan.jonsson python-checkins at python.org
Mon May 7 20:36:40 CEST 2007


Author: kristjan.jonsson
Date: Mon May  7 20:36:39 2007
New Revision: 55175

Modified:
   python/branches/release25-maint/Objects/classobject.c
Log:
the nb_long slot on classobject instances now defaults to call the nb_int slot member if there is no __long__ attribute found.  This is in accordance with a suggestion from Armin Rigo, and allows the test_getargs2.py test in the testsuite for x64

Modified: python/branches/release25-maint/Objects/classobject.c
==============================================================================
--- python/branches/release25-maint/Objects/classobject.c	(original)
+++ python/branches/release25-maint/Objects/classobject.c	Mon May  7 20:36:39 2007
@@ -1539,6 +1539,18 @@
 	return generic_unary_op(self, o); \
 }
 
+/* unary function with a fallback */
+#define UNARY_FB(funcname, methodname, funcname_fb) \
+static PyObject *funcname(PyInstanceObject *self) { \
+	static PyObject *o; \
+	if (o == NULL) { o = PyString_InternFromString(methodname); \
+			 if (o == NULL) return NULL; } \
+	if (PyObject_HasAttr((PyObject*)self, o)) \
+		return generic_unary_op(self, o); \
+	else \
+		return funcname_fb(self); \
+}
+
 #define BINARY(f, m, n) \
 static PyObject *f(PyObject *v, PyObject *w) { \
 	return do_binop(v, w, "__" m "__", "__r" m "__", n); \
@@ -1777,7 +1789,7 @@
 
 UNARY(instance_invert, "__invert__")
 UNARY(instance_int, "__int__")
-UNARY(instance_long, "__long__")
+UNARY_FB(instance_long, "__long__", instance_int)
 UNARY(instance_float, "__float__")
 UNARY(instance_oct, "__oct__")
 UNARY(instance_hex, "__hex__")


More information about the Python-checkins mailing list