Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit30ec968

Browse files
authored
gh-111354: remove comparisons with enum values, variable reuse, unused imports in genobject.c (#111708)
1 parent97c4c06 commit30ec968

File tree

2 files changed

+15
-22
lines changed

2 files changed

+15
-22
lines changed

‎Include/internal/pycore_frame.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ typedef enum _framestate {
4545
}PyFrameState;
4646

4747
#defineFRAME_STATE_SUSPENDED(S) ((S) == FRAME_SUSPENDED || (S) == FRAME_SUSPENDED_YIELD_FROM)
48+
#defineFRAME_STATE_FINISHED(S) ((S) >= FRAME_COMPLETED)
4849

4950
enum_frameowner {
5051
FRAME_OWNED_BY_THREAD=0,

‎Objects/genobject.c

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,10 @@
99
#include"pycore_genobject.h"// struct _Py_async_gen_state
1010
#include"pycore_modsupport.h"// _PyArg_CheckPositional()
1111
#include"pycore_object.h"// _PyObject_GC_UNTRACK()
12-
#include"pycore_opcode_metadata.h"// _PyOpcode_Caches
1312
#include"pycore_opcode_utils.h"// RESUME_AFTER_YIELD_FROM
1413
#include"pycore_pyerrors.h"// _PyErr_ClearExcState()
1514
#include"pycore_pystate.h"// _PyThreadState_GET()
1615

17-
#include"opcode.h"// SEND
18-
#include"frameobject.h"// _PyInterpreterFrame_GetLine
1916
#include"pystats.h"
2017

2118
staticPyObject*gen_close(PyGenObject*,PyObject*);
@@ -43,19 +40,12 @@ PyGen_GetCode(PyGenObject *gen) {
4340
returnres;
4441
}
4542

46-
staticinlineint
47-
exc_state_traverse(_PyErr_StackItem*exc_state,visitprocvisit,void*arg)
48-
{
49-
Py_VISIT(exc_state->exc_value);
50-
return0;
51-
}
52-
5343
staticint
5444
gen_traverse(PyGenObject*gen,visitprocvisit,void*arg)
5545
{
5646
Py_VISIT(gen->gi_name);
5747
Py_VISIT(gen->gi_qualname);
58-
if (gen->gi_frame_state<FRAME_CLEARED) {
48+
if (gen->gi_frame_state!=FRAME_CLEARED) {
5949
_PyInterpreterFrame*frame= (_PyInterpreterFrame*)(gen->gi_iframe);
6050
assert(frame->frame_obj==NULL||
6151
frame->frame_obj->f_frame->owner==FRAME_OWNED_BY_GENERATOR);
@@ -66,15 +56,16 @@ gen_traverse(PyGenObject *gen, visitproc visit, void *arg)
6656
}
6757
/* No need to visit cr_origin, because it's just tuples/str/int, so can't
6858
participate in a reference cycle. */
69-
returnexc_state_traverse(&gen->gi_exc_state,visit,arg);
59+
Py_VISIT(gen->gi_exc_state.exc_value);
60+
return0;
7061
}
7162

7263
void
7364
_PyGen_Finalize(PyObject*self)
7465
{
7566
PyGenObject*gen= (PyGenObject*)self;
7667

77-
if (gen->gi_frame_state >=FRAME_COMPLETED) {
68+
if (FRAME_STATE_FINISHED(gen->gi_frame_state)) {
7869
/* Generator isn't paused, so no need to close */
7970
return;
8071
}
@@ -147,7 +138,7 @@ gen_dealloc(PyGenObject *gen)
147138
and GC_Del. */
148139
Py_CLEAR(((PyAsyncGenObject*)gen)->ag_origin_or_finalizer);
149140
}
150-
if (gen->gi_frame_state<FRAME_CLEARED) {
141+
if (gen->gi_frame_state!=FRAME_CLEARED) {
151142
_PyInterpreterFrame*frame= (_PyInterpreterFrame*)gen->gi_iframe;
152143
gen->gi_frame_state=FRAME_CLEARED;
153144
frame->previous=NULL;
@@ -171,7 +162,6 @@ gen_send_ex2(PyGenObject *gen, PyObject *arg, PyObject **presult,
171162
{
172163
PyThreadState*tstate=_PyThreadState_GET();
173164
_PyInterpreterFrame*frame= (_PyInterpreterFrame*)gen->gi_iframe;
174-
PyObject*result;
175165

176166
*presult=NULL;
177167
if (gen->gi_frame_state==FRAME_CREATED&&arg&&arg!=Py_None) {
@@ -198,7 +188,7 @@ gen_send_ex2(PyGenObject *gen, PyObject *arg, PyObject **presult,
198188
PyErr_SetString(PyExc_ValueError,msg);
199189
returnPYGEN_ERROR;
200190
}
201-
if (gen->gi_frame_state >=FRAME_COMPLETED) {
191+
if (FRAME_STATE_FINISHED(gen->gi_frame_state)) {
202192
if (PyCoro_CheckExact(gen)&& !closing) {
203193
/* `gen` is an exhausted coroutine: raise an error,
204194
except when called from gen_close(), which should
@@ -216,10 +206,12 @@ gen_send_ex2(PyGenObject *gen, PyObject *arg, PyObject **presult,
216206
returnPYGEN_ERROR;
217207
}
218208

219-
assert(gen->gi_frame_state<FRAME_EXECUTING);
209+
assert((gen->gi_frame_state==FRAME_CREATED)||
210+
FRAME_STATE_SUSPENDED(gen->gi_frame_state));
211+
220212
/* Push arg onto the frame's value stack */
221-
result=arg ?arg :Py_None;
222-
_PyFrame_StackPush(frame,Py_NewRef(result));
213+
PyObject*arg_obj=arg ?arg :Py_None;
214+
_PyFrame_StackPush(frame,Py_NewRef(arg_obj));
223215

224216
_PyErr_StackItem*prev_exc_info=tstate->exc_info;
225217
gen->gi_exc_state.previous_item=prev_exc_info;
@@ -232,7 +224,7 @@ gen_send_ex2(PyGenObject *gen, PyObject *arg, PyObject **presult,
232224

233225
gen->gi_frame_state=FRAME_EXECUTING;
234226
EVAL_CALL_STAT_INC(EVAL_CALL_GENERATOR);
235-
result=_PyEval_EvalFrame(tstate,frame,exc);
227+
PyObject*result=_PyEval_EvalFrame(tstate,frame,exc);
236228
assert(tstate->exc_info==prev_exc_info);
237229
assert(gen->gi_exc_state.previous_item==NULL);
238230
assert(gen->gi_frame_state!=FRAME_EXECUTING);
@@ -366,7 +358,7 @@ gen_close(PyGenObject *gen, PyObject *args)
366358
gen->gi_frame_state=FRAME_COMPLETED;
367359
Py_RETURN_NONE;
368360
}
369-
if (gen->gi_frame_state >=FRAME_COMPLETED) {
361+
if (FRAME_STATE_FINISHED(gen->gi_frame_state)) {
370362
Py_RETURN_NONE;
371363
}
372364
PyObject*yf=_PyGen_yf(gen);
@@ -2095,7 +2087,7 @@ async_gen_athrow_send(PyAsyncGenAThrow *o, PyObject *arg)
20952087
returnNULL;
20962088
}
20972089

2098-
if (gen->gi_frame_state >=FRAME_COMPLETED) {
2090+
if (FRAME_STATE_FINISHED(gen->gi_frame_state)) {
20992091
o->agt_state=AWAITABLE_STATE_CLOSED;
21002092
PyErr_SetNone(PyExc_StopIteration);
21012093
returnNULL;

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp