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)

Reply via email to