summaryrefslogtreecommitdiff
path: root/object.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-07-14 15:17:19 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-07-14 15:17:19 +0000
commit03d1c9cd8238af6f1063ea4eb98d17fa2a511107 (patch)
treec4ee7cef5ccad7d2c73aa61eb586b3f68267699c /object.c
parentf4b516777be7c1403deba3cfc653dcfb56f3d7f4 (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.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/object.c b/object.c
index 2d70029f0b..e34bb23b1b 100644
--- a/object.c
+++ b/object.c
@@ -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);