| 771 | |
| 772 | #[pymethod] |
| 773 | fn groupdict( |
| 774 | &self, |
| 775 | default: OptionalArg<PyObjectRef>, |
| 776 | vm: &VirtualMachine, |
| 777 | ) -> PyResult<PyDictRef> { |
| 778 | let default = default.unwrap_or_else(|| vm.ctx.none()); |
| 779 | |
| 780 | with_sre_str!(self.pattern, &self.string, vm, |str_drive| { |
| 781 | let dict = vm.ctx.new_dict(); |
| 782 | |
| 783 | for (key, index) in self.pattern.groupindex.clone() { |
| 784 | let value = self |
| 785 | .get_index(index, vm) |
| 786 | .and_then(|x| self.get_slice(x, str_drive, vm)) |
| 787 | .map(|x| x.to_pyobject(vm)) |
| 788 | .unwrap_or_else(|| default.clone()); |
| 789 | dict.set_item(&*key, value, vm)?; |
| 790 | } |
| 791 | Ok(dict) |
| 792 | }) |
| 793 | } |
| 794 | |
| 795 | fn get_index(&self, group: PyObjectRef, vm: &VirtualMachine) -> Option<usize> { |
| 796 | let i = if let Ok(i) = group.try_index(vm) { |