summaryrefslogtreecommitdiff
path: root/parse.y
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-06-07 08:29:59 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2001-06-07 08:29:59 +0000
commit4c6b76c1e42ebc63bf3452ba3c76b2c1fca73c27 (patch)
tree7e18f15ca801b542314a3ad5f8b1f36d7bedfba3 /parse.y
parent85d105cf8c7c664d34bf86b8d72c728cb5b6e7ab (diff)
* parse.y (yylex): exclude kDO_BLOCK too much by false condition.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1514 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'parse.y')
-rw-r--r--parse.y11
1 files changed, 7 insertions, 4 deletions
diff --git a/parse.y b/parse.y
index c67a51096a..0ae00da19e 100644
--- a/parse.y
+++ b/parse.y
@@ -426,6 +426,9 @@ stmt : kALIAS fitem {lex_state = EXPR_FNAME;} fitem
}
| lhs '=' mrhs_basic
{
+ if (nd_type($3) == NODE_RESTARGS) {
+ nd_set_type($3, NODE_REXPAND);
+ }
$$ = node_assign($1, $3);
}
| mlhs '=' mrhs
@@ -1147,7 +1150,7 @@ mrhs_basic : args ',' arg
| tSTAR arg
{
value_expr($2);
- $$ = NEW_REXPAND($2);
+ $$ = NEW_RESTARGS($2);
}
primary : literal
@@ -1212,8 +1215,9 @@ primary : literal
}
| tLBRACK aref_args ']'
{
- if ($2 == 0)
+ if ($2 == 0) {
$$ = NEW_ZARRAY(); /* zero length array*/
+ }
else {
$$ = $2;
}
@@ -3719,8 +3723,7 @@ yylex()
}
if (kw->id[0] == kDO) {
if (COND_P()) return kDO_COND;
- if (CMDARG_P() && state != EXPR_CMDARG && state != EXPR_ARG)
- return kDO_BLOCK;
+ if (CMDARG_P()) return kDO_BLOCK;
return kDO;
}
if (state == EXPR_BEG)