Tuple types

This commit is contained in:
Andrey Breslav
2010-12-16 13:17:38 +03:00
parent 9bcdf19bb2
commit 86c59d7530
7 changed files with 498 additions and 2 deletions
@@ -39,6 +39,8 @@ public interface JetNodeTypes {
JetNodeType VALUE_ARGUMENT_LIST = new JetNodeType("VALUE_ARGUMENT_LIST");
JetNodeType VALUE_ARGUMENT = new JetNodeType("VALUE_ARGUMENT");
JetNodeType TYPE_REFERENCE = new JetNodeType("TYPE_REFERENCE");
JetNodeType LABELED_TUPLE_ENTRY = new JetNodeType("LABELED_TUPLE_ENTRY");
JetNodeType TUPLE_TYPE = new JetNodeType("TUPLE_TYPE");
IElementType NAMESPACE_NAME = new JetNodeType("NAMESPACE_NAME");
@@ -683,16 +683,34 @@ public class JetParsing {
list.done(TYPE_ARGUMENT_LIST);
}
/*
* tupleType
* : "(" type{","}? ")"
* : "(" parameter{","} ")" // tuple with named entries, the names do not affect assignment compatibility
* ;
*/
private void parseTupleType() {
assert at(LPAR);
PsiBuilder.Marker tuple = mark();
advance(); // LPAR
if (!at(RPAR)) {
while (true) {
if (TokenSet.create(IDENTIFIER, LBRACE, LPAR).contains(tt())) {
if (at(COLON)) errorAndAdvance("Expecting a name for tuple entry");
if (at(IDENTIFIER) && lookahead(1) == COLON) {
PsiBuilder.Marker labeledEntry = mark();
advance(); // IDENTIFIER
advance(); // COLON
parseTypeRef();
} else {
labeledEntry.done(LABELED_TUPLE_ENTRY);
}
else if (TokenSet.create(LBRACKET, IDENTIFIER, LBRACE, LPAR).contains(tt())) {
parseTypeRef();
}
else {
error("Type expected");
break;
}
@@ -702,6 +720,8 @@ public class JetParsing {
}
expect(RPAR, "Expecting ')");
tuple.done(TUPLE_TYPE);
}
/*