summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/mruby/error.h3
-rw-r--r--mrbgems/default.gembox3
-rw-r--r--mrbgems/mruby-kernel-ext/mrbgem.rake5
-rw-r--r--mrbgems/mruby-kernel-ext/src/kernel.c15
-rw-r--r--mrbgems/mruby-kernel-ext/test/kernel.rb4
-rw-r--r--src/kernel.c2
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;