Module Name: src Committed By: rillig Date: Sun Mar 28 18:18:22 UTC 2021
Modified Files: src/usr.bin/xlint/lint1: init.c Log Message: lint: extract duplicate code to is_string_array No functional change. To generate a diff of this commit: cvs rdiff -u -r1.167 -r1.168 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.167 src/usr.bin/xlint/lint1/init.c:1.168 --- src/usr.bin/xlint/lint1/init.c:1.167 Sun Mar 28 18:01:57 2021 +++ src/usr.bin/xlint/lint1/init.c Sun Mar 28 18:18:22 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: init.c,v 1.167 2021/03/28 18:01:57 rillig Exp $ */ +/* $NetBSD: init.c,v 1.168 2021/03/28 18:18:22 rillig Exp $ */ /* * Copyright (c) 1994, 1995 Jochen Pohl @@ -37,7 +37,7 @@ #include <sys/cdefs.h> #if defined(__RCSID) && !defined(lint) -__RCSID("$NetBSD: init.c,v 1.167 2021/03/28 18:01:57 rillig Exp $"); +__RCSID("$NetBSD: init.c,v 1.168 2021/03/28 18:18:22 rillig Exp $"); #endif #include <stdlib.h> @@ -1161,11 +1161,23 @@ initialization_add_designator_subscript( debug_leave(); } +static bool +is_string_array(const type_t *tp, tspec_t t) +{ + tspec_t st; + + if (tp->t_tspec != ARRAY) + return false; + st = tp->t_subt->t_tspec; + return t == CHAR + ? st == CHAR || st == UCHAR || st == SCHAR + : st == WCHAR; +} + /* Initialize a character array or wchar_t array with a string literal. */ static bool initialization_init_array_using_string(struct initialization *in, tnode_t *tn) { - tspec_t t; struct brace_level *level; int len; strg_t *strg; @@ -1184,15 +1196,11 @@ initialization_init_array_using_string(s * the string. */ if (level->bl_subtype != NULL && level->bl_subtype->t_tspec == ARRAY) { - debug_step("subt array"); - t = level->bl_subtype->t_subt->t_tspec; - if (!((strg->st_tspec == CHAR && - (t == CHAR || t == UCHAR || t == SCHAR)) || - (strg->st_tspec == WCHAR && t == WCHAR))) { + debug_step("subtype is an array"); + if (!is_string_array(level->bl_subtype, strg->st_tspec)) { debug_leave(); return false; } - /* XXX: duplicate code, see below */ /* Put the array at top of stack */ initialization_push(in); @@ -1201,15 +1209,11 @@ initialization_init_array_using_string(s /* TODO: what if both bl_type and bl_subtype are ARRAY? */ } else if (level->bl_type != NULL && level->bl_type->t_tspec == ARRAY) { - debug_step("type array"); - t = level->bl_type->t_subt->t_tspec; - if (!((strg->st_tspec == CHAR && - (t == CHAR || t == UCHAR || t == SCHAR)) || - (strg->st_tspec == WCHAR && t == WCHAR))) { + debug_step("type is an array"); + if (!is_string_array(level->bl_type, strg->st_tspec)) { debug_leave(); return false; } - /* XXX: duplicate code, see above */ /* * TODO: is this really not needed in the branch above this