diff options
author | Kristján Valur Jónsson <kristjan@ccpgames.com> | 2007-05-07 18:36:39 +0000 |
---|---|---|
committer | Kristján Valur Jónsson <kristjan@ccpgames.com> | 2007-05-07 18:36:39 +0000 |
commit | dffe9a214b243c251dc11f51bf2b7275cbdaff70 (patch) | |
tree | 4730e6a24fe26939d6866caebb6d998c29c6aa65 | |
parent | f4601d874fc41cc7aa904ff09b9da273cefd7b72 (diff) | |
download | cpython-git-dffe9a214b243c251dc11f51bf2b7275cbdaff70.tar.gz |
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
-rw-r--r-- | Objects/classobject.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/Objects/classobject.c b/Objects/classobject.c index 8560b6842c..89cca5969d 100644 --- a/Objects/classobject.c +++ b/Objects/classobject.c @@ -1539,6 +1539,18 @@ static PyObject *funcname(PyInstanceObject *self) { \ 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 @@ instance_index(PyInstanceObject *self) 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__") |