Split out eval_op_var_entry_value
This splits OP_VAR_ENTRY_VALUE into a new function for future use. gdb/ChangeLog 2021-03-08 Tom Tromey <tom@tromey.com> * eval.c (eval_op_var_entry_value): New function. (evaluate_subexp_standard): Use it.
This commit is contained in:
parent
ea2d29f7bc
commit
50b98adc3c
@ -1,3 +1,8 @@
|
|||||||
|
2021-03-08 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* eval.c (eval_op_var_entry_value): New function.
|
||||||
|
(evaluate_subexp_standard): Use it.
|
||||||
|
|
||||||
2021-03-08 Tom Tromey <tom@tromey.com>
|
2021-03-08 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* eval.c (eval_op_scope): New function.
|
* eval.c (eval_op_scope): New function.
|
||||||
|
34
gdb/eval.c
34
gdb/eval.c
@ -1198,6 +1198,26 @@ eval_op_scope (struct type *expect_type, struct expression *exp,
|
|||||||
return arg1;
|
return arg1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Helper function that implements the body of OP_VAR_ENTRY_VALUE. */
|
||||||
|
|
||||||
|
static struct value *
|
||||||
|
eval_op_var_entry_value (struct type *expect_type, struct expression *exp,
|
||||||
|
enum noside noside, symbol *sym)
|
||||||
|
{
|
||||||
|
if (noside == EVAL_SKIP)
|
||||||
|
return eval_skip_value (exp);
|
||||||
|
if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
||||||
|
return value_zero (SYMBOL_TYPE (sym), not_lval);
|
||||||
|
|
||||||
|
if (SYMBOL_COMPUTED_OPS (sym) == NULL
|
||||||
|
|| SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry == NULL)
|
||||||
|
error (_("Symbol \"%s\" does not have any specific entry value"),
|
||||||
|
sym->print_name ());
|
||||||
|
|
||||||
|
struct frame_info *frame = get_selected_frame (NULL);
|
||||||
|
return SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry (sym, frame);
|
||||||
|
}
|
||||||
|
|
||||||
struct value *
|
struct value *
|
||||||
evaluate_subexp_standard (struct type *expect_type,
|
evaluate_subexp_standard (struct type *expect_type,
|
||||||
struct expression *exp, int *pos,
|
struct expression *exp, int *pos,
|
||||||
@ -1273,23 +1293,11 @@ evaluate_subexp_standard (struct type *expect_type,
|
|||||||
|
|
||||||
case OP_VAR_ENTRY_VALUE:
|
case OP_VAR_ENTRY_VALUE:
|
||||||
(*pos) += 2;
|
(*pos) += 2;
|
||||||
if (noside == EVAL_SKIP)
|
|
||||||
return eval_skip_value (exp);
|
|
||||||
|
|
||||||
{
|
{
|
||||||
struct symbol *sym = exp->elts[pc + 1].symbol;
|
struct symbol *sym = exp->elts[pc + 1].symbol;
|
||||||
struct frame_info *frame;
|
|
||||||
|
|
||||||
if (noside == EVAL_AVOID_SIDE_EFFECTS)
|
return eval_op_var_entry_value (expect_type, exp, noside, sym);
|
||||||
return value_zero (SYMBOL_TYPE (sym), not_lval);
|
|
||||||
|
|
||||||
if (SYMBOL_COMPUTED_OPS (sym) == NULL
|
|
||||||
|| SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry == NULL)
|
|
||||||
error (_("Symbol \"%s\" does not have any specific entry value"),
|
|
||||||
sym->print_name ());
|
|
||||||
|
|
||||||
frame = get_selected_frame (NULL);
|
|
||||||
return SYMBOL_COMPUTED_OPS (sym)->read_variable_at_entry (sym, frame);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case OP_FUNC_STATIC_VAR:
|
case OP_FUNC_STATIC_VAR:
|
||||||
|
Loading…
Reference in New Issue
Block a user