diff options
Diffstat (limited to 'lib-src/ebrowse.c')
-rw-r--r-- | lib-src/ebrowse.c | 374 |
1 files changed, 131 insertions, 243 deletions
diff --git a/lib-src/ebrowse.c b/lib-src/ebrowse.c index 67c9637daba..81067a90819 100644 --- a/lib-src/ebrowse.c +++ b/lib-src/ebrowse.c @@ -20,20 +20,14 @@ You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif - #include <stdio.h> #ifdef HAVE_STDLIB_H #include <stdlib.h> #endif -#ifdef HAVE_STRING_H #include <string.h> -#endif - #include <ctype.h> #include <assert.h> #include "getopt.h" @@ -45,12 +39,6 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ /* Conditionalize function prototypes. */ -#ifdef PROTOTYPES /* From config.h. */ -#define P_(x) x -#else -#define P_(x) () -#endif - /* Value is non-zero if strings X and Y compare equal. */ #define streq(X, Y) (*(X) == *(Y) && strcmp ((X) + 1, (Y) + 1) == 0) @@ -261,10 +249,10 @@ struct member int vis; /* Visibility (public, ...). */ int flags; /* See F_* above. */ char *regexp; /* Matching regular expression. */ - char *filename; /* Don't free this shared string. */ + const char *filename; /* Don't free this shared string. */ int pos; /* Buffer position of occurrence. */ char *def_regexp; /* Regular expression matching definition. */ - char *def_filename; /* File name of definition. */ + const char *def_filename; /* File name of definition. */ int def_pos; /* Buffer position of definition. */ char name[1]; /* Member name. */ }; @@ -306,8 +294,8 @@ struct sym struct member *types; /* List of local types. */ char *regexp; /* Matching regular expression. */ int pos; /* Buffer position. */ - char *filename; /* File in which it can be found. */ - char *sfilename; /* File in which members can be found. */ + const char *filename; /* File in which it can be found. */ + const char *sfilename; /* File in which members can be found. */ struct sym *namesp; /* Namespace in which defined. . */ char name[1]; /* Name of the class. */ }; @@ -365,7 +353,7 @@ int yyline; /* The name of the current input file. */ -char *filename; +const char *filename; /* Three character class vectors, and macros to test membership of characters. */ @@ -456,7 +444,7 @@ int tk = -1; struct kw { - char *name; /* Spelling. */ + const char *name; /* Spelling. */ int tk; /* Token value. */ struct kw *next; /* Next in collision chain. */ }; @@ -479,62 +467,59 @@ struct search_path *search_path_tail; /* Function prototypes. */ -int yylex P_ ((void)); -void yyparse P_ ((void)); -void re_init_parser P_ ((void)); -char *token_string P_ ((int)); -char *matching_regexp P_ ((void)); -void init_sym P_ ((void)); -struct sym *add_sym P_ ((char *, struct sym *)); -void add_link P_ ((struct sym *, struct sym *)); -void add_member_defn P_ ((struct sym *, char *, char *, - int, unsigned, int, int, int)); -void add_member_decl P_ ((struct sym *, char *, char *, int, - unsigned, int, int, int, int)); -void dump_roots P_ ((FILE *)); -void *xmalloc P_ ((int)); -void xfree P_ ((void *)); -void add_global_defn P_ ((char *, char *, int, unsigned, int, int, int)); -void add_global_decl P_ ((char *, char *, int, unsigned, int, int, int)); -void add_define P_ ((char *, char *, int)); -void mark_inherited_virtual P_ ((void)); -void leave_namespace P_ ((void)); -void enter_namespace P_ ((char *)); -void register_namespace_alias P_ ((char *, struct link *)); -void insert_keyword P_ ((char *, int)); -void re_init_scanner P_ ((void)); -void init_scanner P_ ((void)); -void usage P_ ((int)); -void version P_ ((void)); -void process_file P_ ((char *)); -void add_search_path P_ ((char *)); -FILE *open_file P_ ((char *)); -int process_pp_line P_ ((void)); -int dump_members P_ ((FILE *, struct member *)); -void dump_sym P_ ((FILE *, struct sym *)); -int dump_tree P_ ((FILE *, struct sym *)); -struct member *find_member P_ ((struct sym *, char *, int, int, unsigned)); -struct member *add_member P_ ((struct sym *, char *, int, int, unsigned)); -void mark_virtual P_ ((struct sym *)); -void mark_virtual P_ ((struct sym *)); -struct sym *make_namespace P_ ((char *, struct sym *)); -char *sym_scope P_ ((struct sym *)); -char *sym_scope_1 P_ ((struct sym *)); -int skip_to P_ ((int)); -void skip_matching P_ ((void)); -void member P_ ((struct sym *, int)); -void class_body P_ ((struct sym *, int)); -void class_definition P_ ((struct sym *, int, int, int)); -void declaration P_ ((int)); -unsigned parm_list P_ ((int *)); -char *operator_name P_ ((int *)); -struct sym *parse_classname P_ ((void)); -struct sym *parse_qualified_ident_or_type P_ ((char **)); -void parse_qualified_param_ident_or_type P_ ((char **)); -int globals P_ ((int)); -void yyerror P_ ((char *, char *)); -void usage P_ ((int)) NO_RETURN; -void version P_ (()) NO_RETURN; +int yylex (void); +void yyparse (void); +void re_init_parser (void); +const char *token_string (int); +char *matching_regexp (void); +void init_sym (void); +struct sym *add_sym (const char *, struct sym *); +void add_link (struct sym *, struct sym *); +void add_member_defn (struct sym *, char *, char *, + int, unsigned, int, int, int); +void add_member_decl (struct sym *, char *, char *, int, + unsigned, int, int, int, int); +void dump_roots (FILE *); +void *xmalloc (int); +void xfree (void *); +void add_global_defn (char *, char *, int, unsigned, int, int, int); +void add_global_decl (char *, char *, int, unsigned, int, int, int); +void add_define (char *, char *, int); +void mark_inherited_virtual (void); +void leave_namespace (void); +void enter_namespace (char *); +void register_namespace_alias (char *, struct link *); +void insert_keyword (const char *, int); +void re_init_scanner (void); +void init_scanner (void); +void process_file (char *); +void add_search_path (char *); +FILE *open_file (char *); +int process_pp_line (void); +int dump_members (FILE *, struct member *); +void dump_sym (FILE *, struct sym *); +int dump_tree (FILE *, struct sym *); +struct member *find_member (struct sym *, char *, int, int, unsigned); +struct member *add_member (struct sym *, char *, int, int, unsigned); +void mark_virtual (struct sym *); +struct sym *make_namespace (char *, struct sym *); +char *sym_scope (struct sym *); +char *sym_scope_1 (struct sym *); +int skip_to (int); +void skip_matching (void); +void member (struct sym *, int); +void class_body (struct sym *, int); +void class_definition (struct sym *, int, int, int); +void declaration (int); +unsigned parm_list (int *); +char *operator_name (int *); +struct sym *parse_classname (void); +struct sym *parse_qualified_ident_or_type (char **); +void parse_qualified_param_ident_or_type (char **); +int globals (int); +void yyerror (const char *, const char *); +void usage (int) NO_RETURN; +void version (void) NO_RETURN; @@ -546,8 +531,7 @@ void version P_ (()) NO_RETURN; name and line number. */ void -yyerror (format, s) - char *format, *s; +yyerror (const char *format, const char *s) { fprintf (stderr, "%s:%d: ", filename, yyline); fprintf (stderr, format, s); @@ -559,8 +543,7 @@ yyerror (format, s) available. */ void * -xmalloc (nbytes) - int nbytes; +xmalloc (int nbytes) { void *p = malloc (nbytes); if (p == NULL) @@ -575,9 +558,7 @@ xmalloc (nbytes) /* Like realloc but print an error and exit if out of memory. */ void * -xrealloc (p, sz) - void *p; - int sz; +xrealloc (void *p, int sz) { p = realloc (p, sz); if (p == NULL) @@ -593,8 +574,7 @@ xrealloc (p, sz) available.. If S is null, return null. */ char * -xstrdup (s) - char *s; +xstrdup (char *s) { if (s) s = strcpy (xmalloc (strlen (s) + 1), s); @@ -611,7 +591,7 @@ xstrdup (s) special symbol for globals (`*Globals*'). */ void -init_sym () +init_sym (void) { global_symbols = add_sym (GLOBALS_NAME, NULL); } @@ -625,13 +605,11 @@ init_sym () create a new symbol and set it to default values. */ struct sym * -add_sym (name, nested_in_class) - char *name; - struct sym *nested_in_class; +add_sym (const char *name, struct sym *nested_in_class) { struct sym *sym; unsigned h; - char *s; + const char *s; struct sym *scope = nested_in_class ? nested_in_class : current_namespace; for (s = name, h = 0; *s; ++s) @@ -654,7 +632,7 @@ add_sym (name, nested_in_class) } sym = (struct sym *) xmalloc (sizeof *sym + strlen (name)); - bzero (sym, sizeof *sym); + memset (sym, 0, sizeof *sym); strcpy (sym->name, name); sym->namesp = scope; sym->next = class_table[h]; @@ -668,8 +646,7 @@ add_sym (name, nested_in_class) /* Add links between superclass SUPER and subclass SUB. */ void -add_link (super, sub) - struct sym *super, *sub; +add_link (struct sym *super, struct sym *sub) { struct link *lnk, *lnk2, *p, *prev; @@ -709,11 +686,7 @@ add_link (super, sub) found or null if not found. */ struct member * -find_member (cls, name, var, sc, hash) - struct sym *cls; - char *name; - int var, sc; - unsigned hash; +find_member (struct sym *cls, char *name, int var, int sc, unsigned int hash) { struct member **list; struct member *p; @@ -763,16 +736,7 @@ find_member (cls, name, var, sc, hash) F_* defines). */ void -add_member_decl (cls, name, regexp, pos, hash, var, sc, vis, flags) - struct sym *cls; - char *name; - char *regexp; - int pos; - unsigned hash; - int var; - int sc; - int vis; - int flags; +add_member_decl (struct sym *cls, char *name, char *regexp, int pos, unsigned int hash, int var, int sc, int vis, int flags) { struct member *m; @@ -820,15 +784,7 @@ add_member_decl (cls, name, regexp, pos, hash, var, sc, vis, flags) F_* defines). */ void -add_member_defn (cls, name, regexp, pos, hash, var, sc, flags) - struct sym *cls; - char *name; - char *regexp; - int pos; - unsigned hash; - int var; - int sc; - int flags; +add_member_defn (struct sym *cls, char *name, char *regexp, int pos, unsigned int hash, int var, int sc, int flags) { struct member *m; @@ -870,9 +826,7 @@ add_member_defn (cls, name, regexp, pos, hash, var, sc, flags) if it is non-null. POS is the position in the file. */ void -add_define (name, regexp, pos) - char *name, *regexp; - int pos; +add_define (char *name, char *regexp, int pos) { add_global_defn (name, regexp, pos, 0, 1, SC_FRIEND, F_DEFINE); add_global_decl (name, regexp, pos, 0, 1, SC_FRIEND, F_DEFINE); @@ -890,13 +844,7 @@ add_define (name, regexp, pos) F_* defines). */ void -add_global_defn (name, regexp, pos, hash, var, sc, flags) - char *name, *regexp; - int pos; - unsigned hash; - int var; - int sc; - int flags; +add_global_defn (char *name, char *regexp, int pos, unsigned int hash, int var, int sc, int flags) { int i; struct sym *sym; @@ -927,13 +875,7 @@ add_global_defn (name, regexp, pos, hash, var, sc, flags) F_* defines). */ void -add_global_decl (name, regexp, pos, hash, var, sc, flags) - char *name, *regexp; - int pos; - unsigned hash; - int var; - int sc; - int flags; +add_global_decl (char *name, char *regexp, int pos, unsigned int hash, int var, int sc, int flags) { /* Add declaration only if not already declared. Header files must be processed before source files for this to have the right effect. @@ -972,12 +914,7 @@ add_global_decl (name, regexp, pos, hash, var, sc, flags) Value is a pointer to the member's structure. */ struct member * -add_member (cls, name, var, sc, hash) - struct sym *cls; - char *name; - int var; - int sc; - unsigned hash; +add_member (struct sym *cls, char *name, int var, int sc, unsigned int hash) { struct member *m = (struct member *) xmalloc (sizeof *m + strlen (name)); struct member **list; @@ -1048,8 +985,7 @@ add_member (cls, name, var, sc, hash) in base classes. */ void -mark_virtual (r) - struct sym *r; +mark_virtual (struct sym *r) { struct link *p; struct member *m, *m2; @@ -1073,7 +1009,7 @@ mark_virtual (r) are virtual because of a virtual declaration in a base class. */ void -mark_inherited_virtual () +mark_inherited_virtual (void) { struct sym *r; int i; @@ -1088,12 +1024,10 @@ mark_inherited_virtual () /* Create and return a symbol for a namespace with name NAME. */ struct sym * -make_namespace (name, context) - char *name; - struct sym *context; +make_namespace (char *name, struct sym *context) { struct sym *s = (struct sym *) xmalloc (sizeof *s + strlen (name)); - bzero (s, sizeof *s); + memset (s, 0, sizeof *s); strcpy (s->name, name); s->next = all_namespaces; s->namesp = context; @@ -1105,9 +1039,7 @@ make_namespace (name, context) /* Find the symbol for namespace NAME. If not found, retrun NULL */ struct sym * -check_namespace (name, context) - char *name; - struct sym *context; +check_namespace (char *name, struct sym *context) { struct sym *p = NULL; @@ -1115,18 +1047,16 @@ check_namespace (name, context) { if (streq (p->name, name) && (p->namesp == context)) break; - } + } return p; - } +} /* Find the symbol for namespace NAME. If not found, add a new symbol for NAME to all_namespaces. */ struct sym * -find_namespace (name, context) - char *name; - struct sym *context; +find_namespace (char *name, struct sym *context) { struct sym *p = check_namespace (name, context); @@ -1140,8 +1070,7 @@ find_namespace (name, context) /* Find namespace alias with name NAME. If not found return NULL. */ struct link * -check_namespace_alias (name) - char *name; +check_namespace_alias (char *name) { struct link *p = NULL; struct alias *al; @@ -1165,9 +1094,7 @@ check_namespace_alias (name) /* Register the name NEW_NAME as an alias for namespace list OLD_NAME. */ void -register_namespace_alias (new_name, old_name) - char *new_name; - struct link *old_name; +register_namespace_alias (char *new_name, struct link *old_name) { unsigned h; char *s; @@ -1195,8 +1122,7 @@ register_namespace_alias (new_name, old_name) /* Enter namespace with name NAME. */ void -enter_namespace (name) - char *name; +enter_namespace (char *name) { struct sym *p = find_namespace (name, current_namespace); @@ -1217,7 +1143,7 @@ enter_namespace (name) /* Leave the current namespace. */ void -leave_namespace () +leave_namespace (void) { assert (namespace_sp > 0); current_namespace = namespace_stack[--namespace_sp]; @@ -1259,8 +1185,7 @@ int scope_buffer_len; /* Make sure scope_buffer has enough room to add LEN chars to it. */ void -ensure_scope_buffer_room (len) - int len; +ensure_scope_buffer_room (int len) { if (scope_buffer_len + len >= scope_buffer_size) { @@ -1276,8 +1201,7 @@ ensure_scope_buffer_room (len) scope name constructed. */ char * -sym_scope_1 (p) - struct sym *p; +sym_scope_1 (struct sym *p) { int len; @@ -1311,8 +1235,7 @@ sym_scope_1 (p) as it would appear in a C*+ source file. */ char * -sym_scope (p) - struct sym *p; +sym_scope (struct sym *p) { if (!scope_buffer) { @@ -1334,9 +1257,7 @@ sym_scope (p) list. */ int -dump_members (fp, m) - FILE *fp; - struct member *m; +dump_members (FILE *fp, struct member *m) { int n; @@ -1369,9 +1290,7 @@ dump_members (fp, m) /* Dump class ROOT to stream FP. */ void -dump_sym (fp, root) - FILE *fp; - struct sym *root; +dump_sym (FILE *fp, struct sym *root) { fputs (CLASS_STRUCT, fp); PUTSTR (root->name, fp); @@ -1397,9 +1316,7 @@ dump_sym (fp, root) number of classes written. */ int -dump_tree (fp, root) - FILE *fp; - struct sym *root; +dump_tree (FILE *fp, struct sym *root) { struct link *lk; unsigned n = 0; @@ -1446,8 +1363,7 @@ dump_tree (fp, root) /* Dump the entire class tree to file FP. */ void -dump_roots (fp) - FILE *fp; +dump_roots (FILE *fp) { int i, n = 0; struct sym *r; @@ -1521,7 +1437,7 @@ do { \ input buffer not consumed. */ int -process_pp_line () +process_pp_line (void) { int in_comment = 0, in_string = 0; int c; @@ -1592,7 +1508,7 @@ process_pp_line () /* Value is the next token from the input buffer. */ int -yylex () +yylex (void) { int c; char end_char; @@ -2014,7 +1930,7 @@ static char *matching_regexp_buffer, *matching_regexp_end_buf; shorter than min_regexp. */ char * -matching_regexp () +matching_regexp (void) { char *p; char *s; @@ -2064,9 +1980,8 @@ matching_regexp () /* Return a printable representation of token T. */ -char * -token_string (t) - int t; +const char * +token_string (int t) { static char b[3]; @@ -2183,7 +2098,7 @@ token_string (t) /* Reinitialize the scanner for a new input file. */ void -re_init_scanner () +re_init_scanner (void) { in = inbuffer; yyline = 1; @@ -2201,11 +2116,9 @@ re_init_scanner () table. */ void -insert_keyword (name, tk) - char *name; - int tk; +insert_keyword (const char *name, int tk) { - char *s; + const char *s; unsigned h = 0; struct kw *k = (struct kw *) xmalloc (sizeof *k); @@ -2224,7 +2137,7 @@ insert_keyword (name, tk) character class vectors and fills the keyword hash table. */ void -init_scanner () +init_scanner (void) { int i; @@ -2368,8 +2281,7 @@ init_scanner () the current lookahead token after skipping. */ int -skip_to (token) - int token; +skip_to (int token) { while (!LOOKING_AT2 (YYEOF, token)) MATCH (); @@ -2380,7 +2292,7 @@ skip_to (token) angle brackets, curly brackets) matching the current lookahead. */ void -skip_matching () +skip_matching (void) { int open, close, n; @@ -2423,7 +2335,7 @@ skip_matching () } void -skip_initializer () +skip_initializer (void) { for (;;) { @@ -2450,7 +2362,7 @@ skip_initializer () /* Build qualified namespace alias (A::B::c) and return it. */ struct link * -match_qualified_namespace_alias () +match_qualified_namespace_alias (void) { struct link *head = NULL; struct link *cur = NULL; @@ -2463,7 +2375,7 @@ match_qualified_namespace_alias () { case IDENT: tmp = (struct link *) xmalloc (sizeof *cur); - tmp->sym = find_namespace (yytext, cur); + tmp->sym = find_namespace (yytext, cur ? cur->sym : NULL); tmp->next = NULL; if (head) { @@ -2487,7 +2399,7 @@ match_qualified_namespace_alias () /* Re-initialize the parser by resetting the lookahead token. */ void -re_init_parser () +re_init_parser (void) { tk = -1; } @@ -2500,8 +2412,7 @@ re_init_parser () distinguish between overloaded functions. */ unsigned -parm_list (flags) - int *flags; +parm_list (int *flags) { unsigned hash = 0; int type_seen = 0; @@ -2614,7 +2525,7 @@ parm_list (flags) /* Print position info to stdout. */ void -print_info () +print_info (void) { if (info_position >= 0 && BUFFER_POS () <= info_position) if (info_cls) @@ -2629,9 +2540,7 @@ print_info () public). */ void -member (cls, vis) - struct sym *cls; - int vis; +member (struct sym *cls, int vis) { char *id = NULL; int sc = SC_MEMBER; @@ -2840,9 +2749,7 @@ member (cls, vis) union, class). */ void -class_body (cls, tag) - struct sym *cls; - int tag; +class_body (struct sym *cls, int tag) { int vis = tag == CLASS ? PRIVATE : PUBLIC; int temp; @@ -2903,7 +2810,7 @@ class_body (cls, tag) symbol for that class. */ struct sym * -parse_classname () +parse_classname (void) { struct sym *last_class = NULL; @@ -2933,12 +2840,11 @@ parse_classname () a static buffer holding the constructed operator name string. */ char * -operator_name (sc) - int *sc; +operator_name (int *sc) { static int id_size = 0; static char *id = NULL; - char *s; + const char *s; int len; MATCH (); @@ -3024,8 +2930,7 @@ operator_name (sc) symbol structure for the ident. */ struct sym * -parse_qualified_ident_or_type (last_id) - char **last_id; +parse_qualified_ident_or_type (char **last_id) { struct sym *cls = NULL; char *id = NULL; @@ -3090,8 +2995,7 @@ parse_qualified_ident_or_type (last_id) symbol structure for the ident. */ void -parse_qualified_param_ident_or_type (last_id) - char **last_id; +parse_qualified_param_ident_or_type (char **last_id) { struct sym *cls = NULL; static char *id = NULL; @@ -3133,11 +3037,7 @@ parse_qualified_param_ident_or_type (last_id) Current lookahead is the class name. */ void -class_definition (containing, tag, flags, nested) - struct sym *containing; - int tag; - int flags; - int nested; +class_definition (struct sym *containing, int tag, int flags, int nested) { struct sym *current; struct sym *base_class; @@ -3234,10 +3134,7 @@ class_definition (containing, tag, flags, nested) information about the member (see the F_* defines). */ void -add_declarator (cls, id, flags, sc) - struct sym **cls; - char **id; - int flags, sc; +add_declarator (struct sym **cls, char **id, int flags, int sc) { if (LOOKING_AT2 (';', ',')) { @@ -3280,8 +3177,7 @@ add_declarator (cls, id, flags, sc) /* Parse a declaration. */ void -declaration (flags) - int flags; +declaration (int flags) { char *id = NULL; struct sym *cls = NULL; @@ -3435,8 +3331,7 @@ declaration (flags) otherwise. */ int -globals (start_flags) - int start_flags; +globals (int start_flags) { int anonymous; int class_tk; @@ -3554,7 +3449,7 @@ globals (start_flags) /* Parse the current input file. */ void -yyparse () +yyparse (void) { while (globals (0) == 0) MATCH_IF ('}'); @@ -3570,8 +3465,7 @@ yyparse () input files. */ void -add_search_path (path_list) - char *path_list; +add_search_path (char *path_list) { while (*path_list) { @@ -3606,8 +3500,7 @@ add_search_path (path_list) unchanged file name. */ FILE * -open_file (file) - char *file; +open_file (char *file) { FILE *fp = NULL; static char *buffer; @@ -3666,8 +3559,7 @@ Usage: ebrowse [options] {files}\n\ " void -usage (error) - int error; +usage (int error) { puts (USAGE); exit (error ? EXIT_FAILURE : EXIT_SUCCESS); @@ -3682,7 +3574,7 @@ usage (error) #endif void -version () +version (void) { /* Makes it easier to update automatically. */ char emacs_copyright[] = "Copyright (C) 2010 Free Software Foundation, Inc."; @@ -3698,8 +3590,7 @@ version () table. */ void -process_file (file) - char *file; +process_file (char *file) { FILE *fp; @@ -3754,8 +3645,7 @@ process_file (file) is null when EOF is reached. */ char * -read_line (fp) - FILE *fp; +read_line (FILE *fp) { static char *buffer; static int buffer_size; @@ -3791,13 +3681,11 @@ read_line (fp) /* Main entry point. */ int -main (argc, argv) - int argc; - char **argv; +main (int argc, char **argv) { int i; int any_inputfiles = 0; - static char *out_filename = DEFAULT_OUTFILE; + static const char *out_filename = DEFAULT_OUTFILE; static char **input_filenames = NULL; static int input_filenames_size = 0; static int n_input_files; |