Module Name:    src
Committed By:   rillig
Date:           Tue Jan  7 03:14:24 UTC 2025

Modified Files:
        src/tests/usr.bin/indent: psym_for_exprs.c psym_if_expr_stmt.c
        src/usr.bin/indent: parse.c

Log Message:
indent: fix indentation of statement after deeply nested 'if'


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/tests/usr.bin/indent/psym_for_exprs.c
cvs rdiff -u -r1.4 -r1.5 src/tests/usr.bin/indent/psym_if_expr_stmt.c
cvs rdiff -u -r1.83 -r1.84 src/usr.bin/indent/parse.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/psym_for_exprs.c
diff -u src/tests/usr.bin/indent/psym_for_exprs.c:1.6 src/tests/usr.bin/indent/psym_for_exprs.c:1.7
--- src/tests/usr.bin/indent/psym_for_exprs.c:1.6	Mon May 15 08:56:39 2023
+++ src/tests/usr.bin/indent/psym_for_exprs.c	Tue Jan  7 03:14:24 2025
@@ -1,4 +1,4 @@
-/* $NetBSD: psym_for_exprs.c,v 1.6 2023/05/15 08:56:39 rillig Exp $ */
+/* $NetBSD: psym_for_exprs.c,v 1.7 2025/01/07 03:14:24 rillig Exp $ */
 
 /*
  * Tests for the parser state psym_for_exprs, which represents the state after
@@ -27,3 +27,26 @@ for_loops(void)
 //indent end
 
 //indent run-equals-input -ldi0
+
+
+//indent input
+{
+for (ever1)
+for (ever2)
+for (ever3)
+return;
+
+stmt;
+}
+//indent end
+
+//indent run
+{
+	for (ever1)
+		for (ever2)
+			for (ever3)
+				return;
+
+	stmt;
+}
+//indent end

Index: src/tests/usr.bin/indent/psym_if_expr_stmt.c
diff -u src/tests/usr.bin/indent/psym_if_expr_stmt.c:1.4 src/tests/usr.bin/indent/psym_if_expr_stmt.c:1.5
--- src/tests/usr.bin/indent/psym_if_expr_stmt.c:1.4	Sun Apr 24 09:04:12 2022
+++ src/tests/usr.bin/indent/psym_if_expr_stmt.c	Tue Jan  7 03:14:24 2025
@@ -1,4 +1,4 @@
-/* $NetBSD: psym_if_expr_stmt.c,v 1.4 2022/04/24 09:04:12 rillig Exp $ */
+/* $NetBSD: psym_if_expr_stmt.c,v 1.5 2025/01/07 03:14:24 rillig Exp $ */
 
 /*
  * Tests for the parser symbol psym_if_expr_stmt, which represents the state
@@ -25,3 +25,32 @@ function(void)
 //indent end
 
 //indent run-equals-input
+
+
+//indent input
+{
+for (ever1)
+for (ever2)
+for (ever3)
+if (cond1)
+if (cond2)
+if (cond3)
+return;
+
+stmt;
+}
+//indent end
+
+//indent run
+{
+	for (ever1)
+		for (ever2)
+			for (ever3)
+				if (cond1)
+					if (cond2)
+						if (cond3)
+							return;
+
+	stmt;
+}
+//indent end

Index: src/usr.bin/indent/parse.c
diff -u src/usr.bin/indent/parse.c:1.83 src/usr.bin/indent/parse.c:1.84
--- src/usr.bin/indent/parse.c:1.83	Tue Jan  7 02:55:30 2025
+++ src/usr.bin/indent/parse.c	Tue Jan  7 03:14:23 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: parse.c,v 1.83 2025/01/07 02:55:30 rillig Exp $	*/
+/*	$NetBSD: parse.c,v 1.84 2025/01/07 03:14:23 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: parse.c,v 1.83 2025/01/07 02:55:30 rillig Exp $");
+__RCSID("$NetBSD: parse.c,v 1.84 2025/01/07 03:14:23 rillig Exp $");
 
 #include <stdlib.h>
 
@@ -156,9 +156,9 @@ parse(parser_symbol psym)
 	if (psym != psym_else) {
 		while (ps.psyms.sym[ps.psyms.len - 1] == psym_if_expr_stmt) {
 			ps.psyms.sym[ps.psyms.len - 1] = psym_stmt;
-			ps.ind_level = ps.ind_level_follow
-			    = ps.psyms.ind_level[ps.psyms.len - 2];
 			psyms_reduce();
+			ps.ind_level = ps.ind_level_follow
+			    = ps.psyms.ind_level[ps.psyms.len - 1];
 		}
 	}
 

Reply via email to