@@ -80,15 +80,20 @@ builtin_apply(self, args)
8080 object * self ;
8181 object * args ;
8282{
83- object * func , * alist ;
83+ object * func , * alist , * kwdict = NULL ;
8484
85- if (!newgetargs (args , "OO:apply" , & func , & alist ))
85+ if (!newgetargs (args , "O| OO:apply" , & func , & alist , & kwdict ))
8686 return NULL ;
87- if (!is_tupleobject (alist )) {
87+ if (alist != NULL && !is_tupleobject (alist )) {
8888 err_setstr (TypeError , "apply() 2nd argument must be tuple" );
8989 return NULL ;
9090 }
91- return call_object (func , alist );
91+ if (kwdict != NULL && !is_dictobject (kwdict )) {
92+ err_setstr (TypeError ,
93+ "apply() 3rd argument must be dictionary" );
94+ return NULL ;
95+ }
96+ return PyEval_CallObjectWithKeywords (func , alist , kwdict );
9297}
9398
9499static object *
@@ -373,8 +378,7 @@ builtin_eval(self, args)
373378 return NULL ;
374379 }
375380 if (is_codeobject (cmd ))
376- return eval_code ((codeobject * ) cmd , globals , locals ,
377- (object * )NULL , (object * )NULL );
381+ return eval_code ((codeobject * ) cmd , globals , locals );
378382 if (!is_stringobject (cmd )) {
379383 err_setstr (TypeError ,
380384 "eval() argument 1 must be string or code object" );
0 commit comments