summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog13
-rw-r--r--compile.c4
-rw-r--r--error.c8
-rw-r--r--ext/iconv/iconv.c5
-rw-r--r--gc.c16
-rw-r--r--hash.c24
-rw-r--r--iseq.c4
-rw-r--r--marshal.c4
-rw-r--r--thread.c4
-rw-r--r--variable.c20
-rw-r--r--vm.c2
-rw-r--r--vm_insnhelper.c4
-rw-r--r--vm_method.c5
13 files changed, 73 insertions, 40 deletions
diff --git a/ChangeLog b/ChangeLog
index cf19dfb8e3..971a1bb35b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,15 @@
-Tue Oct 12 23:35:37 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+Tue Oct 12 23:47:18 2010 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * compile.c (iseq_build_body), error.c (set_syserr, get_syserr),
+ (syserr_initialize), gc.c (define_final, rb_gc_copy_finalizer),
+ (run_final), hash.c (rb_hash_aref, rb_hash_lookup2),
+ (rb_hash_fetch_m, rb_hash_clear, rb_hash_aset, eql_i),
+ iseq.c (iseq_load, iseq_data_to_ary), marshal.c (r_symlink),
+ thread.c (rb_thread_local_aref),
+ variable.c (generic_ivar_remove, ivar_get, rb_const_get_0),
+ (rb_cvar_get), vm.c (rb_vm_check_redefinition_opt_method),
+ vm_insnhelper.c (vm_get_ev_const), vm_method.c (remove_method),
+ ext/iconv/iconv.c (map_charset): use st_data_t.
* compile.c (iseq_build_body), insns.def (getglobal, setglobal),
iseq.c (iseq_load, iseq_data_to_ary), util.c (valid_filename):
diff --git a/compile.c b/compile.c
index d73e669769..4ee20d458b 100644
--- a/compile.c
+++ b/compile.c
@@ -5257,11 +5257,11 @@ iseq_build_body(rb_iseq_t *iseq, LINK_ANCHOR *anchor,
else if (TYPE(obj) == T_ARRAY) {
VALUE *argv = 0;
int argc = RARRAY_LENINT(obj) - 1;
- VALUE insn_id;
+ st_data_t insn_id;
VALUE insn;
insn = (argc < 0) ? Qnil : RARRAY_PTR(obj)[0];
- if (st_lookup(insn_table, insn, &insn_id) == 0) {
+ if (st_lookup(insn_table, (st_data_t)insn, &insn_id) == 0) {
/* TODO: exception */
RB_GC_GUARD(insn) = rb_inspect(insn);
rb_compile_error(RSTRING_PTR(iseq->filename), line_no,
diff --git a/error.c b/error.c
index cbeb9ee391..3863fb798c 100644
--- a/error.c
+++ b/error.c
@@ -980,7 +980,7 @@ static st_table *syserr_tbl;
static VALUE
set_syserr(int n, const char *name)
{
- VALUE error;
+ st_data_t error;
if (!st_lookup(syserr_tbl, n, &error)) {
error = rb_define_class_under(rb_mErrno, name, rb_eSystemCallError);
@@ -996,7 +996,7 @@ set_syserr(int n, const char *name)
static VALUE
get_syserr(int n)
{
- VALUE error;
+ st_data_t error;
if (!st_lookup(syserr_tbl, n, &error)) {
char name[8]; /* some Windows' errno have 5 digits. */
@@ -1029,11 +1029,13 @@ syserr_initialize(int argc, VALUE *argv, VALUE self)
VALUE klass = rb_obj_class(self);
if (klass == rb_eSystemCallError) {
+ st_data_t data = (st_data_t)klass;
rb_scan_args(argc, argv, "11", &mesg, &error);
if (argc == 1 && FIXNUM_P(mesg)) {
error = mesg; mesg = Qnil;
}
- if (!NIL_P(error) && st_lookup(syserr_tbl, NUM2LONG(error), &klass)) {
+ if (!NIL_P(error) && st_lookup(syserr_tbl, NUM2LONG(error), &data)) {
+ klass = (VALUE)data;
/* change class */
if (TYPE(self) != T_OBJECT) { /* insurance to avoid type crash */
rb_raise(rb_eTypeError, "invalid instance type");
diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c
index ff30c4e13a..d2cb4ddf11 100644
--- a/ext/iconv/iconv.c
+++ b/ext/iconv/iconv.c
@@ -164,10 +164,11 @@ map_charset(VALUE *code)
VALUE val = StringValue(*code);
if (RHASH_SIZE(charset_map)) {
+ st_data_t data;
VALUE key = rb_funcall2(val, rb_intern("downcase"), 0, 0);
StringValuePtr(key);
- if (st_lookup(RHASH_TBL(charset_map), key, &val)) {
- *code = val;
+ if (st_lookup(RHASH_TBL(charset_map), key, &data)) {
+ *code = (VALUE)data;
}
}
return StringValuePtr(*code);
diff --git a/gc.c b/gc.c
index b7343fb420..06724221ba 100644
--- a/gc.c
+++ b/gc.c
@@ -2699,6 +2699,7 @@ define_final(int argc, VALUE *argv, VALUE os)
{
rb_objspace_t *objspace = &rb_objspace;
VALUE obj, block, table;
+ st_data_t data;
rb_scan_args(argc, argv, "11", &obj, &block);
if (OBJ_FROZEN(obj)) rb_error_frozen("object");
@@ -2721,7 +2722,8 @@ define_final(int argc, VALUE *argv, VALUE os)
if (!finalizer_table) {
finalizer_table = st_init_numtable();
}
- if (st_lookup(finalizer_table, obj, &table)) {
+ if (st_lookup(finalizer_table, obj, &data)) {
+ table = (VALUE)data;
rb_ary_push(table, block);
}
else {
@@ -2737,10 +2739,12 @@ rb_gc_copy_finalizer(VALUE dest, VALUE obj)
{
rb_objspace_t *objspace = &rb_objspace;
VALUE table;
+ st_data_t data;
if (!finalizer_table) return;
if (!FL_TEST(obj, FL_FINALIZE)) return;
- if (st_lookup(finalizer_table, obj, &table)) {
+ if (st_lookup(finalizer_table, obj, &data)) {
+ table = (VALUE)data;
st_insert(finalizer_table, dest, table);
}
FL_SET(dest, FL_FINALIZE);
@@ -2777,8 +2781,9 @@ run_finalizer(rb_objspace_t *objspace, VALUE obj, VALUE objid, VALUE table)
static void
run_final(rb_objspace_t *objspace, VALUE obj)
{
- VALUE table, objid;
+ VALUE objid;
RUBY_DATA_FUNC free_func = 0;
+ st_data_t key, table;
objid = rb_obj_id(obj); /* make obj into id */
RBASIC(obj)->klass = 0;
@@ -2793,9 +2798,10 @@ run_final(rb_objspace_t *objspace, VALUE obj)
(*free_func)(DATA_PTR(obj));
}
+ key = (st_data_t)obj;
if (finalizer_table &&
- st_delete(finalizer_table, (st_data_t*)&obj, &table)) {
- run_finalizer(objspace, obj, objid, table);
+ st_delete(finalizer_table, &key, &table)) {
+ run_finalizer(objspace, obj, objid, (VALUE)table);
}
}
diff --git a/hash.c b/hash.c
index 3e1731d5a3..8b165735d9 100644
--- a/hash.c
+++ b/hash.c
@@ -506,23 +506,23 @@ rb_hash_rehash(VALUE hash)
VALUE
rb_hash_aref(VALUE hash, VALUE key)
{
- VALUE val;
+ st_data_t val;
if (!RHASH(hash)->ntbl || !st_lookup(RHASH(hash)->ntbl, key, &val)) {
return rb_funcall(hash, id_default, 1, key);
}
- return val;
+ return (VALUE)val;
}
VALUE
rb_hash_lookup2(VALUE hash, VALUE key, VALUE def)
{
- VALUE val;
+ st_data_t val;
if (!RHASH(hash)->ntbl || !st_lookup(RHASH(hash)->ntbl, key, &val)) {
return def; /* without Hash#default */
}
- return val;
+ return (VALUE)val;
}
VALUE
@@ -564,7 +564,7 @@ static VALUE
rb_hash_fetch_m(int argc, VALUE *argv, VALUE hash)
{
VALUE key, if_none;
- VALUE val;
+ st_data_t val;
long block_given;
rb_scan_args(argc, argv, "11", &key, &if_none);
@@ -584,7 +584,7 @@ rb_hash_fetch_m(int argc, VALUE *argv, VALUE hash)
}
return if_none;
}
- return val;
+ return (VALUE)val;
}
VALUE
@@ -1094,6 +1094,12 @@ rb_hash_clear(VALUE hash)
return hash;
}
+static st_data_t
+copy_str_key(st_data_t str)
+{
+ return (st_data_t)rb_str_new4((VALUE)str);
+}
+
/*
* call-seq:
* hsh[key] = value -> value
@@ -1121,7 +1127,7 @@ rb_hash_aset(VALUE hash, VALUE key, VALUE val)
st_insert(RHASH(hash)->ntbl, key, val);
}
else {
- st_insert2(RHASH(hash)->ntbl, key, val, rb_str_new4);
+ st_insert2(RHASH(hash)->ntbl, key, val, copy_str_key);
}
return val;
}
@@ -1548,14 +1554,14 @@ static int
eql_i(VALUE key, VALUE val1, VALUE arg)
{
struct equal_data *data = (struct equal_data *)arg;
- VALUE val2;
+ st_data_t val2;
if (key == Qundef) return ST_CONTINUE;
if (!st_lookup(data->tbl, key, &val2)) {
data->result = Qfalse;
return ST_STOP;
}
- if (!(data->eql ? rb_eql(val1, val2) : (int)rb_equal(val1, val2))) {
+ if (!(data->eql ? rb_eql(val1, (VALUE)val2) : (int)rb_equal(val1, (VALUE)val2))) {
data->result = Qfalse;
return ST_STOP;
}
diff --git a/iseq.c b/iseq.c
index 2bdac2b199..a0d600033f 100644
--- a/iseq.c
+++ b/iseq.c
@@ -446,7 +446,7 @@ iseq_load(VALUE self, VALUE data, VALUE parent, VALUE opt)
VALUE name, filename, filepath, line_no;
VALUE type, body, locals, args, exception;
- VALUE iseq_type;
+ st_data_t iseq_type;
struct st_table *type_map = 0;
rb_iseq_t *iseq;
rb_compile_option_t option;
@@ -1304,7 +1304,7 @@ iseq_data_to_ary(rb_iseq_t *iseq)
for (i=0, pos=0; i<RARRAY_LEN(nbody); i++) {
VALUE ary = RARRAY_PTR(nbody)[i];
- VALUE label;
+ st_data_t label;
if (st_lookup(labels_table, pos, &label)) {
rb_ary_push(body, (VALUE)label);
diff --git a/marshal.c b/marshal.c
index d3f7002eb5..d2ffbd4aac 100644
--- a/marshal.c
+++ b/marshal.c
@@ -1137,11 +1137,11 @@ id2encidx(ID id, VALUE val)
static ID
r_symlink(struct load_arg *arg)
{
- ID id;
+ st_data_t id;
long num = r_long(arg);
if (st_lookup(arg->symbols, num, &id)) {
- return id;
+ return (ID)id;
}
rb_raise(rb_eArgError, "bad symbol");
}
diff --git a/thread.c b/thread.c
index 3cdc8b79b8..294df1a258 100644
--- a/thread.c
+++ b/thread.c
@@ -1986,7 +1986,7 @@ VALUE
rb_thread_local_aref(VALUE thread, ID id)
{
rb_thread_t *th;
- VALUE val;
+ st_data_t val;
GetThreadPtr(thread, th);
if (rb_safe_level() >= 4 && th != GET_THREAD()) {
@@ -1996,7 +1996,7 @@ rb_thread_local_aref(VALUE thread, ID id)
return Qnil;
}
if (st_lookup(th->local_storage, id, &val)) {
- return val;
+ return (VALUE)val;
}
return Qnil;
}
diff --git a/variable.c b/variable.c
index 6c653ca1d4..0316a902ac 100644
--- a/variable.c
+++ b/variable.c
@@ -885,15 +885,16 @@ static int
generic_ivar_remove(VALUE obj, ID id, st_data_t *valp)
{
st_table *tbl;
- st_data_t data;
+ st_data_t data, key = (st_data_t)id;
int status;
if (!generic_iv_tbl) return 0;
if (!st_lookup(generic_iv_tbl, (st_data_t)obj, &data)) return 0;
tbl = (st_table *)data;
- status = st_delete(tbl, &id, valp);
+ status = st_delete(tbl, &key, valp);
if (tbl->num_entries == 0) {
- st_delete(generic_iv_tbl, &obj, &data);
+ key = (st_data_t)obj;
+ st_delete(generic_iv_tbl, &key, &data);
st_free_table((st_table *)data);
}
return status;
@@ -1006,8 +1007,8 @@ ivar_get(VALUE obj, ID id, int warn)
break;
case T_CLASS:
case T_MODULE:
- if (RCLASS_IV_TBL(obj) && st_lookup(RCLASS_IV_TBL(obj), (st_data_t)id, &val))
- return val;
+ if (RCLASS_IV_TBL(obj) && st_lookup(RCLASS_IV_TBL(obj), (st_data_t)id, &index))
+ return (VALUE)index;
break;
default:
if (FL_TEST(obj, FL_EXIVAR) || rb_special_const_p(obj))
@@ -1575,7 +1576,9 @@ rb_const_get_0(VALUE klass, ID id, int exclude, int recurse)
retry:
while (RTEST(tmp)) {
VALUE am = 0;
- while (RCLASS_IV_TBL(tmp) && st_lookup(RCLASS_IV_TBL(tmp), (st_data_t)id, &value)) {
+ st_data_t data;
+ while (RCLASS_IV_TBL(tmp) && st_lookup(RCLASS_IV_TBL(tmp), (st_data_t)id, &data)) {
+ value = (VALUE)data;
if (value == Qundef) {
if (am == tmp) break;
am = tmp;
@@ -1937,7 +1940,8 @@ rb_cvar_set(VALUE klass, ID id, VALUE val)
VALUE
rb_cvar_get(VALUE klass, ID id)
{
- VALUE value, tmp, front = 0, target = 0;
+ VALUE tmp, front = 0, target = 0;
+ st_data_t value;
tmp = klass;
CVAR_LOOKUP(&value, {if (!front) front = klass; target = klass;});
@@ -1957,7 +1961,7 @@ rb_cvar_get(VALUE klass, ID id)
st_delete(RCLASS_IV_TBL(front),&did,0);
}
}
- return value;
+ return (VALUE)value;
}
VALUE
diff --git a/vm.c b/vm.c
index 25d2896ed3..39debd5bf8 100644
--- a/vm.c
+++ b/vm.c
@@ -948,7 +948,7 @@ static st_table *vm_opt_method_table = 0;
static void
rb_vm_check_redefinition_opt_method(const rb_method_entry_t *me)
{
- VALUE bop;
+ st_data_t bop;
if (!me->def || me->def->type == VM_METHOD_TYPE_CFUNC) {
if (st_lookup(vm_opt_method_table, (st_data_t)me, &bop)) {
ruby_vm_redefined_flag[bop] = 1;
diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index 46326d1de4..ac24cd1ffc 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -1167,9 +1167,11 @@ vm_get_ev_const(rb_thread_t *th, const rb_iseq_t *iseq,
if (!NIL_P(klass)) {
VALUE am = 0;
+ st_data_t data;
search_continue:
if (RCLASS_IV_TBL(klass) &&
- st_lookup(RCLASS_IV_TBL(klass), id, &val)) {
+ st_lookup(RCLASS_IV_TBL(klass), id, &data)) {
+ val = (st_data_t)data;
if (val == Qundef) {
if (am == klass) break;
am = klass;
diff --git a/vm_method.c b/vm_method.c
index 50f0b12e5a..a76277c81d 100644
--- a/vm_method.c
+++ b/vm_method.c
@@ -454,7 +454,7 @@ rb_method_entry(VALUE klass, ID id)
static void
remove_method(VALUE klass, ID mid)
{
- st_data_t data;
+ st_data_t key, data;
rb_method_entry_t *me = 0;
if (klass == rb_cObject) {
@@ -475,7 +475,8 @@ remove_method(VALUE klass, ID mid)
rb_name_error(mid, "method `%s' not defined in %s",
rb_id2name(mid), rb_class2name(klass));
}
- st_delete(RCLASS_M_TBL(klass), &mid, &data);
+ key = (st_data_t)mid;
+ st_delete(RCLASS_M_TBL(klass), &key, &data);
rb_vm_check_redefinition_opt_method(me);
rb_clear_cache_for_undef(klass, mid);