@@ -2663,6 +2663,7 @@ object Types {
2663
2663
final def isHigherKinded = isInstanceOf [TypeProxy ]
2664
2664
2665
2665
private [this ] var myParamRefs : List [ParamRefType ] = null
2666
+ private [this ] var myStableHash : Byte = 0
2666
2667
2667
2668
def paramRefs : List [ParamRefType ] = {
2668
2669
if (myParamRefs == null ) myParamRefs = paramNames.indices.toList.map(newParamRef)
@@ -2695,24 +2696,20 @@ object Types {
2695
2696
x => paramInfos.mapConserve(_.subst(this , x).asInstanceOf [PInfo ]),
2696
2697
x => resType.subst(this , x))
2697
2698
2698
- protected def prefixString : String
2699
- final override def toString = s " $prefixString( $paramNames, $paramInfos, $resType) "
2700
- }
2701
-
2702
- abstract class HKLambda extends CachedProxyType with LambdaType {
2703
- final override def underlying (implicit ctx : Context ) = resType
2704
-
2705
2699
override def computeHash (bs : Binders ) =
2706
2700
doHash(new Binders (this , bs), paramNames, resType, paramInfos)
2707
2701
2708
- override def stableHash = resType.stableHash && paramInfos.stableHash
2702
+ override def stableHash = {
2703
+ if (myStableHash == 0 ) myStableHash = if (resType.stableHash && paramInfos.stableHash) 1 else - 1
2704
+ myStableHash > 0
2705
+ }
2709
2706
2710
2707
final override def equals (that : Any ) = equals(that, null )
2711
2708
2712
2709
// No definition of `eql` --> fall back on equals, which calls iso
2713
2710
2714
2711
final override def iso (that : Any , bs : BinderPairs ) = that match {
2715
- case that : HKLambda =>
2712
+ case that : LambdaType =>
2716
2713
paramNames.eqElements(that.paramNames) &&
2717
2714
companion.eq(that.companion) && {
2718
2715
val bs1 = new BinderPairs (this , that, bs)
@@ -2722,13 +2719,17 @@ object Types {
2722
2719
case _ =>
2723
2720
false
2724
2721
}
2722
+
2723
+ protected def prefixString : String
2724
+ final override def toString = s " $prefixString( $paramNames, $paramInfos, $resType) "
2725
2725
}
2726
2726
2727
- abstract class MethodOrPoly extends UncachedGroundType with LambdaType with MethodicType {
2728
- final override def hashCode = System .identityHashCode(this )
2729
- final override def equals (other : Any ) = this `eq` other.asInstanceOf [AnyRef ]
2727
+ abstract class HKLambda extends CachedProxyType with LambdaType {
2728
+ final override def underlying (implicit ctx : Context ) = resType
2730
2729
}
2731
2730
2731
+ abstract class MethodOrPoly extends CachedGroundType with LambdaType with MethodicType
2732
+
2732
2733
trait TermLambda extends LambdaType { thisLambdaType =>
2733
2734
import DepStatus ._
2734
2735
type ThisName = TermName
0 commit comments