Version 2.19.0-278.0.dev
Merge 99f60a5e662a7951dd5ab3bf0d4ba76e2d18db5d into dev
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index 18513d5..ea4f42d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -282,7 +282,7 @@
isEnabledByDefault: IsEnabledByDefault.records,
isExpired: IsExpired.records,
documentation: 'Records',
- experimentalReleaseVersion: null,
+ experimentalReleaseVersion: Version.parse('2.19.0'),
releaseVersion: null,
);
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 7d6aea0..d249bd7 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
@@ -644,185 +644,184 @@
ExperimentalFlag.variance: ExperimentalFlag.variance.isEnabledByDefault,
};
const AllowedExperimentalFlags defaultAllowedExperimentalFlags =
- const AllowedExperimentalFlags(
- sdkDefaultExperiments: {},
- sdkLibraryExperiments: {},
- packageExperiments: {
- "async": {
- ExperimentalFlag.nonNullable,
- },
- "boolean_selector": {
- ExperimentalFlag.nonNullable,
- },
- "characters": {
- ExperimentalFlag.nonNullable,
- },
- "clock": {
- ExperimentalFlag.nonNullable,
- },
- "collection": {
- ExperimentalFlag.nonNullable,
- },
- "connectivity": {
- ExperimentalFlag.nonNullable,
- },
- "connectivity_platform_interface": {
- ExperimentalFlag.nonNullable,
- },
- "convert": {
- ExperimentalFlag.nonNullable,
- },
- "crypto": {
- ExperimentalFlag.nonNullable,
- },
- "csslib": {
- ExperimentalFlag.nonNullable,
- },
- "dart_internal": {
- ExperimentalFlag.nonNullable,
- },
- "device_info": {
- ExperimentalFlag.nonNullable,
- },
- "device_info_platform_interface": {
- ExperimentalFlag.nonNullable,
- },
- "fake_async": {
- ExperimentalFlag.nonNullable,
- },
- "file": {
- ExperimentalFlag.nonNullable,
- },
- "fixnum": {
- ExperimentalFlag.nonNullable,
- },
- "flutter": {
- ExperimentalFlag.nonNullable,
- },
- "flutter_driver": {
- ExperimentalFlag.nonNullable,
- },
- "flutter_test": {
- ExperimentalFlag.nonNullable,
- },
- "flutter_goldens": {
- ExperimentalFlag.nonNullable,
- },
- "flutter_goldens_client": {
- ExperimentalFlag.nonNullable,
- },
- "http": {
- ExperimentalFlag.nonNullable,
- },
- "http_parser": {
- ExperimentalFlag.nonNullable,
- },
- "intl": {
- ExperimentalFlag.nonNullable,
- },
- "js": {
- ExperimentalFlag.nonNullable,
- },
- "logging": {
- ExperimentalFlag.nonNullable,
- },
- "matcher": {
- ExperimentalFlag.nonNullable,
- },
- "meta": {
- ExperimentalFlag.nonNullable,
- },
- "native_stack_traces": {
- ExperimentalFlag.nonNullable,
- },
- "observatory": {
- ExperimentalFlag.nonNullable,
- },
- "observatory_test_package": {
- ExperimentalFlag.nonNullable,
- },
- "path": {
- ExperimentalFlag.nonNullable,
- },
- "pedantic": {
- ExperimentalFlag.nonNullable,
- },
- "platform": {
- ExperimentalFlag.nonNullable,
- },
- "plugin_platform_interface": {
- ExperimentalFlag.nonNullable,
- },
- "pool": {
- ExperimentalFlag.nonNullable,
- },
- "process": {
- ExperimentalFlag.nonNullable,
- },
- "pub_semver": {
- ExperimentalFlag.nonNullable,
- },
- "sky_engine": {
- ExperimentalFlag.nonNullable,
- },
- "source_maps": {
- ExperimentalFlag.nonNullable,
- },
- "source_map_stack_trace": {
- ExperimentalFlag.nonNullable,
- },
- "source_span": {
- ExperimentalFlag.nonNullable,
- },
- "stack_trace": {
- ExperimentalFlag.nonNullable,
- },
- "stream_channel": {
- ExperimentalFlag.nonNullable,
- },
- "string_scanner": {
- ExperimentalFlag.nonNullable,
- },
- "term_glyph": {
- ExperimentalFlag.nonNullable,
- },
- "test": {
- ExperimentalFlag.nonNullable,
- },
- "test_api": {
- ExperimentalFlag.nonNullable,
- },
- "test_core": {
- ExperimentalFlag.nonNullable,
- },
- "typed_data": {
- ExperimentalFlag.nonNullable,
- },
- "url_launcher": {
- ExperimentalFlag.nonNullable,
- },
- "url_launcher_linux": {
- ExperimentalFlag.nonNullable,
- },
- "url_launcher_macos": {
- ExperimentalFlag.nonNullable,
- },
- "url_launcher_platform_interface": {
- ExperimentalFlag.nonNullable,
- },
- "url_launcher_windows": {
- ExperimentalFlag.nonNullable,
- },
- "vector_math": {
- ExperimentalFlag.nonNullable,
- },
- "video_player": {
- ExperimentalFlag.nonNullable,
- },
- "video_player_platform_interface": {
- ExperimentalFlag.nonNullable,
- },
- "video_player_web": {
- ExperimentalFlag.nonNullable,
- },
- });
+ const AllowedExperimentalFlags(sdkDefaultExperiments: {
+ ExperimentalFlag.records,
+}, sdkLibraryExperiments: {}, packageExperiments: {
+ "async": {
+ ExperimentalFlag.nonNullable,
+ },
+ "boolean_selector": {
+ ExperimentalFlag.nonNullable,
+ },
+ "characters": {
+ ExperimentalFlag.nonNullable,
+ },
+ "clock": {
+ ExperimentalFlag.nonNullable,
+ },
+ "collection": {
+ ExperimentalFlag.nonNullable,
+ },
+ "connectivity": {
+ ExperimentalFlag.nonNullable,
+ },
+ "connectivity_platform_interface": {
+ ExperimentalFlag.nonNullable,
+ },
+ "convert": {
+ ExperimentalFlag.nonNullable,
+ },
+ "crypto": {
+ ExperimentalFlag.nonNullable,
+ },
+ "csslib": {
+ ExperimentalFlag.nonNullable,
+ },
+ "dart_internal": {
+ ExperimentalFlag.nonNullable,
+ },
+ "device_info": {
+ ExperimentalFlag.nonNullable,
+ },
+ "device_info_platform_interface": {
+ ExperimentalFlag.nonNullable,
+ },
+ "fake_async": {
+ ExperimentalFlag.nonNullable,
+ },
+ "file": {
+ ExperimentalFlag.nonNullable,
+ },
+ "fixnum": {
+ ExperimentalFlag.nonNullable,
+ },
+ "flutter": {
+ ExperimentalFlag.nonNullable,
+ },
+ "flutter_driver": {
+ ExperimentalFlag.nonNullable,
+ },
+ "flutter_test": {
+ ExperimentalFlag.nonNullable,
+ },
+ "flutter_goldens": {
+ ExperimentalFlag.nonNullable,
+ },
+ "flutter_goldens_client": {
+ ExperimentalFlag.nonNullable,
+ },
+ "http": {
+ ExperimentalFlag.nonNullable,
+ },
+ "http_parser": {
+ ExperimentalFlag.nonNullable,
+ },
+ "intl": {
+ ExperimentalFlag.nonNullable,
+ },
+ "js": {
+ ExperimentalFlag.nonNullable,
+ },
+ "logging": {
+ ExperimentalFlag.nonNullable,
+ },
+ "matcher": {
+ ExperimentalFlag.nonNullable,
+ },
+ "meta": {
+ ExperimentalFlag.nonNullable,
+ },
+ "native_stack_traces": {
+ ExperimentalFlag.nonNullable,
+ },
+ "observatory": {
+ ExperimentalFlag.nonNullable,
+ },
+ "observatory_test_package": {
+ ExperimentalFlag.nonNullable,
+ },
+ "path": {
+ ExperimentalFlag.nonNullable,
+ },
+ "pedantic": {
+ ExperimentalFlag.nonNullable,
+ },
+ "platform": {
+ ExperimentalFlag.nonNullable,
+ },
+ "plugin_platform_interface": {
+ ExperimentalFlag.nonNullable,
+ },
+ "pool": {
+ ExperimentalFlag.nonNullable,
+ },
+ "process": {
+ ExperimentalFlag.nonNullable,
+ },
+ "pub_semver": {
+ ExperimentalFlag.nonNullable,
+ },
+ "sky_engine": {
+ ExperimentalFlag.nonNullable,
+ },
+ "source_maps": {
+ ExperimentalFlag.nonNullable,
+ },
+ "source_map_stack_trace": {
+ ExperimentalFlag.nonNullable,
+ },
+ "source_span": {
+ ExperimentalFlag.nonNullable,
+ },
+ "stack_trace": {
+ ExperimentalFlag.nonNullable,
+ },
+ "stream_channel": {
+ ExperimentalFlag.nonNullable,
+ },
+ "string_scanner": {
+ ExperimentalFlag.nonNullable,
+ },
+ "term_glyph": {
+ ExperimentalFlag.nonNullable,
+ },
+ "test": {
+ ExperimentalFlag.nonNullable,
+ },
+ "test_api": {
+ ExperimentalFlag.nonNullable,
+ },
+ "test_core": {
+ ExperimentalFlag.nonNullable,
+ },
+ "typed_data": {
+ ExperimentalFlag.nonNullable,
+ },
+ "url_launcher": {
+ ExperimentalFlag.nonNullable,
+ },
+ "url_launcher_linux": {
+ ExperimentalFlag.nonNullable,
+ },
+ "url_launcher_macos": {
+ ExperimentalFlag.nonNullable,
+ },
+ "url_launcher_platform_interface": {
+ ExperimentalFlag.nonNullable,
+ },
+ "url_launcher_windows": {
+ ExperimentalFlag.nonNullable,
+ },
+ "vector_math": {
+ ExperimentalFlag.nonNullable,
+ },
+ "video_player": {
+ ExperimentalFlag.nonNullable,
+ },
+ "video_player_platform_interface": {
+ ExperimentalFlag.nonNullable,
+ },
+ "video_player_web": {
+ ExperimentalFlag.nonNullable,
+ },
+});
diff --git a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
index 7a469b9..3ea1366 100644
--- a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
@@ -409,11 +409,10 @@
DartType buildAliased(
LibraryBuilder library, TypeUse typeUse, ClassHierarchyBase? hierarchy) {
assert(hierarchy != null || isExplicit, "Cannot build $this.");
-
DartType builtType = _buildAliasedInternal(library, typeUse, hierarchy);
-
if (library is SourceLibraryBuilder &&
- !checkRecordOrItsAliasAccessAllowed(builtType, library)) {
+ !library.libraryFeatures.records.isEnabled &&
+ isRecordOrItsAlias(builtType)) {
library.reportFeatureNotEnabled(library.libraryFeatures.records,
fileUri ?? library.fileUri, charOffset!, nameText.length);
}
@@ -708,7 +707,8 @@
DartType builtType = _buildInternal(library, typeUse, hierarchy);
if (library is SourceLibraryBuilder &&
- !checkRecordOrItsAliasAccessAllowed(builtType, library)) {
+ !library.libraryFeatures.records.isEnabled &&
+ isRecordOrItsAlias(builtType)) {
library.reportFeatureNotEnabled(library.libraryFeatures.records,
fileUri ?? library.fileUri, charOffset!, nameText.length);
}
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 52835d6..6228bd7 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -349,7 +349,7 @@
/// Returns the state of the experimental features within this library.
LibraryFeatures get libraryFeatures =>
_libraryFeatures ??= new LibraryFeatures(loader.target.globalFeatures,
- _packageUri ?? importUri, languageVersion.version);
+ _packageUri ?? origin.importUri, languageVersion.version);
/// Reports that [feature] is not enabled, using [charOffset] and
/// [length] for the location of the message.
@@ -1611,7 +1611,9 @@
@override
SourceLibraryBuilder get origin {
SourceLibraryBuilder? origin = _immediateOrigin;
- if (origin != null && origin.isPart) {
+ // TODO(johnniwinther): This returns the wrong origin for early queries on
+ // augmentations imported into parts.
+ if (origin != null && origin.partOfLibrary is SourceLibraryBuilder) {
origin = origin.partOfLibrary as SourceLibraryBuilder;
}
return origin?.origin ?? this;
diff --git a/pkg/front_end/lib/src/fasta/util/helpers.dart b/pkg/front_end/lib/src/fasta/util/helpers.dart
index 5cf5fed..33c3c15 100644
--- a/pkg/front_end/lib/src/fasta/util/helpers.dart
+++ b/pkg/front_end/lib/src/fasta/util/helpers.dart
@@ -4,15 +4,12 @@
import 'package:kernel/ast.dart';
-import '../source/source_library_builder.dart';
-
abstract class DelayedActionPerformer {
bool get hasDelayedActions;
void performDelayedActions({required bool allowFurtherDelays});
}
-bool checkRecordOrItsAliasAccessAllowed(
- DartType type, SourceLibraryBuilder accessorLibrary) {
+bool isRecordOrItsAlias(DartType type) {
Class? targetClass;
if (type is InterfaceType) {
targetClass = type.classNode;
@@ -22,11 +19,9 @@
targetClass = unaliasedType.classNode;
}
}
- return accessorLibrary.libraryFeatures.records.isEnabled ||
- accessorLibrary.libraryFeatures.records.flag.isEnabledByDefault ||
- !(targetClass != null &&
- targetClass.parent != null &&
- targetClass.name == "Record" &&
- targetClass.enclosingLibrary.importUri.scheme == "dart" &&
- targetClass.enclosingLibrary.importUri.path == "core");
+ return targetClass != null &&
+ targetClass.parent != null &&
+ targetClass.name == "Record" &&
+ targetClass.enclosingLibrary.importUri.scheme == "dart" &&
+ targetClass.enclosingLibrary.importUri.path == "core";
}
diff --git a/sdk/lib/_internal/allowed_experiments.json b/sdk/lib/_internal/allowed_experiments.json
index 37658a13..6cdf7e4 100644
--- a/sdk/lib/_internal/allowed_experiments.json
+++ b/sdk/lib/_internal/allowed_experiments.json
@@ -2,6 +2,7 @@
"version": 1,
"experimentSets": {
"sdkExperiments": [
+ "records"
],
"nullSafety": [
"non-nullable"
diff --git a/sdk/lib/_internal/vm/lib/record_patch.dart b/sdk/lib/_internal/vm/lib/record_patch.dart
index 500cba6..031979b 100644
--- a/sdk/lib/_internal/vm/lib/record_patch.dart
+++ b/sdk/lib/_internal/vm/lib/record_patch.dart
@@ -6,7 +6,7 @@
// Base class for record instances.
@pragma("vm:entry-point")
-class _Record {
+class _Record implements Record {
factory _Record._uninstantiable() {
throw "Unreachable";
}
diff --git a/tools/VERSION b/tools/VERSION
index 0600da2..3136cd6 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 19
PATCH 0
-PRERELEASE 277
+PRERELEASE 278
PRERELEASE_PATCH 0
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index d27ee9e..61c61af 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -130,6 +130,7 @@
records:
help: "Records"
+ experimentalReleaseVersion: '2.19.0'
patterns:
help: "Patterns"