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

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

Issue 1892093003: Support deserialized compilation of the empty program. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments Created 4 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) 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 493 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 504
505 SourceInformationStrategy sourceInformationStrategy; 505 SourceInformationStrategy sourceInformationStrategy;
506 506
507 JavaScriptBackendSerialization serialization; 507 JavaScriptBackendSerialization serialization;
508 508
509 final NativeData nativeData = new NativeData(); 509 final NativeData nativeData = new NativeData();
510 510
511 final BackendHelpers helpers; 511 final BackendHelpers helpers;
512 final BackendImpacts impacts; 512 final BackendImpacts impacts;
513 513
514 final JSFrontendAccess frontend;
515
514 JavaScriptBackend(Compiler compiler, 516 JavaScriptBackend(Compiler compiler,
515 {bool generateSourceMap: true, 517 {bool generateSourceMap: true,
516 bool useStartupEmitter: false, 518 bool useStartupEmitter: false,
517 bool useNewSourceInfo: false}) 519 bool useNewSourceInfo: false})
518 : namer = determineNamer(compiler), 520 : namer = determineNamer(compiler),
519 oneShotInterceptors = new Map<jsAst.Name, Selector>(), 521 oneShotInterceptors = new Map<jsAst.Name, Selector>(),
520 interceptedElements = new Map<String, Set<Element>>(), 522 interceptedElements = new Map<String, Set<Element>>(),
521 rti = new _RuntimeTypes(compiler), 523 rti = new _RuntimeTypes(compiler),
522 rtiEncoder = new _RuntimeTypesEncoder(compiler), 524 rtiEncoder = new _RuntimeTypesEncoder(compiler),
523 specializedGetInterceptors = new Map<jsAst.Name, Set<ClassElement>>(), 525 specializedGetInterceptors = new Map<jsAst.Name, Set<ClassElement>>(),
524 annotations = new Annotations(compiler), 526 annotations = new Annotations(compiler),
525 this.sourceInformationStrategy = generateSourceMap 527 this.sourceInformationStrategy = generateSourceMap
526 ? (useNewSourceInfo 528 ? (useNewSourceInfo
527 ? new PositionSourceInformationStrategy() 529 ? new PositionSourceInformationStrategy()
528 : const StartEndSourceInformationStrategy()) 530 : const StartEndSourceInformationStrategy())
529 : const JavaScriptSourceInformationStrategy(), 531 : const JavaScriptSourceInformationStrategy(),
530 helpers = new BackendHelpers(compiler), 532 helpers = new BackendHelpers(compiler),
531 impacts = new BackendImpacts(compiler), 533 impacts = new BackendImpacts(compiler),
534 frontend = new JSFrontendAccess(compiler),
532 super(compiler) { 535 super(compiler) {
533 emitter = new CodeEmitterTask( 536 emitter = new CodeEmitterTask(
534 compiler, namer, generateSourceMap, useStartupEmitter); 537 compiler, namer, generateSourceMap, useStartupEmitter);
535 typeVariableHandler = new TypeVariableHandler(compiler); 538 typeVariableHandler = new TypeVariableHandler(compiler);
536 customElementsAnalysis = new CustomElementsAnalysis(this); 539 customElementsAnalysis = new CustomElementsAnalysis(this);
537 lookupMapAnalysis = new LookupMapAnalysis(this, reporter); 540 lookupMapAnalysis = new LookupMapAnalysis(this, reporter);
538 jsInteropAnalysis = new JsInteropAnalysis(this); 541 jsInteropAnalysis = new JsInteropAnalysis(this);
539 542
540 noSuchMethodRegistry = new NoSuchMethodRegistry(this); 543 noSuchMethodRegistry = new NoSuchMethodRegistry(this);
541 constantCompilerTask = new JavaScriptConstantTask(compiler); 544 constantCompilerTask = new JavaScriptConstantTask(compiler);
(...skipping 1926 matching lines...) Expand 10 before | Expand all | Expand 10 after
2468 {bool supportDeferredLoad: true, 2471 {bool supportDeferredLoad: true,
2469 bool supportDumpInfo: true, 2472 bool supportDumpInfo: true,
2470 bool supportSerialization: true}) { 2473 bool supportSerialization: true}) {
2471 return new JavaScriptImpactStrategy(resolution, compiler.dumpInfoTask, 2474 return new JavaScriptImpactStrategy(resolution, compiler.dumpInfoTask,
2472 supportDeferredLoad: supportDeferredLoad, 2475 supportDeferredLoad: supportDeferredLoad,
2473 supportDumpInfo: supportDumpInfo, 2476 supportDumpInfo: supportDumpInfo,
2474 supportSerialization: supportSerialization); 2477 supportSerialization: supportSerialization);
2475 } 2478 }
2476 } 2479 }
2477 2480
2481 class JSFrontendAccess implements Frontend {
2482 final Compiler compiler;
2483
2484 JSFrontendAccess(this.compiler);
2485
2486 Resolution get resolution => compiler.resolution;
2487
2488 @override
2489 ResolutionImpact getResolutionImpact(Element element) {
2490 return resolution.getResolutionImpact(element);
2491 }
2492
2493 @override
2494 ResolvedAst getResolvedAst(Element element) {
2495 if (element is SynthesizedCallMethodElementX) {
2496 return element.resolvedAst;
2497 } else if (element is ConstructorBodyElementX) {
2498 return element.resolvedAst;
2499 } else {
2500 assert(invariant(element, resolution.hasResolvedAst(element.declaration),
2501 message: 'No ResolvedAst for $element'));
2502 return resolution.getResolvedAst(element.declaration);
2503 }
2504 }
2505 }
2506
2478 /// Handling of special annotations for tests. 2507 /// Handling of special annotations for tests.
2479 class Annotations { 2508 class Annotations {
2480 static final Uri PACKAGE_EXPECT = 2509 static final Uri PACKAGE_EXPECT =
2481 new Uri(scheme: 'package', path: 'expect/expect.dart'); 2510 new Uri(scheme: 'package', path: 'expect/expect.dart');
2482 2511
2483 final Compiler compiler; 2512 final Compiler compiler;
2484 2513
2485 ClassElement expectNoInlineClass; 2514 ClassElement expectNoInlineClass;
2486 ClassElement expectTrustTypeAnnotationsClass; 2515 ClassElement expectTrustTypeAnnotationsClass;
2487 ClassElement expectAssumeDynamicClass; 2516 ClassElement expectAssumeDynamicClass;
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after
2976 3005
2977 @override 3006 @override
2978 void onImpactUsed(ImpactUseCase impactUse) { 3007 void onImpactUsed(ImpactUseCase impactUse) {
2979 if (impactUse == DeferredLoadTask.IMPACT_USE && !supportSerialization) { 3008 if (impactUse == DeferredLoadTask.IMPACT_USE && !supportSerialization) {
2980 // TODO(johnniwinther): Allow emptying when serialization has been 3009 // TODO(johnniwinther): Allow emptying when serialization has been
2981 // performed. 3010 // performed.
2982 resolution.emptyCache(); 3011 resolution.emptyCache();
2983 } 3012 }
2984 } 3013 }
2985 } 3014 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698