[gnu.emacs.bug] Etags bug

shin@sgtp.apple.juice (Shinichirou Sugou) (06/08/89)

Hello.

Emacs version is 18.53.

The source of etags seems to recognize 'struct/union/enum' datum.  But, it
doesn't record them into TAGS file.

CAUTION: Reply-command supplied by your mail system may NOT generate
         my address correctly.
         Please use the following address instead.

         shin%sgtp.apple.juice%lkbreth.foretune.junet@uunet.uu.net

---
  Shinichirou Sugou   shin%sgtp.apple.juice%lkbreth.foretune.junet@uunet.uu.net

mosurm@pdx.mentor.com (Mosur Mohan) (12/01/89)

Emacs Version: GNU Emacs 18.52.1 of Thu Feb 16 1989 on daven (Domain/OS)
Etags Version: this etags.c has C++ support, and was sent to me by RMS
on 8 June 1989; it has the following header:

/* Tags file maker to go with GNUmacs
   Copyright (C) 1984, 1987, 1988, 1989 Free Software Foundation, Inc. and Ken Arnold

[... copyleft ...]

 * Authors:
 *	Ctags originally by Ken Arnold.
 *	FORTRAN added by Jim Kleckner.
 *	Ed Pelegri-Llopart added C typedefs.
 *	Gnu Emacs TAGS format and modifications by RMS?
 *	Sam Kendall added C++.
 */

This bug has to do with C++ header files.  Etags has trouble
identifying function prototypes in header files; I traced the
problem down to the ';' character being included in the string
variable *notgd in etags.c.  In function "consider_token", there is a
test:

  if (! isgood (c))
    goto badone;

where isgood (c) returns _gd[c], which is defined by the string *notgd
as follows in etags.c:

	*notgd	= ",;";		/* non-valid after-function chars	*/

From the documentation, my understanding is that isgood(c) returns
TRUE if character c is a valid character to follow a function's
parenthesised parm-list, and FALSE otherwise; this is used to
determine whether the token preceding the "(parm-list)" was a
function, and therefore whether to make a tag out of this token.

However, in a C++ header file, it is perfectly valid for the function
header to have the following construct:

   void clear_set ();
   // Remove all types from the set

In this example, () is followed by ';', but because ';' is in *notgd,
all such function declarations are not tagged by etags.

I would like to know whether there is any more up-to-date version
available before I do any hacking here.  Thanks.

-- Mohan.   {mosurm@pdx.mentor.com, uunet!mntgfx!mosurm}
            {Mosur Mohan, Mentor Graphics, Beaverton, OR}
------------------------------------------------------------
"Cogito ergo sum"  ==>  "I think, therefore I add."