Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Side by Side Diff: pkg/compiler/lib/src/js_emitter/program_builder/collector.dart

Issue 2842653003: Include superclasses of classes only needed for rti (Closed)
Patch Set: Update status file Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart2js.js_emitter.program_builder; 5 part of dart2js.js_emitter.program_builder;
6 6
7 /** 7 /**
8 * Generates the code for all used classes in the program. Static fields (even 8 * Generates the code for all used classes in the program. Static fields (even
9 * in classes) are ignored, since they can be treated as non-class elements. 9 * in classes) are ignored, since they can be treated as non-class elements.
10 * 10 *
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 .toSet(); 233 .toSet();
234 neededClasses.addAll(mixinClasses); 234 neededClasses.addAll(mixinClasses);
235 235
236 // 3. Find all classes needed for rti. 236 // 3. Find all classes needed for rti.
237 // It is important that this is the penultimate step, at this point, 237 // It is important that this is the penultimate step, at this point,
238 // neededClasses must only contain classes that have been resolved and 238 // neededClasses must only contain classes that have been resolved and
239 // codegen'd. The rtiNeededClasses may contain additional classes, but 239 // codegen'd. The rtiNeededClasses may contain additional classes, but
240 // these are thought to not have been instantiated, so we neeed to be able 240 // these are thought to not have been instantiated, so we neeed to be able
241 // to identify them later and make sure we only emit "empty shells" without 241 // to identify them later and make sure we only emit "empty shells" without
242 // fields, etc. 242 // fields, etc.
243 classesOnlyNeededForRti = _rtiNeededClasses.difference(neededClasses); 243 classesOnlyNeededForRti = new Set<ClassElement>();
244 for (ClassElement cls in _rtiNeededClasses) {
245 while (cls != null && !neededClasses.contains(cls)) {
246 if (!classesOnlyNeededForRti.add(cls)) break;
247 cls = cls.superclass;
248 }
249 }
244 250
245 neededClasses.addAll(classesOnlyNeededForRti); 251 neededClasses.addAll(classesOnlyNeededForRti);
246 252
247 // TODO(18175, floitsch): remove once issue 18175 is fixed. 253 // TODO(18175, floitsch): remove once issue 18175 is fixed.
248 if (neededClasses.contains(_commonElements.jsIntClass)) { 254 if (neededClasses.contains(_commonElements.jsIntClass)) {
249 neededClasses.add(_commonElements.intClass); 255 neededClasses.add(_commonElements.intClass);
250 } 256 }
251 if (neededClasses.contains(_commonElements.jsDoubleClass)) { 257 if (neededClasses.contains(_commonElements.jsDoubleClass)) {
252 neededClasses.add(_commonElements.doubleClass); 258 neededClasses.add(_commonElements.doubleClass);
253 } 259 }
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 } 348 }
343 349
344 void collect() { 350 void collect() {
345 computeNeededDeclarations(); 351 computeNeededDeclarations();
346 computeNeededConstants(); 352 computeNeededConstants();
347 computeNeededStatics(); 353 computeNeededStatics();
348 computeNeededStaticNonFinalFields(); 354 computeNeededStaticNonFinalFields();
349 computeNeededLibraries(); 355 computeNeededLibraries();
350 } 356 }
351 } 357 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/model.dart ('k') | pkg/compiler/lib/src/js_emitter/program_builder/program_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698