ctags would create a corrupt tags file if the source C file used '//' style

comments such as:

// The main() function

Teach ctags about this style of commenting.

Submitted by:	Eric Allman <eric@Sendmail.ORG>
MFC after:	1 week
This commit is contained in:
gshapiro 2002-02-24 03:02:52 +00:00
parent 55f45d9885
commit fb5d43aa53
3 changed files with 16 additions and 13 deletions

View File

@ -122,8 +122,8 @@ c_entries()
* "foo() XX comment XX { int bar; }"
*/
case '/':
if (GETC(==, '*')) {
skip_comment();
if (GETC(==, '*') || c == '/') {
skip_comment(c);
continue;
}
(void)ungetc(c, inf);
@ -273,8 +273,8 @@ func_entry()
break;
case '/':
/* skip comments */
if (GETC(==, '*'))
skip_comment();
if (GETC(==, '*') || c == '/')
skip_comment(c);
break;
case '(':
level++;
@ -301,8 +301,8 @@ func_entry()
SETLINE;
if (intoken(c) || c == '{')
break;
if (c == '/' && GETC(==, '*'))
skip_comment();
if (c == '/' && (GETC(==, '*') || c == '/'))
skip_comment(c);
else { /* don't ever "read" '/' */
(void)ungetc(c, inf);
return (NO);
@ -422,7 +422,8 @@ str_entry(c)
* skip over comment
*/
void
skip_comment()
skip_comment(t)
int t; /* comment character */
{
int c; /* character read */
int star; /* '*' flag */
@ -434,10 +435,12 @@ skip_comment()
star = YES;
break;
case '/':
if (star)
if (star && t == '*')
return;
break;
case '\n':
if (t == '/')
return;
SETLINE;
/*FALLTHROUGH*/
default:
@ -500,8 +503,8 @@ skip_key(key)
break;
case '/':
/* skip comments */
if (GETC(==, '*')) {
skip_comment();
if (GETC(==, '*') || c == '/') {
skip_comment(c);
break;
}
(void)ungetc(c, inf);

View File

@ -97,4 +97,4 @@ extern void l_entries __P((void));
extern void y_entries __P((void));
extern int PF_funcs __P((void));
extern void c_entries __P((void));
extern void skip_comment __P((void));
extern void skip_comment __P((int));

View File

@ -85,8 +85,8 @@ y_entries()
(void)ungetc(c, inf);
break;
case '/':
if (GETC(==, '*'))
skip_comment();
if (GETC(==, '*') || c == '/')
skip_comment(c);
else
(void)ungetc(c, inf);
break;