summaryrefslogtreecommitdiffhomepage
path: root/src/error.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-02-15 12:01:52 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-02-15 12:01:52 +0900
commit1e57fefbcf1ab327113699eebf2b08d9ec450dfe (patch)
tree172ccc7fe5b4ff8284e8d2733568156289445622 /src/error.c
parent8efa7b00df2842eaff31cdabc95651a856e40549 (diff)
downloadmruby-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.c21
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)
{