Unverified Commit 8a9f891f authored by KOBAYASHI Shuji's avatar KOBAYASHI Shuji Committed by Yukihiro "Matz" Matsumoto

Rename `Kernel#__method__` to `Kernel#__callee__`

Because the current behavior of `__method__` is equivalent to `__callee__`.

Example:

  # example.rb
  def src
    __send__(ARGV[0])
  end
  alias dst src
  %w[src dst].each {|n| puts "call #{n} => #{__send__(n).inspect}"}

  Ruby:

    $ ruby example.rb __method__
    call src => :src
    call dst => :src

    $ ruby example.rb __callee__
    call src => :src
    call dst => :dst

  mruby:

    $ mruby example.rb __method__
    call src => :src
    call dst => :dst
parent 2d8f4fa9
...@@ -631,7 +631,7 @@ module Kernel ...@@ -631,7 +631,7 @@ module Kernel
# def repeat(n) # def repeat(n)
# raise ArgumentError, "#{n} is negative!" if n < 0 # raise ArgumentError, "#{n} is negative!" if n < 0
# unless block_given? # unless block_given?
# return to_enum(__method__, n) # __method__ is :repeat here # return to_enum(__callee__, n) do # __callee__ is :repeat here
# end # end
# each do |*val| # each do |*val|
# n.times { yield *val } # n.times { yield *val }
......
...@@ -66,15 +66,14 @@ mrb_f_caller(mrb_state *mrb, mrb_value self) ...@@ -66,15 +66,14 @@ mrb_f_caller(mrb_state *mrb, mrb_value self)
/* /*
* call-seq: * call-seq:
* __method__ -> symbol * __callee__ -> symbol
* *
* Returns the name at the definition of the current method as a * Returns the called name of the current method as a Symbol.
* Symbol.
* If called outside of a method, it returns <code>nil</code>. * If called outside of a method, it returns <code>nil</code>.
* *
*/ */
static mrb_value static mrb_value
mrb_f_method(mrb_state *mrb, mrb_value self) mrb_f_callee(mrb_state *mrb, mrb_value self)
{ {
mrb_callinfo *ci = mrb->c->ci; mrb_callinfo *ci = mrb->c->ci;
ci--; ci--;
...@@ -247,7 +246,7 @@ mrb_mruby_kernel_ext_gem_init(mrb_state *mrb) ...@@ -247,7 +246,7 @@ mrb_mruby_kernel_ext_gem_init(mrb_state *mrb)
mrb_define_module_function(mrb, krn, "fail", mrb_f_raise, MRB_ARGS_OPT(2)); mrb_define_module_function(mrb, krn, "fail", mrb_f_raise, MRB_ARGS_OPT(2));
mrb_define_module_function(mrb, krn, "caller", mrb_f_caller, MRB_ARGS_OPT(2)); mrb_define_module_function(mrb, krn, "caller", mrb_f_caller, MRB_ARGS_OPT(2));
mrb_define_method(mrb, krn, "__method__", mrb_f_method, MRB_ARGS_NONE()); mrb_define_method(mrb, krn, "__callee__", mrb_f_callee, MRB_ARGS_NONE());
mrb_define_module_function(mrb, krn, "Integer", mrb_f_integer, MRB_ARGS_ARG(1,1)); mrb_define_module_function(mrb, krn, "Integer", mrb_f_integer, MRB_ARGS_ARG(1,1));
#ifndef MRB_NO_FLOAT #ifndef MRB_NO_FLOAT
mrb_define_module_function(mrb, krn, "Float", mrb_f_float, MRB_ARGS_REQ(1)); mrb_define_module_function(mrb, krn, "Float", mrb_f_float, MRB_ARGS_REQ(1));
......
...@@ -37,13 +37,22 @@ assert('Kernel.caller, Kernel#caller') do ...@@ -37,13 +37,22 @@ assert('Kernel.caller, Kernel#caller') do
assert_raise(TypeError) { c.new.baz(nil) } assert_raise(TypeError) { c.new.baz(nil) }
end end
assert('Kernel#__method__') do assert('Kernel#__callee__') do
assert_equal(:m, Class.new {def m; __method__; end}.new.m) c = Class.new do
assert_equal(:m, Class.new {define_method(:m) {__method__}}.new.m) def m1; __callee__ end
define_method(:m2) {__callee__}
alias m3 m1
alias_method :m4, :m2
end
assert_equal(:m1, c.new.m1)
assert_equal(:m2, c.new.m2)
assert_equal(:m3, c.new.m3)
assert_equal(:m4, c.new.m4)
c = Class.new do c = Class.new do
[:m1, :m2].each do |m| [:m1, :m2].each do |m|
define_method(m) do define_method(m) do
__method__ __callee__
end end
end end
end end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment