* language.h (struct language_defn): New field evaluate_exp.

* c-lang.c (c_language_defn, cplus_language_defn, asm_langauge_defn),
	f-lang.c (f_language_defn), language.c (unknown_language_defn,
	auto_language_defn, local_language_defn), m2-lang.c (m2_language_defn):
	Set evaluate_exp to evaluate_subexp_standard.
	* ch-lang.c (evaluate_subexp_chill):  New function.  Chill-specific
	support for MULTI_SUBSCRIPT.
	(chill_language_defn):  Set evaluate_exp to evaluate_subexp_chill.
	* eval.c (enum noside):  Move from here ....
	* expression.h (enum noside):  ... to here.
	(evaluate_subexp_standard):  New prototype.
	* eval.c (evaluate_subexp):  Renamed to evaluate_subexp_standard.
	Removed lo-longer-needed test for chill_varying_type.
	(evaluate_subexp):  New.  Calls exp->language_defn->evaluate_exp.
This commit is contained in:
Per Bothner 1995-02-12 19:21:04 +00:00
parent 60438e8e3e
commit 7398958c7d
9 changed files with 119 additions and 55 deletions

View file

@ -132,13 +132,6 @@ enum exp_opcode
by each of the next following subexpressions, one per dimension. */
MULTI_SUBSCRIPT,
/* For Fortran array subscripting (column major style). Like the
Modula operator, we find that the dimensionality is
encoded in the operator. This operator is distinct
from the above one because it uses column-major array
ordering not row-major. */
MULTI_F77_SUBSCRIPT,
/* The OP_... series take immediate following arguments.
After the arguments come another OP_... (the same one)
so that the grouping can be recognized from the end. */
@ -193,11 +186,6 @@ enum exp_opcode
literal. It is followed by exactly two args that are doubles. */
OP_COMPLEX,
/* The following OP introduces a F77 substring operator.
It should have a string type and two integer types that follow
indicating the "from" and "to" for the substring. */
OP_F77_SUBSTR,
/* OP_STRING represents a string constant.
Its format is the same as that of a STRUCTOP, but the string
data is just made into a string constant when the operation
@ -342,6 +330,28 @@ extern struct expression *parse_exp_1 PARAMS ((char **, struct block *, int));
parse_<whatever>, then look at it. */
extern struct block *innermost_block;
/* From eval.c */
/* Values of NOSIDE argument to eval_subexp. */
enum noside
{
EVAL_NORMAL,
EVAL_SKIP, /* Only effect is to increment pos. */
EVAL_AVOID_SIDE_EFFECTS /* Don't modify any variables or
call any functions. The value
returned will have the correct
type, and will have an
approximately correct lvalue
type (inaccuracy: anything that is
listed as being in a register in
the function in which it was
declared will be lval_register). */
};
extern struct value* evaluate_subexp_standard
PARAMS ((struct type *, struct expression *, int*, enum noside));
/* From expprint.c */
extern void print_expression PARAMS ((struct expression *, GDB_FILE *));