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

ruby-changes:12672

From: naruse <ko1@a...>
Date: Tue, 4 Aug 2009 13:15:04 +0900 (JST)
Subject: [ruby-changes:12672] Ruby:r24387 (trunk): Warn duplicated characters in character class of regexp.

naruse	2009-08-04 13:14:38 +0900 (Tue, 04 Aug 2009)

  New Revision: 24387

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

  Log:
    Warn duplicated characters in character class of regexp. [ruby-core:24593]
    * include/ruby/oniguruma.h (ONIG_SYN_WARN_CC_DUP): defined.
    * regparse.h (ScanEnv): add warnings_flag.
    * regparse.c (CC_DUP_WARN): defined for warn duplicated characters in
      character class of regexp. [ruby-core:24593]
      (add_code_range_to_buf): add CC_DUP_WARN.
      (next_state_val): add CC_DUP_WARN.
      (OnigSyntaxRuby): add ONIG_SYN_WARN_CC_DUP.
      (SET_ALL_MULTI_BYTE_RANGE): add env to arguments.
      (add_code_range): ditto.
      (add_code_range_to_buf): ditto.
      (not_code_range_buf): ditto.
      (or_code_range_buf): ditto.
      (and_code_range1): ditto.
      (and_code_range_buf): ditto.
      (and_cclass): ditto.
      (or_cclass): ditto.
      (add_ctype_to_cc_by_range): ditto.
      (add_ctype_to_cc): ditto.
      (parse_char_class): ditto.

  Modified files:
    trunk/ChangeLog
    trunk/include/ruby/oniguruma.h
    trunk/regparse.c
    trunk/regparse.h

Index: regparse.c
===================================================================
--- regparse.c	(revision 24386)
+++ regparse.c	(revision 24387)
@@ -57,6 +57,7 @@
       ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME |
       ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY |
       ONIG_SYN_WARN_CC_OP_NOT_ESCAPED |
+      ONIG_SYN_WARN_CC_DUP |
       ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT )
   , ONIG_OPTION_NONE
   ,
@@ -96,6 +97,8 @@
   onig_verb_warn = f;
 }
 
+static void CC_DUP_WARN(ScanEnv *env);
+
 static void
 bbuf_free(BBuf* bbuf)
 {
@@ -129,7 +132,7 @@
   (OnigCodePoint )(ONIGENC_MBC_MINLEN(enc) > 1 ? 0 : 0x80)
 
 #define SET_ALL_MULTI_BYTE_RANGE(enc, pbuf) \
-  add_code_range_to_buf(pbuf, MBCODE_START_POS(enc), ~((OnigCodePoint )0))
+  add_code_range_to_buf(pbuf, env, MBCODE_START_POS(enc), ~((OnigCodePoint )0))
 
 #define ADD_ALL_MULTI_BYTE_RANGE(enc, mbuf) do {\
   if (! ONIGENC_IS_SINGLEBYTE(enc)) {\
@@ -139,6 +142,11 @@
 } while (0)
 
 
+#define BITSET_SET_BIT_CHKDUP(bs, pos) do { \
+  if (BITSET_AT(bs, pos)) CC_DUP_WARN(env); \
+  BS_ROOM(bs, pos) |= BS_BIT(pos); \
+} while (0)
+
 #define BITSET_IS_EMPTY(bs,empty) do {\
   int i;\
   empty = 1;\
@@ -150,11 +158,11 @@
 } while (0)
 
 static void
-bitset_set_range(BitSetRef bs, int from, int to)
+bitset_set_range(ScanEnv *env, BitSetRef bs, int from, int to)
 {
   int i;
   for (i = from; i <= to && i < SINGLE_BYTE_SIZE; i++) {
-    BITSET_SET_BIT(bs, i);
+    BITSET_SET_BIT_CHKDUP(bs, i);
   }
 }
 
@@ -1689,7 +1697,7 @@
 }
 
 static int
