aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/parsing/Parsers.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2016-06-29 19:02:34 +0200
committerMartin Odersky <odersky@gmail.com>2016-07-11 13:34:58 +0200
commitcdb4a1cb986f25eddf411dfc45aeb20dd994f7d5 (patch)
treeba9c96c271418ec09c4b39adad8ebdbf7b81f4fa /src/dotty/tools/dotc/parsing/Parsers.scala
parent5d0318681f8c368f04796da5dd11ee1c9fcbdbd0 (diff)
downloaddotty-cdb4a1cb986f25eddf411dfc45aeb20dd994f7d5.tar.gz
dotty-cdb4a1cb986f25eddf411dfc45aeb20dd994f7d5.tar.bz2
dotty-cdb4a1cb986f25eddf411dfc45aeb20dd994f7d5.zip
New type lambda scheme for hk types
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 {