Module Name: src Committed By: rillig Date: Tue Mar 30 20:23:30 UTC 2021
Modified Files: src/usr.bin/xlint/lint1: init.c Log Message: lint: clean up duplicate code in handling of initialization No functional change. To generate a diff of this commit: cvs rdiff -u -r1.183 -r1.184 src/usr.bin/xlint/lint1/init.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/xlint/lint1/init.c diff -u src/usr.bin/xlint/lint1/init.c:1.183 src/usr.bin/xlint/lint1/init.c:1.184 --- src/usr.bin/xlint/lint1/init.c:1.183 Tue Mar 30 16:07:07 2021 +++ src/usr.bin/xlint/lint1/init.c Tue Mar 30 20:23:30 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: init.c,v 1.183 2021/03/30 16:07:07 rillig Exp $ */ +/* $NetBSD: init.c,v 1.184 2021/03/30 20:23:30 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -38,7 +38,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: init.c,v 1.183 2021/03/30 16:07:07 rillig Exp $"); +__RCSID("$NetBSD: init.c,v 1.184 2021/03/30 20:23:30 rillig Exp $"); #endif #include <stdlib.h> @@ -534,6 +534,9 @@ designation_reset(struct designation *dn next = dr->dr_next; designator_free(dr); } + + dn->dn_head = NULL; + dn->dn_tail = NULL; } @@ -587,21 +590,6 @@ brace_level_debug(const struct brace_lev #define brace_level_debug(level) do { } while (false) #endif -static void -brace_level_remove_designation(struct brace_level *bl) -{ - struct designator *dr, *next; - - for (dr = bl->bl_designation.dn_head; dr != NULL; dr = next) { - next = dr->dr_next; - designator_free(dr); - } - - bl->bl_designation.dn_head = NULL; - bl->bl_designation.dn_tail = NULL; -} - - static const type_t * brace_level_sub_type_struct_or_union(const struct brace_level *bl) { @@ -847,11 +835,12 @@ initialization_end_brace_level(struct in bl = in->in_brace_level; in->in_brace_level = bl->bl_enclosing; brace_level_free(bl); + bl = in->in_brace_level; - if (in->in_brace_level != NULL) { - brace_level_advance(in->in_brace_level); - brace_level_remove_designation(in->in_brace_level); - } + if (bl != NULL) + brace_level_advance(bl); + if (bl != NULL) + designation_reset(&bl->bl_designation); initialization_debug(in); debug_leave(); @@ -869,14 +858,6 @@ initialization_add_designator(struct ini designation_add(&in->in_brace_level->bl_designation, name, subscript); } -static void -initialization_remove_designation(struct initialization *in) -{ - - if (in->in_brace_level != NULL) - brace_level_remove_designation(in->in_brace_level); -} - /* * An object with automatic storage duration that has a single initializer * expression without braces and is not an array is initialized by delegating @@ -951,13 +932,14 @@ initialization_init_array_using_string(s static void initialization_expr(struct initialization *in, tnode_t *tn) { + struct brace_level *bl; const type_t *tp; if (in->in_err) return; - if (in->in_brace_level != NULL && - in->in_brace_level->bl_omitted_braces) + bl = in->in_brace_level; + if (bl != NULL && bl->bl_omitted_braces) return; debug_enter(); @@ -969,13 +951,13 @@ initialization_expr(struct initializatio if (initialization_init_array_using_string(in, tn)) goto advance; - if (in->in_brace_level != NULL) - brace_level_apply_designation(in->in_brace_level); + if (bl != NULL) + brace_level_apply_designation(bl); tp = initialization_sub_type(in); if (tp == NULL) goto done; - if (in->in_brace_level == NULL && !is_scalar(tp->t_tspec)) { + if (bl == NULL && !is_scalar(tp->t_tspec)) { /* {}-enclosed initializer required */ error(181); goto done; @@ -989,8 +971,8 @@ initialization_expr(struct initializatio */ if (is_scalar(tn->tn_type->t_tspec) && tp->t_tspec == ARRAY && - in->in_brace_level != NULL) { - in->in_brace_level->bl_omitted_braces = true; + bl != NULL) { + bl->bl_omitted_braces = true; goto done; } @@ -999,10 +981,12 @@ initialization_expr(struct initializatio check_init_expr(tp, in->in_sym, tn); advance: - if (in->in_brace_level != NULL) - brace_level_advance(in->in_brace_level); + if (bl != NULL) + brace_level_advance(bl); done: - initialization_remove_designation(in); + if (bl != NULL) + designation_reset(&bl->bl_designation); + initialization_debug(in); debug_leave(); }