diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1999-12-14 06:50:43 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 1999-12-14 06:50:43 +0000 |
commit | 9d228b13deccfdf23f44e2c465f723a2a7b3bcbd (patch) | |
tree | 9a4d769804c389b6b03bbfdf65e8e0a03288c8e8 /variable.c | |
parent | c18d3740a925e8752c3b93acea6087fb0e03be53 (diff) |
19991214
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@587 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'variable.c')
-rw-r--r-- | variable.c | 171 |
1 files changed, 47 insertions, 124 deletions
diff --git a/variable.c b/variable.c index b29ce55cce..fef84f7128 100644 --- a/variable.c +++ b/variable.c @@ -44,7 +44,7 @@ fc_i(key, value, res) VALUE path; char *name; - if (!rb_is_shared_id(key)) return ST_CONTINUE; + if (!rb_is_const_id(key)) return ST_CONTINUE; name = rb_id2name(key); if (res->path) { @@ -226,7 +226,7 @@ rb_autoload_id(id, filename) ID id; const char *filename; { - if (!rb_is_shared_id(id)) { + if (!rb_is_const_id(id)) { rb_raise(rb_eNameError, "autoload must be constant name", rb_id2name(id)); } @@ -858,7 +858,7 @@ rb_ivar_get(obj, id) { VALUE val; - if (!FL_TEST(obj, FL_TAINT) && rb_safe_level() >= 4) + if (!OBJ_TAINTED(obj) && rb_safe_level() >= 4) rb_raise(rb_eSecurityError, "Insecure: can't access instance variable"); switch (TYPE(obj)) { case T_OBJECT: @@ -873,7 +873,7 @@ rb_ivar_get(obj, id) break; } if (ruby_verbose) { - rb_warning("instance var %s not initialized", rb_id2name(id)); + rb_warning("instance variable %s not initialized", rb_id2name(id)); } return Qnil; } @@ -884,7 +884,7 @@ rb_ivar_set(obj, id, val) ID id; VALUE val; { - if (!FL_TEST(obj, FL_TAINT) && rb_safe_level() >= 4) + if (!OBJ_TAINTED(obj) && rb_safe_level() >= 4) rb_raise(rb_eSecurityError, "Insecure: can't modify instance variable"); switch (TYPE(obj)) { case T_OBJECT: @@ -936,10 +936,11 @@ VALUE rb_obj_instance_variables(obj) VALUE obj; { - VALUE ary = rb_ary_new(); + VALUE ary; - if (!FL_TEST(obj, FL_TAINT) && rb_safe_level() >= 4) + if (!OBJ_TAINTED(obj) && rb_safe_level() >= 4) rb_raise(rb_eSecurityError, "Insecure: can't get metainfo"); + ary = rb_ary_new(); switch (TYPE(obj)) { case T_OBJECT: case T_CLASS: @@ -969,7 +970,7 @@ rb_obj_remove_instance_variable(obj, name) VALUE val = Qnil; ID id = rb_to_id(name); - if (!FL_TEST(obj, FL_TAINT) && rb_safe_level() >= 4) + if (!OBJ_TAINTED(obj) && rb_safe_level() >= 4) rb_raise(rb_eSecurityError, "Insecure: can't modify instance variable"); if (!rb_is_instance_id(id)) { rb_raise(rb_eNameError, "`%s' is not an instance variable", @@ -993,7 +994,7 @@ rb_obj_remove_instance_variable(obj, name) } VALUE -rb_shvar_get_at(klass, id) +rb_const_get_at(klass, id) VALUE klass; ID id; { @@ -1003,7 +1004,7 @@ rb_shvar_get_at(klass, id) return value; } if (klass == rb_cObject) { - return rb_shvar_get(klass, id); + return rb_const_get(klass, id); } rb_raise(rb_eNameError, "uninitialized constant %s::%s", RSTRING(rb_class_path(klass))->ptr, @@ -1012,16 +1013,21 @@ rb_shvar_get_at(klass, id) } -VALUE -rb_const_get_at(klass, id) - VALUE klass; +void +rb_autoload_load(id) ID id; { - return rb_shvar_get_at(klass, id); + char *modname; + VALUE module; + + st_delete(autoload_tbl, &id, &modname); + module = rb_str_new2(modname); + free(modname); + rb_f_require(Qnil, module); } VALUE -rb_shvar_get(klass, id) +rb_const_get(klass, id) VALUE klass; ID id; { @@ -1036,7 +1042,7 @@ rb_shvar_get(klass, id) tmp = RCLASS(tmp)->super; } if (BUILTIN_TYPE(klass) == T_MODULE) { - return rb_shvar_get(rb_cObject, id); + return rb_const_get(rb_cObject, id); } /* pre-defined class */ @@ -1044,14 +1050,8 @@ rb_shvar_get(klass, id) /* autoload */ if (autoload_tbl && st_lookup(autoload_tbl, id, 0)) { - char *modname; - VALUE module; - - st_delete(autoload_tbl, &id, &modname); - module = rb_str_new2(modname); - free(modname); - rb_f_require(Qnil, module); - return rb_shvar_get(klass, id); + rb_autoload_load(id); + return rb_const_get(klass, id); } /* Uninitialized constant */ @@ -1065,21 +1065,13 @@ rb_shvar_get(klass, id) return Qnil; /* not reached */ } -VALUE -rb_const_get(klass, id) - VALUE klass; - ID id; -{ - return rb_shvar_get(klass, id); -} - static int sv_i(key, value, ary) ID key; VALUE value; VALUE ary; { - if (rb_is_shared_id(key)) { + if (rb_is_const_id(key)) { VALUE kval = rb_str_new2(rb_id2name(key)); if (!rb_ary_includes(ary, kval)) { rb_ary_push(ary, kval); @@ -1089,20 +1081,22 @@ sv_i(key, value, ary) } VALUE -rb_mod_remove_shvar(mod, name) +rb_mod_remove_const(mod, name) VALUE mod, name; { ID id = rb_to_id(name); VALUE val; - if (!rb_is_shared_id(id)) { - rb_raise(rb_eNameError, "`%s' is not shared variable", rb_id2name(id)); + if (!OBJ_TAINTED(mod) && rb_safe_level() >= 4) + rb_raise(rb_eSecurityError, "Insecure: can't remove constant"); + if (!rb_is_const_id(id)) { + rb_raise(rb_eNameError, "`%s' is not constant", rb_id2name(id)); } if (RCLASS(mod)->iv_tbl && st_delete(ROBJECT(mod)->iv_tbl, &id, &val)) { return val; } - if (rb_shvar_defined_at(mod, id)) { + if (rb_const_defined_at(mod, id)) { rb_raise(rb_eNameError, "cannot remove %s::%s", rb_class2name(mod), rb_id2name(id)); } @@ -1111,13 +1105,6 @@ rb_mod_remove_shvar(mod, name) return Qnil; /* not reached */ } -VALUE -rb_mod_remove_const(mod, name) - VALUE mod, name; -{ - return rb_mod_remove_shvar(mod, name); -} - static int autoload_i(key, name, ary) ID key; @@ -1132,10 +1119,10 @@ autoload_i(key, name, ary) } VALUE -rb_mod_shvar_at(mod, ary) +rb_mod_const_at(mod, ary) VALUE mod, ary; { - if (!FL_TEST(mod, FL_TAINT) && rb_safe_level() >= 4) + if (!OBJ_TAINTED(mod) && rb_safe_level() >= 4) rb_raise(rb_eSecurityError, "Insecure: can't get metainfo"); if (RCLASS(mod)->iv_tbl) { st_foreach(RCLASS(mod)->iv_tbl, sv_i, ary); @@ -1150,50 +1137,28 @@ rb_mod_shvar_at(mod, ary) } VALUE -rb_mod_const_at(mod, ary) - VALUE mod, ary; -{ - return rb_mod_shvar_at(mod, ary); -} - -VALUE -rb_mod_shvar_of(mod, ary) +rb_mod_const_of(mod, ary) VALUE mod; VALUE ary; { - rb_mod_shvar_at(mod, ary); + rb_mod_const_at(mod, ary); for (;;) { mod = RCLASS(mod)->super; if (!mod) break; - rb_mod_shvar_at(mod, ary); + rb_mod_const_at(mod, ary); } return ary; } VALUE -rb_mod_const_of(mod, ary) - VALUE mod; - VALUE ary; -{ - return rb_mod_shvar_of(mod, ary); -} - -VALUE -rb_mod_shvars(mod) - VALUE mod; -{ - return rb_mod_shvar_of(mod, rb_ary_new()); -} - -VALUE rb_mod_constants(mod) VALUE mod; { - return rb_mod_shvars(mod); + return rb_mod_const_of(mod, rb_ary_new()); } int -rb_shvar_defined_at(klass, id) +rb_const_defined_at(klass, id) VALUE klass; ID id; { @@ -1201,20 +1166,12 @@ rb_shvar_defined_at(klass, id) return Qtrue; } if (klass == rb_cObject) { - return rb_shvar_defined(klass, id); + return rb_const_defined(klass, id); } return Qfalse; } int -rb_const_defined_at(klass, id) - VALUE klass; - ID id; -{ - return rb_shvar_defined_at(klass, id); -} - -int rb_autoload_defined(id) ID id; { @@ -1224,7 +1181,7 @@ rb_autoload_defined(id) } int -rb_shvar_defined(klass, id) +rb_const_defined(klass, id) VALUE klass; ID id; { @@ -1237,28 +1194,20 @@ rb_shvar_defined(klass, id) tmp = RCLASS(tmp)->super; } if (BUILTIN_TYPE(klass) == T_MODULE) { - return rb_shvar_defined(rb_cObject, id); + return rb_const_defined(rb_cObject, id); } if (st_lookup(rb_class_tbl, id, 0)) return Qtrue; return rb_autoload_defined(id); } -int -rb_const_defined(klass, id) - VALUE klass; - ID id; -{ - return rb_shvar_defined(klass, id); -} - void -rb_shvar_set(klass, id, val) +rb_const_set(klass, id, val) VALUE klass; ID id; VALUE val; { - if (!FL_TEST(klass, FL_TAINT) && rb_safe_level() >= 4) + if (!OBJ_TAINTED(klass) && rb_safe_level() >= 4) rb_raise(rb_eSecurityError, "Insecure: can't set constant"); if (!RCLASS(klass)->iv_tbl) { RCLASS(klass)->iv_tbl = st_init_numtable(); @@ -1268,16 +1217,7 @@ rb_shvar_set(klass, id, val) } void -rb_const_set(klass, id, val) - VALUE klass; - ID id; - VALUE val; -{ - rb_shvar_set(klass, id, val); -} - -void -rb_shvar_assign(klass, id, val) +rb_const_assign(klass, id, val) VALUE klass; ID id; VALUE val; @@ -1329,19 +1269,10 @@ rb_define_const(klass, name, val) if (klass == rb_cObject) { rb_secure(4); } - if (!rb_is_shared_id(id)) { - rb_raise(rb_eNameError, "wrong shared variable name %s", name); + if (!rb_is_const_id(id)) { + rb_raise(rb_eNameError, "wrong constant name %s", name); } - rb_shvar_set(klass, id, val); -} - -void -rb_define_shvar(klass, name, val) - VALUE klass; - const char *name; - VALUE val; -{ - rb_define_const(klass, name, val); + rb_const_set(klass, id, val); } void @@ -1352,14 +1283,6 @@ rb_define_global_const(name, val) rb_define_const(rb_cObject, name, val); } -void -rb_define_global_shvar(name, val) - const char *name; - VALUE val; -{ - rb_define_global_const(name, val); -} - VALUE rb_iv_get(obj, name) VALUE obj; |