| OLD | NEW |
| 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 library js_backend.backend; | 5 library js_backend.backend; |
| 6 | 6 |
| 7 import 'dart:async' show Future; | 7 import 'dart:async' show Future; |
| 8 | 8 |
| 9 import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames; | 9 import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames; |
| 10 | 10 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 import '../constants/values.dart'; | 22 import '../constants/values.dart'; |
| 23 import '../common_elements.dart' show CommonElements, ElementEnvironment; | 23 import '../common_elements.dart' show CommonElements, ElementEnvironment; |
| 24 import '../deferred_load.dart' show DeferredLoadTask; | 24 import '../deferred_load.dart' show DeferredLoadTask; |
| 25 import '../dump_info.dart' show DumpInfoTask; | 25 import '../dump_info.dart' show DumpInfoTask; |
| 26 import '../elements/elements.dart'; | 26 import '../elements/elements.dart'; |
| 27 import '../elements/entities.dart'; | 27 import '../elements/entities.dart'; |
| 28 import '../elements/resolution_types.dart'; | 28 import '../elements/resolution_types.dart'; |
| 29 import '../elements/types.dart'; | 29 import '../elements/types.dart'; |
| 30 import '../enqueue.dart' | 30 import '../enqueue.dart' |
| 31 show | 31 show |
| 32 DirectEnqueuerStrategy, |
| 32 Enqueuer, | 33 Enqueuer, |
| 33 EnqueuerListener, | 34 EnqueuerListener, |
| 34 EnqueueTask, | 35 EnqueueTask, |
| 35 ResolutionEnqueuer, | 36 ResolutionEnqueuer, |
| 37 ResolutionWorkItemBuilder, |
| 36 TreeShakingEnqueuerStrategy; | 38 TreeShakingEnqueuerStrategy; |
| 37 import '../io/multi_information.dart' show MultiSourceInformationStrategy; | 39 import '../io/multi_information.dart' show MultiSourceInformationStrategy; |
| 38 import '../io/position_information.dart' show PositionSourceInformationStrategy; | 40 import '../io/position_information.dart' show PositionSourceInformationStrategy; |
| 39 import '../io/source_information.dart' show SourceInformationStrategy; | 41 import '../io/source_information.dart' show SourceInformationStrategy; |
| 40 import '../io/start_end_information.dart' | 42 import '../io/start_end_information.dart' |
| 41 show StartEndSourceInformationStrategy; | 43 show StartEndSourceInformationStrategy; |
| 42 import '../js/js.dart' as jsAst; | 44 import '../js/js.dart' as jsAst; |
| 43 import '../js/js.dart' show js; | 45 import '../js/js.dart' show js; |
| 44 import '../js/js_source_mapping.dart' show JavaScriptSourceInformationStrategy; | 46 import '../js/js_source_mapping.dart' show JavaScriptSourceInformationStrategy; |
| 45 import '../js/rewrite_async.dart'; | 47 import '../js/rewrite_async.dart'; |
| (...skipping 391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 437 NativeDataBuilder get nativeDataBuilder => _nativeData; | 439 NativeDataBuilder get nativeDataBuilder => _nativeData; |
| 438 final NativeDataResolver _nativeDataResolver; | 440 final NativeDataResolver _nativeDataResolver; |
| 439 InterceptorDataBuilder _interceptorDataBuilder; | 441 InterceptorDataBuilder _interceptorDataBuilder; |
| 440 InterceptorData _interceptorData; | 442 InterceptorData _interceptorData; |
| 441 OneShotInterceptorData _oneShotInterceptorData; | 443 OneShotInterceptorData _oneShotInterceptorData; |
| 442 BackendUsage _backendUsage; | 444 BackendUsage _backendUsage; |
| 443 BackendUsageBuilder _backendUsageBuilder; | 445 BackendUsageBuilder _backendUsageBuilder; |
| 444 MirrorsData mirrorsData; | 446 MirrorsData mirrorsData; |
| 445 CheckedModeHelpers _checkedModeHelpers; | 447 CheckedModeHelpers _checkedModeHelpers; |
| 446 | 448 |
| 447 ResolutionEnqueuerListener _resolutionEnqueuerListener; | |
| 448 | |
| 449 native.NativeResolutionEnqueuer _nativeResolutionEnqueuer; | 449 native.NativeResolutionEnqueuer _nativeResolutionEnqueuer; |
| 450 native.NativeCodegenEnqueuer _nativeCodegenEnqueuer; | 450 native.NativeCodegenEnqueuer _nativeCodegenEnqueuer; |
| 451 | 451 |
| 452 BackendHelpers helpers; | 452 BackendHelpers helpers; |
| 453 BackendImpacts impacts; | 453 BackendImpacts impacts; |
| 454 | 454 |
| 455 /// Common classes used by the backend. | 455 /// Common classes used by the backend. |
| 456 BackendClasses backendClasses; | 456 BackendClasses backendClasses; |
| 457 | 457 |
| 458 /// Backend access to the front-end. | 458 /// Backend access to the front-end. |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 544 | 544 |
| 545 noSuchMethodRegistry = new NoSuchMethodRegistry(this); | 545 noSuchMethodRegistry = new NoSuchMethodRegistry(this); |
| 546 kernelTask = new KernelTask(compiler); | 546 kernelTask = new KernelTask(compiler); |
| 547 impactTransformer = new JavaScriptImpactTransformer(this); | 547 impactTransformer = new JavaScriptImpactTransformer(this); |
| 548 patchResolverTask = new PatchResolverTask(compiler); | 548 patchResolverTask = new PatchResolverTask(compiler); |
| 549 functionCompiler = | 549 functionCompiler = |
| 550 new SsaFunctionCompiler(this, sourceInformationStrategy, useKernel); | 550 new SsaFunctionCompiler(this, sourceInformationStrategy, useKernel); |
| 551 serialization = new JavaScriptBackendSerialization(nativeData); | 551 serialization = new JavaScriptBackendSerialization(nativeData); |
| 552 _interceptorDataBuilder = new InterceptorDataBuilderImpl( | 552 _interceptorDataBuilder = new InterceptorDataBuilderImpl( |
| 553 nativeClassData, helpers, commonElements, compiler.resolution); | 553 nativeClassData, helpers, commonElements, compiler.resolution); |
| 554 _resolutionEnqueuerListener = new ResolutionEnqueuerListener( | |
| 555 kernelTask, | |
| 556 compiler.options, | |
| 557 compiler.elementEnvironment, | |
| 558 commonElements, | |
| 559 helpers, | |
| 560 impacts, | |
| 561 nativeClassData, | |
| 562 _interceptorDataBuilder, | |
| 563 _backendUsageBuilder, | |
| 564 _rtiNeedBuilder, | |
| 565 mirrorsData, | |
| 566 noSuchMethodRegistry, | |
| 567 customElementsResolutionAnalysis, | |
| 568 lookupMapLibraryAccess, | |
| 569 mirrorsAnalysis, | |
| 570 typeVariableAnalysis, | |
| 571 _nativeResolutionEnqueuer); | |
| 572 } | 554 } |
| 573 | 555 |
| 574 /// The [ConstantSystem] used to interpret compile-time constants for this | 556 /// The [ConstantSystem] used to interpret compile-time constants for this |
| 575 /// backend. | 557 /// backend. |
| 576 ConstantSystem get constantSystem => constants.constantSystem; | 558 ConstantSystem get constantSystem => constants.constantSystem; |
| 577 | 559 |
| 578 DiagnosticReporter get reporter => compiler.reporter; | 560 DiagnosticReporter get reporter => compiler.reporter; |
| 579 | 561 |
| 580 CommonElements get commonElements => compiler.commonElements; | 562 CommonElements get commonElements => compiler.commonElements; |
| 581 | 563 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 640 RuntimeTypesSubstitutions get rtiSubstitutions => _rti; | 622 RuntimeTypesSubstitutions get rtiSubstitutions => _rti; |
| 641 | 623 |
| 642 RuntimeTypesEncoder get rtiEncoder { | 624 RuntimeTypesEncoder get rtiEncoder { |
| 643 assert(invariant(NO_LOCATION_SPANNABLE, _rtiEncoder != null, | 625 assert(invariant(NO_LOCATION_SPANNABLE, _rtiEncoder != null, |
| 644 message: "RuntimeTypesEncoder has not been created.")); | 626 message: "RuntimeTypesEncoder has not been created.")); |
| 645 return _rtiEncoder; | 627 return _rtiEncoder; |
| 646 } | 628 } |
| 647 | 629 |
| 648 CheckedModeHelpers get checkedModeHelpers => _checkedModeHelpers; | 630 CheckedModeHelpers get checkedModeHelpers => _checkedModeHelpers; |
| 649 | 631 |
| 650 EnqueuerListener get resolutionEnqueuerListener => | |
| 651 _resolutionEnqueuerListener; | |
| 652 | |
| 653 /// Returns constant environment for the JavaScript interpretation of the | 632 /// Returns constant environment for the JavaScript interpretation of the |
| 654 /// constants. | 633 /// constants. |
| 655 JavaScriptConstantCompiler get constants { | 634 JavaScriptConstantCompiler get constants { |
| 656 return constantCompilerTask.jsConstantCompiler; | 635 return constantCompilerTask.jsConstantCompiler; |
| 657 } | 636 } |
| 658 | 637 |
| 659 bool isDefaultNoSuchMethod(MethodElement element) { | 638 bool isDefaultNoSuchMethod(MethodElement element) { |
| 660 return noSuchMethodRegistry.isDefaultNoSuchMethodImplementation(element); | 639 return noSuchMethodRegistry.isDefaultNoSuchMethodImplementation(element); |
| 661 } | 640 } |
| 662 | 641 |
| (...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 922 reporter.reportErrorMessage( | 901 reporter.reportErrorMessage( |
| 923 node, MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT); | 902 node, MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT); |
| 924 } | 903 } |
| 925 // No native behavior for this call. | 904 // No native behavior for this call. |
| 926 return null; | 905 return null; |
| 927 } | 906 } |
| 928 | 907 |
| 929 bool isComplexNoSuchMethod(FunctionElement element) => | 908 bool isComplexNoSuchMethod(FunctionElement element) => |
| 930 noSuchMethodRegistry.isComplex(element); | 909 noSuchMethodRegistry.isComplex(element); |
| 931 | 910 |
| 911 ResolutionEnqueuer createResolutionEnqueuer( |
| 912 CompilerTask task, Compiler compiler) { |
| 913 return new ResolutionEnqueuer( |
| 914 task, |
| 915 compiler.options, |
| 916 compiler.reporter, |
| 917 compiler.options.analyzeOnly && compiler.options.analyzeMain |
| 918 ? const DirectEnqueuerStrategy() |
| 919 : const TreeShakingEnqueuerStrategy(), |
| 920 new ResolutionEnqueuerListener( |
| 921 kernelTask, |
| 922 compiler.options, |
| 923 compiler.elementEnvironment, |
| 924 commonElements, |
| 925 helpers, |
| 926 impacts, |
| 927 nativeClassData, |
| 928 _interceptorDataBuilder, |
| 929 _backendUsageBuilder, |
| 930 _rtiNeedBuilder, |
| 931 mirrorsData, |
| 932 noSuchMethodRegistry, |
| 933 customElementsResolutionAnalysis, |
| 934 lookupMapLibraryAccess, |
| 935 mirrorsAnalysis, |
| 936 typeVariableAnalysis, |
| 937 _nativeResolutionEnqueuer), |
| 938 new ElementResolutionWorldBuilder( |
| 939 this, compiler.resolution, const OpenWorldStrategy()), |
| 940 new ResolutionWorkItemBuilder(compiler.resolution)); |
| 941 } |
| 942 |
| 932 /// Creates an [Enqueuer] for code generation specific to this backend. | 943 /// Creates an [Enqueuer] for code generation specific to this backend. |
| 933 CodegenEnqueuer createCodegenEnqueuer( | 944 CodegenEnqueuer createCodegenEnqueuer( |
| 934 CompilerTask task, Compiler compiler, ClosedWorld closedWorld) { | 945 CompilerTask task, Compiler compiler, ClosedWorld closedWorld) { |
| 935 return new CodegenEnqueuer( | 946 return new CodegenEnqueuer( |
| 936 task, | 947 task, |
| 937 compiler.options, | 948 compiler.options, |
| 938 const TreeShakingEnqueuerStrategy(), | 949 const TreeShakingEnqueuerStrategy(), |
| 939 new CodegenWorldBuilderImpl( | 950 new CodegenWorldBuilderImpl( |
| 940 nativeClassData, closedWorld, const TypeMaskStrategy()), | 951 nativeClassData, closedWorld, const TypeMaskStrategy()), |
| 941 new CodegenWorkItemBuilder(this, compiler.options), | 952 new CodegenWorkItemBuilder(this, compiler.options), |
| (...skipping 670 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1612 return _backend.defaultSuperclass(element); | 1623 return _backend.defaultSuperclass(element); |
| 1613 } | 1624 } |
| 1614 | 1625 |
| 1615 @override | 1626 @override |
| 1616 bool isNativeClass(ClassEntity element) => | 1627 bool isNativeClass(ClassEntity element) => |
| 1617 _backend.nativeClassData.isNativeClass(element); | 1628 _backend.nativeClassData.isNativeClass(element); |
| 1618 | 1629 |
| 1619 @override | 1630 @override |
| 1620 bool isForeign(Element element) => _backend.isForeign(element); | 1631 bool isForeign(Element element) => _backend.isForeign(element); |
| 1621 } | 1632 } |
| OLD | NEW |