mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 08:51:21 +00:00
Parse InstanceCreationExpression with Fasta.
R=paulberry@google.com, ahe@google.com BUG= Review-Url: https://codereview.chromium.org/2727753002 .
This commit is contained in:
parent
270a6900f6
commit
86b5a088ad
|
@ -560,18 +560,6 @@ class ExpressionParserTest_Fasta extends FastaParserTestCase
|
|||
super.test_parseFunctionExpression_typeParameterComments();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseInstanceCreationExpression_qualifiedType() {
|
||||
super.test_parseInstanceCreationExpression_qualifiedType();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseInstanceCreationExpression_qualifiedType_named() {
|
||||
super.test_parseInstanceCreationExpression_qualifiedType_named();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void
|
||||
|
@ -580,14 +568,6 @@ class ExpressionParserTest_Fasta extends FastaParserTestCase
|
|||
.test_parseInstanceCreationExpression_qualifiedType_named_typeParameterComment();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void
|
||||
test_parseInstanceCreationExpression_qualifiedType_named_typeParameters() {
|
||||
super
|
||||
.test_parseInstanceCreationExpression_qualifiedType_named_typeParameters();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void
|
||||
|
@ -596,24 +576,6 @@ class ExpressionParserTest_Fasta extends FastaParserTestCase
|
|||
.test_parseInstanceCreationExpression_qualifiedType_typeParameterComment();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseInstanceCreationExpression_qualifiedType_typeParameters() {
|
||||
super.test_parseInstanceCreationExpression_qualifiedType_typeParameters();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseInstanceCreationExpression_type() {
|
||||
super.test_parseInstanceCreationExpression_type();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseInstanceCreationExpression_type_named() {
|
||||
super.test_parseInstanceCreationExpression_type_named();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseInstanceCreationExpression_type_named_typeParameterComment() {
|
||||
|
@ -621,24 +583,12 @@ class ExpressionParserTest_Fasta extends FastaParserTestCase
|
|||
.test_parseInstanceCreationExpression_type_named_typeParameterComment();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseInstanceCreationExpression_type_named_typeParameters() {
|
||||
super.test_parseInstanceCreationExpression_type_named_typeParameters();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseInstanceCreationExpression_type_typeParameterComment() {
|
||||
super.test_parseInstanceCreationExpression_type_typeParameterComment();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseInstanceCreationExpression_type_typeParameters() {
|
||||
super.test_parseInstanceCreationExpression_type_typeParameters();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseInstanceCreationExpression_type_typeParameters_nullable() {
|
||||
|
@ -723,12 +673,6 @@ class ExpressionParserTest_Fasta extends FastaParserTestCase
|
|||
super.test_parseMapLiteralEntry_string();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseNewExpression() {
|
||||
super.test_parseNewExpression();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void
|
||||
|
@ -781,12 +725,6 @@ class ExpressionParserTest_Fasta extends FastaParserTestCase
|
|||
super.test_parsePrimaryExpression_mapLiteral_typed_genericComment();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parsePrimaryExpression_new() {
|
||||
super.test_parsePrimaryExpression_new();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseRelationalExpression_as_functionType_noReturnType() {
|
||||
|
@ -1500,13 +1438,6 @@ class TopLevelParserTest_Fasta extends FastaParserTestCase
|
|||
super.test_parseClassDeclaration_typeAlias_withB();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseCompilationUnit_abstractAsPrefix_parameterized() {
|
||||
// TODO(paulberry): Unhandled event: ConstructorReference
|
||||
super.test_parseCompilationUnit_abstractAsPrefix_parameterized();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseCompilationUnit_builtIn_asFunctionName() {
|
||||
|
@ -1537,13 +1468,6 @@ class TopLevelParserTest_Fasta extends FastaParserTestCase
|
|||
super.test_parseCompilationUnit_exportAsPrefix_parameterized();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseCompilationUnit_operatorAsPrefix_parameterized() {
|
||||
// TODO(paulberry): Unhandled event: ConstructorReference
|
||||
super.test_parseCompilationUnit_operatorAsPrefix_parameterized();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseCompilationUnit_script() {
|
||||
|
@ -1558,13 +1482,6 @@ class TopLevelParserTest_Fasta extends FastaParserTestCase
|
|||
super.test_parseCompilationUnit_typedefAsPrefix();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseCompilationUnitMember_abstractAsPrefix() {
|
||||
// TODO(paulberry): Unhandled event: ConstructorReference
|
||||
super.test_parseCompilationUnitMember_abstractAsPrefix();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void
|
||||
|
|
|
@ -4976,11 +4976,11 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
|
|||
parseInstanceCreationExpression('A.B()', token);
|
||||
expect(expression, isNotNull);
|
||||
assertNoErrors();
|
||||
expect(expression.keyword, token);
|
||||
expect(expression.keyword.keyword, Keyword.NEW);
|
||||
ConstructorName name = expression.constructorName;
|
||||
expect(name, isNotNull);
|
||||
TypeName type = name.type;
|
||||
expect(type, isNotNull);
|
||||
expect(type.name.name, 'A.B');
|
||||
expect(type.typeArguments, isNull);
|
||||
expect(name.period, isNull);
|
||||
expect(name.name, isNull);
|
||||
|
@ -4993,7 +4993,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
|
|||
parseInstanceCreationExpression('A.B.c()', token);
|
||||
expect(expression, isNotNull);
|
||||
assertNoErrors();
|
||||
expect(expression.keyword, token);
|
||||
expect(expression.keyword.keyword, Keyword.NEW);
|
||||
ConstructorName name = expression.constructorName;
|
||||
expect(name, isNotNull);
|
||||
TypeName type = name.type;
|
||||
|
@ -5012,7 +5012,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
|
|||
parseInstanceCreationExpression('A.B/*<E>*/.c()', token);
|
||||
expect(expression, isNotNull);
|
||||
assertNoErrors();
|
||||
expect(expression.keyword, token);
|
||||
expect(expression.keyword.keyword, Keyword.NEW);
|
||||
ConstructorName name = expression.constructorName;
|
||||
expect(name, isNotNull);
|
||||
TypeName type = name.type;
|
||||
|
@ -5030,7 +5030,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
|
|||
parseInstanceCreationExpression('A.B<E>.c()', token);
|
||||
expect(expression, isNotNull);
|
||||
assertNoErrors();
|
||||
expect(expression.keyword, token);
|
||||
expect(expression.keyword.keyword, Keyword.NEW);
|
||||
ConstructorName name = expression.constructorName;
|
||||
expect(name, isNotNull);
|
||||
TypeName type = name.type;
|
||||
|
@ -5049,7 +5049,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
|
|||
parseInstanceCreationExpression('A.B/*<E>*/()', token);
|
||||
expect(expression, isNotNull);
|
||||
assertNoErrors();
|
||||
expect(expression.keyword, token);
|
||||
expect(expression.keyword.keyword, Keyword.NEW);
|
||||
ConstructorName name = expression.constructorName;
|
||||
expect(name, isNotNull);
|
||||
TypeName type = name.type;
|
||||
|
@ -5066,7 +5066,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
|
|||
parseInstanceCreationExpression('A.B<E>()', token);
|
||||
expect(expression, isNotNull);
|
||||
assertNoErrors();
|
||||
expect(expression.keyword, token);
|
||||
expect(expression.keyword.keyword, Keyword.NEW);
|
||||
ConstructorName name = expression.constructorName;
|
||||
expect(name, isNotNull);
|
||||
TypeName type = name.type;
|
||||
|
@ -5083,7 +5083,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
|
|||
parseInstanceCreationExpression('A()', token);
|
||||
expect(expression, isNotNull);
|
||||
assertNoErrors();
|
||||
expect(expression.keyword, token);
|
||||
expect(expression.keyword.keyword, Keyword.NEW);
|
||||
ConstructorName name = expression.constructorName;
|
||||
expect(name, isNotNull);
|
||||
TypeName type = name.type;
|
||||
|
@ -5095,13 +5095,12 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
|
|||
}
|
||||
|
||||
void test_parseInstanceCreationExpression_type_named() {
|
||||
enableGenericMethodComments = true;
|
||||
Token token = TokenFactory.tokenFromKeyword(Keyword.NEW);
|
||||
InstanceCreationExpression expression =
|
||||
parseInstanceCreationExpression('A.c()', token);
|
||||
expect(expression, isNotNull);
|
||||
assertNoErrors();
|
||||
expect(expression.keyword, token);
|
||||
expect(expression.keyword.keyword, Keyword.NEW);
|
||||
ConstructorName name = expression.constructorName;
|
||||
expect(name, isNotNull);
|
||||
TypeName type = name.type;
|
||||
|
@ -5119,7 +5118,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
|
|||
parseInstanceCreationExpression('A/*<B>*/.c()', token);
|
||||
expect(expression, isNotNull);
|
||||
assertNoErrors();
|
||||
expect(expression.keyword, token);
|
||||
expect(expression.keyword.keyword, Keyword.NEW);
|
||||
ConstructorName name = expression.constructorName;
|
||||
expect(name, isNotNull);
|
||||
TypeName type = name.type;
|
||||
|
@ -5136,7 +5135,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
|
|||
parseInstanceCreationExpression('A<B>.c()', token);
|
||||
expect(expression, isNotNull);
|
||||
assertNoErrors();
|
||||
expect(expression.keyword, token);
|
||||
expect(expression.keyword.keyword, Keyword.NEW);
|
||||
ConstructorName name = expression.constructorName;
|
||||
expect(name, isNotNull);
|
||||
TypeName type = name.type;
|
||||
|
@ -5154,7 +5153,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
|
|||
parseInstanceCreationExpression('A/*<B>*/()', token);
|
||||
expect(expression, isNotNull);
|
||||
assertNoErrors();
|
||||
expect(expression.keyword, token);
|
||||
expect(expression.keyword.keyword, Keyword.NEW);
|
||||
ConstructorName name = expression.constructorName;
|
||||
expect(name, isNotNull);
|
||||
TypeName type = name.type;
|
||||
|
@ -5171,7 +5170,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
|
|||
parseInstanceCreationExpression('A<B>()', token);
|
||||
expect(expression, isNotNull);
|
||||
assertNoErrors();
|
||||
expect(expression.keyword, token);
|
||||
expect(expression.keyword.keyword, Keyword.NEW);
|
||||
ConstructorName name = expression.constructorName;
|
||||
expect(name, isNotNull);
|
||||
TypeName type = name.type;
|
||||
|
@ -5189,7 +5188,7 @@ abstract class ExpressionParserTestMixin implements AbstractParserTestCase {
|
|||
parseInstanceCreationExpression('A<B?>()', token);
|
||||
expect(expression, isNotNull);
|
||||
assertNoErrors();
|
||||
expect(expression.keyword, token);
|
||||
expect(expression.keyword.keyword, Keyword.NEW);
|
||||
ConstructorName name = expression.constructorName;
|
||||
expect(name, isNotNull);
|
||||
TypeName type = name.type;
|
||||
|
|
|
@ -409,6 +409,10 @@ class ElementListener extends Listener {
|
|||
pushNode(new Send(first, last));
|
||||
}
|
||||
|
||||
@override
|
||||
void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
|
||||
}
|
||||
|
||||
@override
|
||||
void handleNoType(Token token) {
|
||||
pushNode(null);
|
||||
|
|
|
@ -68,6 +68,32 @@ class AstBuilder extends ScopeListener {
|
|||
push(token);
|
||||
}
|
||||
|
||||
@override
|
||||
void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
|
||||
debugEvent("NoConstructorReferenceContinuationAfterTypeArguments");
|
||||
push(NullValue.ConstructorReferenceContinuationAfterTypeArguments);
|
||||
}
|
||||
|
||||
@override
|
||||
void endConstructorReference(
|
||||
Token start, Token periodBeforeName, Token endToken) {
|
||||
debugEvent("ConstructorReference");
|
||||
SimpleIdentifier constructorName = pop();
|
||||
TypeArgumentList typeArguments = pop();
|
||||
Identifier typeNameIdentifier = pop();
|
||||
push(ast.constructorName(ast.typeName(typeNameIdentifier, typeArguments),
|
||||
toAnalyzerToken(periodBeforeName), constructorName));
|
||||
}
|
||||
|
||||
@override
|
||||
void handleNewExpression(Token token) {
|
||||
debugEvent("NewExpression");
|
||||
MethodInvocation arguments = pop();
|
||||
ConstructorName constructorName = pop();
|
||||
push(ast.instanceCreationExpression(
|
||||
toAnalyzerToken(token), constructorName, arguments.argumentList));
|
||||
}
|
||||
|
||||
@override
|
||||
void handleParenthesizedExpression(BeginGroupToken token) {
|
||||
debugEvent("ParenthesizedExpression");
|
||||
|
|
|
@ -842,6 +842,10 @@ class Listener {
|
|||
logEvent("NoExpression");
|
||||
}
|
||||
|
||||
void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
|
||||
logEvent("NoConstructorReferenceContinuationAfterTypeArguments");
|
||||
}
|
||||
|
||||
void handleNoType(Token token) {
|
||||
logEvent("NoType");
|
||||
}
|
||||
|
|
|
@ -1954,6 +1954,8 @@ class Parser {
|
|||
period = token;
|
||||
token = parseIdentifier(token.next,
|
||||
IdentifierContext.constructorReferenceContinuationAfterTypeArguments);
|
||||
} else {
|
||||
listener.handleNoConstructorReferenceContinuationAfterTypeArguments(token);
|
||||
}
|
||||
listener.endConstructorReference(start, period, token);
|
||||
return token;
|
||||
|
|
|
@ -107,6 +107,11 @@ class DietListener extends StackListener {
|
|||
debugEvent("NoTypeArguments");
|
||||
}
|
||||
|
||||
@override
|
||||
void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
|
||||
debugEvent("NoConstructorReferenceContinuationAfterTypeArguments");
|
||||
}
|
||||
|
||||
@override
|
||||
void handleNoType(Token token) {
|
||||
debugEvent("NoType");
|
||||
|
|
|
@ -26,6 +26,7 @@ enum NullValue {
|
|||
CascadeReceiver,
|
||||
Combinators,
|
||||
ConditionalUris,
|
||||
ConstructorReferenceContinuationAfterTypeArguments,
|
||||
ContinueTarget,
|
||||
Expression,
|
||||
FieldInitializer,
|
||||
|
@ -153,6 +154,11 @@ abstract class StackListener extends Listener {
|
|||
push(NullValue.TypeVariables);
|
||||
}
|
||||
|
||||
@override
|
||||
void handleNoConstructorReferenceContinuationAfterTypeArguments(Token token) {
|
||||
debugEvent("NoConstructorReferenceContinuationAfterTypeArguments");
|
||||
}
|
||||
|
||||
@override
|
||||
void handleNoType(Token token) {
|
||||
debugEvent("NoType");
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
accessors: Crash
|
||||
await: Fail
|
||||
classes: Crash
|
||||
cycles: Crash
|
||||
cycles: Fail
|
||||
default_values: Crash
|
||||
expressions: Crash
|
||||
fibonacci: Crash
|
||||
|
@ -20,16 +20,16 @@ function_type_recovery: Crash
|
|||
functions: Crash
|
||||
implicit_this: Crash
|
||||
invocations: Fail
|
||||
map: Crash
|
||||
map: Fail
|
||||
mixin: Crash
|
||||
operators: Crash
|
||||
redirecting_constructor: Crash
|
||||
redirecting_constructor: Fail
|
||||
statements: Crash
|
||||
super_rasta_copy: Crash
|
||||
top_level_accessors: Crash
|
||||
typedef: Crash
|
||||
|
||||
rasta/abstract_constructor: Crash
|
||||
rasta/abstract_constructor: Fail
|
||||
rasta/bad_constructor_redirection: Crash
|
||||
rasta/bad_continue: Crash
|
||||
rasta/bad_default_constructor: Crash
|
||||
|
@ -41,7 +41,7 @@ rasta/bad_setter_initializer: Crash
|
|||
rasta/bad_unicode: Fail
|
||||
rasta/breaking_bad: Crash
|
||||
rasta/cascades: Crash
|
||||
rasta/class_hierarchy: Crash
|
||||
rasta/class_hierarchy: Fail
|
||||
rasta/class_member: Crash
|
||||
rasta/constant_get_and_invoke: Crash
|
||||
rasta/deferred_lib: Fail
|
||||
|
@ -51,12 +51,12 @@ rasta/export: Fail
|
|||
rasta/external_factory_redirection: Crash
|
||||
rasta/foo: Fail
|
||||
rasta/for_loop: Crash
|
||||
rasta/generic_factory: Crash
|
||||
rasta/generic_factory: Fail
|
||||
rasta/issue_000001: Crash
|
||||
rasta/issue_000002: Crash
|
||||
rasta/issue_000004: Crash
|
||||
rasta/issue_000006: Crash
|
||||
rasta/issue_000007: Crash
|
||||
rasta/issue_000007: Fail
|
||||
rasta/issue_000008: Crash
|
||||
rasta/issue_000011: Crash
|
||||
rasta/issue_000012: Crash
|
||||
|
@ -107,7 +107,7 @@ rasta/try_label: Crash
|
|||
rasta/type_literals: Crash
|
||||
rasta/type_with_parse_error: Fail
|
||||
rasta/typedef: Crash
|
||||
rasta/unresolved: Crash
|
||||
rasta/unresolved: Fail
|
||||
rasta/unresolved_constructor: Crash
|
||||
rasta/unresolved_for_in: Crash
|
||||
rasta/unresolved_recovery: Fail
|
||||
|
|
Loading…
Reference in a new issue