2006-12-01から1ヶ月間の記事一覧
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…
a += 100 自己代入とは、上のように、自分と他の値の演算結果を、また自分に代入し直すような式のことをいいます。これは基本的には、 a = a + 100 と書き直したのと同じ意味です。実際、ほんとうに同じ意味になる場合はRubyの構文解析器が、YARVに渡すより…
こんにちは。iseq_compile_each 勉強会です。今日は、自己代入式のコンパイルのあたりから再開です。
日曜は雑談を書くぞっ!って言っても、特に書くことないですね。街を歩いてると、サティのジムノペティの1番をモチーフにした洋楽が聴こえてきました。こういう、クラシックのメロディを生かした歌って好きなんです。家に帰ってから調べたら YouTube でした。
今回こそは10KBにはおさめようと思ったんですけど...ぅー。今日の内容は 代入いろいろ 多重代入いろいろ でした。次回は後ろに自己代入がひかえています。なんかコードが長そげです。 そこが終われば山は抜けられるかな、って雰囲気なので、あと2回でiseq_c…
ここまでのいろいろな代入より、順番的にはこっちの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 グローバ…
その前に、3つほど別の構文が間にはさまってました。and (&&), or (||), not (!) です。条件分岐のなかに出てくる場合は前にやりましたが、ここでは普通に式の途中に出てくるケースです。簡単なのでサックリと終わらせちゃいます。コードは省略です。 式1 a…
第6回です。今日のテーマは、代入のコンパイルです。