summaryrefslogtreecommitdiffhomepage
path: root/src/kernel.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2016-10-24 01:30:31 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2016-10-24 01:30:31 +0900
commitc45ed46f28b2d73aa36eeb0539cb0f3bc173b528 (patch)
tree34e08709db894240e9f8d7ecf80c5c0ad01779a9 /src/kernel.c
parent7061658b5b4ea488580a1c0d522ab62b74243603 (diff)
downloadmruby-c45ed46f28b2d73aa36eeb0539cb0f3bc173b528.tar.gz
mruby-c45ed46f28b2d73aa36eeb0539cb0f3bc173b528.zip
macro mrb_bool() may evaluate arg multiple times; ref #3228
Diffstat (limited to 'src/kernel.c')
-rw-r--r--src/kernel.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/kernel.c b/src/kernel.c
index 09b3d9337..df237cd46 100644
--- a/src/kernel.c
+++ b/src/kernel.c
@@ -960,10 +960,11 @@ obj_respond_to(mrb_state *mrb, mrb_value self)
if (!respond_to_p) {
rtm_id = mrb_intern_lit(mrb, "respond_to_missing?");
if (basic_obj_respond_to(mrb, self, rtm_id, !priv)) {
- mrb_value args[2];
+ mrb_value args[2], v;
args[0] = mid;
args[1] = mrb_bool_value(priv);
- return mrb_bool_value(mrb_bool(mrb_funcall_argv(mrb, self, rtm_id, 2, args)));
+ v = mrb_funcall_argv(mrb, self, rtm_id, 2, args);
+ return mrb_bool_value(mrb_bool(v));
}
}
return mrb_bool_value(respond_to_p);