Introduce dwarf2/public.h
[deliverable/binutils-gdb.git] / gdb / expprint.c
CommitLineData
c906108c 1/* Print in infix form a struct expression.
1bac305b 2
3666a048 3 Copyright (C) 1986-2021 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#include "defs.h"
4de283e4 21#include "symtab.h"
d55e5aa6 22#include "gdbtypes.h"
4de283e4
TT
23#include "expression.h"
24#include "value.h"
c906108c
SS
25#include "language.h"
26#include "parser-defs.h"
4de283e4 27#include "user-regs.h" /* For user_reg_map_regnum_to_name. */
82eeeb94 28#include "target.h"
4de283e4
TT
29#include "block.h"
30#include "objfiles.h"
79a45b7d 31#include "valprint.h"
7f6aba03 32#include "cli/cli-style.h"
de401988
TT
33#include "c-lang.h"
34#include "expop.h"
a88c4354 35#include "ada-exp.h"
4de283e4
TT
36
37#include <ctype.h>
c906108c 38
5f9769d1
PH
39/* Default name for the standard operator OPCODE (i.e., one defined in
40 the definition of enum exp_opcode). */
41
a121b7c1 42const char *
88b91969 43op_name (enum exp_opcode opcode)
c906108c
SS
44{
45 switch (opcode)
46 {
47 default:
48 {
49 static char buf[30];
50
08850b56 51 xsnprintf (buf, sizeof (buf), "<unknown %d>", opcode);
c906108c
SS
52 return buf;
53 }
56c12414
JK
54#define OP(name) \
55 case name: \
56 return #name ;
57#include "std-operator.def"
58#undef OP
c906108c
SS
59 }
60}
61
c906108c 62void
24daaebc 63dump_prefix_expression (struct expression *exp, struct ui_file *stream)
c906108c 64{
1eaebe02 65 exp->op->dump (stream, 0);
c906108c 66}
de401988
TT
67
68namespace expr
69{
70
71void
72dump_for_expression (struct ui_file *stream, int depth, enum exp_opcode op)
73{
74 fprintf_filtered (stream, _("%*sOperation: %s\n"), depth, "", op_name (op));
75}
76
77void
78dump_for_expression (struct ui_file *stream, int depth, const std::string &str)
79{
80 fprintf_filtered (stream, _("%*sString: %s\n"), depth, "", str.c_str ());
81}
82
83void
84dump_for_expression (struct ui_file *stream, int depth, struct type *type)
85{
86 fprintf_filtered (stream, _("%*sType: "), depth, "");
87 type_print (type, nullptr, stream, 0);
88 fprintf_filtered (stream, "\n");
89}
90
91void
92dump_for_expression (struct ui_file *stream, int depth, CORE_ADDR addr)
93{
94 fprintf_filtered (stream, _("%*sConstant: %s\n"), depth, "",
95 core_addr_to_string (addr));
96}
97
98void
99dump_for_expression (struct ui_file *stream, int depth, internalvar *ivar)
100{
101 fprintf_filtered (stream, _("%*sInternalvar: $%s\n"), depth, "",
102 internalvar_name (ivar));
103}
104
105void
106dump_for_expression (struct ui_file *stream, int depth, symbol *sym)
107{
108 fprintf_filtered (stream, _("%*sSymbol: %s\n"), depth, "",
109 sym->print_name ());
110}
111
112void
9c79936b
TT
113dump_for_expression (struct ui_file *stream, int depth,
114 bound_minimal_symbol msym)
de401988 115{
9c79936b
TT
116 fprintf_filtered (stream, _("%*sMinsym %s in objfile %s\n"), depth, "",
117 msym.minsym->print_name (), objfile_name (msym.objfile));
de401988
TT
118}
119
120void
121dump_for_expression (struct ui_file *stream, int depth, const block *bl)
122{
123 fprintf_filtered (stream, _("%*sBlock: %p\n"), depth, "", bl);
124}
125
126void
127dump_for_expression (struct ui_file *stream, int depth,
128 type_instance_flags flags)
129{
130 fprintf_filtered (stream, _("%*sType flags: "), depth, "");
131 if (flags & TYPE_INSTANCE_FLAG_CONST)
132 fputs_unfiltered ("const ", stream);
133 if (flags & TYPE_INSTANCE_FLAG_VOLATILE)
134 fputs_unfiltered ("volatile", stream);
135 fprintf_filtered (stream, "\n");
136}
137
138void
139dump_for_expression (struct ui_file *stream, int depth,
140 enum c_string_type_values flags)
141{
142 fprintf_filtered (stream, _("%*sC string flags: "), depth, "");
143 switch (flags & ~C_CHAR)
144 {
145 case C_WIDE_STRING:
146 fputs_unfiltered (_("wide "), stream);
147 break;
148 case C_STRING_16:
149 fputs_unfiltered (_("u16 "), stream);
150 break;
151 case C_STRING_32:
152 fputs_unfiltered (_("u32 "), stream);
153 break;
154 default:
155 fputs_unfiltered (_("ordinary "), stream);
156 break;
157 }
158
159 if ((flags & C_CHAR) != 0)
160 fputs_unfiltered (_("char"), stream);
161 else
162 fputs_unfiltered (_("string"), stream);
163 fputs_unfiltered ("\n", stream);
164}
165
de401988
TT
166void
167dump_for_expression (struct ui_file *stream, int depth,
168 enum range_flag flags)
169{
170 fprintf_filtered (stream, _("%*sRange:"), depth, "");
171 if ((flags & RANGE_LOW_BOUND_DEFAULT) != 0)
172 fputs_unfiltered (_("low-default "), stream);
173 if ((flags & RANGE_HIGH_BOUND_DEFAULT) != 0)
174 fputs_unfiltered (_("high-default "), stream);
175 if ((flags & RANGE_HIGH_BOUND_EXCLUSIVE) != 0)
176 fputs_unfiltered (_("high-exclusive "), stream);
177 if ((flags & RANGE_HAS_STRIDE) != 0)
178 fputs_unfiltered (_("has-stride"), stream);
179 fprintf_filtered (stream, "\n");
180}
181
a88c4354
TT
182void
183dump_for_expression (struct ui_file *stream, int depth,
184 const std::unique_ptr<ada_component> &comp)
185{
186 comp->dump (stream, depth);
187}
188
cae26a0c
TT
189void
190float_const_operation::dump (struct ui_file *stream, int depth) const
191{
192 fprintf_filtered (stream, _("%*sFloat: "), depth, "");
193 print_floating (m_data.data (), m_type, stream);
194 fprintf_filtered (stream, "\n");
195}
196
de401988 197} /* namespace expr */
This page took 3.034334 seconds and 4 git commands to generate.