Add generator for unlinked names

Change-Id: I5841b3ff86133eedd14d8bef26c3d1b2dd78f34d
Reviewed-on: https://dart-review.googlesource.com/57703
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Dan Rubel <danrubel@google.com>
This commit is contained in:
Brian Wilkerson 2018-05-31 19:21:16 +00:00 committed by commit-bot@chromium.org
parent c911a1bef6
commit 89c2da2846
4 changed files with 73 additions and 144 deletions

View file

@ -7,19 +7,20 @@ import 'package:analyzer/dart/ast/ast_factory.dart';
import 'package:analyzer/src/fasta/ast_building_factory.dart';
import 'package:front_end/src/fasta/kernel/expression_generator.dart' as fasta;
import 'package:front_end/src/fasta/kernel/expression_generator_helper.dart';
import 'package:front_end/src/fasta/kernel/forest.dart';
import 'package:front_end/src/fasta/kernel/forest.dart' as fasta;
import 'package:front_end/src/scanner/token.dart';
import 'package:kernel/ast.dart' show DartType, Initializer, Name, Procedure;
abstract class AnalyzerExpressionGenerator
implements Generator<Expression, Statement, Arguments> {
implements fasta.Generator<Expression, Statement, Arguments> {
final ExpressionGeneratorHelper<Expression, Statement, Arguments> helper;
final AstFactory astFactory;
AnalyzerExpressionGenerator(this.helper, this.astFactory);
Forest<Expression, Statement, Token, Arguments> get forest => helper.forest;
fasta.Forest<Expression, Statement, Token, Arguments> get forest =>
helper.forest;
@override
// TODO: implement isInitializer
@ -146,6 +147,46 @@ abstract class AnalyzerExpressionGenerator
}
}
class AnalyzerUnlinkedNameGenerator extends AnalyzerExpressionGenerator
with
fasta.ErroneousExpressionGenerator<Expression, Statement, Arguments>,
fasta.UnlinkedGenerator<Expression, Statement, Arguments> {
@override
final Token token;
@override
final fasta.UnlinkedDeclaration declaration;
AnalyzerUnlinkedNameGenerator(
ExpressionGeneratorHelper<dynamic, dynamic, dynamic> helper,
AstFactory astFactory,
this.token,
this.declaration)
: super(helper, astFactory);
@override
DartType buildErroneousTypeNotAPrefix(fasta.Identifier suffix) {
// TODO: implement buildErroneousTypeNotAPrefix
throw new UnimplementedError();
}
@override
Expression buildError(Arguments arguments,
{bool isGetter: false, bool isSetter: false, int offset}) {
// TODO: implement buildError
throw new UnimplementedError();
}
@override
Expression buildSimpleRead() => astFactory.simpleIdentifier(token);
@override
void printOn(StringSink sink) {
sink.write(", name: ");
sink.write(name.name);
}
}
class AnalyzerUnresolvedNameGenerator extends AnalyzerExpressionGenerator
with
fasta.ErroneousExpressionGenerator<Expression, Statement, Arguments>,

View file

@ -614,8 +614,8 @@ class AstBuildingForest
ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
Token token,
UnlinkedDeclaration declaration) {
// TODO(brianwilkerson) Implement this.
throw new UnimplementedError();
return new AnalyzerUnlinkedNameGenerator(
helper, astFactory, token, declaration);
}
@override

View file

