X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fexpression.h;h=fe5f8fc9a48cc043ff77acc9ea1251322e40dd73;hb=17c8aaf5078f15d4cd621a5428a82080a7f4c516;hp=a91442c124c05a996ff9a6e553356e2bc881df64;hpb=2df3850c7bfea139c5baf6c2911c11456a1b32e9;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/expression.h b/gdb/expression.h index a91442c124..fe5f8fc9a4 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 Free Software Foundation, Inc. + + Copyright (C) 1986, 1989, 1992, 1994, 2000, 2003, 2005, 2007, 2008 + 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. */ @@ -108,10 +109,11 @@ enum exp_opcode 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 +122,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 +164,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 +180,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. @@ -223,6 +232,13 @@ enum exp_opcode 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,7 +266,7 @@ enum exp_opcode UNOP_ODD, UNOP_TRUNC, - /* Chill builtin functions. */ + /* (The deleted) Chill builtin functions. */ UNOP_LOWER, UNOP_UPPER, UNOP_LENGTH, UNOP_CARD, UNOP_CHMAX, UNOP_CHMIN, OP_BOOL, /* Modula-2 builtin BOOLEAN type */ @@ -270,22 +286,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 +323,36 @@ 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, + + /* 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 { + 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. */ }; union exp_element @@ -308,17 +361,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]; }; @@ -333,9 +389,15 @@ struct expression /* From parse.c */ -extern struct expression *parse_expression PARAMS ((char *)); +extern struct expression *parse_expression (char *); + +extern struct type *parse_field_expression (char *, char **); + +extern struct expression *parse_exp_1 (char **, struct block *, int); -extern struct expression *parse_exp_1 PARAMS ((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 @@ -362,19 +424,15 @@ enum noside }; extern struct value *evaluate_subexp_standard - PARAMS ((struct type *, struct expression *, int *, enum noside)); + (struct type *, struct expression *, int *, enum noside); /* From expprint.c */ -extern void print_expression PARAMS ((struct expression *, GDB_FILE *)); +extern void print_expression (struct expression *, struct ui_file *); -extern char *op_string PARAMS ((enum exp_opcode)); +extern char *op_string (enum exp_opcode); -extern void dump_prefix_expression PARAMS ((struct expression *, - GDB_FILE *, - char *)); -extern void dump_postfix_expression PARAMS ((struct expression *, - GDB_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) */