From b1b915c796a9054cce867ef47071bcf9f79b985f Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Tue, 13 Aug 2013 18:16:34 -0700 Subject: [PATCH] Issue 18719: Remove a false optimization Remove an unused early-out test from the critical path for dict and set lookups. When the strings already have matching lengths, kinds, and hashes, there is no additional information gained by checking the first characters (the probability of a mismatch is already known to be less than 1 in 2**64). --- Objects/stringlib/eq.h | 9 --------- 1 file changed, 9 deletions(-) diff --git a/Objects/stringlib/eq.h b/Objects/stringlib/eq.h index 8e79a43f72f..3e5f510e365 100644 --- a/Objects/stringlib/eq.h +++ b/Objects/stringlib/eq.h @@ -20,15 +20,6 @@ unicode_eq(PyObject *aa, PyObject *bb) return 1; if (PyUnicode_KIND(a) != PyUnicode_KIND(b)) return 0; - /* Just comparing the first byte is enough to see if a and b differ. - * If they are 2 byte or 4 byte character most differences will happen in - * the lower bytes anyways. - */ - if (PyUnicode_1BYTE_DATA(a)[0] != PyUnicode_1BYTE_DATA(b)[0]) - return 0; - if (PyUnicode_KIND(a) == PyUnicode_1BYTE_KIND && - PyUnicode_GET_LENGTH(a) == 1) - return 1; return memcmp(PyUnicode_1BYTE_DATA(a), PyUnicode_1BYTE_DATA(b), PyUnicode_GET_LENGTH(a) * PyUnicode_KIND(a)) == 0; }