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 /string.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 'string.c')
-rw-r--r-- | string.c | 13 |
1 files changed, 4 insertions, 9 deletions
@@ -100,11 +100,7 @@ rb_str_new4(orig) { VALUE klass; - klass = CLASS_OF(orig); - while (TYPE(klass) == T_ICLASS || FL_TEST(klass, FL_SINGLETON)) { - klass = (VALUE)RCLASS(klass)->super; - } - + klass = rb_obj_type(orig); if (RSTRING(orig)->orig) { VALUE str; @@ -252,10 +248,7 @@ rb_str_dup(str) VALUE klass; StringValue(str); - klass = CLASS_OF(str); - while (TYPE(klass) == T_ICLASS || FL_TEST(klass, FL_SINGLETON)) { - klass = (VALUE)RCLASS(klass)->super; - } + klass = rb_obj_type(str); if (OBJ_FROZEN(str)) str2 = rb_str_new3(str); else if (FL_TEST(str, STR_NO_ORIG)) { @@ -267,6 +260,8 @@ rb_str_dup(str) else { str2 = rb_str_new3(rb_str_new4(str)); } + if (FL_TEST(str, FL_EXIVAR)) + rb_copy_generic_ivar(str2, str); OBJ_INFECT(str2, str); RBASIC(str2)->klass = klass; return str2; |