mput です。

文字リテラルの結合で、間に改行が挟めるようになると
* http://pc2.2ch.net/test/read.cgi/tech/1063028224/747
   みたいなのが動くようになる
* リテラル同士の間にコメントが書けるようになる
* Python にできて Ruby にできないことがひとつ減る
といったあたりが嬉しいのですが、ダメでしょうか?

Index: parse.y
===================================================================
RCS file: /src/ruby/parse.y,v
retrieving revision 1.296
diff -u -1 -r1.296 parse.y
--- parse.y	15 Oct 2003 02:25:44 -0000	1.296
+++ parse.y	22 Oct 2003 19:26:42 -0000
@@ -73,2 +73,3 @@
      EXPR_MID,			/* newline significant, +/- is a operator. */
+    EXPR_STR,			/* ignore newline, +/- is a operator. */
      EXPR_FNAME,			/* ignore newline, no reserved words. */
@@ -85,2 +86,4 @@

+static stack_type paren_nest = 0;
+
  static stack_type cond_stack = 0;
@@ -3299,3 +3302,3 @@
  		lex_strterm = 0;
-		lex_state = EXPR_END;
+		lex_state = EXPR_STR;
  	    }
@@ -3333,2 +3336,5 @@
  	    goto retry;
+	  case EXPR_STR:
+	    if (paren_nest & 1)
+		goto retry;
  	  default:
@@ -3928,2 +3934,3 @@
  	lex_state = EXPR_END;
+	paren_nest >>= 1;
  	return c;
@@ -4038,2 +4045,3 @@
  	lex_state = EXPR_BEG;
+	paren_nest = (paren_nest << 1) | 1;
  	return c;
@@ -4062,2 +4070,3 @@
  	CMDARG_PUSH(0);
+	paren_nest = (paren_nest << 1) | 1;
  	return c;
@@ -4065,8 +4074,14 @@
        case '{':
-	if (IS_ARG() || lex_state == EXPR_END)
+	if (IS_ARG() || lex_state == EXPR_END) {
  	    c = '{';          /* block (primary) */
-	else if (lex_state == EXPR_ENDARG)
+	    paren_nest = (paren_nest << 1) | 0;
+	}
+	else if (lex_state == EXPR_ENDARG) {
  	    c = tLBRACE_ARG;  /* block (expr) */
-	else
+	    paren_nest = (paren_nest << 1) | 0;
+	}
+	else {
  	    c = tLBRACE;      /* hash */
+	    paren_nest = (paren_nest << 1) | 1;
+	}
  	COND_PUSH(0);

--
mput <root / mput.dip.jp>