X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fexpression.h;h=fe5f8fc9a48cc043ff77acc9ea1251322e40dd73;hb=359551a8df2a84a9cb5b4dffc8892a74f1659e68;hp=773a73806fd8c631a49be354e2218bd89017a4df;hpb=f2047500e5dd39598660591c6661330ba195f730;p=deliverable%2Fbinutils-gdb.git
diff --git a/gdb/expression.h b/gdb/expression.h
index 773a73806f..fe5f8fc9a4 100644
--- a/gdb/expression.h
+++ b/gdb/expression.h
@@ -1,13 +1,13 @@
/* Definitions for expressions stored in reversed prefix form, for GDB.
- Copyright 1986, 1989, 1992, 1994, 2000, 2003 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,
@@ -16,9 +16,7 @@
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
@@ -166,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.
@@ -196,8 +193,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.
@@ -234,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. */
@@ -318,12 +323,17 @@ 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
@@ -351,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];
};
@@ -378,10 +391,14 @@ struct expression
extern struct expression *parse_expression (char *);
-extern struct expression *parse_expression_in_context (char *, int);
+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. */