xref: /dragonfly/contrib/gdb-7/gdb/expression.h (revision 6e278935)
1 /* Definitions for expressions stored in reversed prefix form, for GDB.
2 
3    Copyright (C) 1986, 1989, 1992, 1994, 2000, 2003, 2005, 2007, 2008, 2009,
4    2010, 2011 Free Software Foundation, Inc.
5 
6    This file is part of GDB.
7 
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12 
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17 
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20 
21 #if !defined (EXPRESSION_H)
22 #define EXPRESSION_H 1
23 
24 
25 #include "symtab.h"		/* Needed for "struct block" type.  */
26 #include "doublest.h"		/* Needed for DOUBLEST.  */
27 
28 
29 /* Definitions for saved C expressions.  */
30 
31 /* An expression is represented as a vector of union exp_element's.
32    Each exp_element is an opcode, except that some opcodes cause
33    the following exp_element to be treated as a long or double constant
34    or as a variable.  The opcodes are obeyed, using a stack for temporaries.
35    The value is left on the temporary stack at the end.  */
36 
37 /* When it is necessary to include a string,
38    it can occupy as many exp_elements as it needs.
39    We find the length of the string using strlen,
40    divide to find out how many exp_elements are used up,
41    and skip that many.  Strings, like numbers, are indicated
42    by the preceding opcode.  */
43 
44 enum exp_opcode
45   {
46 #define OP(name) name ,
47 
48 #include "std-operator.def"
49 
50     /* First extension operator.  Individual language modules define extra
51        operators in *.def include files below with numbers higher than
52        OP_EXTENDED0.  */
53     OP (OP_EXTENDED0)
54 
55 /* Language specific operators.  */
56 #include "ada-operator.def"
57 
58 #undef OP
59 
60     /* Existing only to swallow the last comma (',') from last .inc file.  */
61     OP_UNUSED_LAST
62   };
63 
64 union exp_element
65   {
66     enum exp_opcode opcode;
67     struct symbol *symbol;
68     LONGEST longconst;
69     DOUBLEST doubleconst;
70     gdb_byte decfloatconst[16];
71     /* Really sizeof (union exp_element) characters (or less for the last
72        element of a string).  */
73     char string;
74     struct type *type;
75     struct internalvar *internalvar;
76     struct block *block;
77     struct objfile *objfile;
78   };
79 
80 struct expression
81   {
82     const struct language_defn *language_defn;	/* language it was
83 						   entered in.  */
84     struct gdbarch *gdbarch;  /* architecture it was parsed in.  */
85     int nelts;
86     union exp_element elts[1];
87   };
88 
89 /* Macros for converting between number of expression elements and bytes
90    to store that many expression elements.  */
91 
92 #define EXP_ELEM_TO_BYTES(elements) \
93     ((elements) * sizeof (union exp_element))
94 #define BYTES_TO_EXP_ELEM(bytes) \
95     (((bytes) + sizeof (union exp_element) - 1) / sizeof (union exp_element))
96 
97 /* From parse.c */
98 
99 extern struct expression *parse_expression (char *);
100 
101 extern struct type *parse_field_expression (char *, char **);
102 
103 extern struct expression *parse_exp_1 (char **, struct block *, int);
104 
105 /* For use by parsers; set if we want to parse an expression and
106    attempt to complete a field name.  */
107 extern int in_parse_field;
108 
109 /* The innermost context required by the stack and register variables
110    we've encountered so far.  To use this, set it to NULL, then call
111    parse_<whatever>, then look at it.  */
112 extern struct block *innermost_block;
113 
114 /* From eval.c */
115 
116 /* Values of NOSIDE argument to eval_subexp.  */
117 
118 enum noside
119   {
120     EVAL_NORMAL,
121     EVAL_SKIP,			/* Only effect is to increment pos.  */
122     EVAL_AVOID_SIDE_EFFECTS	/* Don't modify any variables or
123 				   call any functions.  The value
124 				   returned will have the correct
125 				   type, and will have an
126 				   approximately correct lvalue
127 				   type (inaccuracy: anything that is
128 				   listed as being in a register in
129 				   the function in which it was
130 				   declared will be lval_register).  */
131   };
132 
133 extern struct value *evaluate_subexp_standard
134   (struct type *, struct expression *, int *, enum noside);
135 
136 /* From expprint.c */
137 
138 extern void print_expression (struct expression *, struct ui_file *);
139 
140 extern char *op_string (enum exp_opcode);
141 
142 extern void dump_raw_expression (struct expression *,
143 				 struct ui_file *, char *);
144 extern void dump_prefix_expression (struct expression *, struct ui_file *);
145 
146 #endif /* !defined (EXPRESSION_H) */
147