aboutsummaryrefslogtreecommitdiff
path: root/compiler/src/dotty/tools/dotc/core/Types.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2017-03-17 11:29:07 +0100
committerMartin Odersky <odersky@gmail.com>2017-04-06 13:15:28 +0200
commitc7718516fdad609625215f4fb1c7cffe27db3af5 (patch)
tree3c2a45791cf23d6572d78e72fb7e8c392fdccc5d /compiler/src/dotty/tools/dotc/core/Types.scala
parent71daa0342120d2414c840a1dda2eae5e676aece2 (diff)
downloaddotty-c7718516fdad609625215f4fb1c7cffe27db3af5.tar.gz
dotty-c7718516fdad609625215f4fb1c7cffe27db3af5.tar.bz2
dotty-c7718516fdad609625215f4fb1c7cffe27db3af5.zip
Remove parameter from lambda type
Diffstat (limited to 'compiler/src/dotty/tools/dotc/core/Types.scala')
-rw-r--r--compiler/src/dotty/tools/dotc/core/Types.scala19
1 files changed, 11 insertions, 8 deletions
diff --git a/compiler/src/dotty/tools/dotc/core/Types.scala b/compiler/src/dotty/tools/dotc/core/Types.scala
index 226399ed3..0642ca8d4 100644
--- a/compiler/src/dotty/tools/dotc/core/Types.scala
+++ b/compiler/src/dotty/tools/dotc/core/Types.scala
@@ -2324,15 +2324,16 @@ object Types {
* Proxy (hk) | HKTermLambda | HKTypeLambda
* Ground (*) | MethodType | PolyType
*/
- trait LambdaType[PInfo <: Type] extends BindingType with MethodOrPoly { self =>
+ trait LambdaType extends BindingType with MethodOrPoly { self =>
type ThisName <: Name
- type This <: LambdaType[PInfo]
+ type PInfo <: Type
+ type This <: LambdaType{type PInfo = self.PInfo}
def paramNames: List[ThisName]
def paramInfos: List[PInfo]
def resType: Type
def newLikeThis(paramNames: List[ThisName], paramInfos: List[PInfo], resType: Type)
- (implicit ctx: Context): LambdaType[PInfo] { type ThisName = self.ThisName }
+ (implicit ctx: Context): LambdaType { type ThisName = self.ThisName; type PInfo = self.PInfo }
def newParamRef(n: Int): ParamRef[This]
override def resultType(implicit ctx: Context) = resType
@@ -2356,7 +2357,7 @@ object Types {
else newLikeThis(paramNames, paramInfos, resType)
override def equals(that: Any) = that match {
- case that: LambdaType[_] =>
+ case that: LambdaType =>
this.paramNames == that.paramNames &&
this.paramInfos == that.paramInfos &&
this.resType == that.resType
@@ -2365,9 +2366,10 @@ object Types {
}
}
- trait LambdaOverTerms extends LambdaType[Type] { thisLambdaType =>
+ trait LambdaOverTerms extends LambdaType { thisLambdaType =>
import LambdaOverTerms._
type ThisName = TermName
+ type PInfo = Type
type This = LambdaOverTerms
def paramNames: List[TermName]
@@ -2533,7 +2535,7 @@ object Types {
override protected def prefixString = "ImplicitMethodType"
}
- abstract class LambdaTypeCompanion[N <: Name, PInfo <: Type, LT <: LambdaType[PInfo]] {
+ abstract class LambdaTypeCompanion[N <: Name, PInfo <: Type, LT <: LambdaType] {
def apply(paramNames: List[N])(paramInfosExp: LT => List[PInfo], resultTypeExp: LT => Type)(implicit ctx: Context): LT
def syntheticParamNames(n: Int): List[N]
def apply(paramNames: List[N], paramInfos: List[PInfo], resultType: Type)(implicit ctx: Context): LT =
@@ -2646,9 +2648,10 @@ object Types {
*/
class PolyType(val paramNames: List[TypeName])(
paramInfosExp: PolyType => List[TypeBounds], resultTypeExp: PolyType => Type)
- extends CachedProxyType with LambdaType[TypeBounds] {
+ extends CachedProxyType with LambdaType {
type ThisName = TypeName
+ type PInfo = TypeBounds
type This = PolyType
/** The bounds of the type parameters */
@@ -2860,7 +2863,7 @@ object Types {
def paramName: Name
}
- abstract case class ParamRef[LT <: LambdaType[_ <: Type]]
+ abstract case class ParamRef[LT <: LambdaType]
(binder: LT, paramNum: Int) extends ParamType {
type BT = LT