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

Side by Side Diff: pkg/compiler/lib/src/js_backend/backend.dart

Issue 2060183002: Serialize metadata (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Cleanup and fixes Created 4 years, 6 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) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 js_backend; 5 part of js_backend;
6 6
7 const VERBOSE_OPTIMIZER_HINTS = false; 7 const VERBOSE_OPTIMIZER_HINTS = false;
8 8
9 class JavaScriptItemCompilationContext extends ItemCompilationContext { 9 class JavaScriptItemCompilationContext extends ItemCompilationContext {
10 final Set<HInstruction> boundsChecked = new Set<HInstruction>(); 10 final Set<HInstruction> boundsChecked = new Set<HInstruction>();
(...skipping 2282 matching lines...) Expand 10 before | Expand all | Expand 10 after
2293 // necessary, but the backend relies on them being resolved. 2293 // necessary, but the backend relies on them being resolved.
2294 enqueuer.enqueueReflectiveStaticFields(_findStaticFieldTargets()); 2294 enqueuer.enqueueReflectiveStaticFields(_findStaticFieldTargets());
2295 } 2295 }
2296 2296
2297 if (mustPreserveNames) reporter.log('Preserving names.'); 2297 if (mustPreserveNames) reporter.log('Preserving names.');
2298 2298
2299 if (mustRetainMetadata) { 2299 if (mustRetainMetadata) {
2300 reporter.log('Retaining metadata.'); 2300 reporter.log('Retaining metadata.');
2301 2301
2302 compiler.libraryLoader.libraries.forEach(retainMetadataOf); 2302 compiler.libraryLoader.libraries.forEach(retainMetadataOf);
2303
2304 if (enqueuer.isResolutionQueue) { 2303 if (enqueuer.isResolutionQueue) {
2305 /// Register the constant value of [metadata] as live in resolution. 2304 /// Register the constant value of [metadata] as live in resolution.
2306 void registerMetadataConstant(MetadataAnnotation metadata) { 2305 void registerMetadataConstant(MetadataAnnotation metadata) {
2307 ConstantValue constant = 2306 ConstantValue constant =
2308 constants.getConstantValueForMetadata(metadata); 2307 constants.getConstantValueForMetadata(metadata);
2309 Dependency dependency = 2308 Dependency dependency =
2310 new Dependency(constant, metadata.annotatedElement); 2309 new Dependency(constant, metadata.annotatedElement);
2311 metadataConstants.add(dependency); 2310 metadataConstants.add(dependency);
2312 registerCompileTimeConstant(dependency.constant, 2311 registerCompileTimeConstant(dependency.constant,
2313 new EagerRegistry('EagerRegistry for ${dependency}', enqueuer)); 2312 new EagerRegistry('EagerRegistry for ${dependency}', enqueuer));
(...skipping 29 matching lines...) Expand all
2343 if (element.enclosingClass != null) { 2342 if (element.enclosingClass != null) {
2344 processElementMetadata(element.enclosingClass); 2343 processElementMetadata(element.enclosingClass);
2345 } else { 2344 } else {
2346 processLibraryMetadata(element.library); 2345 processLibraryMetadata(element.library);
2347 } 2346 }
2348 } 2347 }
2349 } 2348 }
2350 2349
2351 // TODO(johnniwinther): We should have access to all recently processed 2350 // TODO(johnniwinther): We should have access to all recently processed
2352 // elements and process these instead. 2351 // elements and process these instead.
2353 compiler.enqueuer.resolution.processedElements.forEach(processElementMetadat a); 2352 compiler.enqueuer.resolution.processedElements
2353 .forEach(processElementMetadata);
2354 } 2354 }
2355 2355
2356 void onQueueClosed() { 2356 void onQueueClosed() {
2357 lookupMapAnalysis.onQueueClosed(); 2357 lookupMapAnalysis.onQueueClosed();
2358 jsInteropAnalysis.onQueueClosed(); 2358 jsInteropAnalysis.onQueueClosed();
2359 } 2359 }
2360 2360
2361 void onCodegenStart() { 2361 void onCodegenStart() {
2362 lookupMapAnalysis.onCodegenStart(); 2362 lookupMapAnalysis.onCodegenStart();
2363 } 2363 }
(...skipping 704 matching lines...) Expand 10 before | Expand all | Expand 10 after
3068 return transformed; 3068 return transformed;
3069 } 3069 }
3070 } 3070 }
3071 3071
3072 /// Records that [constant] is used by the element behind [registry]. 3072 /// Records that [constant] is used by the element behind [registry].
3073 class Dependency { 3073 class Dependency {
3074 final ConstantValue constant; 3074 final ConstantValue constant;
3075 final Element annotatedElement; 3075 final Element annotatedElement;
3076 3076
3077 const Dependency(this.constant, this.annotatedElement); 3077 const Dependency(this.constant, this.annotatedElement);
3078
3079 String toString() => '$annotatedElement:${constant.toStructuredText()}';
3078 } 3080 }
3079 3081
3080 class JavaScriptImpactStrategy extends ImpactStrategy { 3082 class JavaScriptImpactStrategy extends ImpactStrategy {
3081 final Resolution resolution; 3083 final Resolution resolution;
3082 final DumpInfoTask dumpInfoTask; 3084 final DumpInfoTask dumpInfoTask;
3083 final bool supportDeferredLoad; 3085 final bool supportDeferredLoad;
3084 final bool supportDumpInfo; 3086 final bool supportDumpInfo;
3085 final bool supportSerialization; 3087 final bool supportSerialization;
3086 3088
3087 JavaScriptImpactStrategy(this.resolution, this.dumpInfoTask, 3089 JavaScriptImpactStrategy(this.resolution, this.dumpInfoTask,
(...skipping 25 matching lines...) Expand all
3113 3115
3114 @override 3116 @override
3115 void onImpactUsed(ImpactUseCase impactUse) { 3117 void onImpactUsed(ImpactUseCase impactUse) {
3116 if (impactUse == DeferredLoadTask.IMPACT_USE && !supportSerialization) { 3118 if (impactUse == DeferredLoadTask.IMPACT_USE && !supportSerialization) {
3117 // TODO(johnniwinther): Allow emptying when serialization has been 3119 // TODO(johnniwinther): Allow emptying when serialization has been
3118 // performed. 3120 // performed.
3119 resolution.emptyCache(); 3121 resolution.emptyCache();
3120 } 3122 }
3121 } 3123 }
3122 } 3124 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698