summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNobuyoshi Nakada <[email protected]>2024-06-01 20:54:58 +0900
committerNobuyoshi Nakada <[email protected]>2024-06-01 21:51:27 +0900
commitfd74614059c069311dfb3ec1db914fce67421a51 (patch)
treea7fef5a31a0133d9b58c6651d6bbe8ecbec0b550
parent05553cf22d43dd78b8f30cc4591230b5c000c538 (diff)
Get rid of type-punning pointer casts
-rw-r--r--parse.y12
1 files changed, 6 insertions, 6 deletions
diff --git a/parse.y b/parse.y
index 477eb3cbdd..3191495764 100644
--- a/parse.y
+++ b/parse.y
@@ -2588,21 +2588,21 @@ rb_parser_ast_token_free(rb_parser_t *p, rb_parser_ast_token_t *token)
static void
rb_parser_ary_free(rb_parser_t *p, rb_parser_ary_t *ary)
{
- void (*free_func)(rb_parser_t *, rb_parser_ary_data) = NULL;
+# define foreach_ary(ptr) \
+ for (rb_parser_ary_data *ptr = ary->data, *const end_ary_data = ptr + ary->len; \
+ ptr < end_ary_data; ptr++)
switch (ary->data_type) {
case PARSER_ARY_DATA_AST_TOKEN:
- free_func = (void (*)(rb_parser_t *, rb_parser_ary_data))rb_parser_ast_token_free;
+ foreach_ary(data) {rb_parser_ast_token_free(p, *data);}
break;
case PARSER_ARY_DATA_SCRIPT_LINE:
- free_func = (void (*)(rb_parser_t *, rb_parser_ary_data))rb_parser_string_free;
+ foreach_ary(data) {rb_parser_string_free(p, *data);}
break;
default:
rb_bug("unexpected rb_parser_ary_data_type: %d", ary->data_type);
break;
}
- for (long i = 0; i < ary->len; i++) {
- free_func(p, ary->data[i]);
- }
+# undef foreach_ary
xfree(ary);
}