diff options
author | Guido van Rossum <guido@python.org> | 2022-11-06 17:40:47 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-06 17:40:47 (GMT) |
commit | 7dcd28eb41abeb29ddefd0a49fa9f7a9ebd61e16 (patch) | |
tree | 9d22898f492f9bdc544c1bed9a1d5e34b79924d3 /Python/bytecodes.c | |
parent | ede6cb26153f106a11a462614fdda12691fc6463 (diff) | |
download | cpython-7dcd28eb41abeb29ddefd0a49fa9f7a9ebd61e16.zip cpython-7dcd28eb41abeb29ddefd0a49fa9f7a9ebd61e16.tar.gz cpython-7dcd28eb41abeb29ddefd0a49fa9f7a9ebd61e16.tar.bz2 |
GH-98831: Implement super-instruction generation (#99084)
Co-authored-by: C.A.M. Gerlach <CAM.Gerlach@Gerlach.CAM>
Diffstat (limited to 'Python/bytecodes.c')
-rw-r--r-- | Python/bytecodes.c | 67 |
1 files changed, 6 insertions, 61 deletions
diff --git a/Python/bytecodes.c b/Python/bytecodes.c index e87ca6e..f0e9e3a 100644 --- a/Python/bytecodes.c +++ b/Python/bytecodes.c @@ -69,6 +69,7 @@ do { \ #define DISPATCH() ((void)0) #define inst(name) case name: +#define super(name) static int SUPER_##name #define family(name) static int family_##name #define NAME_ERROR_MSG \ @@ -158,67 +159,11 @@ dummy_func( SETLOCAL(oparg, value); } - // stack effect: ( -- __0, __1) - inst(LOAD_FAST__LOAD_FAST) { - PyObject *value = GETLOCAL(oparg); - assert(value != NULL); - NEXTOPARG(); - next_instr++; - Py_INCREF(value); - PUSH(value); - value = GETLOCAL(oparg); - assert(value != NULL); - Py_INCREF(value); - PUSH(value); - } - - // stack effect: ( -- __0, __1) - inst(LOAD_FAST__LOAD_CONST) { - PyObject *value = GETLOCAL(oparg); - assert(value != NULL); - NEXTOPARG(); - next_instr++; - Py_INCREF(value); - PUSH(value); - value = GETITEM(consts, oparg); - Py_INCREF(value); - PUSH(value); - } - - // stack effect: ( -- ) - inst(STORE_FAST__LOAD_FAST) { - PyObject *value = POP(); - SETLOCAL(oparg, value); - NEXTOPARG(); - next_instr++; - value = GETLOCAL(oparg); - assert(value != NULL); - Py_INCREF(value); - PUSH(value); - } - - // stack effect: (__0, __1 -- ) - inst(STORE_FAST__STORE_FAST) { - PyObject *value = POP(); - SETLOCAL(oparg, value); - NEXTOPARG(); - next_instr++; - value = POP(); - SETLOCAL(oparg, value); - } - - // stack effect: ( -- __0, __1) - inst(LOAD_CONST__LOAD_FAST) { - PyObject *value = GETITEM(consts, oparg); - NEXTOPARG(); - next_instr++; - Py_INCREF(value); - PUSH(value); - value = GETLOCAL(oparg); - assert(value != NULL); - Py_INCREF(value); - PUSH(value); - } + super(LOAD_FAST__LOAD_FAST) = LOAD_FAST + LOAD_FAST; + super(LOAD_FAST__LOAD_CONST) = LOAD_FAST + LOAD_CONST; + super(STORE_FAST__LOAD_FAST) = STORE_FAST + LOAD_FAST; + super(STORE_FAST__STORE_FAST) = STORE_FAST + STORE_FAST; + super (LOAD_CONST__LOAD_FAST) = LOAD_CONST + LOAD_FAST; // stack effect: (__0 -- ) inst(POP_TOP) { |