mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
rb_define_hooked_variable now free from ANYARGS
After5e86b005c0
, 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 todda5dc00cf
.
This commit is contained in:
parent
78628618da
commit
ae2dc3f217
10 changed files with 94 additions and 60 deletions
4
eval.c
4
eval.c
|
@ -1816,7 +1816,7 @@ get_errinfo(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
errinfo_getter(ID id)
|
errinfo_getter(ID id, VALUE *_)
|
||||||
{
|
{
|
||||||
return get_errinfo();
|
return get_errinfo();
|
||||||
}
|
}
|
||||||
|
@ -1851,7 +1851,7 @@ rb_set_errinfo(VALUE err)
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
errat_getter(ID id)
|
errat_getter(ID id, VALUE *_)
|
||||||
{
|
{
|
||||||
VALUE err = get_errinfo();
|
VALUE err = get_errinfo();
|
||||||
if (!NIL_P(err)) {
|
if (!NIL_P(err)) {
|
||||||
|
|
|
@ -801,7 +801,7 @@ VALUE rb_str_replace(VALUE, VALUE);
|
||||||
VALUE rb_str_inspect(VALUE);
|
VALUE rb_str_inspect(VALUE);
|
||||||
VALUE rb_str_dump(VALUE);
|
VALUE rb_str_dump(VALUE);
|
||||||
VALUE rb_str_split(VALUE, const char*);
|
VALUE rb_str_split(VALUE, const char*);
|
||||||
void rb_str_setter(VALUE, ID, VALUE*);
|
rb_gvar_setter_t rb_str_setter;
|
||||||
VALUE rb_str_intern(VALUE);
|
VALUE rb_str_intern(VALUE);
|
||||||
VALUE rb_sym_to_s(VALUE);
|
VALUE rb_sym_to_s(VALUE);
|
||||||
long rb_str_strlen(VALUE);
|
long rb_str_strlen(VALUE);
|
||||||
|
|
|
@ -1776,29 +1776,27 @@ void rb_include_module(VALUE,VALUE);
|
||||||
void rb_extend_object(VALUE,VALUE);
|
void rb_extend_object(VALUE,VALUE);
|
||||||
void rb_prepend_module(VALUE,VALUE);
|
void rb_prepend_module(VALUE,VALUE);
|
||||||
|
|
||||||
struct rb_global_variable;
|
typedef VALUE rb_gvar_getter_t(ID id, VALUE *data);
|
||||||
|
typedef void rb_gvar_setter_t(VALUE val, ID id, VALUE *data);
|
||||||
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);
|
typedef void rb_gvar_marker_t(VALUE *var);
|
||||||
|
|
||||||
VALUE rb_gvar_undef_getter(ID id, void *data, struct rb_global_variable *gvar);
|
rb_gvar_getter_t rb_gvar_undef_getter;
|
||||||
void rb_gvar_undef_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar);
|
rb_gvar_setter_t rb_gvar_undef_setter;
|
||||||
void rb_gvar_undef_marker(VALUE *var);
|
rb_gvar_marker_t rb_gvar_undef_marker;
|
||||||
|
|
||||||
VALUE rb_gvar_val_getter(ID id, void *data, struct rb_global_variable *gvar);
|
rb_gvar_getter_t rb_gvar_val_getter;
|
||||||
void rb_gvar_val_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar);
|
rb_gvar_setter_t rb_gvar_val_setter;
|
||||||
void rb_gvar_val_marker(VALUE *var);
|
rb_gvar_marker_t rb_gvar_val_marker;
|
||||||
|
|
||||||
VALUE rb_gvar_var_getter(ID id, void *data, struct rb_global_variable *gvar);
|
rb_gvar_getter_t rb_gvar_var_getter;
|
||||||
void rb_gvar_var_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar);
|
rb_gvar_setter_t rb_gvar_var_setter;
|
||||||
void rb_gvar_var_marker(VALUE *var);
|
rb_gvar_marker_t rb_gvar_var_marker;
|
||||||
|
|
||||||
NORETURN(void rb_gvar_readonly_setter(VALUE val, ID id, void *data, struct rb_global_variable *gvar));
|
NORETURN(rb_gvar_setter_t rb_gvar_readonly_setter);
|
||||||
|
|
||||||
void rb_define_variable(const char*,VALUE*);
|
void rb_define_variable(const char*,VALUE*);
|
||||||
void rb_define_virtual_variable(const char*,VALUE(*)(ANYARGS),void(*)(ANYARGS));
|
void rb_define_virtual_variable(const char*,rb_gvar_getter_t*,rb_gvar_setter_t*);
|
||||||
void rb_define_hooked_variable(const char*,VALUE*,VALUE(*)(ANYARGS),void(*)(ANYARGS));
|
void rb_define_hooked_variable(const char*,VALUE*,rb_gvar_getter_t*,rb_gvar_setter_t*);
|
||||||
void rb_define_readonly_variable(const char*,const VALUE*);
|
void rb_define_readonly_variable(const char*,const VALUE*);
|
||||||
void rb_define_const(VALUE,const char*,VALUE);
|
void rb_define_const(VALUE,const char*,VALUE);
|
||||||
void rb_define_global_const(const char*,VALUE);
|
void rb_define_global_const(const char*,VALUE);
|
||||||
|
|
14
io.c
14
io.c
|
@ -12986,6 +12986,18 @@ rb_readwrite_syserr_fail(enum rb_io_wait_readwrite writable, int n, const char *
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
get_$LAST_READ_LINE(ID _x, VALUE *_y)
|
||||||
|
{
|
||||||
|
return rb_lastline_get();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
set_$LAST_READ_LINE(VALUE val, ID _x, VALUE *_y)
|
||||||
|
{
|
||||||
|
rb_lastline_set(val);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Document-class: IOError
|
* Document-class: IOError
|
||||||
*
|
*
|
||||||
|
@ -13259,7 +13271,7 @@ Init_IO(void)
|
||||||
rb_define_hooked_variable("$-0", &rb_rs, 0, rb_str_setter);
|
rb_define_hooked_variable("$-0", &rb_rs, 0, rb_str_setter);
|
||||||
rb_define_hooked_variable("$\\", &rb_output_rs, 0, rb_str_setter);
|
rb_define_hooked_variable("$\\", &rb_output_rs, 0, rb_str_setter);
|
||||||
|
|
||||||
rb_define_virtual_variable("$_", rb_lastline_get, rb_lastline_set);
|
rb_define_virtual_variable("$_", get_$LAST_READ_LINE, set_$LAST_READ_LINE);
|
||||||
|
|
||||||
rb_define_method(rb_cIO, "initialize_copy", rb_io_init_copy, 1);
|
rb_define_method(rb_cIO, "initialize_copy", rb_io_init_copy, 1);
|
||||||
rb_define_method(rb_cIO, "reopen", rb_io_reopen, -1);
|
rb_define_method(rb_cIO, "reopen", rb_io_reopen, -1);
|
||||||
|
|
13
load.c
13
load.c
|
@ -143,8 +143,9 @@ rb_get_expanded_load_path(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
load_path_getter(ID id, rb_vm_t *vm)
|
load_path_getter(ID id, VALUE * p)
|
||||||
{
|
{
|
||||||
|
rb_vm_t *vm = (void *)p;
|
||||||
return vm->load_path;
|
return vm->load_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,6 +155,12 @@ get_loaded_features(void)
|
||||||
return GET_VM()->loaded_features;
|
return GET_VM()->loaded_features;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
get_$LOADED_FEATURES(ID _x, VALUE *_y)
|
||||||
|
{
|
||||||
|
return get_loaded_features();
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
reset_loaded_features_snapshot(void)
|
reset_loaded_features_snapshot(void)
|
||||||
{
|
{
|
||||||
|
@ -1258,8 +1265,8 @@ Init_load(void)
|
||||||
vm->load_path_check_cache = 0;
|
vm->load_path_check_cache = 0;
|
||||||
rb_define_singleton_method(vm->load_path, "resolve_feature_path", rb_resolve_feature_path, 1);
|
rb_define_singleton_method(vm->load_path, "resolve_feature_path", rb_resolve_feature_path, 1);
|
||||||
|
|
||||||
rb_define_virtual_variable("$\"", get_loaded_features, 0);
|
rb_define_virtual_variable("$\"", get_$LOADED_FEATURES, 0);
|
||||||
rb_define_virtual_variable("$LOADED_FEATURES", get_loaded_features, 0);
|
rb_define_virtual_variable("$LOADED_FEATURES", get_$LOADED_FEATURES, 0);
|
||||||
vm->loaded_features = rb_ary_new();
|
vm->loaded_features = rb_ary_new();
|
||||||
vm->loaded_features_snapshot = rb_ary_tmp_new(0);
|
vm->loaded_features_snapshot = rb_ary_tmp_new(0);
|
||||||
vm->loaded_features_index = st_init_numtable();
|
vm->loaded_features_index = st_init_numtable();
|
||||||
|
|
16
process.c
16
process.c
|
@ -8038,6 +8038,18 @@ rb_clock_getres(int argc, VALUE *argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
get_$CHILD_STATUS(ID _x, VALUE *_y)
|
||||||
|
{
|
||||||
|
return rb_last_status_get();
|
||||||
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
get_$PROCESS_ID(ID _x, VALUE *_y)
|
||||||
|
{
|
||||||
|
return get_pid();
|
||||||
|
}
|
||||||
|
|
||||||
VALUE rb_mProcess;
|
VALUE rb_mProcess;
|
||||||
static VALUE rb_mProcUID;
|
static VALUE rb_mProcUID;
|
||||||
static VALUE rb_mProcGID;
|
static VALUE rb_mProcGID;
|
||||||
|
@ -8054,8 +8066,8 @@ InitVM_process(void)
|
||||||
{
|
{
|
||||||
#undef rb_intern
|
#undef rb_intern
|
||||||
#define rb_intern(str) rb_intern_const(str)
|
#define rb_intern(str) rb_intern_const(str)
|
||||||
rb_define_virtual_variable("$?", rb_last_status_get, 0);
|
rb_define_virtual_variable("$?", get_$CHILD_STATUS, 0);
|
||||||
rb_define_virtual_variable("$$", get_pid, 0);
|
rb_define_virtual_variable("$$", get_$PROCESS_ID, 0);
|
||||||
rb_define_global_function("exec", rb_f_exec, -1);
|
rb_define_global_function("exec", rb_f_exec, -1);
|
||||||
rb_define_global_function("fork", rb_f_fork, 0);
|
rb_define_global_function("fork", rb_f_fork, 0);
|
||||||
rb_define_global_function("exit!", rb_f_exit_bang, -1);
|
rb_define_global_function("exit!", rb_f_exit_bang, -1);
|
||||||
|
|
26
re.c
26
re.c
|
@ -1824,25 +1824,25 @@ rb_reg_match_last(VALUE match)
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
last_match_getter(void)
|
last_match_getter(ID _x, VALUE *_y)
|
||||||
{
|
{
|
||||||
return rb_reg_last_match(rb_backref_get());
|
return rb_reg_last_match(rb_backref_get());
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
prematch_getter(void)
|
prematch_getter(ID _x, VALUE *_y)
|
||||||
{
|
{
|
||||||
return rb_reg_match_pre(rb_backref_get());
|
return rb_reg_match_pre(rb_backref_get());
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
postmatch_getter(void)
|
postmatch_getter(ID _x, VALUE *_y)
|
||||||
{
|
{
|
||||||
return rb_reg_match_post(rb_backref_get());
|
return rb_reg_match_post(rb_backref_get());
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
last_paren_match_getter(void)
|
last_paren_match_getter(ID _x, VALUE *_y)
|
||||||
{
|
{
|
||||||
return rb_reg_match_last(rb_backref_get());
|
return rb_reg_match_last(rb_backref_get());
|
||||||
}
|
}
|
||||||
|
@ -3919,27 +3919,27 @@ rb_reg_regsub(VALUE str, VALUE src, struct re_registers *regs, VALUE regexp)
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
kcode_getter(void)
|
kcode_getter(ID _x, VALUE *_y)
|
||||||
{
|
{
|
||||||
rb_warn("variable $KCODE is no longer effective");
|
rb_warn("variable $KCODE is no longer effective");
|
||||||
return Qnil;
|
return Qnil;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
kcode_setter(VALUE val, ID id)
|
kcode_setter(VALUE val, ID id, VALUE *_)
|
||||||
{
|
{
|
||||||
rb_warn("variable $KCODE is no longer effective; ignored");
|
rb_warn("variable $KCODE is no longer effective; ignored");
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
ignorecase_getter(void)
|
ignorecase_getter(ID _x, VALUE *_y)
|
||||||
{
|
{
|
||||||
rb_warn("variable $= is no longer effective");
|
rb_warn("variable $= is no longer effective");
|
||||||
return Qfalse;
|
return Qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ignorecase_setter(VALUE val, ID id)
|
ignorecase_setter(VALUE val, ID id, VALUE *_)
|
||||||
{
|
{
|
||||||
rb_warn("variable $= is no longer effective; ignored");
|
rb_warn("variable $= is no longer effective; ignored");
|
||||||
}
|
}
|
||||||
|
@ -3954,8 +3954,14 @@ match_getter(void)
|
||||||
return match;
|
return match;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
get_$LAST_MATCH_INFO(ID _x, VALUE *_y)
|
||||||
|
{
|
||||||
|
return match_getter();
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
match_setter(VALUE val)
|
match_setter(VALUE val, ID _x, VALUE *_y)
|
||||||
{
|
{
|
||||||
if (!NIL_P(val)) {
|
if (!NIL_P(val)) {
|
||||||
Check_Type(val, T_MATCH);
|
Check_Type(val, T_MATCH);
|
||||||
|
@ -4042,7 +4048,7 @@ Init_Regexp(void)
|
||||||
onig_set_warn_func(re_warn);
|
onig_set_warn_func(re_warn);
|
||||||
onig_set_verb_warn_func(re_warn);
|
onig_set_verb_warn_func(re_warn);
|
||||||
|
|
||||||
rb_define_virtual_variable("$~", match_getter, match_setter);
|
rb_define_virtual_variable("$~", get_$LAST_MATCH_INFO, match_setter);
|
||||||
rb_define_virtual_variable("$&", last_match_getter, 0);
|
rb_define_virtual_variable("$&", last_match_getter, 0);
|
||||||
rb_define_virtual_variable("$`", prematch_getter, 0);
|
rb_define_virtual_variable("$`", prematch_getter, 0);
|
||||||
rb_define_virtual_variable("$'", postmatch_getter, 0);
|
rb_define_virtual_variable("$'", postmatch_getter, 0);
|
||||||
|
|
12
ruby.c
12
ruby.c
|
@ -1446,13 +1446,13 @@ VALUE rb_argv0;
|
||||||
VALUE rb_e_script;
|
VALUE rb_e_script;
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
false_value(void)
|
false_value(ID _x, VALUE *_y)
|
||||||
{
|
{
|
||||||
return Qfalse;
|
return Qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
true_value(void)
|
true_value(ID _x, VALUE *_y)
|
||||||
{
|
{
|
||||||
return Qtrue;
|
return Qtrue;
|
||||||
}
|
}
|
||||||
|
@ -2230,7 +2230,7 @@ ruby_setproctitle(VALUE title)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
set_arg0(VALUE val, ID id)
|
set_arg0(VALUE val, ID id, VALUE *_)
|
||||||
{
|
{
|
||||||
if (origarg.argv == 0)
|
if (origarg.argv == 0)
|
||||||
rb_raise(rb_eRuntimeError, "$0 not initialized");
|
rb_raise(rb_eRuntimeError, "$0 not initialized");
|
||||||
|
@ -2304,16 +2304,14 @@ forbid_setid(const char *s, const ruby_cmdline_options_t *opt)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
verbose_setter(VALUE val, ID id, void *data)
|
verbose_setter(VALUE val, ID id, VALUE *variable)
|
||||||
{
|
{
|
||||||
VALUE *variable = data;
|
|
||||||
*variable = RTEST(val) ? Qtrue : val;
|
*variable = RTEST(val) ? Qtrue : val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
opt_W_getter(ID id, void *data)
|
opt_W_getter(ID id, VALUE *variable)
|
||||||
{
|
{
|
||||||
VALUE *variable = data;
|
|
||||||
switch (*variable) {
|
switch (*variable) {
|
||||||
case Qnil:
|
case Qnil:
|
||||||
return INT2FIX(0);
|
return INT2FIX(0);
|
||||||
|
|
4
safe.c
4
safe.c
|
@ -66,13 +66,13 @@ rb_set_safe_level(int level)
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
safe_getter(void)
|
safe_getter(ID _x, VALUE *_y)
|
||||||
{
|
{
|
||||||
return INT2NUM(rb_safe_level());
|
return INT2NUM(rb_safe_level());
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
safe_setter(VALUE val)
|
safe_setter(VALUE val, ID _x, VALUE *_y)
|
||||||
{
|
{
|
||||||
int level = NUM2INT(val);
|
int level = NUM2INT(val);
|
||||||
rb_set_safe_level(level);
|
rb_set_safe_level(level);
|
||||||
|
|
33
variable.c
33
variable.c
|
@ -309,7 +309,7 @@ struct trace_var {
|
||||||
struct rb_global_variable {
|
struct rb_global_variable {
|
||||||
int counter;
|
int counter;
|
||||||
int block_trace;
|
int block_trace;
|
||||||
void *data;
|
VALUE *data;
|
||||||
rb_gvar_getter_t *getter;
|
rb_gvar_getter_t *getter;
|
||||||
rb_gvar_setter_t *setter;
|
rb_gvar_setter_t *setter;
|
||||||
rb_gvar_marker_t *marker;
|
rb_gvar_marker_t *marker;
|
||||||
|
@ -354,7 +354,7 @@ rb_global_entry(ID id)
|
||||||
}
|
}
|
||||||
|
|
||||||
VALUE
|
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));
|
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
|
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->getter = rb_gvar_val_getter;
|
||||||
var->setter = rb_gvar_val_setter;
|
var->setter = rb_gvar_val_setter;
|
||||||
var->marker = rb_gvar_val_marker;
|
var->marker = rb_gvar_val_marker;
|
||||||
|
@ -377,14 +378,15 @@ rb_gvar_undef_marker(VALUE *var)
|
||||||
}
|
}
|
||||||
|
|
||||||
VALUE
|
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;
|
return (VALUE)data;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
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;
|
var->data = (void*)val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -396,17 +398,16 @@ rb_gvar_val_marker(VALUE *var)
|
||||||
}
|
}
|
||||||
|
|
||||||
VALUE
|
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;
|
if (!var) return Qnil;
|
||||||
return *var;
|
return *var;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
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
|
void
|
||||||
|
@ -416,7 +417,7 @@ rb_gvar_var_marker(VALUE *var)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
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));
|
rb_name_error(id, "%"PRIsVALUE" is a read-only variable", QUOTE_ID(id));
|
||||||
}
|
}
|
||||||
|
@ -487,8 +488,8 @@ void
|
||||||
rb_define_hooked_variable(
|
rb_define_hooked_variable(
|
||||||
const char *name,
|
const char *name,
|
||||||
VALUE *var,
|
VALUE *var,
|
||||||
VALUE (*getter)(ANYARGS),
|
rb_gvar_getter_t *getter,
|
||||||
void (*setter)(ANYARGS))
|
rb_gvar_setter_t *setter)
|
||||||
{
|
{
|
||||||
volatile VALUE tmp = var ? *var : Qnil;
|
volatile VALUE tmp = var ? *var : Qnil;
|
||||||
ID id = global_id(name);
|
ID id = global_id(name);
|
||||||
|
@ -517,8 +518,8 @@ rb_define_readonly_variable(const char *name, const VALUE *var)
|
||||||
void
|
void
|
||||||
rb_define_virtual_variable(
|
rb_define_virtual_variable(
|
||||||
const char *name,
|
const char *name,
|
||||||
VALUE (*getter)(ANYARGS),
|
rb_gvar_getter_t *getter,
|
||||||
void (*setter)(ANYARGS))
|
rb_gvar_setter_t *setter)
|
||||||
{
|
{
|
||||||
if (!getter) getter = rb_gvar_val_getter;
|
if (!getter) getter = rb_gvar_val_getter;
|
||||||
if (!setter) setter = rb_gvar_readonly_setter;
|
if (!setter) setter = rb_gvar_readonly_setter;
|
||||||
|
@ -662,7 +663,7 @@ MJIT_FUNC_EXPORTED VALUE
|
||||||
rb_gvar_get(struct rb_global_entry *entry)
|
rb_gvar_get(struct rb_global_entry *entry)
|
||||||
{
|
{
|
||||||
struct rb_global_variable *var = entry->var;
|
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 {
|
struct trace_data {
|
||||||
|
@ -699,7 +700,7 @@ rb_gvar_set(struct rb_global_entry *entry, VALUE val)
|
||||||
struct trace_data trace;
|
struct trace_data trace;
|
||||||
struct rb_global_variable *var = entry->var;
|
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) {
|
if (var->trace && !var->block_trace) {
|
||||||
var->block_trace = 1;
|
var->block_trace = 1;
|
||||||
|
|
Loading…
Add table
Reference in a new issue