PUSH(result);
}
- // stack effect: ( -- __0)
- inst(COPY) {
- assert(oparg != 0);
- PyObject *peek = PEEK(oparg);
- PUSH(Py_NewRef(peek));
+ inst(COPY, (bottom, unused[oparg-1] -- bottom, unused[oparg-1], top)) {
+ assert(oparg > 0);
+ top = Py_NewRef(bottom);
}
inst(BINARY_OP, (unused/1, lhs, rhs -- res)) {
ERROR_IF(res == NULL, error);
}
- // stack effect: ( -- )
- inst(SWAP) {
- assert(oparg != 0);
- PyObject *top = TOP();
- SET_TOP(PEEK(oparg));
- PEEK(oparg) = top;
+ inst(SWAP, (bottom, unused[oparg-2], top --
+ top, unused[oparg-2], bottom)) {
+ assert(oparg >= 2);
}
inst(EXTENDED_ARG, (--)) {
}
TARGET(COPY) {
- assert(oparg != 0);
- PyObject *peek = PEEK(oparg);
- PUSH(Py_NewRef(peek));
+ PyObject *bottom = PEEK(1 + (oparg-1));
+ PyObject *top;
+ assert(oparg > 0);
+ top = Py_NewRef(bottom);
+ STACK_GROW(1);
+ POKE(1, top);
DISPATCH();
}
}
TARGET(SWAP) {
- assert(oparg != 0);
- PyObject *top = TOP();
- SET_TOP(PEEK(oparg));
- PEEK(oparg) = top;
+ PyObject *top = PEEK(1);
+ PyObject *bottom = PEEK(2 + (oparg-2));
+ assert(oparg >= 2);
+ POKE(1, bottom);
+ POKE(2 + (oparg-2), top);
DISPATCH();
}