[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:000638] proto2c bug - variable.rb
ごとけんさま
すみません、またバグがありました。
(既にお気づきでしたら、ごめんなさい。)
ある関数 f が *.fp で io 型の引数 を持つと定義されている場合、
Ruby から f を呼ぶと、この引数オブジェクトは変更せずに、新た
なオブジェクトを生成し、戻り値にするか戻り値の配列に加える。
のはずだったのですが、文字列の場合、新しいオブジェクトを返し
つつ、元のオブジェクトも更新されていました。
この型の関数は、
math1_chrlib.fp : cladj, cradj, crvrs
misc1_chnlib.fp : chngc, chngi, chngr
misc1_datelib.fp : datec1, datec2, datec3
misc1_misclib.fp : cdblk
misc1_timelib.fp : timec1, timec2, timec3
だけです。なので、gokuraku, rakuraku, grph1, grph2 のデモを
動かす場合には一応問題ありませんでした。
こちらで修正して動作確認しましたが、反映するタイミングはどう
しましょう? ( variable.rb です )
一応差分を付けますが commit してよければ教えてください。
お忙しいときにすみませんが、よろしくお願いします。
黒井 啓子
--- variable.rb~ Sun Nov 19 14:15:00 2000
+++ variable.rb Sat Nov 25 12:32:31 2000
@xxxxxx@xxxxxx -133,6 +133,12 @xxxxxx@xxxxxx
%Q$#{c} = STR2CSTR(#{r});\n$
end
+ def basic_r2c_copy(r, c)
+ type = self.vartype.gsub(/\s+\*$/, "")
+ %Q$#{c} = ALLOCA_N(#{type}, strlen(STR2CSTR(#{r}))+1);\n$ +
+ %Q$strcpy(#{c}, STR2CSTR(#{r}));\n$
+ end
+
def basic_c2r(r, c)
%Q$#{r} = rb_str_new2(#{c});\n$
end
@xxxxxx@xxxxxx -211,7 +217,11 @xxxxxx@xxxxxx
end
def initialization
- basic_r2c(name, prefix+name)
+ if self.input? && self.output?
+ basic_r2c_copy(name, prefix+name)
+ else
+ basic_r2c(name, prefix+name)
+ end
end
def allocworkingarea # kuro: +1 need ?