diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-01-05 04:41:21 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2000-01-05 04:41:21 +0000 |
commit | 76f0202393a0afee6515cdc7d86dfdd80a8ab5c5 (patch) | |
tree | 638cf572ae7f4776965610fd0e2b3765cb228937 /parse.y | |
parent | 7ada9b8b5aa450ea8141686784d72e91caea719f (diff) |
20000105
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_4@598 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r-- | parse.y | 26 |
1 files changed, 18 insertions, 8 deletions
@@ -330,21 +330,31 @@ stmt : block_call | stmt kWHILE_MOD expr { value_expr($3); - if (nd_type($1) == NODE_BEGIN) { - $$ = NEW_WHILE(cond($3), $1->nd_body, 0); + if ($1) { + if (nd_type($1) == NODE_BEGIN) { + $$ = NEW_WHILE(cond($3), $1->nd_body, 0); + } + else { + $$ = NEW_WHILE(cond($3), $1, 1); + } } else { - $$ = NEW_WHILE(cond($3), $1, 1); + $$ = 0; } } | stmt kUNTIL_MOD expr { value_expr($3); - if (nd_type($1) == NODE_BEGIN) { - $$ = NEW_UNTIL(cond($3), $1->nd_body, 0); + if ($1) { + if (nd_type($1) == NODE_BEGIN) { + $$ = NEW_UNTIL(cond($3), $1->nd_body, 0); + } + else { + $$ = NEW_UNTIL(cond($3), $1, 1); + } } else { - $$ = NEW_UNTIL(cond($3), $1, 1); + $$ = 0; } } | klBEGIN @@ -708,7 +718,7 @@ arg : lhs '=' arg } | tUPLUS arg { - if (nd_type($2) == NODE_LIT) { + if ($2 && nd_type($2) == NODE_LIT) { $$ = $2; } else { @@ -717,7 +727,7 @@ arg : lhs '=' arg } | tUMINUS arg { - if (nd_type($2) == NODE_LIT && FIXNUM_P($2->nd_lit)) { + if ($2 && nd_type($2) == NODE_LIT && FIXNUM_P($2->nd_lit)) { long i = FIX2LONG($2->nd_lit); $2->nd_lit = INT2FIX(-i); |