Introduce func_static_var_operation

This adds class func_static_var_operation, which implements
OP_FUNC_STATIC_VAR.

gdb/ChangeLog
2021-03-08  Tom Tromey  <tom@tromey.com>

	* expop.h (class func_static_var_operation): New.
	* eval.c (eval_op_func_static_var): No longer static.
This commit is contained in:
Tom Tromey 2021-03-08 07:27:57 -07:00
parent b5cc3923de
commit 176793957a
3 changed files with 30 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class func_static_var_operation): New.
* eval.c (eval_op_func_static_var): No longer static.
2021-03-08 Tom Tromey <tom@tromey.com>
* expop.h (class var_entry_value_operation): New.

View File

@ -1237,7 +1237,7 @@ eval_op_var_msym_value (struct type *expect_type, struct expression *exp,
/* Helper function that implements the body of OP_FUNC_STATIC_VAR. */
static struct value *
struct value *
eval_op_func_static_var (struct type *expect_type, struct expression *exp,
enum noside noside,
value *func, const char *var)

View File

@ -54,6 +54,10 @@ extern struct value *eval_op_var_msym_value (struct type *expect_type,
extern struct value *eval_op_var_entry_value (struct type *expect_type,
struct expression *exp,
enum noside noside, symbol *sym);
extern struct value *eval_op_func_static_var (struct type *expect_type,
struct expression *exp,
enum noside noside,
value *func, const char *var);
namespace expr
{
@ -555,6 +559,26 @@ public:
{ return OP_VAR_ENTRY_VALUE; }
};
class func_static_var_operation
: public maybe_constant_operation<operation_up, std::string>
{
public:
using maybe_constant_operation::maybe_constant_operation;
value *evaluate (struct type *expect_type,
struct expression *exp,
enum noside noside) override
{
value *func = std::get<0> (m_storage)->evaluate (nullptr, exp, noside);
return eval_op_func_static_var (expect_type, exp, noside, func,
std::get<1> (m_storage).c_str ());
}
enum exp_opcode opcode () const override
{ return OP_FUNC_STATIC_VAR; }
};
} /* namespace expr */
#endif /* EXPOP_H */