aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/typer/Namer.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2013-06-07 16:14:05 +0200
committerMartin Odersky <odersky@gmail.com>2013-06-07 16:14:05 +0200
commit27ce72f1b30a06f56782d88c6c4f96d261d4a44e (patch)
tree7f0ee9f70a6bbf5fd1de0d3deb2016340f0be3d6 /src/dotty/tools/dotc/typer/Namer.scala
parentc76cffe04fd690378337971c78736f920b9a479d (diff)
downloaddotty-27ce72f1b30a06f56782d88c6c4f96d261d4a44e.tar.gz
dotty-27ce72f1b30a06f56782d88c6c4f96d261d4a44e.tar.bz2
dotty-27ce72f1b30a06f56782d88c6c4f96d261d4a44e.zip
Added support for eliminating type parameters from TypeDefs.
(1) New scheme for higher-kinded types that deals also with F-bounds. (2) Type parameters in type aliases are eliminated in most cases by expressing as unparameterized aliases of some refinement type. We will issue an error where this is not possible.
Diffstat (limited to 'src/dotty/tools/dotc/typer/Namer.scala')
-rw-r--r--src/dotty/tools/dotc/typer/Namer.scala12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/dotty/tools/dotc/typer/Namer.scala b/src/dotty/tools/dotc/typer/Namer.scala
index 7308d3aa6..18a26e0cf 100644
--- a/src/dotty/tools/dotc/typer/Namer.scala
+++ b/src/dotty/tools/dotc/typer/Namer.scala
@@ -284,7 +284,17 @@ class Namer { typer: Typer =>
def typeDefSig(tdef: TypeDef, sym: Symbol)(implicit ctx: Context): Type = {
completeParams(tdef.tparams)
- ???
+ val tparamSyms = tdef.tparams map symbolOfTree
+ val rhsType = typedAhead(tdef.rhs, Mode.Type).tpe
+
+ rhsType match {
+ case bounds: TypeBounds =>
+ if (tparamSyms.nonEmpty) bounds.higherKinded(tparamSyms)
+ else rhsType
+ case _ =>
+ if (tparamSyms.nonEmpty) rhsType.LambdaAbstract(tparamSyms)(ctx.error(_, _))
+ else TypeBounds(rhsType, rhsType)
+ }
}
/** The type signature of a ClassDef with given symbol */