diff options
author | Francesco Potortì <[email protected]> | 2001-02-23 18:19:25 +0000 |
---|---|---|
committer | Francesco Potortì <[email protected]> | 2001-02-23 18:19:25 +0000 |
commit | f55ae59994180d28d07ca9f7b0c43efe053cfef2 (patch) | |
tree | ed8c84e16fb87128f378695e0fb3dd2781200e1c /lib-src/etags.c | |
parent | b4d063bf2109dfb82ee0c59c410d49f8e9168a8f (diff) |
When in autodetect mode, switch to C++ when the template keyword is met
Diffstat (limited to 'lib-src/etags.c')
-rw-r--r-- | lib-src/etags.c | 182 |
1 files changed, 97 insertions, 85 deletions
diff --git a/lib-src/etags.c b/lib-src/etags.c index 7ae810d96f..69810b5019 100644 --- a/lib-src/etags.c +++ b/lib-src/etags.c @@ -32,7 +32,7 @@ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ * Francesco Potort� <[email protected]> has maintained it since 1993. */ -char pot_etags_version[] = "@(#) pot revision number is 14.15"; +char pot_etags_version[] = "@(#) pot revision number is 14.18"; #define TRUE 1 #define FALSE 0 @@ -58,7 +58,11 @@ char pot_etags_version[] = "@(#) pot revision number is 14.15"; # undef static # define ETAGS_REGEXPS /* use the regexp features */ # define LONG_OPTIONS /* accept long options */ -#endif /* HAVE_CONFIG_H */ +#else +# ifndef __STDC__ +# define static /* remove static for old compilers' sake */ +# endif +#endif /* !HAVE_CONFIG_H */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 /* enables some compiler checks on GNU */ @@ -1943,7 +1947,7 @@ enum sym_type st_C_ignore, st_C_javastruct, st_C_operator, - st_C_class, + st_C_class, st_C_template, st_C_struct, st_C_extern, st_C_enum, st_C_define, st_C_typedef, st_C_typespec }; @@ -1953,7 +1957,6 @@ static enum sym_type C_symtype P_((char *, int, int)); /* Feed stuff between (but not including) %[ and %] lines to: gperf -c -k 1,3 -o -p -r -t - then put a `static' keyword in front of the in_word_set function. %[ struct C_stab_entry { char *name; int c_ext; enum sym_type type; } %% @@ -1982,6 +1985,7 @@ enum, 0, st_C_enum typedef, 0, st_C_typedef define, 0, st_C_define operator, C_PLPL, st_C_operator +template, 0, st_C_template bool, C_PLPL, st_C_typespec long, 0, st_C_typespec short, 0, st_C_typespec @@ -2016,12 +2020,12 @@ then make in_word_set static. */ /* Command-line: gperf -c -k 1,3 -o -p -r -t */ struct C_stab_entry { char *name; int c_ext; enum sym_type type; }; -#define TOTAL_KEYWORDS 46 +#define TOTAL_KEYWORDS 47 #define MIN_WORD_LENGTH 2 #define MAX_WORD_LENGTH 15 -#define MIN_HASH_VALUE 13 -#define MAX_HASH_VALUE 121 -/* maximum key range = 109, duplicates = 0 */ +#define MIN_HASH_VALUE 18 +#define MAX_HASH_VALUE 138 +/* maximum key range = 121, duplicates = 0 */ #ifdef __GNUC__ __inline @@ -2033,32 +2037,32 @@ hash (str, len) { static unsigned char asso_values[] = { - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 57, 122, 122, 122, 55, 6, - 60, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 51, 122, 122, 10, 2, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 2, 52, 59, - 49, 38, 56, 41, 122, 22, 122, 122, 9, 32, - 33, 60, 26, 122, 1, 28, 46, 59, 44, 51, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, - 122, 122, 122, 122, 122, 122 + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 63, 139, 139, 139, 33, 44, + 62, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 42, 139, 139, 12, 32, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 34, 59, 37, + 24, 58, 33, 3, 139, 16, 139, 139, 42, 60, + 18, 11, 39, 139, 23, 57, 4, 63, 6, 20, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, + 139, 139, 139, 139, 139, 139 }; register int hval = len; @@ -2086,77 +2090,79 @@ in_word_set (str, len) static struct C_stab_entry wordlist[] = { {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {""}, {""}, {""}, - {"ENTRY", 0, st_C_gnumacro}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {""}, {"if", 0, st_C_ignore}, + {""}, {""}, {""}, {""}, + {"int", 0, st_C_typespec}, {""}, {""}, + {"void", 0, st_C_typespec}, + {""}, {""}, + {"interface", C_JAVA, st_C_struct}, + {""}, {"SYSCALL", 0, st_C_gnumacro}, + {""}, + {"return", 0, st_C_ignore}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"struct", 0, st_C_struct}, - {"static", 0, st_C_typespec}, - {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, - {"long", 0, st_C_typespec}, - {""}, {""}, {""}, {""}, {""}, + {"while", 0, st_C_ignore}, {"auto", 0, st_C_typespec}, - {"return", 0, st_C_ignore}, + {""}, {""}, {""}, {""}, {""}, {""}, + {"float", 0, st_C_typespec}, + {"typedef", 0, st_C_typedef}, + {"typename", C_PLPL, st_C_typespec}, + {""}, {""}, {""}, + {"friend", C_PLPL, st_C_ignore}, + {"volatile", 0, st_C_typespec}, + {""}, {""}, + {"for", 0, st_C_ignore}, + {"const", 0, st_C_typespec}, {"import", C_JAVA, st_C_ignore}, {""}, - {"switch", 0, st_C_ignore}, - {""}, + {"define", 0, st_C_define}, + {"long", 0, st_C_typespec}, {"implements", C_JAVA, st_C_javastruct}, + {"signed", 0, st_C_typespec}, {""}, - {"for", 0, st_C_ignore}, - {"volatile", 0, st_C_typespec}, - {""}, - {"PSEUDO", 0, st_C_gnumacro}, + {"extern", 0, st_C_extern}, + {"extends", C_JAVA, st_C_javastruct}, {""}, + {"mutable", C_PLPL, st_C_typespec}, + {"template", 0, st_C_template}, + {"short", 0, st_C_typespec}, + {"bool", C_PLPL, st_C_typespec}, {"char", 0, st_C_typespec}, {"class", 0, st_C_class}, - {"@protocol", 0, st_C_objprot}, - {""}, {""}, - {"void", 0, st_C_typespec}, - {"int", 0, st_C_typespec}, - {"explicit", C_PLPL, st_C_typespec}, + {"operator", C_PLPL, st_C_operator}, {""}, - {"namespace", C_PLPL, st_C_struct}, - {"signed", 0, st_C_typespec}, + {"switch", 0, st_C_ignore}, + {""}, + {"ENTRY", 0, st_C_gnumacro}, {""}, - {"interface", C_JAVA, st_C_struct}, - {"while", 0, st_C_ignore}, - {"typedef", 0, st_C_typedef}, - {"typename", C_PLPL, st_C_typespec}, - {""}, {""}, {""}, - {"friend", C_PLPL, st_C_ignore}, - {"mutable", C_PLPL, st_C_typespec}, - {"union", 0, st_C_struct}, - {"domain", C_STAR, st_C_struct}, - {""}, {""}, - {"extern", 0, st_C_extern}, - {"extends", C_JAVA, st_C_javastruct}, {"package", C_JAVA, st_C_ignore}, - {"short", 0, st_C_typespec}, + {"union", 0, st_C_struct}, {"@end", 0, st_C_objend}, - {"unsigned", 0, st_C_typespec}, - {""}, - {"const", 0, st_C_typespec}, + {"struct", 0, st_C_struct}, + {"namespace", C_PLPL, st_C_struct}, {""}, {""}, + {"domain", C_STAR, st_C_struct}, {"@interface", 0, st_C_objprot}, - {"enum", 0, st_C_enum}, - {""}, {""}, - {"@implementation",0, st_C_objimpl}, - {""}, - {"operator", C_PLPL, st_C_operator}, - {""}, {""}, {""}, {""}, - {"define", 0, st_C_define}, - {""}, {""}, + {"PSEUDO", 0, st_C_gnumacro}, {"double", 0, st_C_typespec}, {""}, - {"bool", C_PLPL, st_C_typespec}, - {""}, {""}, {""}, + {"@protocol", 0, st_C_objprot}, + {""}, + {"static", 0, st_C_typespec}, + {""}, {""}, {"DEFUN", 0, st_C_gnumacro}, - {"float", 0, st_C_typespec} + {""}, {""}, {""}, {""}, + {"explicit", C_PLPL, st_C_typespec}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {""}, + {"enum", 0, st_C_enum}, + {""}, {""}, + {"unsigned", 0, st_C_typespec}, + {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, {""}, + {"@implementation",0, st_C_objimpl} }; if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH) @@ -2523,12 +2529,15 @@ consider_token (str, len, c, c_extp, cblev, parlev, is_func_or_var) if (structdef == stagseen) structdef = scolonseen; return FALSE; + case st_C_template: case st_C_class: if (cblev == 0 && (*c_extp & C_AUTO) /* automatic detection of C++ language */ && definedef == dnone && structdef == snone && typdef == tnone && fvdef == fvnone) *c_extp = (*c_extp | C_PLPL) & ~C_AUTO; + if (toktype == st_C_template) + break; /* FALLTHRU */ case st_C_struct: case st_C_enum: @@ -2792,7 +2801,7 @@ C_entries (c_ext, inf) cstack.cblev = xnew (cstack.size, int); } - tokoff = toklen = 0; /* keep compiler quiet */ + tokoff = toklen = typdefcblev = 0; /* keep compiler quiet */ curndx = newndx = 0; lineno = 0; charno = 0; @@ -3370,8 +3379,10 @@ C_entries (c_ext, inf) break; if (typdef == ttypeseen) { - typdefcblev = cblev; + /* Whenever typdef is set to tinbody (currently only + here), typdefcblev should be set to cblev. */ typdef = tinbody; + typdefcblev = cblev; } switch (fvdef) { @@ -3433,6 +3444,7 @@ C_entries (c_ext, inf) cblev--; popclass_above (cblev); structdef = snone; + /* Only if typdef == tinbody is typdefcblev significant. */ if (typdef == tinbody && cblev <= typdefcblev) { assert (cblev == typdefcblev); |