From 1b30f42106cfd50ef1c020db2ca31f2fbe51ef8a Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 5 Feb 2021 07:11:01 -0700 Subject: 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 * 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. --- gdb/f-exp.y | 29 +++-------------------------- 1 file changed, 3 insertions(+), 26 deletions(-) (limited to 'gdb/f-exp.y') diff --git a/gdb/f-exp.y b/gdb/f-exp.y index 3b0f23d..92a70b4 100644 --- a/gdb/f-exp.y +++ b/gdb/f-exp.y @@ -540,32 +540,9 @@ exp : STRING_LITERAL variable: name_not_typename { struct block_symbol sym = $1.sym; - - if (sym.symbol) - { - if (symbol_read_needs_frame (sym.symbol)) - pstate->block_tracker->update (sym); - 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; - } - else - { - struct bound_minimal_symbol msymbol; - std::string arg = copy_name ($1.stoken); - - msymbol = - lookup_bound_minimal_symbol (arg.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."), - arg.c_str ()); - } + std::string name = copy_name ($1.stoken); + write_exp_symbol_reference (pstate, name.c_str (), + sym); } ; -- cgit v1.1