diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-02-27 23:11:39 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-02-27 23:11:39 +0900 |
| commit | a76dc04aa832172495f48e0320e077906c6f7625 (patch) | |
| tree | c997799f1ee1316458cc2589aa4fc59c49b88b00 | |
| parent | b563bcb7ff87b859ccdfa30f5d7c3f06cb26a239 (diff) | |
| download | mruby-a76dc04aa832172495f48e0320e077906c6f7625.tar.gz mruby-a76dc04aa832172495f48e0320e077906c6f7625.zip | |
Remove default Kernel#method_missing.
Internal method_missing works without problems.
| -rw-r--r-- | src/kernel.c | 4 | ||||
| -rw-r--r-- | test/t/nomethoderror.rb | 31 |
2 files changed, 4 insertions, 31 deletions
diff --git a/src/kernel.c b/src/kernel.c index 6cb2e3ad5..7497f955b 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -969,6 +969,7 @@ mrb_method_missing(mrb_state *mrb, mrb_sym name, mrb_value self, mrb_value args) * r.xxiii #=> 23 * r.mm #=> 2000 */ +#ifndef MRB_DEFAULT_METHOD_MISSING static mrb_value mrb_obj_missing(mrb_state *mrb, mrb_value mod) { @@ -981,6 +982,7 @@ mrb_obj_missing(mrb_state *mrb, mrb_value mod) /* not reached */ return mrb_nil_value(); } +#endif static inline mrb_bool basic_obj_respond_to(mrb_state *mrb, mrb_value obj, mrb_sym id, int pub) @@ -1214,7 +1216,9 @@ mrb_init_kernel(mrb_state *mrb) mrb_define_method(mrb, krn, "iterator?", mrb_f_block_given_p_m, MRB_ARGS_NONE()); /* 15.3.1.3.25 */ mrb_define_method(mrb, krn, "kind_of?", mrb_obj_is_kind_of_m, MRB_ARGS_REQ(1)); /* 15.3.1.3.26 */ mrb_define_method(mrb, krn, "local_variables", mrb_local_variables, MRB_ARGS_NONE()); /* 15.3.1.3.28 */ +#ifndef MRB_DEFAULT_METHOD_MISSING mrb_define_method(mrb, krn, "method_missing", mrb_obj_missing, MRB_ARGS_ANY()); /* 15.3.1.3.30 */ +#endif mrb_define_method(mrb, krn, "methods", mrb_obj_methods_m, MRB_ARGS_OPT(1)); /* 15.3.1.3.31 */ mrb_define_method(mrb, krn, "nil?", mrb_false, MRB_ARGS_NONE()); /* 15.3.1.3.32 */ mrb_define_method(mrb, krn, "object_id", mrb_obj_id_m, MRB_ARGS_NONE()); /* 15.3.1.3.33 */ diff --git a/test/t/nomethoderror.rb b/test/t/nomethoderror.rb index 35cbdaee9..22a5f8a0e 100644 --- a/test/t/nomethoderror.rb +++ b/test/t/nomethoderror.rb @@ -21,37 +21,6 @@ assert('NoMethodError#args', '15.2.32.2.1') do end end -assert('Can still raise when Kernel#method_missing is removed') do - assert_raise(NoMethodError) do - begin - Kernel.alias_method(:old_method_missing, :method_missing) - Kernel.remove_method(:method_missing) - 1.__send__(:foo) - ensure - Kernel.alias_method(:method_missing, :old_method_missing) - Kernel.remove_method(:old_method_missing) - end - end -end - -assert('Can still call super when Kernel#method_missing is removed') do - assert_raise(NoMethodError) do - class A - def foo - super - end - end - begin - Kernel.alias_method(:old_method_missing, :method_missing) - Kernel.remove_method(:method_missing) - A.new.foo - ensure - Kernel.alias_method(:method_missing, :old_method_missing) - Kernel.remove_method(:old_method_missing) - end - end -end - assert("NoMethodError#new does not return an exception") do begin class << NoMethodError |
