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

ruby-changes:8284

From: matz <ko1@a...>
Date: Fri, 17 Oct 2008 07:21:56 +0900 (JST)
Subject: [ruby-changes:8284] Ruby:r19812 (trunk): * .gdbinit (rp): REGEXP handling fixed.

matz	2008-10-17 07:21:42 +0900 (Fri, 17 Oct 2008)

  New Revision: 19812

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19812

  Log:
    * .gdbinit (rp): REGEXP handling fixed.
    
    * string.c (rb_str_rindex_m): need not to call rb_enc_check on
      regexp.
    
    * re.c (unescape_escaped_nonascii): try ASCII-8BIT encoding for
      broken strings.

  Modified files:
    trunk/.gdbinit
    trunk/ChangeLog
    trunk/re.c
    trunk/string.c

Index: .gdbinit
===================================================================
--- .gdbinit	(revision 19811)
+++ .gdbinit	(revision 19812)
@@ -86,11 +86,17 @@
     print (struct RString *)$arg0
   else
   if ($flags & RUBY_T_MASK) == RUBY_T_REGEXP
+    set $regsrc = ((struct RRegexp*)$arg0)->src
+    set $rsflags = ((struct RBasic*)$regsrc)->flags
     printf "T_REGEXP: "
     set print address off
-    output ((struct RRegexp*)$arg0)->str
+    output (char *)(($rsflags & RUBY_FL_USER1) ? \
+	    ((struct RString*)$regsrc)->as.heap.ptr : \
+	    ((struct RString*)$regsrc)->as.ary)
     set print address on
-    printf " len:%ld ", ((struct RRegexp*)$arg0)->len
+    printf " len:%ld ", ($rsflags & RUBY_FL_USER1) ? \
+            ((struct RString*)$regsrc)->as.heap.len : \
+            (($rsflags & (RUBY_FL_USER2|RUBY_FL_USER3|RUBY_FL_USER4|RUBY_FL_USER5|RUBY_FL_USER6)) >> RUBY_FL_USHIFT+2)
     if $flags & RUBY_FL_USER6
       printf "(none) "
     end
Index: re.c
===================================================================
--- re.c	(revision 19811)
+++ re.c	(revision 19812)
@@ -1967,8 +1967,12 @@
 
     l = rb_enc_precise_mbclen(chbuf, chbuf+chlen, enc);
     if (MBCLEN_INVALID_P(l)) {
-        strcpy(err, "invalid multibyte escape");
-        return -1;
+        if (*encp == 0)
+            enc = *encp = rb_ascii8bit_encoding();
+        else if (*encp != rb_ascii8bit_encoding()) {
+	    strcpy(err, "invalid multibyte escape");
+            return -1;
+        }
     }
     if (1 < chlen || (chbuf[0] & 0x80)) {
         rb_str_buf_cat(buf, chbuf, chlen);
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 19811)
+++ ChangeLog	(revision 19812)
@@ -64,6 +64,16 @@
 	* test/ruby/test_transcode.rb (TestTranscode#test_errors):
 	  String#encode now works without any argument. [ruby-dev:36740]
 
+Wed Oct 15 23:48:22 2008  Yukihiro Matsumoto  <matz@r...>
+
+	* .gdbinit (rp): REGEXP handling fixed.
+
+	* string.c (rb_str_rindex_m): need not to call rb_enc_check on
+	  regexp.
+
+	* re.c (unescape_escaped_nonascii): try ASCII-8BIT encoding for
+	  broken strings.
+
 Wed Oct 15 23:11:10 2008  Yukihiro Matsumoto  <matz@r...>
 
 	* lib/delegate.rb (DelegateClass): restored 1.8 behavior for
Index: string.c
===================================================================
--- string.c	(revision 19811)
+++ string.c	(revision 19812)
@@ -2355,7 +2355,7 @@
       case T_REGEXP:
 	/* enc = rb_get_check(str, sub); */
 	pos = str_offset(RSTRING_PTR(str), RSTRING_END(str), pos,
-		     rb_enc_check(str, sub), single_byte_optimizable(str));
+			 STR_ENC_GET(str), single_byte_optimizable(str));
 
 	if (!RREGEXP(sub)->ptr || RREGEXP_SRC_LEN(sub)) {
 	    pos = rb_reg_adjust_startpos(sub, str, pos, 1);

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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