X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fexpression.h;h=a6f966a8eea84be249abb3416ca8d2c0979a9d87;hb=809df4465f01277ab689fb82b3f16ff79f9a2606;hp=0085b99002b3e1b2dc7bbbe2ba7ea569e051dc50;hpb=9b254dd1ce46c19dde1dde5b8d1e22e862dfacce;p=binutils-gdb.git diff --git a/gdb/expression.h b/gdb/expression.h index 0085b99002b..a6f966a8eea 100644 --- a/gdb/expression.h +++ b/gdb/expression.h @@ -1,7 +1,7 @@ /* Definitions for expressions stored in reversed prefix form, for GDB. - Copyright (C) 1986, 1989, 1992, 1994, 2000, 2003, 2005, 2007, 2008 - Free Software Foundation, Inc. + Copyright (C) 1986, 1989, 1992, 1994, 2000, 2003, 2005, 2007, 2008, 2009, + 2010 Free Software Foundation, Inc. This file is part of GDB. @@ -88,6 +88,13 @@ enum exp_opcode when X is a pointer instead of an aggregate. */ STRUCTOP_MPTR, + /* TYPE_INSTANCE is used when the user specifies a specific + type instantiation for overloaded methods/functions. + + The format is: + TYPE_INSTANCE num_types type0 ... typeN num_types TYPE_INSTANCE */ + TYPE_INSTANCE, + /* end of C++. */ /* For Modula-2 integer division DIV */ @@ -101,8 +108,6 @@ enum exp_opcode /* Modula-2 standard (binary) procedures */ BINOP_VAL, - BINOP_INCL, - BINOP_EXCL, /* Concatenate two operands, such as character strings or bitstrings. If the first operand is a integer expression, then it means concatenate @@ -193,8 +198,9 @@ enum exp_opcode indicates that we have found something of the form ( ) */ OP_F77_UNDETERMINED_ARGLIST, - /* The following OP is a special one, it introduces a F77 complex - literal. It is followed by exactly two args that are doubles. */ + /* OP_COMPLEX takes a type in the following element, followed by another + OP_COMPLEX, making three exp_elements. It is followed by two double + args, and converts them into a complex number of the given type. */ OP_COMPLEX, /* OP_STRING represents a string constant. @@ -225,6 +231,12 @@ enum exp_opcode It casts the value of the following subexpression. */ UNOP_CAST, + /* The C++ dynamic_cast operator. */ + UNOP_DYNAMIC_CAST, + + /* The C++ reinterpret_cast operator. */ + UNOP_REINTERPRET_CAST, + /* UNOP_MEMVAL is followed by a type pointer in the next exp_element With another UNOP_MEMVAL at the end, this makes three exp_elements. It casts the contents of the word addressed by the value of the @@ -265,9 +277,6 @@ enum exp_opcode UNOP_ODD, UNOP_TRUNC, - /* (The deleted) Chill builtin functions. */ - UNOP_LOWER, UNOP_UPPER, UNOP_LENGTH, UNOP_CARD, UNOP_CHMAX, UNOP_CHMIN, - OP_BOOL, /* Modula-2 builtin BOOLEAN type */ OP_M2_STRING, /* Modula-2 string constants */ @@ -333,25 +342,32 @@ enum exp_opcode Then comes another OP_DECFLOAT. */ OP_DECFLOAT, + /* OP_ADL_FUNC specifies that the function is to be looked up in an + Argument Dependent manner (Koenig lookup). */ + OP_ADL_FUNC, + /* First extension operator. Individual language modules define - extra operators they need as constants with values - OP_LANGUAGE_SPECIFIC0 + k, for k >= 0, using a separate - enumerated type definition: - enum foo_extension_operator { + extra operators in *.inc include files below always starting with + numbering at OP_EXTENDED0: BINOP_MOGRIFY = OP_EXTENDED0, BINOP_FROB, - ... - }; */ + ... */ OP_EXTENDED0, /* Last possible extension operator. Defined to provide an explicit and finite number of extended operators. */ - OP_EXTENDED_LAST = 0xff + OP_EXTENDED_LAST = 0xff, /* NOTE: Eventually, we expect to convert to an object-oriented formulation for expression operators that does away with the need for these extension operators, and indeed for this entire enumeration type. Therefore, consider the OP_EXTENDED definitions to be a temporary measure. */ + + /* Each language specific set of operators starts at OP_EXTENDED0. */ +#include "ada-operator.inc" + + /* Existing only to swallow the last comma (',') from last .inc file. */ + OP_UNUSED_LAST }; union exp_element @@ -373,6 +389,7 @@ union exp_element struct expression { const struct language_defn *language_defn; /* language it was entered in */ + struct gdbarch *gdbarch; /* architecture it was parsed in */ int nelts; union exp_element elts[1]; }; @@ -389,8 +406,14 @@ struct expression extern struct expression *parse_expression (char *); +extern struct type *parse_field_expression (char *, char **); + extern struct expression *parse_exp_1 (char **, struct block *, int); +/* For use by parsers; set if we want to parse an expression and + attempt to complete a field name. */ +extern int in_parse_field; + /* 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_, then look at it. */