Files
mruby-mruby/mrbgems/mruby-method
dearblue c182903ea0 Fixed finding variables from proc in binding.eval failed
Previously the following code did not produce the expected results:
```ruby
bx = binding
block = bx.eval("a = 1; proc { a }")
bx.eval("a = 2")
p block.call  # Expect 2 but return 1 due to a bug
```

The previous implementation of `Binding#eval` evaluated the code and then merged the top layer variables.
This patch will parse and expand the variable space before making a call to `eval`.
This means that the call to `Binding#eval` will do the parsing twice.

In addition, the following changes will be made:
- Make `mrb_parser_foreach_top_variable()`, `mrb_binding_extract_proc()` and `mrb_binding_extract_env()` functions private global functions.
- Remove the `posthook` argument from `mrb_exec_irep()`.
  The `posthook` argument was introduced to implement the `binding` method.
  This patch is unnecessary because it uses a different implementation method.

ref #5362
fixed #5491
2021-06-26 13:43:36 +09:00
..
2017-12-18 10:54:37 +09:00

mruby-method

An implementation of class Method and UnboundMethod for mruby

p Enumerable.instance_method(:find_all).source_location
#=> ["mruby/mruby/mrblib/enum.rb", 148]

Note

You need to enable debug option in your build configuration to use source_location method in this gem, for example:

MRuby::Build.new do |conf|
  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