ひとり勉強会

ひとり楽しく勉強会

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

まとめ

ぁ〜。時間不足でいろいろ調べきれずに残ってしまいました。ざんねん。 ||= と defined の関係はRuby的にどうなる方向? current_block の最下位ビット それではまた来週。

NODE_CALL 等

続いて、メソッド呼び出しです。3種類のノードがありますが、それぞれの内訳はこの通り。 case NODE_CALL: case NODE_FCALL: case NODE_VCALL:{ /* VCALL: variable or call */ /* call: obj.method(...) fcall: func(...) vcall: func */ vcallは、機能と…

NODE_OP_ASGN_OR 等

続いて、属性や添字式以外への、要するに普通の変数への &&= か ||= のノードです。繰り返しになりますが、普通の変数への += 等は = と + の組み合わせに展開して問題ないので、特別には扱われていません。というわけで、これが自己代入系最後のノードです…

NODE_OP_ASGN2

r.a op= vNODE_OP_ASGN2 は、属性への自己代入のノードです。 eval r # r dup # r r eval r.a # r o eval v # r o v send op # r w send a= # wr.a = r.a op v を、rを2度評価しないようにdupで複製しながら実行するコードですね。こちらも、op が && と ||…

NODE_OP_ASGN1

a[x] op= y のパターンは、NODE_OP_ASGN1 という名前になっています。どういうバイトコードにコンパイルされるのか、コメントがついていました。 /* * eval a # a * eval x # a x * dupn 2 # a x a x * send :[] # a x a[x] * eval y # a x a[x] y * send op…

[YARV] 自己代入の注意点

a += 100 自己代入とは、上のように、自分と他の値の演算結果を、また自分に代入し直すような式のことをいいます。これは基本的には、 a = a + 100 と書き直したのと同じ意味です。実際、ほんとうに同じ意味になる場合はRubyの構文解析器が、YARVに渡すより…

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

こんにちは。iseq_compile_each 勉強会です。今日は、自己代入式のコンパイルのあたりから再開です。