From d79b9d8cd2f0196caf36672e8c1522faa7867fdd Mon Sep 17 00:00:00 2001 From: Paul Berry Date: Tue, 5 Dec 2023 17:50:30 +0000 Subject: [PATCH] Add experiment flag `inference-update-3`. I plan to use this to guard my work on https://github.com/dart-lang/language/issues/3471. Bug: https://github.com/dart-lang/language/issues/3471 Change-Id: I49afae7260c14b8c6b646ccc0ee39efae3891c34 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/338649 Reviewed-by: Michael Thomsen Reviewed-by: Konstantin Shcheglov Commit-Queue: Paul Berry Reviewed-by: Johnni Winther --- .../lib/src/experiments/flags.dart | 7 +++ pkg/analyzer/lib/dart/analysis/features.dart | 3 + .../lib/src/dart/analysis/driver.dart | 2 +- .../lib/src/dart/analysis/experiments.g.dart | 59 +++++++++++++------ .../experimental_flags_generated.dart | 24 ++++++++ tools/experimental_features.yaml | 3 + 6 files changed, 80 insertions(+), 18 deletions(-) diff --git a/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart b/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart index e3b3ad00ecf..ba6683e3690 100644 --- a/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart +++ b/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart @@ -80,6 +80,13 @@ enum ExperimentalFlag { experimentEnabledVersion: const Version(3, 2), experimentReleasedVersion: const Version(3, 2)), + inferenceUpdate3( + name: 'inference-update-3', + isEnabledByDefault: false, + isExpired: false, + experimentEnabledVersion: defaultLanguageVersion, + experimentReleasedVersion: defaultLanguageVersion), + inlineClass( name: 'inline-class', isEnabledByDefault: true, diff --git a/pkg/analyzer/lib/dart/analysis/features.dart b/pkg/analyzer/lib/dart/analysis/features.dart index 6fac28e293a..ffc7d7e3874 100644 --- a/pkg/analyzer/lib/dart/analysis/features.dart +++ b/pkg/analyzer/lib/dart/analysis/features.dart @@ -40,6 +40,9 @@ abstract class Feature { /// Feature information for inference-update-2. static final inference_update_2 = ExperimentalFeatures.inference_update_2; + /// Feature information for inference-update-3. + static final inference_update_3 = ExperimentalFeatures.inference_update_3; + /// Feature information for inline classes. static final inline_class = ExperimentalFeatures.inline_class; diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart index a6cbcff219b..9e3b6b7225e 100644 --- a/pkg/analyzer/lib/src/dart/analysis/driver.dart +++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart @@ -88,7 +88,7 @@ import 'package:analyzer/src/utilities/uri_cache.dart'; // TODO(scheglov): Clean up the list of implicitly analyzed files. class AnalysisDriver implements AnalysisDriverGeneric { /// The version of data format, should be incremented on every format change. - static const int DATA_VERSION = 322; + static const int DATA_VERSION = 323; /// The number of exception contexts allowed to write. Once this field is /// zero, we stop writing any new exception contexts in this process. diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart index d5252cd9b90..80dc59e17f7 100644 --- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart +++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart @@ -27,6 +27,7 @@ final _knownFeatures = { EnableString.generic_metadata: ExperimentalFeatures.generic_metadata, EnableString.inference_update_1: ExperimentalFeatures.inference_update_1, EnableString.inference_update_2: ExperimentalFeatures.inference_update_2, + EnableString.inference_update_3: ExperimentalFeatures.inference_update_3, EnableString.inline_class: ExperimentalFeatures.inline_class, EnableString.macros: ExperimentalFeatures.macros, EnableString.named_arguments_anywhere: @@ -81,6 +82,9 @@ class EnableString { /// String to enable the experiment "inference-update-2" static const String inference_update_2 = 'inference-update-2'; + /// String to enable the experiment "inference-update-3" + static const String inference_update_3 = 'inference-update-3'; + /// String to enable the experiment "inline-class" static const String inline_class = 'inline-class'; @@ -238,8 +242,19 @@ class ExperimentalFeatures { releaseVersion: Version.parse('3.2.0'), ); - static final inline_class = ExperimentalFeature( + static final inference_update_3 = ExperimentalFeature( index: 10, + enableString: EnableString.inference_update_3, + isEnabledByDefault: IsEnabledByDefault.inference_update_3, + isExpired: IsExpired.inference_update_3, + documentation: + 'Better handling of coercions, conditional expressions, and switch expressions.', + experimentalReleaseVersion: null, + releaseVersion: null, + ); + + static final inline_class = ExperimentalFeature( + index: 11, enableString: EnableString.inline_class, isEnabledByDefault: IsEnabledByDefault.inline_class, isExpired: IsExpired.inline_class, @@ -249,7 +264,7 @@ class ExperimentalFeatures { ); static final macros = ExperimentalFeature( - index: 11, + index: 12, enableString: EnableString.macros, isEnabledByDefault: IsEnabledByDefault.macros, isExpired: IsExpired.macros, @@ -259,7 +274,7 @@ class ExperimentalFeatures { ); static final named_arguments_anywhere = ExperimentalFeature( - index: 12, + index: 13, enableString: EnableString.named_arguments_anywhere, isEnabledByDefault: IsEnabledByDefault.named_arguments_anywhere, isExpired: IsExpired.named_arguments_anywhere, @@ -269,7 +284,7 @@ class ExperimentalFeatures { ); static final native_assets = ExperimentalFeature( - index: 13, + index: 14, enableString: EnableString.native_assets, isEnabledByDefault: IsEnabledByDefault.native_assets, isExpired: IsExpired.native_assets, @@ -279,7 +294,7 @@ class ExperimentalFeatures { ); static final non_nullable = ExperimentalFeature( - index: 14, + index: 15, enableString: EnableString.non_nullable, isEnabledByDefault: IsEnabledByDefault.non_nullable, isExpired: IsExpired.non_nullable, @@ -289,7 +304,7 @@ class ExperimentalFeatures { ); static final nonfunction_type_aliases = ExperimentalFeature( - index: 15, + index: 16, enableString: EnableString.nonfunction_type_aliases, isEnabledByDefault: IsEnabledByDefault.nonfunction_type_aliases, isExpired: IsExpired.nonfunction_type_aliases, @@ -299,7 +314,7 @@ class ExperimentalFeatures { ); static final patterns = ExperimentalFeature( - index: 16, + index: 17, enableString: EnableString.patterns, isEnabledByDefault: IsEnabledByDefault.patterns, isExpired: IsExpired.patterns, @@ -309,7 +324,7 @@ class ExperimentalFeatures { ); static final records = ExperimentalFeature( - index: 17, + index: 18, enableString: EnableString.records, isEnabledByDefault: IsEnabledByDefault.records, isExpired: IsExpired.records, @@ -319,7 +334,7 @@ class ExperimentalFeatures { ); static final resource_identifiers = ExperimentalFeature( - index: 18, + index: 19, enableString: EnableString.resource_identifiers, isEnabledByDefault: IsEnabledByDefault.resource_identifiers, isExpired: IsExpired.resource_identifiers, @@ -329,7 +344,7 @@ class ExperimentalFeatures { ); static final sealed_class = ExperimentalFeature( - index: 19, + index: 20, enableString: EnableString.sealed_class, isEnabledByDefault: IsEnabledByDefault.sealed_class, isExpired: IsExpired.sealed_class, @@ -339,7 +354,7 @@ class ExperimentalFeatures { ); static final set_literals = ExperimentalFeature( - index: 20, + index: 21, enableString: EnableString.set_literals, isEnabledByDefault: IsEnabledByDefault.set_literals, isExpired: IsExpired.set_literals, @@ -349,7 +364,7 @@ class ExperimentalFeatures { ); static final spread_collections = ExperimentalFeature( - index: 21, + index: 22, enableString: EnableString.spread_collections, isEnabledByDefault: IsEnabledByDefault.spread_collections, isExpired: IsExpired.spread_collections, @@ -359,7 +374,7 @@ class ExperimentalFeatures { ); static final super_parameters = ExperimentalFeature( - index: 22, + index: 23, enableString: EnableString.super_parameters, isEnabledByDefault: IsEnabledByDefault.super_parameters, isExpired: IsExpired.super_parameters, @@ -369,7 +384,7 @@ class ExperimentalFeatures { ); static final test_experiment = ExperimentalFeature( - index: 23, + index: 24, enableString: EnableString.test_experiment, isEnabledByDefault: IsEnabledByDefault.test_experiment, isExpired: IsExpired.test_experiment, @@ -380,7 +395,7 @@ class ExperimentalFeatures { ); static final triple_shift = ExperimentalFeature( - index: 24, + index: 25, enableString: EnableString.triple_shift, isEnabledByDefault: IsEnabledByDefault.triple_shift, isExpired: IsExpired.triple_shift, @@ -390,7 +405,7 @@ class ExperimentalFeatures { ); static final unnamed_libraries = ExperimentalFeature( - index: 25, + index: 26, enableString: EnableString.unnamed_libraries, isEnabledByDefault: IsEnabledByDefault.unnamed_libraries, isExpired: IsExpired.unnamed_libraries, @@ -400,7 +415,7 @@ class ExperimentalFeatures { ); static final variance = ExperimentalFeature( - index: 26, + index: 27, enableString: EnableString.variance, isEnabledByDefault: IsEnabledByDefault.variance, isExpired: IsExpired.variance, @@ -443,6 +458,9 @@ class IsEnabledByDefault { /// Default state of the experiment "inference-update-2" static const bool inference_update_2 = true; + /// Default state of the experiment "inference-update-3" + static const bool inference_update_3 = false; + /// Default state of the experiment "inline-class" static const bool inline_class = true; @@ -529,6 +547,9 @@ class IsExpired { /// Expiration status of the experiment "inference-update-2" static const bool inference_update_2 = false; + /// Expiration status of the experiment "inference-update-3" + static const bool inference_update_3 = false; + /// Expiration status of the experiment "inline-class" static const bool inline_class = false; @@ -618,6 +639,10 @@ mixin _CurrentState { bool get inference_update_2 => isEnabled(ExperimentalFeatures.inference_update_2); + /// Current state for the flag "inference-update-3" + bool get inference_update_3 => + isEnabled(ExperimentalFeatures.inference_update_3); + /// Current state for the flag "inline-class" bool get inline_class => isEnabled(ExperimentalFeatures.inline_class); diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart index 4566eea5cde..9835fcc0699 100644 --- a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart +++ b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart @@ -139,6 +139,14 @@ class ExperimentalFlag { experimentEnabledVersion: const Version(3, 2), experimentReleasedVersion: const Version(3, 2)); + static const ExperimentalFlag inferenceUpdate3 = const ExperimentalFlag( + name: 'inference-update-3', + isEnabledByDefault: false, + isExpired: false, + enabledVersion: defaultLanguageVersion, + experimentEnabledVersion: defaultLanguageVersion, + experimentReleasedVersion: defaultLanguageVersion); + static const ExperimentalFlag inlineClass = const ExperimentalFlag( name: 'inline-class', isEnabledByDefault: true, @@ -366,6 +374,10 @@ class GlobalFeatures { GlobalFeature get inferenceUpdate2 => _inferenceUpdate2 ??= _computeGlobalFeature(ExperimentalFlag.inferenceUpdate2); + GlobalFeature? _inferenceUpdate3; + GlobalFeature get inferenceUpdate3 => _inferenceUpdate3 ??= + _computeGlobalFeature(ExperimentalFlag.inferenceUpdate3); + GlobalFeature? _inlineClass; GlobalFeature get inlineClass => _inlineClass ??= _computeGlobalFeature(ExperimentalFlag.inlineClass); @@ -504,6 +516,11 @@ class LibraryFeatures { _inferenceUpdate2 ??= globalFeatures._computeLibraryFeature( ExperimentalFlag.inferenceUpdate2, canonicalUri, libraryVersion); + LibraryFeature? _inferenceUpdate3; + LibraryFeature get inferenceUpdate3 => + _inferenceUpdate3 ??= globalFeatures._computeLibraryFeature( + ExperimentalFlag.inferenceUpdate3, canonicalUri, libraryVersion); + LibraryFeature? _inlineClass; LibraryFeature get inlineClass => _inlineClass ??= globalFeatures._computeLibraryFeature( @@ -617,6 +634,8 @@ class LibraryFeatures { return inferenceUpdate1; case shared.ExperimentalFlag.inferenceUpdate2: return inferenceUpdate2; + case shared.ExperimentalFlag.inferenceUpdate3: + return inferenceUpdate3; case shared.ExperimentalFlag.inlineClass: return inlineClass; case shared.ExperimentalFlag.macros: @@ -682,6 +701,8 @@ ExperimentalFlag? parseExperimentalFlag(String flag) { return ExperimentalFlag.inferenceUpdate1; case "inference-update-2": return ExperimentalFlag.inferenceUpdate2; + case "inference-update-3": + return ExperimentalFlag.inferenceUpdate3; case "inline-class": return ExperimentalFlag.inlineClass; case "macros": @@ -743,6 +764,8 @@ final Map defaultExperimentalFlags = { ExperimentalFlag.inferenceUpdate1.isEnabledByDefault, ExperimentalFlag.inferenceUpdate2: ExperimentalFlag.inferenceUpdate2.isEnabledByDefault, + ExperimentalFlag.inferenceUpdate3: + ExperimentalFlag.inferenceUpdate3.isEnabledByDefault, ExperimentalFlag.inlineClass: ExperimentalFlag.inlineClass.isEnabledByDefault, ExperimentalFlag.macros: ExperimentalFlag.macros.isEnabledByDefault, ExperimentalFlag.namedArgumentsAnywhere: @@ -796,6 +819,7 @@ const Map sharedExperimentalFlags = { shared.ExperimentalFlag.genericMetadata: ExperimentalFlag.genericMetadata, shared.ExperimentalFlag.inferenceUpdate1: ExperimentalFlag.inferenceUpdate1, shared.ExperimentalFlag.inferenceUpdate2: ExperimentalFlag.inferenceUpdate2, + shared.ExperimentalFlag.inferenceUpdate3: ExperimentalFlag.inferenceUpdate3, shared.ExperimentalFlag.inlineClass: ExperimentalFlag.inlineClass, shared.ExperimentalFlag.macros: ExperimentalFlag.macros, shared.ExperimentalFlag.namedArgumentsAnywhere: diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml index c9da51bf5b3..932fb74206d 100644 --- a/tools/experimental_features.yaml +++ b/tools/experimental_features.yaml @@ -128,6 +128,9 @@ features: resource-identifiers: help: "Output arguments used by static functions." + inference-update-3: + help: "Better handling of coercions, conditional expressions, and switch expressions." + # Experiment flag only used for testing. test-experiment: help: >-