@@ -81,42 +81,6 @@ void KernelTokenPositionCollector::RecordTokenPosition(TokenPosition position) {
81
81
}
82
82
}
83
83
84
- static int LowestFirst (const intptr_t * a, const intptr_t * b) {
85
- return *a - *b;
86
- }
87
-
88
- /* *
89
- * If index exists as sublist in list, sort the sublist from lowest to highest,
90
- * then copy it, as Smis and without duplicates,
91
- * to a new Array in Heap::kOld which is returned.
92
- * Note that the source list is both sorted and de-duplicated as well, but will
93
- * possibly contain duplicate and unsorted data at the end.
94
- * Otherwise (when sublist doesn't exist in list) return new empty array.
95
- */
96
- static ArrayPtr AsSortedDuplicateFreeArray (GrowableArray<intptr_t >* source) {
97
- intptr_t size = source->length ();
98
- if (size == 0 ) {
99
- return Object::empty_array ().ptr ();
100
- }
101
-
102
- source->Sort (LowestFirst);
103
-
104
- intptr_t last = 0 ;
105
- for (intptr_t current = 1 ; current < size; ++current) {
106
- if (source->At (last) != source->At (current)) {
107
- (*source)[++last] = source->At (current);
108
- }
109
- }
110
- Array& array_object = Array::Handle ();
111
- array_object = Array::New (last + 1 , Heap::kOld );
112
- Smi& smi_value = Smi::Handle ();
113
- for (intptr_t i = 0 ; i <= last; ++i) {
114
- smi_value = Smi::New (source->At (i));
115
- array_object.SetAt (i, smi_value);
116
- }
117
- return array_object.ptr ();
118
- }
119
-
120
84
static void CollectKernelLibraryTokenPositions (
121
85
const TypedDataView& kernel_data,
122
86
const Script& script,
@@ -137,20 +101,18 @@ static void CollectKernelLibraryTokenPositions(
137
101
token_position_collector.CollectTokenPositions (kernel_offset);
138
102
}
139
103
140
- } // namespace kernel
141
-
142
- void Script::CollectTokenPositionsFor () const {
104
+ void CollectScriptTokenPositionsFromKernel (
105
+ const Script& interesting_script,
106
+ GrowableArray< intptr_t >* token_positions) {
143
107
Thread* thread = Thread::Current ();
144
108
Zone* zone = thread->zone ();
145
109
146
110
const auto & kernel_info =
147
- KernelProgramInfo::Handle (zone, kernel_program_info ());
111
+ KernelProgramInfo::Handle (zone, interesting_script. kernel_program_info ());
148
112
149
- kernel:: TranslationHelper helper (thread);
113
+ TranslationHelper helper (thread);
150
114
helper.InitFromKernelProgramInfo (kernel_info);
151
115
152
- GrowableArray<intptr_t > token_positions (10 );
153
-
154
116
auto isolate_group = thread->isolate_group ();
155
117
const GrowableObjectArray& libs = GrowableObjectArray::Handle (
156
118
zone, isolate_group->object_store ()->libraries ());
@@ -159,8 +121,6 @@ void Script::CollectTokenPositionsFor() const {
159
121
Script& entry_script = Script::Handle (zone);
160
122
auto & data = TypedDataView::Handle (zone);
161
123
162
- auto & interesting_script = *this ;
163
-
164
124
auto & temp_array = Array::Handle (zone);
165
125
auto & temp_field = Field::Handle (zone);
166
126
auto & temp_function = Function::Handle (zone);
@@ -174,8 +134,8 @@ void Script::CollectTokenPositionsFor() const {
174
134
if (entry.IsClass ()) {
175
135
const Class& klass = Class::Cast (entry);
176
136
if (klass.script () == interesting_script.ptr ()) {
177
- token_positions. Add (klass.token_pos ().Serialize ());
178
- token_positions. Add (klass.end_token_pos ().Serialize ());
137
+ token_positions-> Add (klass.token_pos ().Serialize ());
138
+ token_positions-> Add (klass.end_token_pos ().Serialize ());
179
139
}
180
140
if (klass.is_finalized ()) {
181
141
temp_array = klass.fields ();
@@ -193,7 +153,7 @@ void Script::CollectTokenPositionsFor() const {
193
153
CollectKernelLibraryTokenPositions (data, interesting_script,
194
154
temp_field.kernel_offset (),
195
155
temp_field.KernelLibraryOffset (),
196
- zone, &helper, & token_positions);
156
+ zone, &helper, token_positions);
197
157
}
198
158
temp_array = klass.current_functions ();
199
159
for (intptr_t i = 0 ; i < temp_array.Length (); ++i) {
@@ -206,7 +166,7 @@ void Script::CollectTokenPositionsFor() const {
206
166
CollectKernelLibraryTokenPositions (
207
167
data, interesting_script, temp_function.kernel_offset (),
208
168
temp_function.KernelLibraryOffset (), zone, &helper,
209
- & token_positions);
169
+ token_positions);
210
170
}
211
171
} else {
212
172
// Class isn't finalized yet: read the data attached to it.
@@ -223,7 +183,7 @@ void Script::CollectTokenPositionsFor() const {
223
183
}
224
184
CollectKernelLibraryTokenPositions (
225
185
data, interesting_script, class_offset, library_kernel_offset,
226
- zone, &helper, & token_positions);
186
+ zone, &helper, token_positions);
227
187
}
228
188
} else if (entry.IsFunction ()) {
229
189
temp_function ^= entry.ptr ();
@@ -235,7 +195,7 @@ void Script::CollectTokenPositionsFor() const {
235
195
CollectKernelLibraryTokenPositions (data, interesting_script,
236
196
temp_function.kernel_offset (),
237
197
temp_function.KernelLibraryOffset (),
238
- zone, &helper, & token_positions);
198
+ zone, &helper, token_positions);
239
199
} else if (entry.IsField ()) {
240
200
const Field& field = Field::Cast (entry);
241
201
if (field.kernel_offset () <= 0 ) {
@@ -249,17 +209,14 @@ void Script::CollectTokenPositionsFor() const {
249
209
data = field.KernelLibrary ();
250
210
CollectKernelLibraryTokenPositions (
251
211
data, interesting_script, field.kernel_offset (),
252
- field.KernelLibraryOffset (), zone, &helper, & token_positions);
212
+ field.KernelLibraryOffset (), zone, &helper, token_positions);
253
213
}
254
214
}
255
215
}
256
-
257
- Script& script = Script::Handle (zone, interesting_script.ptr ());
258
- Array& array_object = Array::Handle (zone);
259
- array_object = kernel::AsSortedDuplicateFreeArray (&token_positions);
260
- script.set_debug_positions (array_object);
261
216
}
262
217
218
+ } // namespace kernel
219
+
263
220
#if !defined(PRODUCT) && !defined(DART_PRECOMPILED_RUNTIME)
264
221
ArrayPtr Script::CollectConstConstructorCoverageFrom () const {
265
222
Thread* thread = Thread::Current ();
0 commit comments