indent: fix parsing of C99 comments containing '*/'

This commit is contained in:
rillig 2021-11-04 18:38:37 +00:00
parent 1c0206d944
commit 222943f2ca
2 changed files with 9 additions and 12 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: token_comment.c,v 1.16 2021/11/04 18:31:22 rillig Exp $ */
/* $NetBSD: token_comment.c,v 1.17 2021/11/04 18:38:37 rillig Exp $ */
/* $FreeBSD$ */
/*
@ -952,16 +952,13 @@ f(void)
/*
* Test for an edge cases in comment handling, having a block comment inside
* a line comment.
* a line comment. Before NetBSD pr_comment.c 1.96 from 2021-11-04, indent
* wrongly assumed that the comment would end at the '*' '/', tokenizing the
* second word 'still' as a type_at_paren_level_0.
*/
#indent input
/* block comment */
// line comment /* still a line comment */ still a line comment
#indent end
/* FIXME: The line comment must not be indented. */
/* FIXME: The '*' '/' in the line comment must not be removed. */
#indent run
/* block comment */
// line comment /* still a line comment still a line comment
#indent end
#indent run-equals-input

View File

@ -1,4 +1,4 @@
/* $NetBSD: pr_comment.c,v 1.95 2021/11/04 17:37:03 rillig Exp $ */
/* $NetBSD: pr_comment.c,v 1.96 2021/11/04 18:38:37 rillig Exp $ */
/*-
* SPDX-License-Identifier: BSD-4-Clause
@ -43,7 +43,7 @@ static char sccsid[] = "@(#)pr_comment.c 8.1 (Berkeley) 6/6/93";
#include <sys/cdefs.h>
#if defined(__NetBSD__)
__RCSID("$NetBSD: pr_comment.c,v 1.95 2021/11/04 17:37:03 rillig Exp $");
__RCSID("$NetBSD: pr_comment.c,v 1.96 2021/11/04 18:38:37 rillig Exp $");
#elif defined(__FreeBSD__)
__FBSDID("$FreeBSD: head/usr.bin/indent/pr_comment.c 334927 2018-06-10 16:44:18Z pstef $");
#endif
@ -270,7 +270,7 @@ copy_comment(int adj_max_line_length, bool break_delim, bool may_wrap)
case '*':
inbuf_skip();
if (*inp.s == '/') {
if (*inp.s == '/' && token.e[-1] == '*') {
end_of_comment:
inbuf_skip();
@ -285,7 +285,7 @@ copy_comment(int adj_max_line_length, bool break_delim, bool may_wrap)
if (!ch_isblank(com.e[-1]) && may_wrap)
com_add_char(' ');
if (token.e[-1] != '/') {
if (token.e[-1] == '*') {
com_add_char('*');
com_add_char('/');
}