]> granicus.if.org Git - python/commitdiff
Do the int inlining only if the type is really an int, not whenever
authorGuido van Rossum <guido@python.org>
Thu, 30 Aug 2001 16:06:23 +0000 (16:06 +0000)
committerGuido van Rossum <guido@python.org>
Thu, 30 Aug 2001 16:06:23 +0000 (16:06 +0000)
PyInt_Check() succeeds.  That returns true for subtypes of int, which
may override __add__ or __sub__.

Python/ceval.c

index cb95aaa88d6e0b652b45e4ffb06ac0bf8dad1fff..6eebf948e45b4837ae8fde2ab917e2fd90a5f7a6 100644 (file)
@@ -548,6 +548,9 @@ eval_frame(PyFrameObject *f)
 #define POP()          BASIC_POP()
 #endif
 
+/* Strict int check macros */
+#define ISSTRICTINT(v) ((v)->ob_type == &PyInt_Type)
+
 /* Local variable macros */
 
 #define GETLOCAL(i)    (fastlocals[i])
@@ -909,7 +912,7 @@ eval_frame(PyFrameObject *f)
                case BINARY_ADD:
                        w = POP();
                        v = POP();
-                       if (PyInt_Check(v) && PyInt_Check(w)) {
+                       if (ISSTRICTINT(v) && ISSTRICTINT(w)) {
                                /* INLINE: int + int */
                                register long a, b, i;
                                a = PyInt_AS_LONG(v);
@@ -932,7 +935,7 @@ eval_frame(PyFrameObject *f)
                case BINARY_SUBTRACT:
                        w = POP();
                        v = POP();
-                       if (PyInt_Check(v) && PyInt_Check(w)) {
+                       if (ISSTRICTINT(v) && ISSTRICTINT(w)) {
                                /* INLINE: int - int */
                                register long a, b, i;
                                a = PyInt_AS_LONG(v);
@@ -955,7 +958,7 @@ eval_frame(PyFrameObject *f)
                case BINARY_SUBSCR:
                        w = POP();
                        v = POP();
-                       if (v->ob_type == &PyList_Type && PyInt_Check(w)) {
+                       if (v->ob_type == &PyList_Type && ISSTRICTINT(w)) {
                                /* INLINE: list[int] */
                                long i = PyInt_AsLong(w);
                                if (i < 0)
@@ -1092,7 +1095,7 @@ eval_frame(PyFrameObject *f)
                case INPLACE_ADD:
                        w = POP();
                        v = POP();
-                       if (PyInt_Check(v) && PyInt_Check(w)) {
+                       if (ISSTRICTINT(v) && ISSTRICTINT(w)) {
                                /* INLINE: int + int */
                                register long a, b, i;
                                a = PyInt_AS_LONG(v);
@@ -1115,7 +1118,7 @@ eval_frame(PyFrameObject *f)
                case INPLACE_SUBTRACT:
                        w = POP();
                        v = POP();
-                       if (PyInt_Check(v) && PyInt_Check(w)) {
+                       if (ISSTRICTINT(v) && ISSTRICTINT(w)) {
                                /* INLINE: int - int */
                                register long a, b, i;
                                a = PyInt_AS_LONG(v);
@@ -1718,7 +1721,7 @@ eval_frame(PyFrameObject *f)
                case COMPARE_OP:
                        w = POP();
                        v = POP();
-                       if (PyInt_Check(v) && PyInt_Check(w)) {
+                       if (ISSTRICTINT(v) && ISSTRICTINT(w)) {
                                /* INLINE: cmp(int, int) */
                                register long a, b;
                                register int res;