moore%cdr.utah.edu@wasatch.utah.edu (Tim Moore) (07/29/89)
Here are some changes to etags.c so that it will recognize package
qualified defining forms i.e., lisp::defmacro, in Lisp files. I've
found this useful in our Utah Common Lisp project. Almost all special
forms and macros in UCL are defined using ucl::defmacro instead of defmacro
to avoid screwing up the cross compiler's definition of the macro or
to avoid using the cross compiler's defmacro.
The "-p" flag enables this new behavior. Diffs follow.
Tim Moore moore@cs.utah.edu {ut-sally,hplabs}!utah-cs!moore
"Ah, youth. Ah, statute of limitations."
-John Waters
*** /n/jaguar/usr/src/gnu/emacs/dist/etc/etags.c Thu Jun 23 06:45:37 1988
--- etags.c Fri Jul 28 14:49:35 1989
***************
*** 188,193 ****
--- 188,195 ----
int vflag = 0; /* -v: create vgrind style index output */
int xflag = 0; /* -x: create cxref style output */
int eflag = 0; /* -e: emacs style output */
+ int pflag = 0; /* -p: look for package qualified defs */
+ /* in lisp files */
/* Name this program was invoked with. */
char *progname;
***************
*** 308,313 ****
--- 310,318 ----
}
outfile = av[1];
goto end_loop;
+ case 'p':
+ pflag++;
+ break;
case 't':
tflag++;
break;
***************
*** 1209,1215 ****
/*
* lisp tag functions
! * just look for (def or (DEF
*/
L_funcs (fi)
--- 1214,1220 ----
/*
* lisp tag functions
! * look for (def or (DEF or (foo:def or (foo::def or ...
*/
L_funcs (fi)
***************
*** 1225,1240 ****
linecharno = charno;
charno += readline (&lb, fi) + 1;
dbp = lb.buffer;
! if (dbp[0] == '(' &&
! (dbp[1] == 'D' || dbp[1] == 'd') &&
! (dbp[2] == 'E' || dbp[2] == 'e') &&
! (dbp[3] == 'F' || dbp[3] == 'f'))
{
! while (!isspace(*dbp)) dbp++;
! while (isspace(*dbp)) dbp++;
! L_getit();
}
}
}
L_getit()
--- 1230,1267 ----
linecharno = charno;
charno += readline (&lb, fi) + 1;
dbp = lb.buffer;
! if (dbp[0] == '(')
{
! if (L_isdef())
! {
! while (!isspace(*dbp)) dbp++;
! while (isspace(*dbp)) dbp++;
! L_getit();
! }
! else if (pflag)
! {
! while (*dbp != ':' && !isspace(*dbp)) dbp++;
! if (*dbp == ':')
! {
! if (dbp[1] == ':') dbp++; /* deal with "::" */
! if (L_isdef())
! {
! while (!isspace(*dbp)) dbp++;
! while (isspace(*dbp)) dbp++;
! L_getit();
! }
! }
! }
}
+
}
+ }
+
+ L_isdef()
+ {
+ return ((dbp[1] == 'D' || dbp[1] == 'd') &&
+ (dbp[2] == 'E' || dbp[2] == 'e') &&
+ (dbp[3] == 'F' || dbp[3] == 'f'));
}
L_getit()
Tim Moore moore@cs.utah.edu {ut-sally,hplabs}!utah-cs!moore
"Ah, youth. Ah, statute of limitations."
-John Waters