diff options
Diffstat (limited to 'variable.c')
-rw-r--r-- | variable.c | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/variable.c b/variable.c index 1417de0ed3..2c7a0b5d63 100644 --- a/variable.c +++ b/variable.c @@ -908,7 +908,7 @@ rb_generic_ivar_table(VALUE obj) } static VALUE -generic_ivar_get(VALUE obj, ID id, int warn) +generic_ivar_get(VALUE obj, ID id, VALUE undef) { st_data_t tbl, val; @@ -919,10 +919,7 @@ generic_ivar_get(VALUE obj, ID id, int warn) } } } - if (warn) { - rb_warning("instance variable %"PRIsVALUE" not initialized", QUOTE_ID(id)); - } - return Qnil; + return undef; } static void @@ -1071,7 +1068,7 @@ rb_copy_generic_ivar(VALUE clone, VALUE obj) } static VALUE -ivar_get(VALUE obj, ID id, int warn) +rb_ivar_lookup(VALUE obj, ID id, VALUE undef) { VALUE val, *ptr; struct st_table *iv_index_tbl; @@ -1099,25 +1096,28 @@ ivar_get(VALUE obj, ID id, int warn) default: generic: if (FL_TEST(obj, FL_EXIVAR) || rb_special_const_p(obj)) - return generic_ivar_get(obj, id, warn); + return generic_ivar_get(obj, id, undef); break; } - if (warn) { - rb_warning("instance variable %"PRIsVALUE" not initialized", QUOTE_ID(id)); - } - return Qnil; + return undef; } VALUE rb_ivar_get(VALUE obj, ID id) { - return ivar_get(obj, id, TRUE); + VALUE iv = rb_ivar_lookup(obj, id, Qundef); + + if (iv == Qundef) { + rb_warning("instance variable %"PRIsVALUE" not initialized", QUOTE_ID(id)); + iv = Qnil; + } + return iv; } VALUE rb_attr_get(VALUE obj, ID id) { - return ivar_get(obj, id, FALSE); + return rb_ivar_lookup(obj, id, Qnil); } VALUE |