From 150a8db053b7c986db4956acb96054743dbd52a3 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sun, 9 Nov 2025 22:05:20 +0900 Subject: [PATCH] mruby-array-ext: avoid goto in ary_slice_bang --- mrbgems/mruby-array-ext/src/array.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/mrbgems/mruby-array-ext/src/array.c b/mrbgems/mruby-array-ext/src/array.c index 631bb450e..951ba365c 100644 --- a/mrbgems/mruby-array-ext/src/array.c +++ b/mrbgems/mruby-array-ext/src/array.c @@ -201,16 +201,18 @@ ary_slice_bang(mrb_state *mrb, mrb_value self) mrb_value index = mrb_get_arg1(mrb); if (mrb_type(index) == MRB_TT_RANGE) { - if (mrb_range_beg_len(mrb, index, &i, &len, ARY_LEN(a), TRUE) == MRB_RANGE_OK) { - goto delete_pos_len; + if (mrb_range_beg_len(mrb, index, &i, &len, ARY_LEN(a), TRUE) != MRB_RANGE_OK) { + return mrb_nil_value(); } - return mrb_nil_value(); } - return mrb_ary_delete_at(mrb, self); + else { + return mrb_ary_delete_at(mrb, self); + } + } + else { + mrb_get_args(mrb, "ii", &i, &len); } - mrb_get_args(mrb, "ii", &i, &len); - delete_pos_len:; mrb_int alen = ARY_LEN(a); if (i < 0) i += alen; if (i < 0 || alen < i) return mrb_nil_value();