Module Name:    src
Committed By:   rillig
Date:           Sat Jan  4 21:20:59 UTC 2025

Modified Files:
        src/usr.bin/indent: debug.c indent.c indent.h parse.c

Log Message:
indent: make debug log more uniform


To generate a diff of this commit:
cvs rdiff -u -r1.73 -r1.74 src/usr.bin/indent/debug.c
cvs rdiff -u -r1.393 -r1.394 src/usr.bin/indent/indent.c
cvs rdiff -u -r1.209 -r1.210 src/usr.bin/indent/indent.h
cvs rdiff -u -r1.80 -r1.81 src/usr.bin/indent/parse.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/indent/debug.c
diff -u src/usr.bin/indent/debug.c:1.73 src/usr.bin/indent/debug.c:1.74
--- src/usr.bin/indent/debug.c:1.73	Sat Jan  4 10:28:08 2025
+++ src/usr.bin/indent/debug.c	Sat Jan  4 21:20:59 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: debug.c,v 1.73 2025/01/04 10:28:08 rillig Exp $	*/
+/*	$NetBSD: debug.c,v 1.74 2025/01/04 21:20:59 rillig Exp $	*/
 
 /*-
  * Copyright (c) 2023 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: debug.c,v 1.73 2025/01/04 10:28:08 rillig Exp $");
+__RCSID("$NetBSD: debug.c,v 1.74 2025/01/04 21:20:59 rillig Exp $");
 
 #include <stdarg.h>
 #include <string.h>
@@ -286,62 +286,62 @@ debug_ps_enum_member(const char *name, c
 		debug_println("\t\t%s: %s", name, curr);
 }
 
-static bool
-paren_stack_equal(const struct paren_stack *a, const struct paren_stack *b)
+static void
+debug_ps_str_member(const char *name,
+    void (*to_string)(struct buffer *, const struct parser_state *))
 {
-	if (a->len != b->len)
-		return false;
+	static struct buffer prev_buf;
+	static struct buffer curr_buf;
 
-	for (size_t i = 0, n = a->len; i < n; i++)
-		if (a->item[i].indent != b->item[i].indent
-		    || a->item[i].cast != b->item[i].cast)
-			return false;
-	return true;
+	buf_clear(&prev_buf);
+	to_string(&prev_buf, &state.prev_ps);
+	buf_clear(&curr_buf);
+	to_string(&curr_buf, &ps);
+
+	if (!state.ps_first && strcmp(prev_buf.s, curr_buf.s) != 0)
+		debug_println("\t\t%s: %s -> %s",
+		    name, prev_buf.s, curr_buf.s);
+	else if (config.full_parser_state || state.ps_first)
+		debug_println("\t\t%s: %s", name, curr_buf.s);
 }
 
 static void
-debug_ps_paren(void)
+ps_di_stack_to_string(struct buffer *buf, const struct parser_state *s)
 {
-	if (!config.full_parser_state
-	    && paren_stack_equal(&state.prev_ps.paren, &ps.paren)
-	    && !state.ps_first)
-		return;
-
-	debug_printf("\t\tparen:");
-	for (size_t i = 0; i < ps.paren.len; i++) {
-		debug_printf("  %s %d",
-		    paren_level_cast_name[ps.paren.item[i].cast],
-		    ps.paren.item[i].indent);
+	for (int i = 0; i < s->decl_level; i++) {
+		char str[64];
+		snprintf(str, sizeof(str), "%s%d",
+			 i > 0 ? " " : "", s->di_stack[i]);
+		buf_add_str(buf, str);
 	}
-	if (ps.paren.len == 0)
-		debug_printf(" none");
-	debug_println("");
+	if (s->decl_level == 0)
+		buf_add_str(buf, "none");
 }
 
-static bool
-ps_di_stack_has_changed(void)
-{
-	if (state.prev_ps.decl_level != ps.decl_level)
-		return true;
-	for (int i = 0; i < ps.decl_level; i++)
-		if (state.prev_ps.di_stack[i] != ps.di_stack[i])
-			return true;
-	return false;
+static void
+ps_paren_to_string(struct buffer *buf, const struct parser_state *s)
+{
+	for (size_t i = 0; i < s->paren.len; i++) {
+		buf_add_str(buf, i > 0 ? "  " : "");
+		buf_add_str(buf, paren_level_cast_name[s->paren.item[i].cast]);
+		char str[64];
+		snprintf(str, sizeof(str), " %d", s->paren.item[i].indent);
+		buf_add_str(buf, str);
+	}
+	if (s->paren.len == 0)
+		buf_add_str(buf, "none");
 }
 
-static void
-debug_ps_di_stack(void)
+void
+ps_psyms_to_string(struct buffer *buf, const struct parser_state *s)
 {
-	bool changed = ps_di_stack_has_changed();
-	if (!config.full_parser_state && !changed && !state.ps_first)
-		return;
-
-	debug_printf("\t\tdi_stack: ");
-	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("");
+	for (size_t i = 0; i < s->psyms.len; i++) {
+		char num[64];
+		snprintf(num, sizeof(num), "%s%d ",
+		    i > 0 ? "  " : "", s->psyms.ind_level[i]);
+		buf_add_str(buf, num);
+		buf_add_str(buf, psym_name[s->psyms.sym[i]]);
+	}
 }
 
 #define debug_ps_bool(name) \
@@ -351,6 +351,8 @@ debug_ps_di_stack(void)
 #define debug_ps_enum(name, names) \
         debug_ps_enum_member(#name, (names)[state.prev_ps.name], \
 	    (names)[ps.name])
+#define debug_ps_str(name, to_string) \
+        debug_ps_str_member((/* LINTED 129 */(void)&ps.name, #name), to_string)
 
 void
 debug_parser_state(void)
