[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)) {
|
if ((func & STR_FUNC_LABEL) && IS_LABEL_SUFFIX(0)) {
|
||||||
nextc(p);
|
nextc(p);
|
||||||
SET_LEX_STATE(EXPR_BEG|EXPR_LABEL);
|
SET_LEX_STATE(EXPR_ARG|EXPR_LABELED);
|
||||||
return tLABEL_END;
|
return tLABEL_END;
|
||||||
}
|
}
|
||||||
SET_LEX_STATE(EXPR_END);
|
SET_LEX_STATE(EXPR_END);
|
||||||
|
@ -1370,6 +1370,39 @@ x = __ENCODING__
|
|||||||
assert_syntax_error('x = \ 42', /escaped space/)
|
assert_syntax_error('x = \ 42', /escaped space/)
|
||||||
end
|
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
|
=begin
|
||||||
def test_past_scope_variable
|
def test_past_scope_variable
|
||||||
assert_warning(/past scope/) {catch {|tag| eval("BEGIN{throw tag}; tap {a = 1}; a")}}
|
assert_warning(/past scope/) {catch {|tag| eval("BEGIN{throw tag}; tap {a = 1}; a")}}
|
||||||
|
@ -1155,6 +1155,21 @@ END
|
|||||||
end
|
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{
|
assert_syntax_error(%q{
|
||||||
case _
|
case _
|
||||||
in a:, a:
|
in a:, a:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user