mirror of
https://github.com/dart-lang/sdk
synced 2024-09-19 21:21:41 +00:00
Improve field type argument recovery
This CL improves recovery when parsing field type arguments and adds more tests for parsing type parameters and type arguments. Change-Id: Ib6ee4081f898d0421d90a66de84d686206a06a8f Reviewed-on: https://dart-review.googlesource.com/56682 Commit-Queue: Dan Rubel <danrubel@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
6bc7288e70
commit
b7336ab443
|
@ -1310,13 +1310,6 @@ class RecoveryParserTest_Fasta extends FastaParserTestCase
|
|||
]);
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_incompleteTypeArguments_field() {
|
||||
// TODO(brianwilkerson) reportUnrecoverableErrorWithToken
|
||||
super.test_incompleteTypeArguments_field();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_missingIdentifier_afterAnnotation() {
|
||||
|
|
|
@ -91,6 +91,14 @@ List<List<int>> _s_;
|
|||
''');
|
||||
}
|
||||
|
||||
void test_typeArguments_inner_last2() {
|
||||
testRecovery('''
|
||||
List<List<int> f;
|
||||
''', [ParserErrorCode.EXPECTED_TOKEN], '''
|
||||
List<List<int>> f;
|
||||
''');
|
||||
}
|
||||
|
||||
@failingTest
|
||||
void test_typeArguments_inner_notLast() {
|
||||
testRecovery('''
|
||||
|
@ -118,6 +126,14 @@ List<int> _s_;
|
|||
''');
|
||||
}
|
||||
|
||||
void test_typeArguments_outer_last2() {
|
||||
testRecovery('''
|
||||
List<int f;
|
||||
''', [ParserErrorCode.EXPECTED_TOKEN], '''
|
||||
List<int> f;
|
||||
''');
|
||||
}
|
||||
|
||||
void test_typeArguments_missing_comma() {
|
||||
testRecovery('''
|
||||
List<int double> f;
|
||||
|
|
|
@ -2389,8 +2389,8 @@ class Parser {
|
|||
varFinalOrConst, fasta.templateExtraneousModifier);
|
||||
}
|
||||
}
|
||||
return parseTopLevelMethod(
|
||||
beforeStart, externalToken, beforeType, typeInfo, getOrSet, token);
|
||||
return parseTopLevelMethod(beforeStart, externalToken, beforeType,
|
||||
typeInfo, getOrSet, token.next);
|
||||
}
|
||||
|
||||
if (getOrSet != null) {
|
||||
|
@ -2398,7 +2398,7 @@ class Parser {
|
|||
getOrSet, fasta.templateExtraneousModifier);
|
||||
}
|
||||
return parseFields(beforeStart, externalToken, null, null, varFinalOrConst,
|
||||
beforeType, typeInfo, token, true);
|
||||
beforeType, typeInfo, token.next, true);
|
||||
}
|
||||
|
||||
Token parseFields(
|
||||
|
@ -2409,7 +2409,7 @@ class Parser {
|
|||
Token varFinalOrConst,
|
||||
Token beforeType,
|
||||
TypeInfo typeInfo,
|
||||
Token beforeName,
|
||||
Token name,
|
||||
bool isTopLevel) {
|
||||
if (externalToken != null) {
|
||||
reportRecoverableError(externalToken, fasta.messageExternalField);
|
||||
|
@ -2422,8 +2422,7 @@ class Parser {
|
|||
}
|
||||
if (typeInfo == noType) {
|
||||
if (varFinalOrConst == null) {
|
||||
reportRecoverableError(
|
||||
beforeName.next, fasta.messageMissingConstFinalVarOrType);
|
||||
reportRecoverableError(name, fasta.messageMissingConstFinalVarOrType);
|
||||
}
|
||||
} else {
|
||||
if (varFinalOrConst != null && optional('var', varFinalOrConst)) {
|
||||
|
@ -2431,16 +2430,16 @@ class Parser {
|
|||
}
|
||||
}
|
||||
|
||||
typeInfo.parseType(beforeType, this);
|
||||
Token token = typeInfo.parseType(beforeType, this);
|
||||
assert(token.next == name);
|
||||
|
||||
IdentifierContext context = isTopLevel
|
||||
? IdentifierContext.topLevelVariableDeclaration
|
||||
: IdentifierContext.fieldDeclaration;
|
||||
Token name = ensureIdentifier(beforeName, context);
|
||||
name = ensureIdentifier(token, context);
|
||||
|
||||
int fieldCount = 1;
|
||||
Token token =
|
||||
parseFieldInitializerOpt(name, name, varFinalOrConst, isTopLevel);
|
||||
token = parseFieldInitializerOpt(name, name, varFinalOrConst, isTopLevel);
|
||||
while (optional(',', token.next)) {
|
||||
name = ensureIdentifier(token.next, context);
|
||||
token = parseFieldInitializerOpt(name, name, varFinalOrConst, isTopLevel);
|
||||
|
@ -2458,14 +2457,14 @@ class Parser {
|
|||
}
|
||||
|
||||
Token parseTopLevelMethod(Token beforeStart, Token externalToken,
|
||||
Token beforeType, TypeInfo typeInfo, Token getOrSet, Token beforeName) {
|
||||
Token beforeType, TypeInfo typeInfo, Token getOrSet, Token name) {
|
||||
listener.beginTopLevelMethod(beforeStart, externalToken);
|
||||
|
||||
typeInfo.parseType(beforeType, this);
|
||||
Token name = ensureIdentifier(
|
||||
beforeName, IdentifierContext.topLevelFunctionDeclaration);
|
||||
Token token = typeInfo.parseType(beforeType, this);
|
||||
assert(token.next == (getOrSet ?? name));
|
||||
name = ensureIdentifier(
|
||||
getOrSet ?? token, IdentifierContext.topLevelFunctionDeclaration);
|
||||
|
||||
Token token;
|
||||
bool isGetter = false;
|
||||
if (getOrSet == null) {
|
||||
token = computeTypeParamOrArg(name, true).parseVariables(name, this);
|
||||
|
@ -2995,7 +2994,7 @@ class Parser {
|
|||
beforeType,
|
||||
typeInfo,
|
||||
getOrSet,
|
||||
token);
|
||||
token.next);
|
||||
listener.endMember();
|
||||
return token;
|
||||
} else if (optional('===', next2) ||
|
||||
|
@ -3016,7 +3015,7 @@ class Parser {
|
|||
beforeType,
|
||||
typeInfo,
|
||||
getOrSet,
|
||||
token);
|
||||
token.next);
|
||||
listener.endMember();
|
||||
return token;
|
||||
}
|
||||
|
@ -3069,14 +3068,22 @@ class Parser {
|
|||
beforeType,
|
||||
typeInfo,
|
||||
getOrSet,
|
||||
token);
|
||||
token.next);
|
||||
} else {
|
||||
if (getOrSet != null) {
|
||||
reportRecoverableErrorWithToken(
|
||||
getOrSet, fasta.templateExtraneousModifier);
|
||||
}
|
||||
token = parseFields(beforeStart, externalToken, staticToken,
|
||||
covariantToken, varFinalOrConst, beforeType, typeInfo, token, false);
|
||||
token = parseFields(
|
||||
beforeStart,
|
||||
externalToken,
|
||||
staticToken,
|
||||
covariantToken,
|
||||
varFinalOrConst,
|
||||
beforeType,
|
||||
typeInfo,
|
||||
token.next,
|
||||
false);
|
||||
}
|
||||
listener.endMember();
|
||||
return token;
|
||||
|
@ -3091,8 +3098,8 @@ class Parser {
|
|||
Token beforeType,
|
||||
TypeInfo typeInfo,
|
||||
Token getOrSet,
|
||||
Token beforeName) {
|
||||
bool isOperator = getOrSet == null && optional('operator', beforeName.next);
|
||||
Token name) {
|
||||
bool isOperator = getOrSet == null && optional('operator', name);
|
||||
|
||||
if (staticToken != null) {
|
||||
if (isOperator) {
|
||||
|
@ -3125,16 +3132,17 @@ class Parser {
|
|||
|
||||
// TODO(danrubel): Consider parsing the name before calling beginMethod
|
||||
// rather than passing the name token into beginMethod.
|
||||
listener.beginMethod(externalToken, staticToken, covariantToken,
|
||||
varFinalOrConst, beforeName.next);
|
||||
listener.beginMethod(
|
||||
externalToken, staticToken, covariantToken, varFinalOrConst, name);
|
||||
|
||||
typeInfo.parseType(beforeType, this);
|
||||
Token token = typeInfo.parseType(beforeType, this);
|
||||
assert(token.next == (getOrSet ?? name));
|
||||
token = getOrSet ?? token;
|
||||
|
||||
Token token;
|
||||
if (isOperator) {
|
||||
token = parseOperatorName(beforeName);
|
||||
token = parseOperatorName(token);
|
||||
} else {
|
||||
token = ensureIdentifier(beforeName, IdentifierContext.methodDeclaration);
|
||||
token = ensureIdentifier(token, IdentifierContext.methodDeclaration);
|
||||
token = parseQualifiedRestOpt(
|
||||
token, IdentifierContext.methodDeclarationContinuation);
|
||||
}
|
||||
|
@ -3150,7 +3158,7 @@ class Parser {
|
|||
MemberKind kind = staticToken != null
|
||||
? MemberKind.StaticMethod
|
||||
: MemberKind.NonStaticMethod;
|
||||
checkFormals(beforeName.next, isGetter, token.next, kind);
|
||||
checkFormals(name, isGetter, token.next, kind);
|
||||
Token beforeParam = token;
|
||||
token = parseFormalParametersOpt(token, kind);
|
||||
token = parseInitializersOpt(token);
|
||||
|
@ -5815,7 +5823,7 @@ class Parser {
|
|||
Token covariantToken,
|
||||
Token varFinalOrConst,
|
||||
Token beforeType) {
|
||||
TypeInfo typeInfo = computeType(beforeType, true);
|
||||
TypeInfo typeInfo = computeType(beforeType, true, true);
|
||||
|
||||
Token beforeName = typeInfo.skipType(beforeType);
|
||||
Token next = beforeName.next;
|
||||
|
@ -5829,12 +5837,6 @@ class Parser {
|
|||
}
|
||||
|
||||
assert((next.isOperator && next.endGroup == null) || optional('===', next));
|
||||
if (!next.isUserDefinableOperator) {
|
||||
beforeName = next;
|
||||
insertSyntheticIdentifier(beforeName, IdentifierContext.methodDeclaration,
|
||||
message: fasta.templateInvalidOperator.withArguments(next),
|
||||
messageOnToken: next);
|
||||
}
|
||||
|
||||
Token token = parseMethod(
|
||||
beforeStart,
|
||||
|
@ -5845,7 +5847,7 @@ class Parser {
|
|||
beforeType,
|
||||
typeInfo,
|
||||
null,
|
||||
beforeName);
|
||||
beforeName.next);
|
||||
listener.endMember();
|
||||
return token;
|
||||
}
|
||||
|
@ -5890,7 +5892,7 @@ class Parser {
|
|||
beforeType,
|
||||
typeInfo,
|
||||
getOrSet,
|
||||
token);
|
||||
token.next);
|
||||
} else if (token == beforeStart) {
|
||||
// TODO(danrubel): Provide a more specific error message for extra ';'.
|
||||
reportRecoverableErrorWithToken(next, fasta.templateExpectedClassMember);
|
||||
|
@ -5900,8 +5902,16 @@ class Parser {
|
|||
token = next;
|
||||
}
|
||||
} else {
|
||||
token = parseFields(beforeStart, externalToken, staticToken,
|
||||
covariantToken, varFinalOrConst, beforeType, typeInfo, token, false);
|
||||
token = parseFields(
|
||||
beforeStart,
|
||||
externalToken,
|
||||
staticToken,
|
||||
covariantToken,
|
||||
varFinalOrConst,
|
||||
beforeType,
|
||||
typeInfo,
|
||||
token.next,
|
||||
false);
|
||||
}
|
||||
|
||||
listener.endMember();
|
||||
|
|
|
@ -23,7 +23,7 @@ import 'parser.dart' show Parser;
|
|||
|
||||
import 'type_info.dart';
|
||||
|
||||
import 'util.dart' show optional, skipMetadata;
|
||||
import 'util.dart' show isOneOf, optional, skipMetadata;
|
||||
|
||||
/// See documentation on the [noType] const.
|
||||
class NoType implements TypeInfo {
|
||||
|
@ -231,9 +231,7 @@ bool looksLikeTypeParamOrArg(bool inDeclaration, Token token) {
|
|||
if (inDeclaration && token.kind == IDENTIFIER_TOKEN) {
|
||||
Token next = token.next;
|
||||
if (next.kind == IDENTIFIER_TOKEN ||
|
||||
optional(',', next) ||
|
||||
optional('>', next) ||
|
||||
optional('>>', next)) {
|
||||
isOneOf(next, const [',', '>', '>>'])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -760,9 +758,8 @@ Token processEndGroup(Token token, BeginToken start, Parser parser) {
|
|||
// Extraneous tokens between `<` and `>`.
|
||||
parser.reportRecoverableErrorWithToken(next, fasta.templateUnexpectedToken);
|
||||
return start.endGroup;
|
||||
} else if (optional('>>', next) ||
|
||||
optional('>=', next) ||
|
||||
optional('>>=', next)) {
|
||||
} else if (isOneOf(next, const ['>>', '>=', '>>='])) {
|
||||
// Found single unbalanced `<`.
|
||||
return parser.rewriter.splitEndGroup(start, next);
|
||||
}
|
||||
// Ensure that `>` is inserted after any newly inserted synthetic tokens.
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
import 'package:front_end/src/fasta/messages.dart';
|
||||
import 'package:front_end/src/fasta/parser.dart';
|
||||
import 'package:front_end/src/fasta/parser/type_continuation.dart';
|
||||
import 'package:front_end/src/fasta/parser/type_info.dart';
|
||||
import 'package:front_end/src/fasta/parser/type_info_impl.dart';
|
||||
import 'package:front_end/src/fasta/scanner.dart';
|
||||
|
@ -522,23 +523,25 @@ class TypeInfoTest {
|
|||
// TOOD(danrubel): dynamic, do, other keywords, malformed, recovery
|
||||
// <T>
|
||||
|
||||
// TODO(danrubel): Improve missing comma recovery
|
||||
expectTypeParamOrArg(noTypeParamOrArg, 'G<int double> g');
|
||||
// expectComplexInfo('G<int double> g',
|
||||
// required: true,
|
||||
// tokenAfter: 'g',
|
||||
// expectedCalls: [
|
||||
// 'handleIdentifier G typeReference',
|
||||
// 'beginTypeArguments <',
|
||||
// 'handleIdentifier int typeReference',
|
||||
// 'handleNoTypeArguments double',
|
||||
// 'handleType int double',
|
||||
// 'endTypeArguments 1 < >',
|
||||
// 'handleType G g',
|
||||
// ],
|
||||
// expectedErrors: [
|
||||
// error(codeExpectedToken, 6, 6)
|
||||
// ]);
|
||||
expectComplexInfo('G<int double> g',
|
||||
inDeclaration: true,
|
||||
expectedAfter: 'g',
|
||||
expectedCalls: [
|
||||
'handleIdentifier G typeReference',
|
||||
'beginTypeArguments <',
|
||||
'handleIdentifier int typeReference',
|
||||
'handleNoTypeArguments double' /* was , */,
|
||||
'handleType int double' /* was , */,
|
||||
'handleIdentifier double typeReference',
|
||||
'handleNoTypeArguments >',
|
||||
'handleType double >',
|
||||
'endTypeArguments 2 < >',
|
||||
'handleType G g',
|
||||
],
|
||||
expectedErrors: [
|
||||
error(codeExpectedButGot, 6, 6)
|
||||
]);
|
||||
|
||||
expectInfo(noType, 'C<>', required: false);
|
||||
expectComplexInfo('C<>', required: true, expectedCalls: [
|
||||
|
@ -1024,6 +1027,14 @@ class TypeParamOrArgInfoTest {
|
|||
'handleType T >',
|
||||
'endTypeArguments 2 < >'
|
||||
]);
|
||||
expectComplexTypeArg('<S T>',
|
||||
inDeclaration: true, expectedErrors: [error(codeExpectedButGot, 3, 1)]);
|
||||
expectComplexTypeArg('<S',
|
||||
inDeclaration: true, expectedErrors: [error(codeExpectedButGot, 2, 0)]);
|
||||
expectComplexTypeArg('<@Foo S', inDeclaration: true, expectedErrors: [
|
||||
error(codeUnexpectedToken, 1, 1),
|
||||
error(codeExpectedButGot, 7, 0)
|
||||
]);
|
||||
}
|
||||
|
||||
void test_computeTypeParam_complex() {
|
||||
|
@ -1214,6 +1225,14 @@ class TypeParamOrArgInfoTest {
|
|||
'endTypeVariable < null',
|
||||
'endTypeVariables 1 < >',
|
||||
]);
|
||||
expectComplexTypeParam('<S T>', inDeclaration: true, expectedErrors: [
|
||||
error(codeExpectedButGot, 3, 1),
|
||||
]);
|
||||
expectComplexTypeParam('<S', inDeclaration: true, expectedErrors: [
|
||||
error(codeExpectedButGot, 2, 0),
|
||||
]);
|
||||
expectComplexTypeParam('<@Foo S',
|
||||
inDeclaration: true, expectedErrors: [error(codeExpectedButGot, 7, 0)]);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1228,17 +1247,18 @@ void expectInfo(expectedInfo, String source, {bool required}) {
|
|||
|
||||
void expectComplexInfo(String source,
|
||||
{bool required,
|
||||
bool inDeclaration = false,
|
||||
String expectedAfter,
|
||||
List<String> expectedCalls,
|
||||
List<ExpectedError> expectedErrors}) {
|
||||
if (required == null) {
|
||||
computeComplex(source, scan(source), true, expectedAfter, expectedCalls,
|
||||
expectedErrors);
|
||||
computeComplex(source, scan(source), false, expectedAfter, expectedCalls,
|
||||
expectedErrors);
|
||||
computeComplex(source, scan(source), true, inDeclaration, expectedAfter,
|
||||
expectedCalls, expectedErrors);
|
||||
computeComplex(source, scan(source), false, inDeclaration, expectedAfter,
|
||||
expectedCalls, expectedErrors);
|
||||
} else {
|
||||
computeComplex(source, scan(source), required, expectedAfter, expectedCalls,
|
||||
expectedErrors);
|
||||
computeComplex(source, scan(source), required, inDeclaration, expectedAfter,
|
||||
expectedCalls, expectedErrors);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1274,12 +1294,14 @@ ComplexTypeInfo computeComplex(
|
|||
String source,
|
||||
Token start,
|
||||
bool required,
|
||||
bool inDeclaration,
|
||||
String expectedAfter,
|
||||
List<String> expectedCalls,
|
||||
List<ExpectedError> expectedErrors) {
|
||||
int expectedGtGtAndNullEndCount = countGtGtAndNullEnd(start);
|
||||
ComplexTypeInfo typeInfo =
|
||||
compute(const isInstanceOf<ComplexTypeInfo>(), source, start, required);
|
||||
ComplexTypeInfo typeInfo = compute(
|
||||
const isInstanceOf<ComplexTypeInfo>(), source, start, required,
|
||||
inDeclaration: inDeclaration);
|
||||
expect(typeInfo.start, start.next, reason: source);
|
||||
expect(typeInfo.couldBeExpression, isFalse);
|
||||
expectEnd(expectedAfter, typeInfo.skipType(start));
|
||||
|
@ -1291,28 +1313,35 @@ ComplexTypeInfo computeComplex(
|
|||
|
||||
expectEnd(expectedAfter, actualEnd);
|
||||
if (expectedCalls != null) {
|
||||
// TypeInfoListener listener2 = new TypeInfoListener();
|
||||
// new Parser(listener2).parseType(start, TypeContinuation.Required);
|
||||
// print('[');
|
||||
// for (String call in listener2.calls) {
|
||||
// print("'$call',");
|
||||
// }
|
||||
// print(']');
|
||||
|
||||
expect(listener.calls, expectedCalls, reason: source);
|
||||
try {
|
||||
expect(listener.calls, expectedCalls, reason: source);
|
||||
} catch (e) {
|
||||
TypeInfoListener listener2 = new TypeInfoListener();
|
||||
new Parser(listener2).parseType(start, TypeContinuation.Required);
|
||||
print('[');
|
||||
for (String call in listener2.calls) {
|
||||
print("'$call',");
|
||||
}
|
||||
print(']');
|
||||
rethrow;
|
||||
}
|
||||
}
|
||||
expect(listener.errors, expectedErrors, reason: source);
|
||||
return typeInfo;
|
||||
}
|
||||
|
||||
void expectComplexTypeArg(String source,
|
||||
{String expectedAfter,
|
||||
{bool inDeclaration = false,
|
||||
String expectedAfter,
|
||||
List<String> expectedCalls,
|
||||
List<ExpectedError> expectedErrors}) {
|
||||
Token start = scan(source);
|
||||
int expectedGtGtAndNullEndCount = countGtGtAndNullEnd(start);
|
||||
ComplexTypeParamOrArgInfo typeVarInfo = computeVar(
|
||||
const isInstanceOf<ComplexTypeParamOrArgInfo>(), source, start);
|
||||
const isInstanceOf<ComplexTypeParamOrArgInfo>(),
|
||||
source,
|
||||
start,
|
||||
inDeclaration);
|
||||
|
||||
expect(typeVarInfo.start, start.next, reason: source);
|
||||
expectEnd(expectedAfter, typeVarInfo.skip(start));
|
||||
|
@ -1343,13 +1372,17 @@ void expectComplexTypeArg(String source,
|
|||
}
|
||||
|
||||
void expectComplexTypeParam(String source,
|
||||
{String expectedAfter,
|
||||
{bool inDeclaration = false,
|
||||
String expectedAfter,
|
||||
List<String> expectedCalls,
|
||||
List<ExpectedError> expectedErrors}) {
|
||||
Token start = scan(source);
|
||||
int expectedGtGtAndNullEndCount = countGtGtAndNullEnd(start);
|
||||
ComplexTypeParamOrArgInfo typeVarInfo = computeVar(
|
||||
const isInstanceOf<ComplexTypeParamOrArgInfo>(), source, start);
|
||||
const isInstanceOf<ComplexTypeParamOrArgInfo>(),
|
||||
source,
|
||||
start,
|
||||
inDeclaration);
|
||||
|
||||
expect(typeVarInfo.start, start.next, reason: source);
|
||||
expectEnd(expectedAfter, typeVarInfo.skip(start));
|
||||
|
@ -1380,17 +1413,18 @@ void expectComplexTypeParam(String source,
|
|||
}
|
||||
|
||||
void expectTypeParamOrArg(expectedInfo, String source,
|
||||
{bool splitGtGt: true,
|
||||
{bool inDeclaration = false,
|
||||
String expectedAfter,
|
||||
List<String> expectedCalls,
|
||||
List<ExpectedError> expectedErrors}) {
|
||||
Token start = scan(source);
|
||||
computeVar(expectedInfo, source, start);
|
||||
computeVar(expectedInfo, source, start, inDeclaration);
|
||||
}
|
||||
|
||||
TypeParamOrArgInfo computeVar(expectedInfo, String source, Token start) {
|
||||
TypeParamOrArgInfo computeVar(
|
||||
expectedInfo, String source, Token start, bool inDeclaration) {
|
||||
int expectedGtGtAndNullEndCount = countGtGtAndNullEnd(start);
|
||||
TypeParamOrArgInfo typeVarInfo = computeTypeParamOrArg(start);
|
||||
TypeParamOrArgInfo typeVarInfo = computeTypeParamOrArg(start, inDeclaration);
|
||||
expect(typeVarInfo, expectedInfo, reason: source);
|
||||
expect(countGtGtAndNullEnd(start), expectedGtGtAndNullEndCount,
|
||||
reason: 'computeTypeParamOrArg should not modify the token stream');
|
||||
|
|
|
@ -7089,24 +7089,7 @@ Language/Classes/Constructors/Generative_Constructors/initializers_t12: Crash #
|
|||
Language/Classes/Constructors/Generative_Constructors/redirection_t03: Crash
|
||||
Language/Classes/Constructors/Generative_Constructors/redirection_t07: Crash
|
||||
Language/Classes/Constructors/Generative_Constructors/redirection_t08: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t02: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t05: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t07: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t08: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t09: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t10: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t11: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t12: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t13: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t14: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t15: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t16: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t17: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t18: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t19: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t20: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t21: Crash
|
||||
Language/Classes/Instance_Methods/Operators/allowed_names_t22: Crash
|
||||
Language/Classes/member_definition_t04: Crash
|
||||
Language/Classes/member_definition_t06: Crash
|
||||
Language/Classes/member_definition_t07: Crash
|
||||
|
|
|
@ -559,31 +559,10 @@ generic_methods_type_expression_test/01: Crash # 'file:*/pkg/compiler/lib/src/ss
|
|||
generic_methods_type_expression_test/03: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 1728 pos 16: 'type is MethodTypeVariableType': is not true.
|
||||
generic_methods_type_expression_test/none: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 1728 pos 16: 'type is MethodTypeVariableType': is not true.
|
||||
invocation_mirror_test: Crash # 'file:*/pkg/compiler/lib/src/ssa/builder_kernel.dart': Failed assertion: line 3014 pos 14: 'arguments.named.isEmpty': is not true.
|
||||
operator2_negative_test: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
sync_generator2_test/41: Crash # 'file:*/pkg/compiler/lib/src/kernel/element_map_impl.dart': Failed assertion: line 939 pos 18: 'asyncMarker == AsyncMarker.SYNC': is not true.
|
||||
sync_generator2_test/52: Crash # 'file:*/pkg/compiler/lib/src/kernel/element_map_impl.dart': Failed assertion: line 939 pos 18: 'asyncMarker == AsyncMarker.SYNC': is not true.
|
||||
syntax_test/04: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/05: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/06: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/07: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/08: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/09: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/10: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/11: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/13: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/14: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/15: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/16: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/17: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/18: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/19: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/20: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/21: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/22: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/23: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/24: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/25: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
syntax_test/26: Crash # 'file:*/pkg/compiler/lib/src/kernel/env.dart': Failed assertion: line 322 pos 16: '!name.contains('#')': is not true.
|
||||
|
||||
[ $compiler == dart2js && $fasta && $minified ]
|
||||
deferred_load_library_wrong_args_test/01: Crash # NoSuchMethodError: The getter 'closureClassEntity' was called on null.
|
||||
|
|
Loading…
Reference in a new issue