diff options
author | Tom Tromey <tom@tromey.com> | 2021-02-05 07:11:01 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2021-02-05 07:11:01 -0700 |
commit | 1b30f42106cfd50ef1c020db2ca31f2fbe51ef8a (patch) | |
tree | f22193895e3e5c0683504ccc7a525459fccee6da /gdb/d-exp.y | |
parent | e37d88e5e5666304d94b705af4301867df9bdab0 (diff) | |
download | gdb-1b30f42106cfd50ef1c020db2ca31f2fbe51ef8a.zip gdb-1b30f42106cfd50ef1c020db2ca31f2fbe51ef8a.tar.gz gdb-1b30f42106cfd50ef1c020db2ca31f2fbe51ef8a.tar.bz2 |
Extract symbol-writing function from parsers
I noticed that several parsers shared the same code to write a symbol
reference to an expression. This patch factors this code out into a
new function.
Regression tested on x86-64 Fedora 32.
gdb/ChangeLog
2021-02-05 Tom Tromey <tom@tromey.com>
* parser-defs.h (write_exp_symbol_reference): Declare.
* parse.c (write_exp_symbol_reference): New function.
* p-exp.y (variable): Use write_exp_symbol_reference.
* m2-exp.y (variable): Use write_exp_symbol_reference.
* f-exp.y (variable): Use write_exp_symbol_reference.
* d-exp.y (PrimaryExpression): Use write_exp_symbol_reference.
* c-exp.y (variable): Use write_exp_symbol_reference.
Diffstat (limited to 'gdb/d-exp.y')
-rw-r--r-- | gdb/d-exp.y | 45 |
1 files changed, 16 insertions, 29 deletions
diff --git a/gdb/d-exp.y b/gdb/d-exp.y index 35cd074..c432f22 100644 --- a/gdb/d-exp.y +++ b/gdb/d-exp.y @@ -464,7 +464,6 @@ PrimaryExpression: been resolved, it's not likely to be found. */ if (type->code () == TYPE_CODE_MODULE) { - struct bound_minimal_symbol msymbol; struct block_symbol sym; const char *type_name = TYPE_SAFE_NAME (type); int type_name_len = strlen (type_name); @@ -477,35 +476,23 @@ PrimaryExpression: lookup_symbol (name.c_str (), (const struct block *) NULL, VAR_DOMAIN, NULL); - if (sym.symbol) - { - write_exp_elt_opcode (pstate, OP_VAR_VALUE); - write_exp_elt_block (pstate, sym.block); - write_exp_elt_sym (pstate, sym.symbol); - write_exp_elt_opcode (pstate, OP_VAR_VALUE); - break; - } - - msymbol = lookup_bound_minimal_symbol (name.c_str ()); - if (msymbol.minsym != NULL) - write_exp_msymbol (pstate, msymbol); - else if (!have_full_symbols () && !have_partial_symbols ()) - error (_("No symbol table is loaded. Use the \"file\" command.")); - else - error (_("No symbol \"%s\" in current context."), - name.c_str ()); + write_exp_symbol_reference (pstate, + name.c_str (), + sym); + } + else + { + /* Check if the qualified name resolves as a member + of an aggregate or an enum type. */ + if (!type_aggregate_p (type)) + error (_("`%s' is not defined as an aggregate type."), + TYPE_SAFE_NAME (type)); + + write_exp_elt_opcode (pstate, OP_SCOPE); + write_exp_elt_type (pstate, type); + write_exp_string (pstate, $3); + write_exp_elt_opcode (pstate, OP_SCOPE); } - - /* Check if the qualified name resolves as a member - of an aggregate or an enum type. */ - if (!type_aggregate_p (type)) - error (_("`%s' is not defined as an aggregate type."), - TYPE_SAFE_NAME (type)); - - write_exp_elt_opcode (pstate, OP_SCOPE); - write_exp_elt_type (pstate, type); - write_exp_string (pstate, $3); - write_exp_elt_opcode (pstate, OP_SCOPE); } | DOLLAR_VARIABLE { write_dollar_variable (pstate, $1); } |