mruby 3.3.0
mruby is the lightweight implementation of the Ruby language
Loading...
Searching...
No Matches
error.h
Go to the documentation of this file.
1
7#ifndef MRUBY_ERROR_H
8#define MRUBY_ERROR_H
9
10#include "common.h"
11
16
17struct RException {
18 MRB_OBJECT_HEADER;
19 struct iv_tbl *iv;
20 struct RObject *mesg; // NULL or probably RString
21 struct RObject *backtrace; // NULL, RArray or RData
22};
23
24/* error that should terminate execution */
25#define MRB_EXC_EXIT 65536
26#define MRB_EXC_EXIT_P(e) ((e)->flags & MRB_EXC_EXIT)
27/* retrieve status value from exc; need <mruby/variable.h> and <mruby/presym.h> */
28#define MRB_EXC_EXIT_STATUS(mrb,e) ((int)mrb_as_int((mrb),mrb_obj_iv_get((mrb),(e),MRB_SYM(status))))
29/* exit with SystemExit status */
30#define MRB_EXC_CHECK_EXIT(mrb,e) do {if (MRB_EXC_EXIT_P(e)) exit(MRB_EXC_EXIT_STATUS((mrb),(e)));} while (0)
31
32#define mrb_exc_ptr(v) ((struct RException*)mrb_ptr(v))
33
34MRB_API mrb_noreturn void mrb_sys_fail(mrb_state *mrb, const char *mesg);
35MRB_API mrb_value mrb_exc_new_str(mrb_state *mrb, struct RClass* c, mrb_value str);
36#define mrb_exc_new_lit(mrb, c, lit) mrb_exc_new_str(mrb, c, mrb_str_new_lit(mrb, lit))
37MRB_API mrb_noreturn void mrb_no_method_error(mrb_state *mrb, mrb_sym id, mrb_value args, const char *fmt, ...);
38
39#if defined(MRB_64BIT) || defined(MRB_USE_FLOAT32) || defined(MRB_NAN_BOXING) || defined(MRB_WORD_BOXING)
40#undef MRB_USE_RBREAK_VALUE_UNION
41#else
42#define MRB_USE_RBREAK_VALUE_UNION 1
43#endif
44
45/*
46 * flags:
47 * 0..7: enum mrb_vtype (only when defined MRB_USE_RBREAK_VALUE_UNION)
48 * 8..10: RBREAK_TAGs in src/vm.c (otherwise, set to 0)
49 */
50struct RBreak {
51 MRB_OBJECT_HEADER;
52 uintptr_t ci_break_index; // The top-level ci index to break. One before the return destination.
53#ifndef MRB_USE_RBREAK_VALUE_UNION
54 mrb_value val;
55#else
56 union mrb_value_union value;
57#endif
58};
59
60#ifndef MRB_USE_RBREAK_VALUE_UNION
61#define mrb_break_value_get(brk) ((brk)->val)
62#define mrb_break_value_set(brk, v) ((brk)->val = v)
63#else
64#define RBREAK_VALUE_TT_MASK ((1 << 8) - 1)
65static inline mrb_value
66mrb_break_value_get(struct RBreak *brk)
67{
68 mrb_value val;
69 val.value = brk->value;
70 val.tt = (enum mrb_vtype)(brk->flags & RBREAK_VALUE_TT_MASK);
71 return val;
72}
73static inline void
74mrb_break_value_set(struct RBreak *brk, mrb_value val)
75{
76 brk->value = val.value;
77 brk->flags &= ~RBREAK_VALUE_TT_MASK;
78 brk->flags |= val.tt;
79}
80#endif /* MRB_USE_RBREAK_VALUE_UNION */
81
86/* clear error status in the mrb_state structure */
88/* returns TRUE if error in the previous call; internally calls mrb_clear_error() */
89MRB_API mrb_bool mrb_check_error(mrb_state *mrb);
90
95typedef mrb_value mrb_protect_error_func(mrb_state *mrb, void *userdata);
96MRB_API mrb_value mrb_protect_error(mrb_state *mrb, mrb_protect_error_func *body, void *userdata, mrb_bool *error);
97
104
111 mrb_func_t ensure, mrb_value e_data);
112
119 mrb_func_t rescue, mrb_value r_data);
120
127 mrb_func_t rescue, mrb_value r_data,
128 mrb_int len, struct RClass **classes);
129
131
132#endif /* MRUBY_ERROR_H */
mruby Boolean.
mruby Symbol.
mruby common platform definition"
#define MRB_END_DECL
End declarations in C mode.
Definition common.h:28
#define MRB_BEGIN_DECL
Start declarations in C mode.
Definition common.h:26
#define MRB_API
Declare a public mruby API function.
Definition common.h:79
#define mrb_noreturn
Shared compiler macros.
Definition common.h:50
void mrb_clear_error(mrb_state *mrb)
Error check.
Definition error.c:647
mrb_value mrb_protect(mrb_state *mrb, mrb_func_t body, mrb_value data, mrb_bool *state)
Protect (takes mrb_value for body argument)
mrb_value mrb_protect_error_func(mrb_state *mrb, void *userdata)
Protect.
Definition error.h:95
mrb_value mrb_rescue_exceptions(mrb_state *mrb, mrb_func_t body, mrb_value b_data, mrb_func_t rescue, mrb_value r_data, mrb_int len, struct RClass **classes)
Rescue exception.
mrb_value mrb_rescue(mrb_state *mrb, mrb_func_t body, mrb_value b_data, mrb_func_t rescue, mrb_value r_data)
Rescue.
mrb_value mrb_ensure(mrb_state *mrb, mrb_func_t body, mrb_value b_data, mrb_func_t ensure, mrb_value e_data)
Ensure.
mrb_value(* mrb_func_t)(struct mrb_state *mrb, mrb_value self)
Function pointer type for a function callable by mruby.
Definition mruby.h:230
Definition error.h:50
Class class.
Definition class.h:17
mruby error handling.
Definition error.h:17
Definition object.h:30
Definition variable.c:17
Definition mruby.h:256
Definition boxing_nan.h:40
Definition boxing_no.h:15