Similar to the MSYMBOL version of this patch, improves readability and will eventually allow making name private. gdb/ChangeLog: 2019-11-22 Christian Biesinger <cbiesinger@google.com> * ada-exp.y: Update. * ada-lang.c (sort_choices): Update. (ada_print_symbol_signature): Update. (resolve_subexp): Update. (ada_parse_renaming): Update. (ada_read_renaming_var_value): Update. (lesseq_defined_than): Update. (remove_extra_symbols): Update. (remove_irrelevant_renamings): Update. (ada_add_block_symbols): Update. (ada_collect_symbol_completion_matches): Update. (ada_is_renaming_symbol): Update. (aggregate_assign_from_choices): Update. (ada_evaluate_subexp): Update. (ada_has_this_exception_support): Update. (ada_is_non_standard_exception_sym): Update. (ada_add_exceptions_from_frame): Update. (ada_add_global_exceptions): Update. (ada_print_subexp): Update. * ax-gdb.c (gen_var_ref): Update. (gen_maybe_namespace_elt): Update. (gen_expr_for_cast): Update. (gen_expr): Update. * block.h: Update. * blockframe.c (find_pc_partial_function): Update. * breakpoint.c (print_breakpoint_location): Update. (update_static_tracepoint): Update. * btrace.c (ftrace_print_function_name): Update. (ftrace_function_switched): Update. * buildsym.c (find_symbol_in_list): Update. * c-exp.y: Update. * c-typeprint.c (c_print_typedef): Update. (c_type_print_template_args): Update. * cli/cli-cmds.c (edit_command): Update. (list_command): Update. (print_sal_location): Update. * coffread.c (patch_opaque_types): Update. (process_coff_symbol): Update. (coff_read_enum_type): Update. * compile/compile-c-symbols.c (c_symbol_substitution_name): Update. (convert_one_symbol): Update. (hash_symname): Update. (eq_symname): Update. * compile/compile-cplus-symbols.c (convert_one_symbol): Update. * compile/compile-cplus-types.c (debug_print_scope): Update. * compile/compile-loc2c.c (do_compile_dwarf_expr_to_c): Update. * compile/compile-object-load.c (get_out_value_type): Update. * cp-namespace.c (cp_scan_for_anonymous_namespaces): Update. (search_symbol_list): Update. (cp_lookup_symbol_imports_or_template): Update. * cp-support.c (overload_list_add_symbol): Update. * ctfread.c (psymtab_to_symtab): Update. * dbxread.c (cp_set_block_scope): Update. * dictionary.c (iter_match_first_hashed): Update. (iter_match_next_hashed): Update. (insert_symbol_hashed): Update. (iter_match_next_linear): Update. * dictionary.h: Update. * dwarf2loc.c (func_get_frame_base_dwarf_block): Update. (locexpr_describe_location_piece): Update. (locexpr_describe_location_1): Update. (locexpr_generate_c_location): Update. (loclist_describe_location): Update. (loclist_generate_c_location): Update. * dwarf2read.c (dw2_debug_names_lookup_symbol): Update. (read_func_scope): Update. (process_enumeration_scope): Update. (new_symbol): Update. (dwarf2_const_value): Update. (dwarf2_symbol_mark_computed): Update. * eval.c (evaluate_funcall): Update. (evaluate_subexp_standard): Update. * expprint.c (print_subexp_standard): Update. (dump_subexp_body_standard): Update. * f-valprint.c (info_common_command_for_block): Update. * findvar.c (get_hosting_frame): Update. (default_read_var_value): Update. * go-lang.c (go_symbol_package_name): Update. * guile/scm-block.c (bkscm_print_block_smob): Update. * guile/scm-symbol.c (syscm_print_symbol_smob): Update. (gdbscm_symbol_name): Update. (gdbscm_symbol_linkage_name): Update. (gdbscm_symbol_print_name): Update. * infcall.c (get_function_name): Update. * infcmd.c (jump_command): Update. (finish_command): Update. * infrun.c (insert_exception_resume_breakpoint): Update. * linespec.c (canonicalize_linespec): Update. (create_sals_line_offset): Update. (convert_linespec_to_sals): Update. (complete_label): Update. (find_label_symbols_in_block): Update. * m2-typeprint.c (m2_print_typedef): Update. * mdebugread.c (mdebug_reg_to_regnum): Update. (parse_symbol): Update. (mylookup_symbol): Update. * mi/mi-cmd-stack.c (list_arg_or_local): Update. (list_args_or_locals): Update. * objc-lang.c (compare_selectors): Update. (info_selectors_command): Update. (compare_classes): Update. (info_classes_command): Update. (find_imps): Update. * p-typeprint.c (pascal_print_typedef): Update. * printcmd.c (build_address_symbolic): Update. (info_address_command): Update. (print_variable_and_value): Update. * python/py-framefilter.c (extract_sym): Update. (py_print_single_arg): Update. * python/py-symbol.c (sympy_str): Update. (sympy_get_name): Update. (sympy_get_linkage_name): Update. * python/python.c (gdbpy_rbreak): Update. * record-btrace.c (btrace_get_bfun_name): Update. (btrace_call_history): Update. * rust-lang.c (rust_print_typedef): Update. * solib-frv.c (frv_fdpic_find_canonical_descriptor): Update. * stabsread.c (stab_reg_to_regnum): Update. (define_symbol): Update. (read_enum_type): Update. (common_block_end): Update. (cleanup_undefined_types_1): Update. (scan_file_globals): Update. * stack.c (print_frame_arg): Update. (print_frame_args): Update. (find_frame_funname): Update. (info_frame_command_core): Update. (iterate_over_block_locals): Update. (print_block_frame_labels): Update. (do_print_variable_and_value): Update. (iterate_over_block_arg_vars): Update. (return_command): Update. * symmisc.c (dump_symtab_1): Update. (print_symbol): Update. * symtab.c (eq_symbol_entry): Update. (symbol_cache_dump): Update. (lookup_language_this): Update. (find_pc_sect_line): Update. (skip_prologue_sal): Update. (symbol_search::compare_search_syms): Update. (treg_matches_sym_type_name): Update. (search_symbols): Update. (print_symbol_info): Update. (rbreak_command): Update. (completion_list_add_symbol): Update. (find_gnu_ifunc): Update. (get_symbol_address): Update. (search_module_symbols): Update. (info_module_subcommand): Update. * symtab.h (SYMBOL_NATURAL_NAME): Remove. (SYMBOL_LINKAGE_NAME): Remove. (SYMBOL_DEMANGLED_NAME): Remove. (SYMBOL_PRINT_NAME): Remove. (SYMBOL_SEARCH_NAME): Remove. * tracepoint.c (set_traceframe_context): Update. (validate_actionline): Update. (collection_list::collect_symbol): Update. (encode_actions_1): Update. (info_scope_command): Update. (print_one_static_tracepoint_marker): Update. * typeprint.c (typedef_hash_table::add_template_parameters): Update. * valops.c (address_of_variable): Update. (find_overload_match): Update. (find_oload_champ): Update. Change-Id: I76bdc8b44eea6876bf03af9d351f8e90cc0154b2
184 lines
6.6 KiB
C
184 lines
6.6 KiB
C
/* Routines for name->symbol lookups in GDB.
|
|
|
|
Copyright (C) 2003-2019 Free Software Foundation, Inc.
|
|
|
|
Contributed by David Carlton <carlton@bactrian.org> and by Kealia,
|
|
Inc.
|
|
|
|
This file is part of GDB.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef DICTIONARY_H
|
|
#define DICTIONARY_H
|
|
|
|
#include "symfile.h"
|
|
|
|
/* An opaque type for multi-language dictionaries; only dictionary.c should
|
|
know about its innards. */
|
|
|
|
struct multidictionary;
|
|
|
|
/* Other types needed for declarations. */
|
|
|
|
struct symbol;
|
|
struct obstack;
|
|
struct pending;
|
|
struct language_defn;
|
|
|
|
/* The creation functions for various implementations of
|
|
multi-language dictionaries. */
|
|
|
|
/* Create a multi-language dictionary of symbols implemented via
|
|
a fixed-size hashtable. All memory it uses is allocated on
|
|
OBSTACK; the environment is initialized from SYMBOL_LIST. */
|
|
|
|
extern struct multidictionary *
|
|
mdict_create_hashed (struct obstack *obstack,
|
|
const struct pending *symbol_list);
|
|
|
|
/* Create a multi-language dictionary of symbols, implemented
|
|
via a hashtable that grows as necessary. The initial dictionary of
|
|
LANGUAGE is empty; to add symbols to it, call mdict_add_symbol().
|
|
Call mdict_free() when you're done with it. */
|
|
|
|
extern struct multidictionary *
|
|
mdict_create_hashed_expandable (enum language language);
|
|
|
|
/* Create a multi-language dictionary of symbols, implemented
|
|
via a fixed-size array. All memory it uses is allocated on
|
|
OBSTACK; the environment is initialized from the SYMBOL_LIST. The
|
|
symbols are ordered in the same order that they're found in
|
|
SYMBOL_LIST. */
|
|
|
|
extern struct multidictionary *
|
|
mdict_create_linear (struct obstack *obstack,
|
|
const struct pending *symbol_list);
|
|
|
|
/* Create a multi-language dictionary of symbols, implemented
|
|
via an array that grows as necessary. The multidictionary initially
|
|
contains a single empty dictionary of LANGUAGE; to add symbols to it,
|
|
call mdict_add_symbol(). Call mdict_free() when you're done with it. */
|
|
|
|
extern struct multidictionary *
|
|
mdict_create_linear_expandable (enum language language);
|
|
|
|
/* The functions providing the interface to multi-language dictionaries.
|
|
Note that the most common parts of the interface, namely symbol lookup,
|
|
are only provided via iterator functions. */
|
|
|
|
/* Free the memory used by a multidictionary that's not on an obstack. (If
|
|
any.) */
|
|
|
|
extern void mdict_free (struct multidictionary *mdict);
|
|
|
|
/* Add a symbol to an expandable multidictionary. */
|
|
|
|
extern void mdict_add_symbol (struct multidictionary *mdict,
|
|
struct symbol *sym);
|
|
|
|
/* Utility to add a list of symbols to a multidictionary. */
|
|
|
|
extern void mdict_add_pending (struct multidictionary *mdict,
|
|
const struct pending *symbol_list);
|
|
|
|
/* Is the multidictionary empty? */
|
|
|
|
extern int mdict_empty (struct multidictionary *mdict);
|
|
|
|
/* A type containing data that is used when iterating over all symbols
|
|
in a dictionary. Don't ever look at its innards; this type would
|
|
be opaque if we didn't need to be able to allocate it on the
|
|
stack. */
|
|
|
|
struct dict_iterator
|
|
{
|
|
/* The dictionary that this iterator is associated to. */
|
|
const struct dictionary *dict;
|
|
/* The next two members are data that is used in a way that depends
|
|
on DICT's implementation type. */
|
|
int index;
|
|
struct symbol *current;
|
|
};
|
|
|
|
/* The multi-language dictionary iterator. Like dict_iterator above,
|
|
these contents should be considered private. */
|
|
|
|
struct mdict_iterator
|
|
{
|
|
/* The multidictionary with whcih this iterator is associated. */
|
|
const struct multidictionary *mdict;
|
|
|
|
/* The iterator used to iterate through individual dictionaries. */
|
|
struct dict_iterator iterator;
|
|
|
|
/* The current index of the dictionary being iterated over. */
|
|
unsigned short current_idx;
|
|
};
|
|
|
|
/* Initialize ITERATOR to point at the first symbol in MDICT, and
|
|
return that first symbol, or NULL if MDICT is empty. */
|
|
|
|
extern struct symbol *
|
|
mdict_iterator_first (const struct multidictionary *mdict,
|
|
struct mdict_iterator *miterator);
|
|
|
|
/* Advance MITERATOR, and return the next symbol, or NULL if there are
|
|
no more symbols. Don't call this if you've previously received
|
|
NULL from mdict_iterator_first or mdict_iterator_next on this
|
|
iteration. */
|
|
|
|
extern struct symbol *mdict_iterator_next (struct mdict_iterator *miterator);
|
|
|
|
/* Initialize MITERATOR to point at the first symbol in MDICT whose
|
|
search_name () is NAME, as tested using COMPARE (which must use
|
|
the same conventions as strcmp_iw and be compatible with any
|
|
dictionary hashing function), and return that first symbol, or NULL
|
|
if there are no such symbols. */
|
|
|
|
extern struct symbol *
|
|
mdict_iter_match_first (const struct multidictionary *mdict,
|
|
const lookup_name_info &name,
|
|
struct mdict_iterator *miterator);
|
|
|
|
/* Advance MITERATOR to point at the next symbol in MDICT whose
|
|
search_name () is NAME, as tested using COMPARE (see
|
|
dict_iter_match_first), or NULL if there are no more such symbols.
|
|
Don't call this if you've previously received NULL from
|
|
mdict_iterator_match_first or mdict_iterator_match_next on this
|
|
iteration. And don't call it unless MITERATOR was created by a
|
|
previous call to mdict_iter_match_first with the same NAME and COMPARE. */
|
|
|
|
extern struct symbol *mdict_iter_match_next (const lookup_name_info &name,
|
|
struct mdict_iterator *miterator);
|
|
|
|
/* Return some notion of the size of the multidictionary: the number of
|
|
symbols if we have that, the number of hash buckets otherwise. */
|
|
|
|
extern int mdict_size (const struct multidictionary *mdict);
|
|
|
|
/* Macro to loop through all symbols in a dictionary DICT, in no
|
|
particular order. ITER is a struct dict_iterator (NOTE: __not__ a
|
|
struct dict_iterator *), and SYM points to the current symbol.
|
|
|
|
It's implemented as a single loop, so you can terminate the loop
|
|
early by a break if you desire. */
|
|
|
|
#define ALL_DICT_SYMBOLS(dict, iter, sym) \
|
|
for ((sym) = mdict_iterator_first ((dict), &(iter)); \
|
|
(sym); \
|
|
(sym) = mdict_iterator_next (&(iter)))
|
|
|
|
#endif /* DICTIONARY_H */
|