diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | eval.c | 16 |
2 files changed, 21 insertions, 0 deletions
@@ -1,3 +1,8 @@ +Tue Dec 29 17:54:16 2015 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * eval.c (ignored_block): warn if a block is given to `using`, + which is probably for `Module.new`. + Tue Dec 29 12:48:34 2015 Nobuyoshi Nakada <nobu@ruby-lang.org> * lib/ostruct.rb (OpenStruct): make respond_to? working on @@ -1273,6 +1273,16 @@ rb_mod_refine(VALUE module, VALUE klass) return refinement; } +static void +ignored_block(VALUE module, const char *klass) +{ + const char *anon = ""; + if (!RTEST(rb_search_class_path(module))) { + anon = ", maybe for Module.new"; + } + rb_warn("%s""using doesn't call the given block""%s.", klass, anon); +} + /* * call-seq: * using(module) -> self @@ -1293,6 +1303,9 @@ mod_using(VALUE self, VALUE module) if (prev_cfp && prev_cfp->self != self) { rb_raise(rb_eRuntimeError, "Module#using is not called on self"); } + if (rb_block_given_p()) { + ignored_block(module, "Module#"); + } rb_using_module(rb_vm_cref_replace_with_duplicated_cref(), module); return self; } @@ -1426,6 +1439,9 @@ top_using(VALUE self, VALUE module) if (CREF_NEXT(cref) || (prev_cfp && rb_vm_frame_method_entry(prev_cfp))) { rb_raise(rb_eRuntimeError, "main.using is permitted only at toplevel"); } + if (rb_block_given_p()) { + ignored_block(module, "main."); + } rb_using_module(rb_vm_cref_replace_with_duplicated_cref(), module); return self; } |