悬赏沪元:100 浏览 315 次
1 先程見たところによるとpcall=Qtrue、 self=Qundefなのでこの二つは定数畳み込みで潰してしまう。
2 というのは、表を見てほしいのだが、prevポインタがないフレームがある。つまりリンクを辿れない。
3 struct FRAMEは(速度のために)マシンスタック上にベタ置きで確保されるのだが、BLOCKは生成元FRAMEよりも長生きする可能性があるので、その場合に備えてコピーしてある。
4 イテレータであるかそうでないかはメソッド単位で決まるはずなのに、こうしてstruct FRAMEとは別の構造体が用意されているのはなぜだろうか。
5 関数前半、ruby_frameをグチャグチャといじってるところと後半のruby_frame = frame.tmpはどう見ても対になっている。
6 特異クラス定義を使うほうはruby_cref=(C)であり、バラバラに特異メソッドを定義するほうでは ruby_cref=Cである。
7 ようするに、多重代入の仕様は仕様全体をきれいに設計しようなんてこれっぱかしも思わずに作られているのだ。
8 コードをブツ切りにして、このコードはこの仕様のためにある、ここのコードはこの仕様のためにある……というふうに逐一対応を取っていくしかない。
9 いくつかダンプ しまくってみたところ、そのメンバは以下のように使われているようだ。