Temporary parse label definitions with both syntax versions

Should be reverted after bootstrap
This commit is contained in:
Denis Zharkov
2015-04-28 10:26:26 +03:00
parent 44a55e5bf6
commit 3e3535f8cf
4 changed files with 128 additions and 109 deletions
@@ -554,10 +554,15 @@ public class JetExpressionParsing extends AbstractJetParsing {
return lookahead(2) == LBRACE; return lookahead(2) == LBRACE;
} }
if (at(AT) && myBuilder.rawLookup(1) == IDENTIFIER) {
return lookahead(2) == LBRACE;
}
return at(AT) && lookahead(1) == LBRACE; return at(AT) && lookahead(1) == LBRACE;
} }
private boolean isAtLabelDefinitionOrMissingIdentifier() { private boolean isAtLabelDefinitionOrMissingIdentifier() {
if (at(AT) && myBuilder.rawLookup(1) == IDENTIFIER) return true;
return (at(IDENTIFIER) && myBuilder.rawLookup(1) == AT) || at(AT); return (at(IDENTIFIER) && myBuilder.rawLookup(1) == AT) || at(AT);
} }
@@ -1659,8 +1664,22 @@ public class JetExpressionParsing extends AbstractJetParsing {
*/ */
private void parseLabelDefinition() { private void parseLabelDefinition() {
if (at(AT)) { if (at(AT)) {
// recovery for empty label identifier // recovery for old label syntax or empty label identifier
errorAndAdvance("Label must be named"); // AT if (myBuilder.rawLookup(1) == IDENTIFIER) {
PsiBuilder.Marker labelWrap = mark();
PsiBuilder.Marker mark = mark();
advance(); // AT
advance(); // IDENTIFIER
mark.done(LABEL);
labelWrap.done(LABEL_QUALIFIER);
return;
}
else {
errorAndAdvance("Label must be named"); // AT
}
return; return;
} }
@@ -13,61 +13,63 @@ JetFile: oldSyntaxExpressions.kt
PsiElement(LBRACE)('{') PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
LABELED_EXPRESSION LABELED_EXPRESSION
PsiErrorElement:Label must be named LABEL_QUALIFIER
PsiElement(AT)('@') LABEL
REFERENCE_EXPRESSION PsiElement(AT)('@')
PsiElement(IDENTIFIER)('loop1') PsiElement(IDENTIFIER)('loop1')
PsiErrorElement:Unexpected tokens (use ';' to separate expressions on the same line)
<empty list>
PsiWhiteSpace(' ')
FOR
PsiElement(for)('for')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(LPAR)('(') FOR
VALUE_PARAMETER PsiElement(for)('for')
PsiElement(IDENTIFIER)('i') PsiWhiteSpace(' ')
PsiWhiteSpace(' ') PsiElement(LPAR)('(')
PsiElement(in)('in') VALUE_PARAMETER
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('i')
LOOP_RANGE PsiWhiteSpace(' ')
BINARY_EXPRESSION PsiElement(in)('in')
INTEGER_CONSTANT PsiWhiteSpace(' ')
PsiElement(INTEGER_LITERAL)('1') LOOP_RANGE
OPERATION_REFERENCE BINARY_EXPRESSION
PsiElement(RANGE)('..') INTEGER_CONSTANT
INTEGER_CONSTANT PsiElement(INTEGER_LITERAL)('1')
PsiElement(INTEGER_LITERAL)('100') OPERATION_REFERENCE
PsiElement(RPAR)(')') PsiElement(RANGE)('..')
PsiWhiteSpace(' ') INTEGER_CONSTANT
BODY PsiElement(INTEGER_LITERAL)('100')
BLOCK PsiElement(RPAR)(')')
PsiElement(LBRACE)('{') PsiWhiteSpace(' ')
PsiWhiteSpace(' ') BODY
PsiElement(RBRACE)('}') BLOCK
PsiElement(LBRACE)('{')
PsiWhiteSpace(' ')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
DOT_QUALIFIED_EXPRESSION DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x2') PsiElement(IDENTIFIER)('x2')
PsiElement(DOT)('.') PsiElement(DOT)('.')
REFERENCE_EXPRESSION CALL_EXPRESSION
PsiElement(IDENTIFIER)('filter') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('filter')
PsiErrorElement:Unexpected tokens (use ';' to separate expressions on the same line) PsiWhiteSpace(' ')
PsiElement(AT)('@') FUNCTION_LITERAL_ARGUMENT
PsiElement(IDENTIFIER)('f') LABELED_EXPRESSION
PsiWhiteSpace(' ') LABEL_QUALIFIER
FUNCTION_LITERAL_EXPRESSION LABEL
FUNCTION_LITERAL PsiElement(AT)('@')
PsiElement(LBRACE)('{') PsiElement(IDENTIFIER)('f')
PsiWhiteSpace('\n ')
BLOCK
RETURN
PsiElement(return)('return')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
INTEGER_CONSTANT FUNCTION_LITERAL_EXPRESSION
PsiElement(INTEGER_LITERAL)('2') FUNCTION_LITERAL
PsiWhiteSpace('\n ') PsiElement(LBRACE)('{')
PsiElement(RBRACE)('}') PsiWhiteSpace('\n ')
BLOCK
RETURN
PsiElement(return)('return')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('2')
PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
RETURN RETURN
PsiElement(return)('return') PsiElement(return)('return')
@@ -75,16 +77,14 @@ JetFile: oldSyntaxExpressions.kt
PARENTHESIZED PARENTHESIZED
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
LABELED_EXPRESSION LABELED_EXPRESSION
PsiErrorElement:Label must be named LABEL_QUALIFIER
PsiElement(AT)('@') LABEL
REFERENCE_EXPRESSION PsiElement(AT)('@')
PsiElement(IDENTIFIER)('f') PsiElement(IDENTIFIER)('f')
PsiErrorElement:Expecting ')' PsiWhiteSpace(' ')
<empty list> INTEGER_CONSTANT
PsiWhiteSpace(' ') PsiElement(INTEGER_LITERAL)('3')
PsiErrorElement:Unexpected tokens (use ';' to separate expressions on the same line) PsiElement(RPAR)(')')
PsiElement(INTEGER_LITERAL)('3')
PsiElement(RPAR)(')')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
PROPERTY PROPERTY
PsiElement(val)('val') PsiElement(val)('val')
+7 -7
View File
@@ -123,13 +123,13 @@ JetFile: recovery.kt
PsiElement(return)('return') PsiElement(return)('return')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
LABELED_EXPRESSION LABELED_EXPRESSION
PsiErrorElement:Label must be named LABEL_QUALIFIER
PsiElement(AT)('@') LABEL
REFERENCE_EXPRESSION PsiElement(AT)('@')
PsiElement(IDENTIFIER)('loop2') PsiElement(IDENTIFIER)('loop2')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiErrorElement:Unexpected tokens (use ';' to separate expressions on the same line) INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('4') PsiElement(INTEGER_LITERAL)('4')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
@@ -33,13 +33,13 @@ JetFile: spaceBeforeLabelReference.kt
PsiElement(return)('return') PsiElement(return)('return')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
LABELED_EXPRESSION LABELED_EXPRESSION
PsiErrorElement:Label must be named LABEL_QUALIFIER
PsiElement(AT)('@') LABEL
REFERENCE_EXPRESSION PsiElement(AT)('@')
PsiElement(IDENTIFIER)('l2') PsiElement(IDENTIFIER)('l2')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiErrorElement:Unexpected tokens (use ';' to separate expressions on the same line) INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1') PsiElement(INTEGER_LITERAL)('1')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
PROPERTY PROPERTY
PsiElement(val)('val') PsiElement(val)('val')
@@ -55,20 +55,20 @@ JetFile: spaceBeforeLabelReference.kt
PsiElement(return)('return') PsiElement(return)('return')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
LABELED_EXPRESSION LABELED_EXPRESSION
PsiErrorElement:Label must be named LABEL_QUALIFIER
PsiElement(AT)('@') LABEL
REFERENCE_EXPRESSION PsiElement(AT)('@')
PsiElement(IDENTIFIER)('l3') PsiElement(IDENTIFIER)('l3')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
PROPERTY PROPERTY
PsiElement(val)('val') PsiElement(val)('val')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('x') PsiElement(IDENTIFIER)('x')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(EQ)('=') PsiElement(EQ)('=')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
INTEGER_CONSTANT INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('3') PsiElement(INTEGER_LITERAL)('3')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
CONTINUE CONTINUE
PsiElement(continue)('continue') PsiElement(continue)('continue')
@@ -111,33 +111,33 @@ JetFile: spaceBeforeLabelReference.kt
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiComment(BLOCK_COMMENT)('/**/') PsiComment(BLOCK_COMMENT)('/**/')
LABELED_EXPRESSION LABELED_EXPRESSION
PsiErrorElement:Label must be named LABEL_QUALIFIER
PsiElement(AT)('@') LABEL
REFERENCE_EXPRESSION PsiElement(AT)('@')
PsiElement(IDENTIFIER)('l6') PsiElement(IDENTIFIER)('l6')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
PROPERTY PROPERTY
PsiElement(val)('val') PsiElement(val)('val')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('x') PsiElement(IDENTIFIER)('x')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(EQ)('=') PsiElement(EQ)('=')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
INTEGER_CONSTANT INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('8') PsiElement(INTEGER_LITERAL)('8')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
RETURN RETURN
PsiElement(return)('return') PsiElement(return)('return')
PsiComment(EOL_COMMENT)('//') PsiComment(EOL_COMMENT)('//')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
LABELED_EXPRESSION LABELED_EXPRESSION
PsiErrorElement:Label must be named LABEL_QUALIFIER
PsiElement(AT)('@') LABEL
REFERENCE_EXPRESSION PsiElement(AT)('@')
PsiElement(IDENTIFIER)('l7') PsiElement(IDENTIFIER)('l7')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiErrorElement:Unexpected tokens (use ';' to separate expressions on the same line) INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('4') PsiElement(INTEGER_LITERAL)('4')
PsiWhiteSpace('\n\n ') PsiWhiteSpace('\n\n ')
PROPERTY PROPERTY
PsiElement(val)('val') PsiElement(val)('val')