From 38f62d215947713edfbf5b657310ddb72c57cba9 Mon Sep 17 00:00:00 2001 From: Sigmund Cherem Date: Wed, 13 Sep 2023 16:23:44 +0000 Subject: [PATCH] [cfe,analyzer] tweak to generated files to reduce chance of conflict. This updates the generator of experimental flags to only refer to one location for the current default language version. Semantically the change does nothing, but it could make CLs that bump a version smaller and easier to revert/patch. Change-Id: I1c18c8e8105dfb33a302949ad2cfa159dae2addf Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/325660 Reviewed-by: Alexander Thomas Reviewed-by: Paul Berry Commit-Queue: Sigmund Cherem --- .../lib/src/experiments/flags.dart | 25 ++--- .../src/api_prototype/experimental_flags.dart | 2 + .../experimental_flags_generated.dart | 36 +++---- .../_fasta/generate_experimental_flags.dart | 96 +++++++++---------- pkg/kernel/lib/default_language_version.dart | 2 +- 5 files changed, 78 insertions(+), 83 deletions(-) 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);