GDB (xrefs)

/tmp/gdb-8.1/gdb/expression.h
Go to the documentation of this file.
1 /* Definitions for expressions stored in reversed prefix form, for GDB.
2
3 Copyright (C) 1986-2018 Free Software Foundation, Inc.
4
5 This file is part of GDB.
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19
20 #if !defined (EXPRESSION_H)
21 #define EXPRESSION_H 1
22
23
24 #include "symtab.h" /* Needed for "struct block" type. */
25
26
27 /* Definitions for saved C expressions. */
28
29 /* An expression is represented as a vector of union exp_element's.
30 Each exp_element is an opcode, except that some opcodes cause
31 the following exp_element to be treated as a long or double constant
32 or as a variable. The opcodes are obeyed, using a stack for temporaries.
33 The value is left on the temporary stack at the end. */
34
35 /* When it is necessary to include a string,
36 it can occupy as many exp_elements as it needs.
37 We find the length of the string using strlen,
38 divide to find out how many exp_elements are used up,
39 and skip that many. Strings, like numbers, are indicated
40 by the preceding opcode. */
41
42 enum exp_opcode
43 {
44 #define OP(name) name ,
45
46 #include "std-operator.def"
47
48 /* First extension operator. Individual language modules define extra
49 operators in *.def include files below with numbers higher than
50 OP_EXTENDED0. */
51 OP (OP_EXTENDED0)
52
53 /* Language specific operators. */
54 #include "ada-operator.def"
55
56 #undef OP
57
58 /* Existing only to swallow the last comma (',') from last .inc file. */
59 OP_UNUSED_LAST
60 };
61
62 union exp_element
63 {
64 enum exp_opcode opcode;
65 struct symbol *symbol;
66 struct minimal_symbol *msymbol;
67 LONGEST longconst;
68 gdb_byte floatconst[16];
69 /* Really sizeof (union exp_element) characters (or less for the last
70 element of a string). */
71 char string;
72 struct type *type;
73 struct internalvar *internalvar;
74 const struct block *block;
75 struct objfile *objfile;
76 };
77
78 struct expression
79 {
80 const struct language_defn *language_defn; /* language it was
81 entered in. */
82 struct gdbarch *gdbarch; /* architecture it was parsed in. */
83 int nelts;
84 union exp_element elts[1];
85 };
86
87 typedef gdb::unique_xmalloc_ptr<expression> expression_up;
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 expression_up parse_expression (const char *);
100
101 extern expression_up parse_expression_with_language (const char *string,
102 enum language lang);
103
104 extern struct type *parse_expression_for_completion (const char *, char **,
105 enum type_code *);
106
107 extern expression_up parse_exp_1 (const char **, CORE_ADDR pc,
108 const struct block *, int);
109
110 /* For use by parsers; set if we want to parse an expression and
111 attempt completion. */
112 extern int parse_completion;
113
114 /* The innermost context required by the stack and register variables
115 we've encountered so far. To use this, set it to NULL, then call
116 parse_<whatever>, then look at it. */
117 extern const struct block *innermost_block;
118
119 /* From eval.c */
120
121 /* Values of NOSIDE argument to eval_subexp. */
122
123 enum noside
124 {
125 EVAL_NORMAL,
126 EVAL_SKIP, /* Only effect is to increment pos. */
127 EVAL_AVOID_SIDE_EFFECTS /* Don't modify any variables or
128 call any functions. The value
129 returned will have the correct
130 type, and will have an
131 approximately correct lvalue
132 type (inaccuracy: anything that is
133 listed as being in a register in
134 the function in which it was
135 declared will be lval_register).
136 Ideally this would not even read
137 target memory, but currently it
138 does in many situations. */
139 };
140
141 extern struct value *evaluate_subexp_standard
142 (struct type *, struct expression *, int *, enum noside);
143
144 /* From expprint.c */
145
146 extern void print_expression (struct expression *, struct ui_file *);
147
148 extern const char *op_name (struct expression *exp, enum exp_opcode opcode);
149
150 extern const char *op_string (enum exp_opcode);
151
152 extern void dump_raw_expression (struct expression *,
153 struct ui_file *, const char *);
154 extern void dump_prefix_expression (struct expression *, struct ui_file *);
155
156 /* In an OP_RANGE expression, either bound could be empty, indicating
157 that its value is by default that of the corresponding bound of the
158 array or string. So we have four sorts of subrange. This
159 enumeration type is to identify this. */
160
161 enum range_type
162 {
163 BOTH_BOUND_DEFAULT, /* "(:)" */
164 LOW_BOUND_DEFAULT, /* "(:high)" */
165 HIGH_BOUND_DEFAULT, /* "(low:)" */
166 NONE_BOUND_DEFAULT /* "(low:high)" */
167 };
168
169 #endif /* !defined (EXPRESSION_H) */
gdbarch
Definition: gdbarch.c:127
expression::elts
union exp_element elts[1]
Definition: expression.h:84
type_code
type_code
Definition: gdbtypes.h:80
op_name
const char * op_name(struct expression *exp, enum exp_opcode opcode)
Definition: expprint.c:686
exp_element::opcode
enum exp_opcode opcode
Definition: expression.h:64
CORE_ADDR
bfd_vma CORE_ADDR
Definition: common-types.h:41
noside
noside
Definition: expression.h:123
expression_up
gdb::unique_xmalloc_ptr< expression > expression_up
Definition: expression.h:87
EVAL_NORMAL
Definition: expression.h:125
parse_completion
int parse_completion
Definition: parse.c:80
expression::language_defn
const struct language_defn * language_defn
Definition: expression.h:80
parse_exp_1
expression_up parse_exp_1(const char **, CORE_ADDR pc, const struct block *, int)
Definition: parse.c:1089
innermost_block
const struct block * innermost_block
Definition: parse.c:71
expression::nelts
int nelts
Definition: expression.h:83
ui_file
Definition: ui-file.h:26
internalvar
Definition: value.c:2070
exp_element::internalvar
struct internalvar * internalvar
Definition: expression.h:73
language_defn
Definition: language.h:132
exp_element::symbol
struct symbol * symbol
Definition: expression.h:65
LOW_BOUND_DEFAULT
Definition: expression.h:164
exp_element::type
struct type * type
Definition: expression.h:72
symtab.h
exp_element::block
const struct block * block
Definition: expression.h:74
gdb::unique_xmalloc_ptr
std::unique_ptr< T, xfree_deleter< T > > unique_xmalloc_ptr
Definition: gdb_unique_ptr.h:48
expression
Definition: expression.h:78
HIGH_BOUND_DEFAULT
Definition: expression.h:165
type
Definition: gdbtypes.h:749
exp_element::string
char string
Definition: expression.h:71
EVAL_AVOID_SIDE_EFFECTS
Definition: expression.h:127
EVAL_SKIP
Definition: expression.h:126
exp_element::floatconst
gdb_byte floatconst[16]
Definition: expression.h:68
dump_prefix_expression
void dump_prefix_expression(struct expression *, struct ui_file *)
Definition: expprint.c:1139
block
Definition: block.h:60
value
Definition: value.c:169
exp_element::msymbol
struct minimal_symbol * msymbol
Definition: expression.h:66
OP
#define OP(name)
Definition: expression.h:44
objfile
Definition: objfiles.h:286
gdb_byte
bfd_byte gdb_byte
Definition: common-types.h:38
evaluate_subexp_standard
struct value * evaluate_subexp_standard(struct type *, struct expression *, int *, enum noside)
exp_element
Definition: expression.h:62
dump_raw_expression
void dump_raw_expression(struct expression *, struct ui_file *, const char *)
Definition: expprint.c:718
print_expression
void print_expression(struct expression *, struct ui_file *)
Definition: expprint.c:36
exp_opcode
exp_opcode
Definition: expression.h:42
exp_element::objfile
struct objfile * objfile
Definition: expression.h:75
exp_element::longconst
LONGEST longconst
Definition: expression.h:67
language
language
Definition: defs.h:203
parse_expression
expression_up parse_expression(const char *)
Definition: parse.c:1237
expression::gdbarch
struct gdbarch * gdbarch
Definition: expression.h:82
op_string
const char * op_string(enum exp_opcode)
Definition: expprint.c:666
range_type
range_type
Definition: expression.h:161
symbol
Definition: symtab.h:1049
BOTH_BOUND_DEFAULT
Definition: expression.h:163
parse_expression_for_completion
struct type * parse_expression_for_completion(const char *, char **, enum type_code *)
Definition: parse.c:1270
minimal_symbol
Definition: symtab.h:623
NONE_BOUND_DEFAULT
Definition: expression.h:166
parse_expression_with_language
expression_up parse_expression_with_language(const char *string, enum language lang)
Definition: parse.c:1249
LONGEST
long long LONGEST
Definition: common-types.h:52