summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
authorIrit Katriel <1055913+iritkatriel@users.noreply.github.com>2024-05-21 17:08:51 (GMT)
committerGitHub <noreply@github.com>2024-05-21 17:08:51 (GMT)
commit77ff28bb6776d583e593937df554cbf572cb47b0 (patch)
treea8a9f4f1338fa786340a720dd741b5db208589ff /Objects
parentf49df4f486e531ff2666eb22854117c564b3de3d (diff)
downloadcpython-77ff28bb6776d583e593937df554cbf572cb47b0.zip
cpython-77ff28bb6776d583e593937df554cbf572cb47b0.tar.gz
cpython-77ff28bb6776d583e593937df554cbf572cb47b0.tar.bz2
gh-109176: replace _PyFrame_OpAlreadyRan by an assertion that the frame is complete. (#119234)
Diffstat (limited to 'Objects')
-rw-r--r--Objects/frameobject.c35
1 files changed, 2 insertions, 33 deletions
diff --git a/Objects/frameobject.c b/Objects/frameobject.c
index 64fded8..fc8d6c7 100644
--- a/Objects/frameobject.c
+++ b/Objects/frameobject.c
@@ -1828,32 +1828,6 @@ PyFrame_New(PyThreadState *tstate, PyCodeObject *code,
return f;
}
-static int
-_PyFrame_OpAlreadyRan(_PyInterpreterFrame *frame, int opcode, int oparg)
-{
- // This only works when opcode is a non-quickened form:
- assert(_PyOpcode_Deopt[opcode] == opcode);
- int check_oparg = 0;
- for (_Py_CODEUNIT *instruction = _PyCode_CODE(_PyFrame_GetCode(frame));
- instruction < frame->instr_ptr; instruction++)
- {
- int check_opcode = _PyOpcode_Deopt[instruction->op.code];
- check_oparg |= instruction->op.arg;
- if (check_opcode == opcode && check_oparg == oparg) {
- return 1;
- }
- if (check_opcode == EXTENDED_ARG) {
- check_oparg <<= 8;
- }
- else {
- check_oparg = 0;
- }
- instruction += _PyOpcode_Caches[check_opcode];
- }
- return 0;
-}
-
-
// Initialize frame free variables if needed
static void
frame_init_get_vars(_PyInterpreterFrame *frame)
@@ -1907,14 +1881,9 @@ frame_get_var(_PyInterpreterFrame *frame, PyCodeObject *co, int i,
value = PyCell_GET(value);
}
else if (kind & CO_FAST_CELL) {
- // Note that no *_DEREF ops can happen before MAKE_CELL
- // executes. So there's no need to duplicate the work
- // that MAKE_CELL would otherwise do later, if it hasn't
- // run yet.
if (value != NULL) {
- if (PyCell_Check(value) &&
- _PyFrame_OpAlreadyRan(frame, MAKE_CELL, i)) {
- // (likely) MAKE_CELL must have executed already.
+ if (PyCell_Check(value)) {
+ assert(!_PyFrame_IsIncomplete(frame));
value = PyCell_GET(value);
}
// (likely) Otherwise it is an arg (kind & CO_FAST_LOCAL),