[#36672] [Bug #616] instance_eval and Module#to_s — Shyouhei Urabe <redmine@...>

Bug #616: instance_eval and Module#to_s

12 messages 2008/10/06

[#36750] [Bug #650] Marshal.load raises RegexpError — Shyouhei Urabe <redmine@...>

Bug #650: Marshal.load raises RegexpError

30 messages 2008/10/15
[#36769] Re: [Bug #650] Marshal.load raises RegexpError — Yukihiro Matsumoto <matz@...> 2008/10/17

まつもと ゆきひろです

[#36771] Re: [Bug #650] Marshal.load raises RegexpError — Urabe Shyouhei <shyouhei@...> 2008/10/17

卜部です。

[#36772] Re: [Bug #650] Marshal.load raises RegexpError — Yukihiro Matsumoto <matz@...> 2008/10/17

まつもと ゆきひろです

[#36773] Re: [Bug #650] Marshal.load raises RegexpError — Urabe Shyouhei <shyouhei@...> 2008/10/17

卜部です。

[#36784] Re: [Bug #650] Marshal.load raises RegexpError — Yukihiro Matsumoto <matz@...> 2008/10/18

まつもと ゆきひろです

[#36785] Re: [Bug #650] Marshal.load raises RegexpError — Urabe Shyouhei <shyouhei@...> 2008/10/18

卜部です。

[#36793] Re: [Bug #650] Marshal.load raises RegexpError — Yukihiro Matsumoto <matz@...> 2008/10/19

まつもと ゆきひろです

[#36794] Re: [Bug #650] Marshal.load raises RegexpError — Urabe Shyouhei <shyouhei@...> 2008/10/19

Yukihiro Matsumoto さんは書きました:

[#36823] Re: [Bug #650] Marshal.load raises RegexpError — Yukihiro Matsumoto <matz@...> 2008/10/21

まつもと ゆきひろです

[#36830] Re: [Bug #650] Marshal.load raises RegexpError — Urabe Shyouhei <shyouhei@...> 2008/10/21

もとの正規表現にバグがあるのは認めますが、それに巻き込まれてでかいPStore

[#36833] Re: [Bug #650] Marshal.load raises RegexpError — Yukihiro Matsumoto <matz@...> 2008/10/21

まつもと ゆきひろです

[#36764] Re: [ruby-cvs:27036] Ruby:r19818 (trunk): * transcode.c (str_transcode0): String#encode without argument now — Martin Duerst <duerst@...>

まつもとさん、こんばんは。

11 messages 2008/10/17
[#36767] Re: [ruby-cvs:27036] Ruby:r19818 (trunk): * transcode.c (str_transcode0): String#encode without argument now — Yukihiro Matsumoto <matz@...> 2008/10/17

まつもと ゆきひろです

[#36799] Re: [ruby-cvs:27036] Ruby:r19818 (trunk): * transcode.c (str_transcode0): String#encode without argument now — Martin Duerst <duerst@...> 2008/10/20

まつもとさん、こんにちは。

[#36774] ConverterNotFoundError while making Ruby in Windows(trunk) — Masaki Suketa <masaki.suketa@...>

助田です。

13 messages 2008/10/17
[#36797] Re: ConverterNotFoundError while making Ruby in Windows(trunk) — "U.Nakamura" <usa@...> 2008/10/20

こんにちは、なかむら(う)です。

[#36789] [Bug #660] 数字を3桁ずつコンマで区切るsprintf書式指定 — "rubikitch ." <redmine@...>

Bug #660: 数字を3桁ずつコンマで区切るsprintf書式指定

13 messages 2008/10/19

[#37007] [Bug:1.9] 1+1+1+...+1 dumps core — "Yusuke ENDOH" <mame@...>

遠藤です。

13 messages 2008/10/31

[ruby-dev:36703] Re: Segmentation fault in eval

From: Nobuyoshi Nakada <nobu@...>
Date: 2008-10-10 09:23:30 UTC
List: ruby-dev #36703
なかだです。

At Fri, 10 Oct 2008 06:59:39 +0900,
Kazuhiro NISHIYAMA wrote in [ruby-dev:36698]:
> http://d.hatena.ne.jp/mamamoto/20081007/1223349255
> のスクリプトを元にいじっていたらs="n=$*"で落ちました。

$*=0; $* が最小ですね。

argf回りを整理したときに、rb_define_virtual_variable()と間違えて
rb_define_hooked_variable()のsetterに0を渡すようにしたために、デ
フォルトのsetterが使われてしまっているというミスでした。

しかし、見直してみるとrb_define_hooked_variable()でreadonly変数
を作る方法はないようです。readonly_setter()などを公開するのが簡
単なのですが、どうしたものでしょうか。

さらにいうと、markerを独自に指定する方法もありません。


Index: io.c
===================================================================
--- io.c	(revision 19741)
+++ io.c	(working copy)
@@ -8445,9 +8445,9 @@ Init_IO(void)
 
     rb_define_hooked_variable("$.", &argf, argf_lineno_getter, argf_lineno_setter);
-    rb_define_hooked_variable("$FILENAME", &argf, argf_filename_getter, 0);
+    rb_define_hooked_variable("$FILENAME", &argf, argf_filename_getter, rb_gvar_readonly_setter);
     ARGF.filename = rb_str_new2("-");
 
     rb_define_hooked_variable("$-i", &argf, opt_i_get, opt_i_set);
-    rb_define_hooked_variable("$*", &argf, argf_argv_getter, 0);
+    rb_define_hooked_variable("$*", &argf, argf_argv_getter, rb_gvar_readonly_setter);
 
 #if defined (_WIN32) || defined(__CYGWIN__)
Index: variable.c
===================================================================
--- variable.c	(revision 19741)
+++ variable.c	(working copy)
@@ -287,9 +287,9 @@ rb_obj_classname(VALUE obj)
 }
 
-struct global_variable;
+#define global_variable rb_global_variable
 
-typedef VALUE gvar_getter_t(ID id, void *data, struct global_variable *gvar);
-typedef void  gvar_setter_t(VALUE val, ID id, void *data, struct global_variable *gvar);
-typedef void  gvar_marker_t(VALUE *var);
+#define gvar_getter_t rb_gvar_getter_t
+#define gvar_setter_t rb_gvar_setter_t
+#define gvar_marker_t rb_gvar_marker_t
 
 struct trace_var {
@@ -315,15 +315,17 @@ struct global_entry {
 };
 
-static VALUE undef_getter(ID id, void *data, struct global_variable *gvar);
-static void  undef_setter(VALUE val, ID id, void *data, struct global_variable *gvar);
-static void  undef_marker(VALUE *var);
-
-static VALUE val_getter(ID id, void *data, struct global_variable *gvar);
-static void  val_setter(VALUE val, ID id, void *data, struct global_variable *gvar);
-static void  val_marker(VALUE *var);
-
-static VALUE var_getter(ID id, void *data, struct global_variable *gvar);
-static void  var_setter(VALUE val, ID id, void *data, struct global_variable *gvar);
-static void  var_marker(VALUE *var);
+#define undef_getter	rb_gvar_undef_getter
+#define undef_setter	rb_gvar_undef_setter
+#define undef_marker	rb_gvar_undef_marker
+
+#define val_getter	rb_gvar_val_getter
+#define val_setter	rb_gvar_val_setter
+#define val_marker	rb_gvar_val_marker
+
+#define var_getter	rb_gvar_var_getter
+#define var_setter	rb_gvar_var_setter
+#define var_marker	rb_gvar_var_marker
+
+#define readonly_setter rb_gvar_readonly_setter
 
 struct global_entry*
@@ -355,5 +357,5 @@ rb_global_entry(ID id)
 }
 
-static VALUE
+VALUE
 undef_getter(ID id, void *data, struct global_variable *var)
 {
@@ -363,5 +365,5 @@ undef_getter(ID id, void *data, struct g
 }
 
-static void
+void
 undef_setter(VALUE val, ID id, void *data, struct global_variable *var)
 {
@@ -373,10 +375,10 @@ undef_setter(VALUE val, ID id, void *dat
 }
 
-static void
+void
 undef_marker(VALUE *var)
 {
 }
 
-static VALUE
+VALUE
 val_getter(ID id, void *data, struct global_variable *var)
 {
@@ -384,5 +386,5 @@ val_getter(ID id, void *data, struct glo
 }
 
-static void
+void
 val_setter(VALUE val, ID id, void *data, struct global_variable *var)
 {
@@ -390,5 +392,5 @@ val_setter(VALUE val, ID id, void *data,
 }
 
-static void
+void
 val_marker(VALUE *var)
 {
@@ -397,5 +399,5 @@ val_marker(VALUE *var)
 }
 
-static VALUE
+VALUE
 var_getter(ID id, void *data, struct global_variable *gvar)
 {
@@ -405,5 +407,5 @@ var_getter(ID id, void *data, struct glo
 }
 
-static void
+void
 var_setter(VALUE val, ID id, void *data, struct global_variable *gvar)
 {
@@ -411,5 +413,5 @@ var_setter(VALUE val, ID id, void *data,
 }
 
-static void
+void
 var_marker(VALUE *var)
 {
@@ -417,5 +419,5 @@ var_marker(VALUE *var)
 }
 
-static void
+void
 readonly_setter(VALUE val, ID id, void *data, struct global_variable *gvar)
 {
Index: include/ruby/ruby.h
===================================================================
--- include/ruby/ruby.h	(revision 19741)
+++ include/ruby/ruby.h	(working copy)
@@ -847,4 +847,24 @@ void rb_include_module(VALUE,VALUE);
 void rb_extend_object(VALUE,VALUE);
 
+struct rb_global_variable;
+
+typedef VALUE rb_gvar_getter_t(ID id, void *data, struct rb_global_variable *gvar);
+typedef void  rb_gvar_setter_t(VALUE val, ID id, void *data, struct rb_global_variable *gvar);
+typedef void  rb_gvar_marker_t(VALUE *var);
+
+VALUE rb_gvar_undef_getter(ID id, void *data, struct rb_global_variable *gvar);
+void  rb_gvar_undef_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar);
+void  rb_gvar_undef_marker(VALUE *var);
+
+VALUE rb_gvar_val_getter(ID id, void *data, struct rb_global_variable *gvar);
+void  rb_gvar_val_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar);
+void  rb_gvar_val_marker(VALUE *var);
+
+VALUE rb_gvar_var_getter(ID id, void *data, struct rb_global_variable *gvar);
+void  rb_gvar_var_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar);
+void  rb_gvar_var_marker(VALUE *var);
+
+void  rb_gvar_readonly_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar);
+
 void rb_define_variable(const char*,VALUE*);
 void rb_define_virtual_variable(const char*,VALUE(*)(ANYARGS),void(*)(ANYARGS));


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread