[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 ?