Module Name:    src
Committed By:   rillig
Date:           Sun Nov  7 19:18:57 UTC 2021

Modified Files:
        src/tests/usr.bin/indent: opt_bl_br.c t_misc.sh
        src/usr.bin/indent: indent.c

Log Message:
indent: fix handling of C99 comments after 'if (expr)'


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/tests/usr.bin/indent/opt_bl_br.c
cvs rdiff -u -r1.14 -r1.15 src/tests/usr.bin/indent/t_misc.sh
cvs rdiff -u -r1.217 -r1.218 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/opt_bl_br.c
diff -u src/tests/usr.bin/indent/opt_bl_br.c:1.1 src/tests/usr.bin/indent/opt_bl_br.c:1.2
--- src/tests/usr.bin/indent/opt_bl_br.c:1.1	Fri Oct 22 20:54:36 2021
+++ src/tests/usr.bin/indent/opt_bl_br.c	Sun Nov  7 19:18:56 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: opt_bl_br.c,v 1.1 2021/10/22 20:54:36 rillig Exp $ */
+/* $NetBSD: opt_bl_br.c,v 1.2 2021/11/07 19:18:56 rillig Exp $ */
 /* $FreeBSD$ */
 
 #indent input
@@ -65,3 +65,59 @@ example(int n)
 	}
 }
 #indent end
+
+
+/*
+ * Test C99 comments after 'if (expr)', which is handled by search_stmt.
+ */
+#indent input
+void function(void)
+{
+	if (expr) // C99 comment
+		stmt();
+
+	if (expr) // C99 comment
+	{
+		stmt();
+	}
+}
+#indent end
+
+#indent run
+void
+function(void)
+{
+	if (expr)		// C99 comment
+		stmt();
+
+	if (expr) {		// C99 comment
+		stmt();
+	}
+}
+#indent end
+
+
+/*
+ * Test multiple mixed comments after 'if (expr)'.
+ */
+#indent input
+void
+function(void)
+{
+	if (expr)	// C99 comment 1
+			// C99 comment 2
+			// C99 comment 3
+		stmt();
+}
+#indent end
+
+#indent run
+void
+function(void)
+{
+	if (expr)		// C99 comment 1
+		// C99 comment 2
+		// C99 comment 3
+		stmt();
+}
+#indent end

Index: src/tests/usr.bin/indent/t_misc.sh
diff -u src/tests/usr.bin/indent/t_misc.sh:1.14 src/tests/usr.bin/indent/t_misc.sh:1.15
--- src/tests/usr.bin/indent/t_misc.sh:1.14	Sun Nov  7 19:04:46 2021
+++ src/tests/usr.bin/indent/t_misc.sh	Sun Nov  7 19:18:56 2021
@@ -1,5 +1,5 @@
 #! /bin/sh
-# $NetBSD: t_misc.sh,v 1.14 2021/11/07 19:04:46 rillig Exp $
+# $NetBSD: t_misc.sh,v 1.15 2021/11/07 19:18:56 rillig Exp $
 #
 # Copyright (c) 2021 The NetBSD Foundation, Inc.
 # All rights reserved.
@@ -364,23 +364,6 @@ several_profiles_body()
 	    "$indent" -Pnonexistent.pro -Perror.pro -Plast.pro code.c -st
 }
 
-atf_test_case 'if_expr_c99_comment'
-if_expr_c99_comment_body()
-{
-	cat <<-\EOF >> code.c
-		void function(void) {
-			if (expr) // C99 comment
-				stmt();
-		}
-	EOF
-	cat <<-\EOF >> code.err
-		error: code.c:2: Internal buffer overflow - Move big comment from right after if, while, or whatever
-	EOF
-
-	atf_check -s 'exit:1' -o 'ignore' -e 'file:code.err' \
-	    "$indent" code.c -st
-}
-
 atf_init_test_cases()
 {
 	atf_add_test_case 'in_place'
@@ -394,5 +377,4 @@ atf_init_test_cases()
 	atf_add_test_case 'line_no_counting'
 	atf_add_test_case 'default_backup_extension'
 	atf_add_test_case 'several_profiles'
-	atf_add_test_case 'if_expr_c99_comment'
 }

Index: src/usr.bin/indent/indent.c
diff -u src/usr.bin/indent/indent.c:1.217 src/usr.bin/indent/indent.c:1.218
--- src/usr.bin/indent/indent.c:1.217	Sun Nov  7 18:49:02 2021
+++ src/usr.bin/indent/indent.c	Sun Nov  7 19:18:56 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: indent.c,v 1.217 2021/11/07 18:49:02 rillig Exp $	*/
+/*	$NetBSD: indent.c,v 1.218 2021/11/07 19:18:56 rillig Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-4-Clause
@@ -43,7 +43,7 @@ static char sccsid[] = "@(#)indent.c	5.1
 
 #include <sys/cdefs.h>
 #if defined(__NetBSD__)
-__RCSID("$NetBSD: indent.c,v 1.217 2021/11/07 18:49:02 rillig Exp $");
+__RCSID("$NetBSD: indent.c,v 1.218 2021/11/07 19:18:56 rillig Exp $");
 #elif defined(__FreeBSD__)
 __FBSDID("$FreeBSD: head/usr.bin/indent/indent.c 340138 2018-11-04 19:24:49Z oshogbo $");
 #endif
@@ -316,16 +316,15 @@ search_stmt_comment(void)
 	    save_com, sc_end, "\"\n");
     }
 
-    sc_add_char('/');
-    sc_add_char('*');
-
-    for (;;) {			/* loop until the end of the comment */
-	sc_add_char(inp_next());
-	if (sc_end[-1] == '*' && *inp.s == '/') {
+    sc_add_range(token.s, token.e);
+    if (token.e[-1] == '/') {
+	while (inp.s[0] != '\n')
 	    sc_add_char(inp_next());
-	    debug_save_com("search_stmt_comment end");
-	    break;
-	}
+	debug_save_com("search_stmt_comment end C99");
+    } else {
+	while (!(sc_end[-2] == '*' && sc_end[-1] == '/'))
+	    sc_add_char(inp_next());
+	debug_save_com("search_stmt_comment end block");
     }
 }
 

Reply via email to