# HG changeset patch # User Francesco Potort # Date 849697021 0 # Node ID 16b8d910795fc0bed460e2de113be2f1fb10853c # Parent 1f77335980ba80f2e0c0e3aef478e72a41e6aae2 * etags.c (C_entries): Test tok.valid. This handles some particular cases involving function declarations that failed. * etags.c (pfnote, fatal, error): Callers using a NULL pointer must cast it to (char *) because we have no prototypes. (make_C_tag): Macro deleted, new function. (C_entries): Calls to make_C_tag macro changed to call function. diff -r 1f77335980ba -r 16b8d910795f lib-src/etags.c --- a/lib-src/etags.c Thu Nov 21 22:20:09 1996 +0000 +++ b/lib-src/etags.c Wed Dec 04 10:57:01 1996 +0000 @@ -31,7 +31,7 @@ * Francesco Potorti` (F.Potorti@cnuce.cnr.it) is the current maintainer. */ -char pot_etags_version[] = "@(#) pot revision number is 11.77"; +char pot_etags_version[] = "@(#) pot revision number is 11.80"; #define TRUE 1 #define FALSE 0 @@ -970,7 +970,7 @@ "mv %s OTAGS;fgrep -v '\t%s\t' OTAGS >%s;rm OTAGS", tagfile, argbuffer[i].what, tagfile); if (system (cmd) != GOOD) - fatal ("failed to execute shell command", NULL); + fatal ("failed to execute shell command", (char *)NULL); } append_to_tagfile = TRUE; } @@ -1342,7 +1342,7 @@ { /* Etags Mode */ if (last_node == NULL) - fatal ("internal error in add_node", NULL); + fatal ("internal error in add_node", (char *)NULL); last_node->right = node; last_node = node; } @@ -1408,7 +1408,7 @@ else { if (node->name == NULL) - error ("internal error: NULL name in ctags mode.", NULL); + error ("internal error: NULL name in ctags mode.", (char *)NULL); if (cxref_style) { @@ -1850,7 +1850,7 @@ case dignorerest: return FALSE; default: - error ("internal error: definedef value.", NULL); + error ("internal error: definedef value.", (char *)NULL); } /* @@ -2100,16 +2100,28 @@ definedef = dnone; \ } while (0) -/* This macro should never be called when tok.valid is FALSE, but - we must protect about both invalid input and internal errors. */ -#define make_C_tag(isfun) do \ -if (tok.valid) { \ - char *name = NULL; \ - if (CTAGS || tok.named) \ - name = savestr (token_name.buffer); \ - pfnote (name, isfun, tok.buffer, tok.linelen, tok.lineno, tok.linepos); \ - tok.valid = FALSE; \ -} /* else if (DEBUG) abort (); */ while (0) + +void +make_C_tag (isfun, tokp) + logical isfun; + TOKEN *tokp; +{ + char *name = NULL; + + /* This function should never be called when tok.valid is FALSE, but + we must protect against invalid input or internal errors. */ + if (tokp->valid) + { + if (CTAGS || tokp->named) + name = savestr (token_name.buffer); + pfnote (name, isfun, + tokp->buffer, tokp->linelen, tokp->lineno, tokp->linepos); + tokp->valid = FALSE; + } + else if (DEBUG) + abort (); +} + void C_entries (c_ext, inf) @@ -2370,7 +2382,7 @@ switch_line_buffers (); } else - make_C_tag (is_func); + make_C_tag (is_func, &tok); } midtoken = FALSE; } @@ -2392,7 +2404,7 @@ funcdef = finlist; continue; case flistseen: - make_C_tag (TRUE); + make_C_tag (TRUE, &tok); funcdef = fignore; break; case ftagseen: @@ -2427,7 +2439,7 @@ { case otagseen: objdef = oignore; - make_C_tag (TRUE); + make_C_tag (TRUE, &tok); break; case omethodtag: case omethodparm: @@ -2445,7 +2457,7 @@ case ftagseen: if (yacc_rules) { - make_C_tag (FALSE); + make_C_tag (FALSE, &tok); funcdef = fignore; } break; @@ -2461,7 +2473,7 @@ switch (typdef) { case tend: - make_C_tag (FALSE); + make_C_tag (FALSE, &tok); /* FALLTHRU */ default: typdef = tnone; @@ -2484,7 +2496,7 @@ { case omethodtag: case omethodparm: - make_C_tag (TRUE); + make_C_tag (TRUE, &tok); objdef = oinbody; break; } @@ -2499,7 +2511,7 @@ if (cblev == 0 && typdef == tend) { typdef = tignore; - make_C_tag (FALSE); + make_C_tag (FALSE, &tok); break; } if (funcdef != finlist && funcdef != fignore) @@ -2522,10 +2534,10 @@ /* Make sure that the next char is not a '*'. This handles constructs like: typedef void OperatorFun (int fun); */ - if (*lp != '*') + if (tok.valid && *lp != '*') { typdef = tignore; - make_C_tag (FALSE); + make_C_tag (FALSE, &tok); } break; } /* switch (typdef) */ @@ -2544,7 +2556,7 @@ break; if (objdef == ocatseen && parlev == 1) { - make_C_tag (TRUE); + make_C_tag (TRUE, &tok); objdef = oignore; } if (--parlev == 0) @@ -2559,7 +2571,7 @@ if (cblev == 0 && typdef == tend) { typdef = tignore; - make_C_tag (FALSE); + make_C_tag (FALSE, &tok); } } else if (parlev < 0) /* can happen due to ill-conceived #if's. */ @@ -2579,13 +2591,13 @@ case stagseen: case scolonseen: /* named struct */ structdef = sinbody; - make_C_tag (FALSE); + make_C_tag (FALSE, &tok); break; } switch (funcdef) { case flistseen: - make_C_tag (TRUE); + make_C_tag (TRUE, &tok); /* FALLTHRU */ case fignore: funcdef = fnone; @@ -2594,12 +2606,12 @@ switch (objdef) { case otagseen: - make_C_tag (TRUE); + make_C_tag (TRUE, &tok); objdef = oignore; break; case omethodtag: case omethodparm: - make_C_tag (TRUE); + make_C_tag (TRUE, &tok); objdef = oinbody; break; default: @@ -2661,7 +2673,7 @@ case '\0': if (objdef == otagseen) { - make_C_tag (TRUE); + make_C_tag (TRUE, &tok); objdef = oignore; } /* If a macro spans multiple lines don't reset its state. */ @@ -3364,7 +3376,7 @@ i = TEX_Token (lasthit); if (0 <= i) { - pfnote (NULL, TRUE, + pfnote ((char *)NULL, TRUE, lb.buffer, strlen (lb.buffer), lineno, linecharno); #if TeX_named_tokens TEX_getit (lasthit, TEX_toktab[i].len); @@ -3542,7 +3554,7 @@ else if (len = prolog_pred (dbp, last)) { /* Predicate. Store the function name so that we only - * generates a tag for the first clause. */ + generate a tag for the first clause. */ if (last == NULL) last = xnew(len + 1, char); else if (len + 1 > allocated) @@ -3971,7 +3983,7 @@ if (regexp_pattern[0] == '\0') { - error ("missing regexp", NULL); + error ("missing regexp", (char *)NULL); return; } if (regexp_pattern[strlen(regexp_pattern)-1] != regexp_pattern[0]) @@ -3982,7 +3994,7 @@ name = scan_separators (regexp_pattern); if (regexp_pattern[0] == '\0') { - error ("null regexp", NULL); + error ("null regexp", (char *)NULL); return; } (void) scan_separators (name); @@ -4191,7 +4203,7 @@ else { /* Make an unnamed tag. */ - pfnote (NULL, TRUE, + pfnote ((char *)NULL, TRUE, linebuffer->buffer, match, lineno, linecharno); } break; @@ -4547,7 +4559,7 @@ { long *result = (long *) malloc (size); if (result == NULL) - fatal ("virtual memory exhausted", NULL); + fatal ("virtual memory exhausted", (char *)NULL); return result; } @@ -4558,6 +4570,6 @@ { long *result = (long *) realloc (ptr, size); if (result == NULL) - fatal ("virtual memory exhausted", NULL); + fatal ("virtual memory exhausted", (char *)NULL); return result; }