diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-09-26 01:35:57 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-09-26 01:35:57 +0000 |
commit | 4300e2a9931204ed8c282f313bd963899febe87e (patch) | |
tree | 49d2b83a6894b747a40d312bda68cca6ff25c08a /variable.c | |
parent | 07a88b713df19bd7e36bbf1576d6231cdfb955a1 (diff) | |
download | ruby-4300e2a9931204ed8c282f313bd963899febe87e.tar.gz |
* variable.c (global_variable, struct trace_var): made function
members more strict.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19564 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'variable.c')
-rw-r--r-- | variable.c | 50 |
1 files changed, 29 insertions, 21 deletions
diff --git a/variable.c b/variable.c index 1945bbab2b..1417de5703 100644 --- a/variable.c +++ b/variable.c @@ -284,9 +284,15 @@ rb_obj_classname(VALUE obj) 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 trace_var { 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 @@ struct global_entry { 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 @@ rb_global_entry(ID id) } 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 @@ undef_setter(VALUE val, ID id, void *data, struct global_variable *var) } 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 @@ val_setter(VALUE val, ID id, void *data, struct global_variable *var) } 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 @@ var_marker(VALUE *var) } 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)); } |