SF bug #496549 -Qnew and in-place division "/=".
authorTim Peters <tim.peters@gmail.com>
Tue, 25 Dec 2001 18:49:11 +0000 (18:49 +0000)
committerTim Peters <tim.peters@gmail.com>
Tue, 25 Dec 2001 18:49:11 +0000 (18:49 +0000)
eval_frame():  Under -Qnew, INPLACE_DIVIDE wasn't getting handed off to
INPLACE_TRUE_DIVIDE (like BINARY_DIVIDE was getting handed off to
BINARY_TRUE_DIVIDE).

Bugfix candidate.

Python/ceval.c

index 2feb123a9c6ff242b6d2891e1bd3b473684d01ab..e7ca82bc1a422d2648fe04709fc79c17163822d3 100644 (file)
@@ -1091,9 +1091,22 @@ eval_frame(PyFrameObject *f)
                        break;
 
                case INPLACE_DIVIDE:
+                       if (!_Py_QnewFlag) {
+                               w = POP();
+                               v = POP();
+                               x = PyNumber_InPlaceDivide(v, w);
+                               Py_DECREF(v);
+                               Py_DECREF(w);
+                               PUSH(x);
+                               if (x != NULL) continue;
+                               break;
+                       }
+                       /* -Qnew is in effect:  fall through to
+                          INPLACE_TRUE_DIVIDE */
+               case INPLACE_TRUE_DIVIDE:
                        w = POP();
                        v = POP();
-                       x = PyNumber_InPlaceDivide(v, w);
+                       x = PyNumber_InPlaceTrueDivide(v, w);
                        Py_DECREF(v);
                        Py_DECREF(w);
                        PUSH(x);
@@ -1110,16 +1123,6 @@ eval_frame(PyFrameObject *f)
                        if (x != NULL) continue;
                        break;
 
-               case INPLACE_TRUE_DIVIDE:
-                       w = POP();
-                       v = POP();
-                       x = PyNumber_InPlaceTrueDivide(v, w);
-                       Py_DECREF(v);
-                       Py_DECREF(w);
-                       PUSH(x);
-                       if (x != NULL) continue;
-                       break;
-
                case INPLACE_MODULO:
                        w = POP();
                        v = POP();