summaryrefslogtreecommitdiffhomepage
path: root/src/range.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/range.c
parent7061658b5b4ea488580a1c0d522ab62b74243603 (diff)
downloadmruby-c45ed46f28b2d73aa36eeb0539cb0f3bc173b528.tar.gz
mruby-c45ed46f28b2d73aa36eeb0539cb0f3bc173b528.zip
macro mrb_bool() may evaluate arg multiple times; ref #3228
Diffstat (limited to 'src/range.c')
-rw-r--r--src/range.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/range.c b/src/range.c
index bc8b11419..079a1035e 100644
--- a/src/range.c
+++ b/src/range.c
@@ -152,7 +152,7 @@ mrb_range_eq(mrb_state *mrb, mrb_value range)
{
struct RRange *rr;
struct RRange *ro;
- mrb_value obj;
+ mrb_value obj, v1, v2;
mrb_get_args(mrb, "o", &obj);
@@ -163,9 +163,9 @@ mrb_range_eq(mrb_state *mrb, mrb_value range)
rr = mrb_range_ptr(range);
ro = mrb_range_ptr(obj);
- if (!mrb_bool(mrb_funcall(mrb, rr->edges->beg, "==", 1, ro->edges->beg)) ||
- !mrb_bool(mrb_funcall(mrb, rr->edges->end, "==", 1, ro->edges->end)) ||
- rr->excl != ro->excl) {
+ v1 = mrb_funcall(mrb, rr->edges->beg, "==", 1, ro->edges->beg);
+ v2 = mrb_funcall(mrb, rr->edges->end, "==", 1, ro->edges->end);
+ if (!mrb_bool(v1) || !mrb_bool(v2) || rr->excl != ro->excl) {
return mrb_false_value();
}
return mrb_true_value();