mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-09-14 11:13:43 +08:00
Make ada_lookup_encoded_symbol "return" a struct ada_symbol_info
This makes ada_lookup_encoded_symbol more consistent with other functions such as ada_lookup_symbol_list, and also makes it clearer in the code using that function that symbol and block are related. gdb/ChangeLog: * ada-lang.c (ada_lookup_encoded_symbol): Now returns void. Replace block_found argument by symbol_info. Adjust implementation accordingly. Add function documentation. (ada_lookup_symbol): Adjust to new ada_lookup_encoded_symbol. Fix documentation. * ada-lang.h (ada_lookup_encoded_symbol): Update declaration. * ada-exp.y (write_object_renaming): Adjust to new ada_lookup_encoded_symbol API.
This commit is contained in:
@ -1,3 +1,14 @@
|
|||||||
|
2012-03-29 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
|
* ada-lang.c (ada_lookup_encoded_symbol): Now returns void.
|
||||||
|
Replace block_found argument by symbol_info. Adjust
|
||||||
|
implementation accordingly. Add function documentation.
|
||||||
|
(ada_lookup_symbol): Adjust to new ada_lookup_encoded_symbol.
|
||||||
|
Fix documentation.
|
||||||
|
* ada-lang.h (ada_lookup_encoded_symbol): Update declaration.
|
||||||
|
* ada-exp.y (write_object_renaming): Adjust to new
|
||||||
|
ada_lookup_encoded_symbol API.
|
||||||
|
|
||||||
2012-03-29 Joel Brobecker <brobecker@adacore.com>
|
2012-03-29 Joel Brobecker <brobecker@adacore.com>
|
||||||
|
|
||||||
* ada-lang.h (struct ada_symbol_info): Reformat. Improve
|
* ada-lang.h (struct ada_symbol_info): Reformat. Improve
|
||||||
|
@ -867,8 +867,7 @@ write_object_renaming (struct block *orig_left_context,
|
|||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
enum { SIMPLE_INDEX, LOWER_BOUND, UPPER_BOUND } slice_state;
|
enum { SIMPLE_INDEX, LOWER_BOUND, UPPER_BOUND } slice_state;
|
||||||
struct symbol *sym;
|
struct ada_symbol_info sym_info;
|
||||||
struct block *block;
|
|
||||||
|
|
||||||
if (max_depth <= 0)
|
if (max_depth <= 0)
|
||||||
error (_("Could not find renamed symbol"));
|
error (_("Could not find renamed symbol"));
|
||||||
@ -877,29 +876,28 @@ write_object_renaming (struct block *orig_left_context,
|
|||||||
orig_left_context = get_selected_block (NULL);
|
orig_left_context = get_selected_block (NULL);
|
||||||
|
|
||||||
name = obsavestring (renamed_entity, renamed_entity_len, &temp_parse_space);
|
name = obsavestring (renamed_entity, renamed_entity_len, &temp_parse_space);
|
||||||
sym = ada_lookup_encoded_symbol (name, orig_left_context, VAR_DOMAIN,
|
ada_lookup_encoded_symbol (name, orig_left_context, VAR_DOMAIN, &sym_info);
|
||||||
&block);
|
if (sym_info.sym == NULL)
|
||||||
if (sym == NULL)
|
|
||||||
error (_("Could not find renamed variable: %s"), ada_decode (name));
|
error (_("Could not find renamed variable: %s"), ada_decode (name));
|
||||||
else if (SYMBOL_CLASS (sym) == LOC_TYPEDEF)
|
else if (SYMBOL_CLASS (sym_info.sym) == LOC_TYPEDEF)
|
||||||
/* We have a renaming of an old-style renaming symbol. Don't
|
/* We have a renaming of an old-style renaming symbol. Don't
|
||||||
trust the block information. */
|
trust the block information. */
|
||||||
block = orig_left_context;
|
sym_info.block = orig_left_context;
|
||||||
|
|
||||||
{
|
{
|
||||||
const char *inner_renamed_entity;
|
const char *inner_renamed_entity;
|
||||||
int inner_renamed_entity_len;
|
int inner_renamed_entity_len;
|
||||||
const char *inner_renaming_expr;
|
const char *inner_renaming_expr;
|
||||||
|
|
||||||
switch (ada_parse_renaming (sym, &inner_renamed_entity,
|
switch (ada_parse_renaming (sym_info.sym, &inner_renamed_entity,
|
||||||
&inner_renamed_entity_len,
|
&inner_renamed_entity_len,
|
||||||
&inner_renaming_expr))
|
&inner_renaming_expr))
|
||||||
{
|
{
|
||||||
case ADA_NOT_RENAMING:
|
case ADA_NOT_RENAMING:
|
||||||
write_var_from_sym (orig_left_context, block, sym);
|
write_var_from_sym (orig_left_context, sym_info.block, sym_info.sym);
|
||||||
break;
|
break;
|
||||||
case ADA_OBJECT_RENAMING:
|
case ADA_OBJECT_RENAMING:
|
||||||
write_object_renaming (block,
|
write_object_renaming (sym_info.block,
|
||||||
inner_renamed_entity, inner_renamed_entity_len,
|
inner_renamed_entity, inner_renamed_entity_len,
|
||||||
inner_renaming_expr, max_depth - 1);
|
inner_renaming_expr, max_depth - 1);
|
||||||
break;
|
break;
|
||||||
@ -939,7 +937,7 @@ write_object_renaming (struct block *orig_left_context,
|
|||||||
{
|
{
|
||||||
const char *end;
|
const char *end;
|
||||||
char *index_name;
|
char *index_name;
|
||||||
struct symbol *index_sym;
|
struct ada_symbol_info index_sym_info;
|
||||||
|
|
||||||
end = strchr (renaming_expr, 'X');
|
end = strchr (renaming_expr, 'X');
|
||||||
if (end == NULL)
|
if (end == NULL)
|
||||||
@ -950,14 +948,15 @@ write_object_renaming (struct block *orig_left_context,
|
|||||||
&temp_parse_space);
|
&temp_parse_space);
|
||||||
renaming_expr = end;
|
renaming_expr = end;
|
||||||
|
|
||||||
index_sym = ada_lookup_encoded_symbol (index_name, NULL,
|
ada_lookup_encoded_symbol (index_name, NULL, VAR_DOMAIN,
|
||||||
VAR_DOMAIN, &block);
|
&index_sym_info);
|
||||||
if (index_sym == NULL)
|
if (index_sym_info.sym == NULL)
|
||||||
error (_("Could not find %s"), index_name);
|
error (_("Could not find %s"), index_name);
|
||||||
else if (SYMBOL_CLASS (index_sym) == LOC_TYPEDEF)
|
else if (SYMBOL_CLASS (index_sym_info.sym) == LOC_TYPEDEF)
|
||||||
/* Index is an old-style renaming symbol. */
|
/* Index is an old-style renaming symbol. */
|
||||||
block = orig_left_context;
|
index_sym_info.block = orig_left_context;
|
||||||
write_var_from_sym (NULL, block, index_sym);
|
write_var_from_sym (NULL, index_sym_info.block,
|
||||||
|
index_sym_info.sym);
|
||||||
}
|
}
|
||||||
if (slice_state == SIMPLE_INDEX)
|
if (slice_state == SIMPLE_INDEX)
|
||||||
{
|
{
|
||||||
|
@ -5191,42 +5191,52 @@ ada_iterate_over_symbols (const struct block *block,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct symbol *
|
/* The result is as for ada_lookup_symbol_list with FULL_SEARCH set
|
||||||
ada_lookup_encoded_symbol (const char *name, const struct block *block0,
|
to 1, but choosing the first symbol found if there are multiple
|
||||||
domain_enum namespace, struct block **block_found)
|
choices.
|
||||||
|
|
||||||
|
The result is stored in *SYMBOL_INFO, which must be non-NULL.
|
||||||
|
If no match is found, SYMBOL_INFO->SYM is set to NULL. */
|
||||||
|
|
||||||
|
void
|
||||||
|
ada_lookup_encoded_symbol (const char *name, const struct block *block,
|
||||||
|
domain_enum namespace,
|
||||||
|
struct ada_symbol_info *symbol_info)
|
||||||
{
|
{
|
||||||
struct ada_symbol_info *candidates;
|
struct ada_symbol_info *candidates;
|
||||||
int n_candidates;
|
int n_candidates;
|
||||||
|
|
||||||
n_candidates = ada_lookup_symbol_list (name, block0, namespace, &candidates,
|
gdb_assert (symbol_info != NULL);
|
||||||
|
memset (symbol_info, 0, sizeof (struct ada_symbol_info));
|
||||||
|
|
||||||
|
n_candidates = ada_lookup_symbol_list (name, block, namespace, &candidates,
|
||||||
1);
|
1);
|
||||||
|
|
||||||
if (n_candidates == 0)
|
if (n_candidates == 0)
|
||||||
return NULL;
|
return;
|
||||||
|
|
||||||
if (block_found != NULL)
|
*symbol_info = candidates[0];
|
||||||
*block_found = candidates[0].block;
|
symbol_info->sym = fixup_symbol_section (symbol_info->sym, NULL);
|
||||||
|
|
||||||
return fixup_symbol_section (candidates[0].sym, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
|
/* Return a symbol in DOMAIN matching NAME, in BLOCK0 and enclosing
|
||||||
scope and in global scopes, or NULL if none. NAME is folded and
|
scope and in global scopes, or NULL if none. NAME is folded and
|
||||||
encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
|
encoded first. Otherwise, the result is as for ada_lookup_symbol_list,
|
||||||
choosing the first symbol if there are multiple choices.
|
choosing the first symbol if there are multiple choices.
|
||||||
*IS_A_FIELD_OF_THIS is set to 0 and *SYMTAB is set to the symbol
|
If IS_A_FIELD_OF_THIS is not NULL, it is set to zero. */
|
||||||
table in which the symbol was found (in both cases, these
|
|
||||||
assignments occur only if the pointers are non-null). */
|
|
||||||
struct symbol *
|
struct symbol *
|
||||||
ada_lookup_symbol (const char *name, const struct block *block0,
|
ada_lookup_symbol (const char *name, const struct block *block0,
|
||||||
domain_enum namespace, int *is_a_field_of_this)
|
domain_enum namespace, int *is_a_field_of_this)
|
||||||
{
|
{
|
||||||
|
struct ada_symbol_info symbol_info;
|
||||||
|
|
||||||
if (is_a_field_of_this != NULL)
|
if (is_a_field_of_this != NULL)
|
||||||
*is_a_field_of_this = 0;
|
*is_a_field_of_this = 0;
|
||||||
|
|
||||||
return
|
ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
|
||||||
ada_lookup_encoded_symbol (ada_encode (ada_fold_name (name)),
|
block0, namespace, &symbol_info);
|
||||||
block0, namespace, NULL);
|
return symbol_info.sym;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct symbol *
|
static struct symbol *
|
||||||
|
@ -235,9 +235,9 @@ extern char *ada_fold_name (const char *);
|
|||||||
extern struct symbol *ada_lookup_symbol (const char *, const struct block *,
|
extern struct symbol *ada_lookup_symbol (const char *, const struct block *,
|
||||||
domain_enum, int *);
|
domain_enum, int *);
|
||||||
|
|
||||||
extern struct symbol *
|
extern void ada_lookup_encoded_symbol
|
||||||
ada_lookup_encoded_symbol (const char *, const struct block *,
|
(const char *name, const struct block *block, domain_enum namespace,
|
||||||
domain_enum namespace, struct block **);
|
struct ada_symbol_info *symbol_info);
|
||||||
|
|
||||||
extern struct minimal_symbol *ada_lookup_simple_minsym (const char *);
|
extern struct minimal_symbol *ada_lookup_simple_minsym (const char *);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user