Skip to content

Instantly share code, notes, and snippets.

@retronym
Last active August 29, 2015 14:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save retronym/808f230eaa79ab03c6c7 to your computer and use it in GitHub Desktop.
Save retronym/808f230eaa79ab03c6c7 to your computer and use it in GitHub Desktop.
--- sandbox/outer-class.log 2014-11-06 16:24:54.000000000 +1000
+++ sandbox/outer-trait.log 2014-11-06 16:25:01.000000000 +1000
@@ -1,137 +1,185 @@
object Test {
def main(args: Array[String]): Unit = {
val session2 = ""
- class OuterClass {
+ trait OuterTrait {
class Inner {
session2
}
}
- class C extends OuterClass
+ class C extends OuterTrait
new C
}
}
-test/files/run/t7970.scala:6: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
+test/files/run/t7970b.scala:6: warning: a pure expression does nothing in statement position; you may be omitting necessary parentheses
session2
^
-[[syntax trees at end of erasure]] // t7970.scala
+[[syntax trees at end of erasure]] // t7970b.scala
package <empty> {
object Test extends Object {
def <init>(): Test.type = {
Test.super.<init>();
()
};
def main(args: Array[String]): Unit = {
val session2: String = "";
- class OuterClass extends Object {
- def <init>(): OuterClass = {
- OuterClass.super.<init>();
- ()
- };
+ abstract trait OuterTrait extends Object {
class Inner extends Object {
- def <init>($outer: OuterClass): OuterClass.this.Inner = {
+ def <init>($outer: OuterTrait): OuterTrait.this.Inner = {
Inner.super.<init>();
()
};
session2;
- <synthetic> <paramaccessor> <artifact> protected val $outer: OuterClass = _;
- <synthetic> <stable> <artifact> def $outer(): OuterClass = Inner.this.$outer
+ <synthetic> <paramaccessor> <artifact> protected val $outer: OuterTrait = _;
+ <synthetic> <stable> <artifact> def $outer(): OuterTrait = Inner.this.$outer
}
};
- class C extends OuterClass {
+ class C extends Object with OuterTrait {
def <init>(): C = {
C.super.<init>();
+ C.this.$asInstanceOf[OuterTrait$class]()./*OuterTrait$class*/$init$();
+ ()
+ }
+ };
+ abstract trait OuterTrait$class extends Object with OuterTrait {
+ def /*OuterTrait$class*/$init$(): Unit = {
()
}
};
{
new C();
()
}
}
}
}
-[[syntax trees at end of lambdalift]] // t7970.scala
+[[syntax trees at end of lambdalift]] // t7970b.scala
package <empty> {
object Test extends Object {
def <init>(): Test.type = {
Test.super.<init>();
()
};
def main(args: Array[String]): Unit = {
val session2: String = "";
{
- new Test.C$1(session2);
+ new Test.C$1();
()
}
};
- class OuterClass$1 extends Object {
- def <init>(session2$1: String): Test.OuterClass$1 = {
- OuterClass$1.super.<init>();
- ()
- };
+ abstract trait OuterTrait$1 extends Object {
class Inner extends Object {
- def <init>($outer: Test.OuterClass$1): OuterClass$1.this.Inner = {
+ def <init>($outer: Test.OuterTrait$1): OuterTrait$1.this.Inner = {
Inner.super.<init>();
()
};
Inner.this.$outer().session2$1;
- <synthetic> <paramaccessor> <artifact> protected val $outer: Test.OuterClass$1 = _;
- <synthetic> <stable> <artifact> def $outer(): Test.OuterClass$1 = Inner.this.$outer
+ <synthetic> <paramaccessor> <artifact> protected val $outer: Test.OuterTrait$1 = _;
+ <synthetic> <stable> <artifact> def $outer(): Test.OuterTrait$1 = Inner.this.$outer
};
<synthetic> <paramaccessor> val session2$1: String = _
};
- class C$1 extends Test.OuterClass$1 {
- def <init>(session2$1: String): Test.C$1 = {
- C$1.super.<init>(session2$1);
+ class C$1 extends Object with Test.OuterTrait$1 {
+ def <init>(): Test.C$1 = {
+ C$1.super.<init>();
+ C$1.this.$asInstanceOf[Test.OuterTrait$1$class]()./*OuterTrait$1$class*/$init$();
+ ()
+ }
+ };
+ abstract trait OuterTrait$1$class extends Object with Test.OuterTrait$1 {
+ def /*OuterTrait$1$class*/$init$(): Unit = {
()
}
}
}
}
-[[syntax trees at end of mixin]] // t7970.scala
+[[syntax trees at end of mixin]] // t7970b.scala
package <empty> {
object Test extends Object {
def main(args: Array[String]): Unit = {
val session2: String = "";
{
- new Test$C$1(session2);
+ new Test$C$1();
()
}
};
def <init>(): Test.type = {
Test.super.<init>();
()
}
};
- class Test$OuterClass$1 extends Object {
- <synthetic> <paramaccessor> val session2$1: String = _;
- def <init>(session2$1: String): Test$OuterClass$1 = {
- Test$OuterClass$1.this.session2$1 = session2$1;
- Test$OuterClass$1.super.<init>();
- ()
- }
+ abstract trait Test$OuterTrait$1 extends Object {
+ <synthetic> <paramaccessor> val session2$1: String = _
};
- class Test$OuterClass$1$Inner extends Object {
- <synthetic> <paramaccessor> <artifact> protected val $outer: Test$OuterClass$1 = _;
- <synthetic> <stable> <artifact> def $outer(): Test$OuterClass$1 = Test$OuterClass$1$Inner.this.$outer;
- def <init>($outer: Test$OuterClass$1): Test$OuterClass$1$Inner = {
+ class Test$OuterTrait$1$Inner extends Object {
+ <synthetic> <paramaccessor> <artifact> protected val $outer: Test$OuterTrait$1 = _;
+ <synthetic> <stable> <artifact> def $outer(): Test$OuterTrait$1 = Test$OuterTrait$1$Inner.this.$outer;
+ def <init>($outer: Test$OuterTrait$1): Test$OuterTrait$1$Inner = {
if ($outer.eq(null))
throw null
else
- Test$OuterClass$1$Inner.this.$outer = $outer;
- Test$OuterClass$1$Inner.super.<init>();
+ Test$OuterTrait$1$Inner.this.$outer = $outer;
+ Test$OuterTrait$1$Inner.super.<init>();
$outer.session2$1;
()
}
};
- class Test$C$1 extends Test$OuterClass$1 {
- def <init>(session2$1: String): Test$C$1 = {
- Test$C$1.super.<init>(session2$1);
+ class Test$C$1 extends Object with Test$OuterTrait$1 {
+ def <init>(): Test$C$1 = {
+ Test$C$1.super.<init>();
+ Test$OuterTrait$1$class./*Test$OuterTrait$1$class*/$init$(Test$C$1.this);
+ ()
+ }
+ };
+ abstract trait Test$OuterTrait$1$class extends {
+ def /*Test$OuterTrait$1$class*/$init$($this: Test$OuterTrait$1): Unit = {
()
}
}
}
one warning found
+java.lang.ClassFormatError: Illegal field modifiers in class Test$OuterTrait$1: 0x11
+ at java.lang.ClassLoader.defineClass1(Native Method)
+ at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
+ at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+ at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
+ at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+ at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
+ at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
+ at java.security.AccessController.doPrivileged(Native Method)
+ at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
+ at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+ at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+ at java.lang.ClassLoader.defineClass1(Native Method)
+ at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
+ at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
+ at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
+ at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
+ at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
+ at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
+ at java.security.AccessController.doPrivileged(Native Method)
+ at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
+ at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
+ at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
+ at Test$.main(t7970b.scala:10)
+ at Test.main(t7970b.scala)
+ at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+ at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
+ at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
+ at java.lang.reflect.Method.invoke(Method.java:483)
+ at scala.reflect.internal.util.ScalaClassLoader$$anonfun$run$1.apply(ScalaClassLoader.scala:70)
+ at scala.reflect.internal.util.ScalaClassLoader$class.asContext(ScalaClassLoader.scala:31)
+ at scala.reflect.internal.util.ScalaClassLoader$URLClassLoader.asContext(ScalaClassLoader.scala:101)
+ at scala.reflect.internal.util.ScalaClassLoader$class.run(ScalaClassLoader.scala:70)
+ at scala.reflect.internal.util.ScalaClassLoader$URLClassLoader.run(ScalaClassLoader.scala:101)
+ at scala.tools.nsc.CommonRunner$class.run(ObjectRunner.scala:22)
+ at scala.tools.nsc.ObjectRunner$.run(ObjectRunner.scala:39)
+ at scala.tools.nsc.CommonRunner$class.runAndCatch(ObjectRunner.scala:29)
+ at scala.tools.nsc.ObjectRunner$.runAndCatch(ObjectRunner.scala:39)
+ at scala.tools.nsc.MainGenericRunner.runTarget$1(MainGenericRunner.scala:65)
+ at scala.tools.nsc.MainGenericRunner.run$1(MainGenericRunner.scala:87)
+ at scala.tools.nsc.MainGenericRunner.process(MainGenericRunner.scala:98)
+ at scala.tools.nsc.MainGenericRunner$.main(MainGenericRunner.scala:103)
+ at scala.tools.nsc.MainGenericRunner.main(MainGenericRunner.scala)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment