changeset 4750:cdefe4f21650

Mon Sep 20 18:06:12 1993 Francesco Potorti` (pot at fly) * etags.c (C_entries): is_func is initialised here instead of in consider_token for the sake of the yacc rules section. (C_entries): Now class, struct, enum, union and typedef produce named tags.
author Francesco Potortì <pot@gnu.org>
date Mon, 20 Sep 1993 16:08:50 +0000
parents fe223c0faf71
children c63ce262aa4d
files lib-src/etags.c
diffstat 1 files changed, 25 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/lib-src/etags.c	Mon Sep 20 15:40:38 1993 +0000
+++ b/lib-src/etags.c	Mon Sep 20 16:08:50 1993 +0000
@@ -25,7 +25,7 @@
  *	Gnu Emacs TAGS format and modifications by RMS?
  *	Sam Kendall added C++.
  *
- *	Francesco Potorti` is the current maintainer.	7.5
+ *	Francesco Potorti` is the current maintainer.	8.3
  */
 
 #ifdef HAVE_CONFIG_H
@@ -138,7 +138,7 @@
   char *name;			/* function or type name	*/
   char *file;			/* file name			*/
   logical is_func;		/* use pattern or line no	*/
-  logical rewritten;		/* list name separately		*/
+  logical named;		/* list name separately		*/
   logical been_warned;		/* set if noticed dup		*/
   int lno;			/* line number tag is on	*/
   long cno;			/* character number line starts on */
@@ -326,7 +326,7 @@
   char *p;
   int len;
   LINENO lineno;
-  logical rewritten;
+  logical named;
 } TOKEN;
 
 /* C extensions.
@@ -993,10 +993,10 @@
 /* Record a tag. */
 /* Should take a TOKEN* instead!! */
 void
-pfnote (name, is_func, rewritten, linestart, linelen, lno, cno)
+pfnote (name, is_func, named, linestart, linelen, lno, cno)
      char *name;		/* tag name */
      logical is_func;		/* function or type name? */
-     logical rewritten;		/* tag different from text of definition? */
+     logical named;		/* tag different from text of definition? */
      char *linestart;
      int linelen;
      int lno;
@@ -1031,12 +1031,12 @@
       fp = etags_rindex (name, '.');
       if (fp && fp[1] != '\0' && fp[2] == '\0')
 	*fp = 0;
-      rewritten = TRUE;
+      named = TRUE;
     }
   np->name = savestr (name);
   np->file = curfile;
   np->is_func = is_func;
-  np->rewritten = rewritten;
+  np->named = named;
   np->lno = lno;
   /* UNCOMMENT THE +1 HERE: */
   np->cno = cno /* + 1 */ ;	/* our char numbers are 0-base; emacs's are 1-base */
@@ -1174,7 +1174,7 @@
 
   if (emacs_tags_format)
     {
-      if (node->rewritten)
+      if (node->named)
 	{
 	  fprintf (outf, "%s\177%s\001%d,%d\n",
 		   node->pat, node->name,
@@ -1259,7 +1259,7 @@
       /* Count this entry */
       total += strlen (node->pat) + 1;
       total += number_len ((long) node->lno) + 1 + number_len (node->cno) + 1;
-      if (node->rewritten)
+      if (node->named)
 	total += 1 + strlen (node->name);	/* \001name */
     }
 
@@ -1436,9 +1436,9 @@
   definedef = dnone;							\
 } while (FALSE)
 
-#define MAKE_TAG_FROM_NEW_LB(isfun)  pfnote (tokb, isfun, tok.rewritten, \
+#define MAKE_TAG_FROM_NEW_LB(isfun)  pfnote (nameb, isfun, tok.named,	\
   newlb.buffer, tokoff + toklen + 1, tok.lineno, GET_CHARNO (newlinepos))
-#define MAKE_TAG_FROM_OTH_LB(isfun)  pfnote (tokb, isfun, tok.rewritten, \
+#define MAKE_TAG_FROM_OTH_LB(isfun)  pfnote (nameb, isfun, tok.named,	\
   othlb.buffer, tokoff + toklen + 1, tok.lineno, GET_CHARNO (othlinepos))
 
 void
@@ -1449,7 +1449,7 @@
   register char *lp;		/* pointer one beyond the character `c' */
   int curndx, newndx;		/* indices for current and new lb */
   TOKEN tok;			/* latest token read for funcdef & structdef */
-  char tokb[BUFSIZ];		/* latest token name for funcdef & structdef */
+  char nameb[BUFSIZ];		/* latest token name for funcdef & structdef */
   register int tokoff;		/* offset in line of start of latest token */
   register int toklen;		/* length of latest token */
   int cblev;			/* current curly brace level */
@@ -1590,30 +1590,36 @@
 		    }
 		  else
 		    {
-		      logical is_func;
+		      logical is_func = FALSE;
 
 		      tok.lineno = lineno;
 		      tok.p = newlb.buffer + tokoff;
 		      tok.len = toklen;
-		      tok.rewritten = FALSE;
+		      tok.named = FALSE;
 		      if (yacc_rules
 			  || consider_token (c, lp, &tok,
 					     c_ext, cblev, &is_func))
 			{
 			  if (structdef == sinbody
-			      && definedef == dnone && is_func)
-			    {	/* function defined in C++ class body */
-			      sprintf (tokb, "%s::%.*s",
+			      && definedef == dnone
+			      && is_func)
+			    /* function defined in C++ class body */
+			    {
+			      tok.named = TRUE;
+			      sprintf (nameb, "%s::%.*s",
 				       ((structtag[0] == '\0')
 					? "_anonymous_" : structtag),
 				       tok.len, tok.p);
-			      tok.rewritten = TRUE;
 			    }
 			  else
 			    {
-			      sprintf (tokb, "%.*s", tok.len, tok.p);
+			      sprintf (nameb, "%.*s", tok.len, tok.p);
 			    }
 
+			  if (structdef == stagseen
+			      || typdef == tend)
+			    tok.named = TRUE;
+
 			  if (funcdef == ftagseen
 			      || structdef == stagseen
 			      || typdef == tend)
@@ -1796,8 +1802,6 @@
   Stab_entry *tokse = stab_find (get_C_stab (c_ext), tokp->p, tokp->len);
   enum sym_type toktype = stab_type (tokse);
 
-  *is_func = FALSE;		/* not a function */
-
   /*
    * Advance the definedef state machine.
    */