Module Name: src
Committed By: rillig
Date: Sun Jun 4 13:26:07 UTC 2023
Modified Files:
src/tests/usr.bin/indent: label.c lsym_lparen_or_lbracket.c t_errors.sh
src/usr.bin/indent: indent.c
Log Message:
indent: fix formatting of compound expressions, at least partially
To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/tests/usr.bin/indent/label.c
cvs rdiff -u -r1.9 -r1.10 src/tests/usr.bin/indent/lsym_lparen_or_lbracket.c
cvs rdiff -u -r1.30 -r1.31 src/tests/usr.bin/indent/t_errors.sh
cvs rdiff -u -r1.322 -r1.323 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/label.c
diff -u src/tests/usr.bin/indent/label.c:1.7 src/tests/usr.bin/indent/label.c:1.8
--- src/tests/usr.bin/indent/label.c:1.7 Fri Jun 2 14:34:14 2023
+++ src/tests/usr.bin/indent/label.c Sun Jun 4 13:26:07 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: label.c,v 1.7 2023/06/02 14:34:14 rillig Exp $ */
+/* $NetBSD: label.c,v 1.8 2023/06/04 13:26:07 rillig Exp $ */
/* See FreeBSD r303489 */
@@ -8,6 +8,8 @@ void t(void) {
{
case 1: /* test */
case 2: /* test */
+ case 3: /* test */
+ case 4: /* test */
}
CLEANUP:
;
@@ -23,6 +25,8 @@ t(void)
switch (1) {
case 1: /* test */
case 2: /* test */
+ case 3: /* test */
+ case 4: /* test */
}
CLEANUP:
;
Index: src/tests/usr.bin/indent/lsym_lparen_or_lbracket.c
diff -u src/tests/usr.bin/indent/lsym_lparen_or_lbracket.c:1.9 src/tests/usr.bin/indent/lsym_lparen_or_lbracket.c:1.10
--- src/tests/usr.bin/indent/lsym_lparen_or_lbracket.c:1.9 Tue May 16 11:32:02 2023
+++ src/tests/usr.bin/indent/lsym_lparen_or_lbracket.c Sun Jun 4 13:26:07 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: lsym_lparen_or_lbracket.c,v 1.9 2023/05/16 11:32:02 rillig Exp $ */
+/* $NetBSD: lsym_lparen_or_lbracket.c,v 1.10 2023/06/04 13:26:07 rillig Exp $ */
/*
* Tests for the token lsym_lparen_or_lbracket, which represents a '(' or '['
@@ -194,9 +194,7 @@ function(void)
(cond) ? 123 : 456;
/* C99 compound literal */
- origin = (struct point){
- 0, 0
- };
+ origin = (struct point){0, 0};
/* GCC statement expression */
/* expr = ({if(expr)debug();expr;}); */
@@ -205,6 +203,28 @@ function(void)
/*
+ * Test a few variants of C99 compound expressions, as the '{' and '}' must not
+ * be treated as block delimiters.
+ */
+//indent input
+{
+ return (struct point){0, 0};
+ return (struct point){
+ 0, 0
+ };
+ return (struct point){.x = 0, .y = 0};
+ return (struct point){
+ .x = 0,
+// $ FIXME: The initializers must be indented the same.
+ .y = 0,
+ };
+}
+//indent end
+
+//indent run-equals-input
+
+
+/*
* C99 designator initializers are the rare situation where there is a space
* before a '['.
*/
Index: src/tests/usr.bin/indent/t_errors.sh
diff -u src/tests/usr.bin/indent/t_errors.sh:1.30 src/tests/usr.bin/indent/t_errors.sh:1.31
--- src/tests/usr.bin/indent/t_errors.sh:1.30 Sun May 21 10:18:44 2023
+++ src/tests/usr.bin/indent/t_errors.sh Sun Jun 4 13:26:07 2023
@@ -1,5 +1,5 @@
#! /bin/sh
-# $NetBSD: t_errors.sh,v 1.30 2023/05/21 10:18:44 rillig Exp $
+# $NetBSD: t_errors.sh,v 1.31 2023/06/04 13:26:07 rillig Exp $
#
# Copyright (c) 2021 The NetBSD Foundation, Inc.
# All rights reserved.
@@ -511,11 +511,7 @@ function(void)
origin =
((int)
((-1) *
- (struct point){
-# FIXME: the '{' is part of the expression, not a separate block.
- 0, 0
-# FIXME: the '}' is part of the expression, not a separate block.
- }
+ (struct point){0, 0}
# FIXME: the ')' must be aligned with the corresponding '('.
)
);
Index: src/usr.bin/indent/indent.c
diff -u src/usr.bin/indent/indent.c:1.322 src/usr.bin/indent/indent.c:1.323
--- src/usr.bin/indent/indent.c:1.322 Sun Jun 4 12:46:57 2023
+++ src/usr.bin/indent/indent.c Sun Jun 4 13:26:06 2023
@@ -1,4 +1,4 @@
-/* $NetBSD: indent.c,v 1.322 2023/06/04 12:46:57 rillig Exp $ */
+/* $NetBSD: indent.c,v 1.323 2023/06/04 13:26:06 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: indent.c,v 1.322 2023/06/04 12:46:57 rillig Exp $");
+__RCSID("$NetBSD: indent.c,v 1.323 2023/06/04 13:26:06 rillig Exp $");
#include <sys/param.h>
#include <err.h>
@@ -769,6 +769,15 @@ process_semicolon(void)
static void
process_lbrace(void)
{
+ parser_symbol psym = ps.s_sym[ps.tos];
+ if (ps.prev_token == lsym_rparen
+ && ps.tos >= 2
+ && !(psym == psym_for_exprs || psym == psym_if_expr
+ || psym == psym_switch_expr || psym == psym_while_expr)) {
+ ps.block_init = true;
+ ps.init_or_struct = true;
+ }
+
ps.in_stmt_or_decl = false; /* don't indent the {} */
if (!ps.block_init)