diff options
author | Jeremy Evans <[email protected]> | 2019-09-27 08:07:49 -0700 |
---|---|---|
committer | Jeremy Evans <[email protected]> | 2019-09-27 11:22:21 -0700 |
commit | d53cf854741bbf496298c5a722988d2dd84314a1 () | |
tree | 9d2d8ee45b9c4bff636be7bfb993d9bb507ac0c4 | |
parent | 7814b6c6572446a6b64614e524d13dd423577004 (diff) |
Fix warning when doing Struct.new(:x, keyword_init: true){}
This is due to calling rb_mod_module_eval directly instead of using rb_funcall_passing_block. The problem with calling directly is it does not create a new VM frame, so rb_mod_module_eval was called with no arguments, but with the keyword given VM frame flag set, which causes problems internally.
Notes: Merged: https://.com/ruby/ruby/pull/2500
-rw-r--r-- | struct.c | 2 | ||||
-rw-r--r-- | test/ruby/test_struct.rb | 10 |
2 files changed, 11 insertions, 1 deletions
@@ -569,7 +569,7 @@ rb_struct_s_def(int argc, VALUE *argv, VALUE klass) setup_struct(st, rest); rb_ivar_set(st, id_keyword_init, keyword_init); if (rb_block_given_p()) { - rb_mod_module_eval(0, 0, st); } return st; @@ -119,6 +119,16 @@ module TestStruct end end def test_initialize klass = @Struct.new(:a) assert_raise(ArgumentError) { klass.new(1, 2) } |