[#23480] [BUG] numeric.c (flo_to_s) broken? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

19 messages 2004/05/08
[#23482] Re: [BUG] numeric.c (flo_to_s) broken? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/05/08

山本です。

[#23483] Re: [BUG] numeric.c (flo_to_s) broken? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/05/08

山本です。

[#23484] Re: [BUG] numeric.c (flo_to_s) broken? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/05/08

山本です。

[#23485] Re: [BUG] numeric.c (flo_to_s) broken? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/05/08

山本です。たびたびすみません。

[#23486] Re: [BUG] numeric.c (flo_to_s) broken? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/05/08

山本です。

[#23499] Re: [BUG] numeric.c (flo_to_s) broken? — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/05/14

山本です。

[#23488] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib, ruby/lib/test/unit/ui/console, ruby/test, ruby/test/drb, ruby/test/ruby, ruby/test/soap/calc: * ext/extmk.rb (extmake): skip uncompiled extensions. — MIYAMUKO Katsuyuki <k-miyamuko@...>

みやむこです。

18 messages 2004/05/11
[#23527] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib, ruby/lib/test/unit/ui/console,ruby/test, ruby/test/drb, ruby/test/ruby, ruby/test/soap/calc: * ext/extmk.rb(extmake): skip uncompiled extensions. — nobu.nakada@... 2004/05/17

なかだです。

[#23537] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib, ruby/lib/test/unit/ui/console,ruby/test, ruby/test/drb, ruby/test/ruby, ruby/test/soap/calc: * ext/extmk.rb(extmake): skip uncompiled extensions. — MIYAMUKO Katsuyuki <k-miyamuko@...> 2004/05/18

みやむこです。

[#23538] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib, ruby/lib/test/unit/ui/console,ruby/test,ruby/test/drb, ruby/test/ruby, ruby/test/soap/calc: * ext/extmk.rb(extmake):skip uncompiled extensions. — nobu.nakada@... 2004/05/19

なかだです。

[#23539] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib, ruby/lib/test/unit/ui/console,ruby/test,ruby/test/drb, ruby/test/ruby, ruby/test/soap/calc: * ext/extmk.rb(extmake):skip uncompiled extensions. — MIYAMUKO Katsuyuki <k-miyamuko@...> 2004/05/19

みやむこです。

[#23543] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib, ruby/lib/test/unit/ui/console,ruby/test,ruby/test/drb,ruby/test/ruby, ruby/test/soap/calc: * ext/extmk.rb(extmake):skip uncompiledextensions. — nobu.nakada@... 2004/05/19

なかだです。

[#23555] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib, ruby/lib/test/unit/ui/console,ruby/test,ruby/test/drb,ruby/test/ruby, ruby/test/soap/calc: * ext/extmk.rb(extmake):skip uncompiledextensions. — MIYAMUKO Katsuyuki <k-miyamuko@...> 2004/05/21

みやむこです。

[#23557] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib, ruby/lib/test/unit/ui/console,ruby/test,ruby/test/drb,ruby/test/ruby,ruby/test/soap/calc: * ext/extmk.rb(extmake):skip uncompiledextensions. — nobu.nakada@... 2004/05/21

なかだです。

[#23559] Re: [ruby-cvs] ruby, ruby/ext, ruby/lib, ruby/lib/test/unit/ui/console,ruby/test,ruby/test/drb,ruby/test/ruby,ruby/test/soap/calc: * ext/extmk.rb(extmake):skip uncompiledextensions. — MIYAMUKO Katsuyuki <k-miyamuko@...> 2004/05/21

みやむこです。

[#23492] ruby 1.8.1 (2004-05-13) has 7 failures and 3 errors — akira yamada <akira@...>

19 messages 2004/05/13

[#23533] Ruby2.0 spec summary around parameters and variables — SASADA Koichi <ko1@...>

 ささだです。

22 messages 2004/05/17
[#23563] Re: Ruby2.0 spec summary around parameters and variables — Minero Aoki <aamine@...> 2004/05/22

青木です。

[#23564] Re: Ruby2.0 spec summary around parameters and variables — matz@... (Yukihiro Matsumoto) 2004/05/22

まつもと ゆきひろです

[#23568] Re: Ruby2.0 spec summary around parameters and variables — Minero Aoki <aamine@...> 2004/05/22

青木です。

[#23569] Re: Ruby2.0 spec summary around parameters and variables — matz@... (Yukihiro Matsumoto) 2004/05/22

まつもと ゆきひろです

[#23572] keyword argments (Ruby2.0 spec) — Hidetoshi NAGAI <nagai@...>

永井@知能.九工大です.

14 messages 2004/05/23
[#23578] Re: keyword argments (Ruby2.0 spec) — matz@... (Yukihiro Matsumoto) 2004/05/23

まつもと ゆきひろです

[#23615] console freezed on test/drb/drbtest.rb : test_06_timeout (bcc32) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。

11 messages 2004/05/25
[#23625] Re: console freezed on test/drb/drbtest.rb : test_06_timeout (bcc32) — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/05/26

山本です。

[ruby-dev:23596] Re: RegexpError: undefined bytecode (bug)

From: <kkosako@...>
Date: 2004-05-24 06:25:34 UTC
List: ruby-dev #23596
> -----Original Message-----
> From: Masahiro Sakai (酒井政裕) [mailto:sakai@tom.sfc.keio.ac.jp]
> たまたま気が付いたのですが、1.9で正規表現のマッチングを行うと、
> 以下のようなエラーが発生することがあるようです。
> 
> % ruby -ruri -ve 'URI::ABS_URI =~ "http://example.org/Andr\xC3\xA9"'
> -e:1:in `=~': undefined bytecode (bug): /^ (RegexpError)

設計ミスです。

Ruby 1.9.0(Oniguruma 2.2.8)へのパッチです。
--
小迫@出向中

--- regint.h.orig	2004-04-28 01:20:02.000000000 +0900
+++ regint.h	2004-05-24 14:51:42.000000000 +0900
@@ -500,6 +500,8 @@ enum OpCode {
   OP_REPEAT_NG,            /* {n,m}? (non greedy) */
   OP_REPEAT_INC,
   OP_REPEAT_INC_NG,        /* non greedy */
+  OP_REPEAT_INC_SG,        /* search and get in stack */
+  OP_REPEAT_INC_NG_SG,     /* search and get in stack (non greedy) */
   OP_NULL_CHECK_START,     /* null loop checker start */
   OP_NULL_CHECK_END,       /* null loop checker end   */
   OP_NULL_CHECK_END_MEMST, /* null loop checker end (with capture status) */
--- regparse.h.orig	2004-03-06 00:31:54.000000000 +0900
+++ regparse.h	2004-05-24 14:32:30.000000000 +0900
@@ -96,6 +96,7 @@ typedef struct {
 } CClassNode;
 
 typedef struct {
+  int state;
   struct _Node* target;
   int lower;
   int upper;
@@ -121,6 +122,7 @@ typedef struct {
 #define NST_ADDR_FIXED       (1<<9)
 #define NST_NAMED_GROUP      (1<<10)
 #define NST_NAME_REF         (1<<11)
+#define NST_IN_REPEAT        (1<<12) /* STK_REPEAT is nested in match stack. */
 
 #define SET_EFFECT_STATUS(node,f)      (node)->u.effect.state |=  (f)
 #define CLEAR_EFFECT_STATUS(node,f)    (node)->u.effect.state &= ~(f)
@@ -140,6 +142,7 @@ typedef struct {
 #define IS_CALL_RECURSION(cn)          (((cn)->state & NST_RECURSION)  != 0)
 #define IS_CALL_NAME_REF(cn)           (((cn)->state & NST_NAME_REF)   != 0)
 #define IS_BACKREF_NAME_REF(bn)        (((bn)->state & NST_NAME_REF)   != 0)
+#define IS_QUALIFIER_IN_REPEAT(qn)     (((qn)->state & NST_IN_REPEAT)  != 0)
 
 typedef struct {
   int state;
--- regparse.c.orig	2004-04-28 01:37:56.000000000 +0900
+++ regparse.c	2004-05-24 14:33:11.000000000 +0900
@@ -1058,6 +1058,7 @@ node_new_qualifier(int lower, int upper,
   Node* node = node_new();
   CHECK_NULL_RETURN(node);
   node->type = N_QUALIFIER;
+  NQUALIFIER(node).state  = 0;
   NQUALIFIER(node).target = NULL;
   NQUALIFIER(node).lower  = lower;
   NQUALIFIER(node).upper  = upper;
--- regcomp.c.orig	2004-04-28 01:20:01.000000000 +0900
+++ regcomp.c	2004-05-24 14:53:31.000000000 +0900
@@ -684,7 +684,16 @@ compile_range_repeat_node(QualifierNode*
   r = compile_tree_empty_check(qn->target, reg, empty_info);
   if (r) return r;
 
-  r = add_opcode(reg, qn->greedy ? OP_REPEAT_INC : OP_REPEAT_INC_NG);
+  if (
+#ifdef USE_SUBEXP_CALL
+      reg->num_call > 0 ||
+#endif
+      IS_QUALIFIER_IN_REPEAT(qn)) {
+    r = add_opcode(reg, qn->greedy ? OP_REPEAT_INC_SG : OP_REPEAT_INC_NG_SG);
+  }
+  else {
+    r = add_opcode(reg, qn->greedy ? OP_REPEAT_INC : OP_REPEAT_INC_NG);
+  }
   if (r) return r;
   r = add_mem_num(reg, num_repeat); /* OP_REPEAT ID */
   return r;
@@ -3057,6 +3066,10 @@ setup_tree(Node* node, regex_t* reg, int
       QualifierNode* qn = &(NQUALIFIER(node));
       Node* target = qn->target;
 
+      if ((state & IN_REPEAT) != 0) {
+        qn->state |= NST_IN_REPEAT;
+      }
+
       if (IS_REPEAT_INFINITE(qn->upper) || qn->upper >= 1) {
 	r = get_min_match_length(target, &d, env);
 	if (r) break;
--- regexec.c.orig	2004-04-28 01:20:02.000000000 +0900
+++ regexec.c	2004-05-24 14:59:40.000000000 +0900
@@ -1053,6 +1053,7 @@ match_at(regex_t* reg, UChar* str, UChar
   char *alloca_base;
   StackType *stk_alloc, *stk_base, *stk, *stk_end;
   StackType *stkp; /* used as any purpose. */
+  StackIndex si;
   StackIndex *repeat_stk;
   StackIndex *mem_start_stk, *mem_end_stk;
   n = reg->num_repeat + reg->num_mem * 2;
@@ -2170,79 +2171,67 @@ match_at(regex_t* reg, UChar* str, UChar
       break;
 
     case OP_REPEAT_INC:  STAT_OP_IN(OP_REPEAT_INC);
-      {
-	StackIndex si;
-
-	GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
-#ifdef USE_SUBEXP_CALL
-	if (reg->num_call > 0) {
-	  STACK_GET_REPEAT(mem, stkp);
-	  si = GET_STACK_INDEX(stkp);
-	}
-	else {
-	  si = repeat_stk[mem];
-	  stkp = STACK_AT(si);
-	}
-#else
-	si = repeat_stk[mem];
-	stkp = STACK_AT(si);
-#endif
-	stkp->u.repeat.count++;
-	if (stkp->u.repeat.count == reg->repeat_range[mem].upper) {
-	  /* end of repeat. Nothing to do. */
-	}
-	else if (stkp->u.repeat.count >= reg->repeat_range[mem].lower) {
-	  STACK_PUSH_ALT(p, s, sprev);
-	  p = stkp->u.repeat.pcode;
-	}
-	else {
-	  p = stkp->u.repeat.pcode;
-	}
-	STACK_PUSH_REPEAT_INC(si);
+      GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
+      si = repeat_stk[mem];
+      stkp = STACK_AT(si);
+
+    repeat_inc:
+      stkp->u.repeat.count++;
+      if (stkp->u.repeat.count == reg->repeat_range[mem].upper) {
+        /* end of repeat. Nothing to do. */
+      }
+      else if (stkp->u.repeat.count >= reg->repeat_range[mem].lower) {
+        STACK_PUSH_ALT(p, s, sprev);
+        p = stkp->u.repeat.pcode;
       }
+      else {
+        p = stkp->u.repeat.pcode;
+      }
+      STACK_PUSH_REPEAT_INC(si);
       STAT_OP_OUT;
       continue;
       break;
 
-    case OP_REPEAT_INC_NG:  STAT_OP_IN(OP_REPEAT_INC_NG);
-      {
-	StackIndex si;
-
-	GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
-#ifdef USE_SUBEXP_CALL
-	if (reg->num_call > 0) {
-	  STACK_GET_REPEAT(mem, stkp);
-	  si = GET_STACK_INDEX(stkp);
-	}
-	else {
-	  si = repeat_stk[mem];
-	  stkp = STACK_AT(si);
-	}
-#else
-	si = repeat_stk[mem];
-	stkp = STACK_AT(si);
-#endif
-	stkp->u.repeat.count++;
-	if (stkp->u.repeat.count < reg->repeat_range[mem].upper) {
-	  if (stkp->u.repeat.count >= reg->repeat_range[mem].lower) {
-	    UChar* pcode = stkp->u.repeat.pcode;
+    case OP_REPEAT_INC_SG:  STAT_OP_IN(OP_REPEAT_INC_SG);
+      GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
+      STACK_GET_REPEAT(mem, stkp);
+      si = GET_STACK_INDEX(stkp);
+      goto repeat_inc;
+      break;
 
-	    STACK_PUSH_REPEAT_INC(si);
-	    STACK_PUSH_ALT(pcode, s, sprev);
-	  }
-	  else {
-	    p = stkp->u.repeat.pcode;
-	    STACK_PUSH_REPEAT_INC(si);
-	  }
-	}
-	else if (stkp->u.repeat.count == reg->repeat_range[mem].upper) {
-	  STACK_PUSH_REPEAT_INC(si);
-	}
+    case OP_REPEAT_INC_NG:  STAT_OP_IN(OP_REPEAT_INC_NG);
+      GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
+      si = repeat_stk[mem];
+      stkp = STACK_AT(si);
+
+    repeat_inc_ng:
+      stkp->u.repeat.count++;
+      if (stkp->u.repeat.count < reg->repeat_range[mem].upper) {
+        if (stkp->u.repeat.count >= reg->repeat_range[mem].lower) {
+          UChar* pcode = stkp->u.repeat.pcode;
+          
+          STACK_PUSH_REPEAT_INC(si);
+          STACK_PUSH_ALT(pcode, s, sprev);
+        }
+        else {
+          p = stkp->u.repeat.pcode;
+          STACK_PUSH_REPEAT_INC(si);
+        }
+      }
+      else if (stkp->u.repeat.count == reg->repeat_range[mem].upper) {
+        STACK_PUSH_REPEAT_INC(si);
       }
       STAT_OP_OUT;
       continue;
       break;
 
+    case OP_REPEAT_INC_NG_SG:  STAT_OP_IN(OP_REPEAT_INC_NG_SG);
+      GET_MEMNUM_INC(mem, p); /* mem: OP_REPEAT ID */
+      STACK_GET_REPEAT(mem, stkp);
+      si = GET_STACK_INDEX(stkp);
+      goto repeat_inc_ng;
+      break;
+
     case OP_PUSH_POS:  STAT_OP_IN(OP_PUSH_POS);
       STACK_PUSH_POS(s, sprev);
       STAT_OP_OUT;

In This Thread

Prev Next