@@ -4107,14 +4107,22 @@ _PyEval_EvalCode(PyThreadState *tstate,
4107
4107
{
4108
4108
assert (is_tstate_valid (tstate ));
4109
4109
4110
- PyCodeObject * co = (PyCodeObject * )_co ;
4111
- PyFrameObject * f ;
4110
+ PyCodeObject * co = (PyCodeObject * )_co ;
4111
+
4112
+ if (!name ) {
4113
+ name = co -> co_name ;
4114
+ }
4115
+ assert (name != NULL );
4116
+ assert (PyUnicode_Check (name ));
4117
+
4118
+ if (!qualname ) {
4119
+ qualname = name ;
4120
+ }
4121
+ assert (qualname != NULL );
4122
+ assert (PyUnicode_Check (qualname ));
4123
+
4112
4124
PyObject * retval = NULL ;
4113
- PyObject * * fastlocals , * * freevars ;
4114
- PyObject * x , * u ;
4115
4125
const Py_ssize_t total_args = co -> co_argcount + co -> co_kwonlyargcount ;
4116
- Py_ssize_t i , j , n ;
4117
- PyObject * kwdict ;
4118
4126
4119
4127
if (globals == NULL ) {
4120
4128
_PyErr_SetString (tstate , PyExc_SystemError ,
@@ -4123,14 +4131,16 @@ _PyEval_EvalCode(PyThreadState *tstate,
4123
4131
}
4124
4132
4125
4133
/* Create the frame */
4126
- f = _PyFrame_New_NoTrack (tstate , co , globals , locals );
4134
+ PyFrameObject * f = _PyFrame_New_NoTrack (tstate , co , globals , locals );
4127
4135
if (f == NULL ) {
4128
4136
return NULL ;
4129
4137
}
4130
- fastlocals = f -> f_localsplus ;
4131
- freevars = f -> f_localsplus + co -> co_nlocals ;
4138
+ PyObject * * fastlocals = f -> f_localsplus ;
4139
+ PyObject * * freevars = f -> f_localsplus + co -> co_nlocals ;
4132
4140
4133
4141
/* Create a dictionary for keyword parameters (**kwags) */
4142
+ PyObject * kwdict ;
4143
+ Py_ssize_t i ;
4134
4144
if (co -> co_flags & CO_VARKEYWORDS ) {
4135
4145
kwdict = PyDict_New ();
4136
4146
if (kwdict == NULL )
@@ -4146,21 +4156,22 @@ _PyEval_EvalCode(PyThreadState *tstate,
4146
4156
}
4147
4157
4148
4158
/* Copy all positional arguments into local variables */
4159
+ Py_ssize_t j , n ;
4149
4160
if (argcount > co -> co_argcount ) {
4150
4161
n = co -> co_argcount ;
4151
4162
}
4152
4163
else {
4153
4164
n = argcount ;
4154
4165
}
4155
4166
for (j = 0 ; j < n ; j ++ ) {
4156
- x = args [j ];
4167
+ PyObject * x = args [j ];
4157
4168
Py_INCREF (x );
4158
4169
SETLOCAL (j , x );
4159
4170
}
4160
4171
4161
4172
/* Pack other positional arguments into the *args argument */
4162
4173
if (co -> co_flags & CO_VARARGS ) {
4163
- u = _PyTuple_FromArray (args + n , argcount - n );
4174
+ PyObject * u = _PyTuple_FromArray (args + n , argcount - n );
4164
4175
if (u == NULL ) {
4165
4176
goto fail ;
4166
4177
}
@@ -4186,16 +4197,16 @@ _PyEval_EvalCode(PyThreadState *tstate,
4186
4197
normally interned this should almost always hit. */
4187
4198
co_varnames = ((PyTupleObject * )(co -> co_varnames ))-> ob_item ;
4188
4199
for (j = co -> co_posonlyargcount ; j < total_args ; j ++ ) {
4189
- PyObject * name = co_varnames [j ];
4190
- if (name == keyword ) {
4200
+ PyObject * varname = co_varnames [j ];
4201
+ if (varname == keyword ) {
4191
4202
goto kw_found ;
4192
4203
}
4193
4204
}
4194
4205
4195
4206
/* Slow fallback, just in case */
4196
4207
for (j = co -> co_posonlyargcount ; j < total_args ; j ++ ) {
4197
- PyObject * name = co_varnames [j ];
4198
- int cmp = PyObject_RichCompareBool ( keyword , name , Py_EQ );
4208
+ PyObject * varname = co_varnames [j ];
4209
+ int cmp = PyObject_RichCompareBool ( keyword , varname , Py_EQ );
4199
4210
if (cmp > 0 ) {
4200
4211
goto kw_found ;
4201
4212
}
@@ -4209,7 +4220,8 @@ _PyEval_EvalCode(PyThreadState *tstate,
4209
4220
4210
4221
if (co -> co_posonlyargcount
4211
4222
&& positional_only_passed_as_keyword (tstate , co ,
4212
- kwcount , kwnames , qualname ))
4223
+ kwcount , kwnames ,
4224
+ qualname ))
4213
4225
{
4214
4226
goto fail ;
4215
4227
}
@@ -4238,7 +4250,8 @@ _PyEval_EvalCode(PyThreadState *tstate,
4238
4250
4239
4251
/* Check the number of positional arguments */
4240
4252
if ((argcount > co -> co_argcount ) && !(co -> co_flags & CO_VARARGS )) {
4241
- too_many_positional (tstate , co , argcount , defcount , fastlocals , qualname );
4253
+ too_many_positional (tstate , co , argcount , defcount , fastlocals ,
4254
+ qualname );
4242
4255
goto fail ;
4243
4256
}
4244
4257
@@ -4252,7 +4265,8 @@ _PyEval_EvalCode(PyThreadState *tstate,
4252
4265
}
4253
4266
}
4254
4267
if (missing ) {
4255
- missing_arguments (tstate , co , missing , defcount , fastlocals , qualname );
4268
+ missing_arguments (tstate , co , missing , defcount , fastlocals ,
4269
+ qualname );
4256
4270
goto fail ;
4257
4271
}
4258
4272
if (n > m )
@@ -4272,12 +4286,11 @@ _PyEval_EvalCode(PyThreadState *tstate,
4272
4286
if (co -> co_kwonlyargcount > 0 ) {
4273
4287
Py_ssize_t missing = 0 ;
4274
4288
for (i = co -> co_argcount ; i < total_args ; i ++ ) {
4275
- PyObject * name ;
4276
4289
if (GETLOCAL (i ) != NULL )
4277
4290
continue ;
4278
- name = PyTuple_GET_ITEM (co -> co_varnames , i );
4291
+ PyObject * varname = PyTuple_GET_ITEM (co -> co_varnames , i );
4279
4292
if (kwdefs != NULL ) {
4280
- PyObject * def = PyDict_GetItemWithError (kwdefs , name );
4293
+ PyObject * def = PyDict_GetItemWithError (kwdefs , varname );
4281
4294
if (def ) {
4282
4295
Py_INCREF (def );
4283
4296
SETLOCAL (i , def );
@@ -4290,7 +4303,8 @@ _PyEval_EvalCode(PyThreadState *tstate,
4290
4303
missing ++ ;
4291
4304
}
4292
4305
if (missing ) {
4293
- missing_arguments (tstate , co , missing , -1 , fastlocals , qualname );
4306
+ missing_arguments (tstate , co , missing , -1 , fastlocals ,
4307
+ qualname );
4294
4308
goto fail ;
4295
4309
}
4296
4310
}
0 commit comments