| Index: compiler/java/com/google/dart/compiler/parser/DartParser.java
|
| diff --git a/compiler/java/com/google/dart/compiler/parser/DartParser.java b/compiler/java/com/google/dart/compiler/parser/DartParser.java
|
| index 504d357272bc962db89f1c4bcfc7283532781bfb..72fcbfecc1bf5a053d3d6e90e41350b70e1f678c 100644
|
| --- a/compiler/java/com/google/dart/compiler/parser/DartParser.java
|
| +++ b/compiler/java/com/google/dart/compiler/parser/DartParser.java
|
| @@ -167,8 +167,8 @@ public class DartParser extends CompletionHooksParserBase {
|
| this(ctx, false);
|
| }
|
|
|
| - public DartParser(ParserContext ctx, Set<String> prefixes) {
|
| - this(ctx, false, prefixes);
|
| + public DartParser(ParserContext ctx, Set<String> prefixes, boolean isDietParse) {
|
| + this(ctx, isDietParse, prefixes);
|
| }
|
|
|
| public DartParser(ParserContext ctx, boolean isDietParse) {
|
| @@ -2713,20 +2713,29 @@ public class DartParser extends CompletionHooksParserBase {
|
| */
|
| private DartBlock parseFunctionStatementBody(boolean requireSemicolonForArrow) {
|
| if (isDietParse) {
|
| - expect(Token.LBRACE);
|
| DartBlock emptyBlock = new DartBlock(new ArrayList<DartStatement>());
|
| - int nesting = 1;
|
| - while (nesting > 0) {
|
| - Token token = next();
|
| - switch (token) {
|
| - case LBRACE:
|
| - ++nesting;
|
| - break;
|
| - case RBRACE:
|
| - --nesting;
|
| + if (optional(Token.ARROW)) {
|
| + while (true) {
|
| + Token token = next();
|
| + if (token == Token.SEMICOLON) {
|
| break;
|
| - case EOS:
|
| - return emptyBlock;
|
| + }
|
| + }
|
| + } else {
|
| + expect(Token.LBRACE);
|
| + int nesting = 1;
|
| + while (nesting > 0) {
|
| + Token token = next();
|
| + switch (token) {
|
| + case LBRACE:
|
| + ++nesting;
|
| + break;
|
| + case RBRACE:
|
| + --nesting;
|
| + break;
|
| + case EOS:
|
| + return emptyBlock;
|
| + }
|
| }
|
| }
|
| // Return an empty block so we don't generate unparseable code.
|
|
|