All simple expressions (only basic testing, no recovery)
This commit is contained in:
@@ -70,6 +70,10 @@ public interface JetNodeTypes {
|
||||
JetNodeType LIST_LITERAL = new JetNodeType("LIST_LITERAL");
|
||||
JetNodeType TYPEOF = new JetNodeType("TYPEOF");
|
||||
JetNodeType NEW = new JetNodeType("NEW");
|
||||
JetNodeType RETURN = new JetNodeType("RETURN");
|
||||
JetNodeType THROW = new JetNodeType("THROW");
|
||||
JetNodeType CONTINUE = new JetNodeType("CONTINUE");
|
||||
JetNodeType BREAK = new JetNodeType("BREAK");
|
||||
|
||||
IElementType NAMESPACE_NAME = new JetNodeType("NAMESPACE_NAME");
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
|
||||
}
|
||||
|
||||
protected boolean eol() {
|
||||
return myBuilder.eolInLastWhitespace();
|
||||
return myBuilder.eolInLastWhitespace() || eof();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -52,12 +52,6 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
else if (at(THIS_KEYWORD)) {
|
||||
parseThisExpression();
|
||||
}
|
||||
else if (at(IF_KEYWORD)) {
|
||||
// TODO
|
||||
}
|
||||
else if (at(TRY_KEYWORD)) {
|
||||
// TODO
|
||||
}
|
||||
else if (at(TYPEOF_KEYWORD)) {
|
||||
parseTypeOf();
|
||||
}
|
||||
@@ -71,12 +65,18 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
parseThrow();
|
||||
}
|
||||
else if (at(RETURN_KEYWORD)) {
|
||||
// TODO
|
||||
parseReturn();
|
||||
}
|
||||
else if (at(CONTINUE_KEYWORD)) {
|
||||
// TODO
|
||||
parseJump(CONTINUE);
|
||||
}
|
||||
else if (at(BREAK_KEYWORD)) {
|
||||
parseJump(BREAK);
|
||||
}
|
||||
else if (at(IF_KEYWORD)) {
|
||||
// TODO
|
||||
}
|
||||
else if (at(TRY_KEYWORD)) {
|
||||
// TODO
|
||||
}
|
||||
else if (at(FOR_KEYWORD)) {
|
||||
@@ -126,15 +126,50 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* : "continue" SimpleName
|
||||
* : "break" SimpleName
|
||||
*/
|
||||
private void parseJump(JetNodeType type) {
|
||||
assert at(BREAK_KEYWORD) || at(CONTINUE_KEYWORD);
|
||||
|
||||
PsiBuilder.Marker marker = mark();
|
||||
|
||||
advance(); // BREAK_KEYWORD or CONTINUE_KEYWORD
|
||||
|
||||
if (!eol() && at(IDENTIFIER)) advance(); // IDENTIFIER
|
||||
|
||||
marker.done(type);
|
||||
}
|
||||
|
||||
/*
|
||||
* "return" expression?
|
||||
*/
|
||||
private void parseReturn() {
|
||||
assert at(RETURN_KEYWORD);
|
||||
|
||||
PsiBuilder.Marker returnExpression = mark();
|
||||
|
||||
advance(); // RETURN_KEYWORD
|
||||
|
||||
if (!at(EOL_OR_SEMICOLON)) parseExpression();
|
||||
|
||||
returnExpression.done(RETURN);
|
||||
}
|
||||
|
||||
/*
|
||||
* : "throw" expression
|
||||
*/
|
||||
private void parseThrow() {
|
||||
assert at(THROW_KEYWORD);
|
||||
|
||||
PsiBuilder.Marker marker = mark();
|
||||
|
||||
advance(); // THROW_KEYWORD
|
||||
|
||||
parseExpression();
|
||||
|
||||
marker.done(THROW);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user