mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #2204 from take-cheeze/kernel_fail
Implement Kernel.fail and Kernel#fail .
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
assert('Kernel.fail, Kernel#fail') do
|
||||
assert_raise(RuntimeError) { fail }
|
||||
assert_raise(RuntimeError) { Kernel.fail }
|
||||
end
|
||||
+1
-1
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user