Created
April 25, 2012 02:24
-
-
Save komamitsu/2485599 to your computer and use it in GitHub Desktop.
decompiled Scala traits with javap
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
komamitsu@carrot ~/lab/scala/traitsample2 $ cat Hello.scala | |
trait T1 { | |
val age:Int | |
} | |
trait T2 { | |
def hello(name:String) = println("hello " + name) | |
} | |
class C extends T1 with T2 { val age = 42 } | |
komamitsu@carrot ~/lab/scala/traitsample2 $ javap -private -c T1 | |
Compiled from "Hello.scala" | |
public interface T1{ | |
public abstract int age(); | |
} | |
komamitsu@carrot ~/lab/scala/traitsample2 $ javap -private -c T2 | |
Compiled from "Hello.scala" | |
public interface T2 extends scala.ScalaObject{ | |
public abstract void hello(java.lang.String); | |
} | |
komamitsu@carrot ~/lab/scala/traitsample2 $ javap -private -c T2\$class | |
Compiled from "Hello.scala" | |
public abstract class T2$class extends java.lang.Object{ | |
public static void hello(T2, java.lang.String); | |
Code: | |
0: getstatic #11; //Field scala/Predef$.MODULE$:Lscala/Predef$; | |
3: new #14; //class scala/collection/mutable/StringBuilder | |
6: dup | |
7: invokespecial #18; //Method scala/collection/mutable/StringBuilder."<init>":()V | |
10: ldc #20; //String hello | |
12: invokevirtual #24; //Method scala/collection/mutable/StringBuilder.append:(Ljava/lang/Object;)Lscala/collection/mutable/StringBuilder; | |
15: aload_1 | |
16: invokevirtual #24; //Method scala/collection/mutable/StringBuilder.append:(Ljava/lang/Object;)Lscala/collection/mutable/StringBuilder; | |
19: invokevirtual #28; //Method scala/collection/mutable/StringBuilder.toString:()Ljava/lang/String; | |
22: invokevirtual #32; //Method scala/Predef$.println:(Ljava/lang/Object;)V | |
25: return | |
public static void $init$(T2); | |
Code: | |
0: return | |
komamitsu@carrot ~/lab/scala/traitsample2 $ javap -private -c C | |
Compiled from "Hello.scala" | |
public class C extends java.lang.Object implements T1,T2,scala.ScalaObject{ | |
private final int age; | |
public void hello(java.lang.String); | |
Code: | |
0: aload_0 | |
1: aload_1 | |
2: invokestatic #13; //Method T2$class.hello:(LT2;Ljava/lang/String;)V | |
5: return | |
public int age(); | |
Code: | |
0: aload_0 | |
1: getfield #23; //Field age:I | |
4: ireturn | |
public C(); | |
Code: | |
0: aload_0 | |
1: invokespecial #29; //Method java/lang/Object."<init>":()V | |
4: aload_0 | |
5: invokestatic #33; //Method T2$class.$init$:(LT2;)V | |
8: aload_0 | |
9: bipush 42 | |
11: putfield #23; //Field age:I | |
14: return | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment