lint: split initstack_pop_item into separate functions

No functional change.
This commit is contained in:
rillig 2021-03-19 00:19:32 +00:00
parent e2bce8130d
commit 89239b6de5
1 changed files with 60 additions and 48 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: init.c,v 1.100 2021/03/19 00:08:13 rillig Exp $ */ /* $NetBSD: init.c,v 1.101 2021/03/19 00:19:32 rillig Exp $ */
/* /*
* Copyright (c) 1994, 1995 Jochen Pohl * Copyright (c) 1994, 1995 Jochen Pohl
@ -37,7 +37,7 @@
#include <sys/cdefs.h> #include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint) #if defined(__RCSID) && !defined(lint)
__RCSID("$NetBSD: init.c,v 1.100 2021/03/19 00:08:13 rillig Exp $"); __RCSID("$NetBSD: init.c,v 1.101 2021/03/19 00:19:32 rillig Exp $");
#endif #endif
#include <stdlib.h> #include <stdlib.h>
@ -410,60 +410,45 @@ initstack_init(void)
} }
static void static void
initstack_pop_item(void) initstack_pop_item_named_member(void)
{ {
initstack_element *istk; initstack_element *istk = initstk;
sym_t *m; sym_t *m;
debug_enter(); debug_step("initializing named member '%s'", namedmem->n_name);
istk = initstk; lint_assert(istk->i_type->t_tspec == STRUCT ||
debug_step("popping:"); istk->i_type->t_tspec == UNION);
debug_initstack_element(istk); for (m = istk->i_type->t_str->sou_first_member;
m != NULL; m = m->s_next) {
initstk = istk->i_enclosing; if (m->s_bitfield && m->s_name == unnamed)
free(istk); continue;
istk = initstk;
lint_assert(istk != NULL);
istk->i_remaining--; if (strcmp(m->s_name, namedmem->n_name) == 0) {
lint_assert(istk->i_remaining >= 0); debug_step("found matching member");
debug_step("%d elements remaining", istk->i_remaining); istk->i_subt = m->s_type;
/* XXX: why ++? */
if (namedmem != NULL) { istk->i_remaining++;
debug_step("initializing named member '%s'", namedmem->n_name); /* XXX: why is i_seen_named_member not set? */
pop_member();
lint_assert(istk->i_type->t_tspec == STRUCT || return;
istk->i_type->t_tspec == UNION);
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 (strcmp(m->s_name, namedmem->n_name) == 0) {
debug_step("found matching member");
istk->i_subt = m->s_type;
/* XXX: why ++? */
istk->i_remaining++;
/* XXX: why is i_seen_named_member not set? */
pop_member();
debug_initstack();
debug_leave();
return;
}
} }
/* undefined struct/union member: %s */
error(101, namedmem->n_name);
pop_member();
istk->i_seen_named_member = true;
debug_initstack();
debug_leave();
return;
} }
/* undefined struct/union member: %s */
error(101, namedmem->n_name);
pop_member();
istk->i_seen_named_member = true;
}
static void
initstack_pop_item_unnamed(void)
{
initstack_element *istk = initstk;
sym_t *m;
/* /*
* If the removed element was a structure member, we must go * If the removed element was a structure member, we must go
* to the next structure member. * to the next structure member.
@ -480,6 +465,33 @@ initstack_pop_item(void)
/* XXX: duplicate code for skipping unnamed bit-fields */ /* XXX: duplicate code for skipping unnamed bit-fields */
istk->i_subt = m->s_type; istk->i_subt = m->s_type;
} }
}
static void
initstack_pop_item(void)
{
initstack_element *istk;
debug_enter();
istk = initstk;
debug_step("popping:");
debug_initstack_element(istk);
initstk = istk->i_enclosing;
free(istk);
istk = initstk;
lint_assert(istk != NULL);
istk->i_remaining--;
lint_assert(istk->i_remaining >= 0);
debug_step("%d elements remaining", istk->i_remaining);
if (namedmem != NULL)
initstack_pop_item_named_member();
else
initstack_pop_item_unnamed();
debug_initstack(); debug_initstack();
debug_leave(); debug_leave();
} }