@@ -378,21 +380,20 @@ debug_parser_state(void)
 	state.heading2 = "indentation of statements and declarations";
 	debug_ps_int(ind_level);
 	debug_ps_int(ind_level_follow);
+	debug_ps_str(psyms, ps_psyms_to_string);
 	debug_ps_bool(line_is_stmt_cont);
 	debug_ps_int(decl_level);
-	debug_ps_di_stack();
+	debug_ps_str(di_stack, ps_di_stack_to_string);
 	debug_ps_bool(decl_indent_done);
 	debug_ps_int(decl_ind);
 	debug_ps_bool(tabs_to_var);
 	debug_ps_enum(extra_expr_indent, extra_expr_indent_name);
 
-	// The parser symbol stack is printed in debug_psyms_stack instead.
-
 	state.heading2 = "spacing inside a statement or declaration";
 	debug_ps_bool(next_unary);
 	debug_ps_bool(want_blank);
 	debug_ps_int(ind_paren_level);
-	debug_ps_paren();
+	debug_ps_str(paren, ps_paren_to_string);
 
 	state.heading2 = "indentation of comments";
 	debug_ps_int(comment_ind);
@@ -414,16 +415,4 @@ debug_parser_state(void)
 	parser_state_back_up(&state.prev_ps);
 	state.ps_first = false;
 }
-
-void
-debug_fmt_psyms_stack(struct buffer *buf)
-{
-	buf_clear(buf);
-	for (size_t i = 0; i < ps.psyms.len; i++) {
-		char num[64];
-		snprintf(num, sizeof(num), "  %d ", ps.psyms.ind_level[i]);
-		buf_add_str(buf, num);
-		buf_add_str(buf, psym_name[ps.psyms.sym[i]]);
-	}
-}
 #endif

Index: src/usr.bin/indent/indent.c
diff -u src/usr.bin/indent/indent.c:1.393 src/usr.bin/indent/indent.c:1.394
--- src/usr.bin/indent/indent.c:1.393	Sat Jan  4 10:28:08 2025
+++ src/usr.bin/indent/indent.c	Sat Jan  4 21:20:59 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: indent.c,v 1.393 2025/01/04 10:28:08 rillig Exp $	*/
+/*	$NetBSD: indent.c,v 1.394 2025/01/04 21:20:59 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: indent.c,v 1.393 2025/01/04 10:28:08 rillig Exp $");
+__RCSID("$NetBSD: indent.c,v 1.394 2025/01/04 21:20:59 rillig Exp $");
 
 #include <sys/param.h>
 #include <err.h>
@@ -504,7 +504,7 @@ parser_state_restore(const struct parser
 {
 	struct paren_level *ps_paren_item = ps.paren.item;
 	size_t ps_paren_cap = ps.paren.cap;
-	enum parser_symbol *ps_psyms_sym = ps.psyms.sym;
+	parser_symbol *ps_psyms_sym = ps.psyms.sym;
 	int *ps_psyms_ind_level = ps.psyms.ind_level;
 	size_t ps_psyms_cap = ps.psyms.cap;
 
@@ -1126,8 +1126,8 @@ indent(void)
 		lexer_symbol lsym = lexi();
 
 		debug_blank_line();
-		debug_printf("line %d: next token is %s",
-		    in.token_start_line, lsym_name[lsym]);
+		debug_printf("line %s:%d: next token is %s",
+		    in_name, in.token_start_line, lsym_name[lsym]);
 		debug_print_buf("with text", &token);
 		debug_println("");
 		if (lab.len > 0 || code.len > 0 || com.len > 0)

Index: src/usr.bin/indent/indent.h
diff -u src/usr.bin/indent/indent.h:1.209 src/usr.bin/indent/indent.h:1.210
--- src/usr.bin/indent/indent.h:1.209	Sat Jan  4 10:28:08 2025
+++ src/usr.bin/indent/indent.h	Sat Jan  4 21:20:59 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: indent.h,v 1.209 2025/01/04 10:28:08 rillig Exp $	*/
+/*	$NetBSD: indent.h,v 1.210 2025/01/04 21:20:59 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
@@ -120,7 +120,7 @@ typedef enum lexer_symbol {
  * Structure of the source code, in terms of declarations, statements and
  * braces; used to determine the indentation level of these parts.
  */
