} \
} while (0)
-/* Macro that attempts to initialize the demangled name for a symbol,
- based on the language of that symbol. If the language is set to
- language_auto, it will attempt to find any demangling algorithm
- that works and then set the language appropriately. If no demangling
- of any kind is found, the language is set back to language_unknown,
- so we can avoid doing this work again the next time we encounter
- the symbol. Any required space to store the name is obtained from the
- specified obstack. */
-
-#define SYMBOL_INIT_DEMANGLED_NAME(symbol,obstack) \
- do { \
- char *demangled = NULL; \
- if (SYMBOL_LANGUAGE (symbol) == language_unknown) \
- SYMBOL_LANGUAGE (symbol) = language_auto; \
- if (SYMBOL_LANGUAGE (symbol) == language_cplus \
- || SYMBOL_LANGUAGE (symbol) == language_auto) \
- { \
- demangled = \
- cplus_demangle (SYMBOL_NAME (symbol), DMGL_PARAMS | DMGL_ANSI);\
- if (demangled != NULL) \
- { \
- SYMBOL_LANGUAGE (symbol) = language_cplus; \
- SYMBOL_CPLUS_DEMANGLED_NAME (symbol) = \
- obsavestring (demangled, strlen (demangled), (obstack)); \
- xfree (demangled); \
- } \
- else \
- { \
- SYMBOL_CPLUS_DEMANGLED_NAME (symbol) = NULL; \
- } \
- } \
- if (SYMBOL_LANGUAGE (symbol) == language_java) \
- { \
- demangled = \
- cplus_demangle (SYMBOL_NAME (symbol), \
- DMGL_PARAMS | DMGL_ANSI | DMGL_JAVA); \
- if (demangled != NULL) \
- { \
- SYMBOL_LANGUAGE (symbol) = language_java; \
- SYMBOL_CPLUS_DEMANGLED_NAME (symbol) = \
- obsavestring (demangled, strlen (demangled), (obstack)); \
- xfree (demangled); \
- } \
- else \
- { \
- SYMBOL_CPLUS_DEMANGLED_NAME (symbol) = NULL; \
- } \
- } \
- if (demangled == NULL \
- && (SYMBOL_LANGUAGE (symbol) == language_chill \
- || SYMBOL_LANGUAGE (symbol) == language_auto)) \
- { \
- demangled = \
- chill_demangle (SYMBOL_NAME (symbol)); \
- if (demangled != NULL) \
- { \
- SYMBOL_LANGUAGE (symbol) = language_chill; \
- SYMBOL_CHILL_DEMANGLED_NAME (symbol) = \
- obsavestring (demangled, strlen (demangled), (obstack)); \
- xfree (demangled); \
- } \
- else \
- { \
- SYMBOL_CHILL_DEMANGLED_NAME (symbol) = NULL; \
- } \
- } \
- } while (0)
+#define SYMBOL_INIT_DEMANGLED_NAME(symbol,obstack) \
+ (symbol_init_demangled_name (&symbol->ginfo, (obstack)))
+extern void symbol_init_demangled_name (struct general_symbol_info *symbol,
+ struct obstack *obstack);
+
/* Macro that returns the demangled name for a symbol based on the language
for that symbol. If no demangled name exists, returns NULL. */
#define BLOCK_SUPERBLOCK(bl) (bl)->superblock
#define BLOCK_GCC_COMPILED(bl) (bl)->gcc_compile_flag
+/* Macro to loop through all symbols in a block BL.
+ i counts which symbol we are looking at, and sym points to the current
+ symbol. */
+#define ALL_BLOCK_SYMBOLS(bl, i, sym) \
+ for ((i) = 0, (sym) = BLOCK_SYM ((bl), (i)); \
+ (i) < BLOCK_NSYMS ((bl)); \
+ ++(i), (sym) = BLOCK_SYM ((bl), (i)))
+
/* Nonzero if symbols of block BL should be sorted alphabetically.
Don't sort a block which corresponds to a function. If we did the
sorting would have to preserve the order of the symbols for the
30 0x300
10 0x400 - for the increment part of a for stmt.
- */
+ If an entry has a line number of zero, it marks the start of a PC
+ range for which no line number information is available. It is
+ acceptable, though wasteful of table space, for such a range to be
+ zero length. */
struct linetable
{
char *filename;
+ /* Full path of the source file. NULL if not known. */
+
+ char *fullname;
+
/* Information about the object file from which symbols should be read. */
struct objfile *objfile;
#define VTBL_FNADDR_OFFSET 2
-/* Macro that yields non-zero value iff NAME is the prefix for C++ operator
- names. If you leave out the parenthesis here you will lose! */
-#define OPNAME_PREFIX_P(NAME) \
- (!strncmp (NAME, "operator", 8))
-
-/* Macro that yields non-zero value iff NAME is the prefix for C++ vtbl
- names. Note that this macro is g++ specific (FIXME).
- '_vt$' is the old cfront-style vtables; '_VT$' is the new
- style, using thunks (where '$' is really CPLUS_MARKER). */
-
-#define VTBL_PREFIX_P(NAME) \
- (((NAME)[0] == '_' \
- && (((NAME)[1] == 'V' && (NAME)[2] == 'T') \
- || ((NAME)[1] == 'v' && (NAME)[2] == 't')) \
- && is_cplus_marker ((NAME)[3])) || ((NAME)[0]=='_' && (NAME)[1]=='_' \
- && (NAME)[2]=='v' && (NAME)[3]=='t' && (NAME)[4]=='_'))
-
-/* Macro that yields non-zero value iff NAME is the prefix for C++ destructor
- names. Note that this macro is g++ specific (FIXME). */
-
-#define DESTRUCTOR_PREFIX_P(NAME) \
- ((NAME)[0] == '_' && is_cplus_marker ((NAME)[1]) && (NAME)[2] == '_')
-\f
-
/* External variables and functions for the objects described above. */
/* This symtab variable specifies the current file for printing source lines */
/* lookup a symbol table by source file name */
-extern struct symtab *lookup_symtab (char *);
+extern struct symtab *lookup_symtab (const char *);
/* lookup a symbol by name (optional block, optional symtab) */
/* lookup a symbol by name, within a specified block */
extern struct symbol *lookup_block_symbol (const struct block *, const char *,
+ const char *,
const namespace_enum);
/* lookup a [struct, union, enum] by name, within a specified block */
/* lookup partial symbol table by filename */
-extern struct partial_symtab *lookup_partial_symtab (char *);
+extern struct partial_symtab *lookup_partial_symtab (const char *);
/* lookup partial symbol table by address */
extern struct symtabs_and_lines decode_line_spec_1 (char *, int);
-/* From linespec.c */
-
-extern struct symtabs_and_lines decode_line_1 (char **,
- int, struct symtab *, int, char ***);
-
/* Symmisc.c */
void maintenance_print_symbols (char *, int);
extern char **make_symbol_completion_list (char *, char *);
+extern char **make_file_symbol_completion_list (char *, char *, char *);
+
extern struct symbol **make_symbol_overload_list (struct symbol *);
+extern char **make_source_files_completion_list (char *, char *);
+
/* symtab.c */
extern struct partial_symtab *find_main_psymtab (void);
extern void free_search_symbols (struct symbol_search *);
extern struct cleanup *make_cleanup_free_search_symbols (struct symbol_search *);
+/* The name of the ``main'' function.
+ FIXME: cagney/2001-03-20: Can't make main_name() const since some
+ of the calling code currently assumes that the string isn't
+ const. */
+extern void set_main_name (const char *name);
+extern /*const*/ char *main_name (void);
+
#endif /* !defined(SYMTAB_H) */