GDB (xrefs)
/tmp/gdb-7.10/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-2015 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 #include "doublest.h" /* Needed for DOUBLEST. */
26 
27 
28 /* Definitions for saved C expressions. */
29 
30 /* An expression is represented as a vector of union exp_element's.
31  Each exp_element is an opcode, except that some opcodes cause
32  the following exp_element to be treated as a long or double constant
33  or as a variable. The opcodes are obeyed, using a stack for temporaries.
34  The value is left on the temporary stack at the end. */
35 
36 /* When it is necessary to include a string,
37  it can occupy as many exp_elements as it needs.
38  We find the length of the string using strlen,
39  divide to find out how many exp_elements are used up,
40  and skip that many. Strings, like numbers, are indicated
41  by the preceding opcode. */
42 
44  {
45 #define OP(name) name ,
46 
47 #include "std-operator.def"
48 
49  /* First extension operator. Individual language modules define extra
50  operators in *.def include files below with numbers higher than
51  OP_EXTENDED0. */
52  OP (OP_EXTENDED0)
53 
54 /* Language specific operators. */
55 #include "ada-operator.def"
56 
57 #undef OP
58 
59  /* Existing only to swallow the last comma (',') from last .inc file. */
60  OP_UNUSED_LAST
61  };
62 
64  {
66  struct symbol *symbol;
70  /* Really sizeof (union exp_element) characters (or less for the last
71  element of a string). */
72  char string;
73  struct type *type;
75  const struct block *block;
76  struct objfile *objfile;
77  };
78 
79 struct expression
80  {
81  const struct language_defn *language_defn; /* language it was
82  entered in. */
83  struct gdbarch *gdbarch; /* architecture it was parsed in. */
84  int nelts;
85  union exp_element elts[1];
86  };
87 
88 /* Macros for converting between number of expression elements and bytes
89  to store that many expression elements. */
90 
91 #define EXP_ELEM_TO_BYTES(elements) \
92  ((elements) * sizeof (union exp_element))
93 #define BYTES_TO_EXP_ELEM(bytes) \
94  (((bytes) + sizeof (union exp_element) - 1) / sizeof (union exp_element))
95 
96 /* From parse.c */
97 
98 extern struct expression *parse_expression (const char *);
99 
100 extern struct expression *parse_expression_with_language (const char *string,
101  enum language lang);
102 
103 extern struct type *parse_expression_for_completion (const char *, char **,
104  enum type_code *);
105 
106 extern struct expression *parse_exp_1 (const char **, CORE_ADDR pc,
107  const struct block *, int);
108 
109 /* For use by parsers; set if we want to parse an expression and
110  attempt completion. */
111 extern int parse_completion;
112 
113 /* The innermost context required by the stack and register variables
114  we've encountered so far. To use this, set it to NULL, then call
115  parse_<whatever>, then look at it. */
116 extern const struct block *innermost_block;
117 
118 /* From eval.c */
119 
120 /* Values of NOSIDE argument to eval_subexp. */
121 
122 enum noside
123  {
125  EVAL_SKIP, /* Only effect is to increment pos. */
126  EVAL_AVOID_SIDE_EFFECTS /* Don't modify any variables or
127  call any functions. The value
128  returned will have the correct
129  type, and will have an
130  approximately correct lvalue
131  type (inaccuracy: anything that is
132  listed as being in a register in
133  the function in which it was
134  declared will be lval_register).
135  Ideally this would not even read
136  target memory, but currently it
137  does in many situations. */
138  };
139 
140 extern struct value *evaluate_subexp_standard
141  (struct type *, struct expression *, int *, enum noside);
142 
143 /* From expprint.c */
144 
145 extern void print_expression (struct expression *, struct ui_file *);
146 
147 extern char *op_name (struct expression *exp, enum exp_opcode opcode);
148 
149 extern char *op_string (enum exp_opcode);
150 
151 extern void dump_raw_expression (struct expression *,
152  struct ui_file *, char *);
153 extern void dump_prefix_expression (struct expression *, struct ui_file *);
154 
155 #endif /* !defined (EXPRESSION_H) */
union exp_element elts[1]
Definition: expression.h:85
type_code
Definition: gdbtypes.h:85
enum exp_opcode opcode
Definition: expression.h:65
bfd_vma CORE_ADDR
Definition: common-types.h:41
noside
Definition: expression.h:122
int parse_completion
Definition: parse.c:78
const struct language_defn * language_defn
Definition: expression.h:81
const struct block * innermost_block
Definition: parse.c:69
struct internalvar * internalvar
Definition: expression.h:74
struct symbol * symbol
Definition: expression.h:66
struct type * type
Definition: expression.h:73
const struct block * block
Definition: expression.h:75
double DOUBLEST
Definition: doublest.h:24
struct expression * parse_exp_1(const char **, CORE_ADDR pc, const struct block *, int)
Definition: parse.c:1109
struct expression * parse_expression_with_language(const char *string, enum language lang)
Definition: parse.c:1275
char * op_name(struct expression *exp, enum exp_opcode opcode)
Definition: expprint.c:653
DOUBLEST doubleconst
Definition: expression.h:68
Definition: gdbtypes.h:749
char string
Definition: expression.h:72
void dump_prefix_expression(struct expression *, struct ui_file *)
Definition: expprint.c:1044
struct expression * parse_expression(const char *)
Definition: parse.c:1261
Definition: block.h:60
Definition: value.c:172
#define OP(name)
Definition: expression.h:45
gdb_byte decfloatconst[16]
Definition: expression.h:69
bfd_byte gdb_byte
Definition: common-types.h:38
struct value * evaluate_subexp_standard(struct type *, struct expression *, int *, enum noside)
void print_expression(struct expression *, struct ui_file *)
Definition: expprint.c:36
exp_opcode
Definition: expression.h:43
struct objfile * objfile
Definition: expression.h:76
LONGEST longconst
Definition: expression.h:67
language
Definition: defs.h:167
struct gdbarch * gdbarch
Definition: expression.h:83
Definition: symtab.h:703
struct type * parse_expression_for_completion(const char *, char **, enum type_code *)
Definition: parse.c:1302
void dump_raw_expression(struct expression *, struct ui_file *, char *)
Definition: expprint.c:685
long long LONGEST
Definition: common-types.h:52
char * op_string(enum exp_opcode)
Definition: expprint.c:633