Module Name:    src
Committed By:   rillig
Date:           Fri Jun 16 14:12:10 UTC 2023

Modified Files:
        src/tests/usr.bin/indent: lsym_rparen_or_rbracket.c
        src/usr.bin/indent: indent.c

Log Message:
indent: improve heuristics for cast expressions


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/tests/usr.bin/indent/lsym_rparen_or_rbracket.c
cvs rdiff -u -r1.375 -r1.376 src/usr.bin/indent/indent.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_rparen_or_rbracket.c
diff -u src/tests/usr.bin/indent/lsym_rparen_or_rbracket.c:1.6 src/tests/usr.bin/indent/lsym_rparen_or_rbracket.c:1.7
--- src/tests/usr.bin/indent/lsym_rparen_or_rbracket.c:1.6	Fri Jun 16 13:43:30 2023
+++ src/tests/usr.bin/indent/lsym_rparen_or_rbracket.c	Fri Jun 16 14:12:10 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: lsym_rparen_or_rbracket.c,v 1.6 2023/06/16 13:43:30 rillig Exp $ */
+/* $NetBSD: lsym_rparen_or_rbracket.c,v 1.7 2023/06/16 14:12:10 rillig Exp $ */
 
 /*
  * Tests for the token lsym_rparen_or_lbracket, which represents ')' or ']',
@@ -66,8 +66,7 @@ int a = array[
 
 //indent run -ci4 -di0 -nlp
 {
-// $ FIXME: No space after cast.
-	dcs_align((u_int) dcs);
+	dcs_align((u_int)dcs);
 // $ FIXME: Don't add newlines.
 	mpools.pools[i] = (memory_pool) {
 		NULL, 0, 0

Index: src/usr.bin/indent/indent.c
diff -u src/usr.bin/indent/indent.c:1.375 src/usr.bin/indent/indent.c:1.376
--- src/usr.bin/indent/indent.c:1.375	Fri Jun 16 12:55:57 2023
+++ src/usr.bin/indent/indent.c	Fri Jun 16 14:12:10 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: indent.c,v 1.375 2023/06/16 12:55:57 rillig Exp $	*/
+/*	$NetBSD: indent.c,v 1.376 2023/06/16 14:12:10 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: indent.c,v 1.375 2023/06/16 12:55:57 rillig Exp $");
+__RCSID("$NetBSD: indent.c,v 1.376 2023/06/16 14:12:10 rillig Exp $");
 
 #include <sys/param.h>
 #include <err.h>
@@ -617,18 +617,27 @@ process_lparen(void)
 	paren_stack_push(&ps.paren, ind_add(0, code.s, code.len), cast);
 }
 
+static bool
+rparen_is_cast(bool paren_cast)
+{
+	if (ps.in_func_def_params)
+		return false;
+	if (ps.prev_lsym == lsym_unary_op)
+		return true;
+	if (ps.line_has_decl && !ps.in_init)
+		return false;
+	return paren_cast || ch_isalpha(inp_p[0]);
+}
+
 static void
 process_rparen(void)
 {
 	if (ps.paren.len == 0)
 		diag(0, "Extra '%c'", *token.s);
 
-	ps.prev_paren_was_cast = ps.paren.len > 0
-	    && ps.paren.item[--ps.paren.len].cast == cast_maybe
-	    && !ps.in_func_def_params
-	    && !(ps.line_has_decl && !ps.in_init);
-	if (ps.prev_lsym == lsym_unary_op)
-		ps.prev_paren_was_cast = true;
+	bool paren_cast = ps.paren.len > 0
+	    && ps.paren.item[--ps.paren.len].cast == cast_maybe;
+	ps.prev_paren_was_cast = rparen_is_cast(paren_cast);
 	if (ps.prev_paren_was_cast) {
 		ps.next_unary = true;
 		ps.want_blank = opt.space_after_cast;

Reply via email to