From d1183b064cae59353c3a80d27dc250ca440cb879 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 2 Mar 2021 13:00:45 -0700 Subject: Return a vector from ada_lookup_symbol_list This changes ada_lookup_symbol_list to return a std::vector, and changes various other helper functions to follow. This simplifies the code, and makes it more type-safe (by using a vector where an obstack had been used). gdb/ChangeLog 2021-03-02 Tom Tromey * ada-lang.h (ada_lookup_symbol_list): Return a vector. * ada-lang.c (resolve_subexp): Update. (ada_resolve_function): Accept a vector. (is_nonfunction, add_defn_to_vec) (add_symbols_from_enclosing_procs): Likewise. (num_defns_collected, defns_collected): Remove. (remove_extra_symbols): Return a vector. (remove_irrelevant_renamings): Return void. (ada_add_local_symbols): Accept a vector. (struct match_data) : Remove. : New member. (aux_add_nonlocal_symbols): Update. (ada_add_block_renamings, add_nonlocal_symbols) (ada_add_all_symbols): Accept a vector. (ada_lookup_symbol_list_worker, ada_lookup_symbol_list): Return a vector. (ada_lookup_symbol): Update. (ada_add_block_symbols): Accept a vector. (get_var_value, iterate_over_symbols): Update. * ada-exp.y (block_lookup, write_var_or_type, write_name_assoc): Update. --- gdb/ada-exp.y | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) (limited to 'gdb/ada-exp.y') diff --git a/gdb/ada-exp.y b/gdb/ada-exp.y index b55a0b4..a7e0ccb 100644 --- a/gdb/ada-exp.y +++ b/gdb/ada-exp.y @@ -948,8 +948,6 @@ static const struct block* block_lookup (const struct block *context, const char *raw_name) { const char *name; - std::vector syms; - int nsyms; struct symtab *symtab; const struct block *result = NULL; @@ -965,17 +963,18 @@ block_lookup (const struct block *context, const char *raw_name) name = name_storage.c_str (); } - nsyms = ada_lookup_symbol_list (name, context, VAR_DOMAIN, &syms); + std::vector syms + = ada_lookup_symbol_list (name, context, VAR_DOMAIN); if (context == NULL - && (nsyms == 0 || SYMBOL_CLASS (syms[0].symbol) != LOC_BLOCK)) + && (syms.empty () || SYMBOL_CLASS (syms[0].symbol) != LOC_BLOCK)) symtab = lookup_symtab (name); else symtab = NULL; if (symtab != NULL) result = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab), STATIC_BLOCK); - else if (nsyms == 0 || SYMBOL_CLASS (syms[0].symbol) != LOC_BLOCK) + else if (syms.empty () || SYMBOL_CLASS (syms[0].symbol) != LOC_BLOCK) { if (context == NULL) error (_("No file or function \"%s\"."), raw_name); @@ -984,7 +983,7 @@ block_lookup (const struct block *context, const char *raw_name) } else { - if (nsyms > 1) + if (syms.size () > 1) warning (_("Function name \"%s\" ambiguous here"), raw_name); result = SYMBOL_BLOCK_VALUE (syms[0].symbol); } @@ -1216,8 +1215,6 @@ write_var_or_type (struct parser_state *par_state, tail_index = name_len; while (tail_index > 0) { - int nsyms; - std::vector syms; struct symbol *type_sym; struct symbol *renaming_sym; const char* renaming; @@ -1226,15 +1223,15 @@ write_var_or_type (struct parser_state *par_state, int terminator = encoded_name[tail_index]; encoded_name[tail_index] = '\0'; - nsyms = ada_lookup_symbol_list (encoded_name, block, - VAR_DOMAIN, &syms); + std::vector syms + = ada_lookup_symbol_list (encoded_name, block, VAR_DOMAIN); encoded_name[tail_index] = terminator; type_sym = select_possible_type_sym (syms); if (type_sym != NULL) renaming_sym = type_sym; - else if (nsyms == 1) + else if (syms.size () == 1) renaming_sym = syms[0].symbol; else renaming_sym = NULL; @@ -1285,7 +1282,7 @@ write_var_or_type (struct parser_state *par_state, error (_("Invalid attempt to select from type: \"%s\"."), name0.ptr); } - else if (tail_index == name_len && nsyms == 0) + else if (tail_index == name_len && syms.empty ()) { struct type *type = find_primitive_type (par_state, encoded_name); @@ -1294,13 +1291,13 @@ write_var_or_type (struct parser_state *par_state, return type; } - if (nsyms == 1) + if (syms.size () == 1) { write_var_from_sym (par_state, syms[0].block, syms[0].symbol); write_selectors (par_state, encoded_name + tail_index); return NULL; } - else if (nsyms == 0) + else if (syms.empty ()) { struct bound_minimal_symbol msym = ada_lookup_simple_minsym (encoded_name); @@ -1362,12 +1359,12 @@ write_name_assoc (struct parser_state *par_state, struct stoken name) { if (strchr (name.ptr, '.') == NULL) { - std::vector syms; - int nsyms = ada_lookup_symbol_list (name.ptr, - par_state->expression_context_block, - VAR_DOMAIN, &syms); + std::vector syms + = ada_lookup_symbol_list (name.ptr, + par_state->expression_context_block, + VAR_DOMAIN); - if (nsyms != 1 || SYMBOL_CLASS (syms[0].symbol) == LOC_TYPEDEF) + if (syms.size () != 1 || SYMBOL_CLASS (syms[0].symbol) == LOC_TYPEDEF) write_exp_op_with_string (par_state, OP_NAME, name); else write_var_from_sym (par_state, syms[0].block, syms[0].symbol); -- cgit v1.1