Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.bin/xlint/lint1 lint: split initstack_push into smaller ...
details: https://anonhg.NetBSD.org/src/rev/eb9c479a2030
branches: trunk
changeset: 953735:eb9c479a2030
user: rillig <rillig%NetBSD.org@localhost>
date: Thu Mar 18 23:45:20 2021 +0000
description:
lint: split initstack_push into smaller functions
No functional change.
diffstat:
usr.bin/xlint/lint1/init.c | 172 ++++++++++++++++++++++++--------------------
1 files changed, 95 insertions(+), 77 deletions(-)
diffs (210 lines):
diff -r 7a103366c8f4 -r eb9c479a2030 usr.bin/xlint/lint1/init.c
--- a/usr.bin/xlint/lint1/init.c Thu Mar 18 23:37:31 2021 +0000
+++ b/usr.bin/xlint/lint1/init.c Thu Mar 18 23:45:20 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: init.c,v 1.98 2021/03/18 23:37:31 rillig Exp $ */
+/* $NetBSD: init.c,v 1.99 2021/03/18 23:45:20 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.98 2021/03/18 23:37:31 rillig Exp $");
+__RCSID("$NetBSD: init.c,v 1.99 2021/03/18 23:45:20 rillig Exp $");
#endif
#include <stdlib.h>
@@ -545,11 +545,98 @@
}
static void
+initstack_push_array(void)
+{
+ initstack_element *const istk = initstk;
+
+ if (istk->i_enclosing->i_seen_named_member) {
+ istk->i_brace = true;
+ debug_step("ARRAY brace=%d, namedmem=%d",
+ istk->i_brace, istk->i_enclosing->i_seen_named_member);
+ }
+
+ if (is_incomplete(istk->i_type) &&
+ istk->i_enclosing->i_enclosing != NULL) {
+ /* initialization of an incomplete type */
+ error(175);
+ initerr = true;
+ return;
+ }
+
+ istk->i_subt = istk->i_type->t_subt;
+ istk->i_array_of_unknown_size = is_incomplete(istk->i_type);
+ istk->i_remaining = istk->i_type->t_dim;
+ debug_named_member();
+ debug_step("type '%s' remaining %d",
+ type_name(istk->i_type), istk->i_remaining);
+}
+
+static bool
+initstack_push_struct_or_union(void)
+{
+ initstack_element *const istk = initstk;
+ int cnt;
+ sym_t *m;
+
+ if (is_incomplete(istk->i_type)) {
+ /* initialization of an incomplete type */
+ error(175);
+ initerr = true;
+ return false;
+ }
+ cnt = 0;
+ debug_named_member();
+ debug_step("lookup for '%s'%s",
+ type_name(istk->i_type),
+ istk->i_seen_named_member ? ", seen named member" : "");
+ for (m = istk->i_type->t_str->sou_first_member;
+ m != NULL; m = m->s_next) {
+ if (m->s_bitfield && m->s_name == unnamed)
+ continue;
+ if (namedmem != NULL) {
+ debug_step("named lhs.member=%s, rhs.member=%s",
+ m->s_name, namedmem->n_name);
+ if (strcmp(m->s_name, namedmem->n_name) == 0) {
+ cnt++;
+ break;
+ } else
+ continue;
+ }
+ if (++cnt == 1) {
+ istk->i_current_object = m;
+ istk->i_subt = m->s_type;
+ }
+ }
+ if (namedmem != NULL) {
+ if (m == NULL) {
+ debug_step("pop struct");
+ return true;
+ }
+ istk->i_current_object = m;
+ istk->i_subt = m->s_type;
+ istk->i_seen_named_member = true;
+ debug_step("named member '%s'", namedmem->n_name);
+ pop_member();
+ cnt = istk->i_type->t_tspec == STRUCT ? 2 : 1;
+ }
+ istk->i_brace = true;
+ debug_step("unnamed element with type '%s'%s",
+ type_name(istk->i_type != NULL ? istk->i_type : istk->i_subt),
+ istk->i_brace ? ", needs closing brace" : "");
+ if (cnt == 0) {
+ /* cannot init. struct/union with no named member */
+ error(179);
+ initerr = true;
+ return false;
+ }
+ istk->i_remaining = istk->i_type->t_tspec == STRUCT ? cnt : 1;
+ return false;
+}
+
+static void
initstack_push(void)
{
initstack_element *istk, *inxt;
- int cnt;
- sym_t *m;
debug_enter();
@@ -576,86 +663,17 @@
goto pop;
}
- if (istk->i_enclosing->i_seen_named_member) {
- istk->i_brace = true;
- debug_step("ARRAY brace=%d, namedmem=%d",
- istk->i_brace,
- istk->i_enclosing->i_seen_named_member);
- }
+ initstack_push_array();
+ break;
- if (is_incomplete(istk->i_type) &&
- istk->i_enclosing->i_enclosing != NULL) {
- /* initialization of an incomplete type */
- error(175);
- initerr = true;
- break;
- }
- istk->i_subt = istk->i_type->t_subt;
- istk->i_array_of_unknown_size = is_incomplete(istk->i_type);
- istk->i_remaining = istk->i_type->t_dim;
- debug_named_member();
- debug_step("type '%s' remaining %d",
- type_name(istk->i_type), istk->i_remaining);
- break;
case UNION:
if (tflag)
/* initialization of union is illegal in trad. C */
warning(238);
/* FALLTHROUGH */
case STRUCT:
- if (is_incomplete(istk->i_type)) {
- /* initialization of an incomplete type */
- error(175);
- initerr = true;
- break;
- }
- cnt = 0;
- debug_named_member();
- debug_step("lookup for '%s'%s",
- type_name(istk->i_type),
- istk->i_seen_named_member ? ", seen named member" : "");
- for (m = istk->i_type->t_str->sou_first_member;
- m != NULL; m = m->s_next) {
- if (m->s_bitfield && m->s_name == unnamed)
- continue;
- if (namedmem != NULL) {
- debug_step("named lhs.member=%s, rhs.member=%s",
- m->s_name, namedmem->n_name);
- if (strcmp(m->s_name, namedmem->n_name) == 0) {
- cnt++;
- break;
- } else
- continue;
- }
- if (++cnt == 1) {
- istk->i_current_object = m;
- istk->i_subt = m->s_type;
- }
- }
- if (namedmem != NULL) {
- if (m == NULL) {
- debug_step("pop struct");
- goto pop;
- }
- istk->i_current_object = m;
- istk->i_subt = m->s_type;
- istk->i_seen_named_member = true;
- debug_step("named member '%s'", namedmem->n_name);
- pop_member();
- cnt = istk->i_type->t_tspec == STRUCT ? 2 : 1;
- }
- istk->i_brace = true;
- debug_step("unnamed element with type '%s'%s",
- type_name(
- istk->i_type != NULL ? istk->i_type : istk->i_subt),
- istk->i_brace ? ", needs closing brace" : "");
- if (cnt == 0) {
- /* cannot init. struct/union with no named member */
- error(179);
- initerr = true;
- break;
- }
- istk->i_remaining = istk->i_type->t_tspec == STRUCT ? cnt : 1;
+ if (initstack_push_struct_or_union())
+ goto pop;
break;
default:
if (namedmem != NULL) {
Home |
Main Index |
Thread Index |
Old Index