Introduce expression::evaluate

This introduces a new method, expression::evaluate, and changes the
top-level expression-evaluation functions to use it.  Stack temporary
handling is moved into this new method, which makes sense because that
handling was only done when "*pos == 0".

This patch avoids some temporary regressions related to stack
temporary in the larger expression rewrite series.  I've pulled it out
separately because it seems like a reasonable change in its own right,
and because it's better to avoid making that series even longer.

Regression tested on x86-64 Fedora 32.

gdb/ChangeLog
2021-02-18  Tom Tromey  <tom@tromey.com>

	* expression.h (struct expression) <evaluate>: Declare method.
	* eval.c (evaluate_subexp): Simplify.
	(expression::evaluate): New method.
	(evaluate_expression, evaluate_type): Use expression::evaluate.
This commit is contained in:
Tom Tromey
2021-02-18 11:23:33 -07:00
parent 8568422270
commit 26f53cd385
3 changed files with 37 additions and 22 deletions

View File

@ -120,6 +120,11 @@ struct expression
return elts[0].opcode;
}
/* Evaluate the expression. EXPECT_TYPE is the context type of the
expression; normally this should be nullptr. NOSIDE controls how
evaluation is performed. */
struct value *evaluate (struct type *expect_type, enum noside noside);
/* Language it was entered in. */
const struct language_defn *language_defn;
/* Architecture it was parsed in. */