読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

javaclassでCode属性とStackMapTable属性の解析をサポート

Ruby Java クラス解析機

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どうしたもんかな。