X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Fexpression.h;h=a6f966a8eea84be249abb3416ca8d2c0979a9d87;hb=809df4465f01277ab689fb82b3f16ff79f9a2606;hp=1320643bb0dca35dfe0045c7f1bf9bcd11f9848e;hpb=27e232885db363fb545fd2f450e72d929e59b8f6;p=binutils-gdb.git diff --git a/gdb/expression.h b/gdb/expression.h index 1320643bb0d..a6f966a8eea 100644 --- a/gdb/expression.h +++ b/gdb/expression.h @@ -1,11 +1,13 @@ /* Definitions for expressions stored in reversed prefix form, for GDB. - Copyright 1986, 1989, 1992, 1994, 2000 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. 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 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -14,15 +16,14 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. */ + along with this program. If not, see . */ #if !defined (EXPRESSION_H) #define EXPRESSION_H 1 #include "symtab.h" /* Needed for "struct block" type. */ +#include "doublest.h" /* Needed for DOUBLEST. */ /* Definitions for saved C expressions. */ @@ -87,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 */ @@ -100,18 +108,17 @@ 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 the second operand with itself that many times. */ BINOP_CONCAT, - /* For Chill and Pascal. */ + /* For (the deleted) Chill and Pascal. */ BINOP_IN, /* Returns 1 iff ARG1 IN ARG2. */ - /* This is the "colon operator" used various places in Chill. */ + /* This is the "colon operator" used various places in (the + deleted) Chill. */ BINOP_RANGE, /* This must be the highest BINOP_ value, for expprint.c. */ @@ -120,12 +127,13 @@ enum exp_opcode /* Operates on three values computed by following subexpressions. */ TERNOP_COND, /* ?: */ - /* A sub-string/sub-array. Chill syntax: OP1(OP2:OP3). - Return elements OP2 through OP3 of OP1. */ + /* A sub-string/sub-array. (the deleted) Chill syntax: + OP1(OP2:OP3). Return elements OP2 through OP3 of OP1. */ TERNOP_SLICE, - /* A sub-string/sub-array. Chill syntax: OP1(OP2 UP OP3). - Return OP3 elements of OP1, starting with element OP2. */ + /* A sub-string/sub-array. (The deleted) Chill syntax: OP1(OP2 UP + OP3). Return OP3 elements of OP1, starting with element + OP2. */ TERNOP_SLICE_COUNT, /* Multidimensional subscript operator, such as Modula-2 x[a,b,...]. @@ -161,9 +169,8 @@ enum exp_opcode With another OP_LAST at the end, this makes three exp_elements. */ OP_LAST, - /* OP_REGISTER is followed by an integer in the next exp_element. - This is the number of a register to fetch (as an int). - With another OP_REGISTER at the end, this makes three exp_elements. */ + /* OP_REGISTER is followed by a string in the next exp_element. + This is the name of a register to fetch. */ OP_REGISTER, /* OP_INTERNALVAR is followed by an internalvar ptr in the next exp_element. @@ -178,15 +185,22 @@ enum exp_opcode making three exp_elements. */ OP_FUNCALL, + /* OP_OBJC_MSGCALL is followed by a string in the next exp_element and then an + integer. The string is the selector string. The integer is the number + of arguments to the message call. That many plus one values are used, + the first one being the object pointer. This is an Objective C message */ + OP_OBJC_MSGCALL, + /* This is EXACTLY like OP_FUNCALL but is semantically different. In F77, array subscript expressions, substring expressions and function calls are all exactly the same syntactically. They may - only be dismabiguated at runtime. Thus this operator, which + only be disambiguated at runtime. Thus this operator, which 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. @@ -217,12 +231,25 @@ 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 following subexpression. */ UNOP_MEMVAL, + /* UNOP_MEMVAL_TLS is followed by a `struct objfile' pointer in the next + exp_element and a type pointer in the following exp_element. + With another UNOP_MEMVAL_TLS at the end, this makes four exp_elements. + It casts the contents of the word offsetted by the value of the + following subexpression from the TLS specified by `struct objfile'. */ + UNOP_MEMVAL_TLS, + /* UNOP_... operate on one value from a following subexpression and replace it with a result. They take no immediate arguments. */ @@ -250,9 +277,6 @@ enum exp_opcode UNOP_ODD, UNOP_TRUNC, - /* 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 */ @@ -270,22 +294,31 @@ enum exp_opcode STRUCTOP_STRUCT, STRUCTOP_PTR, - /* C++ */ - /* OP_THIS is just a placeholder for the class instance variable. + /* C++: OP_THIS is just a placeholder for the class instance variable. It just comes in a tight (OP_THIS, OP_THIS) pair. */ OP_THIS, + /* Objective-C: OP_OBJC_SELF is just a placeholder for the class instance + variable. It just comes in a tight (OP_OBJC_SELF, OP_OBJC_SELF) pair. */ + OP_OBJC_SELF, + + /* Objective C: "@selector" pseudo-operator */ + OP_OBJC_SELECTOR, + /* OP_SCOPE surrounds a type name and a field name. The type name is encoded as one element, but the field name stays as a string, which, of course, is variable length. */ OP_SCOPE, - /* Used to represent named structure field values in brace initializers - (or tuples as they are called in Chill). - The gcc C syntax is NAME:VALUE or .NAME=VALUE, the Chill syntax is - .NAME:VALUE. Multiple labels (as in the Chill syntax - .NAME1,.NAME2:VALUE) is represented as if it were - .NAME1:(.NAME2:VALUE) (though that is not valid Chill syntax). + /* Used to represent named structure field values in brace + initializers (or tuples as they are called in (the deleted) + Chill). + + The gcc C syntax is NAME:VALUE or .NAME=VALUE, the (the + deleted) Chill syntax is .NAME:VALUE. Multiple labels (as in + the (the deleted) Chill syntax .NAME1,.NAME2:VALUE) is + represented as if it were .NAME1:(.NAME2:VALUE) (though that is + not valid (the deleted) Chill syntax). The NAME is represented as for STRUCTOP_STRUCT; VALUE follows. */ OP_LABELED, @@ -298,8 +331,43 @@ enum exp_opcode /* An un-looked-up identifier. */ OP_NAME, - /* An unparsed expression. Used for Scheme (for now at least) */ - OP_EXPRSTRING + /* An Objective C Foundation Class NSString constant */ + OP_OBJC_NSSTRING, + + /* A F90 array range operator (for "exp:exp", "exp:", ":exp" and ":"). */ + OP_F90_RANGE, + + /* OP_DECFLOAT is followed by a type pointer in the next exp_element + and a dec long constant value in the following exp_element. + 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 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, + /* 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 @@ -308,17 +376,20 @@ union exp_element struct symbol *symbol; LONGEST longconst; DOUBLEST doubleconst; + gdb_byte decfloatconst[16]; /* Really sizeof (union exp_element) characters (or less for the last element of a string). */ char string; struct type *type; struct internalvar *internalvar; struct block *block; + struct objfile *objfile; }; 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]; }; @@ -335,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. */ @@ -370,11 +447,7 @@ extern void print_expression (struct expression *, struct ui_file *); extern char *op_string (enum exp_opcode); -extern void dump_prefix_expression (struct expression *, - struct ui_file *, - char *); -extern void dump_postfix_expression (struct expression *, - struct ui_file *, - char *); +extern void dump_raw_expression (struct expression *, struct ui_file *, char *); +extern void dump_prefix_expression (struct expression *, struct ui_file *); #endif /* !defined (EXPRESSION_H) */