diff options
| -rw-r--r-- | include/mruby/error.h | 3 | ||||
| -rw-r--r-- | mrbgems/default.gembox | 3 | ||||
| -rw-r--r-- | mrbgems/mruby-kernel-ext/mrbgem.rake | 5 | ||||
| -rw-r--r-- | mrbgems/mruby-kernel-ext/src/kernel.c | 15 | ||||
| -rw-r--r-- | mrbgems/mruby-kernel-ext/test/kernel.rb | 4 | ||||
| -rw-r--r-- | src/kernel.c | 2 |
6 files changed, 31 insertions, 1 deletions
diff --git a/include/mruby/error.h b/include/mruby/error.h index 689cf4b8f..9dd4260c2 100644 --- a/include/mruby/error.h +++ b/include/mruby/error.h @@ -21,6 +21,9 @@ void mrb_print_backtrace(mrb_state *mrb); mrb_value mrb_exc_backtrace(mrb_state *mrb, mrb_value exc); mrb_value mrb_get_backtrace(mrb_state *mrb); +/* declaration for fail method */ +mrb_value mrb_f_raise(mrb_state*, mrb_value); + #if defined(__cplusplus) } /* extern "C" { */ #endif diff --git a/mrbgems/default.gembox b/mrbgems/default.gembox index 1bba7be26..8729593de 100644 --- a/mrbgems/default.gembox +++ b/mrbgems/default.gembox @@ -64,4 +64,7 @@ MRuby::GemBox.new do |conf| # Generate mruby command conf.gem :core => "mruby-bin-mruby" + + # Use extensional Kernel module + conf.gem :core => "mruby-kernel-ext" end diff --git a/mrbgems/mruby-kernel-ext/mrbgem.rake b/mrbgems/mruby-kernel-ext/mrbgem.rake new file mode 100644 index 000000000..ab610c02b --- /dev/null +++ b/mrbgems/mruby-kernel-ext/mrbgem.rake @@ -0,0 +1,5 @@ +MRuby::Gem::Specification.new('mruby-kernel-ext') do |spec| + spec.license = 'MIT' + spec.author = 'mruby developers' + spec.summary = 'extensional Kernel module' +end diff --git a/mrbgems/mruby-kernel-ext/src/kernel.c b/mrbgems/mruby-kernel-ext/src/kernel.c new file mode 100644 index 000000000..640b62e65 --- /dev/null +++ b/mrbgems/mruby-kernel-ext/src/kernel.c @@ -0,0 +1,15 @@ +#include <mruby.h> +#include <mruby/error.h> + +void +mrb_mruby_kernel_ext_gem_init(mrb_state *mrb) +{ + struct RClass *krn = mrb->kernel_module; + + mrb_define_module_function(mrb, krn, "fail", mrb_f_raise, MRB_ARGS_NONE()); +} + +void +mrb_mruby_kernel_ext_gem_final(mrb_state *mrb) +{ +} diff --git a/mrbgems/mruby-kernel-ext/test/kernel.rb b/mrbgems/mruby-kernel-ext/test/kernel.rb new file mode 100644 index 000000000..97ef95d54 --- /dev/null +++ b/mrbgems/mruby-kernel-ext/test/kernel.rb @@ -0,0 +1,4 @@ +assert('Kernel.fail, Kernel#fail') do + assert_raise(RuntimeError) { fail } + assert_raise(RuntimeError) { Kernel.fail } +end diff --git a/src/kernel.c b/src/kernel.c index 4db8ad7ee..d759661d4 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -924,7 +924,7 @@ mrb_obj_public_methods(mrb_state *mrb, mrb_value self) * raise "Failed to create socket" * raise ArgumentError, "No parameters", caller */ -static mrb_value +mrb_value mrb_f_raise(mrb_state *mrb, mrb_value self) { mrb_value a[2], exc; |
