From: nobu.nakada@... Date: 2004-03-31T01:15:55+09:00 Subject: [ruby-dev:23283] ensure modifier なかだです。 ensure修飾子があればrescueに負けないくらい使いそうな気がするの ですが、どうでしょうか。 Index: keywords =================================================================== RCS file: /cvs/ruby/src/ruby/keywords,v retrieving revision 1.6 diff -U2 -p -d -r1.6 keywords --- keywords 28 Sep 2002 11:08:59 -0000 1.6 +++ keywords 30 Mar 2004 01:20:58 -0000 @@ -17,5 +17,5 @@ else, {kELSE, kELSE}, EXPR_BEG elsif, {kELSIF, kELSIF}, EXPR_BEG end, {kEND, kEND}, EXPR_END -ensure, {kENSURE, kENSURE}, EXPR_BEG +ensure, {kENSURE, kENSURE_MOD}, EXPR_BEG false, {kFALSE, kFALSE}, EXPR_END for, {kFOR, kFOR}, EXPR_BEG Index: parse.y =================================================================== RCS file: /cvs/ruby/src/ruby/parse.y,v retrieving revision 1.318 diff -U2 -p -d -r1.318 parse.y --- parse.y 20 Mar 2004 16:45:35 -0000 1.318 +++ parse.y 30 Mar 2004 01:17:00 -0000 @@ -239,4 +239,5 @@ static void top_local_setup(); kUNTIL_MOD kRESCUE_MOD + kENSURE_MOD kALIAS kDEFINED @@ -309,5 +310,5 @@ static void top_local_setup(); %nonassoc kDEFINED %right '=' tOP_ASGN -%left kRESCUE_MOD +%left kRESCUE_MOD kENSURE_MOD %right '?' ':' %nonassoc tDOT2 tDOT3 @@ -470,4 +471,8 @@ stmt : kALIAS fitem {lex_state = EXPR_F $$ = NEW_RESCUE($1, NEW_RESBODY(0,$3,0), 0); } + | stmt kENSURE_MOD stmt + { + $$ = NEW_ENSURE($1, $3); + } | klBEGIN { @@ -954,5 +959,5 @@ reswords : k__LINE__ | k__FILE__ | klBE | kOR | kREDO | kRESCUE | kRETRY | kRETURN | kSELF | kSUPER | kTHEN | kTRUE | kUNDEF | kWHEN | kYIELD - | kIF_MOD | kUNLESS_MOD | kWHILE_MOD | kUNTIL_MOD | kRESCUE_MOD + | kIF_MOD | kUNLESS_MOD | kWHILE_MOD | kUNTIL_MOD | kRESCUE_MOD | kENSURE_MOD ; @@ -965,4 +970,8 @@ arg : lhs '=' arg $$ = node_assign($1, NEW_RESCUE($3, NEW_RESBODY(0,$5,0), 0)); } + | lhs '=' arg kENSURE_MOD arg + { + $$ = node_assign($1, NEW_ENSURE($3, $5)); + } | var_lhs tOP_ASGN arg { -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