summaryrefslogtreecommitdiff
path: root/build.xml
diff options
context:
space:
mode:
authorJason Zaugg <jzaugg@gmail.com>2013-03-13 11:01:37 +0100
committerJason Zaugg <jzaugg@gmail.com>2013-03-13 11:21:59 +0100
commit2b5fde7ef9b202e8d4ba94d93d1b91b90e14d42f (patch)
tree4429c38d56b7de2e740913bf829cd84db863d300 /build.xml
parent52adf130409df57fd612a119e352345cf1c93979 (diff)
downloadscala-2b5fde7ef9b202e8d4ba94d93d1b91b90e14d42f.tar.gz
scala-2b5fde7ef9b202e8d4ba94d93d1b91b90e14d42f.tar.bz2
scala-2b5fde7ef9b202e8d4ba94d93d1b91b90e14d42f.zip
SI-7242 Fix crash when inner object mixes in its companion
Given: class C { trait T { C.this } // C$T$$$outer$ : C object T extends T { C.this } // C$T$$$outer$ : C.this.type } object T ended up with a definitions for both of the accessors. These cannot co-exist, as they have the same erased type. A crash ensued almost immediately in explitouter. Fortunately, the solution is straightforward: we can just omit the mixin outer accessor altogether, the objects own outer accessor is compatible with it. scala> :javap C.T Compiled from "<console>" public interface C$T{ public abstract C C$T$$$outer(); } scala> :javap C.T$ Compiled from "<console>" public class C$T$ extends java.lang.Object implements C$T{ public C C$T$$$outer(); public C$T$(C); } I also added an assertion to give a better error message in case we find ourselves here again. Also includes tests from SI-3994, which I'll mark as a duplicate.
Diffstat (limited to 'build.xml')
0 files changed, 0 insertions, 0 deletions