Version 2.15.0-201.0.dev
Merge commit '1c1f6bd971ac2de7ab4091f17022e6bb50de4f57' into 'dev'
diff --git a/.packages b/.packages
index b24526d..568fa66 100644
--- a/.packages
+++ b/.packages
@@ -82,7 +82,6 @@
protobuf:third_party/pkg/protobuf/protobuf/lib
pub:third_party/pkg/pub/lib
pub_semver:third_party/pkg/pub_semver/lib
-resource:third_party/pkg/resource/lib
sdk_library_metadata:sdk/lib/_internal/sdk_library_metadata/lib
shelf:third_party/pkg/shelf/lib
shelf_packages_handler:third_party/pkg/shelf_packages_handler/lib
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index bdb8699..b0ff32b 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -4604,7 +4604,7 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const MessageCode messageFunctionTypedParameterVar = const MessageCode(
"FunctionTypedParameterVar",
- analyzerCodes: <String>["FUNCTION_TYPED_PARAMETER_VAR"],
+ index: 119,
problemMessage:
r"""Function-typed parameters can't specify 'const', 'final' or 'var' in place of a return type.""",
correctionMessage: r"""Try replacing the keyword with a return type.""");
@@ -8163,7 +8163,7 @@
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const MessageCode messageOperatorWithTypeParameters = const MessageCode(
"OperatorWithTypeParameters",
- analyzerCodes: <String>["TYPE_PARAMETER_ON_OPERATOR"],
+ index: 120,
problemMessage:
r"""Types parameters aren't allowed when defining an operator.""",
correctionMessage: r"""Try removing the type parameters.""");
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
index d49a7eb..a855fe1 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
@@ -133,6 +133,8 @@
ParserErrorCode.LITERAL_WITH_CLASS,
ParserErrorCode.LITERAL_WITH_NEW,
ParserErrorCode.CONSTRUCTOR_WITH_TYPE_ARGUMENTS,
+ ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR,
+ ParserErrorCode.TYPE_PARAMETER_ON_OPERATOR,
];
class ParserErrorCode extends ErrorCode {
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index f207a06..3d8c9c9 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -114,10 +114,6 @@
length,
[name]);
return;
- case "FUNCTION_TYPED_PARAMETER_VAR":
- errorReporter?.reportErrorForOffset(
- ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, offset, length);
- return;
case "GETTER_WITH_PARAMETERS":
errorReporter?.reportErrorForOffset(
ParserErrorCode.GETTER_WITH_PARAMETERS, offset, length);
@@ -275,10 +271,6 @@
offset,
length);
return;
- case "TYPE_PARAMETER_ON_OPERATOR":
- errorReporter?.reportErrorForOffset(
- ParserErrorCode.TYPE_PARAMETER_ON_OPERATOR, offset, length);
- return;
case "UNDEFINED_CLASS":
errorReporter?.reportErrorForOffset(
CompileTimeErrorCode.UNDEFINED_CLASS, offset, length);
diff --git a/pkg/analyzer/messages.yaml b/pkg/analyzer/messages.yaml
index ed7de6a..aa8e577 100644
--- a/pkg/analyzer/messages.yaml
+++ b/pkg/analyzer/messages.yaml
@@ -17468,9 +17468,6 @@
FINAL_TYPEDEF:
problemMessage: "Typedefs can't be declared to be 'final'."
correctionMessage: "Try removing the keyword 'final'."
- FUNCTION_TYPED_PARAMETER_VAR:
- problemMessage: "Function-typed parameters can't specify 'const', 'final' or 'var' in place of a return type."
- correctionMessage: Try replacing the keyword with a return type.
GETTER_IN_FUNCTION:
problemMessage: "Getters can't be defined within methods or functions."
correctionMessage: Try moving the getter outside the method or function, or converting the getter to a function.
@@ -17628,12 +17625,6 @@
STATIC_TOP_LEVEL_DECLARATION:
problemMessage: "Top-level declarations can't be declared to be static."
correctionMessage: "Try removing the keyword 'static'."
- TYPE_PARAMETER_ON_OPERATOR:
- problemMessage: "Types parameters aren't allowed when defining an operator."
- correctionMessage: Try removing the type parameters.
- comment: |-
- 7.1.1 Operators: Type parameters are not syntactically supported on an
- operator.
UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP:
problemMessage: "There is no '{0}' to open a parameter group."
correctionMessage: "Try inserting the '{0}' at the appropriate location."
diff --git a/pkg/analyzer_plugin/test/utilities/range_factory_test.dart b/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
index 78b64cb..e3ffd03 100644
--- a/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
@@ -13,12 +13,175 @@
void main() {
defineReflectiveSuite(() {
+ defineReflectiveTests(RangeFactory_ArgumentRangeTest);
+ defineReflectiveTests(RangeFactory_NodeInListTest);
defineReflectiveTests(RangeFactoryTest);
});
}
@reflectiveTest
-class RangeFactoryTest extends AbstractSingleUnitTest {
+class RangeFactory_ArgumentRangeTest extends AbstractSingleUnitTest {
+ Future<void> test_all_mixed_noTrailingComma() async {
+ await resolveTestCode('''
+void f() {
+ g(0, 1, c: 2);
+}
+void g(int a, int b, {int? c}) {}
+''');
+ _assertArgumentRange(0, 2, SourceRange(15, 10), SourceRange(15, 10));
+ }
+
+ Future<void> test_all_mixed_trailingComma() async {
+ await resolveTestCode('''
+void f() {
+ g(0, 1, c: 2, );
+}
+void g(int a, int b, {int? c}) {}
+''');
+ _assertArgumentRange(0, 2, SourceRange(15, 12), SourceRange(15, 10));
+ }
+
+ Future<void> test_all_named_noTrailingComma() async {
+ await resolveTestCode('''
+void f() {
+ g(a: 0, b: 1, c: 2);
+}
+void g({int? a, int? b, int? c}) {}
+''');
+ _assertArgumentRange(0, 2, SourceRange(15, 16), SourceRange(15, 16));
+ }
+
+ Future<void> test_all_named_trailingComma() async {
+ await resolveTestCode('''
+void f() {
+ g(a: 0, b: 1, c: 2, );
+}
+void g({int? a, int? b, int? c}) {}
+''');
+ _assertArgumentRange(0, 2, SourceRange(15, 18), SourceRange(15, 16));
+ }
+
+ Future<void> test_all_positional_noTrailingComma() async {
+ await resolveTestCode('''
+void f() {
+ g(0, 1, 2);
+}
+void g(int a, int b, int c) {}
+''');
+ _assertArgumentRange(0, 2, SourceRange(15, 7), SourceRange(15, 7));
+ }
+
+ Future<void> test_all_positional_trailingComma() async {
+ await resolveTestCode('''
+void f() {
+ g(0, 1, 2, );
+}
+void g(int a, int b, int c) {}
+''');
+ _assertArgumentRange(0, 2, SourceRange(15, 9), SourceRange(15, 7));
+ }
+
+ Future<void> test_first_noTrailingComma() async {
+ await resolveTestCode('''
+void f() {
+ g(0, 1);
+}
+void g(int a, int b) {}
+''');
+ _assertArgumentRange(0, 0, SourceRange(15, 3), SourceRange(15, 1));
+ }
+
+ Future<void> test_first_trailingComma() async {
+ await resolveTestCode('''
+void f() {
+ g(0, 1, );
+}
+void g(int a, int b) {}
+''');
+ _assertArgumentRange(0, 0, SourceRange(15, 3), SourceRange(15, 1));
+ }
+
+ Future<void> test_last_noTrailingComma() async {
+ await resolveTestCode('''
+void f() {
+ g(0, 1);
+}
+void g(int a, int b) {}
+''');
+ _assertArgumentRange(1, 1, SourceRange(16, 3), SourceRange(18, 1));
+ }
+
+ Future<void> test_last_trailingComma() async {
+ await resolveTestCode('''
+void f() {
+ g(0, 1, );
+}
+void g(int a, int b) {}
+''');
+ _assertArgumentRange(1, 1, SourceRange(16, 3), SourceRange(18, 1));
+ }
+
+ Future<void> test_middle_noTrailingComma() async {
+ await resolveTestCode('''
+void f() {
+ g(0, 1, 2, 3);
+}
+void g(int a, int b, int c, int d) {}
+''');
+ _assertArgumentRange(1, 2, SourceRange(16, 6), SourceRange(18, 4));
+ }
+
+ Future<void> test_middle_trailingComma() async {
+ await resolveTestCode('''
+void f() {
+ g(0, 1, 2, 3, );
+}
+void g(int a, int b, int c, int d) {}
+''');
+ _assertArgumentRange(1, 2, SourceRange(16, 6), SourceRange(18, 4));
+ }
+
+ Future<void> test_only_named() async {
+ await resolveTestCode('''
+void f() {
+ g(a: 0);
+}
+void g({int? a}) {}
+''');
+ _assertArgumentRange(0, 0, SourceRange(15, 4), SourceRange(15, 4));
+ }
+
+ Future<void> test_only_positional() async {
+ await resolveTestCode('''
+void f() {
+ g(0);
+}
+void g(int a) {}
+''');
+ _assertArgumentRange(0, 0, SourceRange(15, 1), SourceRange(15, 1));
+ }
+
+ /// Assuming that the test code starts with a function whose block body starts
+ /// with a method invocation, compute the range for the arguments in the
+ /// invocation's argument list between [lower] and [upper]. Validate that the
+ /// range for deletion matches [expectedForDeletion] and that the range not
+ /// for deletion matches [expectedNoDeletion].
+ void _assertArgumentRange(int lower, int upper,
+ SourceRange expectedForDeletion, SourceRange expectedNoDeletion) {
+ var f = testUnit.declarations[0] as FunctionDeclaration;
+ var body = f.functionExpression.body as BlockFunctionBody;
+ var statement = body.block.statements[0] as ExpressionStatement;
+ var invocation = statement.expression as MethodInvocation;
+ var argumentList = invocation.argumentList;
+ expect(range.argumentRange(argumentList, lower, upper, true),
+ expectedForDeletion);
+ expect(range.argumentRange(argumentList, lower, upper, false),
+ expectedNoDeletion);
+ }
+}
+
+@reflectiveTest
+class RangeFactory_NodeInListTest extends AbstractSingleUnitTest {
/// Assuming that the test code starts with a function whose block body starts
/// with a method invocation, return the list of arguments in that invocation.
NodeList<Expression> get _argumentList {
@@ -29,146 +192,119 @@
return invocation.argumentList.arguments;
}
- Future<void> test_argumentRange_all_mixed_noTrailingComma() async {
+ Future<void> test_argumentList_first_named() async {
await resolveTestCode('''
void f() {
- g(0, 1, c: 2);
+ g(a: 1, b: 2);
}
-void g(int a, int b, {int? c}) {}
+void g({int? a, int? b}) {}
''');
- _assertArgumentRange(0, 2, SourceRange(15, 10), SourceRange(15, 10));
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[0]), SourceRange(15, 6));
}
- Future<void> test_argumentRange_all_mixed_trailingComma() async {
+ Future<void> test_argumentList_first_positional() async {
await resolveTestCode('''
void f() {
- g(0, 1, c: 2, );
+ g(1, 2);
}
-void g(int a, int b, {int? c}) {}
+void g(int a, int b) {}
''');
- _assertArgumentRange(0, 2, SourceRange(15, 12), SourceRange(15, 10));
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[0]), SourceRange(15, 3));
}
- Future<void> test_argumentRange_all_named_noTrailingComma() async {
+ Future<void> test_argumentList_last_named() async {
await resolveTestCode('''
void f() {
- g(a: 0, b: 1, c: 2);
+ g(a: 1, b: 2);
+}
+void g({int? a, int? b}) {}
+''');
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[1]), SourceRange(19, 6));
+ }
+
+ Future<void> test_argumentList_last_positional() async {
+ await resolveTestCode('''
+void f() {
+ g(1, 2);
+}
+void g(int a, int b) {}
+''');
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[1]), SourceRange(16, 3));
+ }
+
+ Future<void> test_argumentList_middle_named() async {
+ await resolveTestCode('''
+void f() {
+ g(a: 1, b: 2, c: 3);
}
void g({int? a, int? b, int? c}) {}
''');
- _assertArgumentRange(0, 2, SourceRange(15, 16), SourceRange(15, 16));
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[1]), SourceRange(19, 6));
}
- Future<void> test_argumentRange_all_named_trailingComma() async {
+ Future<void> test_argumentList_middle_positional() async {
await resolveTestCode('''
void f() {
- g(a: 0, b: 1, c: 2, );
-}
-void g({int? a, int? b, int? c}) {}
-''');
- _assertArgumentRange(0, 2, SourceRange(15, 18), SourceRange(15, 16));
- }
-
- Future<void> test_argumentRange_all_positional_noTrailingComma() async {
- await resolveTestCode('''
-void f() {
- g(0, 1, 2);
+ g(1, 2, 3);
}
void g(int a, int b, int c) {}
''');
- _assertArgumentRange(0, 2, SourceRange(15, 7), SourceRange(15, 7));
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[1]), SourceRange(16, 3));
}
- Future<void> test_argumentRange_all_positional_trailingComma() async {
+ Future<void> test_argumentList_only_named() async {
await resolveTestCode('''
void f() {
- g(0, 1, 2, );
-}
-void g(int a, int b, int c) {}
-''');
- _assertArgumentRange(0, 2, SourceRange(15, 9), SourceRange(15, 7));
- }
-
- Future<void> test_argumentRange_first_noTrailingComma() async {
- await resolveTestCode('''
-void f() {
- g(0, 1);
-}
-void g(int a, int b) {}
-''');
- _assertArgumentRange(0, 0, SourceRange(15, 3), SourceRange(15, 1));
- }
-
- Future<void> test_argumentRange_first_trailingComma() async {
- await resolveTestCode('''
-void f() {
- g(0, 1, );
-}
-void g(int a, int b) {}
-''');
- _assertArgumentRange(0, 0, SourceRange(15, 3), SourceRange(15, 1));
- }
-
- Future<void> test_argumentRange_last_noTrailingComma() async {
- await resolveTestCode('''
-void f() {
- g(0, 1);
-}
-void g(int a, int b) {}
-''');
- _assertArgumentRange(1, 1, SourceRange(16, 3), SourceRange(18, 1));
- }
-
- Future<void> test_argumentRange_last_trailingComma() async {
- await resolveTestCode('''
-void f() {
- g(0, 1, );
-}
-void g(int a, int b) {}
-''');
- _assertArgumentRange(1, 1, SourceRange(16, 3), SourceRange(18, 1));
- }
-
- Future<void> test_argumentRange_middle_noTrailingComma() async {
- await resolveTestCode('''
-void f() {
- g(0, 1, 2, 3);
-}
-void g(int a, int b, int c, int d) {}
-''');
- _assertArgumentRange(1, 2, SourceRange(16, 6), SourceRange(18, 4));
- }
-
- Future<void> test_argumentRange_middle_trailingComma() async {
- await resolveTestCode('''
-void f() {
- g(0, 1, 2, 3, );
-}
-void g(int a, int b, int c, int d) {}
-''');
- _assertArgumentRange(1, 2, SourceRange(16, 6), SourceRange(18, 4));
- }
-
- Future<void> test_argumentRange_only_named() async {
- await resolveTestCode('''
-void f() {
- g(a: 0);
+ g(a: 1);
}
void g({int? a}) {}
''');
- _assertArgumentRange(0, 0, SourceRange(15, 4), SourceRange(15, 4));
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[0]), SourceRange(15, 4));
}
- Future<void> test_argumentRange_only_positional() async {
+ Future<void> test_argumentList_only_named_trailingComma() async {
await resolveTestCode('''
void f() {
- g(0);
+ g(a: 1,);
+}
+void g({int? a}) {}
+''');
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[0]), SourceRange(15, 5));
+ }
+
+ Future<void> test_argumentList_only_positional() async {
+ await resolveTestCode('''
+void f() {
+ g(1);
}
void g(int a) {}
''');
- _assertArgumentRange(0, 0, SourceRange(15, 1), SourceRange(15, 1));
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[0]), SourceRange(15, 1));
}
+ Future<void> test_argumentList_only_positional_trailingComma() async {
+ await resolveTestCode('''
+void f() {
+ g(1,);
+}
+void g(int a) {}
+''');
+ var list = _argumentList;
+ expect(range.nodeInList(list, list[0]), SourceRange(15, 2));
+ }
+}
+
+@reflectiveTest
+class RangeFactoryTest extends AbstractSingleUnitTest {
Future<void> test_elementName() async {
await resolveTestCode('class ABC {}');
var element = findElement.class_('ABC');
@@ -215,117 +351,6 @@
expect(range.node(mainName), SourceRange(0, 4));
}
- Future<void> test_nodeInList_argumentList_first_named() async {
- await resolveTestCode('''
-void f() {
- g(a: 1, b: 2);
-}
-void g({int? a, int? b}) {}
-''');
- var list = _argumentList;
- expect(range.nodeInList(list, list[0]), SourceRange(15, 6));
- }
-
- Future<void> test_nodeInList_argumentList_first_positional() async {
- await resolveTestCode('''
-void f() {
- g(1, 2);
-}
-void g(int a, int b) {}
-''');
- var list = _argumentList;
- expect(range.nodeInList(list, list[0]), SourceRange(15, 3));
- }
-
- Future<void> test_nodeInList_argumentList_last_named() async {
- await resolveTestCode('''
-void f() {
- g(a: 1, b: 2);
-}
-void g({int? a, int? b}) {}
-''');
- var list = _argumentList;
- expect(range.nodeInList(list, list[1]), SourceRange(19, 6));
- }
-
- Future<void> test_nodeInList_argumentList_last_positional() async {
- await resolveTestCode('''
-void f() {
- g(1, 2);
-}
-void g(int a, int b) {}
-''');
- var list = _argumentList;
- expect(range.nodeInList(list, list[1]), SourceRange(16, 3));
- }
-
- Future<void> test_nodeInList_argumentList_middle_named() async {
- await resolveTestCode('''
-void f() {
- g(a: 1, b: 2, c: 3);
-}
-void g({int? a, int? b, int? c}) {}
-''');
- var list = _argumentList;
- expect(range.nodeInList(list, list[1]), SourceRange(19, 6));
- }
-
- Future<void> test_nodeInList_argumentList_middle_positional() async {
- await resolveTestCode('''
-void f() {
- g(1, 2, 3);
-}
-void g(int a, int b, int c) {}
-''');
- var list = _argumentList;
- expect(range.nodeInList(list, list[1]), SourceRange(16, 3));
- }
-
- Future<void> test_nodeInList_argumentList_only_named() async {
- await resolveTestCode('''
-void f() {
- g(a: 1);
-}
-void g({int? a}) {}
-''');
- var list = _argumentList;
- expect(range.nodeInList(list, list[0]), SourceRange(15, 4));
- }
-
- Future<void> test_nodeInList_argumentList_only_named_trailingComma() async {
- await resolveTestCode('''
-void f() {
- g(a: 1,);
-}
-void g({int? a}) {}
-''');
- var list = _argumentList;
- expect(range.nodeInList(list, list[0]), SourceRange(15, 5));
- }
-
- Future<void> test_nodeInList_argumentList_only_positional() async {
- await resolveTestCode('''
-void f() {
- g(1);
-}
-void g(int a) {}
-''');
- var list = _argumentList;
- expect(range.nodeInList(list, list[0]), SourceRange(15, 1));
- }
-
- Future<void>
- test_nodeInList_argumentList_only_positional_trailingComma() async {
- await resolveTestCode('''
-void f() {
- g(1,);
-}
-void g(int a) {}
-''');
- var list = _argumentList;
- expect(range.nodeInList(list, list[0]), SourceRange(15, 2));
- }
-
Future<void> test_nodes() async {
await resolveTestCode(' main() {}');
var mainFunction = testUnit.declarations[0] as FunctionDeclaration;
@@ -376,22 +401,4 @@
var mainName = mainFunction.name;
expect(range.token(mainName.beginToken), SourceRange(1, 4));
}
-
- /// Assuming that the test code starts with a function whose block body starts
- /// with a method invocation, compute the range for the arguments in the
- /// invocation's argument list between [lower] and [upper]. Validate that the
- /// range for deletion matches [expectedForDeletion] and that the range not
- /// for deletion matches [expectedNoDeletion].
- void _assertArgumentRange(int lower, int upper,
- SourceRange expectedForDeletion, SourceRange expectedNoDeletion) {
- var f = testUnit.declarations[0] as FunctionDeclaration;
- var body = f.functionExpression.body as BlockFunctionBody;
- var statement = body.block.statements[0] as ExpressionStatement;
- var invocation = statement.expression as MethodInvocation;
- var argumentList = invocation.argumentList;
- expect(range.argumentRange(argumentList, lower, upper, true),
- expectedForDeletion);
- expect(range.argumentRange(argumentList, lower, upper, false),
- expectedNoDeletion);
- }
}
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index f55ce1a..ca5860b 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -4803,21 +4803,33 @@
/// list and the element type is known to be invariant so it can skip the
/// type check.
bool isNativeListInvariantAdd(InvocationExpression node) {
- Expression receiver;
- if (receiver != null && node.name.text == 'add') {
+ if (node is InstanceInvocation &&
+ node.isInvariant &&
+ node.name.text == 'add') {
// The call to add is marked as invariant, so the type check on the
// parameter to add is not needed.
+ var receiver = node.receiver;
if (receiver is VariableGet &&
receiver.variable.isFinal &&
!receiver.variable.isLate) {
// The receiver is a final variable, so it only contains the
// initializer value. Also, avoid late variables in case the CFE
// lowering of late variables is changed in the future.
- if (receiver.variable.initializer is ListLiteral) {
+ var initializer = receiver.variable.initializer;
+ if (initializer is ListLiteral) {
// The initializer is a list literal, so we know the list can be
// grown, modified, and is represented by a JavaScript Array.
return true;
}
+ if (initializer is StaticInvocation &&
+ initializer.target.enclosingClass == _coreTypes.listClass &&
+ initializer.target.name.text == 'of' &&
+ initializer.arguments.named.isEmpty) {
+ // The initializer is a `List.of()` call from the dart:core library
+ // and the growable named argument has not been passed (it defaults
+ // to true).
+ return true;
+ }
}
}
return false;
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 4ed6af7..bebd92b 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -601,9 +601,10 @@
- "class C { static f; }"
FunctionTypedParameterVar:
+ index: 119
problemMessage: "Function-typed parameters can't specify 'const', 'final' or 'var' in place of a return type."
correctionMessage: "Try replacing the keyword with a return type."
- analyzerCode: FUNCTION_TYPED_PARAMETER_VAR
+ analyzerCode: ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR
script:
- "void f(const x()) {}"
- "void f(final x()) {}"
@@ -2742,9 +2743,13 @@
problemMessage: "An operator can't have optional parameters."
OperatorWithTypeParameters:
+ index: 120
problemMessage: "Types parameters aren't allowed when defining an operator."
correctionMessage: "Try removing the type parameters."
- analyzerCode: TYPE_PARAMETER_ON_OPERATOR
+ analyzerCode: ParserErrorCode.TYPE_PARAMETER_ON_OPERATOR
+ comment: |-
+ 7.1.1 Operators: Type parameters are not syntactically supported on an
+ operator.
script:
- "class C { operator []<T>(T t) => null; }"
@@ -5414,4 +5419,4 @@
problemMessage: "'new' can only be used as a constructor reference."
experiments: constructor-tearoffs
script: |
- method(dynamic d) => d.new;
\ No newline at end of file
+ method(dynamic d) => d.new;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
index 8ddda11..ef7f8ee 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
@@ -22,6 +22,6 @@
synthetic constructor •() → self::Class
: super core::Object::•()
;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3261,getterSelectorId:3262] method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::Enum e) → core::int
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3266,getterSelectorId:3267] method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::Enum e) → core::int
return [@vm.inferred-type.metadata=!] e.{core::_Enum::index}{core::int};
}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
index 64e1bc1..4a68920 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
@@ -51,6 +51,6 @@
synthetic constructor •() → self::ConstClass
: super core::Object::•()
;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3265,getterSelectorId:3266] method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::ConstEnum e) → core::int
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3270,getterSelectorId:3271] method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::ConstEnum e) → core::int
return [@vm.inferred-type.metadata=!] e.{core::_Enum::index}{core::int};
}
diff --git a/sdk/lib/_internal/vm/bin/socket_patch.dart b/sdk/lib/_internal/vm/bin/socket_patch.dart
index 9a68d6f..5f0379e 100644
--- a/sdk/lib/_internal/vm/bin/socket_patch.dart
+++ b/sdk/lib/_internal/vm/bin/socket_patch.dart
@@ -2545,7 +2545,9 @@
@pragma("vm:entry-point")
class _ResourceHandleImpl implements ResourceHandle {
+ @pragma("vm:entry-point")
int _handle; // file descriptor on linux
+ @pragma("vm:entry-point")
_ResourceHandleImpl(this._handle);
@pragma("vm:external-name", "ResourceHandleImpl_toFile")
@@ -2572,6 +2574,7 @@
@pragma("vm:external-name", "ResourceHandleImpl_toRawDatagramSocket")
external RawDatagramSocket toRawDatagramSocket();
+ @pragma("vm:entry-point")
static final _ResourceHandleImpl _sentinel = _ResourceHandleImpl(-1);
}
@@ -2581,11 +2584,16 @@
native "SocketControlMessage_fromHandles";
}
+@pragma("vm:entry-point")
class _SocketControlMessageImpl implements SocketControlMessage {
+ @pragma("vm:entry-point")
final int level;
+ @pragma("vm:entry-point")
final int type;
+ @pragma("vm:entry-point")
final Uint8List data;
+ @pragma("vm:entry-point")
_SocketControlMessageImpl(this.level, this.type, this.data);
@pragma("vm:external-name", "SocketControlMessageImpl_extractHandles")
diff --git a/sdk/lib/io/file_impl.dart b/sdk/lib/io/file_impl.dart
index 1311444..b8361d0 100644
--- a/sdk/lib/io/file_impl.dart
+++ b/sdk/lib/io/file_impl.dart
@@ -662,6 +662,7 @@
lock(int lock, int start, int end);
}
+@pragma("vm:entry-point")
class _RandomAccessFile implements RandomAccessFile {
static bool _connectedResourceHandler = false;
@@ -672,6 +673,7 @@
late _FileResourceInfo _resourceInfo;
_RandomAccessFileOps _ops;
+ @pragma("vm:entry-point")
_RandomAccessFile(int pointer, this.path)
: _ops = new _RandomAccessFileOps(pointer) {
_resourceInfo = new _FileResourceInfo(this);
diff --git a/tests/standalone/io/unix_socket_test.dart b/tests/standalone/io/unix_socket_test.dart
index f87a4e5..a8bf0cb 100644
--- a/tests/standalone/io/unix_socket_test.dart
+++ b/tests/standalone/io/unix_socket_test.dart
@@ -697,6 +697,7 @@
final receivedSocket = handles[0].toRawSocket();
receivedSocket.write('Hello, server!\n'.codeUnits);
socket.write('server replied'.codeUnits);
+ receivedSocket.close();
break;
case RawSocketEvent.readClosed:
socket.close();
diff --git a/tests/standalone_2/io/unix_socket_test.dart b/tests/standalone_2/io/unix_socket_test.dart
index 98b27a5..04e8cb2 100644
--- a/tests/standalone_2/io/unix_socket_test.dart
+++ b/tests/standalone_2/io/unix_socket_test.dart
@@ -693,6 +693,7 @@
final receivedSocket = handles[0].toRawSocket();
receivedSocket.write('Hello, server!\n'.codeUnits);
socket.write('server replied'.codeUnits);
+ receivedSocket.close();
break;
case RawSocketEvent.readClosed:
socket.close();
diff --git a/tools/VERSION b/tools/VERSION
index 0510da6..b8395e8 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 15
PATCH 0
-PRERELEASE 200
+PRERELEASE 201
PRERELEASE_PATCH 0
\ No newline at end of file