summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--parse.y9
-rw-r--r--test/ruby/test_hash.rb17
2 files changed, 26 insertions, 0 deletions
diff --git a/parse.y b/parse.y
index 8017011bb79..d4443d50d25 100644
--- a/parse.y
+++ b/parse.y
@@ -5617,6 +5617,15 @@ assoc : arg_value tASSOC arg_value
/*% %*/
/*% ripper: assoc_new!($1, $2) %*/
}
+ | tLABEL
+ {
+ /*%%%*/
+ NODE *val = gettable(p, $1, &@$);
+ if (!val) val = NEW_BEGIN(0, &@$);
+ $$ = list_append(p, NEW_LIST(NEW_LIT(ID2SYM($1), &@1), &@$), val);
+ /*% %*/
+ /*% ripper: assoc_new!($1, id_is_var(p, get_id($1)) ? var_ref!($1) : vcall!($1)) %*/
+ }
| tSTRING_BEG string_contents tLABEL_END arg_value
{
/*%%%*/
diff --git a/test/ruby/test_hash.rb b/test/ruby/test_hash.rb
index f79879c20a5..5aee1b5d5cf 100644
--- a/test/ruby/test_hash.rb
+++ b/test/ruby/test_hash.rb
@@ -2178,4 +2178,21 @@ class TestHash < Test::Unit::TestCase
end;
end
end
+
+ def test_value_omission
+ x = 1
+ y = 2
+ assert_equal({x: 1, y: 2}, {x:, y:})
+ assert_equal({one: 1, two: 2}, {one:, two:})
+ end
+
+ private
+
+ def one
+ 1
+ end
+
+ def two
+ 2
+ end
end