summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Include/internal/pycore_opcode_utils.h6
-rw-r--r--Objects/genobject.c3
-rw-r--r--Python/bytecodes.c2
-rw-r--r--Python/ceval.c2
-rw-r--r--Python/compile.c6
-rw-r--r--Python/generated_cases.c.h2
-rw-r--r--Python/specialize.c3
7 files changed, 16 insertions, 8 deletions
diff --git a/Include/internal/pycore_opcode_utils.h b/Include/internal/pycore_opcode_utils.h
index c4acb00..a673336 100644
--- a/Include/internal/pycore_opcode_utils.h
+++ b/Include/internal/pycore_opcode_utils.h
@@ -58,6 +58,12 @@ extern "C" {
#define MAKE_FUNCTION_ANNOTATIONS 0x04
#define MAKE_FUNCTION_CLOSURE 0x08
+/* Values used in the oparg for RESUME */
+#define RESUME_AT_FUNC_START 0
+#define RESUME_AFTER_YIELD 1
+#define RESUME_AFTER_YIELD_FROM 2
+#define RESUME_AFTER_AWAIT 3
+
#ifdef __cplusplus
}
diff --git a/Objects/genobject.c b/Objects/genobject.c
index 092fd5f..1477139 100644
--- a/Objects/genobject.c
+++ b/Objects/genobject.c
@@ -10,6 +10,7 @@
#include "pycore_modsupport.h" // _PyArg_CheckPositional()
#include "pycore_object.h" // _PyObject_GC_UNTRACK()
#include "pycore_opcode_metadata.h" // _PyOpcode_Caches
+#include "pycore_opcode_utils.h" // RESUME_AFTER_YIELD_FROM
#include "pycore_pyerrors.h" // _PyErr_ClearExcState()
#include "pycore_pystate.h" // _PyThreadState_GET()
@@ -363,7 +364,7 @@ _PyGen_yf(PyGenObject *gen)
assert(_PyCode_CODE(_PyGen_GetCode(gen))[0].op.code != SEND);
return NULL;
}
- if (!is_resume(frame->instr_ptr) || frame->instr_ptr->op.arg < 2)
+ if (!is_resume(frame->instr_ptr) || frame->instr_ptr->op.arg < RESUME_AFTER_YIELD_FROM)
{
/* Not in a yield from */
return NULL;
diff --git a/Python/bytecodes.c b/Python/bytecodes.c
index e101efa..2d7b5ba 100644
--- a/Python/bytecodes.c
+++ b/Python/bytecodes.c
@@ -147,7 +147,7 @@ dummy_func(
next_instr--;
}
else {
- if (oparg < 2) {
+ if (oparg < RESUME_AFTER_YIELD_FROM) {
CHECK_EVAL_BREAKER();
}
next_instr[-1].op.code = RESUME_CHECK;
diff --git a/Python/ceval.c b/Python/ceval.c
index 61f8387..e3a7c5f 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -643,7 +643,7 @@ static const _Py_CODEUNIT _Py_INTERPRETER_TRAMPOLINE_INSTRUCTIONS[] = {
{ .op.code = INTERPRETER_EXIT, .op.arg = 0 }, /* reached on return */
{ .op.code = NOP, .op.arg = 0 },
{ .op.code = INTERPRETER_EXIT, .op.arg = 0 }, /* reached on yield */
- { .op.code = RESUME, .op.arg = 0 }
+ { .op.code = RESUME, .op.arg = RESUME_AT_FUNC_START }
};
extern const struct _PyCode_DEF(8) _Py_InitCleanup;
diff --git a/Python/compile.c b/Python/compile.c
index 1d9ae62..3ff6418 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -1383,7 +1383,7 @@ compiler_enter_scope(struct compiler *c, identifier name,
else {
RETURN_IF_ERROR(compiler_set_qualname(c));
}
- ADDOP_I(c, loc, RESUME, 0);
+ ADDOP_I(c, loc, RESUME, RESUME_AT_FUNC_START);
if (u->u_scope_type == COMPILER_SCOPE_MODULE) {
loc.lineno = -1;
@@ -1552,7 +1552,7 @@ compiler_add_yield_from(struct compiler *c, location loc, int await)
ADDOP_JUMP(c, loc, SETUP_FINALLY, fail);
ADDOP_I(c, loc, YIELD_VALUE, 0);
ADDOP(c, NO_LOCATION, POP_BLOCK);
- ADDOP_I(c, loc, RESUME, await ? 3 : 2);
+ ADDOP_I(c, loc, RESUME, await ? RESUME_AFTER_AWAIT : RESUME_AFTER_YIELD_FROM);
ADDOP_JUMP(c, loc, JUMP_NO_INTERRUPT, send);
USE_LABEL(c, fail);
@@ -4161,7 +4161,7 @@ addop_yield(struct compiler *c, location loc) {
ADDOP_I(c, loc, CALL_INTRINSIC_1, INTRINSIC_ASYNC_GEN_WRAP);
}
ADDOP_I(c, loc, YIELD_VALUE, 0);
- ADDOP_I(c, loc, RESUME, 1);
+ ADDOP_I(c, loc, RESUME, RESUME_AFTER_YIELD);
return SUCCESS;
}
diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h
index 3ae1a58..d5e0d84 100644
--- a/Python/generated_cases.c.h
+++ b/Python/generated_cases.c.h
@@ -23,7 +23,7 @@
next_instr--;
}
else {
- if (oparg < 2) {
+ if (oparg < RESUME_AFTER_YIELD_FROM) {
CHECK_EVAL_BREAKER();
}
next_instr[-1].op.code = RESUME_CHECK;
diff --git a/Python/specialize.c b/Python/specialize.c
index cd26ff5..07fd93d 100644
--- a/Python/specialize.c
+++ b/Python/specialize.c
@@ -10,6 +10,7 @@
#include "pycore_moduleobject.h"
#include "pycore_object.h"
#include "pycore_opcode_metadata.h" // _PyOpcode_Caches
+#include "pycore_opcode_utils.h" // RESUME_AT_FUNC_START
#include "pycore_pylifecycle.h" // _PyOS_URandomNonblock()
#include "pycore_runtime.h" // _Py_ID()
@@ -2541,6 +2542,6 @@ const struct _PyCode_DEF(8) _Py_InitCleanup = {
.co_code_adaptive = {
EXIT_INIT_CHECK, 0,
RETURN_VALUE, 0,
- RESUME, 0,
+ RESUME, RESUME_AT_FUNC_START,
}
};