diff options
author | Nobuyoshi Nakada <[email protected]> | 2022-07-03 14:45:24 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2022-07-06 08:32:36 +0900 |
commit | eaeb130b11fefe91aaf61f294ea32af76dada74f (patch) | |
tree | 9718801a7fc867f025f62589f1b7881c1e221db7 | |
parent | 902d1a5c513ed6e49e7f577ffe7146d30798b3e9 (diff) |
[Bug #18890] newline should be insignificant after pattern label
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/6087
-rw-r--r-- | parse.y | 2 | ||||
-rw-r--r-- | test/ruby/test_parse.rb | 33 | ||||
-rw-r--r-- | test/ruby/test_pattern_matching.rb | 15 |
3 files changed, 49 insertions, 1 deletions
@@ -7457,7 +7457,7 @@ parser_string_term(struct parser_params *p, int func) } if ((func & STR_FUNC_LABEL) && IS_LABEL_SUFFIX(0)) { nextc(p); - SET_LEX_STATE(EXPR_BEG|EXPR_LABEL); + SET_LEX_STATE(EXPR_ARG|EXPR_LABELED); return tLABEL_END; } SET_LEX_STATE(EXPR_END); diff --git a/test/ruby/test_parse.rb b/test/ruby/test_parse.rb index 8b7c8f0e5b..16764a2146 100644 --- a/test/ruby/test_parse.rb +++ b/test/ruby/test_parse.rb @@ -1370,6 +1370,39 @@ x = __ENCODING__ assert_syntax_error('x = \ 42', /escaped space/) end + def test_label + expected = {:foo => 1} + + code = '{"foo": 1}' + assert_valid_syntax(code) + assert_equal(expected, eval(code)) + + code = '{foo: 1}' + assert_valid_syntax(code) + assert_equal(expected, eval(code)) + + class << (obj = Object.new) + attr_reader :arg + def set(arg) + @arg = arg + end + end + + assert_valid_syntax(code = "#{<<~"do;"}\n#{<<~'end;'}") + do; + obj.set foo: + 1 + end; + assert_equal(expected, eval(code)) + + assert_valid_syntax(code = "#{<<~"do;"}\n#{<<~'end;'}") + do; + obj.set "foo": + 1 + end; + assert_equal(expected, eval(code)) + end + =begin def test_past_scope_variable assert_warning(/past scope/) {catch {|tag| eval("BEGIN{throw tag}; tap {a = 1}; a")}} diff --git a/test/ruby/test_pattern_matching.rb b/test/ruby/test_pattern_matching.rb index 7531466f91..b8c445c806 100644 --- a/test/ruby/test_pattern_matching.rb +++ b/test/ruby/test_pattern_matching.rb @@ -1155,6 +1155,21 @@ END end end + [{a: 42}, {b: 42}].each do |i| + assert_block('newline should be insignificant after pattern label') do + case i + in a: + 0 + true + in "b": + 0 + true + else + false + end + end + end + assert_syntax_error(%q{ case _ in a:, a: |