diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2016-11-25 09:20:47 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2016-11-25 09:20:47 +0900 |
| commit | d77b25410880f0c79bd215c406ec44a9dac07769 (patch) | |
| tree | 5519faefa52478adce9d4b9ae5db892aa9c95912 /mrbgems | |
| parent | 6905597f5b750e75e3320a5c9a74e4c270f155eb (diff) | |
| parent | 1ec5994377b45b0299a9c4e6e7ab275792d81bc9 (diff) | |
| download | mruby-d77b25410880f0c79bd215c406ec44a9dac07769.tar.gz mruby-d77b25410880f0c79bd215c406ec44a9dac07769.zip | |
Merge pull request #3287 from bouk/proc-arity
Fix calling .arity on Proc with undefined `initialize`
Diffstat (limited to 'mrbgems')
| -rw-r--r-- | mrbgems/mruby-proc-ext/src/proc.c | 3 | ||||
| -rw-r--r-- | mrbgems/mruby-proc-ext/test/proc.rb | 11 |
2 files changed, 14 insertions, 0 deletions
diff --git a/mrbgems/mruby-proc-ext/src/proc.c b/mrbgems/mruby-proc-ext/src/proc.c index c8c8f1aa1..34f6230dc 100644 --- a/mrbgems/mruby-proc-ext/src/proc.c +++ b/mrbgems/mruby-proc-ext/src/proc.c @@ -114,6 +114,9 @@ mrb_proc_parameters(mrb_state *mrb, mrb_value self) // TODO cfunc aspec is not implemented yet return mrb_ary_new(mrb); } + if (!irep) { + return mrb_ary_new(mrb); + } if (!irep->lv) { return mrb_ary_new(mrb); } diff --git a/mrbgems/mruby-proc-ext/test/proc.rb b/mrbgems/mruby-proc-ext/test/proc.rb index 75e11dd93..7a078aabf 100644 --- a/mrbgems/mruby-proc-ext/test/proc.rb +++ b/mrbgems/mruby-proc-ext/test/proc.rb @@ -58,6 +58,17 @@ assert('Proc#parameters') do assert_equal([[:req, :a], [:req, :b], [:opt, :c], [:opt, :d], [:rest, :e], [:req, :f], [:req, :g], [:block, :h]], lambda {|a,b,c=:c,d=:d,*e,f,g,&h|}.parameters) end +assert('Proc#parameters with uninitialized Proc') do + begin + Proc.alias_method(:original_initialize, :initialize) + Proc.remove_method(:initialize) + assert_equal [], Proc.new{|a, b, c| 1}.parameters + ensure + Proc.alias_method(:initialize, :original_initialize) + Proc.remove_method(:original_initialize) + end +end + assert('Proc#to_proc') do proc = Proc.new {} assert_equal proc, proc.to_proc |
