[前][次][番号順一覧][スレッド一覧]

ruby-changes:8253

From: nobu <ko1@a...>
Date: Tue, 14 Oct 2008 20:46:42 +0900 (JST)
Subject: [ruby-changes:8253] Ruby:r19781 (trunk): * io.c (Init_IO): $FILENAME and $* must be read-only.

nobu	2008-10-14 20:45:32 +0900 (Tue, 14 Oct 2008)

  New Revision: 19781

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19781

  Log:
    * io.c (Init_IO): $FILENAME and $* must be read-only.  [ruby-dev:36698]
    
    * variable.c (*_getter, *_setter, *_marker): made public.
    
    * include/ruby/ruby.h (rb_gvar_*_{getter,setter,marker}): declared.

  Modified files:
    trunk/ChangeLog
    trunk/include/ruby/ruby.h
    trunk/io.c
    trunk/variable.c

Index: include/ruby/ruby.h
===================================================================
--- include/ruby/ruby.h	(revision 19780)
+++ include/ruby/ruby.h	(revision 19781)
@@ -846,6 +846,26 @@
 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));
 void rb_define_hooked_variable(const char*,VALUE*,VALUE(*)(ANYARGS),void(*)(ANYARGS));
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 19780)
+++ ChangeLog	(revision 19781)
@@ -1,3 +1,11 @@
+Tue Oct 14 20:45:29 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* io.c (Init_IO): $FILENAME and $* must be read-only.  [ruby-dev:36698]
+
+	* variable.c (*_getter, *_setter, *_marker): made public.
+
+	* include/ruby/ruby.h (rb_gvar_*_{getter,setter,marker}): declared.
+
 Tue Oct 14 20:32:09 2008  Tanaka Akira  <akr@f...>
 
 	* enc/trans/single_byte.trans (transcode_tblgen_singlebyte): renamed
Index: variable.c
===================================================================
--- variable.c	(revision 19780)
+++ variable.c	(revision 19781)
@@ -286,11 +286,11 @@
     return rb_class2name(CLASS_OF(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 {
     int removed;
@@ -314,18 +314,20 @@
     ID id;
 };
 
-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);
+#define undef_getter	rb_gvar_undef_getter
+#define undef_setter	rb_gvar_undef_setter
+#define undef_marker	rb_gvar_undef_marker
 
-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);
+#define val_getter	rb_gvar_val_getter
+#define val_setter	rb_gvar_val_setter
+#define val_marker	rb_gvar_val_marker
 
-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 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*
 rb_global_entry(ID id)
 {
@@ -354,7 +356,7 @@
     return entry;
 }
 
-static VALUE
+VALUE
 undef_getter(ID id, void *data, struct global_variable *var)
 {
     rb_warning("global variable `%s' not initialized", rb_id2name(id));
@@ -362,7 +364,7 @@
     return Qnil;
 }
 
-static void
+void
 undef_setter(VALUE val, ID id, void *data, struct global_variable *var)
 {
     var->getter = val_getter;
@@ -372,31 +374,31 @@
     var->data = (void*)val;
 }
 
-static void
+void
 undef_marker(VALUE *var)
 {
 }
 
-static VALUE
+VALUE
 val_getter(ID id, void *data, struct global_variable *var)
 {
     return (VALUE)data;
 }
 
-static void
+void
 val_setter(VALUE val, ID id, void *data, struct global_variable *var)
 {
     var->data = (void*)val;
 }
 
-static void
+void
 val_marker(VALUE *var)
 {
     VALUE data = (VALUE)var;
     if (data) rb_gc_mark_maybe(data);
 }
 
-static VALUE
+VALUE
 var_getter(ID id, void *data, struct global_variable *gvar)
 {
     VALUE *var = data;
@@ -404,19 +406,19 @@
     return *var;
 }
 
-static void
+void
 var_setter(VALUE val, ID id, void *data, struct global_variable *gvar)
 {
     *(VALUE *)data = val;
 }
 
-static void
+void
 var_marker(VALUE *var)
 {
     if (var) rb_gc_mark_maybe(*var);
 }
 
-static void
+void
 readonly_setter(VALUE val, ID id, void *data, struct global_variable *gvar)
 {
     rb_name_error(id, "%s is a read-only variable", rb_id2name(id));
Index: io.c
===================================================================
--- io.c	(revision 19780)
+++ io.c	(revision 19781)
@@ -8464,11 +8464,11 @@
     rb_define_global_const("ARGF", argf);
 
     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__)
     atexit(pipe_atexit);

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]