| 1047 | |
| 1048 | #[pyfunction] |
| 1049 | fn round(RoundArgs { number, ndigits }: RoundArgs, vm: &VirtualMachine) -> PyResult { |
| 1050 | let meth = vm |
| 1051 | .get_special_method(&number, identifier!(vm, __round__))? |
| 1052 | .ok_or_else(|| { |
| 1053 | vm.new_type_error(format!( |
| 1054 | "type {} doesn't define __round__", |
| 1055 | number.class().name() |
| 1056 | )) |
| 1057 | })?; |
| 1058 | match ndigits.flatten() { |
| 1059 | Some(obj) => { |
| 1060 | let ndigits = obj.try_index(vm)?; |
| 1061 | meth.invoke((ndigits,), vm) |
| 1062 | } |
| 1063 | None => { |
| 1064 | // without a parameter, the result type is coerced to int |
| 1065 | meth.invoke((), vm) |
| 1066 | } |
| 1067 | } |
| 1068 | } |
| 1069 | |
| 1070 | #[pyfunction] |
| 1071 | fn setattr( |