Unverified Commit d9049c10 authored by Yukihiro "Matz" Matsumoto's avatar Yukihiro "Matz" Matsumoto Committed by GitHub

Merge pull request #3904 from ksss/mruby-method

Add mruby-method
parents bba6c9a1 c0914dbb
mruby-method
===
A implementetion of class **Method** and **UnboundMethod** for mruby
```ruby
p Enumerable.instance_method(:find_all).source_location
#=> ["mruby/mruby/mrblib/enum.rb", 148]
```
# Note
`source_location` method need this configuration in build_config.rb
```ruby
MRuby::Build.new do |conf|
enable_debug
end
```
# Supported Methods
## Kernel
- `Kernel#method`
- `Kernel#singleton_method`
## Module
- `Module#instance_method`
## Method class
- `Method#name`
- `Method#call`
- `Method#super_method`
- `Method#arity`
- `Method#unbind`
- `Method#[]`
- `Method#owner`
- `Method#receiver`
- `Method#parameters`
- `Method#source_location`
- `Method#to_proc`
## UnboundMethod class
- `UnboundMethod#name`
- `UnboundMethod#bind`
- `UnboundMethod#super_method`
- `UnboundMethod#arity`
- `UnboundMethod#owner`
- `UnboundMethod#parameters`
- `UnboundMethod#source_location`
# See also
- https://ruby-doc.org/core-2.3.3/Method.html
- https://ruby-doc.org/core-2.3.3/UnboundMethod.html
MRuby::Gem::Specification.new('mruby-method') do |spec|
spec.license = 'MIT'
spec.author = 'mruby developers'
spec.summary = 'Method and UnboundMethod class'
spec.add_dependency('mruby-proc-ext', :core => 'mruby-proc-ext')
end
module Kernel
def singleton_method(name)
m = method(name)
if m.owner != singleton_class
raise NameError, "undefined method `#{name}' for class `#{singleton_class}'"
end
m
end
end
class Method
def to_proc
m = self
lambda { |*args, &b|
m.call(*args, &b)
}
end
def owner
@owner
end
def receiver
@recv
end
def name
@name
end
end
class UnboundMethod
def owner
@owner
end
def name
@name
end
end
This diff is collapsed.
This diff is collapsed.
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