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/c-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/c-exp.y')
-rw-r--r-- | gdb/c-exp.y | 26 |
1 files changed, 4 insertions, 22 deletions
diff --git a/gdb/c-exp.y b/gdb/c-exp.y index 71610e9..13b06f3 100644 --- a/gdb/c-exp.y +++ b/gdb/c-exp.y @@ -1104,30 +1104,12 @@ variable: qualified_name | COLONCOLON name_not_typename { std::string name = copy_name ($2.stoken); - struct symbol *sym; - struct bound_minimal_symbol msymbol; - - sym + struct block_symbol sym = lookup_symbol (name.c_str (), (const struct block *) NULL, - VAR_DOMAIN, NULL).symbol; - if (sym) - { - write_exp_elt_opcode (pstate, OP_VAR_VALUE); - write_exp_elt_block (pstate, NULL); - write_exp_elt_sym (pstate, sym); - 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 ()); + VAR_DOMAIN, NULL); + write_exp_symbol_reference (pstate, name.c_str (), + sym); } ; |