diff options
Diffstat (limited to 'src/dotty/tools/dotc/parsing/Parsers.scala')
-rw-r--r-- | src/dotty/tools/dotc/parsing/Parsers.scala | 11 |
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 { |