summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-metaprog
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2018-09-01 11:20:30 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2018-09-01 11:20:30 +0900
commitb80e0ef7428b613a682da4d2a251c8beb24d6dd2 (patch)
treed47427ac2f9bb454f9a47b79d6767ee27bd0c8f0 /mrbgems/mruby-metaprog
parent593c12a5cd670cfdb45741377236207a56541d37 (diff)
downloadmruby-b80e0ef7428b613a682da4d2a251c8beb24d6dd2.tar.gz
mruby-b80e0ef7428b613a682da4d2a251c8beb24d6dd2.zip
Move `Kernel#send` to `mruby-metaprog` gem.
But `BasicObject#__send__` is still available from the core.
Diffstat (limited to 'mrbgems/mruby-metaprog')
-rw-r--r--mrbgems/mruby-metaprog/src/metaprog.c1
-rw-r--r--mrbgems/mruby-metaprog/test/metaprog.rb27
2 files changed, 28 insertions, 0 deletions
diff --git a/mrbgems/mruby-metaprog/src/metaprog.c b/mrbgems/mruby-metaprog/src/metaprog.c
index 18003ef4d..25c153cee 100644
--- a/mrbgems/mruby-metaprog/src/metaprog.c
+++ b/mrbgems/mruby-metaprog/src/metaprog.c
@@ -680,6 +680,7 @@ mrb_mruby_metaprog_gem_init(mrb_state* mrb)
mrb_define_method(mrb, krn, "public_methods", mrb_obj_public_methods, MRB_ARGS_OPT(1)); /* 15.3.1.3.38 */
mrb_define_method(mrb, krn, "singleton_methods", mrb_obj_singleton_methods_m, MRB_ARGS_OPT(1)); /* 15.3.1.3.45 */
mrb_define_method(mrb, krn, "define_singleton_method", mod_define_singleton_method, MRB_ARGS_ANY());
+ mrb_define_method(mrb, krn, "send", mrb_f_send, MRB_ARGS_ANY()); /* 15.3.1.3.44 */
mrb_define_method(mrb, mod, "class_variables", mrb_mod_class_variables, MRB_ARGS_NONE()); /* 15.2.2.4.19 */
mrb_define_method(mrb, mod, "remove_class_variable", mrb_mod_remove_cvar, MRB_ARGS_REQ(1)); /* 15.2.2.4.39 */
diff --git a/mrbgems/mruby-metaprog/test/metaprog.rb b/mrbgems/mruby-metaprog/test/metaprog.rb
index 587d00d6f..748fe9c6c 100644
--- a/mrbgems/mruby-metaprog/test/metaprog.rb
+++ b/mrbgems/mruby-metaprog/test/metaprog.rb
@@ -1,3 +1,30 @@
+assert('Kernel#__send__', '15.3.1.3.4') do
+ # test with block
+ l = __send__(:lambda) do
+ true
+ end
+
+ assert_true l.call
+ assert_equal Proc, l.class
+ # test with argument
+ assert_true __send__(:respond_to?, :nil?)
+ # test without argument and without block
+ assert_equal String, __send__(:to_s).class
+end
+
+assert('Kernel#send', '15.3.1.3.44') do
+ # test with block
+ l = send(:lambda) do
+ true
+ end
+
+ assert_true l.call
+ assert_equal l.class, Proc
+ # test with argument
+ assert_true send(:respond_to?, :nil?)
+ # test without argument and without block
+ assert_equal send(:to_s).class, String
+end
assert('Kernel#instance_variable_defined?', '15.3.1.3.20') do
o = Object.new