Module Name: src
Committed By: rillig
Date: Tue Aug 1 16:08:58 UTC 2023
Modified Files:
src/usr.bin/xlint/lint1: cgram.y debug.c decl.c externs1.h lex.c
Log Message:
lint: improve debug logging for declarators
To generate a diff of this commit:
cvs rdiff -u -r1.466 -r1.467 src/usr.bin/xlint/lint1/cgram.y
cvs rdiff -u -r1.58 -r1.59 src/usr.bin/xlint/lint1/debug.c
cvs rdiff -u -r1.370 -r1.371 src/usr.bin/xlint/lint1/decl.c
cvs rdiff -u -r1.203 -r1.204 src/usr.bin/xlint/lint1/externs1.h
cvs rdiff -u -r1.189 -r1.190 src/usr.bin/xlint/lint1/lex.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/cgram.y
diff -u src/usr.bin/xlint/lint1/cgram.y:1.466 src/usr.bin/xlint/lint1/cgram.y:1.467
--- src/usr.bin/xlint/lint1/cgram.y:1.466 Fri Jul 28 21:50:03 2023
+++ src/usr.bin/xlint/lint1/cgram.y Tue Aug 1 16:08:58 2023
@@ -1,5 +1,5 @@
%{
-/* $NetBSD: cgram.y,v 1.466 2023/07/28 21:50:03 rillig Exp $ */
+/* $NetBSD: cgram.y,v 1.467 2023/08/01 16:08:58 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: cgram.y,v 1.466 2023/07/28 21:50:03 rillig Exp $");
+__RCSID("$NetBSD: cgram.y,v 1.467 2023/08/01 16:08:58 rillig Exp $");
#endif
#include <limits.h>
@@ -163,7 +163,11 @@ is_either(const char *s, const char *a,
fprintf(yyo, "%Lg", $$->u.floating);
} <y_val>
%printer { fprintf(yyo, "'%s'", $$ != NULL ? $$->sb_name : "<null>"); } <y_name>
-%printer { debug_sym("", $$, ""); } <y_sym>
+%printer {
+ bool indented = debug_push_indented(true);
+ debug_sym("", $$, "");
+ debug_pop_indented(indented);
+} <y_sym>
%printer { fprintf(yyo, "%s", op_name($$)); } <y_op>
%printer { fprintf(yyo, "%s", scl_name($$)); } <y_scl>
%printer { fprintf(yyo, "%s", tspec_name($$)); } <y_tspec>
Index: src/usr.bin/xlint/lint1/debug.c
diff -u src/usr.bin/xlint/lint1/debug.c:1.58 src/usr.bin/xlint/lint1/debug.c:1.59
--- src/usr.bin/xlint/lint1/debug.c:1.58 Sun Jul 30 22:27:21 2023
+++ src/usr.bin/xlint/lint1/debug.c Tue Aug 1 16:08:58 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: debug.c,v 1.58 2023/07/30 22:27:21 rillig Exp $ */
+/* $NetBSD: debug.c,v 1.59 2023/08/01 16:08:58 rillig Exp $ */
/*-
* Copyright (c) 2021 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: debug.c,v 1.58 2023/07/30 22:27:21 rillig Exp $");
+__RCSID("$NetBSD: debug.c,v 1.59 2023/08/01 16:08:58 rillig Exp $");
#endif
#include <stdlib.h>
@@ -108,6 +108,20 @@ debug_indent_dec(void)
debug_indentation--;
}
+bool
+debug_push_indented(bool indented)
+{
+ bool prev = did_indentation;
+ did_indentation = indented;
+ return prev;
+}
+
+void
+debug_pop_indented(bool indented)
+{
+ did_indentation = indented;
+}
+
void
debug_step(const char *fmt, ...)
{
@@ -426,7 +440,7 @@ static void
debug_decl_level(const decl_level *dl)
{
- debug_printf("decl_level: %s", decl_level_kind_name(dl->d_kind));
+ debug_printf("kind=%s", decl_level_kind_name(dl->d_kind));
if (dl->d_scl != NOSCL)
debug_printf(" %s", scl_name(dl->d_scl));
if (dl->d_type != NULL)
@@ -477,15 +491,19 @@ debug_decl_level(const decl_level *dl)
}
void
-debug_dcs(bool all)
+debug_dcs(void)
+{
+ debug_printf("dcs ");
+ debug_decl_level(dcs);
+}
+
+void
+debug_dcs_all(void)
{
- int prev_indentation = debug_indentation;
+ size_t i = 0;
for (const decl_level *dl = dcs; dl != NULL; dl = dl->d_enclosing) {
+ debug_printf("dcs[%zu] ", i++);
debug_decl_level(dl);
- if (!all)
- return;
- debug_indentation++;
}
- debug_indentation = prev_indentation;
}
#endif
Index: src/usr.bin/xlint/lint1/decl.c
diff -u src/usr.bin/xlint/lint1/decl.c:1.370 src/usr.bin/xlint/lint1/decl.c:1.371
--- src/usr.bin/xlint/lint1/decl.c:1.370 Mon Jul 31 20:31:58 2023
+++ src/usr.bin/xlint/lint1/decl.c Tue Aug 1 16:08:58 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: decl.c,v 1.370 2023/07/31 20:31:58 rillig Exp $ */
+/* $NetBSD: decl.c,v 1.371 2023/08/01 16:08:58 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: decl.c,v 1.370 2023/07/31 20:31:58 rillig Exp $");
+__RCSID("$NetBSD: decl.c,v 1.371 2023/08/01 16:08:58 rillig Exp $");
#endif
#include <sys/param.h>
@@ -216,8 +216,8 @@ dcs_add_storage_class(scl_t sc)
dcs->d_scl = STATIC; /* ignore thread_local */
else
dcs->d_multiple_storage_classes = true;
- debug_step("%s:", __func__);
- debug_dcs(false);
+ debug_printf("%s: ", __func__);
+ debug_dcs();
}
/* Merge the signedness into the abstract type. */
@@ -315,7 +315,7 @@ dcs_add_type(type_t *tp)
{
debug_step("%s: %s", __func__, type_name(tp));
- debug_dcs(false);
+ debug_dcs();
if (tp->t_typedef) {
/*
* something like "typedef int a; int a b;"
@@ -344,7 +344,7 @@ dcs_add_type(type_t *tp)
dcs->d_rank_mod = NO_TSPEC;
}
dcs->d_type = tp;
- debug_dcs(false);
+ debug_dcs();
return;
}
@@ -412,7 +412,7 @@ dcs_add_type(type_t *tp)
dcs->d_invalid_type_combination = true;
dcs->d_abstract_type = t;
}
- debug_dcs(false);
+ debug_dcs();
}
static void
@@ -470,7 +470,7 @@ pack_struct_or_union(type_t *tp)
bits = mem_bits;
}
tp->t_sou->sou_size_in_bits = bits;
- debug_dcs(false);
+ debug_dcs();
}
void
@@ -509,14 +509,14 @@ begin_declaration_level(decl_level_kind
dl->d_last_dlsym = &dl->d_first_dlsym;
dcs = dl;
debug_enter();
- debug_dcs(true);
+ debug_dcs_all();
}
void
end_declaration_level(void)
{
- debug_dcs(true);
+ debug_dcs_all();
decl_level *dl = dcs;
dcs = dl->d_enclosing;
@@ -657,8 +657,6 @@ dcs_merge_declaration_specifiers(void)
return;
}
- debug_step("%s: %s", __func__, type_name(tp));
-
if (t == NO_TSPEC && s == NO_TSPEC && l == NO_TSPEC && c == NO_TSPEC)
dcs->d_no_type_specifier = true;
if (t == NO_TSPEC && s == NO_TSPEC && (l == NO_TSPEC || l == LONG))
@@ -699,7 +697,8 @@ dcs_merge_declaration_specifiers(void)
if (l != NO_TSPEC)
t = l;
dcs->d_type = gettyp(merge_signedness(t, s));
- debug_dcs(false);
+ debug_printf("%s: ", __func__);
+ debug_dcs();
}
/* Create a type in 'dcs->d_type' from the information gathered in 'dcs'. */
@@ -739,7 +738,7 @@ dcs_end_type(void)
dcs->d_type->t_volatile |= dcs->d_qual.tq_volatile;
}
- debug_dcs(false);
+ debug_dcs();
debug_leave();
}
@@ -1050,7 +1049,7 @@ dcs_add_member(sym_t *mem)
if (union_size > dcs->d_sou_size_in_bits)
dcs->d_sou_size_in_bits = union_size;
- debug_dcs(false);
+ debug_dcs();
}
sym_t *
@@ -1195,7 +1194,7 @@ sym_t *
add_pointer(sym_t *decl, qual_ptr *p)
{
- debug_dcs(false);
+ debug_dcs();
type_t **tpp = &decl->s_type;
while (*tpp != NULL && *tpp != dcs->d_type)
@@ -1266,7 +1265,7 @@ sym_t *
add_array(sym_t *decl, bool dim, int n)
{
- debug_dcs(false);
+ debug_dcs();
type_t **tpp = &decl->s_type;
while (*tpp != NULL && *tpp != dcs->d_type)
@@ -1349,7 +1348,7 @@ add_function(sym_t *decl, struct paramet
{
debug_enter();
- debug_dcs(true);
+ debug_dcs_all();
debug_sym("decl: ", decl, "\n");
#ifdef DEBUG
for (const sym_t *arg = params.first; arg != NULL; arg = arg->s_next)
@@ -1407,7 +1406,7 @@ add_function(sym_t *decl, struct paramet
params.prototype, params.first, params.vararg);
debug_step("add_function: '%s'", type_name(decl->s_type));
- debug_dcs(true);
+ debug_dcs_all();
debug_leave();
return decl;
}
Index: src/usr.bin/xlint/lint1/externs1.h
diff -u src/usr.bin/xlint/lint1/externs1.h:1.203 src/usr.bin/xlint/lint1/externs1.h:1.204
--- src/usr.bin/xlint/lint1/externs1.h:1.203 Sun Jul 30 22:27:21 2023
+++ src/usr.bin/xlint/lint1/externs1.h Tue Aug 1 16:08:58 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: externs1.h,v 1.203 2023/07/30 22:27:21 rillig Exp $ */
+/* $NetBSD: externs1.h,v 1.204 2023/08/01 16:08:58 rillig Exp $ */
/*
* Copyright (c) 1994, 1995 Jochen Pohl
@@ -136,7 +136,8 @@ const char *scl_name(scl_t);
const char *symt_name(symt_t);
const char *type_qualifiers_string(type_qualifiers);
const char *function_specifier_name(function_specifier);
-void debug_dcs(bool);
+void debug_dcs(void);
+void debug_dcs_all(void);
void debug_node(const tnode_t *);
void debug_type(const type_t *);
void debug_sym(const char *, const sym_t *, const char *);
@@ -145,6 +146,8 @@ void debug_printf(const char *fmt, ...)
void debug_skip_indent(void);
void debug_indent_inc(void);
void debug_indent_dec(void);
+bool debug_push_indented(bool);
+void debug_pop_indented(bool);
void debug_enter_func(const char *);
void debug_step(const char *fmt, ...) __printflike(1, 2);
void debug_leave_func(const char *);
@@ -152,7 +155,8 @@ void debug_leave_func(const char *);
#define debug_leave() debug_leave_func(__func__)
#else
#define debug_noop() do { } while (false)
-#define debug_dcs(all) debug_noop()
+#define debug_dcs() debug_noop()
+#define debug_dcs_all() debug_noop()
#define debug_sym(p, sym, s) debug_noop()
#define debug_symtab() debug_noop()
#define debug_node(tn) debug_noop()
@@ -161,6 +165,8 @@ void debug_leave_func(const char *);
#define debug_skip_indent() debug_noop()
#define debug_indent_inc() debug_noop()
#define debug_indent_dec() debug_noop()
+#define debug_push_indented(c) true
+#define debug_pop_indented(c) (void)(c)
#define debug_enter() debug_noop()
#define debug_step(...) debug_noop()
#define debug_leave() debug_noop()
Index: src/usr.bin/xlint/lint1/lex.c
diff -u src/usr.bin/xlint/lint1/lex.c:1.189 src/usr.bin/xlint/lint1/lex.c:1.190
--- src/usr.bin/xlint/lint1/lex.c:1.189 Sun Jul 30 22:27:21 2023
+++ src/usr.bin/xlint/lint1/lex.c Tue Aug 1 16:08:58 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: lex.c,v 1.189 2023/07/30 22:27:21 rillig Exp $ */
+/* $NetBSD: lex.c,v 1.190 2023/08/01 16:08:58 rillig Exp $ */
/*
* Copyright (c) 1996 Christopher G. Demetriou. All Rights Reserved.
@@ -38,7 +38,7 @@
#include <sys/cdefs.h>
#if defined(__RCSID)
-__RCSID("$NetBSD: lex.c,v 1.189 2023/07/30 22:27:21 rillig Exp $");
+__RCSID("$NetBSD: lex.c,v 1.190 2023/08/01 16:08:58 rillig Exp $");
#endif
#include <ctype.h>
@@ -1361,6 +1361,8 @@ getsym(sbuf_t *sb)
set_symtyp(FVFT);
if (!in_gcc_attribute) {
+ debug_printf("%s: symtab_add ", __func__);
+ debug_sym("", sym, "\n");
symtab_add(sym);
*dl->d_last_dlsym = sym;