[Bug #18890] newline should be insignificant after pattern label
This commit is contained in:
parent
902d1a5c51
commit
eaeb130b11
Notes:
git
2022-07-06 08:33:01 +09:00
2
parse.y
2
parse.y
@ -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);
|
||||
|
@ -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")}}
|
||||
|
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user