aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/Types.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-01-01 14:47:52 +0100
committerMartin Odersky <odersky@gmail.com>2015-01-01 14:49:33 +0100
commit95f74c2a999b20ee5f6ddbe6e14511872e8c227f (patch)
tree40ff60221d4a9e9ba8b9a4ea01b11eec036903a2 /src/dotty/tools/dotc/core/Types.scala
parente3a43806a2b5b17982e942a82cabe139c09d971e (diff)
downloaddotty-95f74c2a999b20ee5f6ddbe6e14511872e8c227f.tar.gz
dotty-95f74c2a999b20ee5f6ddbe6e14511872e8c227f.tar.bz2
dotty-95f74c2a999b20ee5f6ddbe6e14511872e8c227f.zip
Provide the correct levels for RefinedThis types.
Diffstat (limited to 'src/dotty/tools/dotc/core/Types.scala')
-rw-r--r--src/dotty/tools/dotc/core/Types.scala10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/dotty/tools/dotc/core/Types.scala b/src/dotty/tools/dotc/core/Types.scala
index 469e8ca01..d1b2e8f1e 100644
--- a/src/dotty/tools/dotc/core/Types.scala
+++ b/src/dotty/tools/dotc/core/Types.scala
@@ -1805,7 +1805,7 @@ object Types {
&& !parent.isLambda)
derivedRefinedType(parent.EtaExpand, refinedName, refinedInfo)
else
- RefinedType(parent, refinedName, rt => refinedInfo.substThis(this, RefinedThis(rt)))
+ RefinedType(parent, refinedName, rt => refinedInfo.substThis(this, RefinedThis(rt, -1))) // !!! TODO: replace with simply `refinedInfo`
}
override def equals(that: Any) = that match {
@@ -2201,10 +2201,14 @@ object Types {
override def computeHash = doHash(paramNum, binder)
}
- case class RefinedThis(binder: RefinedType, level: Int = 0) extends BoundType with SingletonType {
+ /** A reference to the `this` of an enclosing refined type.
+ * @param level The number of enclosing refined types between
+ * the `this` reference and its target.
+ */
+ case class RefinedThis(binder: RefinedType, level: Int) extends BoundType with SingletonType {
type BT = RefinedType
override def underlying(implicit ctx: Context) = binder
- def copyBoundType(bt: BT) = RefinedThis(bt)
+ def copyBoundType(bt: BT) = RefinedThis(bt, level)
// need to customize hashCode and equals to prevent infinite recursion for
// refinements that refer to the refinement type via this