summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--parse.y8
2 files changed, 11 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 6252d96db0..419ef8ccc8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri Apr 23 14:52:08 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * parse.y (stmt, arg, aref_args): should not make sole splat into
+ array, in aref_args other than aref with op_asgn.
+
Fri Apr 23 14:14:38 2004 Tanaka Akira <akr@m17n.org>
* lib/resolv.rb: don't use Regexp#source to embed regexps.
diff --git a/parse.y b/parse.y
index b927a2c809..41fd0cde2f 100644
--- a/parse.y
+++ b/parse.y
@@ -167,7 +167,7 @@ static void top_local_setup();
#define NODE_STRTERM NODE_ZARRAY /* nothing to gc */
#define NODE_HEREDOC NODE_ARRAY /* 1, 3 to gc */
-#define SIGN_EXTEND(x,n) (((1<<(n))-1-((x)&~(~0<<(n))))^~(~0<<(n)))
+#define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
#define nd_func u1.id
#if SIZEOF_SHORT == 2
#define nd_term(node) ((signed short)(node)->u2.id)
@@ -526,6 +526,8 @@ stmt : kALIAS fitem {lex_state = EXPR_FNAME;} fitem
value_expr($6);
args = NEW_LIST($6);
+ if ($3 && nd_type($3) != NODE_ARRAY)
+ $3 = NEW_LIST($3);
$3 = list_append($3, NEW_NIL());
list_concat(args, $3);
if ($5 == tOROP) {
@@ -988,6 +990,8 @@ arg : lhs '=' arg
value_expr($6);
args = NEW_LIST($6);
+ if ($3 && nd_type($3) != NODE_ARRAY)
+ $3 = NEW_LIST($3);
$3 = list_append($3, NEW_NIL());
list_concat(args, $3);
if ($5 == tOROP) {
@@ -1228,7 +1232,7 @@ aref_args : none
| tSTAR arg opt_nl
{
value_expr($2);
- $$ = NEW_LIST(NEW_SPLAT($2));
+ $$ = NEW_NEWLINE(NEW_SPLAT($2));
}
;