@ -22,6 +22,11 @@ main() async {
});
}
void dart2Failure() {
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
}
@reflectiveTest
class ClassMemberParserTest_Forest extends FastaBodyBuilderTestCase
with ClassMemberParserTestMixin {
@ -627,8 +632,7 @@ class ComplexParserTest_Forest extends FastaBodyBuilderTestCase
@failingTest
void test_logicalAndExpression() {
super.test_logicalAndExpression();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
@ -649,22 +653,19 @@ class ComplexParserTest_Forest extends FastaBodyBuilderTestCase
@failingTest
void test_logicalOrExpression() {
super.test_logicalOrExpression();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
void test_logicalOrExpression_precedence_logicalAnd_left() {
super.test_logicalOrExpression_precedence_logicalAnd_left();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
void test_logicalOrExpression_precedence_logicalAnd_right() {
super.test_logicalOrExpression_precedence_logicalAnd_right();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
@ -682,13 +683,6 @@ class ComplexParserTest_Forest extends FastaBodyBuilderTestCase
super.test_methodInvocation3();
}
@failingTest
void test_multipleLabels_statement() {
super.test_multipleLabels_statement();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
}
@failingTest
void test_multiplicativeExpression_normal() {
super.test_multiplicativeExpression_normal();
@ -1779,8 +1773,7 @@ class ErrorParserTest_Forest extends FastaBodyBuilderTestCase
@failingTest
void test_missingAssignableSelector_identifiersAssigned() {
super.test_missingAssignableSelector_identifiersAssigned();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
@ -1806,8 +1799,7 @@ class ErrorParserTest_Forest extends FastaBodyBuilderTestCase
@failingTest
void test_missingAssignableSelector_superPropertyAccessAssigned() {
super.test_missingAssignableSelector_superPropertyAccessAssigned();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
@ -2670,11 +2662,6 @@ class ExpressionParserTest_Forest extends FastaBodyBuilderTestCase
super.test_parseAssignableSelector_question_dot();
}
@failingTest
void test_parseAwaitExpression() {
super.test_parseAwaitExpression();
}
@failingTest
void test_parseBitwiseAndExpression_normal() {
super.test_parseBitwiseAndExpression_normal();
@ -2833,8 +2820,7 @@ class ExpressionParserTest_Forest extends FastaBodyBuilderTestCase
@failingTest
void test_parseConditionalExpression() {
super.test_parseConditionalExpression();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
@ -3086,15 +3072,13 @@ class ExpressionParserTest_Forest extends FastaBodyBuilderTestCase
@failingTest
void test_parseLogicalAndExpression() {
super.test_parseLogicalAndExpression();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
void test_parseLogicalOrExpression() {
super.test_parseLogicalOrExpression();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
@ -3211,8 +3195,7 @@ class ExpressionParserTest_Forest extends FastaBodyBuilderTestCase
@failingTest
void test_parsePrimaryExpression_const() {
super.test_parsePrimaryExpression_const();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
@ -3395,16 +3378,6 @@ class ExpressionParserTest_Forest extends FastaBodyBuilderTestCase
super.test_parseSuperConstructorInvocation_unnamed();
}
@failingTest
void test_parseThrowExpression() {
super.test_parseThrowExpression();
}
@failingTest
void test_parseThrowExpressionWithoutCascade() {
super.test_parseThrowExpressionWithoutCascade();
}
@failingTest
void test_parseUnaryExpression_decrement_normal() {
super.test_parseUnaryExpression_decrement_normal();
@ -3450,11 +3423,6 @@ class ExpressionParserTest_Forest extends FastaBodyBuilderTestCase
super.test_parseUnaryExpression_minus_super();
}
@failingTest
void test_parseUnaryExpression_not_normal() {
super.test_parseUnaryExpression_not_normal();
}
@failingTest
void test_parseUnaryExpression_not_super() {
super.test_parseUnaryExpression_not_super();
@ -4061,15 +4029,13 @@ class RecoveryParserTest_Forest extends FastaBodyBuilderTestCase
@failingTest
void test_conditionalExpression_missingElse() {
super.test_conditionalExpression_missingElse();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
void test_conditionalExpression_missingThen() {
super.test_conditionalExpression_missingThen();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
@ -4160,8 +4126,7 @@ class RecoveryParserTest_Forest extends FastaBodyBuilderTestCase
@failingTest
void test_incomplete_conditionalExpression() {
super.test_incomplete_conditionalExpression();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
@ -4342,22 +4307,19 @@ class RecoveryParserTest_Forest extends FastaBodyBuilderTestCase
@failingTest
void test_logicalAndExpression_missing_LHS() {
super.test_logicalAndExpression_missing_LHS();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
void test_logicalAndExpression_missing_LHS_RHS() {
super.test_logicalAndExpression_missing_LHS_RHS();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
void test_logicalAndExpression_missing_RHS() {
super.test_logicalAndExpression_missing_RHS();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
@ -4373,36 +4335,31 @@ class RecoveryParserTest_Forest extends FastaBodyBuilderTestCase
@failingTest
void test_logicalOrExpression_missing_LHS() {
super.test_logicalOrExpression_missing_LHS();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
void test_logicalOrExpression_missing_LHS_RHS() {
super.test_logicalOrExpression_missing_LHS_RHS();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
void test_logicalOrExpression_missing_RHS() {
super.test_logicalOrExpression_missing_RHS();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
void test_logicalOrExpression_precedence_logicalAnd_left() {
super.test_logicalOrExpression_precedence_logicalAnd_left();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
void test_logicalOrExpression_precedence_logicalAnd_right() {
super.test_logicalOrExpression_precedence_logicalAnd_right();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
dart2Failure();
}
@failingTest
@ -4866,11 +4823,6 @@ class SimpleParserTest_Forest extends FastaBodyBuilderTestCase
super.test_parseLibraryIdentifier_single();
}
@failingTest
void test_parseReturnStatement_value() {
super.test_parseReturnStatement_value();
}
@failingTest
void test_parseStatement_function_noReturnType() {
super.test_parseStatement_function_noReturnType();
@ -5076,31 +5028,6 @@ class StatementParserTest_Forest extends FastaBodyBuilderTestCase
super.test_invalid_typeParamAnnotation3();
}
@failingTest
void test_parseAssertStatement() {
super.test_parseAssertStatement();
}
@failingTest
void test_parseAssertStatement_messageLowPrecedence() {
super.test_parseAssertStatement_messageLowPrecedence();
}
@failingTest
void test_parseAssertStatement_messageString() {
super.test_parseAssertStatement_messageString();
}
@failingTest
void test_parseAssertStatement_trailingComma_message() {
super.test_parseAssertStatement_trailingComma_message();
}
@failingTest
void test_parseAssertStatement_trailingComma_noMessage() {
super.test_parseAssertStatement_trailingComma_noMessage();
}
@failingTest
void test_parseBreakStatement_noLabel() {
super.test_parseBreakStatement_noLabel();
@ -5111,11 +5038,6 @@ class StatementParserTest_Forest extends FastaBodyBuilderTestCase
super.test_parseContinueStatement_noLabel();
}
@failingTest
void test_parseDoStatement() {
super.test_parseDoStatement();
}
@failingTest
void test_parseForStatement_each_await() {
super.test_parseForStatement_each_await();
@ -5216,28 +5138,11 @@ class StatementParserTest_Forest extends FastaBodyBuilderTestCase
super.test_parseFunctionDeclarationStatement_typeParameters_noReturnType();
}
@failingTest
void test_parseIfStatement_else_block() {
super.test_parseIfStatement_else_block();
}
@failingTest
void test_parseIfStatement_else_emptyStatements() {
super.test_parseIfStatement_else_emptyStatements();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
}
@failingTest
void test_parseIfStatement_else_statement() {
super.test_parseIfStatement_else_statement();
}
@failingTest
void test_parseIfStatement_noElse_block() {
super.test_parseIfStatement_noElse_block();
}
@failingTest
void test_parseIfStatement_noElse_statement() {
super.test_parseIfStatement_noElse_statement();
@ -5402,18 +5307,6 @@ class StatementParserTest_Forest extends FastaBodyBuilderTestCase
super.test_parseStatement_functionDeclaration_returnType_typeParameters();
}
@failingTest
void test_parseStatement_multipleLabels() {
super.test_parseStatement_multipleLabels();
fail(
'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
}
@failingTest
void test_parseStatement_noLabels() {
super.test_parseStatement_noLabels();
}
@failingTest
void test_parseStatement_singleLabel() {
super.test_parseStatement_singleLabel();
@ -5569,11 +5462,6 @@ class StatementParserTest_Forest extends FastaBodyBuilderTestCase
super.test_parseVariableDeclarationStatementAfterMetadata_single();
}
@failingTest
void test_parseWhileStatement() {
super.test_parseWhileStatement();
}
@failingTest
void test_parseYieldStatement_each() {
super.test_parseYieldStatement_each();

View file

@ -292,7 +292,7 @@ abstract class BodyBuilder<Expression, Statement, Arguments>
@override
Expression toValue(Object node) {
if (node is Generator) {
return toExpression(node.buildSimpleRead());
return node.buildSimpleRead();
} else if (node is Expression) {
return node;
} else if (node is PrefixBuilder) {