yarv-dev:15
From: SASADA Koichi <ko1 atdot.net>
Date: Mon, 17 May 2004 04:14:27 +0900
Subject: [yarv-dev:15] initialize block local variables
ささだです。
NODE_ITER 以下の構文木を見ていたんですが、
m{
a = 1
b = 2
p 1
c = 3
}
をコンパイルすると、
node: NODE_ITER
nd_body:
node: NODE_BLOCK
node: NODE_DASGN_CURR
node: NODE_DASGN_CURR
node: NODE_DASGN_CURR
(0 なので、暗黙に NODE_NIL が追加される)、つまり a=b=c=nil
node: NODE_BLOCK
node: NODE_DASGN_CURR
node: NODE_LIT
node: NODE_BLOCK
node: NODE_DASGN_CURR
node: NODE_LIT
node: NODE_BLOCK
node: NODE_FCALL
node: NODE_ARRAY
node: NODE_LIT
node: NODE_BLOCK
node: NODE_DASGN_CURR
node: NODE_LIT
nd_iter:
node: NODE_FCALL
nd_var:
のようなツリーを得ました。
これを見てみると、そのブロック内でのブロックローカル変数は、
すべて一番最初に nil で初期化しているようです。
たとえば、これを利用して、ブロック中のブロックローカル変数一覧を
構文木から得るとき、最初の NODE_DASGN_CURR のリストを見るだけ、とい
う手は使えるでしょうか。
あと、nd_var の部分を見る必要があるとは思いますが。
--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml
-> 15 2004-05-17 04:14 [ko1 atdot.net ] initialize block local variables 16 2004-05-17 08:38 ┗[matz ruby-lang.org ] 17 2004-05-17 10:37 ┣[ko1 atdot.net ] 20 2004-05-17 13:23 ┃┗[matz ruby-lang.org ] 22 2004-05-17 15:58 ┃ ┗[ko1 atdot.net ] 23 2004-05-17 16:14 ┃ ┗[matz ruby-lang.org ] 24 2004-05-17 16:58 ┃ ┗[ko1 namikilab.tuat.a] 25 2004-05-17 17:27 ┃ ┗[matz ruby-lang.org ] 26 2004-05-17 18:09 ┃ ┗[ko1 atdot.net ] 27 2004-05-17 18:38 ┃ ┗[matz ruby-lang.org ] 21 2004-05-17 13:45 ┗[nobu.nokada softhome]