summaryrefslogtreecommitdiffstats
path: root/Python/ceval.c
diff options
context:
space:
mode:
authorTim Peters <tim.peters@gmail.com>2000-10-11 07:04:49 (GMT)
committerTim Peters <tim.peters@gmail.com>2000-10-11 07:04:49 (GMT)
commit35ba689caba292bbe5093026eaab43957992c089 (patch)
tree17e62398d122ac07cf89ff07f8f3275c0293e16a /Python/ceval.c
parent5428c7db41a32ced1acd93b13d69a48db6932c3f (diff)
downloadcpython-35ba689caba292bbe5093026eaab43957992c089.zip
cpython-35ba689caba292bbe5093026eaab43957992c089.tar.gz
cpython-35ba689caba292bbe5093026eaab43957992c089.tar.bz2
Attempt to fix bogus gcc -Wall warnings reported by Marc-Andre Lemburg,
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.
Diffstat (limited to 'Python/ceval.c')
-rw-r--r--Python/ceval.c92
1 files changed, 61 insertions, 31 deletions
diff --git a/Python/ceval.c b/Python/ceval.c
index 36cdab8..b6a3add 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -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();