From: Koji Arai Date: 1999-07-16T11:35:42+09:00 Subject: [ruby-dev:7334] Re: [ruby-list:15459] Re: chomp で nil が返るのは? 新井です。 # ruby-list から移動しました >>> From: Koji Arai >>> Date: 15 Jul 1999 22:40:05 +0900 >>> Subject: [ruby-list:15459] Re: chompで nil が返るのは? > 新井です。 > > なぜか以前の仕様に戻してますね. > > 1.2.6 や 1.3.4-990531 あたりからそうなってるみたい. > > 基本的にはドキュメントのほうが正しいはずです. > > なるほど、だから今までハマらなかったんですね。 > では、1.3系のバージョンアップを待ってます。 待ちきれませんでした (^^; 確認用のスクリプトと1.3.4-990625へのパッチを添付し てます。既にまつもとさんの方で修正しているようなら 確認用のスクリプトも使ってみてください。 squeezeに些細なバグがあったのでこれもfixしてます。 # あっ1.3.5って出てたんですね。取って来なきゃ #!/usr/local/bin/ruby def warn puts "Warning at #{caller}" end $_ = "a" $_.id == gsub(/b/, "").id and warn $_.id == sub(/b/, "").id and warn $_ = "" $_.id == chop.id and warn $_.id == chomp.id and warn s = "a" s.id == s.gsub(/b/, "").id and warn s.id == s.sub(/b/, "").id and warn s.id == s.downcase.id and warn s = "A" s.id == s.upcase.id and warn s.id == s.capitalize.id and warn s = "!" s.id == s.swapcase.id and warn s.id == s.tr("a", "b").id and warn s.id == s.delete("a").id and warn s.id == s.squeeze("a").id and warn # squeeze! が nil を返さない(ver 1.2.6) s.squeeze!("a") and warn # squeeze! が 先頭の \xff を削除する(ver 1.2.6、1.3.4-990625) "\xff".squeeze!("\xff") and warn s.id == s.tr_s("a", "b").id and warn s = "" s.id == s.chop.id and warn s.id == s.chomp.id and warn s.id == s.strip.id and warn s.id == s.reverse.id and warn __END__ --- string.c.org Tue Jul 13 23:41:16 1999 +++ string.c Fri Jul 16 01:37:50 1999 @@ -1031,7 +1031,7 @@ rb_str_sub(argc, argv, str) VALUE *argv; VALUE str; { - VALUE val = rb_str_sub_bang(argc, argv, rb_str_dup(str)); + VALUE val = rb_str_sub_bang(argc, argv, str = rb_str_dup(str)); if (NIL_P(val)) return str; return val; @@ -1138,7 +1138,7 @@ rb_str_gsub(argc, argv, str) VALUE *argv; VALUE str; { - VALUE val = rb_str_gsub_bang(argc, argv, rb_str_dup(str)); + VALUE val = rb_str_gsub_bang(argc, argv, str = rb_str_dup(str)); if (NIL_P(val)) return str; return val; @@ -1185,8 +1185,8 @@ rb_f_sub(argc, argv) { VALUE line, v; - line = uscore_get(); - v = rb_str_sub_bang(argc, argv, rb_str_dup(line)); + line = rb_str_dup(uscore_get()); + v = rb_str_sub_bang(argc, argv, line); if (NIL_P(v)) return line; rb_lastline_set(v); return v; @@ -1207,8 +1207,8 @@ rb_f_gsub(argc, argv) { VALUE line, v; - line = uscore_get(); - v = rb_str_gsub_bang(argc, argv, rb_str_dup(line)); + line = rb_str_dup(uscore_get()); + v = rb_str_gsub_bang(argc, argv, line); if (NIL_P(v)) return line; rb_lastline_set(v); return v; @@ -1239,7 +1239,7 @@ rb_str_reverse(str) VALUE obj; char *s, *e, *p; - if (RSTRING(str)->len <= 1) return str; + if (RSTRING(str)->len <= 1) return rb_str_dup(str); obj = rb_str_new(0, RSTRING(str)->len); s = RSTRING(str)->ptr; e = s + RSTRING(str)->len - 1; @@ -1512,7 +1512,7 @@ static VALUE rb_str_upcase(str) VALUE str; { - VALUE val = rb_str_upcase_bang(rb_str_dup(str)); + VALUE val = rb_str_upcase_bang(str = rb_str_dup(str)); if (NIL_P(val)) return str; return val; @@ -1546,7 +1546,7 @@ static VALUE rb_str_downcase(str) VALUE str; { - VALUE val = rb_str_downcase_bang(rb_str_dup(str)); + VALUE val = rb_str_downcase_bang(str = rb_str_dup(str)); if (NIL_P(val)) return str; return val; @@ -1582,7 +1582,7 @@ static VALUE rb_str_capitalize(str) VALUE str; { - VALUE val = rb_str_capitalize_bang(rb_str_dup(str)); + VALUE val = rb_str_capitalize_bang(str = rb_str_dup(str)); if (NIL_P(val)) return str; return val; @@ -1620,7 +1620,7 @@ static VALUE rb_str_swapcase(str) VALUE str; { - VALUE val = rb_str_swapcase_bang(rb_str_dup(str)); + VALUE val = rb_str_swapcase_bang(str = rb_str_dup(str)); if (NIL_P(val)) return str; return val; @@ -1771,7 +1771,7 @@ static VALUE rb_str_tr(str, src, repl) VALUE str, src, repl; { - VALUE val = tr_trans(rb_str_dup(str), src, repl, 0); + VALUE val = tr_trans(str = rb_str_dup(str), src, repl, 0); if (NIL_P(val)) return str; return val; @@ -1855,7 +1855,7 @@ rb_str_delete(argc, argv, str) VALUE *argv; VALUE str; { - VALUE val = rb_str_delete_bang(argc, argv, rb_str_dup(str)); + VALUE val = rb_str_delete_bang(argc, argv, str = rb_str_dup(str)); if (NIL_P(val)) return str; return val; @@ -1869,7 +1869,7 @@ rb_str_squeeze_bang(argc, argv, str) { char squeez[256]; char *s, *send, *t; - char c, save, modify = 0; + int c, save, modify = 0; int init = 1; int i; @@ -1896,7 +1896,7 @@ rb_str_squeeze_bang(argc, argv, str) save = -1; while (s < send) { c = *s++ & 0xff; - if (c != save || !squeez[c & 0xff]) { + if (c != save || !squeez[c]) { *t++ = save = c; } } @@ -1916,7 +1916,7 @@ rb_str_squeeze(argc, argv, str) VALUE *argv; VALUE str; { - VALUE val = rb_str_squeeze_bang(argc, argv, rb_str_dup(str)); + VALUE val = rb_str_squeeze_bang(argc, argv, str = rb_str_dup(str)); if (NIL_P(val)) return str; return val; @@ -1933,7 +1933,7 @@ static VALUE rb_str_tr_s(str, src, repl) VALUE str, src, repl; { - VALUE val = tr_trans(rb_str_dup(str), src, repl, 1); + VALUE val = tr_trans(str = rb_str_dup(str), src, repl, 1); if (NIL_P(val)) return str; return val; @@ -2222,7 +2222,7 @@ static VALUE rb_str_chop(str) VALUE str; { - VALUE val = rb_str_chop_bang(rb_str_dup(str)); + VALUE val = rb_str_chop_bang(str = rb_str_dup(str)); if (NIL_P(val)) return str; return val; @@ -2238,8 +2238,8 @@ rb_f_chop_bang(str) static VALUE rb_f_chop() { - VALUE str = uscore_get(); - VALUE val = rb_str_chop_bang(rb_str_dup(str)); + VALUE str = rb_str_dup(uscore_get()); + VALUE val = rb_str_chop_bang(str); if (NIL_P(val)) return str; rb_lastline_set(val); @@ -2295,7 +2295,7 @@ rb_str_chomp(argc, argv, str) VALUE *argv; VALUE str; { - VALUE val = rb_str_chomp_bang(argc, argv, rb_str_dup(str)); + VALUE val = rb_str_chomp_bang(argc, argv, str = rb_str_dup(str)); if (NIL_P(val)) return str; return val; @@ -2314,8 +2314,8 @@ rb_f_chomp(argc, argv) int argc; VALUE *argv; { - VALUE str = uscore_get(); - VALUE val = rb_str_chomp_bang(argc, argv, rb_str_dup(str)); + VALUE str = rb_str_dup(uscore_get()); + VALUE val = rb_str_chomp_bang(argc, argv, str); if (NIL_P(val)) return str; rb_lastline_set(val); @@ -2362,7 +2362,7 @@ static VALUE rb_str_strip(str) VALUE str; { - VALUE val = rb_str_strip_bang(rb_str_dup(str)); + VALUE val = rb_str_strip_bang(str = rb_str_dup(str)); if (NIL_P(val)) return str; return val;