[Gauche-devel-jp] <cclass> の setter/getter に cise は書けない?

Back to archive index

Shiro Kawai shiro****@lava*****
2010年 12月 31日 (金) 19:39:29 JST


define-cclassは必要に迫られてアドホックに作ったものなんで、
まだ仕様をちゃんと考えてなかったですね。
頂いたパッチで当面は良さそうですが、何をどうするつもりだったのか
覚えてないので、思いだしがてら考えてみます。

--shiro


From: Ryo Akagi <another_face_another_smile****@yahoo*****>
Subject: [Gauche-devel-jp] <cclass> の setter/getter に cise は書けない?
Date: Sat, 25 Dec 2010 18:47:21 +0900

> 赤木といいます
> 
> .stub のファイルの define-cclass で作ったクラスの getter/setter に
> cise のコード辺を入れても無視されてしまい、:type と slot名 から作ったも
> のが入ります。
> 
> 具体的には、添付の hogelib.stub にありますが、要点だけ説明すると
> ------------------------------------------------------------------------------
> "typedef struct ScmHoge_Rec {
>   SCM_HEADER;
>   int f;
> } ScmHoge;"
> (define-cclass <hoge> :private ScmHoge* "Scm_HogeClass"
>   () ;cpl
>   ([f :type <int>
>       :getter (return (Scm_MakeInteger (+ 1000 (-> (SCM_HOGE OBJARG) f))))]
>    ))
> ------------------------------------------------------------------------------
> などと書くと、+1000 をしないC言語のgetterの関数が出来ます。
> 
> gauche.cgen.stub の Classとある部分のコメント(1240行あたり)の構文の定義
> を見る限りだと slot の getter/setter は allocator,printer と同様に
> <proc-spec> なので、これも通るべきなのかと思いました。
> 
> でも、このコメントの塊の一番下では、<c-code> (c <c-name>) の書き方につ
> いて、allocator と printer にしか言及されていません。
> 
> また
>   <proc-spec> := <c-code> | (c <c-name>) | #f | #t
> となっていますが allocator, printer に #t を入れると
>   *** ERROR: Invalid CISE form:  #t
> と出てしまいます。
> 
> これらを考えると、[allocator, printer] と slot は、別ものにするのか、同
> じものにするのか、またどうしたいのか、どうあるべきかという事がよく分か
> らなくなってきました。
> 
> 上の例で cise でも動く様にする様に自分でもやってみましたが(添付の
> stub.scm.diff)、なんとなく<cclass> の getter/setter の slot は、
> emit-getter/setter 関数を実行する or しないという意味と、C言語の
> getter/setter 関数のソースとしての意味両方があって、ソースとしての意味
> は slot名, :type, :c-spec, :c-name なども持っているので、複雑になってい
> るのかと思いました。
> 私が修正したものは、意図や、今後 :c-spec, :c-name の意味が広がったりす
> るのかなども分からないので、意味から考えたというよりも、その場の状況に
> 合わせただけなので、短かいですが分かりにくいと思います。
> 
> あともうひとつよく分からなかったのが、define-cclass で setter は #f に
> すると出なくなるのですが、getter は出ます。これはなぜでしょうか?
> 多分 emit-getter-n-setter の部分だと思うのですが。
> 
> 添付ファイルの使い方の説明を書いておきます
>   % gauche-package generate hoge
>   hoge.scm hogelib.stub test.scm を添付のものと置き換える
> 後は、普通にやるなら autoconf; ./configure; make で特別な事はないと思い
> ます。
> 
> 環境は以下です
>   % gosh -V
>   Gauche scheme shell, version 0.9.1 [utf-8,pthreads], i686-pc-linux-gnu
> 
> また、私としては状況は分かって、ciseでなくてC言語で書けばいいだけなので
> 特に困っていません。
> 
> よろしくお願いします




Gauche-devel-jp メーリングリストの案内
Back to archive index