Made parser aware of templates in parameters, return type positions for all functions; of name, receiver positions for extension functions.

This commit is contained in:
Evgeny Gerashchenko
2012-02-01 16:41:02 +04:00
parent 8d67d794b3
commit ecdcfdb45a
@@ -965,8 +965,10 @@ public class JetParsing extends AbstractJetParsing {
if (at(COLON)) { if (at(COLON)) {
advance(); // COLON advance(); // COLON
if (!parseIdeTemplate()) {
parseTypeRef(); parseTypeRef();
} }
}
parseTypeConstraintsGuarded(typeParameterListOccurred); parseTypeConstraintsGuarded(typeParameterListOccurred);
@@ -992,6 +994,10 @@ public class JetParsing extends AbstractJetParsing {
expect(IDENTIFIER, "Expecting " + title + " name or receiver type", nameFollow); expect(IDENTIFIER, "Expecting " + title + " name or receiver type", nameFollow);
} }
} else { } else {
if (parseIdeTemplate()) {
expect(DOT, "Expecting '.' after receiver template");
}
else {
createTruncatedBuilder(lastDot).parseTypeRef(); createTruncatedBuilder(lastDot).parseTypeRef();
if (atSet(RECEIVER_TYPE_TERMINATORS)) { if (atSet(RECEIVER_TYPE_TERMINATORS)) {
@@ -1000,10 +1006,13 @@ public class JetParsing extends AbstractJetParsing {
else { else {
errorWithRecovery("Expecting '.' before a " + title + " name", nameFollow); errorWithRecovery("Expecting '.' before a " + title + " name", nameFollow);
} }
}
if (!parseIdeTemplate()) {
expect(IDENTIFIER, "Expecting " + title + " name", nameFollow); expect(IDENTIFIER, "Expecting " + title + " name", nameFollow);
} }
} }
}
/* /*
* functionBody * functionBody
@@ -1537,6 +1546,7 @@ public class JetParsing extends AbstractJetParsing {
myBuilder.disableNewlines(); myBuilder.disableNewlines();
expect(LPAR, "Expecting '(", recoverySet); expect(LPAR, "Expecting '(", recoverySet);
if (!parseIdeTemplate()) {
if (!at(RPAR) && !atSet(recoverySet)) { if (!at(RPAR) && !atSet(recoverySet)) {
while (true) { while (true) {
if (at(COMMA)) { if (at(COMMA)) {
@@ -1560,6 +1570,8 @@ public class JetParsing extends AbstractJetParsing {
advance(); // COMMA advance(); // COMMA
} }
} }
}
expect(RPAR, "Expecting ')'", recoverySet); expect(RPAR, "Expecting ')'", recoverySet);
myBuilder.restoreNewlinesState(); myBuilder.restoreNewlinesState();