[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]