diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-02-15 12:01:52 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-02-15 12:01:52 +0900 |
| commit | 1e57fefbcf1ab327113699eebf2b08d9ec450dfe (patch) | |
| tree | 172ccc7fe5b4ff8284e8d2733568156289445622 /src/error.c | |
| parent | 8efa7b00df2842eaff31cdabc95651a856e40549 (diff) | |
| download | mruby-1e57fefbcf1ab327113699eebf2b08d9ec450dfe.tar.gz mruby-1e57fefbcf1ab327113699eebf2b08d9ec450dfe.zip | |
Do not funcall() Exception#set_backtrace from runtime.
This change reduce flexibility but makes mruby simpler and faster.
Diffstat (limited to 'src/error.c')
| -rw-r--r-- | src/error.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/src/error.c b/src/error.c index 7916ca65b..3fa18fcb3 100644 --- a/src/error.c +++ b/src/error.c @@ -202,12 +202,9 @@ exc_get_backtrace(mrb_state *mrb, mrb_value exc) return backtrace; } -static mrb_value -exc_set_backtrace(mrb_state *mrb, mrb_value exc) +static void +set_backtrace(mrb_state *mrb, mrb_value exc, mrb_value backtrace) { - mrb_value backtrace; - - mrb_get_args(mrb, "o", &backtrace); if (!mrb_array_p(backtrace)) { type_err: mrb_raise(mrb, E_TYPE_ERROR, "backtrace must be Array of String"); @@ -222,7 +219,15 @@ exc_set_backtrace(mrb_state *mrb, mrb_value exc) } } mrb_iv_set(mrb, exc, mrb_intern_lit(mrb, "backtrace"), backtrace); +} +static mrb_value +exc_set_backtrace(mrb_state *mrb, mrb_value exc) +{ + mrb_value backtrace; + + mrb_get_args(mrb, "o", &backtrace); + set_backtrace(mrb, exc, backtrace); return backtrace; } @@ -253,12 +258,6 @@ exc_debug_info(mrb_state *mrb, struct RObject *exc) } } -static void -set_backtrace(mrb_state *mrb, mrb_value info, mrb_value bt) -{ - mrb_funcall(mrb, info, "set_backtrace", 1, bt); -} - static mrb_bool have_backtrace(mrb_state *mrb, struct RObject *exc) { |
