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

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

Issue 1413213004: Move remaining helpers to BackendHelpers (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 1 month 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 24 matching lines...) Expand all
35 /// 35 ///
36 /// This flag is updated in [computeNeededConstants]. 36 /// This flag is updated in [computeNeededConstants].
37 bool outputContainsConstantList = false; 37 bool outputContainsConstantList = false;
38 38
39 final List<ClassElement> nativeClassesAndSubclasses = <ClassElement>[]; 39 final List<ClassElement> nativeClassesAndSubclasses = <ClassElement>[];
40 40
41 List<TypedefElement> typedefsNeededForReflection; 41 List<TypedefElement> typedefsNeededForReflection;
42 42
43 JavaScriptBackend get backend => compiler.backend; 43 JavaScriptBackend get backend => compiler.backend;
44 44
45 BackendHelpers get helpers => backend.helpers;
46
45 CoreClasses get coreClasses => compiler.coreClasses; 47 CoreClasses get coreClasses => compiler.coreClasses;
46 48
47 Collector(this.compiler, this.namer, this.rtiNeededClasses, this.emitter); 49 Collector(this.compiler, this.namer, this.rtiNeededClasses, this.emitter);
48 50
49 Set<ClassElement> computeInterceptorsReferencedFromConstants() { 51 Set<ClassElement> computeInterceptorsReferencedFromConstants() {
50 Set<ClassElement> classes = new Set<ClassElement>(); 52 Set<ClassElement> classes = new Set<ClassElement>();
51 JavaScriptConstantCompiler handler = backend.constants; 53 JavaScriptConstantCompiler handler = backend.constants;
52 List<ConstantValue> constants = handler.getConstantsForEmission(); 54 List<ConstantValue> constants = handler.getConstantsForEmission();
53 for (ConstantValue constant in constants) { 55 for (ConstantValue constant in constants) {
54 if (constant is InterceptorConstantValue) { 56 if (constant is InterceptorConstantValue) {
(...skipping 30 matching lines...) Expand all
85 87
86 // Add unneeded interceptors to the [unneededClasses] set. 88 // Add unneeded interceptors to the [unneededClasses] set.
87 for (ClassElement interceptor in backend.interceptedClasses) { 89 for (ClassElement interceptor in backend.interceptedClasses) {
88 if (!needed.contains(interceptor) 90 if (!needed.contains(interceptor)
89 && interceptor != coreClasses.objectClass) { 91 && interceptor != coreClasses.objectClass) {
90 unneededClasses.add(interceptor); 92 unneededClasses.add(interceptor);
91 } 93 }
92 } 94 }
93 95
94 // These classes are just helpers for the backend's type system. 96 // These classes are just helpers for the backend's type system.
95 unneededClasses.add(backend.jsMutableArrayClass); 97 unneededClasses.add(helpers.jsMutableArrayClass);
96 unneededClasses.add(backend.jsFixedArrayClass); 98 unneededClasses.add(helpers.jsFixedArrayClass);
97 unneededClasses.add(backend.jsExtendableArrayClass); 99 unneededClasses.add(helpers.jsExtendableArrayClass);
98 unneededClasses.add(backend.jsUInt32Class); 100 unneededClasses.add(helpers.jsUInt32Class);
99 unneededClasses.add(backend.jsUInt31Class); 101 unneededClasses.add(helpers.jsUInt31Class);
100 unneededClasses.add(backend.jsPositiveIntClass); 102 unneededClasses.add(helpers.jsPositiveIntClass);
101 103
102 return (ClassElement cls) => !unneededClasses.contains(cls); 104 return (ClassElement cls) => !unneededClasses.contains(cls);
103 } 105 }
104 106
105 /** 107 /**
106 * Compute all the constants that must be emitted. 108 * Compute all the constants that must be emitted.
107 */ 109 */
108 void computeNeededConstants() { 110 void computeNeededConstants() {
109 // Make sure we retain all metadata of all elements. This could add new 111 // Make sure we retain all metadata of all elements. This could add new
110 // constants to the handler. 112 // constants to the handler.
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 // neededClasses must only contain classes that have been resolved and 210 // neededClasses must only contain classes that have been resolved and
209 // codegen'd. The rtiNeededClasses may contain additional classes, but 211 // codegen'd. The rtiNeededClasses may contain additional classes, but
210 // these are thought to not have been instantiated, so we neeed to be able 212 // these are thought to not have been instantiated, so we neeed to be able
211 // to identify them later and make sure we only emit "empty shells" without 213 // to identify them later and make sure we only emit "empty shells" without
212 // fields, etc. 214 // fields, etc.
213 classesOnlyNeededForRti = rtiNeededClasses.difference(neededClasses); 215 classesOnlyNeededForRti = rtiNeededClasses.difference(neededClasses);
214 216
215 neededClasses.addAll(classesOnlyNeededForRti); 217 neededClasses.addAll(classesOnlyNeededForRti);
216 218
217 // TODO(18175, floitsch): remove once issue 18175 is fixed. 219 // TODO(18175, floitsch): remove once issue 18175 is fixed.
218 if (neededClasses.contains(backend.jsIntClass)) { 220 if (neededClasses.contains(helpers.jsIntClass)) {
219 neededClasses.add(coreClasses.intClass); 221 neededClasses.add(coreClasses.intClass);
220 } 222 }
221 if (neededClasses.contains(backend.jsDoubleClass)) { 223 if (neededClasses.contains(helpers.jsDoubleClass)) {
222 neededClasses.add(coreClasses.doubleClass); 224 neededClasses.add(coreClasses.doubleClass);
223 } 225 }
224 if (neededClasses.contains(backend.jsNumberClass)) { 226 if (neededClasses.contains(helpers.jsNumberClass)) {
225 neededClasses.add(coreClasses.numClass); 227 neededClasses.add(coreClasses.numClass);
226 } 228 }
227 if (neededClasses.contains(backend.jsStringClass)) { 229 if (neededClasses.contains(helpers.jsStringClass)) {
228 neededClasses.add(coreClasses.stringClass); 230 neededClasses.add(coreClasses.stringClass);
229 } 231 }
230 if (neededClasses.contains(backend.jsBoolClass)) { 232 if (neededClasses.contains(helpers.jsBoolClass)) {
231 neededClasses.add(coreClasses.boolClass); 233 neededClasses.add(coreClasses.boolClass);
232 } 234 }
233 if (neededClasses.contains(backend.jsArrayClass)) { 235 if (neededClasses.contains(helpers.jsArrayClass)) {
234 neededClasses.add(coreClasses.listClass); 236 neededClasses.add(coreClasses.listClass);
235 } 237 }
236 238
237 // 4. Finally, sort the classes. 239 // 4. Finally, sort the classes.
238 List<ClassElement> sortedClasses = Elements.sortedByPosition(neededClasses); 240 List<ClassElement> sortedClasses = Elements.sortedByPosition(neededClasses);
239 241
240 for (ClassElement element in sortedClasses) { 242 for (ClassElement element in sortedClasses) {
241 if (backend.isNativeOrExtendsNative(element) && 243 if (backend.isNativeOrExtendsNative(element) &&
242 !classesOnlyNeededForRti.contains(element)) { 244 !classesOnlyNeededForRti.contains(element)) {
243 // For now, native classes and related classes cannot be deferred. 245 // For now, native classes and related classes cannot be deferred.
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 } 308 }
307 309
308 void collect() { 310 void collect() {
309 computeNeededDeclarations(); 311 computeNeededDeclarations();
310 computeNeededConstants(); 312 computeNeededConstants();
311 computeNeededStatics(); 313 computeNeededStatics();
312 computeNeededStaticNonFinalFields(); 314 computeNeededStaticNonFinalFields();
313 computeNeededLibraries(); 315 computeNeededLibraries();
314 } 316 }
315 } 317 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698