summaryrefslogtreecommitdiff
path: root/test/files/pos/t5508-min-okay2.scala
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-11-27 15:13:50 +0100
committerJason Zaugg <jzaugg@gmail.com>2013-12-19 15:27:06 +0100
commitcca4d51dbf3f8478cb338e6d53e34003e9a3fa45 (patch)
tree047ae290cd9490c8494085f94dd07986ee801ec8 /test/files/pos/t5508-min-okay2.scala
parentd99a4919e0fa4894829c752a8f881d7b103d8cda (diff)
downloadscala-cca4d51dbf3f8478cb338e6d53e34003e9a3fa45.tar.gz
scala-cca4d51dbf3f8478cb338e6d53e34003e9a3fa45.tar.bz2
scala-cca4d51dbf3f8478cb338e6d53e34003e9a3fa45.zip
SI-5508 Fix crasher with private[this] in nested traits
Currently, accessors for private local trait fields are added very late in the game when the `Mixin` tree transformer treats the trait. By contrast, fields with weaker access have accessors created eagerly in `Namers`. // Mixin#addLateInterfaceMembers val getter = member.getter(clazz) if (getter == NoSymbol) addMember(clazz, newGetter(member)) `addMember` mutates the type of the interface to add the getter. (This seems like a pretty poor design: usually if a phase changes types, it should do in an `InfoTransformer`.) However, if an inner class or anonymous function of the trait has been flattened to a spot where it precedes the trait in the enclosing packages info, this code hasn't had a chance to run, and the lookup of the getter crashes as mixins `postTransform` runs over a selection of the not-yet-materialized getter. // Mixin#postTransform case Select(qual, name) if sym.owner.isImplClass && !isStaticOnly(sym) => val iface = toInterface(sym.owner.tpe).typeSymbol val ifaceGetter = sym getter iface This commit ensures that `Flatten` lifts inner classes to a position *after* the enclosing class in the stats of the enclosing package. Bonus fix: SI-7012 (the followup ticket to SI-6231 / SI-2897)
Diffstat (limited to 'test/files/pos/t5508-min-okay2.scala')
-rw-r--r--test/files/pos/t5508-min-okay2.scala4
1 files changed, 4 insertions, 0 deletions
diff --git a/test/files/pos/t5508-min-okay2.scala b/test/files/pos/t5508-min-okay2.scala
new file mode 100644
index 0000000000..935f28609c
--- /dev/null
+++ b/test/files/pos/t5508-min-okay2.scala
@@ -0,0 +1,4 @@
+trait TopTrait { // must be nested and a trait
+ private[this] val _st : Int = 0 // crashes if TopTrait is not top level
+ val escape = { () => _st }
+}