提交 fd3df74c 编写于 作者: A Andrey Breslav

Calls with closures parsed to a single node

上级 cdb89fa4
......@@ -299,11 +299,11 @@ public class JetExpressionParsing extends AbstractJetParsing {
advance(); // operation
expression.done(POSTFIX_EXPRESSION);
} else if (parseCallWithClosure()) {
while (parseCallWithClosure());
parseCallWithClosure();
expression.done(CALL_EXPRESSION);
} else if (at(LPAR)) {
parseValueArgumentList();
while (parseCallWithClosure());
parseCallWithClosure();
expression.done(CALL_EXPRESSION);
} else if (at(LT)) {
// TODO: be (even) more clever
......@@ -357,11 +357,12 @@ public class JetExpressionParsing extends AbstractJetParsing {
* expression functionLiteral?
*/
protected boolean parseCallWithClosure() {
if (!myBuilder.newlineBeforeCurrentToken() && at(LBRACE)) {
boolean success = false;
while (!myBuilder.newlineBeforeCurrentToken() && at(LBRACE)) {
parseFunctionLiteral();
return true;
success = true;
}
return false;
return success;
}
/*
......
......@@ -3,4 +3,5 @@ val a = f {} {} {}
val a = f {}
val a = f() {}
val a = (f) {} {} {}
val a = (f)() {} {} {}
\ No newline at end of file
val a = (f)() {} {} {}
val a = (f)<A>() {} {} {}
\ No newline at end of file
......@@ -159,6 +159,49 @@ JetFile: CallWithManyClosures.jet
<empty list>
PsiElement(RBRACE)('}')
PsiWhiteSpace(' ')
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
BODY
<empty list>
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
CALL_EXPRESSION
PARENTHESIZED
PsiElement(LPAR)('(')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('f')
PsiElement(RPAR)(')')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('A')
PsiElement(GT)('>')
VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
BODY
<empty list>
PsiElement(RBRACE)('}')
PsiWhiteSpace(' ')
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
BODY
<empty list>
PsiElement(RBRACE)('}')
PsiWhiteSpace(' ')
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
BODY
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册