From: Nobuyoshi Nakada Date: 2006-09-18T13:45:27+09:00 Subject: [ruby-dev:29588] Re: [ruby-cvs:18196] ruby, ruby: * dir.c (dir_s_glob): remove unused variable. なかだです。 At Mon, 18 Sep 2006 10:59:04 +0900, matz wrote in [ruby-cvs:18196]: > * dir.c (dir_s_glob): remove unused variable. > > * re.c (rb_reg_regcomp): ditto. この二つはGCを防ぐために必要ではないかと思うのですが。ptrとlen だけを他の関数に渡していて、その後でVALUE自体は参照されていない わけで。 --- dir.c 2 Sep 2006 14:42:04 -0000 1.156 +++ dir.c 18 Sep 2006 01:58:59 -0000 1.157 @@ -1630,5 +1630,4 @@ dir_s_glob(int argc, VALUE *argv, VALUE } else { - volatile VALUE v = ary; ary = dir_globs(RARRAY_LEN(ary), RARRAY_PTR(ary), flags); } --- re.c 31 Aug 2006 10:47:43 -0000 1.154 +++ re.c 18 Sep 2006 01:59:00 -0000 1.155 @@ -1509,5 +1509,4 @@ VALUE rb_reg_regcomp(VALUE str) { - volatile VALUE save_str = str; if (reg_cache && RREGEXP(reg_cache)->len == RSTRING_LEN(str) && case_cache == ruby_ignorecase あるいは、意図を明瞭にするためにマクロを用意するとか。 #define PREVENTING_GC(value, code) \ BEGIN_PREVENT_GC(value); \ code; \ END_PREVENT_GC() #define BEGIN_PREVENT_GC(value) do { \ volatile VALUE prevented_from_gc = (value); #define END_PREVENT_GC() \ (void)&prevented_from_gc; \ } while (0) -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