summaryrefslogtreecommitdiff
path: root/variable.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-09-08 07:09:52 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>1998-09-08 07:09:52 +0000
commit5d71c8d89c6bd7af934e7a8de5882cda2991711b (patch)
tree8788e2b9a2db8bf605c8a38752192cc7eee66fc4 /variable.c
parent1c193e5ffecdd8b7949206f9bbd24514974441f7 (diff)
1.1d series
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/v1_1dev@298 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'variable.c')
-rw-r--r--variable.c263
1 files changed, 133 insertions, 130 deletions
diff --git a/variable.c b/variable.c
index c05853899e..3cebfb4ecb 100644
--- a/variable.c
+++ b/variable.c
@@ -19,20 +19,12 @@ char* strdup(char*);
static st_table *rb_global_tbl;
st_table *rb_class_tbl;
-#define global_tbl rb_global_tbl
-#define class_tbl rb_class_tbl
-
-st_table*
-new_idhash()
-{
- return st_init_numtable();
-}
void
Init_var_tables()
{
- global_tbl = new_idhash();
- class_tbl = new_idhash();
+ rb_global_tbl = st_init_numtable();
+ rb_class_tbl = st_init_numtable();
}
struct fc_result {
@@ -56,19 +48,19 @@ fc_i(key, value, res)
name = rb_id2name(key);
if (res->path) {
- path = str_dup(res->path);
- str_cat(path, "::", 2);
- str_cat(path, name, strlen(name));
+ path = rb_str_dup(res->path);
+ rb_str_cat(path, "::", 2);
+ rb_str_cat(path, name, strlen(name));
}
else {
- path = str_new2(name);
+ path = rb_str_new2(name);
}
if (value == res->klass) {
res->name = key;
res->path = path;
return ST_STOP;
}
- if (obj_is_kind_of(value, cModule)) {
+ if (rb_obj_is_kind_of(value, rb_cModule)) {
struct fc_result arg;
struct fc_result *list;
@@ -105,13 +97,13 @@ find_class_path(klass)
arg.name = 0;
arg.path = 0;
arg.klass = klass;
- arg.track = cObject;
+ arg.track = rb_cObject;
arg.prev = 0;
- if (RCLASS(cObject)->iv_tbl) {
- st_foreach(RCLASS(cObject)->iv_tbl, fc_i, &arg);
+ if (RCLASS(rb_cObject)->iv_tbl) {
+ st_foreach(RCLASS(rb_cObject)->iv_tbl, fc_i, &arg);
}
if (arg.name == 0) {
- st_foreach(class_tbl, fc_i, &arg);
+ st_foreach(rb_class_tbl, fc_i, &arg);
}
if (arg.name) {
rb_iv_set(klass, "__classpath__", arg.path);
@@ -129,13 +121,14 @@ classname(klass)
while (TYPE(klass) == T_ICLASS || FL_TEST(klass, FL_SINGLETON)) {
klass = (VALUE)RCLASS(klass)->super;
}
+ if (!klass) klass = rb_cObject;
path = rb_iv_get(klass, "__classpath__");
if (NIL_P(path)) {
ID classid = rb_intern("__classid__");
path = rb_ivar_get(klass, classid);
if (!NIL_P(path)) {
- path = str_new2(rb_id2name(FIX2INT(path)));
+ path = rb_str_new2(rb_id2name(FIX2INT(path)));
rb_ivar_set(klass, classid, path);
st_delete(RCLASS(klass)->iv_tbl, &classid, 0);
}
@@ -147,18 +140,19 @@ classname(klass)
}
return path;
}
- if (TYPE(path) != T_STRING) Bug("class path is not set properly");
+ if (TYPE(path) != T_STRING)
+ rb_bug("class path is not set properly");
return path;
}
VALUE
-mod_name(mod)
+rb_mod_name(mod)
VALUE mod;
{
VALUE path = classname(mod);
- if (path) return str_dup(path);
- return str_new(0,0);
+ if (path) return rb_str_dup(path);
+ return rb_str_new(0,0);
}
VALUE
@@ -174,7 +168,7 @@ rb_class_path(klass)
if (TYPE(klass) == T_MODULE) s = "Module";
sprintf(buf, "#<%s 0x%x>", s, klass);
- return str_new2(buf);
+ return rb_str_new2(buf);
}
}
@@ -185,13 +179,13 @@ rb_set_class_path(klass, under, name)
{
VALUE str;
- if (under == cObject) {
- str = str_new2(name);
+ if (under == rb_cObject) {
+ str = rb_str_new2(name);
}
else {
- str = str_dup(rb_class_path(under));
- str_cat(str, "::", 2);
- str_cat(str, name, strlen(name));
+ str = rb_str_dup(rb_class_path(under));
+ rb_str_cat(str, "::", 2);
+ rb_str_cat(str, name, strlen(name));
}
rb_iv_set(klass, "__classpath__", str);
}
@@ -201,7 +195,7 @@ rb_path2class(path)
char *path;
{
if (path[0] == '#') {
- ArgError("can't retrieve anonymous class %s", path);
+ rb_raise(rb_eArgError, "can't retrieve anonymous class %s", path);
}
return rb_eval_string(path);
}
@@ -211,8 +205,8 @@ rb_name_class(klass, id)
VALUE klass;
ID id;
{
- if (cString) {
- rb_iv_set(klass, "__classpath__", str_new2(rb_id2name(id)));
+ if (rb_cString) {
+ rb_iv_set(klass, "__classpath__", rb_str_new2(rb_id2name(id)));
}
else {
rb_iv_set(klass, "__classid__", INT2FIX(id));
@@ -227,11 +221,12 @@ rb_autoload_id(id, filename)
char *filename;
{
if (!rb_is_const_id(id)) {
- NameError("autoload must be constant name", rb_id2name(id));
+ rb_raise(rb_eNameError, "autoload must be constant name",
+ rb_id2name(id));
}
if (!autoload_tbl) {
- autoload_tbl = new_idhash();
+ autoload_tbl = st_init_numtable();
}
st_insert(autoload_tbl, id, strdup(filename));
}
@@ -244,7 +239,7 @@ rb_autoload(klass, filename)
}
VALUE
-f_autoload(obj, klass, file)
+rb_f_autoload(obj, klass, file)
VALUE obj, klass, file;
{
rb_autoload_id(rb_to_id(klass), STR2CSTR(file));
@@ -293,9 +288,9 @@ rb_global_entry(id)
{
struct global_entry *entry;
- if (!st_lookup(global_tbl, id, &entry)) {
+ if (!st_lookup(rb_global_tbl, id, &entry)) {
entry = ALLOC(struct global_entry);
- st_insert(global_tbl, id, entry);
+ st_add_direct(rb_global_tbl, id, entry);
entry->id = id;
entry->data = 0;
entry->getter = undef_getter;
@@ -312,7 +307,9 @@ static VALUE
undef_getter(id)
ID id;
{
- Warning("global variable `%s' not initialized", rb_id2name(id));
+ if (rb_verbose) {
+ rb_warning("global variable `%s' not initialized", rb_id2name(id));
+ }
return Qnil;
}
@@ -357,7 +354,7 @@ static void
val_marker(data)
void *data;
{
- if (data) gc_mark_maybe(data);
+ if (data) rb_gc_mark_maybe(data);
}
static VALUE
@@ -382,7 +379,7 @@ static void
var_marker(var)
VALUE **var;
{
- if (var) gc_mark_maybe(*var);
+ if (var) rb_gc_mark_maybe(*var);
}
static void
@@ -391,7 +388,7 @@ readonly_setter(val, id, var)
ID id;
void *var;
{
- NameError("Can't set variable %s", rb_id2name(id));
+ rb_raise(rb_eNameError, "Can't set variable %s", rb_id2name(id));
}
static int
@@ -404,16 +401,16 @@ mark_global_entry(key, entry)
(*entry->marker)(entry->data);
trace = entry->trace;
while (trace) {
- if (trace->data) gc_mark_maybe(trace->data);
+ if (trace->data) rb_gc_mark_maybe(trace->data);
trace = trace->next;
}
return ST_CONTINUE;
}
void
-gc_mark_global_tbl()
+rb_gc_mark_global_tbl()
{
- st_foreach(global_tbl, mark_global_entry, 0);
+ st_foreach(rb_global_tbl, mark_global_entry, 0);
}
static ID
@@ -480,11 +477,11 @@ static void
rb_trace_eval(cmd, val)
VALUE cmd, val;
{
- rb_eval_cmd(cmd, ary_new3(1, val));
+ rb_eval_cmd(cmd, rb_ary_new3(1, val));
}
VALUE
-f_trace_var(argc, argv)
+rb_f_trace_var(argc, argv)
int argc;
VALUE *argv;
{
@@ -494,14 +491,15 @@ f_trace_var(argc, argv)
struct trace_var *trace;
if (rb_scan_args(argc, argv, "11", &var, &cmd) == 1) {
- cmd = f_lambda();
+ cmd = rb_f_lambda();
}
if (NIL_P(cmd)) {
- return f_untrace_var(argc, argv);
+ return rb_f_untrace_var(argc, argv);
}
id = rb_to_id(var);
- if (!st_lookup(global_tbl, id, &entry)) {
- NameError("undefined global variable %s", rb_id2name(id));
+ if (!st_lookup(rb_global_tbl, id, &entry)) {
+ rb_raise(rb_eNameError, "undefined global variable %s",
+ rb_id2name(id));
}
trace = ALLOC(struct trace_var);
trace->next = entry->trace;
@@ -535,7 +533,7 @@ remove_trace(entry)
}
VALUE
-f_untrace_var(argc, argv)
+rb_f_untrace_var(argc, argv)
int argc;
VALUE *argv;
{
@@ -546,17 +544,18 @@ f_untrace_var(argc, argv)
rb_scan_args(argc, argv, "11", &var, &cmd);
id = rb_to_id(var);
- if (!st_lookup(global_tbl, id, &entry)) {
- NameError("undefined global variable %s", rb_id2name(id));
+ if (!st_lookup(rb_global_tbl, id, &entry)) {
+ rb_raise(rb_eNameError, "undefined global variable %s",
+ rb_id2name(id));
}
trace = entry->trace;
if (NIL_P(cmd)) {
- VALUE ary = ary_new();
+ VALUE ary = rb_ary_new();
while (trace) {
struct trace_var *next = trace->next;
- ary_push(ary, (VALUE)trace->data);
+ rb_ary_push(ary, (VALUE)trace->data);
trace->removed = 1;
trace = next;
}
@@ -570,7 +569,7 @@ f_untrace_var(argc, argv)
if (trace->data == (void*)cmd) {
trace->removed = 1;
if (!entry->block_trace) remove_trace(entry);
- return ary_new3(1, cmd);
+ return rb_ary_new3(1, cmd);
}
trace = trace->next;
}
@@ -617,7 +616,7 @@ rb_gvar_set(entry, val)
struct trace_data trace;
if (rb_safe_level() >= 4) {
- Raise(eSecurityError, "cannot change global variable value");
+ rb_raise(rb_eSecurityError, "cannot change global variable value");
}
(*entry->setter)(val, entry->id, entry->data, entry);
@@ -645,8 +644,8 @@ VALUE
rb_gvar_defined(entry)
struct global_entry *entry;
{
- if (entry->getter == undef_getter) return FALSE;
- return TRUE;
+ if (entry->getter == undef_getter) return Qfalse;
+ return Qtrue;
}
static int
@@ -655,22 +654,22 @@ gvar_i(key, entry, ary)
struct global_entry *entry;
VALUE ary;
{
- ary_push(ary, str_new2(rb_id2name(key)));
+ rb_ary_push(ary, rb_str_new2(rb_id2name(key)));
return ST_CONTINUE;
}
VALUE
-f_global_variables()
+rb_f_global_variables()
{
- VALUE ary = ary_new();
+ VALUE ary = rb_ary_new();
char buf[4];
char *s = "&`'+123456789";
- st_foreach(global_tbl, gvar_i, ary);
- if (!NIL_P(backref_get())) {
+ st_foreach(rb_global_tbl, gvar_i, ary);
+ if (!NIL_P(rb_backref_get())) {
while (*s) {
sprintf(buf, "$%c", *s++);
- ary_push(ary, str_new2(buf));
+ rb_ary_push(ary, rb_str_new2(buf));
}
}
return ary;
@@ -707,11 +706,13 @@ rb_ivar_get(obj, id)
return val;
return Qnil;
default:
- TypeError("class %s can not have instance variables",
- rb_class2name(CLASS_OF(obj)));
+ rb_raise(rb_eTypeError, "class %s can not have instance variables",
+ rb_class2name(CLASS_OF(obj)));
break;
}
- Warning("instance var %s not initialized", rb_id2name(id));
+ if (rb_verbose) {
+ rb_warning("instance var %s not initialized", rb_id2name(id));
+ }
return Qnil;
}
@@ -722,18 +723,18 @@ rb_ivar_set(obj, id, val)
VALUE val;
{
if (rb_safe_level() >= 5) {
- Raise(eSecurityError, "cannot change object status");
+ rb_raise(rb_eSecurityError, "cannot change object status");
}
switch (TYPE(obj)) {
case T_OBJECT:
case T_CLASS:
case T_MODULE:
- if (!ROBJECT(obj)->iv_tbl) ROBJECT(obj)->iv_tbl = new_idhash();
+ if (!ROBJECT(obj)->iv_tbl) ROBJECT(obj)->iv_tbl = st_init_numtable();
st_insert(ROBJECT(obj)->iv_tbl, id, val);
break;
default:
- TypeError("class %s can not have instance variables",
- rb_class2name(CLASS_OF(obj)));
+ rb_raise(rb_eTypeError, "class %s can not have instance variables",
+ rb_class2name(CLASS_OF(obj)));
break;
}
return val;
@@ -744,17 +745,17 @@ rb_ivar_defined(obj, id)
VALUE obj;
ID id;
{
- if (!rb_is_instance_id(id)) return FALSE;
+ if (!rb_is_instance_id(id)) return Qfalse;
switch (TYPE(obj)) {
case T_OBJECT:
case T_CLASS:
case T_MODULE:
if (ROBJECT(obj)->iv_tbl && st_lookup(ROBJECT(obj)->iv_tbl, id, 0))
- return TRUE;
+ return Qtrue;
break;
}
- return FALSE;
+ return Qfalse;
}
static int
@@ -764,13 +765,13 @@ ivar_i(key, entry, ary)
VALUE ary;
{
if (rb_is_instance_id(key)) {
- ary_push(ary, str_new2(rb_id2name(key)));
+ rb_ary_push(ary, rb_str_new2(rb_id2name(key)));
}
return ST_CONTINUE;
}
VALUE
-obj_instance_variables(obj)
+rb_obj_instance_variables(obj)
VALUE obj;
{
VALUE ary;
@@ -779,7 +780,7 @@ obj_instance_variables(obj)
case T_OBJECT:
case T_CLASS:
case T_MODULE:
- ary = ary_new();
+ ary = rb_ary_new();
if (ROBJECT(obj)->iv_tbl) {
st_foreach(ROBJECT(obj)->iv_tbl, ivar_i, ary);
}
@@ -789,14 +790,15 @@ obj_instance_variables(obj)
}
VALUE
-obj_remove_instance_variable(obj, name)
+rb_obj_remove_instance_variable(obj, name)
VALUE obj, name;
{
VALUE val = Qnil;
ID id = rb_to_id(name);
if (!rb_is_instance_id(id)) {
- NameError("`%s' is not an instance variable", rb_id2name(id));
+ rb_raise(rb_eNameError, "`%s' is not an instance variable",
+ rb_id2name(id));
}
switch (TYPE(obj)) {
@@ -808,8 +810,8 @@ obj_remove_instance_variable(obj, name)
}
break;
default:
- TypeError("object %s can not have instance variables",
- rb_class2name(CLASS_OF(obj)));
+ rb_raise(rb_eTypeError, "object %s can not have instance variables",
+ rb_class2name(CLASS_OF(obj)));
break;
}
return val;
@@ -825,12 +827,12 @@ rb_const_get_at(klass, id)
if (RCLASS(klass)->iv_tbl && st_lookup(RCLASS(klass)->iv_tbl, id, &value)) {
return value;
}
- if (klass == cObject) {
+ if (klass == rb_cObject) {
return rb_const_get(klass, id);
}
- NameError("Uninitialized constant %s::%s",
- RSTRING(rb_class_path(klass))->ptr,
- rb_id2name(id));
+ rb_raise(rb_eNameError, "Uninitialized constant %s::%s",
+ RSTRING(rb_class_path(klass))->ptr,
+ rb_id2name(id));
/* not reached */
}
@@ -851,11 +853,11 @@ rb_const_get(klass, id)
tmp = RCLASS(tmp)->super;
}
if (BUILTIN_TYPE(klass) == T_MODULE) {
- return rb_const_get(cObject, id);
+ return rb_const_get(rb_cObject, id);
}
/* pre-defined class */
- if (st_lookup(class_tbl, id, &value)) return value;
+ if (st_lookup(rb_class_tbl, id, &value)) return value;
/* autoload */
if (autoload_tbl && st_lookup(autoload_tbl, id, 0)) {
@@ -863,19 +865,19 @@ rb_const_get(klass, id)
VALUE module;
st_delete(autoload_tbl, &id, &modname);
- module = str_new2(modname);
+ module = rb_str_new2(modname);
free(modname);
- f_require(0, module);
+ rb_f_require(Qnil, module);
return rb_const_get(klass, id);
}
/* Uninitialized constant */
- if (klass && klass != cObject)
- NameError("Uninitialized constant %s::%s",
- RSTRING(rb_class_path(klass))->ptr,
- rb_id2name(id));
+ if (klass && klass != rb_cObject)
+ rb_raise(rb_eNameError, "Uninitialized constant %s::%s",
+ RSTRING(rb_class_path(klass))->ptr,
+ rb_id2name(id));
else {
- NameError("Uninitialized constant %s",rb_id2name(id));
+ rb_raise(rb_eNameError, "Uninitialized constant %s",rb_id2name(id));
}
/* not reached */
}
@@ -887,34 +889,34 @@ const_i(key, value, ary)
VALUE ary;
{
if (rb_is_const_id(key)) {
- VALUE kval = str_new2(rb_id2name(key));
- if (!ary_includes(ary, kval)) {
- ary_push(ary, kval);
+ VALUE kval = rb_str_new2(rb_id2name(key));
+ if (!rb_ary_includes(ary, kval)) {
+ rb_ary_push(ary, kval);
}
}
return ST_CONTINUE;
}
VALUE
-mod_remove_const(mod, name)
+rb_mod_remove_const(mod, name)
VALUE mod, name;
{
ID id = rb_to_id(name);
VALUE val;
if (!rb_is_const_id(id)) {
- NameError("`%s' is not constant", rb_id2name(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_const_defined_at(mod, id)) {
- NameError("cannot remove %s::%s",
- rb_class2name(mod), rb_id2name(id));
+ rb_raise(rb_eNameError, "cannot remove %s::%s",
+ rb_class2name(mod), rb_id2name(id));
}
- NameError("constant %s::%s not defined",
- rb_class2name(mod), rb_id2name(id));
+ rb_raise(rb_eNameError, "constant %s::%s not defined",
+ rb_class2name(mod), rb_id2name(id));
}
static int
@@ -923,22 +925,22 @@ autoload_i(key, name, ary)
char *name;
VALUE ary;
{
- VALUE kval = str_new2(rb_id2name(key));
- if (!ary_includes(ary, kval)) {
- ary_push(ary, kval);
+ VALUE kval = rb_str_new2(rb_id2name(key));
+ if (!rb_ary_includes(ary, kval)) {
+ rb_ary_push(ary, kval);
}
return ST_CONTINUE;
}
VALUE
-mod_const_at(mod, ary)
+rb_mod_const_at(mod, ary)
VALUE mod, ary;
{
if (RCLASS(mod)->iv_tbl) {
st_foreach(RCLASS(mod)->iv_tbl, const_i, ary);
}
- if ((VALUE)mod == cObject) {
- st_foreach(class_tbl, const_i, ary);
+ if ((VALUE)mod == rb_cObject) {
+ st_foreach(rb_class_tbl, const_i, ary);
if (autoload_tbl) {
st_foreach(autoload_tbl, autoload_i, ary);
}
@@ -947,22 +949,22 @@ mod_const_at(mod, ary)
}
VALUE
-mod_constants(mod)
+rb_mod_constants(mod)
VALUE mod;
{
- return mod_const_at(mod, ary_new());
+ return rb_mod_const_at(mod, rb_ary_new());
}
VALUE
-mod_const_of(mod, ary)
+rb_mod_const_of(mod, ary)
VALUE mod;
VALUE ary;
{
- mod_const_at(mod, ary);
+ rb_mod_const_at(mod, ary);
for (;;) {
mod = RCLASS(mod)->super;
if (!mod) break;
- mod_const_at(mod, ary);
+ rb_mod_const_at(mod, ary);
}
return ary;
}
@@ -973,12 +975,12 @@ rb_const_defined_at(klass, id)
ID id;
{
if (RCLASS(klass)->iv_tbl && st_lookup(RCLASS(klass)->iv_tbl, id, 0)) {
- return TRUE;
+ return Qtrue;
}
- if (klass == cObject) {
+ if (klass == rb_cObject) {
return rb_const_defined(klass, id);
}
- return FALSE;
+ return Qfalse;
}
int
@@ -986,8 +988,8 @@ rb_autoload_defined(id)
ID id;
{
if (autoload_tbl && st_lookup(autoload_tbl, id, 0))
- return TRUE;
- return FALSE;
+ return Qtrue;
+ return Qfalse;
}
int
@@ -999,15 +1001,15 @@ rb_const_defined(klass, id)
while (tmp) {
if (RCLASS(tmp)->iv_tbl && st_lookup(RCLASS(tmp)->iv_tbl,id,0)) {
- return TRUE;
+ return Qtrue;
}
tmp = RCLASS(tmp)->super;
}
if (BUILTIN_TYPE(klass) == T_MODULE) {
- return rb_const_defined(cObject, id);
+ return rb_const_defined(rb_cObject, id);
}
- if (st_lookup(class_tbl, id, 0))
- return TRUE;
+ if (st_lookup(rb_class_tbl, id, 0))
+ return Qtrue;
return rb_autoload_defined(id);
}
@@ -1018,13 +1020,14 @@ rb_const_set(klass, id, val)
VALUE val;
{
if (!RCLASS(klass)->iv_tbl) {
- RCLASS(klass)->iv_tbl = new_idhash();
+ RCLASS(klass)->iv_tbl = st_init_numtable();
}
else if (st_lookup(RCLASS(klass)->iv_tbl, id, 0)) {
- NameError("already initialized constant %s", rb_id2name(id));
+ rb_raise(rb_eNameError, "already initialized constant %s",
+ rb_id2name(id));
}
- st_insert(RCLASS(klass)->iv_tbl, id, val);
+ st_add_direct(RCLASS(klass)->iv_tbl, id, val);
}
void
@@ -1035,7 +1038,7 @@ rb_define_const(klass, name, val)
{
ID id = rb_intern(name);
if (!rb_is_const_id(id)) {
- NameError("wrong constant name %s", name);
+ rb_raise(rb_eNameError, "wrong constant name %s", name);
}
rb_const_set(klass, id, val);
}
@@ -1045,7 +1048,7 @@ rb_define_global_const(name, val)
char *name;
VALUE val;
{
- rb_define_const(cObject, name, val);
+ rb_define_const(rb_cObject, name, val);
}
VALUE