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 {

Reply via email to