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 
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 
63  {
65  struct symbol *symbol;
69  /* Really sizeof (union exp_element) characters (or less for the last
70  element of a string). */
71  char string;
72  struct type *type;
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 
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  {
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 
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) */
union exp_element elts[1]
Definition: expression.h:84
type_code
Definition: gdbtypes.h:80
const char * op_name(struct expression *exp, enum exp_opcode opcode)
Definition: expprint.c:686
enum exp_opcode opcode
Definition: expression.h:64
bfd_vma CORE_ADDR
Definition: common-types.h:41
noside
Definition: expression.h:123
gdb::unique_xmalloc_ptr< expression > expression_up
Definition: expression.h:87
int parse_completion
Definition: parse.c:80
const struct language_defn * language_defn
Definition: expression.h:80
expression_up parse_exp_1(const char **, CORE_ADDR pc, const struct block *, int)
Definition: parse.c:1089
const struct block * innermost_block
Definition: parse.c:71
struct internalvar * internalvar
Definition: expression.h:73
struct symbol * symbol
Definition: expression.h:65
struct type * type
Definition: expression.h:72
const struct block * block
Definition: expression.h:74
std::unique_ptr< T, xfree_deleter< T > > unique_xmalloc_ptr
Definition: gdbtypes.h:749
char string
Definition: expression.h:71
gdb_byte floatconst[16]
Definition: expression.h:68
void dump_prefix_expression(struct expression *, struct ui_file *)
Definition: expprint.c:1139
Definition: block.h:60
Definition: value.c:169
struct minimal_symbol * msymbol
Definition: expression.h:66
#define OP(name)
Definition: expression.h:44
bfd_byte gdb_byte
Definition: common-types.h:38
struct value * evaluate_subexp_standard(struct type *, struct expression *, int *, enum noside)
void dump_raw_expression(struct expression *, struct ui_file *, const char *)
Definition: expprint.c:718
void print_expression(struct expression *, struct ui_file *)
Definition: expprint.c:36
exp_opcode
Definition: expression.h:42
struct objfile * objfile
Definition: expression.h:75
LONGEST longconst
Definition: expression.h:67
language
Definition: defs.h:203
expression_up parse_expression(const char *)
Definition: parse.c:1237
struct gdbarch * gdbarch
Definition: expression.h:82
const char * op_string(enum exp_opcode)
Definition: expprint.c:666
range_type
Definition: expression.h:161
struct type * parse_expression_for_completion(const char *, char **, enum type_code *)
Definition: parse.c:1270
expression_up parse_expression_with_language(const char *string, enum language lang)
Definition: parse.c:1249
long long LONGEST
Definition: common-types.h:52