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: add indirection for accessing the ...
details: https://anonhg.NetBSD.org/src/rev/6f052cd95183
branches: trunk
changeset: 960618:6f052cd95183
user: rillig <rillig%NetBSD.org@localhost>
date: Tue Mar 23 17:36:55 2021 +0000
description:
lint: add indirection for accessing the current initialization
This indirection will be needed to handle nested initializations, which
are a new feature of C99. These are currently not handled correctly,
see msg_171.c.
No functional change.
diffstat:
usr.bin/xlint/lint1/cgram.y | 14 ++++----
usr.bin/xlint/lint1/decl.c | 16 +++++-----
usr.bin/xlint/lint1/externs1.h | 6 ++--
usr.bin/xlint/lint1/init.c | 62 ++++++++++++++++++++++++++++++++---------
4 files changed, 66 insertions(+), 32 deletions(-)
diffs (233 lines):
diff -r 941b58926b6d -r 6f052cd95183 usr.bin/xlint/lint1/cgram.y
--- a/usr.bin/xlint/lint1/cgram.y Tue Mar 23 13:22:40 2021 +0000
+++ b/usr.bin/xlint/lint1/cgram.y Tue Mar 23 17:36:55 2021 +0000
@@ -1,5 +1,5 @@
%{
-/* $NetBSD: cgram.y,v 1.196 2021/03/21 14:49:21 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.197 2021/03/23 17:36:55 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: cgram.y,v 1.196 2021/03/21 14:49:21 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.197 2021/03/23 17:36:55 rillig Exp $");
#endif
#include <limits.h>
@@ -1885,24 +1885,24 @@
expr_statement_list {
block_level--;
mem_block_level--;
- initsym = mktempsym(duptyp($4->tn_type));
+ *current_initsym() = mktempsym(duptyp($4->tn_type));
mem_block_level++;
block_level++;
/* ({ }) is a GCC extension */
gnuism(320);
} compound_statement_rbrace T_RPAREN {
- $$ = new_name_node(initsym, 0);
+ $$ = new_name_node(*current_initsym(), 0);
}
| T_LPAREN compound_statement_lbrace expr_statement_list {
block_level--;
mem_block_level--;
- initsym = mktempsym($3->tn_type);
+ *current_initsym() = mktempsym($3->tn_type);
mem_block_level++;
block_level++;
/* ({ }) is a GCC extension */
gnuism(320);
} compound_statement_rbrace T_RPAREN {
- $$ = new_name_node(initsym, 0);
+ $$ = new_name_node(*current_initsym(), 0);
}
| term T_INCDEC {
$$ = build($2 == INC ? INCAFT : DECAFT, $1, NULL);
@@ -1995,7 +1995,7 @@
if (!Sflag)
/* compound literals are a C9X/GCC extension */
gnuism(319);
- $$ = new_name_node(initsym, 0);
+ $$ = new_name_node(*current_initsym(), 0);
}
;
diff -r 941b58926b6d -r 6f052cd95183 usr.bin/xlint/lint1/decl.c
--- a/usr.bin/xlint/lint1/decl.c Tue Mar 23 13:22:40 2021 +0000
+++ b/usr.bin/xlint/lint1/decl.c Tue Mar 23 17:36:55 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: decl.c,v 1.157 2021/03/21 20:18:45 rillig Exp $ */
+/* $NetBSD: decl.c,v 1.158 2021/03/23 17:36:56 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: decl.c,v 1.157 2021/03/21 20:18:45 rillig Exp $");
+__RCSID("$NetBSD: decl.c,v 1.158 2021/03/23 17:36:56 rillig Exp $");
#endif
#include <sys/param.h>
@@ -1896,8 +1896,8 @@
{
char *s;
- initerr = false;
- initsym = decl;
+ *current_initerr() = false;
+ *current_initsym() = decl;
switch (dcs->d_ctx) {
case EXTERN:
@@ -1929,7 +1929,7 @@
break;
}
- if (initflg && !initerr)
+ if (initflg && !*current_initerr())
initstack_init();
}
@@ -1946,7 +1946,7 @@
check_type(dsym);
- if (initflg && !(initerr = check_init(dsym)))
+ if (initflg && !(*current_initerr() = check_init(dsym)))
dsym->s_def = DEF;
/*
@@ -2424,7 +2424,7 @@
if (initflg) {
/* cannot initialize parameter: %s */
error(52, sym->s_name);
- initerr = true;
+ *current_initerr() = true;
}
if ((t = sym->s_type->t_tspec) == ARRAY) {
@@ -2759,7 +2759,7 @@
}
- if (initflg && !(initerr = check_init(dsym))) {
+ if (initflg && !(*current_initerr() = check_init(dsym))) {
dsym->s_def = DEF;
mark_as_set(dsym);
}
diff -r 941b58926b6d -r 6f052cd95183 usr.bin/xlint/lint1/externs1.h
--- a/usr.bin/xlint/lint1/externs1.h Tue Mar 23 13:22:40 2021 +0000
+++ b/usr.bin/xlint/lint1/externs1.h Tue Mar 23 17:36:55 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: externs1.h,v 1.82 2021/03/21 19:08:10 rillig Exp $ */
+/* $NetBSD: externs1.h,v 1.83 2021/03/23 17:36:56 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -292,8 +292,8 @@
/*
* init.c
*/
-extern bool initerr;
-extern sym_t *initsym;
+extern bool *current_initerr(void);
+extern sym_t **current_initsym(void);
extern void initstack_init(void);
extern void init_rbrace(void);
diff -r 941b58926b6d -r 6f052cd95183 usr.bin/xlint/lint1/init.c
--- a/usr.bin/xlint/lint1/init.c Tue Mar 23 13:22:40 2021 +0000
+++ b/usr.bin/xlint/lint1/init.c Tue Mar 23 17:36:55 2021 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: init.c,v 1.109 2021/03/22 19:29:43 rillig Exp $ */
+/* $NetBSD: init.c,v 1.110 2021/03/23 17:36:56 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.109 2021/03/22 19:29:43 rillig Exp $");
+__RCSID("$NetBSD: init.c,v 1.110 2021/03/23 17:36:56 rillig Exp $");
#endif
#include <stdlib.h>
@@ -199,26 +199,60 @@
struct namlist *n_next;
} namlist_t;
+struct initialization {
+ /*
+ * initerr is set as soon as a fatal error occurred in an initialization.
+ * The effect is that the rest of the initialization is ignored (parsed
+ * by yacc, expression trees built, but no initialization takes place).
+ */
+ bool initerr;
-/*
- * initerr is set as soon as a fatal error occurred in an initialization.
- * The effect is that the rest of the initialization is ignored (parsed
- * by yacc, expression trees built, but no initialization takes place).
- */
-bool initerr;
+ /* Pointer to the symbol which is to be initialized. */
+ sym_t *initsym;
-/* Pointer to the symbol which is to be initialized. */
-sym_t *initsym;
+ /* Points to the top element of the initialization stack. */
+ initstack_element *initstk;
-/* Points to the top element of the initialization stack. */
-static initstack_element *initstk;
+ /* Points to a c9x named member. */
+ namlist_t *namedmem;
-/* Points to a c9x named member; */
-static namlist_t *namedmem = NULL;
+ struct initialization *next;
+};
+
+static struct initialization init;
static bool init_array_using_string(tnode_t *);
+bool *
+current_initerr(void)
+{
+ return &init.initerr;
+}
+
+sym_t **
+current_initsym(void)
+{
+ return &init.initsym;
+}
+
+static namlist_t **
+current_namedmem(void)
+{
+ return &init.namedmem;
+}
+
+static initstack_element **
+current_initstk(void)
+{
+ return &init.initstk;
+}
+
+#define initerr (*current_initerr())
+#define initsym (*current_initsym())
+#define initstk (*current_initstk())
+#define namedmem (*current_namedmem())
+
#ifndef DEBUG
#define debug_printf(fmt, ...) do { } while (false)
Home |
Main Index |
Thread Index |
Old Index