diff options
author | Martin Odersky <odersky@gmail.com> | 2013-06-07 16:14:05 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-06-07 16:14:05 +0200 |
commit | 27ce72f1b30a06f56782d88c6c4f96d261d4a44e (patch) | |
tree | 7f0ee9f70a6bbf5fd1de0d3deb2016340f0be3d6 /src/dotty/tools/dotc/typer/Namer.scala | |
parent | c76cffe04fd690378337971c78736f920b9a479d (diff) | |
download | dotty-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.scala | 12 |
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 */ |