ruby-changes:8039
From: nobu <ko1@a...>
Date: Fri, 26 Sep 2008 10:36:20 +0900 (JST)
Subject: [ruby-changes:8039] Ruby:r19564 (trunk): * variable.c (global_variable, struct trace_var): made function
nobu 2008-09-26 10:35:57 +0900 (Fri, 26 Sep 2008) New Revision: 19564 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19564 Log: * variable.c (global_variable, struct trace_var): made function members more strict. Modified files: trunk/ChangeLog trunk/variable.c Index: ChangeLog =================================================================== --- ChangeLog (revision 19563) +++ ChangeLog (revision 19564) @@ -1,3 +1,8 @@ +Fri Sep 26 10:35:50 2008 Nobuyoshi Nakada <nobu@r...> + + * variable.c (global_variable, struct trace_var): made function + members more strict. + Fri Sep 26 09:55:06 2008 Nobuyoshi Nakada <nobu@r...> * include/ruby{io,sig}.h: moved to include/ruby/backward. Index: variable.c =================================================================== --- variable.c (revision 19563) +++ variable.c (revision 19564) @@ -284,9 +284,15 @@ return rb_class2name(CLASS_OF(obj)); } +struct 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); + struct trace_var { int removed; - void (*func)(); + void (*func)(VALUE arg, VALUE val); VALUE data; struct trace_var *next; }; @@ -294,9 +300,9 @@ struct global_variable { int counter; void *data; - VALUE (*getter)(); - void (*setter)(); - void (*marker)(); + gvar_getter_t *getter; + gvar_setter_t *setter; + gvar_marker_t *marker; int block_trace; struct trace_var *trace; }; @@ -306,16 +312,16 @@ ID id; }; -static VALUE undef_getter(ID id); -static void undef_setter(VALUE val, ID id, void *data, struct global_variable *var); -static void undef_marker(void); +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, VALUE val); -static void val_setter(VALUE val, ID id, void *data, struct global_variable *var); -static void val_marker(VALUE data); +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, VALUE *var); -static void var_setter(VALUE val, ID id, 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); struct global_entry* @@ -347,7 +353,7 @@ } static VALUE -undef_getter(ID id) +undef_getter(ID id, void *data, struct global_variable *var) { rb_warning("global variable `%s' not initialized", rb_id2name(id)); @@ -365,14 +371,14 @@ } static void -undef_marker(void) +undef_marker(VALUE *var) { } static VALUE -val_getter(ID id, VALUE val) +val_getter(ID id, void *data, struct global_variable *var) { - return val; + return (VALUE)data; } static void @@ -382,22 +388,24 @@ } static void -val_marker(VALUE data) +val_marker(VALUE *var) { + VALUE data = (VALUE)var; if (data) rb_gc_mark_maybe(data); } static VALUE -var_getter(ID id, VALUE *var) +var_getter(ID id, void *data, struct global_variable *gvar) { + VALUE *var = data; if (!var) return Qnil; return *var; } static void -var_setter(VALUE val, ID id, VALUE *var) +var_setter(VALUE val, ID id, void *data, struct global_variable *gvar) { - *var = val; + *(VALUE *)data = val; } static void @@ -407,7 +415,7 @@ } static void -readonly_setter(VALUE val, ID id, void *var) +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)); } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/