* 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
This commit is contained in:
nobu 2008-09-26 01:35:57 +00:00
parent 07a88b713d
commit 4300e2a993
2 changed files with 34 additions and 21 deletions

View File

@ -1,3 +1,8 @@
Fri Sep 26 10:35:50 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* variable.c (global_variable, struct trace_var): made function
members more strict.
Fri Sep 26 09:55:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> Fri Sep 26 09:55:06 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* include/ruby{io,sig}.h: moved to include/ruby/backward. * include/ruby{io,sig}.h: moved to include/ruby/backward.

View File

@ -284,9 +284,15 @@ rb_obj_classname(VALUE obj)
return rb_class2name(CLASS_OF(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 { struct trace_var {
int removed; int removed;
void (*func)(); void (*func)(VALUE arg, VALUE val);
VALUE data; VALUE data;
struct trace_var *next; struct trace_var *next;
}; };
@ -294,9 +300,9 @@ struct trace_var {
struct global_variable { struct global_variable {
int counter; int counter;
void *data; void *data;
VALUE (*getter)(); gvar_getter_t *getter;
void (*setter)(); gvar_setter_t *setter;
void (*marker)(); gvar_marker_t *marker;
int block_trace; int block_trace;
struct trace_var *trace; struct trace_var *trace;
}; };
@ -306,16 +312,16 @@ struct global_entry {
ID id; ID id;
}; };
static VALUE undef_getter(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 *var); static void undef_setter(VALUE val, ID id, void *data, struct global_variable *gvar);
static void undef_marker(void); static void undef_marker(VALUE *var);
static VALUE val_getter(ID id, VALUE val); 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 *var); static void val_setter(VALUE val, ID id, void *data, struct global_variable *gvar);
static void val_marker(VALUE data); static void val_marker(VALUE *var);
static VALUE var_getter(ID id, VALUE *var); static VALUE var_getter(ID id, void *data, struct global_variable *gvar);
static void var_setter(VALUE val, ID id, VALUE *var); static void var_setter(VALUE val, ID id, void *data, struct global_variable *gvar);
static void var_marker(VALUE *var); static void var_marker(VALUE *var);
struct global_entry* struct global_entry*
@ -347,7 +353,7 @@ rb_global_entry(ID id)
} }
static VALUE 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)); 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 static void
undef_marker(void) undef_marker(VALUE *var)
{ {
} }
static VALUE 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 static void
@ -382,22 +388,24 @@ val_setter(VALUE val, ID id, void *data, struct global_variable *var)
} }
static void static void
val_marker(VALUE data) val_marker(VALUE *var)
{ {
VALUE data = (VALUE)var;
if (data) rb_gc_mark_maybe(data); if (data) rb_gc_mark_maybe(data);
} }
static VALUE 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; if (!var) return Qnil;
return *var; return *var;
} }
static void 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 static void
@ -407,7 +415,7 @@ var_marker(VALUE *var)
} }
static void 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)); rb_name_error(id, "%s is a read-only variable", rb_id2name(id));
} }