macro mrb_bool() may evaluate arg multiple times; ref #3228

parent 7061658b
...@@ -960,10 +960,11 @@ obj_respond_to(mrb_state *mrb, mrb_value self) ...@@ -960,10 +960,11 @@ obj_respond_to(mrb_state *mrb, mrb_value self)
if (!respond_to_p) { if (!respond_to_p) {
rtm_id = mrb_intern_lit(mrb, "respond_to_missing?"); rtm_id = mrb_intern_lit(mrb, "respond_to_missing?");
if (basic_obj_respond_to(mrb, self, rtm_id, !priv)) { if (basic_obj_respond_to(mrb, self, rtm_id, !priv)) {
mrb_value args[2]; mrb_value args[2], v;
args[0] = mid; args[0] = mid;
args[1] = mrb_bool_value(priv); 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); return mrb_bool_value(respond_to_p);
......
...@@ -152,7 +152,7 @@ mrb_range_eq(mrb_state *mrb, mrb_value range) ...@@ -152,7 +152,7 @@ mrb_range_eq(mrb_state *mrb, mrb_value range)
{ {
struct RRange *rr; struct RRange *rr;
struct RRange *ro; struct RRange *ro;
mrb_value obj; mrb_value obj, v1, v2;
mrb_get_args(mrb, "o", &obj); mrb_get_args(mrb, "o", &obj);
...@@ -163,9 +163,9 @@ mrb_range_eq(mrb_state *mrb, mrb_value range) ...@@ -163,9 +163,9 @@ mrb_range_eq(mrb_state *mrb, mrb_value range)
rr = mrb_range_ptr(range); rr = mrb_range_ptr(range);
ro = mrb_range_ptr(obj); ro = mrb_range_ptr(obj);
if (!mrb_bool(mrb_funcall(mrb, rr->edges->beg, "==", 1, ro->edges->beg)) || v1 = mrb_funcall(mrb, rr->edges->beg, "==", 1, ro->edges->beg);
!mrb_bool(mrb_funcall(mrb, rr->edges->end, "==", 1, ro->edges->end)) || v2 = mrb_funcall(mrb, rr->edges->end, "==", 1, ro->edges->end);
rr->excl != ro->excl) { if (!mrb_bool(v1) || !mrb_bool(v2) || rr->excl != ro->excl) {
return mrb_false_value(); return mrb_false_value();
} }
return mrb_true_value(); return mrb_true_value();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment