aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/parsing/Parsers.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/dotty/tools/dotc/parsing/Parsers.scala')
-rw-r--r--src/dotty/tools/dotc/parsing/Parsers.scala11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/parsing/Parsers.scala b/src/dotty/tools/dotc/parsing/Parsers.scala
index ded17c67c..0cc392bad 100644
--- a/src/dotty/tools/dotc/parsing/Parsers.scala
+++ b/src/dotty/tools/dotc/parsing/Parsers.scala
@@ -223,7 +223,9 @@ object Parsers {
} // DEBUG
private def expectedMsg(token: Int): String =
- showToken(token) + " expected but " + showToken(in.token) + " found."
+ expectedMessage(showToken(token))
+ private def expectedMessage(what: String): String =
+ s"$what expected but ${showToken(in.token)} found"
/** Consume one token of the specified type, or
* signal an error if it is not there.
@@ -648,6 +650,7 @@ object Parsers {
/* ------------- TYPES ------------------------------------------------------ */
/** Type ::= FunArgTypes `=>' Type
+ * | HkTypeParamClause `->' Type
* | InfixType
* FunArgTypes ::= InfixType
* | `(' [ FunArgType {`,' FunArgType } ] `)'
@@ -677,6 +680,12 @@ object Parsers {
}
}
}
+ else if (in.token == LBRACKET) {
+ val tparams = typeParamClause(ParamOwner.TypeParam)
+ if (isIdent && in.name.toString == "->")
+ atPos(in.skipToken())(TypeLambdaTree(tparams, typ()))
+ else { syntaxErrorOrIncomplete(expectedMessage("`->'")); typ() }
+ }
else infixType()
in.token match {