◐ Shell
clean mode source ↗

use qualname in `TypeErrors` for functions by nicku12345 · Pull Request #4476 · RustPython/RustPython

Expand Up @@ -101,7 +101,9 @@ impl PyFunction { if nargs > nexpected_args { return Err(vm.new_type_error(format!( "{}() takes {} positional arguments but {} were given", &self.code.obj_name, nexpected_args, nargs self.qualname(), nexpected_args, nargs ))); } } Expand Down Expand Up @@ -132,25 +134,29 @@ impl PyFunction { if let Some(pos) = argpos(code.posonlyarg_count..total_args, &name) { let slot = &mut fastlocals[pos]; if slot.is_some() { return Err( vm.new_type_error(format!("Got multiple values for argument '{name}'")) ); return Err(vm.new_type_error(format!( "{}() got multiple values for argument '{}'", self.qualname(), name ))); } *slot = Some(value); } else if let Some(kwargs) = kwargs.as_ref() { kwargs.set_item(&name, value, vm)?; } else if argpos(0..code.posonlyarg_count, &name).is_some() { posonly_passed_as_kwarg.push(name); } else { return Err( vm.new_type_error(format!("got an unexpected keyword argument '{name}'")) ); return Err(vm.new_type_error(format!( "{}() got an unexpected keyword argument '{}'", self.qualname(), name ))); } } if !posonly_passed_as_kwarg.is_empty() { return Err(vm.new_type_error(format!( "{}() got some positional-only arguments passed as keyword arguments: '{}'", &self.code.obj_name, self.qualname(), posonly_passed_as_kwarg.into_iter().format(", "), ))); } Expand Down Expand Up @@ -207,7 +213,7 @@ impl PyFunction {
return Err(vm.new_type_error(format!( "{}() missing {} required positional argument{}: '{}{}{}'", &self.code.obj_name, self.qualname(), missing_args_len, if missing_args_len == 1 { "" } else { "s" }, missing.iter().join("', '"), Expand Down