Fixed a bug when parsing expressions like {val a = b;a}

This commit is contained in:
Andrey Breslav
2011-02-04 16:19:07 +03:00
parent 904a8b21a6
commit 3bda886b64
7 changed files with 105 additions and 6 deletions
@@ -735,7 +735,11 @@ public class JetParsing extends AbstractJetParsing {
if (at(EQ)) { if (at(EQ)) {
advance(); // EQ advance(); // EQ
myExpressionParsing.parseExpression(); myExpressionParsing.parseExpression();
consumeIf(SEMICOLON); if (!local) {
consumeIf(SEMICOLON);
} else {
// "val a = 1; b" must not be an infix call of b on "val ...;"
}
} }
if (!local) { if (!local) {
if (parsePropertyGetterOrSetter()) { if (parsePropertyGetterOrSetter()) {
+5
View File
@@ -0,0 +1,5 @@
val a = if(1) {var f = a;a} else {null}
val a = if(1) {
var f = a;
a
} else {null}
+90
View File
@@ -0,0 +1,90 @@
JetFile: IfWithPropery.jet
NAMESPACE
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
IF
PsiElement(if)('if')
PsiElement(LPAR)('(')
CONDITION
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
THEN
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
BODY
PROPERTY
PsiElement(var)('var')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('f')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(SEMICOLON)(';')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(RBRACE)('}')
PsiWhiteSpace(' ')
PsiElement(else)('else')
PsiWhiteSpace(' ')
ELSE
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
BODY
NULL
PsiElement(null)('null')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
IF
PsiElement(if)('if')
PsiElement(LPAR)('(')
CONDITION
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
THEN
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ')
BODY
PROPERTY
PsiElement(var)('var')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('f')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiWhiteSpace(' ')
PsiElement(else)('else')
PsiWhiteSpace(' ')
ELSE
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
BODY
NULL
PsiElement(null)('null')
PsiElement(RBRACE)('}')
+1 -1
View File
@@ -149,7 +149,7 @@ JetFile: ThisType.jet
VALUE_ARGUMENT_LIST VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
PsiElement(SEMICOLON)(';') PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
@@ -203,6 +203,6 @@ JetFile: AnonymousObjects.jet
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
PsiElement(SEMICOLON)(';') PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n\n') PsiWhiteSpace('\n\n')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
+2 -2
View File
@@ -135,7 +135,7 @@ JetFile: UnionFind.jet
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x') PsiElement(IDENTIFIER)('x')
PsiElement(RBRACKET)(']') PsiElement(RBRACKET)(']')
PsiElement(SEMICOLON)(';') PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
IF IF
PsiElement(if)('if') PsiElement(if)('if')
@@ -182,7 +182,7 @@ JetFile: UnionFind.jet
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('p') PsiElement(IDENTIFIER)('p')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
PsiElement(SEMICOLON)(';') PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
BINARY_EXPRESSION BINARY_EXPRESSION
ARRAY_ACCESS_EXPRESSION ARRAY_ACCESS_EXPRESSION
@@ -297,7 +297,7 @@ JetFile: IIterator.jet
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
INTEGER_CONSTANT INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('0') PsiElement(INTEGER_LITERAL)('0')
PsiElement(SEMICOLON)(';') PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
FOR FOR
PsiElement(for)('for') PsiElement(for)('for')