-add_code_range_to_buf(BBuf** pbuf, OnigCodePoint from, OnigCodePoint to)
+add_code_range_to_buf(BBuf** pbuf, ScanEnv* env, OnigCodePoint from, OnigCodePoint to)
 {
   int r, inc_n, pos;
   int low, high, bound, x;
@@ -1736,8 +1744,10 @@
   if (inc_n != 1) {
     if (from > data[low*2])
       from = data[low*2];
+    else CC_DUP_WARN(env);
     if (to < data[(high - 1)*2 + 1])
       to = data[(high - 1)*2 + 1];
+    else CC_DUP_WARN(env);
   }
 
   if (inc_n != 0 && (OnigCodePoint )high < n) {
@@ -1773,11 +1783,11 @@
       return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;
   }
 
-  return add_code_range_to_buf(pbuf, from, to);
+  return add_code_range_to_buf(pbuf, env, from, to);
 }
 
 static int
-not_code_range_buf(OnigEncoding enc, BBuf* bbuf, BBuf** pbuf)
+not_code_range_buf(OnigEncoding enc, BBuf* bbuf, BBuf** pbuf, ScanEnv* env)
 {
   int r, i, n;
   OnigCodePoint pre, from, *data, to = 0;
@@ -1799,14 +1809,14 @@
     from = data[i*2];
     to   = data[i*2+1];
     if (pre <= from - 1) {
-      r = add_code_range_to_buf(pbuf, pre, from - 1);
+      r = add_code_range_to_buf(pbuf, env, pre, from - 1);
       if (r != 0) return r;
     }
     if (to == ~((OnigCodePoint )0)) break;
     pre = to + 1;
   }
   if (to < ~((OnigCodePoint )0)) {
-    r = add_code_range_to_buf(pbuf, to + 1, ~((OnigCodePoint )0));
+    r = add_code_range_to_buf(pbuf, env, to + 1, ~((OnigCodePoint )0));
   }
   return r;
 }
@@ -1820,7 +1830,7 @@
 
 static int
 or_code_range_buf(OnigEncoding enc, BBuf* bbuf1, int not1,
-                  BBuf* bbuf2, int not2, BBuf** pbuf)
+                  BBuf* bbuf2, int not2, BBuf** pbuf, ScanEnv* env)
 {
   int r;
   OnigCodePoint i, n1, *data1;
@@ -1846,7 +1856,7 @@
 	return bbuf_clone(pbuf, bbuf2);
       }
       else {
-	return not_code_range_buf(enc, bbuf2, pbuf);
+	return not_code_range_buf(enc, bbuf2, pbuf, env);
       }
     }
   }
@@ -1862,21 +1872,21 @@
     r = bbuf_clone(pbuf, bbuf2);
   }
   else if (not1 == 0) { /* 1 OR (not 2) */
-    r = not_code_range_buf(enc, bbuf2, pbuf);
+    r = not_code_range_buf(enc, bbuf2, pbuf, env);
   }
   if (r != 0) return r;
 
   for (i = 0; i < n1; i++) {
     from = data1[i*2];
     to   = data1[i*2+1];
-    r = add_code_range_to_buf(pbuf, from, to);
+    r = add_code_range_to_buf(pbuf, env, from, to);
     if (r != 0) return r;
   }
   return 0;
 }
 
 static int
