Tests for basic class member cases
This commit is contained in:
@@ -50,6 +50,7 @@ public interface JetNodeTypes {
|
||||
JetNodeType CONSTRUCTOR = new JetNodeType("CONSTRUCTOR");
|
||||
JetNodeType INITIALIZER_LIST = new JetNodeType("INITIALIZER_LIST");
|
||||
JetNodeType THIS_CALL = new JetNodeType("THIS_CALL");
|
||||
JetNodeType BLOCK = new JetNodeType("BLOCK");
|
||||
|
||||
IElementType NAMESPACE_NAME = new JetNodeType("NAMESPACE_NAME");
|
||||
}
|
||||
|
||||
@@ -117,6 +117,7 @@ import static org.jetbrains.jet.lexer.JetTokens.*;
|
||||
}
|
||||
|
||||
protected IElementType lookahead(int k) {
|
||||
// TODO: use a faster implementation
|
||||
PsiBuilder.Marker tmp = mark();
|
||||
for (int i = 0; i < k; i++) advance();
|
||||
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
package org.jetbrains.jet.lang.parsing;
|
||||
|
||||
import com.intellij.lang.PsiBuilder;
|
||||
import com.intellij.psi.tree.TokenSet;
|
||||
import org.jetbrains.jet.JetNodeType;
|
||||
|
||||
import static org.jetbrains.jet.JetNodeTypes.NAMED_ARGUMENT;
|
||||
import static org.jetbrains.jet.JetNodeTypes.VALUE_ARGUMENT;
|
||||
import static org.jetbrains.jet.JetNodeTypes.VALUE_ARGUMENT_LIST;
|
||||
import static org.jetbrains.jet.JetNodeTypes.*;
|
||||
import static org.jetbrains.jet.lexer.JetTokens.*;
|
||||
|
||||
/**
|
||||
@@ -50,11 +49,9 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
* ;
|
||||
*/
|
||||
public void parseValueArgumentList() {
|
||||
assert at(LPAR);
|
||||
|
||||
PsiBuilder.Marker list = mark();
|
||||
|
||||
advance(); // LPAR
|
||||
expect(LPAR, "Expecting a parameter list", TokenSet.create(RPAR));
|
||||
|
||||
if (!at(RPAR)) {
|
||||
while (true) {
|
||||
|
||||
@@ -536,7 +536,7 @@ public class JetParsing extends AbstractJetParsing {
|
||||
while (true) {
|
||||
if (at(COMMA)) errorAndAdvance("Expecting a this or super constructor call");
|
||||
parseInitializer();
|
||||
if (at(COMMA)) break;
|
||||
if (!at(COMMA)) break;
|
||||
advance(); // COMMA
|
||||
}
|
||||
list.done(INITIALIZER_LIST);
|
||||
@@ -557,9 +557,13 @@ public class JetParsing extends AbstractJetParsing {
|
||||
advance(); // THIS_KEYWORD
|
||||
type = THIS_CALL;
|
||||
}
|
||||
else {
|
||||
else if (atSet(TYPE_REF_FIRST)) {
|
||||
parseTypeRef();
|
||||
type = DELEGATOR_SUPER_CALL;
|
||||
} else {
|
||||
errorWithRecovery("Expecting constructor call (this(...)) or supertype initializer", TokenSet.create(LBRACE, COMMA));
|
||||
initializer.drop();
|
||||
return;
|
||||
}
|
||||
myExpressionParsing.parseValueArgumentList();
|
||||
|
||||
@@ -620,10 +624,6 @@ public class JetParsing extends AbstractJetParsing {
|
||||
}
|
||||
else {
|
||||
createTruncatedBuilder(lastDot).parseTypeRef();
|
||||
// // The code below is NOT REENTRANT
|
||||
// myBuilder.setEOFPosition(lastDot);
|
||||
// parseTypeRef();
|
||||
// myBuilder.unSetEOFPosition();
|
||||
|
||||
expect(DOT, "Expecting '.' before a property name", propertyNameFollow);
|
||||
expect(IDENTIFIER, "Expecting property name", propertyNameFollow);
|
||||
@@ -716,10 +716,6 @@ public class JetParsing extends AbstractJetParsing {
|
||||
expect(IDENTIFIER, "Expecting function name or receiver type");
|
||||
} else {
|
||||
createTruncatedBuilder(lastDot).parseTypeRef();
|
||||
// // The code below in NOT REENTRANT
|
||||
// myBuilder.setEOFPosition(lastDot);
|
||||
// parseTypeRef();
|
||||
// myBuilder.unSetEOFPosition();
|
||||
|
||||
TokenSet functionNameFollow = TokenSet.create(LT, LPAR, COLON, EQ);
|
||||
expect(DOT, "Expecting '.' before a function name", functionNameFollow);
|
||||
@@ -835,6 +831,8 @@ public class JetParsing extends AbstractJetParsing {
|
||||
private void parseBlock() {
|
||||
assert at(LBRACE);
|
||||
|
||||
PsiBuilder.Marker block = mark();
|
||||
|
||||
advance(); // LBRACE
|
||||
|
||||
while (!eof() && !at(RBRACE)) {
|
||||
@@ -843,6 +841,8 @@ public class JetParsing extends AbstractJetParsing {
|
||||
}
|
||||
|
||||
expect(RBRACE, "Expecting '}");
|
||||
|
||||
block.done(BLOCK);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1043,10 +1043,6 @@ public class JetParsing extends AbstractJetParsing {
|
||||
|
||||
int lastId = findLastBefore(TokenSet.create(IDENTIFIER), TokenSet.create(COMMA, GT, COLON), false);
|
||||
createTruncatedBuilder(lastId).parseModifierList();
|
||||
// // The code below is NOT REENTRANT
|
||||
// myBuilder.setEOFPosition(lastId);
|
||||
// parseModifierList();
|
||||
// myBuilder.unSetEOFPosition();
|
||||
|
||||
expect(IDENTIFIER, "Type parameter name expected", TokenSet.EMPTY);
|
||||
|
||||
@@ -1275,10 +1271,6 @@ public class JetParsing extends AbstractJetParsing {
|
||||
|
||||
int lastId = findLastBefore(TokenSet.create(IDENTIFIER), TokenSet.create(COMMA, RPAR, COLON), false);
|
||||
createTruncatedBuilder(lastId).parseModifierList();
|
||||
// // The code below is NOT REENTRANT
|
||||
// myBuilder.setEOFPosition(lastId);
|
||||
// parseModifierList();
|
||||
// myBuilder.unSetEOFPosition();
|
||||
|
||||
if (!parseFunctionParameterRest()) {
|
||||
parameter.rollbackTo();
|
||||
|
||||
Reference in New Issue
Block a user