-typedef enum parser_symbol {
+typedef enum {
 	psym_0,			/* a placeholder; not stored on the stack */
 	psym_lbrace_block,	/* '{' for a block of code */
 	psym_lbrace_struct,	/* '{' in 'struct ... { ... }' */
@@ -461,7 +461,7 @@ void debug_println(const char *, ...) __
 void debug_blank_line(void);
 void debug_vis_range(const char *, size_t);
 void debug_parser_state(void);
-void debug_fmt_psyms_stack(struct buffer *);
+void ps_psyms_to_string(struct buffer *, const struct parser_state *);
 void debug_print_buf(const char *, const struct buffer *);
 void debug_buffers(const char *);
 void parser_state_back_up(struct parser_state *);
@@ -478,7 +478,6 @@ extern const char *const line_kind_name[
 #define debug_blank_line() debug_noop()
 #define	debug_vis_range(s, len) debug_noop()
 #define	debug_parser_state() debug_noop()
-#define	debug_psyms_stack(situation) debug_noop()
 #define debug_print_buf(name, buf) debug_noop()
 #define	debug_buffers(descr) debug_noop()
 #define static_unless_debug static

Index: src/usr.bin/indent/parse.c
diff -u src/usr.bin/indent/parse.c:1.80 src/usr.bin/indent/parse.c:1.81
--- src/usr.bin/indent/parse.c:1.80	Sat Jan  4 10:28:08 2025
+++ src/usr.bin/indent/parse.c	Sat Jan  4 21:20:59 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: parse.c,v 1.80 2025/01/04 10:28:08 rillig Exp $	*/
+/*	$NetBSD: parse.c,v 1.81 2025/01/04 21:20:59 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: parse.c,v 1.80 2025/01/04 10:28:08 rillig Exp $");
+__RCSID("$NetBSD: parse.c,v 1.81 2025/01/04 21:20:59 rillig Exp $");
 
 #include <stdlib.h>
 
@@ -153,7 +153,7 @@ void
 parse(parser_symbol psym)
 {
 	debug_blank_line();
-	debug_println("parse token: %s", psym_name[psym]);
+	debug_println("parse: %s", psym_name[psym]);
 
 	if (psym != psym_else) {
 		while (ps.psyms.sym[ps.psyms.len - 1] == psym_if_expr_stmt) {
@@ -266,15 +266,17 @@ parse(parser_symbol psym)
 
 #if debug
 	static struct buffer before, after;
-	debug_fmt_psyms_stack(&before);
+	buf_clear(&before);
+	ps_psyms_to_string(&before, &ps);
 #endif
 	psyms_reduce();
 #if debug
-	debug_fmt_psyms_stack(&after);
-	if (before.len != after.len
-	    || memcmp(before.s, after.s, before.len) != 0) {
-		debug_println("psyms before:%s", before.s);
-		debug_println("psyms after: %s", after.s);
-	}
+	buf_clear(&after);
+	ps_psyms_to_string(&after, &ps);
+	if (strcmp(before.s, after.s) != 0) {
+		debug_println("psyms before: %s", before.s);
+		debug_println("psyms after:  %s", after.s);
+	} else
+		debug_println("psyms: %s", after.s);
 #endif
 }

Reply via email to