| 394 | type Args = StrArgs; |
| 395 | |
| 396 | fn slot_new(cls: PyTypeRef, func_args: FuncArgs, vm: &VirtualMachine) -> PyResult { |
| 397 | // Optimization: return exact str as-is (only when no encoding/errors provided) |
| 398 | if cls.is(vm.ctx.types.str_type) |
| 399 | && func_args.args.len() == 1 |
| 400 | && func_args.kwargs.is_empty() |
| 401 | && func_args.args[0].class().is(vm.ctx.types.str_type) |
| 402 | { |
| 403 | return Ok(func_args.args[0].clone()); |
| 404 | } |
| 405 | |
| 406 | let args: Self::Args = func_args.bind(vm)?; |
| 407 | let payload = Self::py_new(&cls, args, vm)?; |
| 408 | payload.into_ref_with_type(vm, cls).map(Into::into) |
| 409 | } |
| 410 | |
| 411 | fn py_new(_cls: &Py<PyType>, args: Self::Args, vm: &VirtualMachine) -> PyResult<Self> { |
| 412 | match args.object { |