remote: Fix indentation in remote_new_objfile.
[deliverable/binutils-gdb.git] / gdb / expprint.c
... / ...
CommitLineData
1/* Print in infix form a struct expression.
2
3 Copyright (C) 1986-2021 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#include "defs.h"
21#include "symtab.h"
22#include "gdbtypes.h"
23#include "expression.h"
24#include "value.h"
25#include "language.h"
26#include "parser-defs.h"
27#include "user-regs.h" /* For user_reg_map_regnum_to_name. */
28#include "target.h"
29#include "block.h"
30#include "objfiles.h"
31#include "valprint.h"
32#include "cli/cli-style.h"
33#include "c-lang.h"
34#include "expop.h"
35#include "ada-exp.h"
36
37#include <ctype.h>
38
39/* Default name for the standard operator OPCODE (i.e., one defined in
40 the definition of enum exp_opcode). */
41
42const char *
43op_name (enum exp_opcode opcode)
44{
45 switch (opcode)
46 {
47 default:
48 {
49 static char buf[30];
50
51 xsnprintf (buf, sizeof (buf), "<unknown %d>", opcode);
52 return buf;
53 }
54#define OP(name) \
55 case name: \
56 return #name ;
57#include "std-operator.def"
58#undef OP
59 }
60}
61
62void
63dump_prefix_expression (struct expression *exp, struct ui_file *stream)
64{
65 exp->op->dump (stream, 0);
66}
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
113dump_for_expression (struct ui_file *stream, int depth,
114 bound_minimal_symbol msym)
115{
116 fprintf_filtered (stream, _("%*sMinsym %s in objfile %s\n"), depth, "",
117 msym.minsym->print_name (), objfile_name (msym.objfile));
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 const block_symbol &sym)
129{
130 fprintf_filtered (stream, _("%*sBlock symbol:\n"), depth, "");
131 dump_for_expression (stream, depth + 1, sym.symbol);
132 dump_for_expression (stream, depth + 1, sym.block);
133}
134
135void
136dump_for_expression (struct ui_file *stream, int depth,
137 type_instance_flags flags)
138{
139 fprintf_filtered (stream, _("%*sType flags: "), depth, "");
140 if (flags & TYPE_INSTANCE_FLAG_CONST)
141 fputs_unfiltered ("const ", stream);
142 if (flags & TYPE_INSTANCE_FLAG_VOLATILE)
143 fputs_unfiltered ("volatile", stream);
144 fprintf_filtered (stream, "\n");
145}
146
147void
148dump_for_expression (struct ui_file *stream, int depth,
149 enum c_string_type_values flags)
150{
151 fprintf_filtered (stream, _("%*sC string flags: "), depth, "");
152 switch (flags & ~C_CHAR)
153 {
154 case C_WIDE_STRING:
155 fputs_unfiltered (_("wide "), stream);
156 break;
157 case C_STRING_16:
158 fputs_unfiltered (_("u16 "), stream);
159 break;
160 case C_STRING_32:
161 fputs_unfiltered (_("u32 "), stream);
162 break;
163 default:
164 fputs_unfiltered (_("ordinary "), stream);
165 break;
166 }
167
168 if ((flags & C_CHAR) != 0)
169 fputs_unfiltered (_("char"), stream);
170 else
171 fputs_unfiltered (_("string"), stream);
172 fputs_unfiltered ("\n", stream);
173}
174
175void
176dump_for_expression (struct ui_file *stream, int depth,
177 enum range_flag flags)
178{
179 fprintf_filtered (stream, _("%*sRange:"), depth, "");
180 if ((flags & RANGE_LOW_BOUND_DEFAULT) != 0)
181 fputs_unfiltered (_("low-default "), stream);
182 if ((flags & RANGE_HIGH_BOUND_DEFAULT) != 0)
183 fputs_unfiltered (_("high-default "), stream);
184 if ((flags & RANGE_HIGH_BOUND_EXCLUSIVE) != 0)
185 fputs_unfiltered (_("high-exclusive "), stream);
186 if ((flags & RANGE_HAS_STRIDE) != 0)
187 fputs_unfiltered (_("has-stride"), stream);
188 fprintf_filtered (stream, "\n");
189}
190
191void
192dump_for_expression (struct ui_file *stream, int depth,
193 const std::unique_ptr<ada_component> &comp)
194{
195 comp->dump (stream, depth);
196}
197
198void
199float_const_operation::dump (struct ui_file *stream, int depth) const
200{
201 fprintf_filtered (stream, _("%*sFloat: "), depth, "");
202 print_floating (m_data.data (), m_type, stream);
203 fprintf_filtered (stream, "\n");
204}
205
206} /* namespace expr */
This page took 0.031163 seconds and 4 git commands to generate.