]> granicus.if.org Git - python/commitdiff
Attempt to fix bogus gcc -Wall warnings reported by Marc-Andre Lemburg,
authorTim Peters <tim.peters@gmail.com>
Wed, 11 Oct 2000 07:04:49 +0000 (07:04 +0000)
committerTim Peters <tim.peters@gmail.com>
Wed, 11 Oct 2000 07:04:49 +0000 (07:04 +0000)
by making the DUP_TOPX code utterly straightforward.  This also gets rid
of all normal-case internal DUP_TOPX if/branches, and allows replacing one
POP() with TOP() in each case, so is a good idea regardless.

Python/ceval.c

index 36cdab84e5839de04d7d7623ec3b7acb02af38fd..b6a3addde4df15d608531c3848fc5a0415150b3b 100644 (file)
@@ -708,49 +708,79 @@ eval_code2(PyCodeObject *co, PyObject *globals, PyObject *locals,
                
                case DUP_TOPX:
                        switch (oparg) {
-                       case 5:
-                       case 4:
-                       case 3:
-                       case 2:
                        case 1:
+                               x = TOP();
+                               Py_INCREF(x);
+                               PUSH(x);
+                               continue;
+                       case 2:
+                               x = POP();
+                               Py_INCREF(x);
+                               w = TOP();
+                               Py_INCREF(w);
+                               PUSH(x);
+                               PUSH(w);
+                               PUSH(x);
+                               continue;
+                       case 3:
+                               x = POP();
+                               Py_INCREF(x);
+                               w = POP();
+                               Py_INCREF(w);
+                               v = TOP();
+                               Py_INCREF(v);
+                               PUSH(w);
+                               PUSH(x);
+                               PUSH(v);
+                               PUSH(w);
+                               PUSH(x);
+                               continue;
+                       case 4:
+                               x = POP();
+                               Py_INCREF(x);
+                               w = POP();
+                               Py_INCREF(w);
+                               v = POP();
+                               Py_INCREF(v);
+                               u = TOP();
+                               Py_INCREF(u);
+                               PUSH(v);
+                               PUSH(w);
+                               PUSH(x);
+                               PUSH(u);
+                               PUSH(v);
+                               PUSH(w);
+                               PUSH(x);
+                               continue;
+                       case 5:
                                x = POP();
-                               if (oparg == 1) break;
+                               Py_INCREF(x);
                                w = POP();
-                               if (oparg == 2) break;
+                               Py_INCREF(w);
                                v = POP();
-                               if (oparg == 3) break;
+                               Py_INCREF(v);
                                u = POP();
-                               if (oparg == 4) break;
-                               t = POP();
-                               break;
+                               Py_INCREF(u);
+                               t = TOP();
+                               Py_INCREF(t);
+                               PUSH(u);
+                               PUSH(v);
+                               PUSH(w);
+                               PUSH(x);
+                               PUSH(t);
+                               PUSH(u);
+                               PUSH(v);
+                               PUSH(w);
+                               PUSH(x);
+                               continue;
                        default:
                                fprintf(stderr, "Invalid argument to DUP_TOPX: %d!\n", oparg);
                                PyErr_SetString(PyExc_SystemError,
                                        "invalid argument to DUP_TOPX");
                                x = NULL;
-                       }
-                       if (x == NULL)
                                break;
-                       switch (oparg) {
-                       case 5: PUSH(t);
-                               Py_INCREF(t); /* Fallthrough */
-                       case 4: PUSH(u);
-                               Py_INCREF(u); /* Fallthrough */
-                       case 3: PUSH(v);
-                               Py_INCREF(v); /* Fallthrough */
-                       case 2: PUSH(w);
-                               Py_INCREF(w); /* Fallthrough */
-                       case 1: PUSH(x);
-                               Py_INCREF(x); /* Fallthrough */
-                       }
-                       switch (oparg) {
-                       case 5: PUSH(t); /* Fallthrough */
-                       case 4: PUSH(u); /* Fallthrough */
-                       case 3: PUSH(v); /* Fallthrough */
-                       case 2: PUSH(w); /* Fallthrough */
-                       case 1: PUSH(x); /* Fallthrough */
                        }
-                       continue;
+                       break;
 
                case UNARY_POSITIVE:
                        v = POP();