diff --git a/ChangeLog b/ChangeLog index 9638f2e2c0..14c7030d81 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,8 +1,14 @@ -Mon Jun 18 00:58:14 2007 Nobuyoshi Nakada +Mon Jun 18 01:14:10 2007 Nobuyoshi Nakada * variable.c (rb_path2class): get rid of dangling pointer caused by optimized out value. + * variable.c (rb_global_entry, rb_f_untrace_var, rb_alias_variable, + rb_generic_ivar_table, generic_ivar_get, generic_ivar_set, + generic_ivar_defined, generic_ivar_remove, rb_mark_generic_ivar, + rb_free_generic_ivar, rb_copy_generic_ivar, + rb_obj_instance_variables): suppress warnings. + Fri Jun 15 22:33:29 2007 Nobuyoshi Nakada * common.mk (realclean): separate local and ext. diff --git a/variable.c b/variable.c index e00f1ef6eb..8b6aa74955 100644 --- a/variable.c +++ b/variable.c @@ -347,8 +347,9 @@ rb_global_entry(id) ID id; { struct global_entry *entry; + st_data_t data; - if (!st_lookup(rb_global_tbl, id, (st_data_t *)&entry)) { + if (!st_lookup(rb_global_tbl, id, &data)) { struct global_variable *var; entry = ALLOC(struct global_entry); var = ALLOC(struct global_variable); @@ -364,6 +365,9 @@ rb_global_entry(id) var->trace = 0; st_add_direct(rb_global_tbl, id, (st_data_t)entry); } + else { + entry = (struct global_entry *)data; + } return entry; } @@ -641,14 +645,15 @@ rb_f_untrace_var(argc, argv) ID id; struct global_entry *entry; struct trace_var *trace; + st_data_t data; rb_scan_args(argc, argv, "11", &var, &cmd); id = rb_to_id(var); - if (!st_lookup(rb_global_tbl, id, (st_data_t *)&entry)) { + if (!st_lookup(rb_global_tbl, id, &data)) { rb_name_error(id, "undefined global variable %s", rb_id2name(id)); } - trace = entry->var->trace; + trace = (entry = (struct global_entry *)data)->var->trace; if (NIL_P(cmd)) { VALUE ary = rb_ary_new(); @@ -802,17 +807,18 @@ rb_alias_variable(name1, name2) ID name2; { struct global_entry *entry1, *entry2; + st_data_t data1; if (rb_safe_level() >= 4) rb_raise(rb_eSecurityError, "Insecure: can't alias global variable"); entry2 = rb_global_entry(name2); - if (!st_lookup(rb_global_tbl, name1, (st_data_t *)&entry1)) { + if (!st_lookup(rb_global_tbl, name1, &data1)) { entry1 = ALLOC(struct global_entry); entry1->id = name1; st_add_direct(rb_global_tbl, name1, (st_data_t)entry1); } - else if (entry1->var != entry2->var) { + else if ((entry1 = (struct global_entry *)data1)->var != entry2->var) { struct global_variable *var = entry1->var; if (var->block_trace) { rb_raise(rb_eRuntimeError, "can't alias in tracer"); @@ -842,12 +848,12 @@ st_table* rb_generic_ivar_table(obj) VALUE obj; { - st_table *tbl; + st_data_t tbl; if (!FL_TEST(obj, FL_EXIVAR)) return 0; if (!generic_iv_tbl) return 0; - if (!st_lookup(generic_iv_tbl, obj, (st_data_t *)&tbl)) return 0; - return tbl; + if (!st_lookup(generic_iv_tbl, obj, &tbl)) return 0; + return (st_table *)tbl; } static VALUE @@ -856,15 +862,15 @@ generic_ivar_get(obj, id, warn) ID id; int warn; { - st_table *tbl; + st_data_t tbl; VALUE val; if (generic_iv_tbl) { - if (st_lookup(generic_iv_tbl, obj, (st_data_t *)&tbl)) { - if (st_lookup(tbl, id, &val)) { - return val; + if (st_lookup(generic_iv_tbl, obj, &tbl)) { + if (st_lookup((st_table *)tbl, id, &val)) { + return val; + } } - } } if (warn) { rb_warning("instance variable %s not initialized", rb_id2name(id)); @@ -879,6 +885,7 @@ generic_ivar_set(obj, id, val) VALUE val; { st_table *tbl; + st_data_t data; if (rb_special_const_p(obj)) { special_generic_ivar = 1; @@ -887,14 +894,14 @@ generic_ivar_set(obj, id, val) generic_iv_tbl = st_init_numtable(); } - if (!st_lookup(generic_iv_tbl, obj, (st_data_t *)&tbl)) { + if (!st_lookup(generic_iv_tbl, obj, &data)) { FL_SET(obj, FL_EXIVAR); tbl = st_init_numtable(); st_add_direct(generic_iv_tbl, obj, (st_data_t)tbl); st_add_direct(tbl, id, val); return; } - st_insert(tbl, id, val); + st_insert((st_table *)data, id, val); } static VALUE @@ -903,10 +910,12 @@ generic_ivar_defined(obj, id) ID id; { st_table *tbl; + st_data_t data; VALUE val; if (!generic_iv_tbl) return Qfalse; - if (!st_lookup(generic_iv_tbl, obj, (st_data_t *)&tbl)) return Qfalse; + if (!st_lookup(generic_iv_tbl, obj, &data)) return Qfalse; + tbl = (st_table *)data; if (st_lookup(tbl, id, &val)) { return Qtrue; } @@ -920,14 +929,16 @@ generic_ivar_remove(obj, id, valp) VALUE *valp; { st_table *tbl; + st_data_t data; int status; if (!generic_iv_tbl) return 0; - if (!st_lookup(generic_iv_tbl, obj, (st_data_t *)&tbl)) return 0; + if (!st_lookup(generic_iv_tbl, obj, &data)) return 0; + tbl = (st_table *)data; status = st_delete(tbl, &id, valp); if (tbl->num_entries == 0) { - st_delete(generic_iv_tbl, &obj, (st_data_t *)&tbl); - st_free_table(tbl); + st_delete(generic_iv_tbl, &obj, &data); + st_free_table((st_table *)data); } return status; } @@ -936,11 +947,11 @@ void rb_mark_generic_ivar(obj) VALUE obj; { - st_table *tbl; + st_data_t tbl; if (!generic_iv_tbl) return; - if (st_lookup(generic_iv_tbl, obj, (st_data_t *)&tbl)) { - rb_mark_tbl(tbl); + if (st_lookup(generic_iv_tbl, obj, &tbl)) { + rb_mark_tbl((st_table *)tbl); } } @@ -976,24 +987,26 @@ void rb_free_generic_ivar(obj) VALUE obj; { - st_table *tbl; + st_data_t tbl; - if (st_delete(generic_iv_tbl, &obj, (st_data_t *)&tbl)) - st_free_table(tbl); + if (!generic_iv_tbl) return; + if (st_delete(generic_iv_tbl, &obj, &tbl)) + st_free_table((st_table *)tbl); } void rb_copy_generic_ivar(clone, obj) VALUE clone, obj; { - st_table *tbl; + st_data_t data; if (!generic_iv_tbl) return; - if (st_lookup(generic_iv_tbl, obj, (st_data_t *)&tbl)) { - st_table *old; + if (!FL_TEST(obj, FL_EXIVAR)) return; + if (st_lookup(generic_iv_tbl, obj, &data)) { + st_table *tbl = (st_table *)data; - if (st_lookup(generic_iv_tbl, clone, (st_data_t *)&old)) { - st_free_table(old); + if (st_lookup(generic_iv_tbl, clone, &data)) { + st_free_table((st_table *)data); st_insert(generic_iv_tbl, clone, (st_data_t)st_copy(tbl)); } else { @@ -1134,10 +1147,10 @@ rb_obj_instance_variables(obj) default: if (!generic_iv_tbl) break; if (FL_TEST(obj, FL_EXIVAR) || rb_special_const_p(obj)) { - st_table *tbl; + st_data_t tbl; - if (st_lookup(generic_iv_tbl, obj, (st_data_t *)&tbl)) { - st_foreach_safe(tbl, ivar_i, ary); + if (st_lookup(generic_iv_tbl, obj, &tbl)) { + st_foreach_safe((st_table *)tbl, ivar_i, ary); } } break;