-/* These codes indicate operator precedences for expression printing,
- least tightly binding first. */
-/* Adding 1 to a precedence value is done for binary operators,
- on the operand which is more tightly bound, so that operators
- of equal precedence within that operand will get parentheses. */
-/* PREC_HYPER and PREC_ABOVE_COMMA are not the precedence of any operator;
- they are used as the "surrounding precedence" to force
- various kinds of things to be parenthesized. */
-enum precedence
- {
- PREC_NULL, PREC_COMMA, PREC_ABOVE_COMMA, PREC_ASSIGN, PREC_LOGICAL_OR,
- PREC_LOGICAL_AND, PREC_BITWISE_IOR, PREC_BITWISE_AND, PREC_BITWISE_XOR,
- PREC_EQUAL, PREC_ORDER, PREC_SHIFT, PREC_ADD, PREC_MUL, PREC_REPEAT,
- PREC_HYPER, PREC_PREFIX, PREC_SUFFIX, PREC_BUILTIN_FUNCTION
- };
-
-/* Table mapping opcodes into strings for printing operators
- and precedences of the operators. */
-
-struct op_print
- {
- const char *string;
- enum exp_opcode opcode;
- /* Precedence of operator. These values are used only by comparisons. */
- enum precedence precedence;
-
- /* For a binary operator: 1 iff right associate.
- For a unary operator: 1 iff postfix. */
- int right_assoc;
- };
-
-/* Information needed to print, prefixify, and evaluate expressions for
- a given language. */
-
-struct exp_descriptor
- {
- /* Print subexpression. */
- void (*print_subexp) (struct expression *, int *, struct ui_file *,
- enum precedence);
-
- /* Returns number of exp_elements needed to represent an operator and
- the number of subexpressions it takes. */
- void (*operator_length) (const struct expression*, int, int*, int *);
-
- /* Call OBJFILE_FUNC for any objfile found being referenced by the
- single operator of EXP at position POS. Operator parameters are
- located at positive (POS + number) offsets in EXP. OBJFILE_FUNC
- should never be called with NULL OBJFILE. OBJFILE_FUNC should
- get passed an arbitrary caller supplied DATA pointer. If it
- returns non-zero value then (any other) non-zero value should be
- immediately returned to the caller. Otherwise zero should be
- returned. */
- int (*operator_check) (struct expression *exp, int pos,
- int (*objfile_func) (struct objfile *objfile,
- void *data),
- void *data);
-
- /* Name of this operator for dumping purposes.
- The returned value should never be NULL, even if EXP_OPCODE is
- an unknown opcode (a string containing an image of the numeric
- value of the opcode can be returned, for instance). */
- const char *(*op_name) (enum exp_opcode);
-
- /* Dump the rest of this (prefix) expression after the operator
- itself has been printed. See dump_subexp_body_standard in
- (expprint.c). */
- int (*dump_subexp_body) (struct expression *, struct ui_file *, int);
-
- /* Evaluate an expression. */
- struct value *(*evaluate_exp) (struct type *, struct expression *,
- int *, enum noside);
- };
-
-
-/* Default descriptor containing standard definitions of all
- elements. */
-extern const struct exp_descriptor exp_descriptor_standard;
-
-/* Functions used by language-specific extended operators to (recursively)
- print/dump subexpressions. */
-
-extern void print_subexp (struct expression *, int *, struct ui_file *,
- enum precedence);
-
-extern void print_subexp_standard (struct expression *, int *,
- struct ui_file *, enum precedence);