diff options
author | 卜部昌平 <[email protected]> | 2019-08-27 11:16:52 +0900 |
---|---|---|
committer | 卜部昌平 <[email protected]> | 2019-08-27 15:52:26 +0900 |
commit | ae2dc3f217ba9f181471f39a7e5ce72a28b27c2a (patch) | |
tree | e506115b9dd5c2adb07946763506a5b46d36b5f0 /variable.c | |
parent | 78628618da98236fc1bf702079185b36ed394e2a (diff) |
rb_define_hooked_variable now free from ANYARGS
After 5e86b005c0f2ef30df2f9906c7e2f3abefe286a2, I now think ANYARGS is
dangerous and should be extinct. This commit uses rb_gvar_getter_t /
rb_gvar_setter_t for rb_define_hooked_variable /
rb_define_virtual_variable which revealed lots of function prototype
inconsistencies. Some of them were literally decades old, going back
to dda5dc00cff334cac373096d444a0fd59e716124.
Diffstat (limited to 'variable.c')
-rw-r--r-- | variable.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/variable.c b/variable.c index 3db3e3d5ef..bc79dd6cc3 100644 --- a/variable.c +++ b/variable.c @@ -309,7 +309,7 @@ struct trace_var { struct rb_global_variable { int counter; int block_trace; - void *data; + VALUE *data; rb_gvar_getter_t *getter; rb_gvar_setter_t *setter; rb_gvar_marker_t *marker; @@ -354,7 +354,7 @@ rb_global_entry(ID id) } VALUE -rb_gvar_undef_getter(ID id, void *data, struct rb_global_variable *var) +rb_gvar_undef_getter(ID id, VALUE *_) { rb_warning("global variable `%"PRIsVALUE"' not initialized", QUOTE_ID(id)); @@ -362,8 +362,9 @@ rb_gvar_undef_getter(ID id, void *data, struct rb_global_variable *var) } void -rb_gvar_undef_setter(VALUE val, ID id, void *d, struct rb_global_variable *var) +rb_gvar_undef_setter(VALUE val, ID id, VALUE *_) { + struct rb_global_variable *var = rb_global_entry(id)->var; var->getter = rb_gvar_val_getter; var->setter = rb_gvar_val_setter; var->marker = rb_gvar_val_marker; @@ -377,14 +378,15 @@ rb_gvar_undef_marker(VALUE *var) } VALUE -rb_gvar_val_getter(ID id, void *data, struct rb_global_variable *var) +rb_gvar_val_getter(ID id, VALUE *data) { return (VALUE)data; } void -rb_gvar_val_setter(VALUE val, ID id, void *data, struct rb_global_variable *var) +rb_gvar_val_setter(VALUE val, ID id, VALUE *_) { + struct rb_global_variable *var = rb_global_entry(id)->var; var->data = (void*)val; } @@ -396,17 +398,16 @@ rb_gvar_val_marker(VALUE *var) } VALUE -rb_gvar_var_getter(ID id, void *data, struct rb_global_variable *gvar) +rb_gvar_var_getter(ID id, VALUE *var) { - VALUE *var = data; if (!var) return Qnil; return *var; } void -rb_gvar_var_setter(VALUE val, ID id, void *data, struct rb_global_variable *g) +rb_gvar_var_setter(VALUE val, ID id, VALUE *data) { - *(VALUE *)data = val; + *data = val; } void @@ -416,7 +417,7 @@ rb_gvar_var_marker(VALUE *var) } void -rb_gvar_readonly_setter(VALUE v, ID id, void *d, struct rb_global_variable *g) +rb_gvar_readonly_setter(VALUE v, ID id, VALUE *_) { rb_name_error(id, "%"PRIsVALUE" is a read-only variable", QUOTE_ID(id)); } @@ -487,8 +488,8 @@ void rb_define_hooked_variable( const char *name, VALUE *var, - VALUE (*getter)(ANYARGS), - void (*setter)(ANYARGS)) + rb_gvar_getter_t *getter, + rb_gvar_setter_t *setter) { volatile VALUE tmp = var ? *var : Qnil; ID id = global_id(name); @@ -517,8 +518,8 @@ rb_define_readonly_variable(const char *name, const VALUE *var) void rb_define_virtual_variable( const char *name, - VALUE (*getter)(ANYARGS), - void (*setter)(ANYARGS)) + rb_gvar_getter_t *getter, + rb_gvar_setter_t *setter) { if (!getter) getter = rb_gvar_val_getter; if (!setter) setter = rb_gvar_readonly_setter; @@ -662,7 +663,7 @@ MJIT_FUNC_EXPORTED VALUE rb_gvar_get(struct rb_global_entry *entry) { struct rb_global_variable *var = entry->var; - return (*var->getter)(entry->id, var->data, var); + return (*var->getter)(entry->id, var->data); } struct trace_data { @@ -699,7 +700,7 @@ rb_gvar_set(struct rb_global_entry *entry, VALUE val) struct trace_data trace; struct rb_global_variable *var = entry->var; - (*var->setter)(val, entry->id, var->data, var); + (*var->setter)(val, entry->id, var->data); if (var->trace && !var->block_trace) { var->block_trace = 1; |