FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

gh-98831: rewrite RAISE_VARARGS in the instruction definition DSL by iritkatriel · Pull Request #101306 · python/cpython · GitHub

/ cpython Public
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension .c  (1) .h  (2) .py  (1) All 3 file types selected
Viewed files
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Unified
Split
Hide whitespace
Diff view
Unified
Split
Hide whitespace
13 changes: 5 additions & 8 deletions Python/bytecodes.c
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -505,27 +505,24 @@ dummy_func(
ERROR_IF(res == NULL, error);
}

// This should remain a legacy instruction.
inst(RAISE_VARARGS) {
inst(RAISE_VARARGS, (args[oparg] -- )) {
PyObject *cause = NULL, *exc = NULL;
switch (oparg) {
case 2:
cause = POP(); /* cause */
cause = args[1];
/* fall through */
case 1:
exc = POP(); /* exc */
exc = args[0];
/* fall through */
case 0:
if (do_raise(tstate, exc, cause)) {
goto exception_unwind;
}
ERROR_IF(do_raise(tstate, exc, cause), exception_unwind);
break;
default:
_PyErr_SetString(tstate, PyExc_SystemError,
"bad RAISE_VARARGS oparg");
break;
}
goto error;
ERROR_IF(true, error);
}

inst(INTERPRETER_EXIT, (retval --)) {
Expand Down
11 changes: 5 additions & 6 deletions Python/generated_cases.c.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 6 additions & 2 deletions Python/opcode_metadata.h
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// from Python/bytecodes.c
// Do not edit!

#ifndef NDEBUG
static int
_PyOpcode_num_popped(int opcode, int oparg) {
switch(opcode) {
Expand Down Expand Up @@ -86,7 +87,7 @@ _PyOpcode_num_popped(int opcode, int oparg) {
case CALL_INTRINSIC_1:
return 1;
case RAISE_VARARGS:
return -1;
return oparg;
case INTERPRETER_EXIT:
return 1;
case RETURN_VALUE:
Expand Down Expand Up @@ -345,7 +346,9 @@ _PyOpcode_num_popped(int opcode, int oparg) {
Py_UNREACHABLE();
}
}
#endif

#ifndef NDEBUG
static int
_PyOpcode_num_pushed(int opcode, int oparg) {
switch(opcode) {
Expand Down Expand Up @@ -430,7 +433,7 @@ _PyOpcode_num_pushed(int opcode, int oparg) {
case CALL_INTRINSIC_1:
return 1;
case RAISE_VARARGS:
return -1;
return 0;
case INTERPRETER_EXIT:
return 0;
case RETURN_VALUE:
Expand Down Expand Up @@ -689,6 +692,7 @@ _PyOpcode_num_pushed(int opcode, int oparg) {
Py_UNREACHABLE();
}
}
#endif
enum Direction { DIR_NONE, DIR_READ, DIR_WRITE };
enum InstructionFormat { INSTR_FMT_IB, INSTR_FMT_IBC, INSTR_FMT_IBC0, INSTR_FMT_IBC000, INSTR_FMT_IBIB, INSTR_FMT_IX, INSTR_FMT_IXC, INSTR_FMT_IXC000 };
struct opcode_metadata {
Expand Down
6 changes: 4 additions & 2 deletions Tools/cases_generator/generate_cases.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Original file line number Diff line number Diff line change
Expand Up @@ -774,7 +774,8 @@ def write_stack_effect_functions(self) -> None:
pushed_data.append( (instr, pushed) )

def write_function(direction: str, data: list[tuple[Instruction, str]]) -> None:
self.out.emit("\nstatic int");
self.out.emit("\n#ifndef NDEBUG");
self.out.emit("static int");
self.out.emit(f"_PyOpcode_num_{direction}(int opcode, int oparg) {{")
self.out.emit(" switch(opcode) {");
for instr, effect in data:
Expand All @@ -784,6 +785,7 @@ def write_function(direction: str, data: list[tuple[Instruction, str]]) -> None:
self.out.emit(" Py_UNREACHABLE();")
self.out.emit(" }")
self.out.emit("}")
self.out.emit("#endif");

write_function('popped', popped_data)
write_function('pushed', pushed_data)
Expand Down Expand Up @@ -1023,7 +1025,7 @@ def always_exits(lines: list[str]) -> bool:
return False
line = line[12:]
return line.startswith(
("goto ", "return ", "DISPATCH", "GO_TO_", "Py_UNREACHABLE()")
("goto ", "return ", "DISPATCH", "GO_TO_", "Py_UNREACHABLE()", "ERROR_IF(true, ")
)


Expand Down

Back | FazBrowse Home | New Git URL