Skip to content

Instantly share code, notes, and snippets.

@komamitsu
Created April 25, 2012 02:24
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 komamitsu/2485599 to your computer and use it in GitHub Desktop.
Save komamitsu/2485599 to your computer and use it in GitHub Desktop.
decompiled Scala traits with javap
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