From d38d4e2e2b8cd62643a5a6a2460a6031cd2661c4 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Fri, 17 Aug 2012 12:24:54 +0400 Subject: [PATCH] Name parsing extracted from parseFunction() and parseProperty() --- .../jet/lang/parsing/JetParsing.java | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java index 82bf5429fed..e58e5988c05 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java @@ -812,7 +812,7 @@ public class JetParsing extends AbstractJetParsing { return parseProperty(false); } - IElementType parseProperty(boolean local) { + public IElementType parseProperty(boolean local) { if (at(VAL_KEYWORD) || at(VAR_KEYWORD)) { advance(); // VAL_KEYWORD or VAR_KEYWORD } @@ -842,6 +842,7 @@ public class JetParsing extends AbstractJetParsing { })); parseReceiverType("property", propertyNameFollow, lastDot); + parseFunctionOrPropertyName(lastDot != -1, "property", propertyNameFollow); myBuilder.restoreJoiningComplexTokensState(); @@ -982,7 +983,12 @@ public class JetParsing extends AbstractJetParsing { myBuilder.disableJoiningComplexTokens(); int lastDot = findLastBefore(RECEIVER_TYPE_TERMINATORS, TokenSet.create(LPAR), true); - parseReceiverType("function", TokenSet.create(LT, LPAR, COLON, EQ), lastDot); + + TokenSet functionNameFollow = TokenSet.create(LT, LPAR, COLON, EQ); + parseReceiverType("function", functionNameFollow, lastDot); + + parseFunctionOrPropertyName(lastDot != -1, "function", functionNameFollow); + myBuilder.restoreJoiningComplexTokensState(); TokenSet valueParametersFollow = TokenSet.create(COLON, EQ, LBRACE, SEMICOLON, RPAR); @@ -1028,10 +1034,6 @@ public class JetParsing extends AbstractJetParsing { private void parseReceiverType(String title, TokenSet nameFollow, int lastDot) { if (lastDot == -1) { // There's no explicit receiver type specified parseAnnotations(false); - - if (!parseIdeTemplate()) { - expect(IDENTIFIER, "Expecting " + title + " name or receiver type", nameFollow); - } } else { if (parseIdeTemplate()) { @@ -1048,6 +1050,19 @@ public class JetParsing extends AbstractJetParsing { } } + } + } + + /* + * IDENTIFIER + */ + private void parseFunctionOrPropertyName(boolean receiverFound, String title, TokenSet nameFollow) { + if (!receiverFound) { + if (!parseIdeTemplate()) { + expect(IDENTIFIER, "Expecting " + title + " name or receiver type", nameFollow); + } + } + else { if (!parseIdeTemplate()) { expect(IDENTIFIER, "Expecting " + title + " name", nameFollow); }