| Index: pkg/compiler/lib/compiler_new.dart
|
| diff --git a/pkg/compiler/lib/compiler_new.dart b/pkg/compiler/lib/compiler_new.dart
|
| index fa405da5323bd51b157feb77d11e7bff8084f30e..3988c2f5d10ac8e445939cb73aef3338cb29cdc2 100644
|
| --- a/pkg/compiler/lib/compiler_new.dart
|
| +++ b/pkg/compiler/lib/compiler_new.dart
|
| @@ -9,10 +9,9 @@ library compiler_new;
|
|
|
| import 'dart:async';
|
| import 'src/apiimpl.dart';
|
| -import 'src/commandline_options.dart';
|
| -import 'src/diagnostics/diagnostic_listener.dart' show DiagnosticOptions;
|
| +import 'src/options.dart' show CompilerOptions;
|
|
|
| -import 'compiler.dart' show Diagnostic, PackagesDiscoveryProvider;
|
| +import 'compiler.dart' show Diagnostic;
|
| export 'compiler.dart' show Diagnostic, PackagesDiscoveryProvider;
|
|
|
| // Unless explicitly allowed, passing `null` for any argument to the
|
| @@ -93,426 +92,6 @@ class CompilationResult {
|
| CompilationResult(this.compiler, {this.isSuccess: true});
|
| }
|
|
|
| -/// Object for passing options to the compiler.
|
| -class CompilerOptions {
|
| - /// The entry point of the application that is being compiled.
|
| - final Uri entryPoint;
|
| -
|
| - /// Root location where SDK libraries are found.
|
| - final Uri libraryRoot;
|
| -
|
| - /// Package root location.
|
| - ///
|
| - /// If not null then [packageConfig] should be null.
|
| - final Uri packageRoot;
|
| -
|
| - /// Location of the package configuration file.
|
| - ///
|
| - /// If not null then [packageRoot] should be null.
|
| - final Uri packageConfig;
|
| -
|
| - // TODO(sigmund): Move out of here, maybe to CompilerInput. Options should not
|
| - // hold code, just configuration options.
|
| - final PackagesDiscoveryProvider packagesDiscoveryProvider;
|
| -
|
| - /// Resolved constant "environment" values passed to the compiler via the `-D`
|
| - /// flags.
|
| - final Map<String, dynamic> environment;
|
| -
|
| - /// Whether we allow mocking compilation of libraries such as dart:io and
|
| - /// dart:html for unit testing purposes.
|
| - final bool allowMockCompilation;
|
| -
|
| - /// Whether the native extension syntax is supported by the frontend.
|
| - final bool allowNativeExtensions;
|
| -
|
| - /// Whether to resolve all functions in the program, not just those reachable
|
| - /// from main. This implies [analyzeOnly] is true as well.
|
| - final bool analyzeAll;
|
| -
|
| - /// Whether to disable tree-shaking for the main script. This marks all
|
| - /// functions in the main script as reachable (not just a function named
|
| - /// `main`).
|
| - // TODO(sigmund): rename. The current name seems to indicate that only the
|
| - // main function is retained, which is the opposite of what this does.
|
| - final bool analyzeMain;
|
| -
|
| - /// Whether to run the compiler just for the purpose of analysis. That is, to
|
| - /// run resolution and type-checking alone, but otherwise do not generate any
|
| - /// code.
|
| - final bool analyzeOnly;
|
| -
|
| - /// Whether to skip analysis of method bodies and field initializers. Implies
|
| - /// [analyzeOnly].
|
| - final bool analyzeSignaturesOnly;
|
| -
|
| - /// ID associated with this sdk build.
|
| - final String buildId;
|
| -
|
| - /// Whether there is a build-id available so we can use it on error messages
|
| - /// and in the emitted output of the compiler.
|
| - bool get hasBuildId => buildId != _UNDETERMINED_BUILD_ID;
|
| -
|
| - /// Location where to generate a map containing details of how deferred
|
| - /// libraries are subdivided.
|
| - final Uri deferredMapUri;
|
| -
|
| - /// Whether to disable inlining during the backend optimizations.
|
| - // TODO(sigmund): negate, so all flags are positive
|
| - final bool disableInlining;
|
| -
|
| - /// Several options to configure diagnostic messages.
|
| - // TODO(sigmund): should we simply embed those options here?
|
| - final DiagnosticOptions diagnosticOptions;
|
| -
|
| - /// Whether to disable global type inference.
|
| - final bool disableTypeInference;
|
| -
|
| - /// Whether to emit a .json file with a summary of the information used by the
|
| - /// compiler during optimization. This includes resolution details,
|
| - /// dependencies between elements, results of type inference, and the output
|
| - /// code for each function.
|
| - final bool dumpInfo;
|
| -
|
| - /// Whether we allow passing an extra argument to `assert`, containing a
|
| - /// reason for why an assertion fails. (experimental)
|
| - final bool enableAssertMessage;
|
| -
|
| - /// Whether to enable the experimental conditional directives feature.
|
| - final bool enableConditionalDirectives;
|
| -
|
| - /// Whether the user specified a flag to allow the use of dart:mirrors. This
|
| - /// silences a warning produced by the compiler.
|
| - final bool enableExperimentalMirrors;
|
| -
|
| - /// Whether to enable minification
|
| - // TODO(sigmund): rename to minify
|
| - final bool enableMinification;
|
| -
|
| - /// Whether to model which native classes are live based on annotations on the
|
| - /// core libraries. If false, all native classes will be included by default.
|
| - final bool enableNativeLiveTypeAnalysis;
|
| -
|
| - /// Whether to generate code containing checked-mode assignability checks.
|
| - final bool enableTypeAssertions;
|
| -
|
| - /// Whether to generate code containing user's `assert` statements.
|
| - final bool enableUserAssertions;
|
| -
|
| - /// Whether to generate output even when there are compile-time errors.
|
| - final bool generateCodeWithCompileTimeErrors;
|
| -
|
| - /// Whether to generate a source-map file together with the output program.
|
| - final bool generateSourceMap;
|
| -
|
| - /// Whether some values are cached for reuse in incremental compilation.
|
| - /// Incremental compilation allows calling `Compiler.run` more than once
|
| - /// (experimental).
|
| - final bool hasIncrementalSupport;
|
| -
|
| - /// URI of the main output if the compiler is generating source maps.
|
| - final Uri outputUri;
|
| -
|
| - /// Location of the platform configuration file.
|
| - final Uri platformConfigUri;
|
| -
|
| - /// Whether to emit URIs in the reflection metadata.
|
| - final bool preserveUris;
|
| -
|
| - /// URI where the compiler should generate the output source map file.
|
| - final Uri sourceMapUri;
|
| -
|
| - /// The compiler is run from the build bot.
|
| - final bool testMode;
|
| -
|
| - /// Whether to trust JS-interop annotations. (experimental)
|
| - final bool trustJSInteropTypeAnnotations;
|
| -
|
| - /// Whether to trust primitive types during inference and optimizations.
|
| - final bool trustPrimitives;
|
| -
|
| - /// Whether to trust type annotations during inference and optimizations.
|
| - final bool trustTypeAnnotations;
|
| -
|
| - /// Whether to generate code compliant with content security policy (CSP).
|
| - final bool useContentSecurityPolicy;
|
| -
|
| - /// Use the experimental CPS based backend.
|
| - final bool useCpsIr;
|
| -
|
| - /// When obfuscating for minification, whether to use the frequency of a name
|
| - /// as an heuristic to pick shorter names.
|
| - final bool useFrequencyNamer;
|
| -
|
| - /// Whether to use the new source-information implementation for source-maps.
|
| - /// (experimental)
|
| - final bool useNewSourceInfo;
|
| -
|
| - /// Whether the user requested to use the fast startup emitter. The full
|
| - /// emitter might still be used if the program uses dart:mirrors.
|
| - final bool useStartupEmitter;
|
| -
|
| - /// Enable verbose printing during compilation. Includes progress messages
|
| - /// during each phase and a time-breakdown between phases at the end.
|
| - final bool verbose;
|
| -
|
| -
|
| - // -------------------------------------------------
|
| - // Options for deprecated features
|
| - // -------------------------------------------------
|
| - // TODO(sigmund): delete these as we delete the underlying features
|
| -
|
| - /// Whether to preserve comments while scanning (only use for dart:mirrors).
|
| - final bool preserveComments;
|
| -
|
| - /// Whether to emit JavaScript (false enables dart2dart).
|
| - final bool emitJavaScript;
|
| -
|
| - /// When using dart2dart, whether to use the multi file format.
|
| - final bool dart2dartMultiFile;
|
| -
|
| - /// Strip option used by dart2dart.
|
| - final List<String> strips;
|
| -
|
| - /// Create an options object by parsing flags from [options].
|
| - factory CompilerOptions.parse(
|
| - {Uri entryPoint,
|
| - Uri libraryRoot,
|
| - Uri packageRoot,
|
| - Uri packageConfig,
|
| - PackagesDiscoveryProvider packagesDiscoveryProvider,
|
| - Map<String, dynamic> environment: const <String, dynamic>{},
|
| - List<String> options}) {
|
| - return new CompilerOptions(
|
| - entryPoint: entryPoint,
|
| - libraryRoot: libraryRoot,
|
| - packageRoot: packageRoot,
|
| - packageConfig: packageConfig,
|
| - packagesDiscoveryProvider: packagesDiscoveryProvider,
|
| - environment: environment,
|
| - allowMockCompilation: _hasOption(options, Flags.allowMockCompilation),
|
| - allowNativeExtensions: _hasOption(options, Flags.allowNativeExtensions),
|
| - analyzeAll: _hasOption(options, Flags.analyzeAll),
|
| - analyzeMain: _hasOption(options, Flags.analyzeMain),
|
| - analyzeOnly: _hasOption(options, Flags.analyzeOnly),
|
| - analyzeSignaturesOnly: _hasOption(options, Flags.analyzeSignaturesOnly),
|
| - buildId: _extractStringOption(
|
| - options, '--build-id=', _UNDETERMINED_BUILD_ID),
|
| - dart2dartMultiFile: _hasOption(options, '--output-type=dart-multi'),
|
| - deferredMapUri: _extractUriOption(options, '--deferred-map='),
|
| - diagnosticOptions: new DiagnosticOptions(
|
| - suppressWarnings: _hasOption(options, Flags.suppressWarnings),
|
| - fatalWarnings: _hasOption(options, Flags.fatalWarnings),
|
| - suppressHints: _hasOption(options, Flags.suppressHints),
|
| - terseDiagnostics: _hasOption(options, Flags.terse),
|
| - shownPackageWarnings:
|
| - _extractOptionalCsvOption(options, Flags.showPackageWarnings)),
|
| - disableInlining: _hasOption(options, Flags.disableInlining),
|
| - disableTypeInference: _hasOption(options, Flags.disableTypeInference),
|
| - dumpInfo: _hasOption(options, Flags.dumpInfo),
|
| - emitJavaScript: !(_hasOption(options, '--output-type=dart') ||
|
| - _hasOption(options, '--output-type=dart-multi')),
|
| - enableAssertMessage: _hasOption(options, Flags.enableAssertMessage),
|
| - enableConditionalDirectives:
|
| - _hasOption(options, Flags.conditionalDirectives),
|
| - enableExperimentalMirrors:
|
| - _hasOption(options, Flags.enableExperimentalMirrors),
|
| - enableMinification: _hasOption(options, Flags.minify),
|
| - enableNativeLiveTypeAnalysis:
|
| - !_hasOption(options, Flags.disableNativeLiveTypeAnalysis),
|
| - enableTypeAssertions: _hasOption(options, Flags.enableCheckedMode),
|
| - enableUserAssertions: _hasOption(options, Flags.enableCheckedMode),
|
| - generateCodeWithCompileTimeErrors:
|
| - _hasOption(options, Flags.generateCodeWithCompileTimeErrors),
|
| - generateSourceMap: !_hasOption(options, Flags.noSourceMaps),
|
| - hasIncrementalSupport: _forceIncrementalSupport ||
|
| - _hasOption(options, Flags.incrementalSupport),
|
| - outputUri: _extractUriOption(options, '--out='),
|
| - platformConfigUri: _resolvePlatformConfigFromOptions(
|
| - libraryRoot, options),
|
| - preserveComments: _hasOption(options, Flags.preserveComments),
|
| - preserveUris: _hasOption(options, Flags.preserveUris),
|
| - sourceMapUri: _extractUriOption(options, '--source-map='),
|
| - strips: _extractCsvOption(options, '--force-strip='),
|
| - testMode: _hasOption(options, Flags.testMode),
|
| - trustJSInteropTypeAnnotations:
|
| - _hasOption(options, Flags.trustJSInteropTypeAnnotations),
|
| - trustPrimitives: _hasOption(options, Flags.trustPrimitives),
|
| - trustTypeAnnotations: _hasOption(options, Flags.trustTypeAnnotations),
|
| - useContentSecurityPolicy:
|
| - _hasOption(options, Flags.useContentSecurityPolicy),
|
| - useCpsIr: _hasOption(options, Flags.useCpsIr),
|
| - useFrequencyNamer:
|
| - !_hasOption(options, Flags.noFrequencyBasedMinification),
|
| - useNewSourceInfo: _hasOption(options, Flags.useNewSourceInfo),
|
| - useStartupEmitter: _hasOption(options, Flags.fastStartup),
|
| - verbose: _hasOption(options, Flags.verbose));
|
| - }
|
| -
|
| - /// Creates an option object for the compiler.
|
| - ///
|
| - /// This validates and normalizes dependent options to be consistent. For
|
| - /// example, if [analyzeAll] is true, the resulting options object will also
|
| - /// have [analyzeOnly] as true.
|
| - factory CompilerOptions(
|
| - {Uri entryPoint,
|
| - Uri libraryRoot,
|
| - Uri packageRoot,
|
| - Uri packageConfig,
|
| - PackagesDiscoveryProvider packagesDiscoveryProvider,
|
| - Map<String, dynamic> environment: const <String, dynamic>{},
|
| - bool allowMockCompilation: false,
|
| - bool allowNativeExtensions: false,
|
| - bool analyzeAll: false,
|
| - bool analyzeMain: false,
|
| - bool analyzeOnly: false,
|
| - bool analyzeSignaturesOnly: false,
|
| - String buildId: _UNDETERMINED_BUILD_ID,
|
| - bool dart2dartMultiFile: false,
|
| - Uri deferredMapUri: null,
|
| - DiagnosticOptions diagnosticOptions: const DiagnosticOptions(),
|
| - bool disableInlining: false,
|
| - bool disableTypeInference: false,
|
| - bool dumpInfo: false,
|
| - bool emitJavaScript: true,
|
| - bool enableAssertMessage: false,
|
| - bool enableConditionalDirectives: false,
|
| - bool enableExperimentalMirrors: false,
|
| - bool enableMinification: false,
|
| - bool enableNativeLiveTypeAnalysis: true,
|
| - bool enableTypeAssertions: false,
|
| - bool enableUserAssertions: false,
|
| - bool generateCodeWithCompileTimeErrors: false,
|
| - bool generateSourceMap: true,
|
| - bool hasIncrementalSupport: false,
|
| - Uri outputUri: null,
|
| - Uri platformConfigUri: null,
|
| - bool preserveComments: false,
|
| - bool preserveUris: false,
|
| - Uri sourceMapUri: null,
|
| - List<String> strips: const [],
|
| - bool testMode: false,
|
| - bool trustJSInteropTypeAnnotations: false,
|
| - bool trustPrimitives: false,
|
| - bool trustTypeAnnotations: false,
|
| - bool useContentSecurityPolicy: false,
|
| - bool useCpsIr: false,
|
| - bool useFrequencyNamer: true,
|
| - bool useNewSourceInfo: false,
|
| - bool useStartupEmitter: false,
|
| - bool verbose: false}) {
|
| - // TODO(sigmund): should entrypoint be here? should we validate it is not
|
| - // null? In unittests we use the same compiler to analyze or build multiple
|
| - // entrypoints.
|
| - if (libraryRoot == null) {
|
| - throw new ArgumentError("[libraryRoot] is null.");
|
| - }
|
| - if (!libraryRoot.path.endsWith("/")) {
|
| - throw new ArgumentError("[libraryRoot] must end with a /");
|
| - }
|
| - if (packageRoot != null && packageConfig != null) {
|
| - throw new ArgumentError("Only one of [packageRoot] or [packageConfig] "
|
| - "may be given.");
|
| - }
|
| - if (packageRoot != null && !packageRoot.path.endsWith("/")) {
|
| - throw new ArgumentError("[packageRoot] must end with a /");
|
| - }
|
| - if (!analyzeOnly) {
|
| - if (allowNativeExtensions) {
|
| - throw new ArgumentError(
|
| - "${Flags.allowNativeExtensions} is only supported in combination "
|
| - "with ${Flags.analyzeOnly}");
|
| - }
|
| - }
|
| - return new CompilerOptions._(entryPoint, libraryRoot, packageRoot,
|
| - packageConfig, packagesDiscoveryProvider, environment,
|
| - allowMockCompilation: allowMockCompilation,
|
| - allowNativeExtensions: allowNativeExtensions,
|
| - analyzeAll: analyzeAll,
|
| - analyzeMain: analyzeMain,
|
| - analyzeOnly: analyzeOnly || analyzeSignaturesOnly || analyzeAll,
|
| - analyzeSignaturesOnly: analyzeSignaturesOnly,
|
| - buildId: buildId,
|
| - dart2dartMultiFile: dart2dartMultiFile,
|
| - deferredMapUri: deferredMapUri,
|
| - diagnosticOptions: diagnosticOptions,
|
| - disableInlining: disableInlining || hasIncrementalSupport,
|
| - disableTypeInference: disableTypeInference || !emitJavaScript,
|
| - dumpInfo: dumpInfo,
|
| - emitJavaScript: emitJavaScript,
|
| - enableAssertMessage: enableAssertMessage,
|
| - enableConditionalDirectives: enableConditionalDirectives,
|
| - enableExperimentalMirrors: enableExperimentalMirrors,
|
| - enableMinification: enableMinification,
|
| - enableNativeLiveTypeAnalysis: enableNativeLiveTypeAnalysis,
|
| - enableTypeAssertions: enableTypeAssertions,
|
| - enableUserAssertions: enableUserAssertions,
|
| - generateCodeWithCompileTimeErrors: generateCodeWithCompileTimeErrors,
|
| - generateSourceMap: generateSourceMap,
|
| - hasIncrementalSupport: hasIncrementalSupport,
|
| - outputUri: outputUri,
|
| - platformConfigUri: platformConfigUri ?? _resolvePlatformConfig(
|
| - libraryRoot, null, !emitJavaScript, const []),
|
| - preserveComments: preserveComments,
|
| - preserveUris: preserveUris,
|
| - sourceMapUri: sourceMapUri,
|
| - strips: strips,
|
| - testMode: testMode,
|
| - trustJSInteropTypeAnnotations: trustJSInteropTypeAnnotations,
|
| - trustPrimitives: trustPrimitives,
|
| - trustTypeAnnotations: trustTypeAnnotations,
|
| - useContentSecurityPolicy: useContentSecurityPolicy,
|
| - useCpsIr: useCpsIr,
|
| - useFrequencyNamer: useFrequencyNamer,
|
| - useNewSourceInfo: useNewSourceInfo,
|
| - useStartupEmitter: useStartupEmitter,
|
| - verbose: verbose);
|
| - }
|
| -
|
| - CompilerOptions._(this.entryPoint, this.libraryRoot, this.packageRoot,
|
| - this.packageConfig, this.packagesDiscoveryProvider, this.environment,
|
| - {this.allowMockCompilation: false,
|
| - this.allowNativeExtensions: false,
|
| - this.analyzeAll: false,
|
| - this.analyzeMain: false,
|
| - this.analyzeOnly: false,
|
| - this.analyzeSignaturesOnly: false,
|
| - this.buildId: _UNDETERMINED_BUILD_ID,
|
| - this.dart2dartMultiFile: false,
|
| - this.deferredMapUri: null,
|
| - this.diagnosticOptions: null,
|
| - this.disableInlining: false,
|
| - this.disableTypeInference: false,
|
| - this.dumpInfo: false,
|
| - this.emitJavaScript: true,
|
| - this.enableAssertMessage: false,
|
| - this.enableConditionalDirectives: false,
|
| - this.enableExperimentalMirrors: false,
|
| - this.enableMinification: false,
|
| - this.enableNativeLiveTypeAnalysis: false,
|
| - this.enableTypeAssertions: false,
|
| - this.enableUserAssertions: false,
|
| - this.generateCodeWithCompileTimeErrors: false,
|
| - this.generateSourceMap: true,
|
| - this.hasIncrementalSupport: false,
|
| - this.outputUri: null,
|
| - this.platformConfigUri: null,
|
| - this.preserveComments: false,
|
| - this.preserveUris: false,
|
| - this.sourceMapUri: null,
|
| - this.strips: const [],
|
| - this.testMode: false,
|
| - this.trustJSInteropTypeAnnotations: false,
|
| - this.trustPrimitives: false,
|
| - this.trustTypeAnnotations: false,
|
| - this.useContentSecurityPolicy: false,
|
| - this.useCpsIr: false,
|
| - this.useFrequencyNamer: false,
|
| - this.useNewSourceInfo: false,
|
| - this.useStartupEmitter: false,
|
| - this.verbose: false});
|
| -}
|
| -
|
| /// Returns a future that completes to a [CompilationResult] when the Dart
|
| /// sources in [options] have been compiled.
|
| ///
|
| @@ -547,86 +126,3 @@ Future<CompilationResult> compile(
|
| });
|
| }
|
|
|
| -String _extractStringOption(
|
| - List<String> options, String prefix, String defaultValue) {
|
| - for (String option in options) {
|
| - if (option.startsWith(prefix)) {
|
| - return option.substring(prefix.length);
|
| - }
|
| - }
|
| - return defaultValue;
|
| -}
|
| -
|
| -Uri _extractUriOption(List<String> options, String prefix) {
|
| - var option = _extractStringOption(options, prefix, null);
|
| - return (option == null) ? null : Uri.parse(option);
|
| -}
|
| -
|
| -// CSV: Comma separated values.
|
| -List<String> _extractCsvOption(List<String> options, String prefix) {
|
| - for (String option in options) {
|
| - if (option.startsWith(prefix)) {
|
| - return option.substring(prefix.length).split(',');
|
| - }
|
| - }
|
| - return const <String>[];
|
| -}
|
| -
|
| -/// Extract list of comma separated values provided for [flag]. Returns an
|
| -/// empty list if [option] contain [flag] without arguments. Returns `null` if
|
| -/// [option] doesn't contain [flag] with or without arguments.
|
| -List<String> _extractOptionalCsvOption(List<String> options, String flag) {
|
| - String prefix = '$flag=';
|
| - for (String option in options) {
|
| - if (option == flag) {
|
| - return const <String>[];
|
| - }
|
| - if (option.startsWith(flag)) {
|
| - return option.substring(prefix.length).split(',');
|
| - }
|
| - }
|
| - return null;
|
| -}
|
| -
|
| -Uri _resolvePlatformConfigFromOptions(Uri libraryRoot, List<String> options) {
|
| - return _resolvePlatformConfig(libraryRoot,
|
| - _extractStringOption(options, "--platform-config=", null),
|
| - _hasOption(options, '--output-type=dart'),
|
| - _extractCsvOption(options, '--categories='));
|
| -}
|
| -
|
| -Uri _resolvePlatformConfig(Uri libraryRoot,
|
| - String platformConfigPath, bool isDart2Dart, Iterable<String> categories) {
|
| - if (platformConfigPath != null) {
|
| - return libraryRoot.resolve(platformConfigPath);
|
| - } else if (isDart2Dart) {
|
| - return libraryRoot.resolve(_dart2dartPlatform);
|
| - } else {
|
| - if (categories.length == 0) {
|
| - return libraryRoot.resolve(_clientPlatform);
|
| - }
|
| - assert(categories.length <= 2);
|
| - if (categories.contains("Client")) {
|
| - if (categories.contains("Server")) {
|
| - return libraryRoot.resolve(_sharedPlatform);
|
| - }
|
| - return libraryRoot.resolve(_clientPlatform);
|
| - }
|
| - assert(categories.contains("Server"));
|
| - return libraryRoot.resolve(_serverPlatform);
|
| - }
|
| -}
|
| -
|
| -bool _hasOption(List<String> options, String option) {
|
| - return options.indexOf(option) >= 0;
|
| -}
|
| -
|
| -/// Locations of the platform descriptor files relative to the library root.
|
| -const String _clientPlatform = "lib/dart_client.platform";
|
| -const String _serverPlatform = "lib/dart_server.platform";
|
| -const String _sharedPlatform = "lib/dart_shared.platform";
|
| -const String _dart2dartPlatform = "lib/dart2dart.platform";
|
| -
|
| -const String _UNDETERMINED_BUILD_ID = "build number could not be determined";
|
| -const bool _forceIncrementalSupport =
|
| - const bool.fromEnvironment('DART2JS_EXPERIMENTAL_INCREMENTAL_SUPPORT');
|
|
|