summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-kernel-ext
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-05-28 07:39:34 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2021-05-28 07:39:34 +0900
commit269470babc6abe6584efaca937669d000b9d002c (patch)
treeebea03e6ba4b47d723ceb59344af6f4d2586d017 /mrbgems/mruby-kernel-ext
parent4e683c20a24294bddea7a8026b92ca16eb13b099 (diff)
downloadmruby-269470babc6abe6584efaca937669d000b9d002c.tar.gz
mruby-269470babc6abe6584efaca937669d000b9d002c.zip
kernel.c: avoid recursive VM call in `mrb_f_caller`.
Diffstat (limited to 'mrbgems/mruby-kernel-ext')
-rw-r--r--mrbgems/mruby-kernel-ext/src/kernel.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/mrbgems/mruby-kernel-ext/src/kernel.c b/mrbgems/mruby-kernel-ext/src/kernel.c
index 8bc371283..15b4c5f72 100644
--- a/mrbgems/mruby-kernel-ext/src/kernel.c
+++ b/mrbgems/mruby-kernel-ext/src/kernel.c
@@ -58,8 +58,8 @@ mrb_f_caller(mrb_state *mrb, mrb_value self)
if (n == 0 || bt_len <= lev) {
return mrb_ary_new(mrb);
}
-
- return mrb_funcall_id(mrb, bt, MRB_OPSYM(aref), 2, mrb_fixnum_value(lev), mrb_fixnum_value(n));
+ if (bt_len <= n + lev) n = bt_len - lev - 1;
+ return mrb_ary_new_from_values(mrb, n, RARRAY_PTR(bt)+lev+1);
}
/*