| Index: pkg/compiler/lib/src/js_backend/element_strategy.dart
|
| diff --git a/pkg/compiler/lib/src/js_backend/element_strategy.dart b/pkg/compiler/lib/src/js_backend/element_strategy.dart
|
| index f8c9a276b5a3e601306c9fcc1e6ef0da7cfb3652..2fa9cc2b4ffbbc3b1efb4d579d9415264adbb303 100644
|
| --- a/pkg/compiler/lib/src/js_backend/element_strategy.dart
|
| +++ b/pkg/compiler/lib/src/js_backend/element_strategy.dart
|
| @@ -11,7 +11,12 @@ import '../common/work.dart';
|
| import '../compiler.dart';
|
| import '../elements/elements.dart';
|
| import '../enqueue.dart';
|
| +import '../io/multi_information.dart' show MultiSourceInformationStrategy;
|
| +import '../io/position_information.dart' show PositionSourceInformationStrategy;
|
| import '../io/source_information.dart';
|
| +import '../io/start_end_information.dart'
|
| + show StartEndSourceInformationStrategy;
|
| +import '../js/js_source_mapping.dart' show JavaScriptSourceInformationStrategy;
|
| import '../js_backend/backend.dart';
|
| import '../js_backend/native_data.dart';
|
| import '../js_emitter/sorter.dart';
|
| @@ -27,6 +32,7 @@ import '../world.dart';
|
| /// model.
|
| class ElementBackendStrategy implements BackendStrategy {
|
| final Compiler _compiler;
|
| + SourceInformationStrategy _sourceInformationStrategy;
|
|
|
| ElementBackendStrategy(this._compiler);
|
|
|
| @@ -65,6 +71,37 @@ class ElementBackendStrategy implements BackendStrategy {
|
| ? new RastaSsaBuilderTask(backend, sourceInformationStrategy)
|
| : new SsaAstBuilderTask(backend, sourceInformationStrategy);
|
| }
|
| +
|
| + SourceInformationStrategy get sourceInformationStrategy {
|
| + return _sourceInformationStrategy ??= createSourceInformationStrategy(
|
| + generateSourceMap: _compiler.options.generateSourceMap,
|
| + useMultiSourceInfo: _compiler.options.useMultiSourceInfo,
|
| + useNewSourceInfo: _compiler.options.useNewSourceInfo);
|
| + }
|
| +
|
| + static SourceInformationStrategy createSourceInformationStrategy(
|
| + {bool generateSourceMap: false,
|
| + bool useMultiSourceInfo: false,
|
| + bool useNewSourceInfo: false}) {
|
| + if (!generateSourceMap) return const JavaScriptSourceInformationStrategy();
|
| + if (useMultiSourceInfo) {
|
| + if (useNewSourceInfo) {
|
| + return const MultiSourceInformationStrategy(const [
|
| + const PositionSourceInformationStrategy(),
|
| + const StartEndSourceInformationStrategy()
|
| + ]);
|
| + } else {
|
| + return const MultiSourceInformationStrategy(const [
|
| + const StartEndSourceInformationStrategy(),
|
| + const PositionSourceInformationStrategy()
|
| + ]);
|
| + }
|
| + } else if (useNewSourceInfo) {
|
| + return const PositionSourceInformationStrategy();
|
| + } else {
|
| + return const StartEndSourceInformationStrategy();
|
| + }
|
| + }
|
| }
|
|
|
| /// Builder that creates the work item necessary for the code generation of a
|
|
|