Module Name: src Committed By: rillig Date: Thu Nov 25 18:36:30 UTC 2021
Modified Files: src/tests/usr.bin/indent: fmt_decl.c lsym_sizeof.c src/usr.bin/indent: lexi.c Log Message: indent: improve heuristic for spaces around '*' in declarations To generate a diff of this commit: cvs rdiff -u -r1.28 -r1.29 src/tests/usr.bin/indent/fmt_decl.c cvs rdiff -u -r1.2 -r1.3 src/tests/usr.bin/indent/lsym_sizeof.c cvs rdiff -u -r1.162 -r1.163 src/usr.bin/indent/lexi.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/fmt_decl.c diff -u src/tests/usr.bin/indent/fmt_decl.c:1.28 src/tests/usr.bin/indent/fmt_decl.c:1.29 --- src/tests/usr.bin/indent/fmt_decl.c:1.28 Thu Nov 25 18:20:21 2021 +++ src/tests/usr.bin/indent/fmt_decl.c Thu Nov 25 18:36:30 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: fmt_decl.c,v 1.28 2021/11/25 18:20:21 rillig Exp $ */ +/* $NetBSD: fmt_decl.c,v 1.29 2021/11/25 18:36:30 rillig Exp $ */ /* $FreeBSD: head/usr.bin/indent/tests/declarations.0 334478 2018-06-01 09:41:15Z pstef $ */ /* @@ -590,7 +590,17 @@ buffer_add(buffer *buf, char ch) #indent end /* Before lexi.c 1.156 from 2021-11-25, indent generated 'buffer * buf'. */ -#indent run-equals-input +#indent run +void buffer_add(buffer *, char); +/* $ FIXME: space after '*' */ +void buffer_add(buffer * buf, char ch); + +void +buffer_add(buffer *buf, char ch) +{ + *buf->e++ = ch; +} +#indent end /* @@ -793,9 +803,8 @@ function(void) /* * In declarations, most occurrences of '*' are pointer type derivations. - * There are a few exceptions though. - * - * Broken since lexi.c 1.156 from 2021-11-25. + * There are a few exceptions though. Some of these are hard to detect + * without knowing which identifiers are type names. */ #indent input char str[expr * expr]; @@ -809,17 +818,13 @@ char str[sizeof(**ptr)]; #indent end #indent run -di0 -/* $ FIXME: The '*' must be a binary operator. */ -char str[expr *expr]; -/* $ FIXME: The first '*' must be a binary operator. */ -char str[expr **ptr]; -/* $ FIXME: The second '*' must be a binary operator. */ -char str[*ptr **ptr]; -/* $ FIXME: The '*' must be a binary operator. */ -char str[sizeof(expr *expr)]; -/* $ FIXME: The '*' must be a binary operator. */ -char str[sizeof(int) *expr]; +char str[expr * expr]; +char str[expr * *ptr]; +char str[*ptr * *ptr]; +char str[sizeof(expr * expr)]; +char str[sizeof(int) * expr]; char str[sizeof(*ptr)]; -char str[sizeof(type **)]; +/* $ FIXME: should be 'type **' */ +char str[sizeof(type * *)]; char str[sizeof(**ptr)]; #indent end Index: src/tests/usr.bin/indent/lsym_sizeof.c diff -u src/tests/usr.bin/indent/lsym_sizeof.c:1.2 src/tests/usr.bin/indent/lsym_sizeof.c:1.3 --- src/tests/usr.bin/indent/lsym_sizeof.c:1.2 Thu Nov 25 18:10:23 2021 +++ src/tests/usr.bin/indent/lsym_sizeof.c Thu Nov 25 18:36:30 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: lsym_sizeof.c,v 1.2 2021/11/25 18:10:23 rillig Exp $ */ +/* $NetBSD: lsym_sizeof.c,v 1.3 2021/11/25 18:36:30 rillig Exp $ */ /* $FreeBSD$ */ /* @@ -20,14 +20,9 @@ /* * After 'sizeof', a type name in parentheses does not start a cast * expression. - * - * Broken since lexi.c 1.156 from 2021-11-25. */ #indent input char str[sizeof(int) * CHAR_BIT + 1]; #indent end -/* FIXME: The '*' must be a binary operator here. */ -#indent run -di0 -char str[sizeof(int) *CHAR_BIT + 1]; -#indent end +#indent run-equals-input -di0 Index: src/usr.bin/indent/lexi.c diff -u src/usr.bin/indent/lexi.c:1.162 src/usr.bin/indent/lexi.c:1.163 --- src/usr.bin/indent/lexi.c:1.162 Thu Nov 25 17:50:00 2021 +++ src/usr.bin/indent/lexi.c Thu Nov 25 18:36:30 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: lexi.c,v 1.162 2021/11/25 17:50:00 rillig Exp $ */ +/* $NetBSD: lexi.c,v 1.163 2021/11/25 18:36:30 rillig Exp $ */ /*- * SPDX-License-Identifier: BSD-4-Clause @@ -43,7 +43,7 @@ static char sccsid[] = "@(#)lexi.c 8.1 ( #include <sys/cdefs.h> #if defined(__NetBSD__) -__RCSID("$NetBSD: lexi.c,v 1.162 2021/11/25 17:50:00 rillig Exp $"); +__RCSID("$NetBSD: lexi.c,v 1.163 2021/11/25 18:36:30 rillig Exp $"); #elif defined(__FreeBSD__) __FBSDID("$FreeBSD: head/usr.bin/indent/lexi.c 337862 2018-08-15 18:19:45Z pstef $"); #endif @@ -552,6 +552,17 @@ found_typename: return is_type ? lsym_type_in_parentheses : lsym_word; } +static bool +is_asterisk_unary(void) +{ + if (ps.next_unary || ps.in_parameter_declaration) + return true; + if (ps.prev_token == lsym_word || + ps.prev_token == lsym_rparen_or_rbracket) + return false; + return ps.in_decl && ps.p_l_follow > 0; +} + static void lex_asterisk_unary(void) { @@ -694,8 +705,7 @@ lexi(void) break; case '*': - if (ps.next_unary || ps.in_parameter_declaration || - (ps.in_decl && ps.p_l_follow > 0)) { + if (is_asterisk_unary()) { lex_asterisk_unary(); lsym = lsym_unary_op; next_unary = true;