[前][次][番号順一覧][スレッド一覧][生データ]

yarv-dev:592

From: SASADA Koichi <ko1 atdot.net>
Date: Fri, 19 Aug 2005 08:34:04 +0900
Subject: [yarv-dev:592] Re: parser restructuring

 ささだです。

Nobuyoshi Nakada wrote:
> dnamesはブロックを抜けても取り除かれないので、そのままでは無理
> だと思います。生きている名前とそうでないものを区別するようにし
> て、ブロックを抜けるときにチェックするようにすれば可能かも知れ
> ません。

 dyna_push で新しい dnames を push (前の dnames へアクセスできるようス
タックにしておく)、dyna_pop で表を pop すればいいと思っていました。どう
でしょうか。

 さっき IRC で out-of-scope variable を解析するために必要、ということで
したが、すみません、これどうやって発生するんでしょうか。考えてみたんです
が、わかりませんでした。


>>(出来れば、dnames もどっかに持っておいてもらえると、YARV でコンパイルす
>>るときに大変楽なんだけど)
> 
> 
> どっかというのは?
> 
 NODE_SCOPE は nd_tbl に ID 表を持ってますが、そいつみたいな。

 現在は、「ブロックの先頭の massign/assign を解析してブロック引数を取り
出し」、それに続く「NODE_DASGN_CURR によるブロックローカル変数の初期化」
でブロックローカル変数を取り出すという、かなり無意味な処理を入れていま
す。ただし、これだと、ブロック引数中に任意の式が入るので、解析が面倒です。

	iter{|a[expr]| ...}

 だと、expr に入っているブロックローカル変数は取り出すことが出来ませ
ん。がんばれば出来るけど、ちょっと面倒です。

 dnames があれば、この苦労が一切必要なくなる、という意味です。ただ、こ
れは現在の Ruby インタプリタには意味がないので、今回の話とはかなり無関係
です。

-- 
SASADA Koichi at atdot dot net

--
ML: yarv-dev quickml.atdot.net
使い方: http://www.atdot.net/~ko1/quickml

[前][次][番号順一覧][スレッド一覧][生データ]

       590 2005-08-19 04:51 [ko1 atdot.net       ] parser restructuring                    
       591 2005-08-19 06:57 ┗[nobu.nokada softhome]                                       
->     592 2005-08-19 08:34  ┗[ko1 atdot.net       ]                                     
       593 2005-08-19 09:08   ┗[ko1 atdot.net       ]