зеркало из https://github.com/github/ruby.git
shareable_constant_value: is effective only in comment-only line
This commit is contained in:
Родитель
25cf1aca92
Коммит
7060aeedbd
7
parse.y
7
parse.y
|
@ -7999,6 +7999,13 @@ parser_set_compile_option_flag(struct parser_params *p, const char *name, const
|
|||
static void
|
||||
parser_set_shareable_constant_value(struct parser_params *p, const char *name, const char *val)
|
||||
{
|
||||
for (const char *s = p->lex.pbeg, *e = p->lex.pcur; s < e; ++s) {
|
||||
if (*s == ' ' || *s == '\t') continue;
|
||||
if (*s == '#') break;
|
||||
rb_warning1("`%s' is ignored unless in comment-only line", WARN_S(name));
|
||||
return;
|
||||
}
|
||||
|
||||
int b = parser_get_bool(p, name, val);
|
||||
if (b >= 0) p->ctxt.shareable_constant_value = b;
|
||||
}
|
||||
|
|
|
@ -1178,26 +1178,27 @@ x = __ENCODING__
|
|||
assert_warning(/invalid value/) do
|
||||
assert_valid_syntax("# shareable_constant_value: invalid-option", verbose: true)
|
||||
end
|
||||
assert_warning(/ignored/) do
|
||||
assert_valid_syntax("nil # shareable_constant_value: true", verbose: true)
|
||||
end
|
||||
a, b, c = Class.new.class_eval("#{<<~"begin;"}\n#{<<~'end;'}")
|
||||
begin;
|
||||
# shareable_constant_value: true
|
||||
A = [[1]]
|
||||
# shareable_constant_value: false
|
||||
B = [[2]]
|
||||
C = # shareable_constant_value: true
|
||||
[[3]]
|
||||
|
||||
[A, B, C]
|
||||
[A, B]
|
||||
end;
|
||||
assert_send([Ractor, :shareable?, a])
|
||||
assert_not_send([Ractor, :shareable?, b])
|
||||
assert_send([Ractor, :shareable?, c])
|
||||
assert_equal([1], a[0])
|
||||
assert_send([Ractor, :shareable?, a[0]])
|
||||
a, b = Class.new.class_eval("#{<<~"begin;"}\n#{<<~'end;'}")
|
||||
begin;
|
||||
# shareable_constant_value: false
|
||||
class X # shareable_constant_value: true
|
||||
class X
|
||||
# shareable_constant_value: true
|
||||
A = [[1]]
|
||||
end
|
||||
B = []
|
||||
|
|
Загрузка…
Ссылка в новой задаче