diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-07-14 15:17:19 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2001-07-14 15:17:19 +0000 |
commit | 03d1c9cd8238af6f1063ea4eb98d17fa2a511107 (patch) | |
tree | c4ee7cef5ccad7d2c73aa61eb586b3f68267699c /object.c | |
parent | f4b516777be7c1403deba3cfc653dcfb56f3d7f4 (diff) |
* regex.c (re_search): should consider reverse search.
* dir.c (dir_s_chdir): warn only when invoked from multiple
threads or block is not given.
* object.c (rb_convert_type): should use rb_rescue(), not rb_rescue2().
* range.c (range_init): ditto.
* object.c (rb_obj_dup): should free generic_ivar if original owns
them.
* string.c (rb_str_each_line): should propagate taint mark.
* ext/nkf/nkf.c (rb_nkf_kconv): ditto.
* eval.c (rb_f_require): revamp for simpler implementation.
* file.c (rb_find_file_noext): use String object, instead of
passing char* around.
* file.c (rb_find_file): ditto.
* dln.c (dln_load): should use NSLINKMODULE_OPTION_BINDNOW.
* ruby.c (load_file): local variables 'c' remain uninitialized on
xflag.
* regex.c (re_match): prefetched escaped character too early.
* eval.c (rb_call0): add argument check for attr_readers.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1612 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'object.c')
-rw-r--r-- | object.c | 20 |
1 files changed, 14 insertions, 6 deletions
@@ -70,12 +70,10 @@ rb_obj_id(obj) return (VALUE)((long)obj|FIXNUM_FLAG); } -static VALUE -rb_obj_type(obj) - VALUE obj; +VALUE +rb_class_real(cl) + VALUE cl; { - VALUE cl = CLASS_OF(obj); - while (FL_TEST(cl, FL_SINGLETON) || TYPE(cl) == T_ICLASS) { cl = RCLASS(cl)->super; } @@ -83,6 +81,13 @@ rb_obj_type(obj) } VALUE +rb_obj_type(obj) + VALUE obj; +{ + return rb_class_real(CLASS_OF(obj)); +} + +VALUE rb_obj_clone(obj) VALUE obj; { @@ -113,6 +118,9 @@ rb_obj_dup(obj) if (!SPECIAL_CONST_P(dup)) { OBJSETUP(dup, rb_obj_type(obj), BUILTIN_TYPE(obj)); OBJ_INFECT(dup, obj); + if (FL_TEST(obj, FL_EXIVAR)) { + FL_SET(dup, FL_EXIVAR); + } } return dup; } @@ -866,7 +874,7 @@ rb_convert_type(val, type, tname, method) arg1.val = arg2.val = val; arg1.s = method; arg2.s = tname; - val = rb_rescue2(to_type, (VALUE)&arg1, fail_to_type, (VALUE)&arg2); + val = rb_rescue(to_type, (VALUE)&arg1, fail_to_type, (VALUE)&arg2); if (TYPE(val) != type) { rb_raise(rb_eTypeError, "%s#%s should return %s", rb_class2name(CLASS_OF(arg1.val)), method, tname); |