Version 2.18.0-232.0.dev
Merge commit '7f8566183499960f1fc0540c44d32696332f22f0' into 'dev'
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
index 0e557c3..f928d0a 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -6830,7 +6830,7 @@
if (typeInfo.isNullable) {
Token next = typeInfo.skipType(token).next!;
if (!isOneOfOrEof(
- next, const [')', '?', '??', ',', ';', ':', 'is', 'as', '..'])) {
+ next, const [')', '}', '?', '??', ',', ';', ':', 'is', 'as', '..'])) {
// TODO(danrubel): investigate other situations
// where `?` should be considered part of the type info
// rather than the start of a conditional expression.
diff --git a/pkg/analyzer/test/generated/expression_parser_test.dart b/pkg/analyzer/test/generated/expression_parser_test.dart
index 5749b4d..2df1857 100644
--- a/pkg/analyzer/test/generated/expression_parser_test.dart
+++ b/pkg/analyzer/test/generated/expression_parser_test.dart
@@ -157,6 +157,62 @@
expect(b.expression, isNotNull);
}
+ void test_nullableTypeInStringInterpolations_as_48999() {
+ // https://github.com/dart-lang/sdk/issues/48999
+ Expression expression = parseExpression(r'"${i as int?}"');
+ expect(expression, isNotNull);
+ assertNoErrors();
+
+ var interpolation = expression as StringInterpolation;
+ expect(interpolation.elements, hasLength(3));
+
+ expect(interpolation.elements[0], isInterpolationString);
+ var element0 = interpolation.elements[0] as InterpolationString;
+ expect(element0.value, '');
+
+ expect(interpolation.elements[1], isInterpolationExpression);
+ var element1 = interpolation.elements[1] as InterpolationExpression;
+ expect(element1.expression, isAsExpression);
+ var asExpression = element1.expression as AsExpression;
+ expect(asExpression.expression, isSimpleIdentifier);
+ expect(asExpression.type, isNamedType);
+ var namedType = asExpression.type as NamedType;
+ expect(namedType.name.name, "int");
+ expect(namedType.question, isNotNull);
+
+ expect(interpolation.elements[2], isInterpolationString);
+ var element2 = interpolation.elements[2] as InterpolationString;
+ expect(element2.value, '');
+ }
+
+ void test_nullableTypeInStringInterpolations_is_48999() {
+ // https://github.com/dart-lang/sdk/issues/48999
+ Expression expression = parseExpression(r'"${i is int?}"');
+ expect(expression, isNotNull);
+ assertNoErrors();
+
+ var interpolation = expression as StringInterpolation;
+ expect(interpolation.elements, hasLength(3));
+
+ expect(interpolation.elements[0], isInterpolationString);
+ var element0 = interpolation.elements[0] as InterpolationString;
+ expect(element0.value, '');
+
+ expect(interpolation.elements[1], isInterpolationExpression);
+ var element1 = interpolation.elements[1] as InterpolationExpression;
+ expect(element1.expression, isIsExpression);
+ var isExpression = element1.expression as IsExpression;
+ expect(isExpression.expression, isSimpleIdentifier);
+ expect(isExpression.type, isNamedType);
+ var namedType = isExpression.type as NamedType;
+ expect(namedType.name.name, "int");
+ expect(namedType.question, isNotNull);
+
+ expect(interpolation.elements[2], isInterpolationString);
+ var element2 = interpolation.elements[2] as InterpolationString;
+ expect(element2.value, '');
+ }
+
void test_parseAdditiveExpression_normal() {
Expression expression = parseAdditiveExpression('x + y');
expect(expression, isNotNull);
diff --git a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
index 8361256..148e2b6 100644
--- a/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_constructor_builder.dart
@@ -200,8 +200,8 @@
@override
void buildMembers(void Function(Member, BuiltMemberKind) f) {
- Member member = build();
- f(member, BuiltMemberKind.Constructor);
+ _build();
+ f(_constructor, BuiltMemberKind.Constructor);
if (_constructorTearOff != null) {
f(_constructorTearOff!, BuiltMemberKind.Method);
}
@@ -209,8 +209,7 @@
bool _hasBeenBuilt = false;
- @override
- Constructor build() {
+ void _build() {
if (!_hasBeenBuilt) {
buildFunction();
_constructor.function.fileOffset = charOpenParenOffset;
@@ -248,7 +247,6 @@
.registerConstructorToBeInferred(_constructor, this);
}
}
- return _constructor;
}
@override
diff --git a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
index a88180b..8b8f7b2 100644
--- a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
@@ -561,7 +561,6 @@
@override
Class build(LibraryBuilder coreLibrary) {
- cls.isEnum = true;
intType.resolveIn(coreLibrary.scope, charOffset, fileUri, libraryBuilder);
stringType.resolveIn(
coreLibrary.scope, charOffset, fileUri, libraryBuilder);
@@ -572,6 +571,9 @@
listType.resolveIn(coreLibrary.scope, charOffset, fileUri, libraryBuilder);
+ Class cls = super.build(coreLibrary);
+ cls.isEnum = true;
+
List<Expression> values = <Expression>[];
if (enumConstantInfos != null) {
for (EnumConstantInfo? enumConstantInfo in enumConstantInfos!) {
@@ -579,15 +581,11 @@
Builder declaration = firstMemberNamed(enumConstantInfo.name)!;
if (declaration.isField) {
SourceFieldBuilder fieldBuilder = declaration as SourceFieldBuilder;
- fieldBuilder.build();
values.add(new StaticGet(fieldBuilder.field));
}
}
}
}
- SourceFieldBuilder valuesBuilder =
- firstMemberNamed("values") as SourceFieldBuilder;
- valuesBuilder.build();
// The super initializer for the synthesized default constructor is
// inserted here if the enum's supertype is _Enum to preserve the legacy
@@ -597,7 +595,8 @@
// building.
if (identical(this.supertypeBuilder, enumType)) {
if (synthesizedDefaultConstructorBuilder != null) {
- Constructor constructor = synthesizedDefaultConstructorBuilder!.build();
+ Constructor constructor =
+ synthesizedDefaultConstructorBuilder!.constructor;
ClassBuilder objectClass = objectType.declaration as ClassBuilder;
ClassBuilder enumClass = enumType.declaration as ClassBuilder;
MemberBuilder? superConstructor = enumClass.findConstructorOrFactory(
@@ -625,7 +624,7 @@
}
}
- return super.build(coreLibrary);
+ return cls;
}
DartType buildElement(SourceFieldBuilder fieldBuilder, CoreTypes coreTypes) {
@@ -778,7 +777,6 @@
Builder declaration = firstMemberNamed(enumConstantInfo.name)!;
if (declaration.isField) {
SourceFieldBuilder fieldBuilder = declaration as SourceFieldBuilder;
- fieldBuilder.build();
values.add(new StaticGet(fieldBuilder.field));
}
}
diff --git a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
index 86e3ca3..ec7ffb5 100644
--- a/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_factory_builder.dart
@@ -133,15 +133,14 @@
@override
void buildMembers(void Function(Member, BuiltMemberKind) f) {
- Member member = build();
- f(member, BuiltMemberKind.Method);
+ _build();
+ f(_procedureInternal, BuiltMemberKind.Method);
if (_factoryTearOff != null) {
f(_factoryTearOff!, BuiltMemberKind.Method);
}
}
- @override
- Procedure build() {
+ void _build() {
buildFunction();
_procedureInternal.function.fileOffset = charOpenParenOffset;
_procedureInternal.function.fileEndOffset =
@@ -160,7 +159,6 @@
enclosingClass: classBuilder!.cls,
libraryBuilder: libraryBuilder);
}
- return _procedureInternal;
}
bool _hasBuiltOutlines = false;
@@ -341,15 +339,15 @@
@override
void buildMembers(void Function(Member, BuiltMemberKind) f) {
- Member member = build();
- f(member, BuiltMemberKind.RedirectingFactory);
+ _build();
+ f(_procedureInternal, BuiltMemberKind.RedirectingFactory);
if (_factoryTearOff != null) {
f(_factoryTearOff!, BuiltMemberKind.Method);
}
}
@override
- Procedure build() {
+ void _build() {
buildFunction();
_procedureInternal.function.fileOffset = charOpenParenOffset;
_procedureInternal.function.fileEndOffset =
@@ -374,7 +372,6 @@
implementationConstructor: _procedureInternal,
libraryBuilder: libraryBuilder);
}
- return _procedureInternal;
}
@override
diff --git a/pkg/front_end/lib/src/fasta/source/source_field_builder.dart b/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
index 00682eb..b05b07b 100644
--- a/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_field_builder.dart
@@ -375,12 +375,12 @@
@override
void buildMembers(void Function(Member, BuiltMemberKind) f) {
- build();
+ _build();
_fieldEncoding.registerMembers(libraryBuilder, this, f);
}
/// Builds the core AST structures for this field as needed for the outline.
- void build() {
+ void _build() {
if (type is! InferableTypeBuilder) {
fieldType = type.build(libraryBuilder, TypeUse.fieldType);
}
diff --git a/pkg/front_end/lib/src/fasta/source/source_function_builder.dart b/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
index fe0eb20..d64c8d3 100644
--- a/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_function_builder.dart
@@ -474,8 +474,6 @@
}
}
- Member build();
-
@override
void becomeNative(SourceLoader loader) {
MemberBuilder constructor = loader.getNativeAnnotation();
diff --git a/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart b/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
index 2d6873b..9588563 100644
--- a/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_procedure_builder.dart
@@ -232,20 +232,20 @@
@override
void buildMembers(void Function(Member, BuiltMemberKind) f) {
- Member member = build();
+ _build();
if (isExtensionMethod) {
switch (kind) {
case ProcedureKind.Method:
- f(member, BuiltMemberKind.ExtensionMethod);
+ f(_procedure, BuiltMemberKind.ExtensionMethod);
break;
case ProcedureKind.Getter:
- f(member, BuiltMemberKind.ExtensionGetter);
+ f(_procedure, BuiltMemberKind.ExtensionGetter);
break;
case ProcedureKind.Setter:
- f(member, BuiltMemberKind.ExtensionSetter);
+ f(_procedure, BuiltMemberKind.ExtensionSetter);
break;
case ProcedureKind.Operator:
- f(member, BuiltMemberKind.ExtensionOperator);
+ f(_procedure, BuiltMemberKind.ExtensionOperator);
break;
case ProcedureKind.Factory:
throw new UnsupportedError(
@@ -259,8 +259,7 @@
}
}
- @override
- Procedure build() {
+ void _build() {
buildFunction();
_procedure.function.fileOffset = charOpenParenOffset;
_procedure.function.fileEndOffset = _procedure.fileEndOffset;
@@ -281,7 +280,6 @@
_buildExtensionTearOff(libraryBuilder, parent as ExtensionBuilder);
updatePrivateMemberName(extensionTearOff!, libraryBuilder);
}
- return _procedure;
}
/// Creates a top level function that creates a tear off of an extension
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_48999.dart b/pkg/front_end/parser_testcases/nnbd/issue_48999.dart
new file mode 100644
index 0000000..837d612
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_48999.dart
@@ -0,0 +1,5 @@
+void main() {
+ dynamic i = 10;
+ print('${i as int?}');
+ print('${i is int?}');
+}
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_48999.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_48999.dart.expect
new file mode 100644
index 0000000..50593e6
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_48999.dart.expect
@@ -0,0 +1,69 @@
+beginCompilationUnit(void)
+ beginMetadataStar(void)
+ endMetadataStar(0)
+ beginTopLevelMember(void)
+ beginTopLevelMethod(, null, null)
+ handleVoidKeyword(void)
+ handleIdentifier(main, topLevelFunctionDeclaration)
+ handleNoTypeVariables(()
+ beginFormalParameters((, MemberKind.TopLevelMethod)
+ endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+ handleAsyncModifier(null, null)
+ beginBlockFunctionBody({)
+ beginMetadataStar(dynamic)
+ endMetadataStar(0)
+ handleIdentifier(dynamic, typeReference)
+ handleNoTypeArguments(i)
+ handleType(dynamic, null)
+ beginVariablesDeclaration(i, null, null)
+ handleIdentifier(i, localVariableDeclaration)
+ beginInitializedIdentifier(i)
+ beginVariableInitializer(=)
+ handleLiteralInt(10)
+ endVariableInitializer(=)
+ endInitializedIdentifier(i)
+ endVariablesDeclaration(1, ;)
+ handleIdentifier(print, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ beginLiteralString(')
+ handleIdentifier(i, expression)
+ handleNoTypeArguments(as)
+ handleNoArguments(as)
+ handleSend(i, as)
+ beginAsOperatorType(as)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(?)
+ handleType(int, ?)
+ endAsOperatorType(as)
+ handleAsOperator(as)
+ handleInterpolationExpression(${, })
+ handleStringPart(')
+ endLiteralString(1, ))
+ endArguments(1, (, ))
+ handleSend(print, ;)
+ handleExpressionStatement(;)
+ handleIdentifier(print, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ beginLiteralString(')
+ handleIdentifier(i, expression)
+ handleNoTypeArguments(is)
+ handleNoArguments(is)
+ handleSend(i, is)
+ beginIsOperatorType(is)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(?)
+ handleType(int, ?)
+ endIsOperatorType(is)
+ handleIsOperator(is, null)
+ handleInterpolationExpression(${, })
+ handleStringPart(')
+ endLiteralString(1, ))
+ endArguments(1, (, ))
+ handleSend(print, ;)
+ handleExpressionStatement(;)
+ endBlockFunctionBody(3, {, })
+ endTopLevelMethod(void, null, })
+ endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_48999.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_48999.dart.intertwined.expect
new file mode 100644
index 0000000..2b416ce
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_48999.dart.intertwined.expect
@@ -0,0 +1,178 @@
+parseUnit(void)
+ skipErrorTokens(void)
+ listener: beginCompilationUnit(void)
+ syntheticPreviousToken(void)
+ parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+ parseMetadataStar()
+ listener: beginMetadataStar(void)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl()
+ listener: beginTopLevelMember(void)
+ parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, main, false)
+ listener: beginTopLevelMethod(, null, null)
+ listener: handleVoidKeyword(void)
+ ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+ listener: handleIdentifier(main, topLevelFunctionDeclaration)
+ parseMethodTypeVar(main)
+ listener: handleNoTypeVariables(()
+ parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+ parseFormalParameters(main, MemberKind.TopLevelMethod)
+ parseFormalParametersRest((, MemberKind.TopLevelMethod)
+ listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+ listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+ parseAsyncModifierOpt())
+ listener: handleAsyncModifier(null, null)
+ inPlainSync()
+ parseFunctionBody(), false, false)
+ listener: beginBlockFunctionBody({)
+ notEofOrValue(}, dynamic)
+ parseStatement({)
+ parseStatementX({)
+ parseExpressionStatementOrDeclaration({, false)
+ parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+ looksLikeLocalFunction(i)
+ listener: beginMetadataStar(dynamic)
+ listener: endMetadataStar(0)
+ listener: handleIdentifier(dynamic, typeReference)
+ listener: handleNoTypeArguments(i)
+ listener: handleType(dynamic, null)
+ listener: beginVariablesDeclaration(i, null, null)
+ parseVariablesDeclarationRest(dynamic, true)
+ parseOptionallyInitializedIdentifier(dynamic)
+ ensureIdentifier(dynamic, localVariableDeclaration)
+ listener: handleIdentifier(i, localVariableDeclaration)
+ listener: beginInitializedIdentifier(i)
+ parseVariableInitializerOpt(i)
+ listener: beginVariableInitializer(=)
+ parseExpression(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseLiteralInt(=)
+ listener: handleLiteralInt(10)
+ listener: endVariableInitializer(=)
+ listener: endInitializedIdentifier(i)
+ ensureSemicolon(10)
+ listener: endVariablesDeclaration(1, ;)
+ notEofOrValue(}, print)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(print)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseSendOrFunctionLiteral(;, expression)
+ looksLikeFunctionBody(;)
+ parseSend(;, expression)
+ isNextIdentifier(;)
+ ensureIdentifier(;, expression)
+ listener: handleIdentifier(print, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(print)
+ parseArguments(print)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString(')
+ parseExpression(${)
+ parsePrecedenceExpression(${, 1, true)
+ parseUnaryExpression(${, true)
+ parsePrimary(${, expression)
+ parseSendOrFunctionLiteral(${, expression)
+ parseSend(${, expression)
+ isNextIdentifier(${)
+ ensureIdentifier(${, expression)
+ listener: handleIdentifier(i, expression)
+ listener: handleNoTypeArguments(as)
+ parseArgumentsOpt(i)
+ listener: handleNoArguments(as)
+ listener: handleSend(i, as)
+ parseAsOperatorRest(i)
+ listener: beginAsOperatorType(as)
+ computeTypeAfterIsOrAs(as)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(?)
+ listener: handleType(int, ?)
+ listener: endAsOperatorType(as)
+ listener: handleAsOperator(as)
+ skipChainedAsIsOperators(?)
+ listener: handleInterpolationExpression(${, })
+ parseStringPart(})
+ listener: handleStringPart(')
+ listener: endLiteralString(1, ))
+ listener: endArguments(1, (, ))
+ listener: handleSend(print, ;)
+ ensureSemicolon())
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, print)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(print)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseSendOrFunctionLiteral(;, expression)
+ looksLikeFunctionBody(;)
+ parseSend(;, expression)
+ isNextIdentifier(;)
+ ensureIdentifier(;, expression)
+ listener: handleIdentifier(print, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(print)
+ parseArguments(print)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString(')
+ parseExpression(${)
+ parsePrecedenceExpression(${, 1, true)
+ parseUnaryExpression(${, true)
+ parsePrimary(${, expression)
+ parseSendOrFunctionLiteral(${, expression)
+ parseSend(${, expression)
+ isNextIdentifier(${)
+ ensureIdentifier(${, expression)
+ listener: handleIdentifier(i, expression)
+ listener: handleNoTypeArguments(is)
+ parseArgumentsOpt(i)
+ listener: handleNoArguments(is)
+ listener: handleSend(i, is)
+ parseIsOperatorRest(i)
+ listener: beginIsOperatorType(is)
+ computeTypeAfterIsOrAs(is)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(?)
+ listener: handleType(int, ?)
+ listener: endIsOperatorType(is)
+ listener: handleIsOperator(is, null)
+ skipChainedAsIsOperators(?)
+ listener: handleInterpolationExpression(${, })
+ parseStringPart(})
+ listener: handleStringPart(')
+ listener: endLiteralString(1, ))
+ listener: endArguments(1, (, ))
+ listener: handleSend(print, ;)
+ ensureSemicolon())
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, })
+ listener: endBlockFunctionBody(3, {, })
+ listener: endTopLevelMethod(void, null, })
+ listener: endTopLevelDeclaration()
+ reportAllErrorTokens(void)
+ listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_48999.dart.parser.expect b/pkg/front_end/parser_testcases/nnbd/issue_48999.dart.parser.expect
new file mode 100644
index 0000000..002a00e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_48999.dart.parser.expect
@@ -0,0 +1,13 @@
+void main() {
+dynamic i = 10;
+print('${i as int?}');
+print('${i is int?}');
+}
+
+
+void[KeywordToken] main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+dynamic[KeywordToken] i[StringToken] =[SimpleToken] 10[StringToken];[SimpleToken]
+print[StringToken]([BeginToken]'[StringToken]${[BeginToken]i[StringToken] as[KeywordToken] int[StringToken]?[SimpleToken]}[SimpleToken]'[StringToken])[SimpleToken];[SimpleToken]
+print[StringToken]([BeginToken]'[StringToken]${[BeginToken]i[StringToken] is[KeywordToken] int[StringToken]?[SimpleToken]}[SimpleToken]'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_48999.dart.scanner.expect b/pkg/front_end/parser_testcases/nnbd/issue_48999.dart.scanner.expect
new file mode 100644
index 0000000..002a00e
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_48999.dart.scanner.expect
@@ -0,0 +1,13 @@
+void main() {
+dynamic i = 10;
+print('${i as int?}');
+print('${i is int?}');
+}
+
+
+void[KeywordToken] main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+dynamic[KeywordToken] i[StringToken] =[SimpleToken] 10[StringToken];[SimpleToken]
+print[StringToken]([BeginToken]'[StringToken]${[BeginToken]i[StringToken] as[KeywordToken] int[StringToken]?[SimpleToken]}[SimpleToken]'[StringToken])[SimpleToken];[SimpleToken]
+print[StringToken]([BeginToken]'[StringToken]${[BeginToken]i[StringToken] is[KeywordToken] int[StringToken]?[SimpleToken]}[SimpleToken]'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_48999.equivalence_info b/pkg/front_end/parser_testcases/nnbd/issue_48999.equivalence_info
new file mode 100644
index 0000000..f638038
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_48999.equivalence_info
@@ -0,0 +1,7 @@
+files:
+ - issue_48999.dart
+ - issue_48999_prime.dart
+filters:
+ - ignoreListenerArguments
+ignored:
+ - handleParenthesizedExpression
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart b/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart
new file mode 100644
index 0000000..2af71c5
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart
@@ -0,0 +1,5 @@
+void main() {
+ dynamic i = 10;
+ print('${(i as int?)}');
+ print('${(i is int?)}');
+}
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart.expect b/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart.expect
new file mode 100644
index 0000000..de2181f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart.expect
@@ -0,0 +1,71 @@
+beginCompilationUnit(void)
+ beginMetadataStar(void)
+ endMetadataStar(0)
+ beginTopLevelMember(void)
+ beginTopLevelMethod(, null, null)
+ handleVoidKeyword(void)
+ handleIdentifier(main, topLevelFunctionDeclaration)
+ handleNoTypeVariables(()
+ beginFormalParameters((, MemberKind.TopLevelMethod)
+ endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+ handleAsyncModifier(null, null)
+ beginBlockFunctionBody({)
+ beginMetadataStar(dynamic)
+ endMetadataStar(0)
+ handleIdentifier(dynamic, typeReference)
+ handleNoTypeArguments(i)
+ handleType(dynamic, null)
+ beginVariablesDeclaration(i, null, null)
+ handleIdentifier(i, localVariableDeclaration)
+ beginInitializedIdentifier(i)
+ beginVariableInitializer(=)
+ handleLiteralInt(10)
+ endVariableInitializer(=)
+ endInitializedIdentifier(i)
+ endVariablesDeclaration(1, ;)
+ handleIdentifier(print, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ beginLiteralString(')
+ handleIdentifier(i, expression)
+ handleNoTypeArguments(as)
+ handleNoArguments(as)
+ handleSend(i, as)
+ beginAsOperatorType(as)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(?)
+ handleType(int, ?)
+ endAsOperatorType(as)
+ handleAsOperator(as)
+ handleParenthesizedExpression(()
+ handleInterpolationExpression(${, })
+ handleStringPart(')
+ endLiteralString(1, ))
+ endArguments(1, (, ))
+ handleSend(print, ;)
+ handleExpressionStatement(;)
+ handleIdentifier(print, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ beginLiteralString(')
+ handleIdentifier(i, expression)
+ handleNoTypeArguments(is)
+ handleNoArguments(is)
+ handleSend(i, is)
+ beginIsOperatorType(is)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(?)
+ handleType(int, ?)
+ endIsOperatorType(is)
+ handleIsOperator(is, null)
+ handleParenthesizedExpression(()
+ handleInterpolationExpression(${, })
+ handleStringPart(')
+ endLiteralString(1, ))
+ endArguments(1, (, ))
+ handleSend(print, ;)
+ handleExpressionStatement(;)
+ endBlockFunctionBody(3, {, })
+ endTopLevelMethod(void, null, })
+ endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart.intertwined.expect b/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart.intertwined.expect
new file mode 100644
index 0000000..85d13b9
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart.intertwined.expect
@@ -0,0 +1,198 @@
+parseUnit(void)
+ skipErrorTokens(void)
+ listener: beginCompilationUnit(void)
+ syntheticPreviousToken(void)
+ parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+ parseMetadataStar()
+ listener: beginMetadataStar(void)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl()
+ listener: beginTopLevelMember(void)
+ parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, main, false)
+ listener: beginTopLevelMethod(, null, null)
+ listener: handleVoidKeyword(void)
+ ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
+ listener: handleIdentifier(main, topLevelFunctionDeclaration)
+ parseMethodTypeVar(main)
+ listener: handleNoTypeVariables(()
+ parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+ parseFormalParameters(main, MemberKind.TopLevelMethod)
+ parseFormalParametersRest((, MemberKind.TopLevelMethod)
+ listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+ listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+ parseAsyncModifierOpt())
+ listener: handleAsyncModifier(null, null)
+ inPlainSync()
+ parseFunctionBody(), false, false)
+ listener: beginBlockFunctionBody({)
+ notEofOrValue(}, dynamic)
+ parseStatement({)
+ parseStatementX({)
+ parseExpressionStatementOrDeclaration({, false)
+ parseExpressionStatementOrDeclarationAfterModifiers({, {, null, null, null, false)
+ looksLikeLocalFunction(i)
+ listener: beginMetadataStar(dynamic)
+ listener: endMetadataStar(0)
+ listener: handleIdentifier(dynamic, typeReference)
+ listener: handleNoTypeArguments(i)
+ listener: handleType(dynamic, null)
+ listener: beginVariablesDeclaration(i, null, null)
+ parseVariablesDeclarationRest(dynamic, true)
+ parseOptionallyInitializedIdentifier(dynamic)
+ ensureIdentifier(dynamic, localVariableDeclaration)
+ listener: handleIdentifier(i, localVariableDeclaration)
+ listener: beginInitializedIdentifier(i)
+ parseVariableInitializerOpt(i)
+ listener: beginVariableInitializer(=)
+ parseExpression(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseLiteralInt(=)
+ listener: handleLiteralInt(10)
+ listener: endVariableInitializer(=)
+ listener: endInitializedIdentifier(i)
+ ensureSemicolon(10)
+ listener: endVariablesDeclaration(1, ;)
+ notEofOrValue(}, print)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(print)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseSendOrFunctionLiteral(;, expression)
+ looksLikeFunctionBody(;)
+ parseSend(;, expression)
+ isNextIdentifier(;)
+ ensureIdentifier(;, expression)
+ listener: handleIdentifier(print, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(print)
+ parseArguments(print)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString(')
+ parseExpression(${)
+ parsePrecedenceExpression(${, 1, true)
+ parseUnaryExpression(${, true)
+ parsePrimary(${, expression)
+ parseParenthesizedExpressionOrFunctionLiteral(${)
+ parseParenthesizedExpression(${)
+ parseExpressionInParenthesis(${)
+ parseExpressionInParenthesisRest(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(i, expression)
+ listener: handleNoTypeArguments(as)
+ parseArgumentsOpt(i)
+ listener: handleNoArguments(as)
+ listener: handleSend(i, as)
+ parseAsOperatorRest(i)
+ listener: beginAsOperatorType(as)
+ computeTypeAfterIsOrAs(as)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(?)
+ listener: handleType(int, ?)
+ listener: endAsOperatorType(as)
+ listener: handleAsOperator(as)
+ skipChainedAsIsOperators(?)
+ ensureCloseParen(?, ()
+ listener: handleParenthesizedExpression(()
+ listener: handleInterpolationExpression(${, })
+ parseStringPart(})
+ listener: handleStringPart(')
+ listener: endLiteralString(1, ))
+ listener: endArguments(1, (, ))
+ listener: handleSend(print, ;)
+ ensureSemicolon())
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, print)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclarationAfterModifiers(;, ;, null, null, null, false)
+ looksLikeLocalFunction(print)
+ parseExpressionStatement(;)
+ parseExpression(;)
+ parsePrecedenceExpression(;, 1, true)
+ parseUnaryExpression(;, true)
+ parsePrimary(;, expression)
+ parseSendOrFunctionLiteral(;, expression)
+ looksLikeFunctionBody(;)
+ parseSend(;, expression)
+ isNextIdentifier(;)
+ ensureIdentifier(;, expression)
+ listener: handleIdentifier(print, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(print)
+ parseArguments(print)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralString(()
+ parseSingleLiteralString(()
+ listener: beginLiteralString(')
+ parseExpression(${)
+ parsePrecedenceExpression(${, 1, true)
+ parseUnaryExpression(${, true)
+ parsePrimary(${, expression)
+ parseParenthesizedExpressionOrFunctionLiteral(${)
+ parseParenthesizedExpression(${)
+ parseExpressionInParenthesis(${)
+ parseExpressionInParenthesisRest(()
+ parseExpression(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(i, expression)
+ listener: handleNoTypeArguments(is)
+ parseArgumentsOpt(i)
+ listener: handleNoArguments(is)
+ listener: handleSend(i, is)
+ parseIsOperatorRest(i)
+ listener: beginIsOperatorType(is)
+ computeTypeAfterIsOrAs(is)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(?)
+ listener: handleType(int, ?)
+ listener: endIsOperatorType(is)
+ listener: handleIsOperator(is, null)
+ skipChainedAsIsOperators(?)
+ ensureCloseParen(?, ()
+ listener: handleParenthesizedExpression(()
+ listener: handleInterpolationExpression(${, })
+ parseStringPart(})
+ listener: handleStringPart(')
+ listener: endLiteralString(1, ))
+ listener: endArguments(1, (, ))
+ listener: handleSend(print, ;)
+ ensureSemicolon())
+ listener: handleExpressionStatement(;)
+ notEofOrValue(}, })
+ listener: endBlockFunctionBody(3, {, })
+ listener: endTopLevelMethod(void, null, })
+ listener: endTopLevelDeclaration()
+ reportAllErrorTokens(void)
+ listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart.parser.expect b/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart.parser.expect
new file mode 100644
index 0000000..d5fdfd7
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart.parser.expect
@@ -0,0 +1,13 @@
+void main() {
+dynamic i = 10;
+print('${(i as int?)}');
+print('${(i is int?)}');
+}
+
+
+void[KeywordToken] main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+dynamic[KeywordToken] i[StringToken] =[SimpleToken] 10[StringToken];[SimpleToken]
+print[StringToken]([BeginToken]'[StringToken]${[BeginToken]([BeginToken]i[StringToken] as[KeywordToken] int[StringToken]?[SimpleToken])[SimpleToken]}[SimpleToken]'[StringToken])[SimpleToken];[SimpleToken]
+print[StringToken]([BeginToken]'[StringToken]${[BeginToken]([BeginToken]i[StringToken] is[KeywordToken] int[StringToken]?[SimpleToken])[SimpleToken]}[SimpleToken]'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart.scanner.expect b/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart.scanner.expect
new file mode 100644
index 0000000..d5fdfd7
--- /dev/null
+++ b/pkg/front_end/parser_testcases/nnbd/issue_48999_prime.dart.scanner.expect
@@ -0,0 +1,13 @@
+void main() {
+dynamic i = 10;
+print('${(i as int?)}');
+print('${(i is int?)}');
+}
+
+
+void[KeywordToken] main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+dynamic[KeywordToken] i[StringToken] =[SimpleToken] 10[StringToken];[SimpleToken]
+print[StringToken]([BeginToken]'[StringToken]${[BeginToken]([BeginToken]i[StringToken] as[KeywordToken] int[StringToken]?[SimpleToken])[SimpleToken]}[SimpleToken]'[StringToken])[SimpleToken];[SimpleToken]
+print[StringToken]([BeginToken]'[StringToken]${[BeginToken]([BeginToken]i[StringToken] is[KeywordToken] int[StringToken]?[SimpleToken])[SimpleToken]}[SimpleToken]'[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/testcases/general/issue_48999.dart b/pkg/front_end/testcases/general/issue_48999.dart
new file mode 100644
index 0000000..29f7662
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_48999.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+void main() {
+ dynamic i = 10;
+ print('${i as int?}');
+ print('${i is int?}');
+}
diff --git a/pkg/front_end/testcases/general/issue_48999.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue_48999.dart.textual_outline.expect
new file mode 100644
index 0000000..ab73b3a
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_48999.dart.textual_outline.expect
@@ -0,0 +1 @@
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue_48999.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue_48999.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..ab73b3a
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_48999.dart.textual_outline_modelled.expect
@@ -0,0 +1 @@
+void main() {}
diff --git a/pkg/front_end/testcases/general/issue_48999.dart.weak.expect b/pkg/front_end/testcases/general/issue_48999.dart.weak.expect
new file mode 100644
index 0000000..804410f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_48999.dart.weak.expect
@@ -0,0 +1,9 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → void {
+ dynamic i = 10;
+ core::print("${i as{ForNonNullableByDefault} core::int?}");
+ core::print("${i{core::int?} is{ForNonNullableByDefault} core::int?}");
+}
diff --git a/pkg/front_end/testcases/general/issue_48999.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue_48999.dart.weak.modular.expect
new file mode 100644
index 0000000..804410f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_48999.dart.weak.modular.expect
@@ -0,0 +1,9 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → void {
+ dynamic i = 10;
+ core::print("${i as{ForNonNullableByDefault} core::int?}");
+ core::print("${i{core::int?} is{ForNonNullableByDefault} core::int?}");
+}
diff --git a/pkg/front_end/testcases/general/issue_48999.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue_48999.dart.weak.outline.expect
new file mode 100644
index 0000000..684454e
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_48999.dart.weak.outline.expect
@@ -0,0 +1,5 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static method main() → void
+ ;
diff --git a/pkg/front_end/testcases/general/issue_48999.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue_48999.dart.weak.transformed.expect
new file mode 100644
index 0000000..804410f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue_48999.dart.weak.transformed.expect
@@ -0,0 +1,9 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method main() → void {
+ dynamic i = 10;
+ core::print("${i as{ForNonNullableByDefault} core::int?}");
+ core::print("${i{core::int?} is{ForNonNullableByDefault} core::int?}");
+}
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index 0d2af9b..fb51b79 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -13,6 +13,7 @@
dart2js/late_statics: SemiFuzzFailure
static_field_lowering/opt_in: SemiFuzzFailure
+dart2js/mixin_super/main: SemiFuzzFailure # https://github.com/dart-lang/sdk/issues/49339
dartdevc/static_interop_erasure/main: SemiFuzzCrash # https://github.com/dart-lang/sdk/issues/49301
const_functions/const_functions_list: SemiFuzzCrash
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index f8898ce..bfca27f 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -10,6 +10,7 @@
no_such_method_forwarders/abstract_override_abstract_different_type: SemiFuzzFailure
no_such_method_forwarders/abstract_override_with_different_signature: SemiFuzzFailure
+dart2js/mixin_super/main: SemiFuzzFailure # https://github.com/dart-lang/sdk/issues/49339
dartdevc/static_interop_erasure/main: SemiFuzzCrash # https://github.com/dart-lang/sdk/issues/49301
dart2js/tear_off_patch/main: semiFuzzFailureOnForceRebuildBodies # needs custom libraries.json (and platform?) not setup here
@@ -19,9 +20,6 @@
general/with_dependencies/issue_43084/issue_43084: SemiFuzzFailure # https://dart-review.googlesource.com/c/sdk/+/242543
inference_update_1/horizontal_inference_extension_method: semiFuzzFailureOnForceRebuildBodies # Errors on split
inference_update_1/horizontal_inference_extension_method: SemiFuzzFailure # https://dart-review.googlesource.com/c/sdk/+/245004
-late_lowering/issue41436b: SemiFuzzFailure # https://dart-review.googlesource.com/c/sdk/+/242445
-late_lowering/issue41436c/issue41436c: SemiFuzzFailure # Looks similar to https://dart-review.googlesource.com/c/sdk/+/242445
-late_lowering/late_override: SemiFuzzFailure # Looks similar to https://dart-review.googlesource.com/c/sdk/+/242445
late_lowering/private_members: SemiFuzzFailure # Looks similar to https://dart-review.googlesource.com/c/sdk/+/242285
macros/multiple_imports: SemiFuzzFailure # probably augment imports that isn't split correctly.
nnbd_mixed/hierarchy/in_dill_out_in/in_out_in: SemiFuzzFailure # lots of stuff --- not digging in for now
diff --git a/pkg/test_runner/lib/src/command_output.dart b/pkg/test_runner/lib/src/command_output.dart
index 807b974e..5e78325 100644
--- a/pkg/test_runner/lib/src/command_output.dart
+++ b/pkg/test_runner/lib/src/command_output.dart
@@ -852,6 +852,7 @@
static const _uncaughtExceptionExitCode = 255;
static const _adbInfraFailureCodes = [10];
static const _ubsanFailureExitCode = 1;
+ static const _frontEndTestExitCode = 1;
VMCommandOutput(Command command, int exitCode, bool timedOut,
List<int> stdout, List<int> stderr, Duration time, int pid)
@@ -909,10 +910,14 @@
// The actual outcome depends on the exitCode.
if (exitCode == _compileErrorExitCode) return Expectation.compileTimeError;
if (exitCode == _uncaughtExceptionExitCode) return Expectation.runtimeError;
- if ((exitCode == _ubsanFailureExitCode) &&
- (testCase.configuration.sanitizer == Sanitizer.ubsan)) {
+ if (exitCode == _ubsanFailureExitCode &&
+ testCase.configuration.sanitizer == Sanitizer.ubsan) {
return Expectation.fail;
}
+ if (exitCode == _frontEndTestExitCode &&
+ testCase.displayName.startsWith('pkg/front_end/test/')) {
+ return Expectation.runtimeError;
+ }
if (exitCode != 0) {
var ourExit = 5;
// Unknown nonzero exit code from vm command.
diff --git a/tools/VERSION b/tools/VERSION
index 580e6a0..ff8d5ab 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 18
PATCH 0
-PRERELEASE 231
+PRERELEASE 232
PRERELEASE_PATCH 0
\ No newline at end of file