Module Name:    src
Committed By:   rillig
Date:           Tue Jan  7 02:55:31 UTC 2025

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

Log Message:
indent: fix indentation of comment above 'else'

Previously, indent assumed that no 'else' would follow.


To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/tests/usr.bin/indent/psym_else.c
cvs rdiff -u -r1.82 -r1.83 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_else.c
diff -u src/tests/usr.bin/indent/psym_else.c:1.7 src/tests/usr.bin/indent/psym_else.c:1.8
--- src/tests/usr.bin/indent/psym_else.c:1.7	Fri Jun 16 23:19:01 2023
+++ src/tests/usr.bin/indent/psym_else.c	Tue Jan  7 02:55:31 2025
@@ -1,4 +1,4 @@
-/* $NetBSD: psym_else.c,v 1.7 2023/06/16 23:19:01 rillig Exp $ */
+/* $NetBSD: psym_else.c,v 1.8 2025/01/07 02:55:31 rillig Exp $ */
 
 /*
  * Tests for the parser symbol psym_else, which represents the keyword 'else'
@@ -42,7 +42,7 @@ example(bool cond)
 				stmt();
 			else
 				stmt();
-	/* comment */
+		/* comment */
 		else
 			stmt();
 }

Index: src/usr.bin/indent/parse.c
diff -u src/usr.bin/indent/parse.c:1.82 src/usr.bin/indent/parse.c:1.83
--- src/usr.bin/indent/parse.c:1.82	Sat Jan  4 21:54:26 2025
+++ src/usr.bin/indent/parse.c	Tue Jan  7 02:55:30 2025
@@ -1,4 +1,4 @@
-/*	$NetBSD: parse.c,v 1.82 2025/01/04 21:54:26 rillig Exp $	*/
+/*	$NetBSD: parse.c,v 1.83 2025/01/07 02:55:30 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: parse.c,v 1.82 2025/01/04 21:54:26 rillig Exp $");
+__RCSID("$NetBSD: parse.c,v 1.83 2025/01/07 02:55:30 rillig Exp $");
 
 #include <stdlib.h>
 
@@ -73,14 +73,7 @@ psyms_reduce_stmt(void)
 
 	case psym_if_expr:
 		psyms_replace2(psym_if_expr_stmt);
-		/* For the time being, assume that there is no 'else' on this
-		 * 'if', and set the indentation level accordingly. If an
-		 * 'else' is scanned, it will be fixed up later. */
-		size_t i = ps.psyms.len - 2;
-		while (ps.psyms.sym[i] != psym_stmt
-		    && ps.psyms.sym[i] != psym_lbrace_block)
-			i--;
-		ps.ind_level_follow = ps.psyms.ind_level[i];
+		ps.ind_level_follow = ps.psyms.ind_level[ps.psyms.len - 1];
 		return true;
 
 	case psym_switch_expr:
@@ -163,6 +156,8 @@ 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();
 		}
 	}

Reply via email to