зеркало из https://github.com/github/ruby.git
[Bug #18890] newline should be insignificant after pattern label
This commit is contained in:
Родитель
902d1a5c51
Коммит
eaeb130b11
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:
|
||||
|
|
Загрузка…
Ссылка в новой задаче