All simple expressions (only basic testing, no recovery)

This commit is contained in:
Andrey Breslav
2010-12-27 20:23:21 +03:00
parent 0f852ed88f
commit 4cd1a55b9b
7 changed files with 869 additions and 10 deletions
@@ -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);
}
/*