diff options
author | Nobuyoshi Nakada <[email protected]> | 2024-06-01 20:54:58 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2024-06-01 21:51:27 +0900 |
commit | fd74614059c069311dfb3ec1db914fce67421a51 (patch) | |
tree | a7fef5a31a0133d9b58c6651d6bbe8ecbec0b550 | |
parent | 05553cf22d43dd78b8f30cc4591230b5c000c538 (diff) |
Get rid of type-punning pointer casts
-rw-r--r-- | parse.y | 12 |
1 files changed, 6 insertions, 6 deletions
@@ -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); } |