From d41d477e22baf6931b04313c09d48ad8453106cf Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 21 Jun 2025 23:45:18 +0900 Subject: [PATCH] mruby-set: add type checking helper functions Add two helper functions to improve code clarity and maintainability: - set_check_type: Checks if a value is a Set and raises an error if not - set_is_set: Checks if a value is a Set and returns a boolean result Update all relevant methods to use these helper functions, reducing code duplication and centralizing type checking logic. --- mrbgems/mruby-set/src/set.c | 43 +++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/mrbgems/mruby-set/src/set.c b/mrbgems/mruby-set/src/set.c index 6c12f3be0..2bad7d4e9 100644 --- a/mrbgems/mruby-set/src/set.c +++ b/mrbgems/mruby-set/src/set.c @@ -119,6 +119,22 @@ set_get_khash(mrb_state *mrb, mrb_value self) return (khash_t(set)*)mrb_data_get_ptr(mrb, self, &set_data_type); } +/* Helper function to check if a value is a Set and raise an error if not */ +static void +set_check_type(mrb_state *mrb, mrb_value obj) +{ + if (!mrb_obj_is_kind_of(mrb, obj, mrb_class_get(mrb, "Set"))) { + mrb_raise(mrb, E_ARGUMENT_ERROR, "value must be a set"); + } +} + +/* Helper function to check if a value is a Set and return a boolean result */ +static mrb_bool +set_is_set(mrb_state *mrb, mrb_value obj) +{ + return mrb_obj_is_kind_of(mrb, obj, mrb_class_get(mrb, "Set")); +} + static mrb_value set_init(mrb_state *mrb, mrb_value self) { @@ -534,7 +550,7 @@ set_equal(mrb_state *mrb, mrb_value self) return mrb_true_value(); } - if (mrb_obj_is_kind_of(mrb, other, mrb_obj_class(mrb, self))) { + if (set_is_set(mrb, other)) { khash_t(set) *kh1 = set_get_khash(mrb, self); khash_t(set) *kh2 = set_get_khash(mrb, other); @@ -601,7 +617,7 @@ set_eql(mrb_state *mrb, mrb_value self) { mrb_value other = mrb_get_arg1(mrb); - if (!mrb_obj_is_kind_of(mrb, other, mrb_obj_class(mrb, self))) { + if (!set_is_set(mrb, other)) { return mrb_false_value(); } @@ -649,9 +665,7 @@ set_superset_p(mrb_state *mrb, mrb_value self) mrb_value other = mrb_get_arg1(mrb); /* Check if other is a Set */ - if (!mrb_obj_is_kind_of(mrb, other, mrb_class_get(mrb, "Set"))) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "value must be a set"); - } + set_check_type(mrb, other); khash_t(set) *self_kh = set_get_khash(mrb, self); khash_t(set) *other_kh = set_get_khash(mrb, other); @@ -696,9 +710,7 @@ set_proper_superset_p(mrb_state *mrb, mrb_value self) mrb_value other = mrb_get_arg1(mrb); /* Check if other is a Set */ - if (!mrb_obj_is_kind_of(mrb, other, mrb_class_get(mrb, "Set"))) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "value must be a set"); - } + set_check_type(mrb, other); khash_t(set) *self_kh = set_get_khash(mrb, self); khash_t(set) *other_kh = set_get_khash(mrb, other); @@ -744,9 +756,7 @@ set_subset_p(mrb_state *mrb, mrb_value self) mrb_value other = mrb_get_arg1(mrb); /* Check if other is a Set */ - if (!mrb_obj_is_kind_of(mrb, other, mrb_class_get(mrb, "Set"))) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "value must be a set"); - } + set_check_type(mrb, other); khash_t(set) *self_kh = set_get_khash(mrb, self); khash_t(set) *other_kh = set_get_khash(mrb, other); @@ -791,9 +801,7 @@ set_proper_subset_p(mrb_state *mrb, mrb_value self) mrb_value other = mrb_get_arg1(mrb); /* Check if other is a Set */ - if (!mrb_obj_is_kind_of(mrb, other, mrb_class_get(mrb, "Set"))) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "value must be a set"); - } + set_check_type(mrb, other); khash_t(set) *self_kh = set_get_khash(mrb, self); khash_t(set) *other_kh = set_get_khash(mrb, other); @@ -838,9 +846,7 @@ set_intersect_p(mrb_state *mrb, mrb_value self) mrb_value other = mrb_get_arg1(mrb); /* Check if other is a Set */ - if (!mrb_obj_is_kind_of(mrb, other, mrb_class_get(mrb, "Set"))) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "value must be a set"); - } + set_check_type(mrb, other); khash_t(set) *self_kh = set_get_khash(mrb, self); khash_t(set) *other_kh = set_get_khash(mrb, other); @@ -902,8 +908,7 @@ set_cmp(mrb_state *mrb, mrb_value self) { mrb_value other = mrb_get_arg1(mrb); - /* Check if other is a Set */ - if (!mrb_obj_is_kind_of(mrb, other, mrb_class_get(mrb, "Set"))) { + if (!set_is_set(mrb, other)) { return mrb_nil_value(); }