なかだです。

At Thu, 23 Oct 2003 08:37:02 +0900,
Yukihiro Matsumoto wrote:
>   * やるんだったら、文字列に限らずPythonの「括弧の中では改行
>     は無視」というルールを取り込む形で実現するべきだと思いま
>     す。ただ、以前すこし考えた範囲内ではあまり嬉しくないケー
>     スがあったような気がします。正直なにが嬉しくなかったのか
>     覚えていないので、重要では無いことなのかもしれませんが。

ifなどが全部modifierになってしまうとか?

全然関係ないんですが、COND_PUSH()やCMDARG_PUSH()でまったく同じ
コードが二組あるのが気になる、という話をしばらく前のRHG読書会の
ときにしていたのを思い出しました。大して短くなるわけでもないん
ですが。


Index: parse.y =================================================================== RCS file: /cvs/ruby/src/ruby/parse.y,v retrieving revision 1.296 diff -u -2 -p -r1.296 parse.y --- parse.y 15 Oct 2003 02:25:44 -0000 1.296 +++ parse.y 23 Oct 2003 00:23:30 -0000 @@ -84,23 +84,20 @@ typedef unsigned long stack_type; #endif +#define BITSTACK_PUSH(stack, n) (stack = (stack<<1)|((n)&1)) +#define BITSTACK_POP(stack) (stack >>= 1) +#define BITSTACK_LEXPOP(stack) (stack = (stack >> 1) | (stack & 1)) +#define BITSTACK_SET_P(stack) (stack&1) + static stack_type cond_stack = 0; -#define COND_PUSH(n) (cond_stack = (cond_stack<<1)|((n)&1)) -#define COND_POP() (cond_stack >>= 1) -#define COND_LEXPOP() do {\ - int last = COND_P();\ - cond_stack >>= 1;\ - if (last) cond_stack |= 1;\ -} while (0) -#define COND_P() (cond_stack&1) +#define COND_PUSH(n) BITSTACK_PUSH(cond_stack, n) +#define COND_POP() BITSTACK_POP(cond_stack) +#define COND_LEXPOP() BITSTACK_LEXPOP(cond_stack) +#define COND_P() BITSTACK_SET_P(cond_stack) static stack_type cmdarg_stack = 0; -#define CMDARG_PUSH(n) (cmdarg_stack = (cmdarg_stack<<1)|((n)&1)) -#define CMDARG_POP() (cmdarg_stack >>= 1) -#define CMDARG_LEXPOP() do {\ - int last = CMDARG_P();\ - cmdarg_stack >>= 1;\ - if (last) cmdarg_stack |= 1;\ -} while (0) -#define CMDARG_P() (cmdarg_stack&1) +#define CMDARG_PUSH(n) BITSTACK_PUSH(cmdarg_stack, n) +#define CMDARG_POP() BITSTACK_POP(cmdarg_stack) +#define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack) +#define CMDARG_P() BITSTACK_SET_P(cmdarg_stack) static int class_nest = 0;
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