diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-03-23 08:37:35 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-03-23 08:37:35 +0000 |
commit | 688169fd83b24564b653c03977c168cea50ccd35 (patch) | |
tree | b4724e5397cf5da5b554ab5795842a93145a88be /variable.c | |
parent | 5c13dd59db1ee6c04cdac4ce2ee97d5934115439 (diff) |
2000-03-23
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@648 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'variable.c')
-rw-r--r-- | variable.c | 51 |
1 files changed, 40 insertions, 11 deletions
diff --git a/variable.c b/variable.c index 691a0159e3..d276fc1e3e 100644 --- a/variable.c +++ b/variable.c @@ -1315,16 +1315,19 @@ rb_define_global_const(name, val) } void -rb_shared_variable_declare(klass, id, val) +rb_cvar_declare(klass, id, val) VALUE klass; ID id; VALUE val; { - rb_mod_av_set(klass, id, val, "shared variable"); + if (FL_TEST(klass, FL_SINGLETON)) { + klass = rb_iv_get(klass, "__attached__"); + } + rb_mod_av_set(klass, id, val, "class variable"); } void -rb_shared_variable_set(klass, id, val) +rb_cvar_set(klass, id, val) VALUE klass; ID id; VALUE val; @@ -1332,6 +1335,9 @@ rb_shared_variable_set(klass, id, val) VALUE value; VALUE tmp; + if (FL_TEST(klass, FL_SINGLETON)) { + klass = rb_iv_get(klass, "__attached__"); + } tmp = klass; while (tmp) { if (RCLASS(tmp)->iv_tbl && st_lookup(RCLASS(tmp)->iv_tbl,id,0)) { @@ -1341,17 +1347,20 @@ rb_shared_variable_set(klass, id, val) tmp = RCLASS(tmp)->super; } - rb_raise(rb_eNameError,"uninitialized shared variable %s",rb_id2name(id)); + rb_raise(rb_eNameError,"uninitialized class variable %s",rb_id2name(id)); } VALUE -rb_shared_variable_get(klass, id) +rb_cvar_get(klass, id) VALUE klass; ID id; { VALUE value; VALUE tmp; + if (FL_TEST(klass, FL_SINGLETON)) { + klass = rb_iv_get(klass, "__attached__"); + } tmp = klass; while (tmp) { if (RCLASS(tmp)->iv_tbl && st_lookup(RCLASS(tmp)->iv_tbl,id,&value)) { @@ -1360,18 +1369,21 @@ rb_shared_variable_get(klass, id) tmp = RCLASS(tmp)->super; } - rb_raise(rb_eNameError,"uninitialized shared variable %s",rb_id2name(id)); + rb_raise(rb_eNameError,"uninitialized class variable %s",rb_id2name(id)); return Qnil; /* not reached */ } int -rb_shared_variable_defined(klass, id) +rb_cvar_defined(klass, id) VALUE klass; ID id; { VALUE value; VALUE tmp; + if (FL_TEST(klass, FL_SINGLETON)) { + klass = rb_iv_get(klass, "__attached__"); + } tmp = klass; while (tmp) { if (RCLASS(tmp)->iv_tbl && st_lookup(RCLASS(tmp)->iv_tbl,id,0)) { @@ -1384,17 +1396,34 @@ rb_shared_variable_defined(klass, id) } void -rb_define_shared_variable(klass, name, val) +rb_cv_set(klass, name, val) + VALUE klass; + const char *name; + VALUE val; +{ + rb_cvar_set(klass, rb_intern(name), val); +} + +VALUE +rb_cv_get(klass, name) + VALUE klass; + const char *name; +{ + return rb_cvar_get(klass, rb_intern(name)); +} + +void +rb_define_class_variable(klass, name, val) VALUE klass; const char *name; VALUE val; { ID id = rb_intern(name); - if (!rb_is_shared_id(id)) { - rb_raise(rb_eNameError, "wrong shared variable name %s", name); + if (!rb_is_class_id(id)) { + rb_raise(rb_eNameError, "wrong class variable name %s", name); } - rb_shared_variable_declare(klass, id, val); + rb_cvar_declare(klass, id, val); } VALUE |