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

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: 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 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>>(),
(...skipping 14 matching lines...) Expand all
538 jsInteropAnalysis = new JsInteropAnalysis(this); 540 jsInteropAnalysis = new JsInteropAnalysis(this);
539 541
540 noSuchMethodRegistry = new NoSuchMethodRegistry(this); 542 noSuchMethodRegistry = new NoSuchMethodRegistry(this);
541 constantCompilerTask = new JavaScriptConstantTask(compiler); 543 constantCompilerTask = new JavaScriptConstantTask(compiler);
542 impactTransformer = new JavaScriptImpactTransformer(this); 544 impactTransformer = new JavaScriptImpactTransformer(this);
543 patchResolverTask = new PatchResolverTask(compiler); 545 patchResolverTask = new PatchResolverTask(compiler);
544 functionCompiler = compiler.options.useCpsIr 546 functionCompiler = compiler.options.useCpsIr
545 ? new CpsFunctionCompiler(compiler, this, sourceInformationStrategy) 547 ? new CpsFunctionCompiler(compiler, this, sourceInformationStrategy)
546 : new SsaFunctionCompiler(this, sourceInformationStrategy); 548 : new SsaFunctionCompiler(this, sourceInformationStrategy);
547 serialization = new JavaScriptBackendSerialization(this); 549 serialization = new JavaScriptBackendSerialization(this);
550 _frontend = new JSFrontendAccess(compiler);
Siggi Cherem (dart-lang) 2016/04/15 15:42:14 seems it should be possible to make this an initia
Johnni Winther 2016/04/18 08:05:43 Done.
548 } 551 }
549 552
550 ConstantSystem get constantSystem => constants.constantSystem; 553 ConstantSystem get constantSystem => constants.constantSystem;
551 554
552 DiagnosticReporter get reporter => compiler.reporter; 555 DiagnosticReporter get reporter => compiler.reporter;
553 556
554 CoreClasses get coreClasses => compiler.coreClasses; 557 CoreClasses get coreClasses => compiler.coreClasses;
555 558
556 CoreTypes get coreTypes => compiler.coreTypes; 559 CoreTypes get coreTypes => compiler.coreTypes;
557 560
(...skipping 1908 matching lines...) Expand 10 before | Expand all | Expand 10 after
2466 @override 2469 @override
2467 ImpactStrategy createImpactStrategy( 2470 ImpactStrategy createImpactStrategy(
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 }
2479
2480 @override
2481 Frontend get frontend => _frontend;
2482 }
2483
2484 class JSFrontendAccess implements Frontend {
2485 final Compiler compiler;
2486
2487 JSFrontendAccess(this.compiler);
2488
2489 Resolution get resolution => compiler.resolution;
2490
2491 @override
2492 ResolutionImpact getResolutionImpact(Element element) {
2493 return resolution.getResolutionImpact(element);
2494 }
2495
2496 @override
2497 ResolvedAst getResolvedAst(Element element) {
2498 if (element is SynthesizedCallMethodElementX) {
2499 return element.resolvedAst;
2500 } else if (element is ConstructorBodyElementX) {
2501 return element.resolvedAst;
2502 } else {
2503 assert(invariant(element, resolution.hasResolvedAst(element.declaration),
2504 message: 'No ResolvedAst for $element'));
2505 return resolution.getResolvedAst(element.declaration);
2506 }
2507 }
2476 } 2508 }
2477 2509
2478 /// Handling of special annotations for tests. 2510 /// Handling of special annotations for tests.
2479 class Annotations { 2511 class Annotations {
2480 static final Uri PACKAGE_EXPECT = 2512 static final Uri PACKAGE_EXPECT =
2481 new Uri(scheme: 'package', path: 'expect/expect.dart'); 2513 new Uri(scheme: 'package', path: 'expect/expect.dart');
2482 2514
2483 final Compiler compiler; 2515 final Compiler compiler;
2484 2516
2485 ClassElement expectNoInlineClass; 2517 ClassElement expectNoInlineClass;
(...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after
2976 3008
2977 @override 3009 @override
2978 void onImpactUsed(ImpactUseCase impactUse) { 3010 void onImpactUsed(ImpactUseCase impactUse) {
2979 if (impactUse == DeferredLoadTask.IMPACT_USE && !supportSerialization) { 3011 if (impactUse == DeferredLoadTask.IMPACT_USE && !supportSerialization) {
2980 // TODO(johnniwinther): Allow emptying when serialization has been 3012 // TODO(johnniwinther): Allow emptying when serialization has been
2981 // performed. 3013 // performed.
2982 resolution.emptyCache(); 3014 resolution.emptyCache();
2983 } 3015 }
2984 } 3016 }
2985 } 3017 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698