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)) {
advance(); // EQ
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 (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
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
PsiElement(SEMICOLON)(';')
PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
@@ -203,6 +203,6 @@ JetFile: AnonymousObjects.jet
PsiElement(RPAR)(')')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiElement(SEMICOLON)(';')
PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n\n')
PsiElement(RBRACE)('}')
+2 -2
View File
@@ -135,7 +135,7 @@ JetFile: UnionFind.jet
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x')
PsiElement(RBRACKET)(']')
PsiElement(SEMICOLON)(';')
PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n ')
IF
PsiElement(if)('if')
@@ -182,7 +182,7 @@ JetFile: UnionFind.jet
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('p')
PsiElement(RPAR)(')')
PsiElement(SEMICOLON)(';')
PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n ')
BINARY_EXPRESSION
ARRAY_ACCESS_EXPRESSION
@@ -297,7 +297,7 @@ JetFile: IIterator.jet
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('0')
PsiElement(SEMICOLON)(';')
PsiElement(SEMICOLON)(';')
PsiWhiteSpace('\n ')
FOR
PsiElement(for)('for')