diff --git a/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart b/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart index af5cd9622cf..fbbb3b2f8fd 100644 --- a/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart +++ b/pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart @@ -6,6 +6,7 @@ // // Instead modify 'tools/experimental_features.yaml' and run // 'dart pkg/front_end/tool/fasta.dart generate-experimental-flags' to update. +const Version defaultLanguageVersion = const Version(3, 2); /// Enum for experimental flags shared between the CFE and the analyzer. enum ExperimentalFlag { @@ -20,8 +21,8 @@ enum ExperimentalFlag { name: 'const-functions', isEnabledByDefault: false, isExpired: false, - experimentEnabledVersion: const Version(3, 2), - experimentReleasedVersion: const Version(3, 2)), + experimentEnabledVersion: defaultLanguageVersion, + experimentReleasedVersion: defaultLanguageVersion), constantUpdate2018( name: 'constant-update-2018', @@ -83,15 +84,15 @@ enum ExperimentalFlag { name: 'inline-class', isEnabledByDefault: false, isExpired: false, - experimentEnabledVersion: const Version(3, 2), - experimentReleasedVersion: const Version(3, 2)), + experimentEnabledVersion: defaultLanguageVersion, + experimentReleasedVersion: defaultLanguageVersion), macros( name: 'macros', isEnabledByDefault: false, isExpired: false, - experimentEnabledVersion: const Version(3, 2), - experimentReleasedVersion: const Version(3, 2)), + experimentEnabledVersion: defaultLanguageVersion, + experimentReleasedVersion: defaultLanguageVersion), namedArgumentsAnywhere( name: 'named-arguments-anywhere', @@ -104,8 +105,8 @@ enum ExperimentalFlag { name: 'native-assets', isEnabledByDefault: false, isExpired: false, - experimentEnabledVersion: const Version(3, 2), - experimentReleasedVersion: const Version(3, 2)), + experimentEnabledVersion: defaultLanguageVersion, + experimentReleasedVersion: defaultLanguageVersion), nonNullable( name: 'non-nullable', @@ -167,8 +168,8 @@ enum ExperimentalFlag { name: 'test-experiment', isEnabledByDefault: false, isExpired: false, - experimentEnabledVersion: const Version(3, 2), - experimentReleasedVersion: const Version(3, 2)), + experimentEnabledVersion: defaultLanguageVersion, + experimentReleasedVersion: defaultLanguageVersion), tripleShift( name: 'triple-shift', @@ -188,8 +189,8 @@ enum ExperimentalFlag { name: 'variance', isEnabledByDefault: false, isExpired: false, - experimentEnabledVersion: const Version(3, 2), - experimentReleasedVersion: const Version(3, 2)), + experimentEnabledVersion: defaultLanguageVersion, + experimentReleasedVersion: defaultLanguageVersion), ; final String name; diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags.dart index 236335995e3..3c8652faad0 100644 --- a/pkg/front_end/lib/src/api_prototype/experimental_flags.dart +++ b/pkg/front_end/lib/src/api_prototype/experimental_flags.dart @@ -4,6 +4,8 @@ import 'package:_fe_analyzer_shared/src/experiments/flags.dart' as shared; import 'package:kernel/kernel.dart' show Version; +import 'package:kernel/default_language_version.dart' + show defaultLanguageVersion; part 'experimental_flags_generated.dart'; 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 ad6218ea6f8..4fafdd8fbd0 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 @@ -71,9 +71,9 @@ class ExperimentalFlag { name: 'const-functions', isEnabledByDefault: false, isExpired: false, - enabledVersion: const Version(3, 2), - experimentEnabledVersion: const Version(3, 2), - experimentReleasedVersion: const Version(3, 2)); + enabledVersion: defaultLanguageVersion, + experimentEnabledVersion: defaultLanguageVersion, + experimentReleasedVersion: defaultLanguageVersion); static const ExperimentalFlag constantUpdate2018 = const ExperimentalFlag( name: 'constant-update-2018', @@ -143,17 +143,17 @@ class ExperimentalFlag { name: 'inline-class', isEnabledByDefault: false, isExpired: false, - enabledVersion: const Version(3, 2), - experimentEnabledVersion: const Version(3, 2), - experimentReleasedVersion: const Version(3, 2)); + enabledVersion: defaultLanguageVersion, + experimentEnabledVersion: defaultLanguageVersion, + experimentReleasedVersion: defaultLanguageVersion); static const ExperimentalFlag macros = const ExperimentalFlag( name: 'macros', isEnabledByDefault: false, isExpired: false, - enabledVersion: const Version(3, 2), - experimentEnabledVersion: const Version(3, 2), - experimentReleasedVersion: const Version(3, 2)); + enabledVersion: defaultLanguageVersion, + experimentEnabledVersion: defaultLanguageVersion, + experimentReleasedVersion: defaultLanguageVersion); static const ExperimentalFlag namedArgumentsAnywhere = const ExperimentalFlag( name: 'named-arguments-anywhere', @@ -167,9 +167,9 @@ class ExperimentalFlag { name: 'native-assets', isEnabledByDefault: false, isExpired: false, - enabledVersion: const Version(3, 2), - experimentEnabledVersion: const Version(3, 2), - experimentReleasedVersion: const Version(3, 2)); + enabledVersion: defaultLanguageVersion, + experimentEnabledVersion: defaultLanguageVersion, + experimentReleasedVersion: defaultLanguageVersion); static const ExperimentalFlag nonNullable = const ExperimentalFlag( name: 'non-nullable', @@ -239,9 +239,9 @@ class ExperimentalFlag { name: 'test-experiment', isEnabledByDefault: false, isExpired: false, - enabledVersion: const Version(3, 2), - experimentEnabledVersion: const Version(3, 2), - experimentReleasedVersion: const Version(3, 2)); + enabledVersion: defaultLanguageVersion, + experimentEnabledVersion: defaultLanguageVersion, + experimentReleasedVersion: defaultLanguageVersion); static const ExperimentalFlag tripleShift = const ExperimentalFlag( name: 'triple-shift', @@ -263,9 +263,9 @@ class ExperimentalFlag { name: 'variance', isEnabledByDefault: false, isExpired: false, - enabledVersion: const Version(3, 2), - experimentEnabledVersion: const Version(3, 2), - experimentReleasedVersion: const Version(3, 2)); + enabledVersion: defaultLanguageVersion, + experimentEnabledVersion: defaultLanguageVersion, + experimentReleasedVersion: defaultLanguageVersion); } /// Interface for accessing the global state of experimental features. diff --git a/pkg/front_end/tool/_fasta/generate_experimental_flags.dart b/pkg/front_end/tool/_fasta/generate_experimental_flags.dart index 21eeeae0f76..bfb8e445aa8 100644 --- a/pkg/front_end/tool/_fasta/generate_experimental_flags.dart +++ b/pkg/front_end/tool/_fasta/generate_experimental_flags.dart @@ -64,15 +64,6 @@ String generateFeAnalyzerSharedFile(Uri repoDir) { Map yaml = loadYaml(new File.fromUri(yamlFile).readAsStringSync()); - int currentVersionMajor; - int currentVersionMinor; - { - String currentVersion = getAsVersionNumberString(yaml['current-version'])!; - List split = currentVersion.split("."); - currentVersionMajor = int.parse(split[0]); - currentVersionMinor = int.parse(split[1]); - } - StringBuffer sb = new StringBuffer(); sb.write(''' @@ -84,6 +75,18 @@ String generateFeAnalyzerSharedFile(Uri repoDir) { // // Instead modify 'tools/experimental_features.yaml' and run // 'dart pkg/front_end/tool/fasta.dart generate-experimental-flags' to update. +'''); + + int currentVersionMajor; + int currentVersionMinor; + { + String currentVersion = getAsVersionNumberString(yaml['current-version'])!; + List split = currentVersion.split("."); + currentVersionMajor = int.parse(split[0]); + currentVersionMinor = int.parse(split[1]); + } + sb.write(''' +const Version defaultLanguageVersion = const Version($currentVersionMajor, $currentVersionMinor); /// Enum for experimental flags shared between the CFE and the analyzer. enum ExperimentalFlag { @@ -105,17 +108,16 @@ enum ExperimentalFlag { List keys = features.keys.toList()..sort(); for (String key in keys) { String identifier = keyToIdentifier(key); - int enabledInMajor; - int enabledInMinor; + String enabledInVersion; String? enabledIn = getAsVersionNumberString((features[key] as YamlMap)['enabledIn']); if (enabledIn == null) { - enabledInMajor = currentVersionMajor; - enabledInMinor = currentVersionMinor; + enabledInVersion = 'defaultLanguageVersion'; } else { List split = enabledIn.split("."); - enabledInMajor = int.parse(split[0]); - enabledInMinor = int.parse(split[1]); + int enabledInMajor = int.parse(split[0]); + int enabledInMinor = int.parse(split[1]); + enabledInVersion = 'const Version($enabledInMajor, $enabledInMinor)'; } bool? expired = (features[key] as YamlMap)['expired']; bool shipped = (features[key] as YamlMap)['enabledIn'] != null; @@ -124,21 +126,21 @@ enum ExperimentalFlag { throw 'Cannot mark shipped feature "$key" as "expired: false"'; } } - int releaseMajor; - int releaseMinor; + String releasedInVersion; String? experimentalReleaseVersion = getAsVersionNumberString( (features[key] as YamlMap)['experimentalReleaseVersion']); if (experimentalReleaseVersion != null) { List split = experimentalReleaseVersion.split("."); - releaseMajor = int.parse(split[0]); - releaseMinor = int.parse(split[1]); + int releaseMajor = int.parse(split[0]); + int releaseMinor = int.parse(split[1]); + releasedInVersion = 'const Version($releaseMajor, $releaseMinor)'; } else if (enabledIn != null) { List split = enabledIn.split("."); - releaseMajor = int.parse(split[0]); - releaseMinor = int.parse(split[1]); + int releaseMajor = int.parse(split[0]); + int releaseMinor = int.parse(split[1]); + releasedInVersion = 'const Version($releaseMajor, $releaseMinor)'; } else { - releaseMajor = currentVersionMajor; - releaseMinor = currentVersionMinor; + releasedInVersion = 'defaultLanguageVersion'; } sb.writeln(''' @@ -146,8 +148,8 @@ enum ExperimentalFlag { name: '$key', isEnabledByDefault: $shipped, isExpired: ${expired == true}, - experimentEnabledVersion: const Version($enabledInMajor, $enabledInMinor), - experimentReleasedVersion: const Version($releaseMajor, $releaseMinor)), + experimentEnabledVersion: $enabledInVersion, + experimentReleasedVersion: $releasedInVersion), '''); } sb.write(''' @@ -211,7 +213,7 @@ String generateKernelFile(Uri repoDir) { import "ast.dart"; -Version defaultLanguageVersion = const Version($currentVersionMajor, $currentVersionMinor); +const Version defaultLanguageVersion = const Version($currentVersionMajor, $currentVersionMinor); '''); return new DartFormatter().format("$sb"); @@ -222,15 +224,6 @@ String generateCfeFile(Uri repoDir) { Map yaml = loadYaml(new File.fromUri(yamlFile).readAsStringSync()); - int currentVersionMajor; - int currentVersionMinor; - { - String currentVersion = getAsVersionNumberString(yaml['current-version'])!; - List split = currentVersion.split("."); - currentVersionMajor = int.parse(split[0]); - currentVersionMinor = int.parse(split[1]); - } - StringBuffer sb = new StringBuffer(); sb.write(''' @@ -307,17 +300,16 @@ class ExperimentalFlag { '''); for (String key in keys) { String identifier = keyToIdentifier(key); - int enabledInMajor; - int enabledInMinor; + String enabledInVersion; String? enabledIn = getAsVersionNumberString((features[key] as YamlMap)['enabledIn']); if (enabledIn == null) { - enabledInMajor = currentVersionMajor; - enabledInMinor = currentVersionMinor; + enabledInVersion = 'defaultLanguageVersion'; } else { List split = enabledIn.split("."); - enabledInMajor = int.parse(split[0]); - enabledInMinor = int.parse(split[1]); + int enabledInMajor = int.parse(split[0]); + int enabledInMinor = int.parse(split[1]); + enabledInVersion = 'const Version($enabledInMajor, $enabledInMinor)'; } bool? expired = (features[key] as YamlMap)['expired']; bool shipped = (features[key] as YamlMap)['enabledIn'] != null; @@ -326,21 +318,21 @@ class ExperimentalFlag { throw 'Cannot mark shipped feature "$key" as "expired: false"'; } } - int releaseMajor; - int releaseMinor; + String releasedInVersion; String? experimentalReleaseVersion = getAsVersionNumberString( (features[key] as YamlMap)['experimentalReleaseVersion']); if (experimentalReleaseVersion != null) { List split = experimentalReleaseVersion.split("."); - releaseMajor = int.parse(split[0]); - releaseMinor = int.parse(split[1]); + int releaseMajor = int.parse(split[0]); + int releaseMinor = int.parse(split[1]); + releasedInVersion = 'const Version($releaseMajor, $releaseMinor)'; } else if (enabledIn != null) { List split = enabledIn.split("."); - releaseMajor = int.parse(split[0]); - releaseMinor = int.parse(split[1]); + int releaseMajor = int.parse(split[0]); + int releaseMinor = int.parse(split[1]); + releasedInVersion = 'const Version($releaseMajor, $releaseMinor)'; } else { - releaseMajor = currentVersionMajor; - releaseMinor = currentVersionMinor; + releasedInVersion = 'defaultLanguageVersion'; } sb.writeln(''' @@ -349,9 +341,9 @@ class ExperimentalFlag { name: '$key', isEnabledByDefault: $shipped, isExpired: ${expired == true}, - enabledVersion: const Version($enabledInMajor, $enabledInMinor), - experimentEnabledVersion: const Version($enabledInMajor, $enabledInMinor), - experimentReleasedVersion: const Version($releaseMajor, $releaseMinor)); + enabledVersion: $enabledInVersion, + experimentEnabledVersion: $enabledInVersion, + experimentReleasedVersion: $releasedInVersion); '''); } sb.write(''' diff --git a/pkg/kernel/lib/default_language_version.dart b/pkg/kernel/lib/default_language_version.dart index f35e3486d19..20143f19866 100644 --- a/pkg/kernel/lib/default_language_version.dart +++ b/pkg/kernel/lib/default_language_version.dart @@ -9,4 +9,4 @@ import "ast.dart"; -Version defaultLanguageVersion = const Version(3, 2); +const Version defaultLanguageVersion = const Version(3, 2);