ruby-changes:4160
From: ko1@a...
Date: Sat, 1 Mar 2008 10:09:57 +0900 (JST)
Subject: [ruby-changes:4160] nobu - Ruby:r15650 (trunk): * string.c (tr_setup_table, rb_str_split_m, rb_str_chomp_bang):
nobu 2008-03-01 10:09:43 +0900 (Sat, 01 Mar 2008) New Revision: 15650 Modified files: trunk/ChangeLog trunk/string.c Log: * string.c (tr_setup_table, rb_str_split_m, rb_str_chomp_bang): simplified with rb_enc_ascget(). [ruby-dev:33944] http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/string.c?r1=15650&r2=15649&diff_format=u http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15650&r2=15649&diff_format=u Index: ChangeLog =================================================================== --- ChangeLog (revision 15649) +++ ChangeLog (revision 15650) @@ -1,3 +1,8 @@ +Sat Mar 1 10:09:40 2008 Nobuyoshi Nakada <nobu@r...> + + * string.c (tr_setup_table, rb_str_split_m, rb_str_chomp_bang): + simplified with rb_enc_ascget(). [ruby-dev:33944] + Sat Mar 1 10:01:30 2008 Yukihiro Matsumoto <matz@r...> * string.c (rb_str_coderange_scan_restartable): should not return Index: string.c =================================================================== --- string.c (revision 15649) +++ string.c (revision 15650) @@ -4446,27 +4446,16 @@ { char buf[256]; struct tr tr; - int c; + int c, l; VALUE table = 0, ptable = 0; int i, cflag = 0; tr.p = RSTRING_PTR(str); tr.pend = tr.p + RSTRING_LEN(str); tr.gen = tr.now = tr.max = 0; - if (RSTRING_LEN(str) > 1) { - if (rb_enc_asciicompat(enc)) { - if (RSTRING_PTR(str)[0] == '^') { - cflag = 1; - tr.p++; - } - } - else { - c = rb_enc_codepoint(RSTRING_PTR(str), RSTRING_END(str), enc); - if (c == '^') { - cflag = 1; - tr.p+=rb_enc_codelen(c, enc); - } - } + if (RSTRING_LEN(str) > 1 && rb_enc_ascget(tr.p, tr.pend, &l, enc) == '^') { + cflag = 1; + tr.p += l; } if (first) { for (i=0; i<256; i++) { @@ -4858,8 +4847,9 @@ } } else { - if (str_strlen(spat, enc2) == 1 && - rb_enc_codepoint(RSTRING_PTR(spat), RSTRING_END(spat), enc2) == ' ') { + int l; + if (rb_enc_ascget(RSTRING_PTR(spat), RSTRING_END(spat), &l, enc2) == ' ' && + RSTRING_LEN(spat) == l) { awk_split = Qtrue; } } @@ -5298,22 +5288,21 @@ rb_str_modify(str); enc = rb_enc_get(str); if (rb_enc_mbminlen(enc) > 1) { - len = str_strlen(str, enc); - pp = rb_enc_nth(p, e, len-1, enc); + pp = rb_enc_left_char_head(p, e-rb_enc_mbminlen(enc), enc); if (rb_enc_is_newline(pp, e, enc)) { e = pp; - len--; } - if (len > 0) { - p = rb_enc_nth(p, e, len-1, enc); - if (rb_enc_codepoint(p, e, enc) == '\r') { - pp = e = p; + pp = e - rb_enc_mbminlen(enc); + if (pp >= p) { + pp = rb_enc_left_char_head(p, pp, enc); + if (rb_enc_ascget(pp, e, 0, enc) == '\r') { + e = pp; } } if (e == RSTRING_END(str)) { return Qnil; } - len = pp - RSTRING_PTR(str); + len = e - RSTRING_PTR(str); STR_SET_LEN(str, len); } else { -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/