X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fexpression.h;h=8c34642a35ad67af7215ab2181092be0c28bd556;hb=2fe3b329f69ca294a8ad3f1f655df7db33a6eb65;hp=b7a6fff47949892dd8d89457a51bd0fd41906c39;hpb=3c0c9328b9c299580bcf8cb6fdb3b71d5a0525ff;p=binutils-gdb.git diff --git a/gdb/expression.h b/gdb/expression.h index b7a6fff4794..8c34642a35a 100644 --- a/gdb/expression.h +++ b/gdb/expression.h @@ -1,21 +1,28 @@ /* Definitions for expressions stored in reversed prefix form, for GDB. - Copyright (C) 1986, 1989 Free Software Foundation, Inc. + Copyright 1986, 1989, 1992 Free Software Foundation, Inc. This file is part of GDB. -GDB is free software; you can redistribute it and/or modify +This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 1, or (at your option) -any later version. +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. -GDB is distributed in the hope that it will be useful, +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with GDB; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ +along with this program; if not, write to the Free Software +Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#if !defined (EXPRESSION_H) +#define EXPRESSION_H 1 + +#ifdef __STDC__ +struct block; /* Forward declaration for prototypes */ +#endif /* Definitions for saved C expressions. */ @@ -34,6 +41,10 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ enum exp_opcode { + /* Used when it's necessary to pass an opcode which will be ignored, + or to catch uninitialized values. */ + OP_NULL, + /* BINOP_... operate on two values computed by following subexpressions, replacing them by one result value. They take no immediate arguments. */ BINOP_ADD, /* + */ @@ -41,13 +52,14 @@ enum exp_opcode BINOP_MUL, /* * */ BINOP_DIV, /* / */ BINOP_REM, /* % */ + BINOP_MOD, /* mod (Knuth 1.2.4) */ BINOP_LSH, /* << */ BINOP_RSH, /* >> */ - BINOP_AND, /* && */ - BINOP_OR, /* || */ - BINOP_LOGAND, /* & */ - BINOP_LOGIOR, /* | */ - BINOP_LOGXOR, /* ^ */ + BINOP_LOGICAL_AND, /* && */ + BINOP_LOGICAL_OR, /* || */ + BINOP_BITWISE_AND, /* & */ + BINOP_BITWISE_IOR, /* | */ + BINOP_BITWISE_XOR, /* ^ */ BINOP_EQUAL, /* == */ BINOP_NOTEQUAL, /* != */ BINOP_LESS, /* < */ @@ -73,7 +85,8 @@ enum exp_opcode STRUCTOP_MPTR, /* end of C++. */ - BINOP_END, + /* For Modula-2 integer division DIV */ + BINOP_INTDIV, BINOP_ASSIGN_MODIFY, /* +=, -=, *=, and so on. The following exp_element is another opcode, @@ -81,9 +94,25 @@ enum exp_opcode Then comes another BINOP_ASSIGN_MODIFY, making three exp_elements in total. */ + /* Modula-2 standard (binary) procedures*/ + BINOP_VAL, + BINOP_INCL, + BINOP_EXCL, + + /* This must be the highest BINOP_ value, for expprint.c. */ + BINOP_END, + /* Operates on three values computed by following subexpressions. */ TERNOP_COND, /* ?: */ +/* Multidimensional subscript operator, such as Modula-2 x[a,b,...]. + The dimensionality is encoded in the operator, like the number of + function arguments in OP_FUNCALL, I.E. . + The value of the first following subexpression is subscripted + by each of the next following subexpressions, one per dimension. */ + + MULTI_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. */ @@ -136,8 +165,8 @@ enum exp_opcode /* UNOP_... operate on one value from a following subexpression and replace it with a result. They take no immediate arguments. */ UNOP_NEG, /* Unary - */ - UNOP_ZEROP, /* Unary ! */ - UNOP_LOGNOT, /* Unary ~ */ + UNOP_LOGICAL_NOT, /* Unary ! */ + UNOP_COMPLEMENT, /* Unary ~ */ UNOP_IND, /* Unary * */ UNOP_ADDR, /* Unary & */ UNOP_PREINCREMENT, /* ++ before an expression */ @@ -146,6 +175,22 @@ enum exp_opcode UNOP_POSTDECREMENT, /* -- after an expression */ UNOP_SIZEOF, /* Unary sizeof (followed by expression) */ + UNOP_PLUS, /* Unary plus */ + + UNOP_CAP, /* Modula-2 standard (unary) procedures */ + UNOP_CHR, + UNOP_ORD, + UNOP_ABS, + UNOP_FLOAT, + UNOP_HIGH, + UNOP_MAX, + UNOP_MIN, + UNOP_ODD, + UNOP_TRUNC, + + OP_BOOL, /* Modula-2 builtin BOOLEAN type */ + OP_M2_STRING, /* Modula-2 string constants */ + /* STRUCTOP_... operate on a value from a following subexpression by extracting a structure component specified by a string that appears in the following exp_elements (as many as needed). @@ -168,6 +213,10 @@ enum exp_opcode a string, which, of course, is variable length. */ OP_SCOPE, + /* OP_TYPE is for parsing types, and used with the "ptype" command + so we can look up types that are qualified by scope, either with + the GDB "::" operator, or the Modula-2 '.' operator. */ + OP_TYPE }; union exp_element @@ -183,18 +232,43 @@ union exp_element struct expression { + const struct language_defn *language_defn; /* language it was entered in */ int nelts; union exp_element elts[1]; }; -/* From expread.y. */ -struct expression *parse_c_expression (); -struct expression *parse_c_1 (); +/* From parse.c */ + +extern struct expression * +parse_expression PARAMS ((char *)); + +extern struct expression * +parse_exp_1 PARAMS ((char **, struct block *, int)); /* The innermost context required by the stack and register variables we've encountered so far. To use this, set it to NULL, then call - parse_c_, then look at it. */ + parse_, then look at it. */ extern struct block *innermost_block; -/* From expprint.c. */ -void print_expression (); +/* From expprint.c */ + +extern void +print_expression PARAMS ((struct expression *, FILE *)); + +extern char * +op_string PARAMS ((enum exp_opcode)); + +/* To enable dumping of all parsed expressions in a human readable + form, define DEBUG_EXPRESSIONS. This is a compile time constant + at the moment, since it's not clear that this feature is important + enough to include by default. */ + +#ifdef DEBUG_EXPRESSIONS +extern void +dump_expression PARAMS ((struct expression *, FILE *, char *)); +#define DUMP_EXPRESSION(exp,file,note) dump_expression ((exp), (file), (note)) +#else +#define DUMP_EXPRESSION(exp,file,note) /* Null expansion */ +#endif /* DEBUG_EXPRESSIONS */ + +#endif /* !defined (EXPRESSION_H) */