javaclassでCode属性とStackMapTable属性の解析をサポート
javaclassにCode属性とStackMapTable属性の解析機能を実装してコミットしましたよ。
→GitHub - unageanu/javaclass
以下はjavaclassを使ってクラスの解析結果を表示する例です。Code属性の解析をサポートしたので(昔と違って)javapに近い結果が得られるようになっています。
require "javaclass" open( "./java_class/HelloWorld.class", "r+b" ) {|io| jc = JavaClass.from io puts jc.to_s }
解析対象のクラスは次のとおり。
public class HelloWorld { public static void main ( String[] args ) { String str = "Hello World!"; System.out.println( str ); } }
実行結果です。
// version 50.0 // source HelloWorld.java public class HelloWorld extends java.lang.Object { public void <init> ( ) { HelloWorld this; 0 : aload_0 // line : 1 1 : invokespecial 8 4 : return } public static void main ( java.lang.String[] arg1 ) { java.lang.String[] args; java.lang.String str; 0 : ldc 16 // line : 3 2 : astore_1 3 : getstatic 18 6 : aload_1 // line : 4 7 : invokevirtual 24 10 : return } }
さて、gemも作っておこうかなと思ったけど、gemcutterにすでに同名のgemがアップロードされとる!..orzどうしたもんかな。