From f6fb4b3e8ecede29d25e4b5577174ed6f98d88c8 Mon Sep 17 00:00:00 2001 From: davidflanagan Date: Wed, 7 Nov 2007 22:07:13 +0000 Subject: [PATCH] * string.c (tr_setup_table, tr_trans): fix test failures in test/ruby/test_string.rb git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13834 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 6 +++++- string.c | 38 ++++++++++++++++++++------------------ 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3a9920f3a8..879b32edfa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,9 +1,13 @@ +Thu Nov 8 07:04:31 UTC 2007 David Flanagan + * string.c (tr_setup_table, tr_trans): fix test failures + in test/ruby/test_string.rb + Wed Nov 7 15:07:51 2007 Nobuyoshi Nakada * enum.c (enum_each_with_index): make different arrays at each iteration. [ruby-dev:32181] -Tue Nov 7 05:17:24 2007 David Flanagan +Wed Nov 7 05:17:24 2007 David Flanagan * eval.c: fix typo in invoke_method documentation diff --git a/string.c b/string.c index 472f4cca73..a23a9b6626 100644 --- a/string.c +++ b/string.c @@ -3450,10 +3450,10 @@ tr_trans(VALUE str, VALUE src, VALUE repl, int sflag) tlen = rb_enc_codelen(c, enc); modify = 1; } - } - else if (cflag) { - save = c = last; - modify = 1; + else { + save = c = last; + modify = 1; + } } else { save = -1; @@ -3482,10 +3482,10 @@ tr_trans(VALUE str, VALUE src, VALUE repl, int sflag) *s = c; modify = 1; } - } - else if (cflag) { - *s = last; - modify = 1; + else { + *s = last; + modify = 1; + } } s++; } @@ -3513,10 +3513,10 @@ tr_trans(VALUE str, VALUE src, VALUE repl, int sflag) tlen = rb_enc_codelen(c, enc); modify = 1; } - } - else if (cflag) { - c = last; - modify = 1; + else { + c = last; + modify = 1; + } } while (t - buf + tlen >= max) { offset = t - buf; @@ -3585,7 +3585,7 @@ rb_str_tr(VALUE str, VALUE src, VALUE repl) } static void -tr_setup_table(VALUE str, char stable[256], +tr_setup_table(VALUE str, char stable[256], int first, VALUE *tablep, VALUE *ctablep, rb_encoding *enc) { char buf[256]; @@ -3601,8 +3601,10 @@ tr_setup_table(VALUE str, char stable[256], cflag = 1; tr.p++; } - for (i=0; i<256; i++) { - stable[i] = 1; + if (first) { + for (i=0; i<256; i++) { + stable[i] = 1; + } } for (i=0; i<256; i++) { buf[i] = cflag; @@ -3680,7 +3682,7 @@ rb_str_delete_bang(int argc, VALUE *argv, VALUE str) StringValue(s); enc = rb_enc_check(str, s); - tr_setup_table(s, squeez, &del, &nodel, enc); + tr_setup_table(s, squeez, i==0, &del, &nodel, enc); } rb_str_modify(str); @@ -3758,7 +3760,7 @@ rb_str_squeeze_bang(int argc, VALUE *argv, VALUE str) StringValue(s); enc = rb_enc_check(str, s); - tr_setup_table(s, squeez, &del, &nodel, enc); + tr_setup_table(s, squeez, i==0, &del, &nodel, enc); } } @@ -3883,7 +3885,7 @@ rb_str_count(int argc, VALUE *argv, VALUE str) StringValue(s); enc = rb_enc_check(str, s); - tr_setup_table(s, table, &del, &nodel, enc); + tr_setup_table(s, table,i==0, &del, &nodel, enc); } s = RSTRING_PTR(str);