diff options
author | shugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-09-29 02:21:27 +0000 |
---|---|---|
committer | shugo <shugo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-09-29 02:21:27 +0000 |
commit | 0954607864bcdd81ea5f3dd2ea52f638f2f32e47 (patch) | |
tree | bf798ae8e5bc1a3e2ebdb7ded0bf8555701b8534 /eval.c | |
parent | 039e2a35c2e410cf1679cf10b492112cc67931a9 (diff) |
* vm_insnhelper.c (rb_vm_using_modules): use using_modules before
klass to fix method lookup order, and use klass even if klass is
not a module to make refinements in class_eval invoked on classes
work.
* eval.c (rb_using_module): accept a class as the second argument.
* eval.c (rb_mod_using, f_using): raise a TypeError if the argument
is not a module.
* test/ruby/test_refinement.rb: add new tests for the above changes.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@37053 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r-- | eval.c | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -1096,7 +1096,7 @@ rb_using_module(NODE *cref, VALUE module) ID id_overlaid_modules; VALUE overlaid_modules; - Check_Type(module, T_MODULE); + check_class_or_module(module); CONST_ID(id_overlaid_modules, "__overlaid_modules__"); overlaid_modules = rb_attr_get(module, id_overlaid_modules); if (NIL_P(overlaid_modules)) return; @@ -1117,6 +1117,7 @@ rb_mod_using(VALUE self, VALUE module) ID id_using_modules; VALUE using_modules; + Check_Type(module, T_MODULE); CONST_ID(id_using_modules, "__using_modules__"); using_modules = rb_attr_get(self, id_using_modules); if (NIL_P(using_modules)) { @@ -1345,6 +1346,7 @@ f_using(VALUE self, VALUE module) { NODE *cref = rb_vm_cref(); + Check_Type(module, T_MODULE); rb_using_module(cref, module); return self; } |