source: EcnlProtoTool/trunk/mruby-1.3.0/mrbgems/mruby-error/test/exception.c@ 331

Last change on this file since 331 was 331, checked in by coas-nagasima, 6 years ago

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 1.5 KB
Line 
1#include <mruby.h>
2#include <mruby/error.h>
3#include <mruby/array.h>
4
5static mrb_value
6protect_cb(mrb_state *mrb, mrb_value b)
7{
8 return mrb_yield_argv(mrb, b, 0, NULL);
9}
10
11static mrb_value
12run_protect(mrb_state *mrb, mrb_value self)
13{
14 mrb_value b;
15 mrb_value ret[2];
16 mrb_bool state;
17 mrb_get_args(mrb, "&", &b);
18 ret[0] = mrb_protect(mrb, protect_cb, b, &state);
19 ret[1] = mrb_bool_value(state);
20 return mrb_ary_new_from_values(mrb, 2, ret);
21}
22
23static mrb_value
24run_ensure(mrb_state *mrb, mrb_value self)
25{
26 mrb_value b, e;
27 mrb_get_args(mrb, "oo", &b, &e);
28 return mrb_ensure(mrb, protect_cb, b, protect_cb, e);
29}
30
31static mrb_value
32run_rescue(mrb_state *mrb, mrb_value self)
33{
34 mrb_value b, r;
35 mrb_get_args(mrb, "oo", &b, &r);
36 return mrb_rescue(mrb, protect_cb, b, protect_cb, r);
37}
38
39static mrb_value
40run_rescue_exceptions(mrb_state *mrb, mrb_value self)
41{
42 mrb_value b, r;
43 struct RClass *cls[1];
44 mrb_get_args(mrb, "oo", &b, &r);
45 cls[0] = E_TYPE_ERROR;
46 return mrb_rescue_exceptions(mrb, protect_cb, b, protect_cb, r, 1, cls);
47}
48
49void
50mrb_mruby_error_gem_test(mrb_state *mrb)
51{
52 struct RClass *cls;
53
54 cls = mrb_define_class(mrb, "ExceptionTest", mrb->object_class);
55 mrb_define_module_function(mrb, cls, "mrb_protect", run_protect, MRB_ARGS_NONE() | MRB_ARGS_BLOCK());
56 mrb_define_module_function(mrb, cls, "mrb_ensure", run_ensure, MRB_ARGS_REQ(2));
57 mrb_define_module_function(mrb, cls, "mrb_rescue", run_rescue, MRB_ARGS_REQ(2));
58 mrb_define_module_function(mrb, cls, "mrb_rescue_exceptions", run_rescue_exceptions, MRB_ARGS_REQ(2));
59}
Note: See TracBrowser for help on using the repository browser.