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;