Module Name: src
Committed By: rillig
Date: Sun Mar 28 09:34:45 UTC 2021
Modified Files:
src/usr.bin/xlint/lint1: init.c
Log Message:
lint: inline brace level in initialization
No functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.148 -r1.149 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.148 src/usr.bin/xlint/lint1/init.c:1.149
--- src/usr.bin/xlint/lint1/init.c:1.148 Sun Mar 28 09:20:51 2021
+++ src/usr.bin/xlint/lint1/init.c Sun Mar 28 09:34:45 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: init.c,v 1.148 2021/03/28 09:20:51 rillig Exp $ */
+/* $NetBSD: init.c,v 1.149 2021/03/28 09:34:45 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.148 2021/03/28 09:20:51 rillig Exp $");
+__RCSID("$NetBSD: init.c,v 1.149 2021/03/28 09:34:45 rillig Exp $");
#endif
#include <stdlib.h>
@@ -556,18 +556,6 @@ current_initsym(void)
return ¤t_init()->initsym;
}
-static const struct brace_level *
-current_brace_level(void)
-{
- return current_init()->brace_level;
-}
-
-static struct brace_level **
-current_brace_level_lvalue(void)
-{
- return ¤t_init()->brace_level;
-}
-
static void
set_initerr(void)
{
@@ -576,8 +564,6 @@ set_initerr(void)
#define initerr (*current_initerr())
#define initsym (*current_initsym())
-#define brace_level_rvalue (current_brace_level())
-#define brace_level_lvalue (*current_brace_level_lvalue())
#ifndef DEBUG
@@ -641,12 +627,12 @@ brace_level_new(type_t *type, type_t *su
}
static void
-brace_level_set_array_dimension(int dim)
+brace_level_set_array_dimension(struct brace_level *level, int dim)
{
debug_step("setting the array size to %d", dim);
- brace_level_lvalue->bl_type->t_dim = dim;
+ level->bl_type->t_dim = dim;
debug_indent();
- brace_level_debug(brace_level_rvalue);
+ brace_level_debug(level);
}
static void
@@ -684,6 +670,7 @@ brace_level_next_member(struct brace_lev
void
designation_add_subscript(range_t range)
{
+ struct initialization *in = current_init();
struct brace_level *level;
debug_enter();
@@ -694,14 +681,14 @@ designation_add_subscript(range_t range)
range.lo, range.hi);
/* XXX: This call is wrong here, it must be somewhere else. */
- initstack_pop_nobrace(current_init());
+ initstack_pop_nobrace(in);
- level = brace_level_lvalue;
+ level = in->brace_level;
if (level->bl_array_of_unknown_size) {
/* No +1 here, extend_if_array_of_unknown_size will add it. */
int auto_dim = (int)range.hi;
if (auto_dim > level->bl_type->t_dim)
- brace_level_set_array_dimension(auto_dim);
+ brace_level_set_array_dimension(level, auto_dim);
}
debug_leave();
@@ -731,7 +718,7 @@ initstack_init(void)
initsym->s_type = duptyp(initsym->s_type);
/* TODO: does 'duptyp' create a memory leak? */
- brace_level_lvalue = brace_level_new(NULL, initsym->s_type, 1);
+ current_init()->brace_level = brace_level_new(NULL, initsym->s_type, 1);
initialization_debug(current_init());
debug_leave();
@@ -780,9 +767,9 @@ initstack_pop_item_named_member(const ch
/* TODO: think of a better name than 'pop' */
static void
-initstack_pop_item_unnamed(void)
+initstack_pop_item_unnamed(struct initialization *in)
{
- struct brace_level *level = brace_level_lvalue;
+ struct brace_level *level = in->brace_level;
/*
* If the removed element was a structure member, we must go
@@ -803,14 +790,14 @@ initstack_pop_item(struct initialization
debug_enter();
- level = brace_level_lvalue;
+ level = in->brace_level;
debug_indent();
debug_printf("popping: ");
brace_level_debug(level);
- brace_level_lvalue = level->bl_enclosing;
+ in->brace_level = level->bl_enclosing;
free(level);
- level = brace_level_lvalue;
+ level = in->brace_level;
lint_assert(level != NULL);
level->bl_remaining--;
@@ -820,7 +807,7 @@ initstack_pop_item(struct initialization
if (in->designation.head != NULL && in->designation.head->name != NULL)
initstack_pop_item_named_member(in->designation.head->name);
else
- initstack_pop_item_unnamed();
+ initstack_pop_item_unnamed(in);
initialization_debug(current_init());
debug_leave();
@@ -838,7 +825,7 @@ initstack_pop_brace(struct initializatio
debug_enter();
initialization_debug(in);
do {
- brace = brace_level_rvalue->bl_brace;
+ brace = in->brace_level->bl_brace;
/* TODO: improve wording of the debug message */
debug_step("loop brace=%d", brace);
initstack_pop_item(in);
@@ -866,9 +853,9 @@ initstack_pop_nobrace(struct initializat
/* Extend an array of unknown size by one element */
static void
-extend_if_array_of_unknown_size(void)
+extend_if_array_of_unknown_size(struct initialization *in)
{
- struct brace_level *level = brace_level_lvalue;
+ struct brace_level *level = in->brace_level;
if (level->bl_remaining != 0)
return;
@@ -936,7 +923,7 @@ initstack_push_struct_or_union(struct in
* TODO: remove unnecessary 'const' for variables in functions that
* fit on a single screen. Keep it for larger functions.
*/
- struct brace_level *level = brace_level_lvalue;
+ struct brace_level *level = in->brace_level;
int cnt;
sym_t *m;
@@ -993,20 +980,20 @@ initstack_push(struct initialization *in
debug_enter();
- extend_if_array_of_unknown_size();
+ extend_if_array_of_unknown_size(in);
- level = brace_level_lvalue;
+ level = in->brace_level;
lint_assert(level->bl_remaining > 0);
lint_assert(level->bl_type == NULL ||
!is_scalar(level->bl_type->t_tspec));
- brace_level_lvalue = xcalloc(1, sizeof *brace_level_lvalue);
- brace_level_lvalue->bl_enclosing = level;
- brace_level_lvalue->bl_type = level->bl_subtype;
- lint_assert(brace_level_lvalue->bl_type->t_tspec != FUNC);
+ in->brace_level = xcalloc(1, sizeof *in->brace_level);
+ in->brace_level->bl_enclosing = level;
+ in->brace_level->bl_type = level->bl_subtype;
+ lint_assert(in->brace_level->bl_type->t_tspec != FUNC);
again:
- level = brace_level_lvalue;
+ level = in->brace_level;
debug_step("expecting type '%s'", type_name(level->bl_type));
lint_assert(level->bl_type != NULL);
@@ -1036,9 +1023,9 @@ again:
debug_step("pop scalar");
pop:
/* TODO: extract this into end_initializer_level */
- enclosing = brace_level_rvalue->bl_enclosing;
+ enclosing = in->brace_level->bl_enclosing;
free(level);
- brace_level_lvalue = enclosing;
+ in->brace_level = enclosing;
goto again;
}
/* The initialization stack now expects a single scalar. */
@@ -1053,7 +1040,7 @@ again:
static void
check_too_many_initializers(void)
{
- const struct brace_level *level = brace_level_rvalue;
+ const struct brace_level *level = current_init()->brace_level;
if (level->bl_remaining > 0)
return;
/*
@@ -1088,10 +1075,10 @@ initstack_next_brace(struct initializati
debug_enter();
initialization_debug(in);
- if (brace_level_rvalue->bl_type != NULL &&
- is_scalar(brace_level_rvalue->bl_type->t_tspec)) {
+ if (in->brace_level->bl_type != NULL &&
+ is_scalar(in->brace_level->bl_type->t_tspec)) {
/* invalid initializer type %s */
- error(176, type_name(brace_level_rvalue->bl_type));
+ error(176, type_name(in->brace_level->bl_type));
set_initerr();
}
if (!initerr)
@@ -1099,12 +1086,12 @@ initstack_next_brace(struct initializati
if (!initerr)
initstack_push(in);
if (!initerr) {
- brace_level_lvalue->bl_brace = true;
+ in->brace_level->bl_brace = true;
designation_debug(&in->designation);
debug_step("expecting type '%s'",
- type_name(brace_level_rvalue->bl_type != NULL
- ? brace_level_rvalue->bl_type
- : brace_level_rvalue->bl_subtype));
+ type_name(in->brace_level->bl_type != NULL
+ ? in->brace_level->bl_type
+ : in->brace_level->bl_subtype));
}
initialization_debug(current_init());
@@ -1117,8 +1104,8 @@ initstack_next_nobrace(struct initializa
{
debug_enter();
- if (brace_level_rvalue->bl_type == NULL &&
- !is_scalar(brace_level_rvalue->bl_subtype->t_tspec)) {
+ if (in->brace_level->bl_type == NULL &&
+ !is_scalar(in->brace_level->bl_subtype->t_tspec)) {
/* {}-enclosed initializer required */
error(181);
/* XXX: maybe set initerr here */
@@ -1128,7 +1115,7 @@ initstack_next_nobrace(struct initializa
check_too_many_initializers();
while (!initerr) {
- struct brace_level *level = brace_level_lvalue;
+ struct brace_level *level = in->brace_level;
if (tn->tn_type->t_tspec == STRUCT &&
level->bl_type == tn->tn_type &&
@@ -1162,9 +1149,9 @@ init_lbrace(void)
initialization_debug(in);
if ((initsym->s_scl == AUTO || initsym->s_scl == REG) &&
- brace_level_rvalue->bl_enclosing == NULL) {
+ in->brace_level->bl_enclosing == NULL) {
if (tflag &&
- !is_scalar(brace_level_rvalue->bl_subtype->t_tspec))
+ !is_scalar(in->brace_level->bl_subtype->t_tspec))
/* no automatic aggregate initialization in trad. C */
warning(188);
}
@@ -1241,7 +1228,7 @@ init_using_assign(tnode_t *rn)
if (initsym->s_type->t_tspec == ARRAY)
return false;
- if (brace_level_rvalue->bl_enclosing != NULL)
+ if (current_init()->brace_level->bl_enclosing != NULL)
return false;
debug_step("handing over to ASSIGN");
@@ -1260,6 +1247,7 @@ init_using_assign(tnode_t *rn)
static void
check_init_expr(tnode_t *tn, scl_t sclass)
{
+ struct initialization *in = current_init();
tnode_t *ln;
tspec_t lt, rt;
struct mbl *tmem;
@@ -1267,7 +1255,7 @@ check_init_expr(tnode_t *tn, scl_t sclas
/* Create a temporary node for the left side. */
ln = tgetblk(sizeof *ln);
ln->tn_op = NAME;
- ln->tn_type = tduptyp(brace_level_rvalue->bl_type);
+ ln->tn_type = tduptyp(in->brace_level->bl_type);
ln->tn_type->t_const = false;
ln->tn_lvalue = true;
ln->tn_sym = initsym; /* better than nothing */
@@ -1296,8 +1284,8 @@ check_init_expr(tnode_t *tn, scl_t sclas
* XXX: Is it correct to do this conversion _after_ the typeok above?
*/
if (lt != rt ||
- (brace_level_rvalue->bl_type->t_bitfield && tn->tn_op == CON))
- tn = convert(INIT, 0, brace_level_rvalue->bl_type, tn);
+ (in->brace_level->bl_type->t_bitfield && tn->tn_op == CON))
+ tn = convert(INIT, 0, in->brace_level->bl_type, tn);
check_non_constant_initializer(tn, sclass);
}
@@ -1333,8 +1321,8 @@ init_using_expr(tnode_t *tn)
if (initerr || tn == NULL)
goto done_initstack;
- brace_level_lvalue->bl_remaining--;
- debug_step("%d elements remaining", brace_level_rvalue->bl_remaining);
+ in->brace_level->bl_remaining--;
+ debug_step("%d elements remaining", in->brace_level->bl_remaining);
check_init_expr(tn, sclass);
@@ -1364,7 +1352,7 @@ init_array_using_string(struct initializ
debug_enter();
initialization_debug(current_init());
- level = brace_level_lvalue;
+ level = in->brace_level;
strg = tn->tn_string;
/*
@@ -1384,7 +1372,7 @@ init_array_using_string(struct initializ
/* Put the array at top of stack */
initstack_push(in);
- level = brace_level_lvalue;
+ level = in->brace_level;
/* TODO: what if both bl_type and bl_subtype are ARRAY? */