|
1 | 1 | use super::super::pyobject::{ |
2 | 2 | PyContext, PyFuncArgs, PyObject, PyObjectPayload, PyObjectRef, PyResult, TypeProtocol, |
3 | 3 | }; |
4 | | -use super::super::vm::VirtualMachine; |
| 4 | +use super::super::vm::{ReprGuard, VirtualMachine}; |
5 | 5 | use super::objiter; |
6 | 6 | use super::objstr; |
7 | 7 | use super::objtype; |
@@ -158,16 +158,21 @@ fn dict_len(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { |
158 | 158 | fn dict_repr(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { |
159 | 159 | arg_check!(vm, args, required = [(dict_obj, Some(vm.ctx.dict_type()))]); |
160 | 160 |
|
161 | | - let elements = get_key_value_pairs(dict_obj); |
162 | | - let mut str_parts = vec![]; |
163 | | - for (key, value) in elements { |
164 | | - let s = vm.to_repr(&value)?; |
165 | | - let key_str = objstr::get_value(&key); |
166 | | - let value_str = objstr::get_value(&s); |
167 | | - str_parts.push(format!("{}: {}", key_str, value_str)); |
168 | | - } |
| 161 | + let s = if let Some(_guard) = ReprGuard::enter(dict_obj) { |
| 162 | + let elements = get_key_value_pairs(dict_obj); |
| 163 | + let mut str_parts = vec![]; |
| 164 | + for (key, value) in elements { |
| 165 | + let key_repr = vm.to_repr(&key)?; |
| 166 | + let value_repr = vm.to_repr(&value)?; |
| 167 | + let key_str = objstr::get_value(&key_repr); |
| 168 | + let value_str = objstr::get_value(&value_repr); |
| 169 | + str_parts.push(format!("{}: {}", key_str, value_str)); |
| 170 | + } |
169 | 171 |
|
170 | | - let s = format!("{{{}}}", str_parts.join(", ")); |
| 172 | + format!("{{{}}}", str_parts.join(", ")) |
| 173 | + } else { |
| 174 | + "{...}".to_string() |
| 175 | + }; |
171 | 176 | Ok(vm.new_str(s)) |
172 | 177 | } |
173 | 178 |
|
|
0 commit comments