зеркало из https://github.com/github/ruby.git
* string.c (tr_setup_table): fix multiple non latin argument for
non latin (over 256 characters) tr-like methods. [ruby-core:43371] [Bug #6167] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35127 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
0c9f66eb40
Коммит
73a184cc3a
|
@ -1,3 +1,9 @@
|
|||
Sun Mar 25 18:13:14 2012 NARUSE, Yui <naruse@ruby-lang.org>
|
||||
|
||||
* string.c (tr_setup_table): fix multiple non latin argument for
|
||||
non latin (over 256 characters) tr-like methods.
|
||||
[ruby-core:43371] [Bug #6167]
|
||||
|
||||
Sun Mar 25 00:46:06 2012 Shugo Maeda <shugo@ruby-lang.org>
|
||||
|
||||
* enumerator (lazy_initialize): set the instance variable "receiver"
|
||||
|
|
10
string.c
10
string.c
|
@ -5332,18 +5332,19 @@ tr_setup_table(VALUE str, char stable[TR_TABLE_SIZE], int first,
|
|||
else {
|
||||
VALUE key = UINT2NUM(c);
|
||||
|
||||
if (!table) {
|
||||
table = rb_hash_new();
|
||||
if (!table && (first || *tablep || stable[256])) {
|
||||
if (cflag) {
|
||||
ptable = *ctablep;
|
||||
table = ptable ? ptable : rb_hash_new();
|
||||
*ctablep = table;
|
||||
}
|
||||
else {
|
||||
table = rb_hash_new();
|
||||
ptable = *tablep;
|
||||
*tablep = table;
|
||||
}
|
||||
}
|
||||
if (!ptable || !NIL_P(rb_hash_aref(ptable, key))) {
|
||||
if (table && (!ptable || (cflag ^ !NIL_P(rb_hash_aref(ptable, key))))) {
|
||||
rb_hash_aset(table, key, Qtrue);
|
||||
}
|
||||
}
|
||||
|
@ -5351,6 +5352,9 @@ tr_setup_table(VALUE str, char stable[TR_TABLE_SIZE], int first,
|
|||
for (i=0; i<256; i++) {
|
||||
stable[i] = stable[i] && buf[i];
|
||||
}
|
||||
if (!table && !cflag) {
|
||||
*tablep = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -483,8 +483,15 @@ class TestString < Test::Unit::TestCase
|
|||
assert_equal(4, a.count(S("ej-m")))
|
||||
assert_equal(0, S("y").count(S("a\\-z")))
|
||||
assert_equal(5, "abc\u{3042 3044 3046}".count("^a"))
|
||||
assert_equal(1, "abc\u{3042 3044 3046}".count("\u3042"))
|
||||
assert_equal(5, "abc\u{3042 3044 3046}".count("^\u3042"))
|
||||
assert_equal(2, "abc\u{3042 3044 3046}".count("a-z", "^a"))
|
||||
assert_equal(0, "abc\u{3042 3044 3046}".count("a", "\u3042"))
|
||||
assert_equal(0, "abc\u{3042 3044 3046}".count("\u3042", "a"))
|
||||
assert_equal(0, "abc\u{3042 3044 3046}".count("\u3042", "\u3044"))
|
||||
assert_equal(4, "abc\u{3042 3044 3046}".count("^a", "^\u3044"))
|
||||
assert_equal(4, "abc\u{3042 3044 3046}".count("^\u3044", "^a"))
|
||||
assert_equal(4, "abc\u{3042 3044 3046}".count("^\u3042", "^\u3044"))
|
||||
|
||||
assert_raise(ArgumentError) { "foo".count }
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче