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>