Cleanup remaining analyzer parser adapter methods

* update parseStatement to use new API
* remove unused _run and _runParser methods
* rename _run2 --> _run

Change-Id: I288f8d4d03acce817f2e11671dc22642f60e57dd
Reviewed-on: https://dart-review.googlesource.com/19900
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
This commit is contained in:
Dan Rubel
2017-11-10 14:52:08 +00:00
committed by commit-bot@chromium.org
parent 2b88fa0132
commit e2e3c99aea
2 changed files with 34 additions and 61 deletions
@@ -64,6 +64,11 @@ abstract class ParserAdapter implements Parser {
astBuilder.parseGenericMethodComments = value;
}
@override
void set parseFunctionBodies(bool parseFunctionBodies) {
// ignored
}
@override
Annotation parseAnnotation() {
currentToken = fastaParser
@@ -164,8 +169,14 @@ abstract class ParserAdapter implements Parser {
@override
Statement parseStatement(Token token) {
currentToken = token;
return parseStatement2();
}
@override
Statement parseStatement2() {
currentToken = fastaParser
.parseStatementOpt(fastaParser.syntheticPreviousToken(token))
.parseStatementOpt(fastaParser.syntheticPreviousToken(currentToken))
.next;
return astBuilder.pop();
}
@@ -15,9 +15,7 @@ import 'package:front_end/src/fasta/fasta_codes.dart'
show LocatedMessage, Message;
import 'package:front_end/src/fasta/kernel/kernel_builder.dart';
import 'package:front_end/src/fasta/kernel/kernel_library_builder.dart';
import 'package:front_end/src/fasta/parser.dart' as fasta;
import 'package:front_end/src/fasta/scanner/string_scanner.dart';
import 'package:front_end/src/fasta/scanner/token.dart' as fasta;
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -2573,11 +2571,10 @@ class FastaParserTestCase extends Object
@override
Statement parseStatement(String source,
[bool enableLazyAssignmentOperators]) {
return _runParser(
source,
(parser) => (token) =>
parser.parseStatementOpt(parser.syntheticPreviousToken(token)).next,
codes: NO_ERROR_COMPARISON) as Statement;
createParser(source);
Statement statement = _parserProxy.parseStatement2();
assertErrors(codes: NO_ERROR_COMPARISON);
return statement;
}
@override
@@ -2616,15 +2613,6 @@ class FastaParserTestCase extends Object
return statement.expression;
}
Object _runParser(
String source, ParseFunction getParseFunction(fasta.Parser parser),
{List<ErrorCode> codes, List<ExpectedError> errors}) {
createParser(source);
Object result = _parserProxy._run(getParseFunction);
assertErrors(codes: codes, errors: errors);
return result;
}
ErrorCode _toFastaGeneratedAnalyzerErrorCode(ErrorCode code) {
if (code == ParserErrorCode.ABSTRACT_ENUM ||
code == ParserErrorCode.ABSTRACT_TOP_LEVEL_FUNCTION ||
@@ -2801,21 +2789,21 @@ class ParserProxy extends analyzer.ParserAdapter {
@override
Annotation parseAnnotation() {
return _run2('MetadataStar', () => super.parseAnnotation());
return _run('MetadataStar', () => super.parseAnnotation());
}
@override
ArgumentList parseArgumentList() {
return _run2('unspecified', () => super.parseArgumentList());
return _run('unspecified', () => super.parseArgumentList());
}
@override
ClassMember parseClassMember(String className) {
return _run2('ClassBody', () => super.parseClassMember(className));
return _run('ClassBody', () => super.parseClassMember(className));
}
List<Combinator> parseCombinators() {
return _run2('Import', () => super.parseCombinators());
return _run('Import', () => super.parseCombinators());
}
@override
@@ -2829,17 +2817,17 @@ class ParserProxy extends analyzer.ParserAdapter {
@override
Configuration parseConfiguration() {
return _run2('ConditionalUris', () => super.parseConfiguration());
return _run('ConditionalUris', () => super.parseConfiguration());
}
@override
Expression parseExpression2() {
return _run2('unspecified', () => super.parseExpression2());
return _run('unspecified', () => super.parseExpression2());
}
@override
FormalParameterList parseFormalParameterList({bool inFunctionType: false}) {
return _run2('unspecified',
return _run('unspecified',
() => super.parseFormalParameterList(inFunctionType: inFunctionType));
}
@@ -2847,7 +2835,7 @@ class ParserProxy extends analyzer.ParserAdapter {
FunctionBody parseFunctionBody(
bool mayBeEmpty, ParserErrorCode emptyErrorCode, bool inExpression) {
Token lastToken;
FunctionBody body = _run2('unspecified', () {
FunctionBody body = _run('unspecified', () {
FunctionBody body =
super.parseFunctionBody(mayBeEmpty, emptyErrorCode, inExpression);
lastToken = currentToken;
@@ -2864,74 +2852,48 @@ class ParserProxy extends analyzer.ParserAdapter {
@override
Expression parsePrimaryExpression() {
return _run2('unspecified', () => super.parsePrimaryExpression());
return _run('unspecified', () => super.parsePrimaryExpression());
}
@override
Statement parseStatement(Token token) {
return _run2('unspecified', () => super.parseStatement(token));
return _run('unspecified', () => super.parseStatement(token));
}
@override
Statement parseStatement2() {
return parseStatement(currentToken);
return _run('unspecified', () => super.parseStatement2());
}
@override
AnnotatedNode parseTopLevelDeclaration(bool isDirective) {
return _run2(
return _run(
'CompilationUnit', () => super.parseTopLevelDeclaration(isDirective));
}
@override
TypeAnnotation parseTypeAnnotation(bool inExpression) {
return _run2('unspecified', () => super.parseTypeAnnotation(inExpression));
return _run('unspecified', () => super.parseTypeAnnotation(inExpression));
}
@override
TypeArgumentList parseTypeArgumentList() {
return _run2('unspecified', () => super.parseTypeArgumentList());
return _run('unspecified', () => super.parseTypeArgumentList());
}
@override
TypeName parseTypeName(bool inExpression) {
return _run2('unspecified', () => super.parseTypeName(inExpression));
return _run('unspecified', () => super.parseTypeName(inExpression));
}
@override
TypeParameter parseTypeParameter() {
return _run2('unspecified', () => super.parseTypeParameter());
return _run('unspecified', () => super.parseTypeParameter());
}
@override
TypeParameterList parseTypeParameterList() {
return _run2('unspecified', () => super.parseTypeParameterList());
}
/**
* Runs a single parser function (returned by [getParseFunction]), and returns
* the result as an analyzer AST. It checks that the parse consumed all of the
* tokens and that there were [nodeCount] AST nodes created (unless the node
* count is negative).
*/
Object _run(ParseFunction getParseFunction(fasta.Parser parser),
{int nodeCount: 1}) {
ParseFunction parseFunction;
if (getParseFunction != null) {
parseFunction = getParseFunction(fastaParser);
} else {
parseFunction = fastaParser.parseUnit;
// firstToken should be set by beginCompilationUnit event.
}
currentToken = parseFunction(currentToken);
expect(currentToken.isEof, isTrue, reason: currentToken.lexeme);
if (nodeCount >= 0) {
expect(astBuilder.stack, hasLength(nodeCount));
}
if (nodeCount != 1) {
return astBuilder.stack.values;
}
return astBuilder.pop();
return _run('unspecified', () => super.parseTypeParameterList());
}
/**
@@ -2940,7 +2902,7 @@ class ParserProxy extends analyzer.ParserAdapter {
* that the parse consumed all of the tokens,
* and that the result stack is empty.
*/
_run2(String enclosingEvent, f()) {
_run(String enclosingEvent, f()) {
_eventListener.begin(enclosingEvent);
var result = f();
_eventListener.end(enclosingEvent);