[#29736] [提案] Kernel#p をもっと便利に — "Yusuke ENDOH" <mame@...>

遠藤侑介と申します。

19 messages 2006/11/01

[#29765] merge with YARV — SASADA Koichi <ko1@...>

 ささだです。

16 messages 2006/11/03

[#29767] 1.8 proposal of RUBY_PATCHLEVEL — URABE Shyouhei <root@...>

-----BEGIN PGP SIGNED MESSAGE-----

52 messages 2006/11/04
[#29771] Re: 1.8 proposal of RUBY_PATCHLEVEL — Shugo Maeda <shugo@...> 2006/11/04

前田です。

[#29925] ruby -v — Urabe Shyouhei <shyouhei@...>

卜部です。

28 messages 2006/11/24

[#29964] 1.8, 1.9, svn化, などなどのまとめ — "U.Nakamura" <usa@...>

こんにちは、なかむら(う)です。

15 messages 2006/11/28

[#29970] BUG: Incorrect handling of Ignorecase matching (regex.c of 1.8.5) — "きむらこういち" <hogemuta@...>

木村です。

15 messages 2006/11/28

[ruby-dev:29973] Re: BUG: Incorrect handling of Ignorecase matching (regex.c of 1.8.5)

From: "Nobuyoshi Nakada" <nobu@...>
Date: 2006-11-29 03:09:05 UTC
List: ruby-dev #29973
なかだです。

At Wed, 29 Nov 2006 10:30:01 +0900,
KIMURA Koichi wrote in [ruby-dev:29972]:
> > staticだとこれ以降のRegexpの生成時にまで影響してしまうのでは。
>
> あーそうですね。
> かといって、casefold_onを見つけるたびにやるのは避けたいのですが
> どうしたものでしょう?

RE_MAY_IGNORECASE を使ってはどうでしょうか。

> > > +              if (!found_casefold) {
> > > +                  unsigned char *p = (unsigned char*)fastmap;
> >
> > なんで unsigned char * に?
>
> int ←→ char での型変換時に符号がらみで悩みたくなかったのです。

ここは悩む必要ないんじゃないかと思いますが。


Index: regex.c
===================================================================
RCS file: /pub/cvs/ruby/Attic/regex.c,v
retrieving revision 1.96.2.9
diff -U 2 -p -u -r1.96.2.9 regex.c
--- regex.c	7 Aug 2006 03:43:42 -0000	1.96.2.9
+++ regex.c	29 Nov 2006 03:03:13 -0000
@@ -2835,4 +2835,12 @@ re_compile_fastmap(bufp)

       case casefold_on:
+	if (!(bufp->options & RE_MAY_IGNORECASE)) {
+	  int i;
+	  for (i = 0; i < (1<<BYTEWIDTH); i++) {
+	    char m = fastmap[i];
+	    j = translate[i];
+	    if (m > fastmap[j]) fastmap[j] = m;
+	  }
+	}
 	bufp->options |= RE_MAY_IGNORECASE;
 	options |= RE_OPTION_IGNORECASE;
@@ -2905,17 +2913,17 @@ re_compile_fastmap(bufp)

       case on_failure_jump:
-      EXTRACT_NUMBER_AND_INCR(j, p);
-      if (p + j < pend) {
-	if (stackp == stacke) {
-	  EXPAND_FAIL_STACK();
+	EXTRACT_NUMBER_AND_INCR(j, p);
+	if (p + j < pend) {
+	  if (stackp == stacke) {
+	    EXPAND_FAIL_STACK();
+	  }
+	  *++stackp = p + j;	/* push */
 	}
-	*++stackp = p + j;	/* push */
-      }
-      else {
-	bufp->can_be_null = 1;
-      }
-      if (is_a_succeed_n)
-	EXTRACT_NUMBER_AND_INCR(k, p);	/* Skip the n.  */
-      continue;
+	else {
+	  bufp->can_be_null = 1;
+	}
+	if (is_a_succeed_n)
+	  EXTRACT_NUMBER_AND_INCR(k, p);	/* Skip the n.  */
+	continue;

       case set_number_at:


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread