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

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

Issue 1617083002: Base JavaScript code position computation on JavaScript tracer. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 4 years, 11 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 484 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 NoSuchMethodRegistry noSuchMethodRegistry; 495 NoSuchMethodRegistry noSuchMethodRegistry;
496 496
497 JavaScriptConstantTask constantCompilerTask; 497 JavaScriptConstantTask constantCompilerTask;
498 498
499 JavaScriptImpactTransformer impactTransformer; 499 JavaScriptImpactTransformer impactTransformer;
500 500
501 PatchResolverTask patchResolverTask; 501 PatchResolverTask patchResolverTask;
502 502
503 bool enabledNoSuchMethod = false; 503 bool enabledNoSuchMethod = false;
504 504
505 final SourceInformationStrategy sourceInformationStrategy; 505 SourceInformationStrategy sourceInformationStrategy;
506 506
507 final BackendHelpers helpers; 507 final BackendHelpers helpers;
508 final BackendImpacts impacts; 508 final BackendImpacts impacts;
509 509
510 JavaScriptBackend(Compiler compiler, 510 JavaScriptBackend(Compiler compiler,
511 {bool generateSourceMap: true, 511 {bool generateSourceMap: true,
512 bool useStartupEmitter: false}) 512 bool useStartupEmitter: false})
513 : namer = determineNamer(compiler), 513 : namer = determineNamer(compiler),
514 oneShotInterceptors = new Map<jsAst.Name, Selector>(), 514 oneShotInterceptors = new Map<jsAst.Name, Selector>(),
515 interceptedElements = new Map<String, Set<Element>>(), 515 interceptedElements = new Map<String, Set<Element>>(),
516 rti = new _RuntimeTypes(compiler), 516 rti = new _RuntimeTypes(compiler),
517 rtiEncoder = new _RuntimeTypesEncoder(compiler), 517 rtiEncoder = new _RuntimeTypesEncoder(compiler),
518 specializedGetInterceptors = new Map<jsAst.Name, Set<ClassElement>>(), 518 specializedGetInterceptors = new Map<jsAst.Name, Set<ClassElement>>(),
519 annotations = new Annotations(compiler), 519 annotations = new Annotations(compiler),
520 this.sourceInformationStrategy = 520 this.sourceInformationStrategy =
521 generateSourceMap 521 generateSourceMap
522 ? (useNewSourceInfo 522 ? (useNewSourceInfo
523 ? const PositionSourceInformationStrategy() 523 ? new PositionSourceInformationStrategy()
524 : const StartEndSourceInformationStrategy()) 524 : const StartEndSourceInformationStrategy())
525 : const JavaScriptSourceInformationStrategy(), 525 : const JavaScriptSourceInformationStrategy(),
526 helpers = new BackendHelpers(compiler), 526 helpers = new BackendHelpers(compiler),
527 impacts = new BackendImpacts(compiler), 527 impacts = new BackendImpacts(compiler),
528 super(compiler) { 528 super(compiler) {
529 emitter = new CodeEmitterTask( 529 emitter = new CodeEmitterTask(
530 compiler, namer, generateSourceMap, useStartupEmitter); 530 compiler, namer, generateSourceMap, useStartupEmitter);
531 typeVariableHandler = new TypeVariableHandler(compiler); 531 typeVariableHandler = new TypeVariableHandler(compiler);
532 customElementsAnalysis = new CustomElementsAnalysis(this); 532 customElementsAnalysis = new CustomElementsAnalysis(this);
533 lookupMapAnalysis = new LookupMapAnalysis(this, reporter); 533 lookupMapAnalysis = new LookupMapAnalysis(this, reporter);
(...skipping 1089 matching lines...) Expand 10 before | Expand all | Expand 10 after
1623 // If the constant-handler was not able to produce a result we have to 1623 // If the constant-handler was not able to produce a result we have to
1624 // go through the builder (below) to generate the lazy initializer for 1624 // go through the builder (below) to generate the lazy initializer for
1625 // the static variable. 1625 // the static variable.
1626 // We also need to register the use of the cyclic-error helper. 1626 // We also need to register the use of the cyclic-error helper.
1627 compiler.enqueuer.codegen.registerStaticUse( 1627 compiler.enqueuer.codegen.registerStaticUse(
1628 new StaticUse.staticInvoke( 1628 new StaticUse.staticInvoke(
1629 helpers.cyclicThrowHelper, CallStructure.ONE_ARG)); 1629 helpers.cyclicThrowHelper, CallStructure.ONE_ARG));
1630 } 1630 }
1631 } 1631 }
1632 1632
1633 generatedCode[element] = functionCompiler.compile(work); 1633 jsAst.Fun function = functionCompiler.compile(work);
1634 if (function.sourceInformation == null) {
1635 function = function.withSourceInformation(
1636 sourceInformationStrategy.buildSourceMappedMarker());
1637 }
1638 generatedCode[element] = function;
1634 WorldImpact worldImpact = 1639 WorldImpact worldImpact =
1635 impactTransformer.transformCodegenImpact(work.registry.worldImpact); 1640 impactTransformer.transformCodegenImpact(work.registry.worldImpact);
1636 compiler.dumpInfoTask.registerImpact(element, worldImpact); 1641 compiler.dumpInfoTask.registerImpact(element, worldImpact);
1637 return worldImpact; 1642 return worldImpact;
1638 } 1643 }
1639 1644
1640 native.NativeEnqueuer nativeResolutionEnqueuer(Enqueuer world) { 1645 native.NativeEnqueuer nativeResolutionEnqueuer(Enqueuer world) {
1641 return new native.NativeResolutionEnqueuer(world, compiler); 1646 return new native.NativeResolutionEnqueuer(world, compiler);
1642 } 1647 }
1643 1648
(...skipping 10 matching lines...) Expand all
1654 ? helpers.jsInterceptorClass : coreClasses.objectClass; 1659 ? helpers.jsInterceptorClass : coreClasses.objectClass;
1655 } 1660 }
1656 1661
1657 /** 1662 /**
1658 * Unit test hook that returns code of an element as a String. 1663 * Unit test hook that returns code of an element as a String.
1659 * 1664 *
1660 * Invariant: [element] must be a declaration element. 1665 * Invariant: [element] must be a declaration element.
1661 */ 1666 */
1662 String getGeneratedCode(Element element) { 1667 String getGeneratedCode(Element element) {
1663 assert(invariant(element, element.isDeclaration)); 1668 assert(invariant(element, element.isDeclaration));
1664 return jsAst.prettyPrint(generatedCode[element], compiler).getText(); 1669 return jsAst.prettyPrint(generatedCode[element], compiler);
1665 } 1670 }
1666 1671
1667 int assembleProgram() { 1672 int assembleProgram() {
1668 int programSize = emitter.assembleProgram(); 1673 int programSize = emitter.assembleProgram();
1669 noSuchMethodRegistry.emitDiagnostic(); 1674 noSuchMethodRegistry.emitDiagnostic();
1670 int totalMethodCount = generatedCode.length; 1675 int totalMethodCount = generatedCode.length;
1671 if (totalMethodCount != preMirrorsMethodCount) { 1676 if (totalMethodCount != preMirrorsMethodCount) {
1672 int mirrorCount = totalMethodCount - preMirrorsMethodCount; 1677 int mirrorCount = totalMethodCount - preMirrorsMethodCount;
1673 double percentage = (mirrorCount / totalMethodCount) * 100; 1678 double percentage = (mirrorCount / totalMethodCount) * 100;
1674 DiagnosticMessage hint = reporter.createMessage( 1679 DiagnosticMessage hint = reporter.createMessage(
(...skipping 827 matching lines...) Expand 10 before | Expand all | Expand 10 after
2502 "@NoThrows() should always be combined with @NoInline."); 2507 "@NoThrows() should always be combined with @NoInline.");
2503 } 2508 }
2504 if (hasNoSideEffects && !hasNoInline) { 2509 if (hasNoSideEffects && !hasNoInline) {
2505 reporter.internalError(element, 2510 reporter.internalError(element,
2506 "@NoSideEffects() should always be combined with @NoInline."); 2511 "@NoSideEffects() should always be combined with @NoInline.");
2507 } 2512 }
2508 if (element == helpers.invokeOnMethod) { 2513 if (element == helpers.invokeOnMethod) {
2509 compiler.enabledInvokeOn = true; 2514 compiler.enabledInvokeOn = true;
2510 } 2515 }
2511 } 2516 }
2512 2517 /*
2513 CodeBuffer codeOf(Element element) { 2518 CodeBuffer codeOf(Element element) {
2514 return generatedCode.containsKey(element) 2519 return generatedCode.containsKey(element)
2515 ? jsAst.prettyPrint(generatedCode[element], compiler) 2520 ? jsAst.prettyPrint(generatedCode[element], compiler)
2516 : null; 2521 : null;
2517 } 2522 }
2518 2523 */
2519 FunctionElement helperForBadMain() => helpers.badMain; 2524 FunctionElement helperForBadMain() => helpers.badMain;
2520 2525
2521 FunctionElement helperForMissingMain() => helpers.missingMain; 2526 FunctionElement helperForMissingMain() => helpers.missingMain;
2522 2527
2523 FunctionElement helperForMainArity() => helpers.mainHasTooManyParameters; 2528 FunctionElement helperForMainArity() => helpers.mainHasTooManyParameters;
2524 2529
2525 void forgetElement(Element element) { 2530 void forgetElement(Element element) {
2526 constants.forgetElement(element); 2531 constants.forgetElement(element);
2527 constantCompilerTask.dartConstantCompiler.forgetElement(element); 2532 constantCompilerTask.dartConstantCompiler.forgetElement(element);
2528 aliasedSuperMembers.remove(element); 2533 aliasedSuperMembers.remove(element);
(...skipping 635 matching lines...) Expand 10 before | Expand all | Expand 10 after
3164 } 3169 }
3165 } 3170 }
3166 3171
3167 @override 3172 @override
3168 void onImpactUsed(ImpactUseCase impactUse) { 3173 void onImpactUsed(ImpactUseCase impactUse) {
3169 if (impactUse == DeferredLoadTask.IMPACT_USE) { 3174 if (impactUse == DeferredLoadTask.IMPACT_USE) {
3170 resolution.emptyCache(); 3175 resolution.emptyCache();
3171 } 3176 }
3172 } 3177 }
3173 } 3178 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js/js_source_mapping.dart ('k') | pkg/compiler/lib/src/js_backend/js_backend.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698