Issue 5176: special-case string formatting in BINARY_MODULO implementation. This shows a modest (1-3%) speed-up in templating systems, for example.

This commit is contained in:
Collin Winter 2009-02-20 19:30:41 +00:00
parent e9fb6863da
commit 8725dce2ae
2 changed files with 10 additions and 1 deletions

View file

@ -102,6 +102,12 @@ class OpcodeTest(unittest.TestCase):
g = eval('lambda a=1: None')
self.assertNotEquals(f, g)
def test_modulo_of_string_subclasses(self):
class MyString(str):
def __mod__(self, value):
return 42
self.assertEqual(MyString() % 3, 42)
def test_main():
run_unittest(OpcodeTest)

View file

@ -1283,6 +1283,9 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
case BINARY_MODULO:
w = POP();
v = TOP();
if (PyString_CheckExact(v))
x = PyString_Format(v, w);
else
x = PyNumber_Remainder(v, w);
Py_DECREF(v);
Py_DECREF(w);