Skip to content

Commit c008c15

Browse files
srawlinsCommit Queue
authored andcommitted
Enable feature digit-separators
This CL makes the `digit-separators` feature enabled by default in Dart Language Version 3.6. Tested: Presubmit bots Change-Id: If0776e96066ecaad3baa7f92fce167317fb976f2 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/379660 Reviewed-by: Leaf Petersen <[email protected]> Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Samuel Rawlins <[email protected]>
1 parent c9cb779 commit c008c15

File tree

9 files changed

+48
-14
lines changed

9 files changed

+48
-14
lines changed

CHANGELOG.md

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,30 @@
22

33
### Language
44

5+
Dart 3.6 adds [digit separators] to the language. To use them, set your
6+
package's [SDK constraint][language version] lower bound to 3.6 or greater
7+
(`sdk: '^3.6.0'`).
8+
9+
#### Digit separators
10+
11+
[digit separators]: https://github.com/dart-lang/language/issues/2
12+
13+
Digits in number literals (decimal integer literals, double literals,
14+
scientific notation literals, and hexadecimal literals) can now include
15+
underscores between digits, as "digit separators." The separators do not change
16+
the value of a literal, but can serve to make the number more readable.
17+
18+
```dart
19+
100__000_000__000_000__000_000 // one hundred million million millions!
20+
0x4000_0000_0000_0000
21+
0.000_000_000_01
22+
0x00_14_22_01_23_45 // MAC address
23+
```
24+
25+
Separators are not allowed at the start of a number (this would be parsed as an
26+
identifier), at the end of a number, or adjacent to another character in a
27+
number, like `.`, `x`, or the `e` in scientific notation.
28+
529
- **Breaking Change** [#56065][]: The context used by the compiler and analyzer
630
to perform type inference on the operand of a `throw` expression has been
731
changed from the "unknown type" to `Object`. This makes the type system more

pkg/_fe_analyzer_shared/lib/src/experiments/flags.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,10 @@ enum ExperimentalFlag {
5454

5555
digitSeparators(
5656
name: 'digit-separators',
57-
isEnabledByDefault: false,
57+
isEnabledByDefault: true,
5858
isExpired: false,
59-
experimentEnabledVersion: defaultLanguageVersion,
60-
experimentReleasedVersion: defaultLanguageVersion),
59+
experimentEnabledVersion: const Version(3, 6),
60+
experimentReleasedVersion: const Version(3, 6)),
6161

6262
enhancedEnums(
6363
name: 'enhanced-enums',

pkg/analyzer/lib/src/dart/analysis/experiments.g.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ class ExperimentalFeatures {
227227
isExpired: IsExpired.digit_separators,
228228
documentation: 'Number literals with digit separators.',
229229
experimentalReleaseVersion: null,
230-
releaseVersion: null,
230+
releaseVersion: Version.parse('3.6.0'),
231231
);
232232

233233
static final enhanced_enums = ExperimentalFeature(
@@ -518,7 +518,7 @@ class IsEnabledByDefault {
518518
static const bool control_flow_collections = true;
519519

520520
/// Default state of the experiment "digit-separators"
521-
static const bool digit_separators = false;
521+
static const bool digit_separators = true;
522522

523523
/// Default state of the experiment "enhanced-enums"
524524
static const bool enhanced_enums = true;

pkg/analyzer/test/src/dart/analysis/analysis_context_collection_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ analysisOptions
333333
constant-update-2018
334334
constructor-tearoffs
335335
control-flow-collections
336+
digit-separators
336337
enhanced-enums
337338
extension-methods
338339
generic-metadata

pkg/analyzer_utilities/lib/test/experiments/experiments.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ import 'package:analyzer/dart/analysis/features.dart';
1616
/// whether a given flag is already included.
1717
List<String> experimentsForTests = [
1818
Feature.augmentations.enableString,
19-
Feature.digit_separators.enableString,
2019
Feature.enhanced_parts.enableString,
2120
Feature.macros.enableString,
2221
Feature.null_aware_elements.enableString,

pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,11 @@ class ExperimentalFlag {
109109

110110
static const ExperimentalFlag digitSeparators = const ExperimentalFlag(
111111
name: 'digit-separators',
112-
isEnabledByDefault: false,
112+
isEnabledByDefault: true,
113113
isExpired: false,
114-
enabledVersion: defaultLanguageVersion,
115-
experimentEnabledVersion: defaultLanguageVersion,
116-
experimentReleasedVersion: defaultLanguageVersion);
114+
enabledVersion: const Version(3, 6),
115+
experimentEnabledVersion: const Version(3, 6),
116+
experimentReleasedVersion: const Version(3, 6));
117117

118118
static const ExperimentalFlag enhancedEnums = const ExperimentalFlag(
119119
name: 'enhanced-enums',

runtime/vm/experimental_features.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ namespace dart {
1616

1717
bool GetExperimentalFeatureDefault(ExperimentalFeature feature) {
1818
constexpr bool kFeatureValues[] = {
19-
true, true, true, true, true, true, true, true, true, true, true,
19+
true, true, true, true, true, true, true, true, true, true, true, true,
2020
true, true, true, true, true, true, true, true, true, true, true,
2121
};
2222
ASSERT(static_cast<size_t>(feature) < ARRAY_SIZE(kFeatureValues));
@@ -25,6 +25,7 @@ bool GetExperimentalFeatureDefault(ExperimentalFeature feature) {
2525

2626
const char* GetExperimentalFeatureName(ExperimentalFeature feature) {
2727
constexpr const char* kFeatureNames[] = {
28+
"digit-separators",
2829
"inference-update-3",
2930
"inline-class",
3031
"inference-update-2",

runtime/vm/experimental_features.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace dart {
1313

1414
enum class ExperimentalFeature {
15+
digit_separators,
1516
inference_update_3,
1617
inline_class,
1718
inference_update_2,

tools/experimental_features.yaml

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,6 @@ features:
131131
wildcard-variables:
132132
help: "Local declarations and parameters named `_` are non-binding."
133133

134-
digit-separators:
135-
help: "Number literals with digit separators."
136-
137134
null-aware-elements:
138135
help: "Null-aware elements and map entries in collections."
139136

@@ -156,6 +153,17 @@ features:
156153
# Shipped flags should be marked retired the following stable release.
157154
#
158155

156+
digit-separators:
157+
enabledIn: '3.6.0'
158+
validation: |
159+
main() {
160+
int x = 1_000_000;
161+
int y = 0xff_ff_ff;
162+
double z = 1__2.3__4e5__6;
163+
print('feature enabled');
164+
}
165+
help: "Number literals with digit separators."
166+
159167
inference-update-3: # See https://github.com/dart-lang/language/issues/1618
160168
enabledIn: '3.4.0'
161169
validation: |

0 commit comments

Comments
 (0)