Infinite loop in the parser fixed
This commit is contained in:
@@ -255,7 +255,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
*/
|
||||
public void parseExpression() {
|
||||
if (!atSet(EXPRESSION_FIRST)) {
|
||||
error("Expecting an element");
|
||||
error("Expecting an expression");
|
||||
return;
|
||||
}
|
||||
parseBinaryExpression(Precedence.ASSIGNMENT);
|
||||
@@ -952,17 +952,17 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
* modifiers declarationRest
|
||||
*/
|
||||
private boolean parseLocalDeclaration() {
|
||||
PsiBuilder.Marker decls = mark();
|
||||
PsiBuilder.Marker decl = mark();
|
||||
JetParsing.TokenDetector enumDetector = new JetParsing.TokenDetector(ENUM_KEYWORD);
|
||||
myJetParsing.parseModifierList(MODIFIER_LIST, enumDetector);
|
||||
|
||||
JetNodeType declType = parseLocalDeclarationRest(enumDetector.isDetected());
|
||||
|
||||
if (declType != null) {
|
||||
decls.done(declType);
|
||||
decl.done(declType);
|
||||
return true;
|
||||
} else {
|
||||
decls.rollbackTo();
|
||||
decl.rollbackTo();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1129,7 +1129,12 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
*/
|
||||
private void parseStatement() {
|
||||
if (!parseLocalDeclaration()) {
|
||||
parseExpression();
|
||||
if (!atSet(EXPRESSION_FIRST)) {
|
||||
errorAndAdvance("Expecting a statement");
|
||||
}
|
||||
else {
|
||||
parseExpression();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
fun test() {
|
||||
in
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
JetFile: HangOnLonelyModifier.jet
|
||||
NAMESPACE
|
||||
FUN
|
||||
PsiElement(fun)('fun')
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(IDENTIFIER)('test')
|
||||
VALUE_PARAMETER_LIST
|
||||
PsiElement(LPAR)('(')
|
||||
PsiElement(RPAR)(')')
|
||||
PsiWhiteSpace(' ')
|
||||
BLOCK
|
||||
PsiElement(LBRACE)('{')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiErrorElement:Expecting a statement
|
||||
PsiElement(in)('in')
|
||||
PsiWhiteSpace('\n')
|
||||
PsiElement(RBRACE)('}')
|
||||
@@ -155,7 +155,7 @@ JetFile: When_ERR.jet
|
||||
<empty list>
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(DOUBLE_ARROW)('=>')
|
||||
PsiErrorElement:Expecting an element
|
||||
PsiErrorElement:Expecting an expression
|
||||
<empty list>
|
||||
PsiWhiteSpace(' ')
|
||||
PsiElement(SEMICOLON)(';')
|
||||
|
||||
Reference in New Issue
Block a user