ひとり勉強会

ひとり楽しく勉強会

2006-12-22から1日間の記事一覧

まとめ

というわけで、定義関係のコンパイル部分を読み終わりました!これにて [compile step 1] が無事?終了です。年末はお休みです。来年からは、コード生成部分の続き compile step 3 〜 5 に移ろうと思います。3,4,5 と3回で行ければいいな。では、よいお年を…

NODE_DEFINED

これが最後! defined? e変数などなどが定義されているかどうかを返す式です。定義されていれば式の種別を表す文字列、いなければ偽を返します。コンパイルはdefined_expr補助関数が全面的に担当しています。 case NODE_DEFINED:{ if (!poped) { LABEL *lfin…

NODE_UNDEF

undef メソッド名 一度定義したメソッドを取り消す処理です。わたし、aliasとundefの存在は今日始めて知りました。(^_^; こんなのあったんですね。 case NODE_UNDEF:{ if (nd_type(node->u2.node) != NODE_LIT) { rb_bug("undef args must be NODE_LIT"); } …

alias

Ruby の alias には2種類あります。メソッドに別名をつけるalias(NODE_ALIAS)と、グローバル変数に別名をつけるalias(NODE_VALIAS)です。 ノード コード NODE_ALIAS alias newmethod oldname NODE_ALIAS alias :newmethod :oldname NODE_VALIAS alias $…

NODE_DEFN 等

まず、クラスやメソッドを定義する文のコンパイルです。 ノード コード NODE_DEFN def mname(...) NODE_DEFS def obj.mname(...) NODE_MODULE module MName NODE_CLASS class CName NODE_SCLASS class ≪obj 例えばJavaやC++のような静的な言語では、この手の…

YARVソースコード勉強会(9)

さてさて、今日は構文木からバイトコード命令列への変換、最終回です。今回はクラスやメソッドのなどの「定義」を扱うRuby構文のコンパイルを見ていきます。ほとんどがYARVの対応する数命令に変換される形なので、コンパイルはわりと簡単そうです。ではどう…

YARVソースコード勉強会(1-9)

まず最初にお知らせです。初回から今回までの内容を、スライドにまとめました。 第1回〜第9回まとめ (PowerPoint) 第1回〜第9回まとめ (PDF) なんだか長くて自分でも読み返すのがしんどかったので。。。 手っ取り早くて10分で読めるYARVソース読みの手がかり…