[#7102] Ruby 1.3.4-990611 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.4-990611 is out, check out:

20 messages 1999/06/11

[#7223] Ruby 1.3.4-990625 — Yukihiro Matsumoto <matz@...>

Ruby 1.3.4-990625 is out, check out:

14 messages 1999/06/25
[#7224] -Wl,-rpath on Linux (Re: Ruby 1.3.4-990625) — Ryo HAYASAKA <hayasaka@...21.u-aizu.ac.jp> 1999/06/25

早坂@会津大学です。

[ruby-dev:7194] Re: ruby-1.3.x can't parse %Q{a{b}c}

From: Inaba Hiroto <inaba@...>
Date: 1999-06-23 06:18:09 UTC
List: ruby-dev #7194
稲葉です.

やっぱりパッチファイルを手で修正するなんてしちゃいけなかったですね.
diff -uしたものを再送します.

--- parse.y.org	Wed Jun  9 18:21:26 1999
+++ parse.y	Wed Jun 23 15:10:11 1999
@@ -1977,7 +1977,7 @@
 
 static int
 parse_regx(term, paren)
-    int term;
+    int term, paren;
 {
     register int c;
     char kcode = 0;
@@ -1990,7 +1990,7 @@
 
     newtok();
     while ((c = nextc()) != -1) {
-	if ((!in_brack && c == term) || nest > 0) {
+	if (!in_brack && c == term && nest == 0) {
 	    goto regx_end;
 	}
 
@@ -2040,10 +2040,6 @@
 		}
 		/* fall through */
 	      default:
-		if (paren)  {
-		    if (c == paren) nest++;
-		    if (c == term) nest--;
-		}
 		if (c == term) {
 		    tokadd(c);
 		}
@@ -2072,6 +2068,10 @@
 	    return 0;
 
 	  default:
+	    if (paren && !in_brack)  {
+	      if (c == paren) nest++;
+	      if (c == term) nest--;
+	    }
 	    if (ismbchar(c)) {
 		int i, len = mbclen(c)-1;
 
@@ -2198,10 +2198,7 @@
 	}
 	if (paren) {
 	    if (c == paren) nest++;
-	    if (c == term) {
-		nest--;
-		if (nest == 0) break;
-	    }
+	    if (c == term && nest-- == 0) break;
 	}
 	tokadd(c);
     }
@@ -2276,10 +2273,7 @@
 	}
 	if (paren) {
 	    if (c == paren) nest++;
-	    if (c == term) {
-		nest--;
-		if (nest == 0) break;
-	    }
+	    if (c == term && nest-- == 0) break;
 	}
 	tokadd(c);
     }
@@ -3034,11 +3028,12 @@
 		rb_compile_error("unterminated quoted string meets end of file");
 		return 0;
 	    }
-	    paren = 0;
+	    paren = term;
 	    if (term == '(') term = ')';
 	    else if (term == '[') term = ']';
 	    else if (term == '{') term = '}';
 	    else if (term == '<') term = '>';
+	    else paren = 0;
 
 	    switch (c) {
 	      case 'Q':
--
	稲葉 浩人 <inaba@sdd.tokyo-sc.toshiba.co.jp/inaba@st.rim.or.jp>

In This Thread

Prev Next