Module Name:    src
Committed By:   rillig
Date:           Sat Jun 10 16:43:56 UTC 2023

Modified Files:
        src/tests/usr.bin/indent: lsym_comment.c lsym_if.c lsym_switch.c
        src/usr.bin/indent: args.c debug.c indent.c indent.h io.c lexi.c
            parse.c pr_comment.c

Log Message:
indent: miscellaneous cleanups


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/tests/usr.bin/indent/lsym_comment.c
cvs rdiff -u -r1.4 -r1.5 src/tests/usr.bin/indent/lsym_if.c
cvs rdiff -u -r1.3 -r1.4 src/tests/usr.bin/indent/lsym_switch.c
cvs rdiff -u -r1.82 -r1.83 src/usr.bin/indent/args.c
cvs rdiff -u -r1.49 -r1.50 src/usr.bin/indent/debug.c
cvs rdiff -u -r1.353 -r1.354 src/usr.bin/indent/indent.c
cvs rdiff -u -r1.186 -r1.187 src/usr.bin/indent/indent.h
cvs rdiff -u -r1.215 -r1.216 src/usr.bin/indent/io.c
cvs rdiff -u -r1.224 -r1.225 src/usr.bin/indent/lexi.c
cvs rdiff -u -r1.70 -r1.71 src/usr.bin/indent/parse.c
cvs rdiff -u -r1.160 -r1.161 src/usr.bin/indent/pr_comment.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/usr.bin/indent/lsym_comment.c
diff -u src/tests/usr.bin/indent/lsym_comment.c:1.19 src/tests/usr.bin/indent/lsym_comment.c:1.20
--- src/tests/usr.bin/indent/lsym_comment.c:1.19	Sat Jun 10 06:38:21 2023
+++ src/tests/usr.bin/indent/lsym_comment.c	Sat Jun 10 16:43:56 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: lsym_comment.c,v 1.19 2023/06/10 06:38:21 rillig Exp $ */
+/* $NetBSD: lsym_comment.c,v 1.20 2023/06/10 16:43:56 rillig Exp $ */
 
 /*
  * Tests for the token lsym_comment, which starts a comment.
@@ -32,7 +32,7 @@
  * - block/end-of-line comment to the right of code
  * - block/end-of-line comment to the right of label with code
  *
- * - with/without opt.comment_delimiter_on_blankline (-cdb)
+ * - with/without opt.comment_delimiter_on_blank_line (-cdb)
  * - with/without opt.star_comment_cont (-sc)
  * - with/without opt.format_block_comments (-fbc)
  * - with varying opt.max_line_length (32, 64, 80, 140)
@@ -1111,3 +1111,23 @@ a>b;
 	a > b;
 }
 //indent end
+
+
+/*
+ * Line comments are only related to a code snippet if they are on the same
+ * line; they cannot be continued in the next lines.
+ */
+//indent input
+int line;	// comment line 1
+		// comment line 2
+int block;	/* comment line 1
+		 * comment line 2
+		 */
+//indent end
+
+//indent run -di0
+int line;			// comment line 1
+// $ XXX: This comment was probably intended to continue 'comment line 1'.
+// comment line 2
+int block;			/* comment line 1 comment line 2 */
+//indent end

Index: src/tests/usr.bin/indent/lsym_if.c
diff -u src/tests/usr.bin/indent/lsym_if.c:1.4 src/tests/usr.bin/indent/lsym_if.c:1.5
--- src/tests/usr.bin/indent/lsym_if.c:1.4	Sun Apr 24 10:36:37 2022
+++ src/tests/usr.bin/indent/lsym_if.c	Sat Jun 10 16:43:56 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: lsym_if.c,v 1.4 2022/04/24 10:36:37 rillig Exp $ */
+/* $NetBSD: lsym_if.c,v 1.5 2023/06/10 16:43:56 rillig Exp $ */
 
 /*
  * Tests for the token lsym_if, which represents the keyword 'if' that starts
@@ -21,3 +21,25 @@ function(void)
 		stmt();
 }
 //indent end
+
+
+/*
+ * After an 'if' statement without an 'else' branch, braces start a separate
+ * block.
+ */
+//indent input
+{
+	if(0)if(1)if(2)stmt();{}
+}
+//indent end
+
+//indent run
+{
+	if (0)
+		if (1)
+			if (2)
+// $ FIXME: The '{' must be on a separate line, with indentation 8.
+				stmt(); {
+				}
+}
+//indent end

Index: src/tests/usr.bin/indent/lsym_switch.c
diff -u src/tests/usr.bin/indent/lsym_switch.c:1.3 src/tests/usr.bin/indent/lsym_switch.c:1.4
--- src/tests/usr.bin/indent/lsym_switch.c:1.3	Sun Apr 24 09:04:12 2022
+++ src/tests/usr.bin/indent/lsym_switch.c	Sat Jun 10 16:43:56 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: lsym_switch.c,v 1.3 2022/04/24 09:04:12 rillig Exp $ */
+/* $NetBSD: lsym_switch.c,v 1.4 2023/06/10 16:43:56 rillig Exp $ */
 
 /*
  * Tests for the token lsym_switch, which represents the keyword 'switch' that
@@ -9,8 +9,23 @@
  *	C11 6.8.4.2		"The 'switch' statement"
  */
 
+// TODO: Add systematic tests.
+
+/*
+ * Ensure that an unfinished 'switch' statement does not eat comments.
+ */
 //indent input
-// TODO: add input
+{
+	switch (expr) // comment
+	{
+	}
+}
 //indent end
 
