[#39604] [Bug #2323] "Z".."Z".succが空 — Hiro Asari <redmine@...>
Bug #2323: "Z".."Z".succが空
[#39606] [Feature:trunk] Dir instance methods for relative path — Nobuyoshi Nakada <nobu@...>
なかだです。
まつもと ゆきひろです
kosakiです
なかだです。
> なかだです。
まつもと ゆきひろです
成瀬です。
[#39642] [Bug #2338] 大きなFixnumを値にもつHash#hashが呼び出しごとに変わる — Yuki Sonoda <redmine@...>
Bug #2338: 大きなFixnumを値にもつHash#hashが呼び出しごとに変わる
44Oi44Or44Go55Sz44GX44G+44GZ44CCCgrku6XkuIvjga7nkrDlooPjgaflho3nj77jgZfjgabj
[#39660] [Bug:trunk] Enumerator.new {|y| y << 1 << 2 << 3 } — Yusuke ENDOH <mame@...>
遠藤です。
In article <e0b1e5700911110537u2aacf835pc0aea13d89a92cef@mail.gmail.com>,
遠藤です。
At Wed, 11 Nov 2009 23:50:47 +0900,
遠藤です。
[#39669] メンテナ確認プロセス終了。メンテナ募集 — "Yugui (Yuki Sonoda)" <yugui@...>
-----BEGIN PGP SIGNED MESSAGE-----
[#39685] [Feature #2366] private constant — Yusuke Endoh <redmine@...>
Feature #2366: private constant
まつもと ゆきひろです
チケット #2366 が更新されました。 (by Yusuke Endoh)
遠藤です。
=1B$B31$H$$$$$^$9!#=1B(B
遠藤です。
=1B$B31$H$$$$$^$9!#=1B(B
成瀬です。
=1B$B31$H$$$$$^$9!#=1B(B
遠藤です。
=1B$B31$H$$$$$^$9!#=1B(B
[#39696] [Feature #2372] read_all() with buffering — _ wanabe <redmine@...>
Feature #2372: read_all() with buffering
チケット #2372 が更新されました。 (by _ wanabe)
In article <4b0081d7e73af_8bc5c2a894735e@redmine.ruby-lang.org>,
[#39709] [Bug #2381] Math.gammaの挙動がx86_64とia64で異なる — Mitsuhiro TAKANO <redmine@...>
Bug #2381: Math.gammaの挙動がx86_64とia64で異なる
[#39714] Net::FTP で upload の resume ができない — Tomoyuki Chikanaga <chikanag@...>
近永と申します。
[#39720] hidden objectって? — keiju@... (Keiju ISHITSUKA)
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
以下のコミット以降、後述の現象が発生するそうです。
[#39743] String::gsubにおけるinvalid byte sequenceの検出について — TAKEGAWA Hiroshi <takegawa@...>
竹川と申します。
[#39755] RbConfig.rubybin — Tanaka Akira <akr@...>
ruby コマンドのパス名を返す RbConfig.rubybin というメソッド
須藤です。
In article <20091123.123808.1122146273169400964.kou@cozmixng.org>,
> In article <20091123.123808.1122146273169400964.kou@cozmixng.org>,
須藤です。
At Mon, 30 Nov 2009 19:28:39 +0900,
[#39760] [Bug #2395] 可視性の変更による alias されたメソッドの無効化 — _ wanabe <redmine@...>
Bug #2395: 可視性の変更による alias されたメソッドの無効化
[#39796] バグ? ブロック引数で to_ary が呼ばれる必要のない場面で呼ばれる — keiju@... (Keiju ISHITSUKA)
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
まつもと ゆきひろです
けいじゅ@いしつかです.
まつもと ゆきひろです
[ruby-dev:39612] Re: [Bug #2323] "Z".."Z".succが空
なかだです。
At Mon, 2 Nov 2009 16:19:40 +0900,
Hiro Asari wrote in [ruby-dev:39604]:
> surfboard:~$ ruby1.9 -v; ruby1.9 -e 'p ("Z".."Z".succ); p ("Z".."Z".succ).to_a'
> ruby 1.9.2dev (2009-11-02 trunk 25625) [x86_64-darwin10.0.0]
> "Z".."AA"
> []
こんなところでしょうか。
Index: string.c
===================================================================
--- string.c (revision 25629)
+++ string.c (working copy)
@@ -2844,4 +2844,44 @@ rb_str_succ_bang(VALUE str)
}
+static int
+str_succ_cmp(VALUE str1, VALUE str2, rb_encoding *enc)
+{
+ const char *p1 = RSTRING_PTR(str1), *e1 = RSTRING_END(str1);
+ const char *p2 = RSTRING_PTR(str2), *e2 = RSTRING_END(str2);
+ size_t l1, l2;
+ do {
+ if (ISUPPER(*p1) && ISUPPER(*p2)) {
+ for (l1 = 1; p1+l1 < e1 && ISUPPER(p1[l1]); l1++);
+ for (l2 = 1; p2+l2 < e2 && ISUPPER(p2[l2]); l2++);
+ }
+ else if (ISLOWER(*p1) && ISLOWER(*p2)) {
+ for (l1 = 1; p1+l1 < e1 && ISLOWER(p1[l1]); l1++);
+ for (l2 = 1; p2+l2 < e2 && ISLOWER(p2[l2]); l2++);
+ }
+ else if (ISDIGIT(*p1) && ISDIGIT(*p2)) {
+ for (l1 = 1; p1+l1 < e1 && ISDIGIT(p1[l1]); l1++);
+ for (l2 = 1; p2+l2 < e2 && ISDIGIT(p2[l2]); l2++);
+ }
+ else {
+ int n, c;
+ for (l1 = 0; p1+l1 < e1; l1 += n) {
+ c = rb_enc_ascget(p1+l1, e1, &n, enc);
+ if (ISALNUM(c)) break;
+ }
+ for (l2 = 0; p2+l2 < e2; l2 += n) {
+ c = rb_enc_ascget(p2+l2, e2, &n, enc);
+ if (ISALNUM(c)) break;
+ }
+ if (l1 == 0 || l2 == 0) return 1;
+ }
+ if (l1 > l2) return 1;
+ if (l1 == l2) {
+ if (memcmp(p1, p2, l1) > 0) return 0;
+ }
+ p1 += l1;
+ p2 += l2;
+ } while (p1 < e1 || p2 < e2);
+ return -(p1 == e1 && p2 == e2);
+}
/*
@@ -2881,4 +2921,5 @@ rb_str_upto(int argc, VALUE *argv, VALUE
ID succ;
int n, excl, ascii;
+ char c, e;
rb_encoding *enc;
@@ -2891,8 +2932,9 @@ rb_str_upto(int argc, VALUE *argv, VALUE
ascii = (is_ascii_string(beg) && is_ascii_string(end));
/* single character */
- if (RSTRING_LEN(beg) == 1 && RSTRING_LEN(end) == 1 && ascii) {
- char c = RSTRING_PTR(beg)[0];
- char e = RSTRING_PTR(end)[0];
-
+ if (ascii &&
+ RSTRING_LEN(beg) == 1 && RSTRING_LEN(end) == 1 &&
+ (c = RSTRING_PTR(beg)[0], ISALPHA(c)) &&
+ (e = RSTRING_PTR(end)[0], ISALPHA(e)) &&
+ (ISUPPER(c) == ISUPPER(e))) {
if (c > e || (excl && c == e)) return beg;
for (;;) {
@@ -2906,5 +2948,5 @@ rb_str_upto(int argc, VALUE *argv, VALUE
/* both edges are all digits */
if (ascii && ISDIGIT(RSTRING_PTR(beg)[0]) && ISDIGIT(RSTRING_PTR(end)[0])) {
- char *s, *send;
+ const char *s, *send;
VALUE b, e;
int width;
@@ -2949,5 +2991,8 @@ rb_str_upto(int argc, VALUE *argv, VALUE
/* normal case */
no_digits:
- n = rb_str_cmp(beg, end);
+ if (ascii && rb_enc_str_coderange(beg) == rb_enc_str_coderange(end))
+ n = str_succ_cmp(beg, end, enc);
+ else
+ n = rb_str_cmp(beg, end);
if (n > 0 || (excl && n == 0)) return beg;
Index: test/ruby/test_range.rb
===================================================================
--- test/ruby/test_range.rb (revision 25629)
+++ test/ruby/test_range.rb (working copy)
@@ -256,4 +256,7 @@ class TestRange < Test::Unit::TestCase
assert(!(("a"..."z").include?("z")))
assert(!(("a".."z").include?("cc")))
+ assert(("Z".."ZA").include?("AA"))
+ assert(!("Z".."za").include?("AA"))
+ assert(("Z".."CA").include?("AA"))
assert((0...10).include?(5))
end
Index: test/ruby/test_string.rb
===================================================================
--- test/ruby/test_string.rb (revision 25629)
+++ test/ruby/test_string.rb (working copy)
@@ -1588,4 +1588,8 @@ class TestString < Test::Unit::TestCase
})
assert_equal(676, count)
+
+ a = []
+ S("Z").upto(S("AA")) {|s| a << s}
+ assert_equal([S("Z"), S("AA")], a)
end
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