ひとり勉強会

ひとり楽しく勉強会

2006-12-01から1ヶ月間の記事一覧

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 勉強会です。今日は、自己代入式のコンパイルのあたりから再開です。

サティ

日曜は雑談を書くぞっ!って言っても、特に書くことないですね。街を歩いてると、サティのジムノペティの1番をモチーフにした洋楽が聴こえてきました。こういう、クラシックのメロディを生かした歌って好きなんです。家に帰ってから調べたら YouTube でした。

まとめ

今回こそは10KBにはおさめようと思ったんですけど...ぅー。今日の内容は 代入いろいろ 多重代入いろいろ でした。次回は後ろに自己代入がひかえています。なんかコードが長そげです。 そこが終われば山は抜けられるかな、って雰囲気なので、あと2回でiseq_c…

NODE_MASGN / 多重代入

ここまでのいろいろな代入より、順番的にはこっちのcaseが先に出てきてました。説明の都合で逆順に読んでいます。 a, b, c = 1, 2, 3 みたいな形の代入です。コンパイル処理はほぼ全て、補助関数に丸投げされています。 case NODE_MASGN:{ compile_massign(i…

代入いろいろ

さて代入の話に入りますね。Rubyには、代入(あるいは代入っぽく見えるもの)がたくさんあります。 コード 説明 NODE a = 100 メソッドローカル変数への代入 NODE_LASGN a = 100 ブロックローカル変数への代入 NODE_DASGN,NODE_DASGN_CURR $a = 100 グローバ…

NODE_AND ほか

その前に、3つほど別の構文が間にはさまってました。and (&&), or (||), not (!) です。条件分岐のなかに出てくる場合は前にやりましたが、ここでは普通に式の途中に出てくるケースです。簡単なのでサックリと終わらせちゃいます。コードは省略です。 式1 a…

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

第6回です。今日のテーマは、代入のコンパイルです。