[Bug #18890] newline should be insignificant after pattern label

This commit is contained in:
Nobuyoshi Nakada 2022-07-03 14:45:24 +09:00
Родитель 902d1a5c51
Коммит eaeb130b11
3 изменённых файлов: 49 добавлений и 1 удалений

Просмотреть файл

@ -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: