summaryrefslogtreecommitdiff
path: root/test/files/run/t7507.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-05-23 09:25:11 +0200
committerJason Zaugg <jzaugg@gmail.com>2013-05-31 13:40:27 +0200
commitd2faeb9ae60389668f1b5f45eb91c73127401e40 (patch)
tree5a2448d8a6a3bbc14ce81d90c68300a31c56b3b9 /test/files/run/t7507.scala
parent681f2070053bc6f3133425b44083fe056bfeb1fa (diff)
downloadscala-d2faeb9ae60389668f1b5f45eb91c73127401e40.tar.gz
scala-d2faeb9ae60389668f1b5f45eb91c73127401e40.tar.bz2
scala-d2faeb9ae60389668f1b5f45eb91c73127401e40.zip
SI-7507 Fix lookup of private[this] member in presence of self type.
In the following code: trait Cake extends Slice trait Slice { self: Cake => // must have self type that extends `Slice` private[this] val bippy = () // must be private[this] locally(bippy) } `ThisType(<Slice>)`.findMember(bippy)` excluded the private local member on the grounds that the first class in the base type sequence, `Cake`, was not contained in `Slice`. scala> val thisType = typeOf[Slice].typeSymbol.thisType thisType: $r.intp.global.Type = Slice.this.type scala> thisType.baseClasses res6: List[$r.intp.global.Symbol] = List(trait Cake, trait Slice, class Object, class Any) This commit changes `findMember` to use the symbol of the `ThisType`, rather than the first base class, as the location of the selection.
Diffstat (limited to 'test/files/run/t7507.scala')
-rw-r--r--test/files/run/t7507.scala31
1 files changed, 31 insertions, 0 deletions
diff --git a/test/files/run/t7507.scala b/test/files/run/t7507.scala
new file mode 100644
index 0000000000..6c1959ddac
--- /dev/null
+++ b/test/files/run/t7507.scala
@@ -0,0 +1,31 @@
+trait Cake extends Slice
+
+// Minimization
+trait Slice { self: Cake => // must have self type that extends `Slice`
+ private[this] val bippy = () // must be private[this]
+ locally(bippy)
+}
+
+// Originally reported bug:
+trait Cake1 extends Slice1
+trait Slice1 { self: Cake1 =>
+ import java.lang.String // any import will do!
+ val Tuple2(x, y) = ((1, 2))
+}
+
+
+// Nesting
+trait Cake3 extends Outer.Slice3
+
+// Minimization
+object Outer {
+ private[this] val bippy = ()
+ trait Slice3 { self: Cake3 =>
+ locally(bippy)
+ }
+}
+
+object Test extends App {
+ val s1 = new Cake1 {}
+ assert((s1.x, s1.y) == (1, 2), (s1.x, s1.y))
+}