From 91cf66ed5de50e7cdf5c429dc3306b00a67cc834 Mon Sep 17 00:00:00 2001 From: Konstantin Shcheglov Date: Tue, 7 Mar 2017 09:48:29 -0800 Subject: [PATCH] Fix for parsing empty compilation units with Fasta. R=paulberry@google.com BUG= Review-Url: https://codereview.chromium.org/2738693003 . --- .../test/generated/parser_fasta_test.dart | 14 -------------- .../lib/src/fasta/analyzer/ast_builder.dart | 19 +++++++++++-------- 2 files changed, 11 insertions(+), 22 deletions(-) diff --git a/pkg/analyzer/test/generated/parser_fasta_test.dart b/pkg/analyzer/test/generated/parser_fasta_test.dart index 65f3d5a83ab..dab073055c2 100644 --- a/pkg/analyzer/test/generated/parser_fasta_test.dart +++ b/pkg/analyzer/test/generated/parser_fasta_test.dart @@ -1240,13 +1240,6 @@ class TopLevelParserTest_Fasta extends FastaParserTestCase super.test_parseCompilationUnit_builtIn_asFunctionName(); } - @override - @failingTest - void test_parseCompilationUnit_empty() { - // TODO(paulberry): No objects placed on stack - super.test_parseCompilationUnit_empty(); - } - @override @failingTest void test_parseCompilationUnit_exportAsPrefix() { @@ -1297,13 +1290,6 @@ class TopLevelParserTest_Fasta extends FastaParserTestCase super.test_parseDirectives_complete(); } - @override - @failingTest - void test_parseDirectives_empty() { - // TODO(paulberry): No objects placed on stack - super.test_parseDirectives_empty(); - } - @override @failingTest void test_parseDirectives_mixed() { diff --git a/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart b/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart index 4b56ebc125f..175ce815a37 100644 --- a/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart +++ b/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart @@ -852,14 +852,17 @@ class AstBuilder extends ScopeListener { var directives = []; var declarations = []; analyzer.Token endToken = null; // TODO(paulberry) - for (AstNode node in popList(count)) { - if (node is Directive) { - directives.add(node); - } else if (node is CompilationUnitMember) { - declarations.add(node); - } else { - internalError( - 'Unrecognized compilation unit member: ${node.runtimeType}'); + List elements = popList(count); + if (elements != null) { + for (AstNode node in elements) { + if (node is Directive) { + directives.add(node); + } else if (node is CompilationUnitMember) { + declarations.add(node); + } else { + internalError( + 'Unrecognized compilation unit member: ${node.runtimeType}'); + } } } push(ast.compilationUnit(