summaryrefslogtreecommitdiff
path: root/variable.c
diff options
context:
space:
mode:
authorYukihiro Matsumoto <matz@ruby-lang.org>1994-12-20 00:46:19 +0900
committerTakashi Kokubun <takashikkbn@gmail.com>2019-08-17 22:09:31 +0900
commitbd0c733b77b561f4d12daccebf06a7c71917000b (patch)
tree748e0d92722709909a25523fc5e90e4aec687a23 /variable.c
parentb3f9ba5a3720de81a9a14d9d906509f81abeef7a (diff)
version 0.63v0_63
https://cache.ruby-lang.org/pub/ruby/1.0/ruby-0.63.tar.gz Tue Dec 20 00:46:19 1994 Yukihiro Matsumoto (matz@dyna) * 0.63 released * eval.c(rb_call): superの呼び出しで落ちる.argc, argvの設定を忘れ ていた. * parse.y(read_escape): 展開エラー. * variable.c: 定義済みの変数のhookを変更しないように.
Diffstat (limited to 'variable.c')
-rw-r--r--variable.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/variable.c b/variable.c
index aa01b31921..af8ae603f8 100644
--- a/variable.c
+++ b/variable.c
@@ -3,7 +3,7 @@
variable.c -
$Author: matz $
- $Date: 1994/12/19 08:30:16 $
+ $Date: 1994/12/20 05:07:14 $
created at: Tue Apr 19 23:55:15 JST 1994
************************************************/
@@ -47,7 +47,7 @@ rb_name_class(class, id)
}
struct global_entry {
- enum { GLOBAL_VAL, GLOBAL_VAR, GLOBAL_UNDEF } mode;
+ enum { GLOBAL_VAL, GLOBAL_VAR, GLOBAL_SYSVAR, GLOBAL_UNDEF } mode;
ID id;
union {
VALUE val;
@@ -68,6 +68,7 @@ mark_global_entry(key, entry)
gc_mark(entry->v.val); /* normal global value */
break;
case GLOBAL_VAR:
+ case GLOBAL_SYSVAR:
if (entry->v.var)
gc_mark(*entry->v.var); /* c variable pointer */
break;
@@ -122,10 +123,8 @@ rb_define_variable(name, var, get_hook, set_hook, data)
id = rb_intern(buf);
}
- if (!st_lookup(global_tbl, id, &entry)) {
- entry = rb_global_entry(id);
- }
- entry->mode = GLOBAL_VAR;
+ entry = rb_global_entry(id);
+ entry->mode = GLOBAL_SYSVAR;
entry->v.var = var;
entry->get_hook = get_hook;
entry->set_hook = set_hook;
@@ -200,6 +199,7 @@ rb_gvar_get(entry)
return entry->v.val;
case GLOBAL_VAR:
+ case GLOBAL_SYSVAR:
if (entry->v.var == Qnil) return val;
return *entry->v.var;
@@ -271,7 +271,7 @@ rb_gvar_set(entry, val)
if (entry->set_hook)
(*entry->set_hook)(val, entry->id, entry->data);
- if (entry->mode == GLOBAL_VAR) {
+ if (entry->mode == GLOBAL_VAR || entry->mode == GLOBAL_SYSVAR) {
if (entry->v.var == Qnil) {
rb_readonly_hook(val, entry->id);
}
@@ -426,5 +426,5 @@ Fdefined(obj, name)
break;
}
return FALSE;
-}
+}