Bug #18250 ยป 0001-Give-params-a-name.patch
| bootstraptest/test_ractor.rb | ||
|---|---|---|
|
"ok"
|
||
|
}
|
||
|
assert_equal "ok", %q{
|
||
|
def foo(*); ->{ super }; end
|
||
|
begin
|
||
|
Ractor.make_shareable(foo)
|
||
|
rescue Ractor::IsolationError
|
||
|
"ok"
|
||
|
end
|
||
|
}
|
||
|
assert_equal "ok", %q{
|
||
|
def foo(...); ->{ super }; end
|
||
|
begin
|
||
|
Ractor.make_shareable(foo)
|
||
|
rescue Ractor::IsolationError
|
||
|
"ok"
|
||
|
end
|
||
|
}
|
||
|
end # if !ENV['GITHUB_WORKFLOW']
|
||
| iseq.c | ||
|---|---|---|
|
return val;
|
||
|
}
|
||
|
#define idREST '?'
|
||
|
static VALUE
|
||
|
param_name(ID name)
|
||
|
{
|
||
|
if (name == idREST) {
|
||
|
return Qfalse;
|
||
|
}
|
||
|
else {
|
||
|
return rb_id2str(name);
|
||
|
}
|
||
|
}
|
||
|
VALUE
|
||
|
rb_iseq_parameters(const rb_iseq_t *iseq, int is_proc)
|
||
|
{
|
||
| ... | ... | |
|
#define PARAM_ID(i) body->local_table[(i)]
|
||
|
#define PARAM(i, type) ( \
|
||
|
PARAM_TYPE(type), \
|
||
|
rb_id2str(PARAM_ID(i)) ? \
|
||
|
param_name(PARAM_ID(i)) ? \
|
||
|
rb_ary_push(a, ID2SYM(PARAM_ID(i))) : \
|
||
|
a)
|
||
| parse.y | ||
|---|---|---|
|
# define METHOD_NOT '!'
|
||
|
#endif
|
||
|
#define idREST '?'
|
||
|
#define idFWD_REST '*'
|
||
|
#ifdef RUBY3_KEYWORDS
|
||
|
#define idFWD_KWREST idPow /* Use simple "**", as tDSTAR is "**arg" */
|
||
| ... | ... | |
|
| restarg_mark
|
||
|
{
|
||
|
/*%%%*/
|
||
|
$$ = internal_id(p);
|
||
|
arg_var(p, $$);
|
||
|
arg_var(p, idREST);
|
||
|
/*% %*/
|
||
|
/*% ripper: rest_param!(Qnil) %*/
|
||
|
}
|
||
| test/ruby/test_iseq.rb | ||
|---|---|---|
|
assert_equal(42, ISeq.load_from_binary(iseq.to_binary).eval)
|
||
|
end
|
||
|
def test_super_with_block
|
||
|
iseq = compile(<<~EOF)
|
||
|
def touch(*) # :nodoc:
|
||
|
foo { super }
|
||
|
end
|
||
|
42
|
||
|
EOF
|
||
|
assert_equal(42, ISeq.load_from_binary(iseq.to_binary).eval)
|
||
|
end
|
||
|
def test_lambda_with_ractor_roundtrip
|
||
|
iseq = compile(<<~EOF)
|
||
|
x = 42
|
||