-and_code_range1(BBuf** pbuf, OnigCodePoint from1, OnigCodePoint to1,
+and_code_range1(BBuf** pbuf, ScanEnv* env, OnigCodePoint from1, OnigCodePoint to1,
 	        OnigCodePoint* data, int n)
 {
   int i, r;
@@ -1894,7 +1904,7 @@
     else if (from2 <= to1) {
       if (to2 < to1) {
 	if (from1 <= from2 - 1) {
-	  r = add_code_range_to_buf(pbuf, from1, from2-1);
+	  r = add_code_range_to_buf(pbuf, env, from1, from2-1);
 	  if (r != 0) return r;
 	}
 	from1 = to2 + 1;
@@ -1909,14 +1919,14 @@
     if (from1 > to1) break;
   }
   if (from1 <= to1) {
-    r = add_code_range_to_buf(pbuf, from1, to1);
+    r = add_code_range_to_buf(pbuf, env, from1, to1);
     if (r != 0) return r;
   }
   return 0;
 }
 
 static int
-and_code_range_buf(BBuf* bbuf1, int not1, BBuf* bbuf2, int not2, BBuf** pbuf)
+and_code_range_buf(BBuf* bbuf1, int not1, BBuf* bbuf2, int not2, BBuf** pbuf, ScanEnv* env)
 {
   int r;
   OnigCodePoint i, j, n1, n2, *data1, *data2;
@@ -1955,7 +1965,7 @@
 	if (to2 < from1) continue;
 	from = MAX(from1, from2);
 	to   = MIN(to1, to2);
-	r = add_code_range_to_buf(pbuf, from, to);
+	r = add_code_range_to_buf(pbuf, env, from, to);
 	if (r != 0) return r;
       }
     }
@@ -1964,7 +1974,7 @@
     for (i = 0; i < n1; i++) {
       from1 = data1[i*2];
       to1   = data1[i*2+1];
-      r = and_code_range1(pbuf, from1, to1, data2, n2);
+      r = and_code_range1(pbuf, env, from1, to1, data2, n2);
       if (r != 0) return r;
     }
   }
@@ -1973,8 +1983,9 @@
 }
 
 static int
