mirror of
https://github.com/python/cpython.git
synced 2026-01-06 23:42:34 +00:00
gh-119180: Add LOAD_COMMON_CONSTANT opcode (#119321)
The PEP 649 implementation will require a way to load NotImplementedError from the bytecode. @markshannon suggested implementing this by converting LOAD_ASSERTION_ERROR into a more general mechanism for loading constants. This PR adds this new opcode. I will work on the rest of the implementation of the PEP separately. Co-authored-by: Irit Katriel <1055913+iritkatriel@users.noreply.github.com>
This commit is contained in:
parent
506b1a3ff6
commit
98e855fcc1
22 changed files with 337 additions and 288 deletions
32
Python/generated_cases.c.h
generated
32
Python/generated_cases.c.h
generated
|
|
@ -3695,17 +3695,6 @@
|
|||
DISPATCH();
|
||||
}
|
||||
|
||||
TARGET(LOAD_ASSERTION_ERROR) {
|
||||
frame->instr_ptr = next_instr;
|
||||
next_instr += 1;
|
||||
INSTRUCTION_STATS(LOAD_ASSERTION_ERROR);
|
||||
PyObject *value;
|
||||
value = Py_NewRef(PyExc_AssertionError);
|
||||
stack_pointer[0] = value;
|
||||
stack_pointer += 1;
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
TARGET(LOAD_ATTR) {
|
||||
frame->instr_ptr = next_instr;
|
||||
next_instr += 10;
|
||||
|
|
@ -4251,6 +4240,27 @@
|
|||
DISPATCH();
|
||||
}
|
||||
|
||||
TARGET(LOAD_COMMON_CONSTANT) {
|
||||
frame->instr_ptr = next_instr;
|
||||
next_instr += 1;
|
||||
INSTRUCTION_STATS(LOAD_COMMON_CONSTANT);
|
||||
PyObject *value;
|
||||
// Keep in sync with _common_constants in opcode.py
|
||||
switch(oparg) {
|
||||
case CONSTANT_ASSERTIONERROR:
|
||||
value = PyExc_AssertionError;
|
||||
break;
|
||||
case CONSTANT_NOTIMPLEMENTEDERROR:
|
||||
value = PyExc_NotImplementedError;
|
||||
break;
|
||||
default:
|
||||
Py_FatalError("bad LOAD_COMMON_CONSTANT oparg");
|
||||
}
|
||||
stack_pointer[0] = value;
|
||||
stack_pointer += 1;
|
||||
DISPATCH();
|
||||
}
|
||||
|
||||
TARGET(LOAD_CONST) {
|
||||
frame->instr_ptr = next_instr;
|
||||
next_instr += 1;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue