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) */