-and_cclass(CClassNode* dest, CClassNode* cc, OnigEncoding enc)
+and_cclass(CClassNode* dest, CClassNode* cc, ScanEnv* env)
 {
+  OnigEncoding enc = env->enc;
   int r, not1, not2;
   BBuf *buf1, *buf2, *pbuf;
   BitSetRef bsr1, bsr2;
@@ -2006,13 +2017,13 @@
 
   if (! ONIGENC_IS_SINGLEBYTE(enc)) {
     if (not1 != 0 && not2 != 0) {
-      r = or_code_range_buf(enc, buf1, 0, buf2, 0, &pbuf);
+      r = or_code_range_buf(enc, buf1, 0, buf2, 0, &pbuf, env);
     }
     else {
-      r = and_code_range_buf(buf1, not1, buf2, not2, &pbuf);
+      r = and_code_range_buf(buf1, not1, buf2, not2, &pbuf, env);
       if (r == 0 && not1 != 0) {
 	BBuf *tbuf;
-	r = not_code_range_buf(enc, pbuf, &tbuf);
+	r = not_code_range_buf(enc, pbuf, &tbuf, env);
 	if (r != 0) {
 	  bbuf_free(pbuf);
 	  return r;
@@ -2031,8 +2042,9 @@
 }
 
 static int
-or_cclass(CClassNode* dest, CClassNode* cc, OnigEncoding enc)
+or_cclass(CClassNode* dest, CClassNode* cc, ScanEnv* env)
 {
+  OnigEncoding enc = env->enc;
   int r, not1, not2;
   BBuf *buf1, *buf2, *pbuf;
   BitSetRef bsr1, bsr2;
@@ -2064,13 +2076,13 @@
 
   if (! ONIGENC_IS_SINGLEBYTE(enc)) {
     if (not1 != 0 && not2 != 0) {
-      r = and_code_range_buf(buf1, 0, buf2, 0, &pbuf);
+      r = and_code_range_buf(buf1, 0, buf2, 0, &pbuf, env);
     }
     else {
-      r = or_code_range_buf(enc, buf1, not1, buf2, not2, &pbuf);
+      r = or_code_range_buf(enc, buf1, not1, buf2, not2, &pbuf, env);
       if (r == 0 && not1 != 0) {
 	BBuf *tbuf;
-	r = not_code_range_buf(enc, pbuf, &tbuf);
+	r = not_code_range_buf(enc, pbuf, &tbuf, env);
 	if (r != 0) {
 	  bbuf_free(pbuf);
 	  return r;
@@ -2839,6 +2851,22 @@
   }
 }
 
+static void
+CC_DUP_WARN(ScanEnv *env)
+{
+  UChar buf[WARN_BUFSIZE];
+  if (onig_warn == onig_null_warn || !RTEST(ruby_verbose)) return ;
+
+  if (IS_SYNTAX_BV((env)->syntax, ONIG_SYN_WARN_CC_DUP) &&
+    !((env)->warnings_flag & ONIG_SYN_WARN_CC_DUP)) {
+    (env)->warnings_flag |= ONIG_SYN_WARN_CC_DUP;
+    onig_snprintf_with_pattern(buf, WARN_BUFSIZE, env->enc,
+	    env->pattern, env->pattern_end,
+	    (UChar* )"character class has duplicated range");
+    (*onig_warn)((char* )buf);
+  }
+}
+
 static UChar*
 find_str_position(OnigCodePoint s[], int n, UChar* from, UChar* to,
 		  UChar **next, OnigEncoding enc)
@@ -3756,7 +3784,7 @@
 
 static int
 add_ctype_to_cc_by_range(CClassNode* cc, int ctype ARG_UNUSED, int not,
-			 OnigEncoding enc ARG_UNUSED,
+                         ScanEnv* env,
                          OnigCodePoint sb_out, const OnigCodePoint mbr[])
 {
   int i, r;
@@ -3771,7 +3799,7 @@
 	if (j >= sb_out) {
 	  if (j == ONIGENC_CODE_RANGE_TO(mbr, i)) i++;
 	  else if (j > ONIGENC_CODE_RANGE_FROM(mbr, i)) {
-	    r = add_code_range_to_buf(&(cc->mbuf), j,
+	    r = add_code_range_to_buf(&(cc->mbuf), env, j,
 				      ONIGENC_CODE_RANGE_TO(mbr, i));
 	    if (r != 0) return r;
 	    i++;
@@ -3779,13 +3807,13 @@
 
 	  goto sb_end;
 	}
-        BITSET_SET_BIT(cc->bs, j);
+        BITSET_SET_BIT_CHKDUP(cc->bs, j);
       }
     }
 
   sb_end:
     for ( ; i < n; i++) {
-      r = add_code_range_to_buf(&(cc->mbuf),
+      r = add_code_range_to_buf(&(cc->mbuf), env,
                                 ONIGENC_CODE_RANGE_FROM(mbr, i),
                                 ONIGENC_CODE_RANGE_TO(mbr, i));
       if (r != 0) return r;
@@ -3800,12 +3828,12 @@
 	if (j >= sb_out) {
 	  goto sb_end2;
 	}
-	BITSET_SET_BIT(cc->bs, j);
+	BITSET_SET_BIT_CHKDUP(cc->bs, j);
       }
       prev = ONIGENC_CODE_RANGE_TO(mbr, i) + 1;
     }
     for (j = prev; j < sb_out; j++) {
-      BITSET_SET_BIT(cc->bs, j);
+      BITSET_SET_BIT_CHKDUP(cc->bs, j);
     }
 
   sb_end2:
@@ -3813,14 +3841,14 @@
 
     for (i = 0; i < n; i++) {
       if (prev < ONIGENC_CODE_RANGE_FROM(mbr, i)) {
-	r = add_code_range_to_buf(&(cc->mbuf), prev,
+	r = add_code_range_to_buf(&(cc->mbuf), env, prev,
                                   ONIGENC_CODE_RANGE_FROM(mbr, i) - 1);
 	if (r != 0) return r;
       }
       prev = ONIGENC_CODE_RANGE_TO(mbr, i) + 1;
     }
     if (prev < 0x7fffffff) {
-      r = add_code_range_to_buf(&(cc->mbuf), prev, 0x7fffffff);
+      r = add_code_range_to_buf(&(cc->mbuf), env, prev, 0x7fffffff);
       if (r != 0) return r;
     }
   }
@@ -3838,7 +3866,7 @@
 
   r = ONIGENC_GET_CTYPE_CODE_RANGE(enc, ctype, &sb_out, &ranges);
   if (r == 0) {
-    return add_ctype_to_cc_by_range(cc, ctype, not, env->enc, sb_out, ranges);
+    return add_ctype_to_cc_by_range(cc, ctype, not, env, sb_out, ranges);
   }
   else if (r != ONIG_NO_SUPPORT_CONFIG) {
     return r;
@@ -3860,14 +3888,14 @@
     if (not != 0) {
       for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
 	if (! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
-	  BITSET_SET_BIT(cc->bs, c);
+	  BITSET_SET_BIT_CHKDUP(cc->bs, c);
       }
       ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
     }
     else {
       for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
 	if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
-	  BITSET_SET_BIT(cc->bs, c);
+	  BITSET_SET_BIT_CHKDUP(cc->bs, c);
       }
     }
     break;
@@ -3877,13 +3905,13 @@
     if (not != 0) {
       for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
 	if (! ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
-	  BITSET_SET_BIT(cc->bs, c);
+	  BITSET_SET_BIT_CHKDUP(cc->bs, c);
       }
     }
     else {
       for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
 	if (ONIGENC_IS_CODE_CTYPE(enc, (OnigCodePoint )c, ctype))
-	  BITSET_SET_BIT(cc->bs, c);
+	  BITSET_SET_BIT_CHKDUP(cc->bs, c);
       }
       ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
     }
@@ -3892,7 +3920,7 @@
   case ONIGENC_CTYPE_WORD:
     if (not == 0) {
       for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
-	if (IS_CODE_SB_WORD(enc, c)) BITSET_SET_BIT(cc->bs, c);
+	if (IS_CODE_SB_WORD(enc, c)) BITSET_SET_BIT_CHKDUP(cc->bs, c);
       }
       ADD_ALL_MULTI_BYTE_RANGE(enc, cc->mbuf);
     }
@@ -3900,7 +3928,7 @@
       for (c = 0; c < SINGLE_BYTE_SIZE; c++) {
         if ((ONIGENC_CODE_TO_MBCLEN(enc, c) > 0) /* check invalid code point */
 	    && ! ONIGENC_IS_CODE_WORD(enc, c))
-	  BITSET_SET_BIT(cc->bs, c);
+	  BITSET_SET_BIT_CHKDUP(cc->bs, c);
       }
     }
     break;
@@ -4065,7 +4093,7 @@
 
   if (*state == CCS_VALUE && *type != CCV_CLASS) {
     if (*type == CCV_SB)
-      BITSET_SET_BIT(cc->bs, (int )(*vs));
+      BITSET_SET_BIT_CHKDUP(cc->bs, (int )(*vs));
     else if (*type == CCV_CODE_POINT) {
       r = add_code_range(&(cc->mbuf), env, *vs, *vs);
       if (r < 0) return r;
@@ -4088,7 +4116,7 @@
   switch (*state) {
   case CCS_VALUE:
     if (*type == CCV_SB)
-      BITSET_SET_BIT(cc->bs, (int )(*vs));
+      BITSET_SET_BIT_CHKDUP(cc->bs, (int )(*vs));
     else if (*type == CCV_CODE_POINT) {
       r = add_code_range(&(cc->mbuf), env, *vs, *vs);
       if (r < 0) return r;
@@ -4107,7 +4135,7 @@
 	  else
 	    return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;
 	}
-	bitset_set_range(cc->bs, (int )*vs, (int )v);
+	bitset_set_range(env, cc->bs, (int )*vs, (int )v);
       }
       else {
 	r = add_code_range(&(cc->mbuf), env, *vs, v);
@@ -4124,7 +4152,7 @@
 	  else
 	    return ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS;
 	}
-	bitset_set_range(cc->bs, (int )*vs, (int )(v < 0xff ? v : 0xff));
+	bitset_set_range(env, cc->bs, (int )*vs, (int )(v < 0xff ? v : 0xff));
 	r = add_code_range(&(cc->mbuf), env, (OnigCodePoint )*vs, v);
 	if (r < 0) return r;
 #if 0
@@ -4407,7 +4435,7 @@
 	r = parse_char_class(&anode, tok, &p, end, env);
 	if (r != 0) goto cc_open_err;
 	acc = NCCLASS(anode);
-	r = or_cclass(cc, acc, env->enc);
+	r = or_cclass(cc, acc, env);
 
 	onig_node_free(anode);
       cc_open_err:
@@ -4427,7 +4455,7 @@
 	state = CCS_START;
 
 	if (IS_NOT_NULL(prev_cc)) {
-	  r = and_cclass(prev_cc, cc, env->enc);
+	  r = and_cclass(prev_cc, cc, env);
 	  if (r != 0) goto err;
 	  bbuf_free(cc->mbuf);
 	}
@@ -4464,7 +4492,7 @@
   }
 
   if (IS_NOT_NULL(prev_cc)) {
-    r = and_cclass(prev_cc, cc, env->enc);
+    r = and_cclass(prev_cc, cc, env);
     if (r != 0) goto err;
     bbuf_free(cc->mbuf);
     cc = prev_cc;
@@ -4487,7 +4515,7 @@
 
       if (ONIGENC_IS_CODE_NEWLINE(env->enc, NEWLINE_CODE)) {
         if (ONIGENC_CODE_TO_MBCLEN(env->enc, NEWLINE_CODE) == 1)
-          BITSET_SET_BIT(cc->bs, NEWLINE_CODE);
+          BITSET_SET_BIT_CHKDUP(cc->bs, NEWLINE_CODE);
         else
           add_code_range(&(cc->mbuf), env, NEWLINE_CODE, NEWLINE_CODE);
       }
@@ -4983,7 +5011,7 @@
 	add_code_range(&(cc->mbuf), env, *to, *to);
       }
       else {
-	BITSET_SET_BIT(bs, *to);
+	BITSET_SET_BIT_CHKDUP(bs, *to);
       }
     }
 #else
@@ -4997,7 +5025,7 @@
 	  BITSET_CLEAR_BIT(bs, *to);
 	}
 	else
-	  BITSET_SET_BIT(bs, *to);
+	  BITSET_SET_BIT_CHKDUP(bs, *to);
       }
     }
 #endif /* CASE_FOLD_IS_APPLIED_INSIDE_NEGATIVE_CCLASS */
Index: regparse.h
===================================================================
--- regparse.h	(revision 24386)
+++ regparse.h	(revision 24387)
@@ -306,6 +306,7 @@
   int curr_max_regnum;
   int has_recursion;
 #endif
+  int warnings_flag;
 } ScanEnv;
 
 
Index: include/ruby/oniguruma.h
===================================================================
--- include/ruby/oniguruma.h	(revision 24386)
+++ include/ruby/oniguruma.h	(revision 24387)
@@ -466,6 +466,7 @@
 /* syntax (behavior) warning */
 #define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED          (1U<<24) /* [,-,] */
 #define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT    (1U<<25) /* (?:a*)+ */
+#define ONIG_SYN_WARN_CC_DUP                     (1U<<26) /* [aa] */
 
 /* meta character specifiers (onig_set_meta_char()) */
 #define ONIG_META_CHAR_ESCAPE               0
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 24386)
+++ ChangeLog	(revision 24387)
@@ -1,3 +1,25 @@
+Tue Aug  4 13:07:10 2009  NARUSE, Yui  <naruse@r...>
+
+	* include/ruby/oniguruma.h (ONIG_SYN_WARN_CC_DUP): defined.
+	* regparse.h (ScanEnv): add warnings_flag.
+	* regparse.c (CC_DUP_WARN): defined for warn duplicated characters in
+	  character class of regexp. [ruby-core:24593]
+	  (add_code_range_to_buf): add CC_DUP_WARN.
+	  (next_state_val): add CC_DUP_WARN.
+	  (OnigSyntaxRuby): add ONIG_SYN_WARN_CC_DUP.
+	  (SET_ALL_MULTI_BYTE_RANGE): add env to arguments.
+	  (add_code_range): ditto.
+	  (add_code_range_to_buf): ditto.
+	  (not_code_range_buf): ditto.
+	  (or_code_range_buf): ditto.
+	  (and_code_range1): ditto.
+	  (and_code_range_buf): ditto.
+	  (and_cclass): ditto.
+	  (or_cclass): ditto.
+	  (add_ctype_to_cc_by_range): ditto.
+	  (add_ctype_to_cc): ditto.
+	  (parse_char_class): ditto.
+
 Tue Aug  4 12:40:45 2009  NARUSE, Yui  <naruse@r...>
 
 	* enc/encdb.c (ENC_SET_BASE): fix typo.

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

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