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

ruby-changes:4930

From: ko1@a...
Date: Thu, 15 May 2008 19:46:19 +0900 (JST)
Subject: [ruby-changes:4930] matz - Ruby:r16423 (trunk): * re.c (rb_reg_prepare_enc): error condition was updated for non

matz	2008-05-15 19:45:58 +0900 (Thu, 15 May 2008)

  New Revision: 16423

  Modified files:
    trunk/ChangeLog
    trunk/re.c

  Log:
    * re.c (rb_reg_prepare_enc): error condition was updated for non
      ASCII compatible strings.

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=16423&r2=16422&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/re.c?r1=16423&r2=16422&diff_format=u

Index: re.c
===================================================================
--- re.c	(revision 16422)
+++ re.c	(revision 16423)
@@ -1146,6 +1146,15 @@
         rb_encoding **fixed_enc, onig_errmsg_buffer err);
 
 
+static void
+reg_enc_error(VALUE re, VALUE str)
+{
+    rb_raise(rb_eArgError,
+	     "incompatible encoding regexp match (%s regexp with %s string)",
+	     rb_enc_name(RREGEXP(re)->ptr->enc),
+	     rb_enc_name(rb_enc_get(str)));
+}
+
 static rb_encoding*
 rb_reg_prepare_enc(VALUE re, VALUE str, int warn)
 {
@@ -1158,27 +1167,27 @@
     }
 
     rb_reg_check(re);
-    /* ignorecase status */
-    if (rb_reg_fixed_encoding_p(re) || !rb_enc_str_asciicompat_p(str)) {
-        if (ENCODING_GET(re) != rb_enc_get_index(str) &&
-            rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
-            rb_raise(rb_eArgError,
-                "incompatible encoding regexp match (%s regexp with %s string)",
-                rb_enc_name(rb_enc_from_index(ENCODING_GET(re))),
-                rb_enc_name(rb_enc_get(str)));
-        }
+    enc = rb_enc_get(str);
+    if (!rb_enc_str_asciicompat_p(str)) {
+        if (RREGEXP(re)->ptr->enc != enc) {
+	    reg_enc_error(re, str);
+	}
     }
-    else {
-	enc = rb_enc_get(str);
-	if (warn && (RBASIC(re)->flags & REG_ENCODING_NONE) &&
-	    enc != rb_ascii8bit_encoding() &&
-	    rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
-	    rb_warn("regexp match /.../n against to %s string",
-		    rb_enc_name(enc));
+    else if (rb_reg_fixed_encoding_p(re)) {
+        if (RREGEXP(re)->ptr->enc != enc &&
+	    (!rb_enc_asciicompat(RREGEXP(re)->ptr->enc) ||
+	     rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT)) {
+	    reg_enc_error(re, str);
 	}
-	return enc;
+	enc = RREGEXP(re)->ptr->enc;
     }
-    return RREGEXP(re)->ptr->enc;
+    if (warn && (RBASIC(re)->flags & REG_ENCODING_NONE) &&
+	enc != rb_ascii8bit_encoding() &&
+	rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
+	rb_warn("regexp match /.../n against to %s string",
+		rb_enc_name(enc));
+    }
+    return enc;
 }
 
 regex_t *
@@ -2282,7 +2291,7 @@
     }
     
     re->ptr = make_regexp(RSTRING_PTR(unescaped), RSTRING_LEN(unescaped), enc,
-            options & ARG_REG_OPTION_MASK, err);
+			  options & ARG_REG_OPTION_MASK, err);
     if (!re->ptr) return -1;
     re->str = ALLOC_N(char, len+1);
     memcpy(re->str, s, len);
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 16422)
+++ ChangeLog	(revision 16423)
@@ -7,6 +7,11 @@
 
 	* file.c (rb_file_s_extname): ditto.
 
+Thu May 15 13:23:20 2008  Yukihiro Matsumoto  <matz@r...>
+
+	* re.c (rb_reg_prepare_enc): error condition was updated for non
+	  ASCII compatible strings.
+
 Thu May 15 12:19:42 2008  Yukihiro Matsumoto  <matz@r...>
 
 	* ext/openssl/openssl_missing.c (HMAC_CTX_copy): adopted to

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

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