Commit | Line | Data |
---|---|---|
c906108c | 1 | /* Definitions for expressions stored in reversed prefix form, for GDB. |
1bac305b | 2 | |
e2882c85 | 3 | Copyright (C) 1986-2018 Free Software Foundation, Inc. |
c906108c | 4 | |
c5aa993b | 5 | This file is part of GDB. |
c906108c | 6 | |
c5aa993b JM |
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 | |
a9762ec7 | 9 | the Free Software Foundation; either version 3 of the License, or |
c5aa993b | 10 | (at your option) any later version. |
c906108c | 11 | |
c5aa993b JM |
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. | |
c906108c | 16 | |
c5aa993b | 17 | You should have received a copy of the GNU General Public License |
a9762ec7 | 18 | along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
c906108c SS |
19 | |
20 | #if !defined (EXPRESSION_H) | |
21 | #define EXPRESSION_H 1 | |
22 | ||
23 | ||
0963b4bd | 24 | #include "symtab.h" /* Needed for "struct block" type. */ |
c906108c SS |
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 | |
c5aa993b | 43 | { |
56c12414 | 44 | #define OP(name) name , |
c906108c | 45 | |
56c12414 | 46 | #include "std-operator.def" |
c906108c | 47 | |
56c12414 JK |
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) | |
c5aa993b | 52 | |
56c12414 JK |
53 | /* Language specific operators. */ |
54 | #include "ada-operator.def" | |
c5aa993b | 55 | |
56c12414 | 56 | #undef OP |
8285870a JK |
57 | |
58 | /* Existing only to swallow the last comma (',') from last .inc file. */ | |
59 | OP_UNUSED_LAST | |
c5aa993b | 60 | }; |
c906108c SS |
61 | |
62 | union exp_element | |
c5aa993b JM |
63 | { |
64 | enum exp_opcode opcode; | |
65 | struct symbol *symbol; | |
74ea4be4 | 66 | struct minimal_symbol *msymbol; |
c5aa993b | 67 | LONGEST longconst; |
edd079d9 | 68 | gdb_byte floatconst[16]; |
c5aa993b JM |
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; | |
270140bd | 74 | const struct block *block; |
9e35dae4 | 75 | struct objfile *objfile; |
c5aa993b | 76 | }; |
c906108c SS |
77 | |
78 | struct expression | |
c5aa993b | 79 | { |
3e43a32a | 80 | const struct language_defn *language_defn; /* language it was |
0963b4bd MS |
81 | entered in. */ |
82 | struct gdbarch *gdbarch; /* architecture it was parsed in. */ | |
c5aa993b JM |
83 | int nelts; |
84 | union exp_element elts[1]; | |
85 | }; | |
c906108c | 86 | |
4d01a485 PA |
87 | typedef gdb::unique_xmalloc_ptr<expression> expression_up; |
88 | ||
c906108c | 89 | /* Macros for converting between number of expression elements and bytes |
0963b4bd | 90 | to store that many expression elements. */ |
c906108c SS |
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 | ||
4d01a485 | 99 | extern expression_up parse_expression (const char *); |
c906108c | 100 | |
4d01a485 PA |
101 | extern expression_up parse_expression_with_language (const char *string, |
102 | enum language lang); | |
429e1e81 | 103 | |
6f937416 | 104 | extern struct type *parse_expression_for_completion (const char *, char **, |
2f68a895 | 105 | enum type_code *); |
65d12d83 | 106 | |
4d01a485 PA |
107 | extern expression_up parse_exp_1 (const char **, CORE_ADDR pc, |
108 | const struct block *, int); | |
c906108c | 109 | |
65d12d83 | 110 | /* For use by parsers; set if we want to parse an expression and |
155da517 TT |
111 | attempt completion. */ |
112 | extern int parse_completion; | |
65d12d83 | 113 | |
c906108c SS |
114 | /* From eval.c */ |
115 | ||
389e51db | 116 | /* Values of NOSIDE argument to eval_subexp. */ |
c906108c SS |
117 | |
118 | enum noside | |
c5aa993b JM |
119 | { |
120 | EVAL_NORMAL, | |
121 | EVAL_SKIP, /* Only effect is to increment pos. */ | |
122 | EVAL_AVOID_SIDE_EFFECTS /* Don't modify any variables or | |
c906108c SS |
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 | |
fce632b6 TT |
130 | declared will be lval_register). |
131 | Ideally this would not even read | |
132 | target memory, but currently it | |
133 | does in many situations. */ | |
c5aa993b | 134 | }; |
c906108c | 135 | |
c5aa993b | 136 | extern struct value *evaluate_subexp_standard |
a14ed312 | 137 | (struct type *, struct expression *, int *, enum noside); |
c906108c SS |
138 | |
139 | /* From expprint.c */ | |
140 | ||
d9fcf2fb | 141 | extern void print_expression (struct expression *, struct ui_file *); |
c906108c | 142 | |
a121b7c1 | 143 | extern const char *op_name (struct expression *exp, enum exp_opcode opcode); |
bd0b9f9e | 144 | |
a121b7c1 | 145 | extern const char *op_string (enum exp_opcode); |
c906108c | 146 | |
3e43a32a | 147 | extern void dump_raw_expression (struct expression *, |
a121b7c1 | 148 | struct ui_file *, const char *); |
24daaebc | 149 | extern void dump_prefix_expression (struct expression *, struct ui_file *); |
c906108c | 150 | |
01739a3b TT |
151 | /* In an OP_RANGE expression, either bound could be empty, indicating |
152 | that its value is by default that of the corresponding bound of the | |
153 | array or string. So we have four sorts of subrange. This | |
154 | enumeration type is to identify this. */ | |
155 | ||
156 | enum range_type | |
157 | { | |
158 | BOTH_BOUND_DEFAULT, /* "(:)" */ | |
159 | LOW_BOUND_DEFAULT, /* "(:high)" */ | |
160 | HIGH_BOUND_DEFAULT, /* "(low:)" */ | |
161 | NONE_BOUND_DEFAULT /* "(low:high)" */ | |
162 | }; | |
163 | ||
c5aa993b | 164 | #endif /* !defined (EXPRESSION_H) */ |