1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Show the name Kernel#proc in the warning message

This commit is contained in:
Nobuyoshi Nakada 2019-11-12 22:58:09 +09:00
parent 3816622fbe
commit bf34ade7ef
No known key found for this signature in database
GPG key ID: 4BC7D6DF58D8DF60
3 changed files with 17 additions and 10 deletions

16
proc.c
View file

@ -741,7 +741,7 @@ rb_func_lambda_new(rb_block_call_func_t func, VALUE val, int min_argc, int max_a
static const char proc_without_block[] = "tried to create Proc object without a block"; static const char proc_without_block[] = "tried to create Proc object without a block";
static VALUE static VALUE
proc_new(VALUE klass, int8_t is_lambda) proc_new(VALUE klass, int8_t is_lambda, int8_t kernel)
{ {
VALUE procval; VALUE procval;
const rb_execution_context_t *ec = GET_EC(); const rb_execution_context_t *ec = GET_EC();
@ -757,11 +757,13 @@ proc_new(VALUE klass, int8_t is_lambda)
rb_raise(rb_eArgError, proc_without_block); rb_raise(rb_eArgError, proc_without_block);
} }
else { else {
rb_warn("Capturing the given block using Proc.new is deprecated; use `&block` instead"); const char *name = kernel ? "Kernel#proc" : "Proc.new";
rb_warn("Capturing the given block using %s is deprecated; "
"use `&block` instead", name);
} }
} }
#else #else
if (0) if (0);
#endif #endif
else { else {
rb_raise(rb_eArgError, proc_without_block); rb_raise(rb_eArgError, proc_without_block);
@ -817,7 +819,7 @@ proc_new(VALUE klass, int8_t is_lambda)
static VALUE static VALUE
rb_proc_s_new(int argc, VALUE *argv, VALUE klass) rb_proc_s_new(int argc, VALUE *argv, VALUE klass)
{ {
VALUE block = proc_new(klass, FALSE); VALUE block = proc_new(klass, FALSE, FALSE);
rb_obj_call_init_kw(block, argc, argv, RB_PASS_CALLED_KEYWORDS); rb_obj_call_init_kw(block, argc, argv, RB_PASS_CALLED_KEYWORDS);
return block; return block;
@ -826,7 +828,7 @@ rb_proc_s_new(int argc, VALUE *argv, VALUE klass)
VALUE VALUE
rb_block_proc(void) rb_block_proc(void)
{ {
return proc_new(rb_cProc, FALSE); return proc_new(rb_cProc, FALSE, FALSE);
} }
/* /*
@ -839,13 +841,13 @@ rb_block_proc(void)
static VALUE static VALUE
f_proc(VALUE _) f_proc(VALUE _)
{ {
return rb_block_proc(); return proc_new(rb_cProc, FALSE, TRUE);
} }
VALUE VALUE
rb_block_lambda(void) rb_block_lambda(void)
{ {
return proc_new(rb_cProc, TRUE); return proc_new(rb_cProc, TRUE, FALSE);
} }
/* /*

View file

@ -56,7 +56,7 @@ describe "Kernel#proc" do
-> { -> {
some_method { "hello" } some_method { "hello" }
}.should complain(/Capturing the given block using Proc.new is deprecated/) }.should complain(/Capturing the given block using Kernel#proc is deprecated/)
end end
end end
end end

View file

@ -55,7 +55,10 @@ class TestProc < Test::Unit::TestCase
def assert_arity(n) def assert_arity(n)
meta = class << self; self; end meta = class << self; self; end
meta.class_eval {define_method(:foo, Proc.new)} b = assert_warn(/Capturing the given block using Proc\.new is deprecated/) do
Proc.new
end
meta.class_eval {define_method(:foo, b)}
assert_equal(n, method(:foo).arity) assert_equal(n, method(:foo).arity)
end end
@ -1413,8 +1416,10 @@ class TestProc < Test::Unit::TestCase
end end
def method_for_test_proc_without_block_for_symbol def method_for_test_proc_without_block_for_symbol
assert_warn(/Capturing the given block using Kernel#proc is deprecated/) do
binding.eval('proc') binding.eval('proc')
end end
end
def test_proc_without_block_for_symbol def test_proc_without_block_for_symbol
assert_equal('1', method_for_test_proc_without_block_for_symbol(&:to_s).call(1), '[Bug #14782]') assert_equal('1', method_for_test_proc_without_block_for_symbol(&:to_s).call(1), '[Bug #14782]')