Module Name: src
Committed By: rillig
Date: Sat May 20 02:47:35 UTC 2023
Modified Files:
src/usr.bin/indent: debug.c indent.c indent.h
Log Message:
indent: add debug logging for brace indentation
No functional change outside debug mode, as the initialization of
di_stack[0] was redundant.
To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 src/usr.bin/indent/debug.c
cvs rdiff -u -r1.295 -r1.296 src/usr.bin/indent/indent.c
cvs rdiff -u -r1.151 -r1.152 src/usr.bin/indent/indent.h
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/indent/debug.c
diff -u src/usr.bin/indent/debug.c:1.14 src/usr.bin/indent/debug.c:1.15
--- src/usr.bin/indent/debug.c:1.14 Thu May 18 05:33:27 2023
+++ src/usr.bin/indent/debug.c Sat May 20 02:47:35 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: debug.c,v 1.14 2023/05/18 05:33:27 rillig Exp $ */
+/* $NetBSD: debug.c,v 1.15 2023/05/20 02:47:35 rillig Exp $ */
/*-
* Copyright (c) 2023 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: debug.c,v 1.14 2023/05/18 05:33:27 rillig Exp $");
+__RCSID("$NetBSD: debug.c,v 1.15 2023/05/20 02:47:35 rillig Exp $");
#include <stdarg.h>
@@ -208,11 +208,10 @@ debug_buffers(void)
static bool
ps_paren_has_changed(const struct parser_state *prev_ps)
{
- const paren_level_props *prev = prev_ps->paren, *curr = ps.paren;
-
if (prev_ps->nparen != ps.nparen)
return true;
+ const paren_level_props *prev = prev_ps->paren, *curr = ps.paren;
for (int i = 0; i < ps.nparen; i++)
if (curr[i].indent != prev[i].indent
|| curr[i].cast != prev[i].cast)
@@ -237,6 +236,32 @@ debug_ps_paren(const struct parser_state
debug_println("");
}
+static bool
+ps_di_stack_has_changed(const struct parser_state *prev_ps)
+{
+ if (prev_ps->decl_level != ps.decl_level)
+ return true;
+ for (int i = 0; i < ps.decl_level; i++)
+ if (prev_ps->di_stack[i] != ps.di_stack[i])
+ return true;
+ return false;
+}
+
+static void
+debug_ps_di_stack(const struct parser_state *prev_ps)
+{
+ bool changed = ps_di_stack_has_changed(prev_ps);
+ if (!debug_full_parser_state && !changed)
+ return;
+
+ debug_printf(" %s ps.di_stack:", changed ? "->" : " ");
+ for (int i = 0; i < ps.decl_level; i++)
+ debug_printf(" %d", ps.di_stack[i]);
+ if (ps.decl_level == 0)
+ debug_printf(" none");
+ debug_println("");
+}
+
void
debug_parser_state(lexer_symbol lsym)
{
@@ -274,6 +299,7 @@ debug_parser_state(lexer_symbol lsym)
debug_ps_int(ind_level_follow);
debug_ps_int(decl_level);
+ debug_ps_di_stack(&prev_ps);
debug_ps_bool(decl_on_line);
debug_ps_bool(in_decl);
debug_ps_enum(declaration, declaration_name);
@@ -282,7 +308,6 @@ debug_parser_state(lexer_symbol lsym)
debug_ps_enum(in_enum, in_enum_name);
debug_ps_bool(decl_indent_done);
debug_ps_int(decl_ind);
- // No debug output for di_stack.
debug_ps_bool(tabs_to_var);
debug_ps_bool(in_stmt_or_decl);
Index: src/usr.bin/indent/indent.c
diff -u src/usr.bin/indent/indent.c:1.295 src/usr.bin/indent/indent.c:1.296
--- src/usr.bin/indent/indent.c:1.295 Thu May 18 07:13:05 2023
+++ src/usr.bin/indent/indent.c Sat May 20 02:47:35 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: indent.c,v 1.295 2023/05/18 07:13:05 rillig Exp $ */
+/* $NetBSD: indent.c,v 1.296 2023/05/20 02:47:35 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: indent.c,v 1.295 2023/05/18 07:13:05 rillig Exp $");
+__RCSID("$NetBSD: indent.c,v 1.296 2023/05/20 02:47:35 rillig Exp $");
#include <sys/param.h>
#include <err.h>
@@ -1009,9 +1009,6 @@ process_preprocessing(void)
static int
indent(void)
{
-
- ps.di_stack[ps.decl_level = 0] = 0;
-
for (;;) { /* loop until we reach eof */
lexer_symbol lsym = lexi();
Index: src/usr.bin/indent/indent.h
diff -u src/usr.bin/indent/indent.h:1.151 src/usr.bin/indent/indent.h:1.152
--- src/usr.bin/indent/indent.h:1.151 Sat May 20 00:17:56 2023
+++ src/usr.bin/indent/indent.h Sat May 20 02:47:35 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: indent.h,v 1.151 2023/05/20 00:17:56 rillig Exp $ */
+/* $NetBSD: indent.h,v 1.152 2023/05/20 02:47:35 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-2-Clause-FreeBSD
@@ -328,10 +328,10 @@ extern struct parser_state {
* the middle of a statement */
int decl_level; /* current nesting level for a structure
* declaration or an initializer */
+ int di_stack[20]; /* a stack of structure indentation levels */
bool decl_indent_done; /* whether the indentation for a declaration
* has been added to the code buffer. */
int decl_ind; /* current indentation for declarations */
- int di_stack[20]; /* a stack of structure indentation levels */
bool tabs_to_var; /* true if using tabs to indent to var name */
enum {