Here's a patch to abstract.c that does to binary_op1() what I had in mind. My own attempts at timing this only serve to confuse me, but I'm sure the experts will be able to assess it. I think it may make pystone about 1% faster. Note that this assumes that a type object only sets the NEW_STYLE_NUMBER flag when it has a non-NULL tp_as_number structure pointer. This makes sense, but just to be sure I add an assert(). In a bizarre twist of benchmarking, if I comment the asserts out, pystone is 1% *slower* than without the patch.... I guess I'm going to ignore that. Enjoy. --Guido van Rossum (home page: http://www.python.org/~guido/) Index: abstract.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/abstract.c,v retrieving revision 2.60.2.5 diff -c -r2.60.2.5 abstract.c *** abstract.c 2001/07/07 22:55:30 2.60.2.5 --- abstract.c 2001/07/13 20:14:01 *************** *** 318,324 **** { PyObject *x; binaryfunc *slot; ! if (v->ob_type->tp_as_number != NULL && NEW_STYLE_NUMBER(v)) { slot = NB_BINOP(v->ob_type->tp_as_number, op_slot); if (*slot) { x = (*slot)(v, w); --- 318,334 ---- { PyObject *x; binaryfunc *slot; ! ! /* Quick test if anything down here could work */ ! if (v->ob_type->tp_as_number == NULL && ! w->ob_type->tp_as_number == NULL) ! { ! Py_INCREF(Py_NotImplemented); ! return Py_NotImplemented; ! } ! ! if (NEW_STYLE_NUMBER(v)) { ! assert (v->ob_type->tp_as_number != NULL); slot = NB_BINOP(v->ob_type->tp_as_number, op_slot); if (*slot) { x = (*slot)(v, w); *************** *** 331,337 **** goto binop_error; } } ! if (w->ob_type->tp_as_number != NULL && NEW_STYLE_NUMBER(w)) { slot = NB_BINOP(w->ob_type->tp_as_number, op_slot); if (*slot) { x = (*slot)(v, w); --- 341,348 ---- goto binop_error; } } ! if (NEW_STYLE_NUMBER(w)) { ! assert (w->ob_type->tp_as_number != NULL); slot = NB_BINOP(w->ob_type->tp_as_number, op_slot); if (*slot) { x = (*slot)(v, w);
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4