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");
}
}