summaryrefslogtreecommitdiff
path: root/variable.c
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-02-13 09:34:37 (GMT)
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-02-13 09:34:37 (GMT)
commit66652bb6322ed7ba17c1e8485aee2701e9cadded (patch)
treeb44b5f68b1978d1f802316a27bc15a0d41207184 /variable.c
parenta6a596a5bdb8cdefe54946bcf9892835c3f87c18 (diff)
revert r62392
check the declaration of `rb_autoloading_value()` in vm_core.h and the call in vm_insnhelper.c, and retry it. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62393 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'variable.c')
-rw-r--r--variable.c49
1 files changed, 11 insertions, 38 deletions
diff --git a/variable.c b/variable.c
index 4572d5a..433f97e 100644
--- a/variable.c
+++ b/variable.c
@@ -1854,7 +1854,6 @@ struct autoload_state {
struct autoload_data_i {
VALUE feature;
int safe_level;
- rb_const_flag_t flag;
VALUE value;
struct autoload_state *state; /* points to on-stack struct */
};
@@ -1937,7 +1936,6 @@ rb_autoload_str(VALUE mod, ID id, VALUE file)
ele->safe_level = rb_safe_level();
ele->value = Qundef;
ele->state = 0;
- ele->flag = CONST_PUBLIC;
st_insert(tbl, (st_data_t)id, (st_data_t)ad);
}
@@ -2013,7 +2011,7 @@ check_autoload_required(VALUE mod, ID id, const char **loadingpath)
}
MJIT_FUNC_EXPORTED int
-rb_autoloading_value(VALUE mod, ID id, VALUE* value, rb_const_flag_t *flag)
+rb_autoloading_value(VALUE mod, ID id, VALUE* value)
{
VALUE load;
struct autoload_data_i *ele;
@@ -2026,9 +2024,6 @@ rb_autoloading_value(VALUE mod, ID id, VALUE* value, rb_const_flag_t *flag)
if (value) {
*value = ele->value;
}
- if (flag) {
- *flag = ele->flag;
- }
return 1;
}
}
@@ -2043,14 +2038,13 @@ autoload_defined_p(VALUE mod, ID id)
if (!ce || ce->value != Qundef) {
return 0;
}
- return !rb_autoloading_value(mod, id, NULL, NULL);
+ return !rb_autoloading_value(mod, id, NULL);
}
struct autoload_const_set_args {
VALUE mod;
ID id;
VALUE value;
- rb_const_flag_t flag;
};
static void const_tbl_update(struct autoload_const_set_args *);
@@ -2097,7 +2091,6 @@ autoload_reset(VALUE arg)
args.mod = state->mod;
args.id = state->id;
args.value = state->ele->value;
- args.flag = state->ele->flag;
safe_backup = rb_safe_level();
rb_set_safe_level_force(state->ele->safe_level);
rb_ensure(autoload_const_set, (VALUE)&args,
@@ -2244,7 +2237,6 @@ static VALUE
rb_const_search(VALUE klass, ID id, int exclude, int recurse, int visibility)
{
VALUE value, tmp, av;
- rb_const_flag_t flag;
int mod_retry = 0;
tmp = klass;
@@ -2263,7 +2255,7 @@ rb_const_search(VALUE klass, ID id, int exclude, int recurse, int visibility)
if (value == Qundef) {
if (am == tmp) break;
am = tmp;
- if (rb_autoloading_value(tmp, id, &av, &flag)) return av;
+ if (rb_autoloading_value(tmp, id, &av)) return av;
rb_autoload_load(tmp, id);
continue;
}
@@ -2514,7 +2506,7 @@ rb_const_defined_0(VALUE klass, ID id, int exclude, int recurse, int visibility)
return (int)Qfalse;
}
if (ce->value == Qundef && !check_autoload_required(tmp, id, 0) &&
- !rb_autoloading_value(tmp, id, NULL, NULL))
+ !rb_autoloading_value(tmp, id, 0))
return (int)Qfalse;
if (exclude && tmp == rb_cObject && klass != rb_cObject) {
@@ -2600,7 +2592,6 @@ rb_const_set(VALUE klass, ID id, VALUE val)
args.mod = klass;
args.id = id;
args.value = val;
- args.flag = CONST_PUBLIC;
const_tbl_update(&args);
}
/*
@@ -2632,21 +2623,6 @@ rb_const_set(VALUE klass, ID id, VALUE val)
}
}
-static struct autoload_data_i *
-current_autoload_data(VALUE mod, ID id)
-{
- struct autoload_data_i *ele;
- VALUE load = autoload_data(mod, id);
- if (!load) return 0;
- ele = check_autoload_data(load);
- if (!ele) return 0;
- /* for autoloading thread, keep the defined value to autoloading storage */
- if (ele->state && (ele->state->thread == rb_thread_current())) {
- return ele;
- }
- return 0;
-}
-
static void
const_tbl_update(struct autoload_const_set_args *args)
{
@@ -2655,15 +2631,19 @@ const_tbl_update(struct autoload_const_set_args *args)
VALUE val = args->value;
ID id = args->id;
struct rb_id_table *tbl = RCLASS_CONST_TBL(klass);
- rb_const_flag_t visibility = args->flag;
+ rb_const_flag_t visibility = CONST_PUBLIC;
rb_const_entry_t *ce;
if (rb_id_table_lookup(tbl, id, &value)) {
ce = (rb_const_entry_t *)value;
if (ce->value == Qundef) {
- struct autoload_data_i *ele = current_autoload_data(klass, id);
+ VALUE load;
+ struct autoload_data_i *ele;
- if (ele) {
+ load = autoload_data(klass, id);
+ /* for autoloading thread, keep the defined value to autoloading storage */
+ if (load && (ele = check_autoload_data(load)) && ele->state &&
+ (ele->state->thread == rb_thread_current())) {
rb_clear_constant_cache();
ele->value = val; /* autoload_i is non-WB-protected */
@@ -2752,13 +2732,6 @@ set_const_visibility(VALUE mod, int argc, const VALUE *argv,
if ((ce = rb_const_lookup(mod, id))) {
ce->flag &= ~mask;
ce->flag |= flag;
- if (ce->value == Qundef) {
- struct autoload_data_i *ele = current_autoload_data(mod, id);
- if (ele) {
- ele->flag &= ~mask;
- ele->flag |= flag;
- }
- }
}
else {
if (i > 0) {