@@ -85,6 +85,39 @@ def to_string(self):
85
85
def display_hint ():
86
86
return "string"
87
87
88
+ def _enumerate_array_elements (element_ptrs ):
89
+ for (i , element_ptr ) in enumerate (element_ptrs ):
90
+ key = "[{}]" .format (i )
91
+ element = element_ptr .dereference ()
92
+
93
+ try :
94
+ # rust-lang/rust#64343: passing deref expr to `str` allows
95
+ # catching exception on garbage pointer
96
+ str (element )
97
+ except RuntimeError :
98
+ yield key , "inaccessible"
99
+
100
+ break
101
+
102
+ yield key , element
103
+
104
+ class StdSliceProvider :
105
+ def __init__ (self , valobj ):
106
+ self .valobj = valobj
107
+ self .length = int (valobj ["length" ])
108
+ self .data_ptr = valobj ["data_ptr" ]
109
+
110
+ def to_string (self ):
111
+ return "{}(size={})" .format (self .valobj .type , self .length )
112
+
113
+ def children (self ):
114
+ return _enumerate_array_elements (
115
+ self .data_ptr + index for index in xrange (self .length )
116
+ )
117
+
118
+ @staticmethod
119
+ def display_hint ():
120
+ return "array"
88
121
89
122
class StdVecProvider :
90
123
def __init__ (self , valobj ):
@@ -96,19 +129,9 @@ def to_string(self):
96
129
return "Vec(size={})" .format (self .length )
97
130
98
131
def children (self ):
99
- saw_inaccessible = False
100
- for index in xrange (self .length ):
101
- element_ptr = self .data_ptr + index
102
- if saw_inaccessible :
103
- return
104
- try :
105
- # rust-lang/rust#64343: passing deref expr to `str` allows
106
- # catching exception on garbage pointer
107
- str (element_ptr .dereference ())
108
- yield "[{}]" .format (index ), element_ptr .dereference ()
109
- except RuntimeError :
110
- saw_inaccessible = True
111
- yield str (index ), "inaccessible"
132
+ return _enumerate_array_elements (
133
+ self .data_ptr + index for index in xrange (self .length )
134
+ )
112
135
113
136
@staticmethod
114
137
def display_hint ():
@@ -131,9 +154,9 @@ def to_string(self):
131
154
return "VecDeque(size={})" .format (self .size )
132
155
133
156
def children (self ):
134
- for index in xrange ( 0 , self . size ):
135
- value = (self .data_ptr + ((self .tail + index ) % self .cap )). dereference ( )
136
- yield "[{}]" . format ( index ), value
157
+ return _enumerate_array_elements (
158
+ (self .data_ptr + ((self .tail + index ) % self .cap )) for index in xrange ( self . size )
159
+ )
137
160
138
161
@staticmethod
139
162
def display_hint ():
0 commit comments