-//indent run-equals-input
+//indent run
+{
+// $ FIXME: The '{' has moved to the comment.
+	switch (expr) // comment {
+	}
+}
+//indent end

Index: src/usr.bin/indent/args.c
diff -u src/usr.bin/indent/args.c:1.82 src/usr.bin/indent/args.c:1.83
--- src/usr.bin/indent/args.c:1.82	Mon Jun  5 10:12:21 2023
+++ src/usr.bin/indent/args.c	Sat Jun 10 16:43:55 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: args.c,v 1.82 2023/06/05 10:12:21 rillig Exp $	*/
+/*	$NetBSD: args.c,v 1.83 2023/06/10 16:43:55 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: args.c,v 1.82 2023/06/05 10:12:21 rillig Exp $");
+__RCSID("$NetBSD: args.c,v 1.83 2023/06/10 16:43:55 rillig Exp $");
 
 /* Read options from profile files and from the command line. */
 
@@ -73,18 +73,18 @@ static const struct pro {
 	short i_max;
 	void *p_var;		/* the associated variable */
 } pro[] = {
-	bool_options("bacc", blanklines_around_conditional_compilation),
+	bool_options("bacc", blank_line_around_conditional_compilation),
 	bool_options("bad", blank_line_after_decl),
 	bool_options("badp", blank_line_after_decl_at_top),
-	bool_options("bap", blanklines_after_procs),
-	bool_options("bbb", blanklines_before_block_comments),
+	bool_options("bap", blank_line_after_proc),
+	bool_options("bbb", blank_line_before_block_comment),
 	bool_options("bc", break_after_comma),
 	bool_option("bl", false, brace_same_line),
 	bool_option("br", true, brace_same_line),
 	bool_options("bs", blank_after_sizeof),
 	int_option("c", comment_column, 1, 999),
 	int_option("cd", decl_comment_column, 1, 999),
-	bool_options("cdb", comment_delimiter_on_blankline),
+	bool_options("cdb", comment_delimiter_on_blank_line),
 	bool_options("ce", cuddle_else),
 	int_option("ci", continuation_indent, 0, 999),
 	/* "cli" is special */
@@ -109,7 +109,7 @@ static const struct pro {
 	bool_options("pcs", proc_calls_space),
 	bool_options("psl", procnames_start_line),
 	bool_options("sc", star_comment_cont),
-	bool_options("sob", swallow_optional_blanklines),
+	bool_options("sob", swallow_optional_blank_lines),
 	/* "st" is special */
 	bool_option("ta", true, auto_typedefs),
 	/* "T" is special */

Index: src/usr.bin/indent/debug.c
diff -u src/usr.bin/indent/debug.c:1.49 src/usr.bin/indent/debug.c:1.50
--- src/usr.bin/indent/debug.c:1.49	Sat Jun 10 13:03:17 2023
+++ src/usr.bin/indent/debug.c	Sat Jun 10 16:43:55 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: debug.c,v 1.49 2023/06/10 13:03:17 rillig Exp $	*/
+/*	$NetBSD: debug.c,v 1.50 2023/06/10 16:43:55 rillig Exp $	*/
 
 /*-
  * Copyright (c) 2023 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: debug.c,v 1.49 2023/06/10 13:03:17 rillig Exp $");
+__RCSID("$NetBSD: debug.c,v 1.50 2023/06/10 16:43:55 rillig Exp $");
 
 #include <stdarg.h>
 #include <string.h>
@@ -264,7 +264,7 @@ ps_paren_has_changed(void)
 	if (state.prev_ps.nparen != ps.nparen)
 		return true;
 
-	const paren_level_props *prev = state.prev_ps.paren, *curr = ps.paren;
+	const struct paren_level *prev = state.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)
@@ -356,7 +356,7 @@ debug_parser_state(void)
 	debug_ps_bool(tabs_to_var);
 	debug_ps_enum(extra_expr_indent, extra_expr_indent_name);
 
-	// The parser symbol stack is printed in debug_parse_stack instead.
+	// The parser symbol stack is printed in debug_psyms_stack instead.
 
 	state.heading = "spacing inside a statement or declaration";
 	debug_ps_bool(next_unary);
@@ -388,7 +388,7 @@ debug_parser_state(void)
 }
 
 void
-debug_parse_stack(const char *situation)
+debug_psyms_stack(const char *situation)
 {
 	debug_printf("parse stack %s:", situation);
 	const struct psym_stack *psyms = &ps.psyms;

Index: src/usr.bin/indent/indent.c
diff -u src/usr.bin/indent/indent.c:1.353 src/usr.bin/indent/indent.c:1.354
--- src/usr.bin/indent/indent.c:1.353	Sat Jun 10 12:59:31 2023
+++ src/usr.bin/indent/indent.c	Sat Jun 10 16:43:55 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: indent.c,v 1.353 2023/06/10 12:59:31 rillig Exp $	*/
+/*	$NetBSD: indent.c,v 1.354 2023/06/10 16:43:55 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,22 +38,20 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: indent.c,v 1.353 2023/06/10 12:59:31 rillig Exp $");
+__RCSID("$NetBSD: indent.c,v 1.354 2023/06/10 16:43:55 rillig Exp $");
 
 #include <sys/param.h>
 #include <err.h>
-#include <fcntl.h>
 #include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <unistd.h>
 
 #include "indent.h"
 
 struct options opt = {
 	.brace_same_line = true,
-	.comment_delimiter_on_blankline = true,
+	.comment_delimiter_on_blank_line = true,
 	.cuddle_else = true,
 	.comment_column = 33,
 	.decl_indent = 16,
@@ -91,8 +89,8 @@ FILE *input;
 FILE *output;
 
 static const char *in_name = "Standard Input";
+static char backup_name[PATH_MAX];
 static const char *backup_suffix = ".BAK";
-static char bakfile[MAXPATHLEN] = "";
 
 
 void *
@@ -218,38 +216,36 @@ load_profiles(int argc, char **argv)
  * and the original input file the output.
  */
 static void
-bakcopy(void)
+copy_to_bak_file(void)
 {
-	ssize_t n;
-	int bak_fd;
-	char buff[8 * 1024];
+	size_t n;
+	char buff[BUFSIZ];
 
 	const char *last_slash = strrchr(in_name, '/');
-	snprintf(bakfile, sizeof(bakfile), "%s%s",
-	    last_slash != NULL ? last_slash + 1 : in_name, backup_suffix);
+	const char *base = last_slash != NULL ? last_slash + 1 : in_name;
+	snprintf(backup_name, sizeof(backup_name), "%s%s", base, backup_suffix);
 
-	/* copy in_name to backup file */
-	bak_fd = creat(bakfile, 0600);
-	if (bak_fd < 0)
-		err(1, "%s", bakfile);
-
-	while ((n = read(fileno(input), buff, sizeof(buff))) > 0)
-		if (write(bak_fd, buff, (size_t)n) != n)
-			err(1, "%s", bakfile);
-	if (n < 0)
+	/* copy the input file to the backup file */
+	FILE *bak = fopen(backup_name, "w");
+	if (bak == NULL)
+		err(1, "%s", backup_name);
+
+	while ((n = fread(buff, 1, sizeof(buff), input)) > 0)
+		if (fwrite(buff, 1, n, bak) != n)
+			err(1, "%s", backup_name);
+	if (fclose(input) != 0)
 		err(1, "%s", in_name);
+	if (fclose(bak) != 0)
+		err(1, "%s", backup_name);
 
-	close(bak_fd);
-	(void)fclose(input);
-
-	/* re-open backup file as the input file */
-	input = fopen(bakfile, "r");
+	/* re-open the backup file as the input file */
+	input = fopen(backup_name, "r");
 	if (input == NULL)
-		err(1, "%s", bakfile);
+		err(1, "%s", backup_name);
 	/* now the original input file will be the output */
 	output = fopen(in_name, "w");
 	if (output == NULL) {
-		unlink(bakfile);
+		remove(backup_name);
 		err(1, "%s", in_name);
 	}
 }
@@ -283,7 +279,7 @@ parse_command_line(int argc, char **argv
 		input = stdin;
 		output = stdout;
 	} else if (output == NULL)
-		bakcopy();
+		copy_to_bak_file();
 
 	if (opt.comment_column <= 1)
 		opt.comment_column = 2;	/* don't put normal comments in column
@@ -391,7 +387,7 @@ is_function_pointer_declaration(void)
 static int
 process_eof(void)
 {
-	output_finish();
+	finish_output();
 
 	if (ps.psyms.top > 1)	/* check for balanced braces */
 		diag(1, "Stuff missing from end of file");
@@ -657,10 +653,10 @@ process_lbrace(void)
 
 	ps.in_stmt_or_decl = false;	/* don't indent the {} */
 
-	if (!ps.in_init)
-		ps.force_nl = true;
-	else
+	if (ps.in_init)
 		ps.init_level++;
+	else
+		ps.force_nl = true;
 
 	if (code.len > 0 && !ps.in_init) {
 		if (!opt.brace_same_line ||
@@ -814,7 +810,7 @@ process_comma(void)
 }
 
 static void
-process_colon_label(void)
+process_label_colon(void)
 {
 	buf_add_buf(&lab, &code);
 	buf_add_char(&lab, ':');
@@ -829,7 +825,7 @@ process_colon_label(void)
 }
 
 static void
-process_colon_other(void)
+process_other_colon(void)
 {
 	buf_add_char(&code, ':');
 	ps.want_blank = ps.decl_level == 0;
@@ -902,9 +898,9 @@ process_type_outside_parentheses(void)
 		ps.declaration = decl_begin;
 
 	int len = (int)token.len + 1;
-	int ind = ps.ind_level == 0 || ps.decl_level > 0
-	    ? opt.decl_indent	/* global variable or local member */
-	    : opt.local_decl_indent;	/* local variable */
+	int ind = ps.ind_level > 0 && ps.decl_level == 0
+	    ? opt.local_decl_indent	/* local variable */
+	    : opt.decl_indent;	/* global variable, or member */
 	ps.decl_ind = ind > 0 ? ind : len;
 	ps.tabs_to_var = opt.use_tabs && ind > 0;
 }
@@ -984,9 +980,9 @@ process_lsym(lexer_symbol lsym)
 	case lsym_postfix_op:	process_postfix_op();	break;
 	case lsym_binary_op:				goto copy_token;
 	case lsym_question:	ps.quest_level++;	goto copy_token;
-	case lsym_colon_question:			goto copy_token;
-	case lsym_colon_label:	process_colon_label();	break;
-	case lsym_colon_other:	process_colon_other();	break;
+	case lsym_question_colon:			goto copy_token;
+	case lsym_label_colon:	process_label_colon();	break;
+	case lsym_other_colon:	process_other_colon();	break;
 	case lsym_comma:	process_comma();	break;
 	case lsym_semicolon:	process_semicolon();	break;
 	case lsym_typedef:				goto copy_token;
@@ -1050,7 +1046,7 @@ indent(void)
 		    && opt.else_if_in_same_line)
 			ps.force_nl = false;
 
-		if (lsym == lsym_newline || lsym == lsym_preprocessing)
+		if (lsym == lsym_preprocessing || lsym == lsym_newline)
 			ps.force_nl = false;
 		else if (lsym == lsym_comment) {
 			/* no special processing */
@@ -1066,8 +1062,9 @@ indent(void)
 
 		debug_parser_state();
 
-		if (lsym != lsym_comment && lsym != lsym_newline &&
-		    lsym != lsym_preprocessing)
+		if (lsym != lsym_preprocessing
+		    && lsym != lsym_newline
+		    && lsym != lsym_comment)
 			ps.prev_lsym = lsym;
 	}
 }

Index: src/usr.bin/indent/indent.h
diff -u src/usr.bin/indent/indent.h:1.186 src/usr.bin/indent/indent.h:1.187
--- src/usr.bin/indent/indent.h:1.186	Sat Jun 10 12:59:31 2023
+++ src/usr.bin/indent/indent.h	Sat Jun 10 16:43:56 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: indent.h,v 1.186 2023/06/10 12:59:31 rillig Exp $	*/
+/*	$NetBSD: indent.h,v 1.187 2023/06/10 16:43:56 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
@@ -88,7 +88,7 @@ typedef enum lexer_symbol {
 	lsym_postfix_op,	/* trailing '++' or '--' */
 	lsym_binary_op,		/* e.g. '*', '&', '<<', '&&' or '/=' */
 	lsym_question,		/* the '?' from a '?:' expression */
-	lsym_colon_question,	/* the ':' from a '?:' expression */
+	lsym_question_colon,	/* the ':' from a '?:' expression */
 	lsym_comma,
 
 	lsym_typedef,
@@ -98,8 +98,8 @@ typedef enum lexer_symbol {
 	lsym_type_in_parentheses,
 	lsym_word,		/* identifier, constant or string */
 	lsym_funcname,		/* name of a function being defined */
-	lsym_colon_label,	/* the ':' after a label */
-	lsym_colon_other,	/* bit-fields, generic-association (C11),
+	lsym_label_colon,	/* the ':' after a label */
+	lsym_other_colon,	/* bit-fields, generic-association (C11),
 				 * enum-type-specifier (C23),
 				 * attribute-prefixed-token (C23),
 				 * pp-prefixed-parameter (C23 6.10) */
@@ -174,7 +174,7 @@ extern struct buffer com;	/* the trailin
 				 * multi-line comment */
 
 extern struct options {
-	bool blanklines_around_conditional_compilation;
+	bool blank_line_around_conditional_compilation;
 	bool blank_line_after_decl_at_top;	/* this is vaguely similar to
 						 * blank_line_after_decl except
 						 * that it only applies to the
@@ -185,21 +185,20 @@ extern struct options {
 						 * even if there are no
 						 * declarations */
 	bool blank_line_after_decl;
-	bool blanklines_after_procs;
-	bool blanklines_before_block_comments;
+	bool blank_line_after_proc;
+	bool blank_line_before_block_comment;
 	bool break_after_comma;	/* whether to add a line break after each
 				 * declarator */
-	bool brace_same_line;	/* whether brace should be on same line as if,
-				 * while, etc */
-	bool blank_after_sizeof;	/* whether a blank should always be
-					 * inserted after sizeof */
-	bool comment_delimiter_on_blankline;
+	bool brace_same_line;	/* whether a brace should be on same line as an
+				 * if, while, etc. */
+	bool blank_after_sizeof;
+	bool comment_delimiter_on_blank_line;
 	int decl_comment_column;	/* the column in which comments after
 					 * declarations should be put */
 	bool cuddle_else;	/* whether 'else' should cuddle up to '}' */
 	int continuation_indent;	/* the indentation between the edge of
 					 * code and continuation lines */
-	float case_indent;	/* The distance (measured in indentation
+	float case_indent;	/* the distance (measured in indentation
 				 * levels) to indent case labels from the
 				 * switch statement */
 	int comment_column;	/* the column in which comments to the right of
@@ -217,12 +216,12 @@ extern struct options {
 	bool else_if_in_same_line;
 	bool function_brace_split;	/* split function declaration and brace
 					 * onto separate lines */
-	bool format_col1_comments;	/* If comments which start in column 1
-					 * are to be reformatted (just like
-					 * comments that begin in later
+	bool format_col1_comments;	/* whether comments that start in
+					 * column 1 are to be reformatted (just
+					 * like comments that begin in later
 					 * columns) */
-	bool format_block_comments;	/* whether comments beginning with '/ *
-					 * \n' are to be reformatted */
+	bool format_block_comments;	/* whether to reformat comments that
+					 * begin with '/ * \n' */
 	bool indent_parameters;
 	int indent_size;	/* the size of one indentation level */
 	int block_comment_max_line_length;
@@ -240,7 +239,7 @@ extern struct options {
 	bool space_after_cast;	/* "b = (int) a" vs. "b = (int)a" */
 	bool star_comment_cont;	/* whether comment continuation lines should
 				 * have stars at the beginning of each line */
-	bool swallow_optional_blanklines;
+	bool swallow_optional_blank_lines;
 	bool auto_typedefs;	/* whether to recognize identifiers ending in
 				 * "_t" like typedefs */
 	int tabsize;		/* the size of a tab */
@@ -252,7 +251,7 @@ extern struct options {
 
 extern bool found_err;
 extern bool had_eof;		/* whether input is exhausted */
-extern int line_no;		/* the current line number. */
+extern int line_no;		/* the current input line number */
 extern enum indent_enabled {
 	indent_on,
 	indent_off,
@@ -262,7 +261,7 @@ extern enum indent_enabled {
 #define	STACKSIZE 256
 
 /* Properties of each level of parentheses or brackets. */
-typedef struct paren_level_props {
+struct paren_level {
 	int indent;		/* indentation of the operand/argument,
 				 * relative to the enclosing statement; if
 				 * negative, reflected at -1 */
@@ -271,7 +270,7 @@ typedef struct paren_level_props {
 		cast_maybe,
 		cast_no,
 	} cast;			/* whether the parentheses form a type cast */
-} paren_level_props;
+};
 
 struct psym_stack {
 	int top;		/* pointer to top of stack */
@@ -377,7 +376,7 @@ extern struct parser_state {
 				 * are currently open; used to indent the
 				 * remaining lines of the statement,
 				 * initializer or declaration */
-	paren_level_props paren[20];
+	struct paren_level paren[20];
 
 	/* Horizontal spacing for comments */
 
@@ -445,7 +444,7 @@ void debug_println(const char *, ...) __
 void debug_blank_line(void);
 void debug_vis_range(const char *, const char *, size_t, const char *);
 void debug_parser_state(void);
-void debug_parse_stack(const char *);
+void debug_psyms_stack(const char *);
 void debug_print_buf(const char *, const struct buffer *);
 void debug_buffers(void);
 extern const char *const lsym_name[];
@@ -459,7 +458,7 @@ extern const char *const line_kind_name[
 #define debug_blank_line() debug_noop()
 #define	debug_vis_range(prefix, s, e, suffix) debug_noop()
 #define	debug_parser_state() debug_noop()
-#define	debug_parse_stack(situation) debug_noop()
+#define	debug_psyms_stack(situation) debug_noop()
 #define debug_print_buf(name, buf) debug_noop()
 #define	debug_buffers() debug_noop()
 #endif
@@ -471,7 +470,7 @@ int ind_add(int, const char *, size_t);
 
 void inp_skip(void);
 char inp_next(void);
-void output_finish(void);
+void finish_output(void);
 
 lexer_symbol lexi(void);
 void diag(int, const char *, ...) __printflike(2, 3);

Index: src/usr.bin/indent/io.c
diff -u src/usr.bin/indent/io.c:1.215 src/usr.bin/indent/io.c:1.216
--- src/usr.bin/indent/io.c:1.215	Sat Jun 10 12:59:31 2023
+++ src/usr.bin/indent/io.c	Sat Jun 10 16:43:56 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: io.c,v 1.215 2023/06/10 12:59:31 rillig Exp $	*/
+/*	$NetBSD: io.c,v 1.216 2023/06/10 16:43:56 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: io.c,v 1.215 2023/06/10 12:59:31 rillig Exp $");
+__RCSID("$NetBSD: io.c,v 1.216 2023/06/10 16:43:56 rillig Exp $");
 
 #include <stdio.h>
 
@@ -110,7 +110,7 @@ inp_next(void)
 
 
 static void
-buffer_newline(void)
+add_buffered_newline(void)
 {
 	buffered_newlines++;
 	newlines++;
@@ -173,17 +173,17 @@ want_blank_line(void)
 		ps.blank_line_after_decl = false;
 		return true;
 	}
-	if (opt.blanklines_around_conditional_compilation) {
+	if (opt.blank_line_around_conditional_compilation) {
 		if (out.prev_line_kind != lk_if && out.line_kind == lk_if)
 			return true;
 		if (out.prev_line_kind == lk_endif
 		    && out.line_kind != lk_endif)
 			return true;
 	}
-	if (opt.blanklines_after_procs && out.prev_line_kind == lk_func_end
+	if (opt.blank_line_after_proc && out.prev_line_kind == lk_func_end
 	    && out.line_kind != lk_endif)
 		return true;
-	if (opt.blanklines_before_block_comments
+	if (opt.blank_line_before_block_comment
 	    && out.line_kind == lk_block_comment)
 		return true;
 	return false;
@@ -227,7 +227,7 @@ output_line_label(void)
 }
 
 static int
-compute_code_indent_lineup(int base_ind)
+compute_lined_up_code_indent(int base_ind)
 {
 	int ind = paren_indent;
 	int overflow = ind_add(ind, code.s, code.len) - opt.max_line_length;
@@ -261,7 +261,7 @@ compute_code_indent(void)
 	if (opt.lineup_to_parens) {
 		if (opt.lineup_to_parens_always)
 			return paren_indent;
-		return compute_code_indent_lineup(base_ind);
+		return compute_lined_up_code_indent(base_ind);
 	}
 
 	int rel_ind = opt.continuation_indent * ps.line_start_nparen;
@@ -292,7 +292,7 @@ output_line_code(void)
 }
 
 static void
-output_line_comment(void)
+output_comment(void)
 {
 	int target_ind = ps.com_ind + ps.comment_delta;
 	const char *p;
@@ -313,7 +313,7 @@ output_line_comment(void)
 	}
 
 	if (out_ind > target_ind)
-		buffer_newline();
+		add_buffered_newline();
 
 	while (com.s + com.len > p && ch_isspace(com.s[com.len - 1]))
 		com.len--;
@@ -326,14 +326,14 @@ output_line_comment(void)
 }
 
 static void
-output_line_indented(void)
+output_indented_line(void)
 {
 	if (lab.len == 0 && code.len == 0 && com.len == 0)
 		out.line_kind = lk_blank;
 
 	if (want_blank_line() && newlines < 2
 	    && out.line_kind != lk_blank)
-		buffer_newline();
+		add_buffered_newline();
 
 	/* This kludge aligns function definitions correctly. */
 	if (ps.ind_level == 0)
@@ -345,7 +345,7 @@ output_line_indented(void)
 		ps.blank_line_after_decl = true;
 	}
 
-	if (opt.swallow_optional_blanklines
+	if (opt.swallow_optional_blank_lines
 	    && out.line_kind == lk_blank
 	    && is_blank_line_optional())
 		return;
@@ -355,8 +355,8 @@ output_line_indented(void)
 	if (code.len > 0)
 		output_line_code();
 	if (com.len > 0)
-		output_line_comment();
-	buffer_newline();
+		output_comment();
+	add_buffered_newline();
 	if (out.line_kind != lk_blank)
 		write_buffered_newlines();
 
@@ -375,7 +375,7 @@ output_line(void)
 	debug_buffers();
 
 	if (indent_enabled == indent_on)
-		output_line_indented();
+		output_indented_line();
 	else if (indent_enabled == indent_last_off_line) {
 		indent_enabled = indent_on;
 		write_range(out.indent_off_text.s, out.indent_off_text.len);
@@ -410,7 +410,7 @@ output_line(void)
 }
 
 void
-output_finish(void)
+finish_output(void)
 {
 	output_line();
 	if (indent_enabled != indent_on) {

Index: src/usr.bin/indent/lexi.c
diff -u src/usr.bin/indent/lexi.c:1.224 src/usr.bin/indent/lexi.c:1.225
--- src/usr.bin/indent/lexi.c:1.224	Sat Jun 10 13:03:17 2023
+++ src/usr.bin/indent/lexi.c	Sat Jun 10 16:43:56 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: lexi.c,v 1.224 2023/06/10 13:03:17 rillig Exp $	*/
+/*	$NetBSD: lexi.c,v 1.225 2023/06/10 16:43:56 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: lexi.c,v 1.224 2023/06/10 13:03:17 rillig Exp $");
+__RCSID("$NetBSD: lexi.c,v 1.225 2023/06/10 16:43:56 rillig Exp $");
 
 #include <stdlib.h>
 #include <string.h>
@@ -167,6 +167,18 @@ static const unsigned char lex_number_ro
 };
 
 
+static bool
+is_identifier_start(char ch)
+{
+	return ch_isalpha(ch) || ch == '_' || ch == '$';
+}
+
+static bool
+is_identifier_part(char ch)
+{
+	return ch_isalnum(ch) || ch == '_' || ch == '$';
+}
+
 static void
 token_add_char(char ch)
 {
@@ -202,18 +214,6 @@ lex_number(void)
 	}
 }
 
-static bool
-is_identifier_start(char ch)
-{
-	return ch_isalpha(ch) || ch == '_' || ch == '$';
-}
-
-static bool
-is_identifier_part(char ch)
-{
-	return ch_isalnum(ch) || ch == '_' || ch == '$';
-}
-
 static void
 lex_word(void)
 {
@@ -276,20 +276,20 @@ static int
 bsearch_typenames(const char *key)
 {
 	const char **arr = typenames.items;
-	int lo = 0;
-	int hi = (int)typenames.len - 1;
+	unsigned lo = 0;
+	unsigned hi = typenames.len;
 
-	while (lo <= hi) {
-		int mid = (int)((unsigned)(lo + hi) >> 1);
+	while (lo < hi) {
+		unsigned mid = (lo + hi) / 2;
 		int cmp = strcmp(arr[mid], key);
 		if (cmp < 0)
 			lo = mid + 1;
 		else if (cmp > 0)
-			hi = mid - 1;
+			hi = mid;
 		else
-			return mid;
+			return (int)mid;
 	}
-	return -(lo + 1);
+	return -1 - (int)lo;
 }
 
 static bool
@@ -302,6 +302,25 @@ is_typename(void)
 	return bsearch_typenames(token.s) >= 0;
 }
 
+void
+register_typename(const char *name)
+{
+	if (typenames.len >= typenames.cap) {
+		typenames.cap = 16 + 2 * typenames.cap;
+		typenames.items = nonnull(realloc(typenames.items,
+			sizeof(typenames.items[0]) * typenames.cap));
+	}
+
+	int pos = bsearch_typenames(name);
+	if (pos >= 0)
+		return;		/* already in the list */
+
+	pos = -1 - pos;
+	memmove(typenames.items + pos + 1, typenames.items + pos,
+	    sizeof(typenames.items[0]) * (typenames.len++ - (unsigned)pos));
+	typenames.items[pos] = nonnull(strdup(name));
+}
+
 static int
 cmp_keyword_by_name(const void *key, const void *elem)
 {
@@ -353,7 +372,6 @@ probably_function_definition(void)
 	return true;
 }
 
-/* Read an alphanumeric token into 'token', or return lsym_eof. */
 static lexer_symbol
 lexi_alnum(void)
 {
@@ -476,17 +494,12 @@ lex_asterisk_pointer(void)
 		ps.line_has_func_def = true;
 }
 
-static void
-skip_blank(const char **pp)
-{
-	while (ch_isblank(**pp))
-		(*pp)++;
-}
-
 static bool
-skip_string(const char **pp, const char *s)
+skip(const char **pp, const char *s)
 {
 	size_t len = strlen(s);
+	while (ch_isblank(**pp))
+		(*pp)++;
 	if (strncmp(*pp, s, len) == 0) {
 		*pp += len;
 		return true;
@@ -498,31 +511,20 @@ static void
 lex_indent_comment(void)
 {
 	const char *p = inp.s;
-
-	skip_blank(&p);
-	if (!skip_string(&p, "/*"))
-		return;
-	skip_blank(&p);
-	if (!skip_string(&p, "INDENT"))
-		return;
-
-	enum indent_enabled enabled;
-	skip_blank(&p);
-	if (*p == '*' || skip_string(&p, "ON"))
-		enabled = indent_last_off_line;
-	else if (skip_string(&p, "OFF"))
-		enabled = indent_off;
-	else
-		return;
-
-	skip_blank(&p);
-	if (!skip_string(&p, "*/\n"))
-		return;
-
-	if (lab.len > 0 || code.len > 0 || com.len > 0)
-		output_line();
-
-	indent_enabled = enabled;
+	if (skip(&p, "/*") && skip(&p, "INDENT")) {
+		enum indent_enabled enabled;
+		if (skip(&p, "ON") || *p == '*')
+			enabled = indent_last_off_line;
+		else if (skip(&p, "OFF"))
+			enabled = indent_off;
+		else
+			return;
+		if (skip(&p, "*/\n")) {
+			if (lab.len > 0 || code.len > 0 || com.len > 0)
+				output_line();
+			indent_enabled = enabled;
+		}
+	}
 }
 
 /* Reads the next token, placing it in the global variable "token". */
@@ -612,10 +614,8 @@ lexi(void)
 
 	case ':':
 		lsym = ps.quest_level > 0
-		    ? (ps.quest_level--, lsym_colon_question)
-		    : ps.in_var_decl
-		    ? lsym_colon_other
-		    : lsym_colon_label;
+		    ? (ps.quest_level--, lsym_question_colon)
+		    : ps.in_var_decl ? lsym_other_colon : lsym_label_colon;
 		next_unary = true;
 		break;
 
@@ -642,7 +642,7 @@ lexi(void)
 
 	case '>':
 	case '<':
-	case '!':		/* ops like <, <<, <=, !=, etc */
+	case '!':		/* ops like <, <<, <=, !=, etc. */
 		if (inp_p[0] == '>' || inp_p[0] == '<' || inp_p[0] == '=')
 			token_add_char(*inp_p++);
 		if (inp_p[0] == '=')
@@ -671,7 +671,7 @@ lexi(void)
 			break;
 		}
 
-		/* things like '||', '&&', '<<=' */
+		/* punctuation like '%', '&&', '/', '^', '||', '~' */
 		lsym = ps.next_unary ? lsym_unary_op : lsym_binary_op;
 		if (inp_p[0] == token.s[token.len - 1])
 			token_add_char(*inp_p++), lsym = lsym_binary_op;
@@ -685,22 +685,3 @@ lexi(void)
 
 	return lsym;
 }
-
-void
-register_typename(const char *name)
-{
-	if (typenames.len >= typenames.cap) {
-		typenames.cap = 16 + 2 * typenames.cap;
-		typenames.items = nonnull(realloc(typenames.items,
-			sizeof(typenames.items[0]) * typenames.cap));
-	}
-
-	int pos = bsearch_typenames(name);
-	if (pos >= 0)
-		return;		/* already in the list */
-
-	pos = -(pos + 1);
-	memmove(typenames.items + pos + 1, typenames.items + pos,
-	    sizeof(typenames.items[0]) * (typenames.len++ - (unsigned)pos));
-	typenames.items[pos] = nonnull(strdup(name));
-}

Index: src/usr.bin/indent/parse.c
diff -u src/usr.bin/indent/parse.c:1.70 src/usr.bin/indent/parse.c:1.71
--- src/usr.bin/indent/parse.c:1.70	Fri Jun  9 07:20:30 2023
+++ src/usr.bin/indent/parse.c	Sat Jun 10 16:43:56 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: parse.c,v 1.70 2023/06/09 07:20:30 rillig Exp $	*/
+/*	$NetBSD: parse.c,v 1.71 2023/06/10 16:43:56 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: parse.c,v 1.70 2023/06/09 07:20:30 rillig Exp $");
+__RCSID("$NetBSD: parse.c,v 1.71 2023/06/10 16:43:56 rillig Exp $");
 
 #include <err.h>
 
@@ -141,7 +141,7 @@ is_lbrace(parser_symbol psym)
 }
 
 /*
- * Shift the token onto the parser stack, or reduce it by combining it with
+ * Shift the token onto the parser stack, then try to reduce it by combining it with
  * previous tokens.
  */
 void
@@ -160,6 +160,42 @@ parse(parser_symbol psym)
 
 	switch (psym) {
 
+	case psym_lbrace_block:
+	case psym_lbrace_struct:
+	case psym_lbrace_union:
+	case psym_lbrace_enum:
+		ps.break_after_comma = false;
+		if (psyms->sym[psyms->top] == psym_decl
+		    || psyms->sym[psyms->top] == psym_stmt
+		    || psyms->sym[psyms->top] == psym_stmt_list)
+			++ps.ind_level_follow;
+		else if (code.len == 0) {
+			/* It is part of a while, for, etc. */
+			--ps.ind_level;
+
+			/* for a switch, brace should be two levels out from
+			 * the code */
+			if (psyms->sym[psyms->top] == psym_switch_expr
+			    && opt.case_indent >= 1.0F)
+				--ps.ind_level;
+		}
+
+		ps_push(psym);
+		ps_push_follow(psym_stmt);
+		break;
+
+	case psym_rbrace:
+		/* stack should have <lbrace> <stmt> or <lbrace> <stmt_list> */
+		if (!(psyms->top > 0
+			&& is_lbrace(psyms->sym[psyms->top - 1]))) {
+			diag(1, "Statement nesting error");
+			break;
+		}
+		ps.ind_level = ps.ind_level_follow =
+		    psyms->ind_level[--psyms->top];
+		psyms->sym[psyms->top] = psym_stmt;
+		break;
+
 	case psym_decl:
 		if (psyms->sym[psyms->top] == psym_decl)
 			break;	/* only put one declaration onto stack */
@@ -171,6 +207,11 @@ parse(parser_symbol psym)
 			ps.ind_level_follow = ps.ind_level = decl_level();
 		break;
 
+	case psym_stmt:
+		ps.break_after_comma = false;
+		ps_push(psym_stmt);
+		break;
+
 	case psym_if_expr:
 		if (psyms->sym[psyms->top] == psym_if_expr_stmt_else
 		    && opt.else_if_in_same_line)
@@ -182,47 +223,6 @@ parse(parser_symbol psym)
 		ps_push(psym);
 		break;
 
-	case psym_lbrace_block:
-	case psym_lbrace_struct:
-	case psym_lbrace_union:
-	case psym_lbrace_enum:
-		ps.break_after_comma = false;
-		if (psyms->sym[psyms->top] == psym_stmt
-		    || psyms->sym[psyms->top] == psym_decl
-		    || psyms->sym[psyms->top] == psym_stmt_list)
-			++ps.ind_level_follow;	/* it is a random, isolated
-						 * stmt group or a declaration
-						 */
-		else {
-			if (code.len == 0) {
-				/* it is a group as part of a while, for, etc.
-				 */
-				--ps.ind_level;
-
-				/* for a switch, brace should be two levels out
-				 * from the code */
-				if (psyms->sym[psyms->top] == psym_switch_expr
-				    && opt.case_indent >= 1.0F)
-					--ps.ind_level;
-			}
-		}
-
-		ps_push(psym);
-		ps_push_follow(psym_stmt);
-		break;
-
-	case psym_while_expr:
-		if (psyms->sym[psyms->top] == psym_do_stmt) {
-			ps.ind_level =
-			    ps.ind_level_follow = psyms->ind_level[psyms->top];
-			ps_push(psym_while_expr);
-		} else {
-			ps_push_follow(psym_while_expr);
-			++ps.ind_level_follow;
-		}
-
-		break;
-
 	case psym_else:
 		if (psyms->sym[psyms->top] != psym_if_expr_stmt) {
 			diag(1, "Unmatched 'else'");
@@ -233,26 +233,20 @@ parse(parser_symbol psym)
 		psyms->sym[psyms->top] = psym_if_expr_stmt_else;
 		break;
 
-	case psym_rbrace:
-		/* stack should have <lbrace> <stmt> or <lbrace> <stmt_list> */
-		if (!(psyms->top > 0
-			&& is_lbrace(psyms->sym[psyms->top - 1]))) {
-			diag(1, "Statement nesting error");
-			break;
-		}
-		ps.ind_level = ps.ind_level_follow =
-		    psyms->ind_level[--psyms->top];
-		psyms->sym[psyms->top] = psym_stmt;
-		break;
-
 	case psym_switch_expr:
 		ps_push_follow(psym_switch_expr);
 		ps.ind_level_follow += (int)opt.case_indent + 1;
 		break;
 
-	case psym_stmt:
-		ps.break_after_comma = false;
-		ps_push(psym_stmt);
+	case psym_while_expr:
+		if (psyms->sym[psyms->top] == psym_do_stmt) {
+			ps.ind_level = ps.ind_level_follow =
+			    psyms->ind_level[psyms->top];
+			ps_push(psym_while_expr);
+		} else {
+			ps_push_follow(psym_while_expr);
+			++ps.ind_level_follow;
+		}
 		break;
 
 	default:
@@ -263,7 +257,7 @@ parse(parser_symbol psym)
 	if (psyms->top >= STACKSIZE - 1)
 		errx(1, "Parser stack overflow");
 
-	debug_parse_stack("before reduction");
+	debug_psyms_stack("before reduction");
 	psyms_reduce(&ps.psyms);
-	debug_parse_stack("after reduction");
+	debug_psyms_stack("after reduction");
 }

Index: src/usr.bin/indent/pr_comment.c
diff -u src/usr.bin/indent/pr_comment.c:1.160 src/usr.bin/indent/pr_comment.c:1.161
--- src/usr.bin/indent/pr_comment.c:1.160	Sat Jun 10 12:59:31 2023
+++ src/usr.bin/indent/pr_comment.c	Sat Jun 10 16:43:56 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: pr_comment.c,v 1.160 2023/06/10 12:59:31 rillig Exp $	*/
+/*	$NetBSD: pr_comment.c,v 1.161 2023/06/10 16:43:56 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: pr_comment.c,v 1.160 2023/06/10 12:59:31 rillig Exp $");
+__RCSID("$NetBSD: pr_comment.c,v 1.161 2023/06/10 16:43:56 rillig Exp $");
 
 #include <string.h>
 
@@ -105,7 +105,7 @@ analyze_comment(bool *p_may_wrap, bool *
 			line_length = opt.block_comment_max_line_length;
 			if (may_wrap && inp_p[0] == '\n')
 				delim = true;
-			if (may_wrap && opt.comment_delimiter_on_blankline)
+			if (may_wrap && opt.comment_delimiter_on_blank_line)
 				delim = true;
 		} else {
 			int target_ind = code.len > 0

Reply via email to