lisp on yarv製作日誌6
どうしても気になったので、http://d.hatena.ne.jp/shinichiro_h/20071113#1194884481にあるyasm.rbを修正してみたところ、動くようになりました。いろいろ変わっていたので苦労しました。
特にメソッド定義の部分が大きく変わっています。昔はメソッドを定義するのに、definemethodというyarvの命令があったみたいなんですが、今のyarvだと、
core#define_methodというメソッドを呼び出してメソッドを定義しています。
修正前はこんな感じだったのが、
def definemethod name, method @body << [:definemethod, name, method, 0] end
修正後は、
def definemethod name, method @body << [:putspecialobject, 1] @body << [:putspecialobject, 2] @body << [:putobject, name] @body << [:putiseq, method] @body << [:send, :"core#define_method", 3, nil, 0, nil] end
のようになり、メソッドを定義する部分はかなり長くなりました。
修正したyasm.rbは、http://github.com/mas454/loy-yasmに置いています。
これからは、yasm.rbを使って処理系を書こうと思います。