Skip to content

Commit 80fc5aa

Browse files
committed
Avoid having stackref only visible from the c stack
1 parent 112cee6 commit 80fc5aa

File tree

2 files changed

+12
-16
lines changed

2 files changed

+12
-16
lines changed

Python/bytecodes.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1210,19 +1210,16 @@ dummy_func(
12101210

12111211
op(_SEND, (receiver, v -- receiver, retval)) {
12121212
PyObject *receiver_o = PyStackRef_AsPyObjectBorrow(receiver);
1213-
12141213
PyObject *retval_o;
12151214
assert(frame->owner != FRAME_OWNED_BY_INTERPRETER);
1216-
_PyStackRef tmp = PyStackRef_MakeHeapSafe(v);
1217-
DEAD(v);
12181215
if ((tstate->interp->eval_frame == NULL) &&
12191216
(Py_TYPE(receiver_o) == &PyGen_Type || Py_TYPE(receiver_o) == &PyCoro_Type) &&
12201217
((PyGenObject *)receiver_o)->gi_frame_state < FRAME_EXECUTING)
12211218
{
12221219
PyGenObject *gen = (PyGenObject *)receiver_o;
12231220
_PyInterpreterFrame *gen_frame = &gen->gi_iframe;
12241221
STACK_SHRINK(1);
1225-
_PyFrame_StackPush(gen_frame, tmp);
1222+
_PyFrame_StackPush(gen_frame, PyStackRef_MakeHeapSafe(v));
12261223
gen->gi_frame_state = FRAME_EXECUTING;
12271224
gen->gi_exc_state.previous_item = tstate->exc_info;
12281225
tstate->exc_info = &gen->gi_exc_state;
@@ -1238,7 +1235,7 @@ dummy_func(
12381235
else {
12391236
retval_o = PyObject_CallMethodOneArg(receiver_o,
12401237
&_Py_ID(send),
1241-
PyStackRef_AsPyObjectBorrow(tmp));
1238+
PyStackRef_AsPyObjectBorrow(v));
12421239
}
12431240
if (retval_o == NULL) {
12441241
int matches = _PyErr_ExceptionMatches(tstate, PyExc_StopIteration);
@@ -1251,11 +1248,11 @@ dummy_func(
12511248
JUMPBY(oparg);
12521249
}
12531250
else {
1254-
PyStackRef_CLOSE(tmp);
1251+
PyStackRef_CLOSE(v);
12551252
ERROR_IF(true, error);
12561253
}
12571254
}
1258-
PyStackRef_CLOSE(tmp);
1255+
PyStackRef_CLOSE(v);
12591256
retval = PyStackRef_FromPyObjectSteal(retval_o);
12601257
}
12611258

Python/generated_cases.c.h

Lines changed: 8 additions & 9 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)