Lots of changes from David Mosberger-Tang; see ChangeLog and NOTES for details:
[deliverable/binutils-gdb.git] / gdb / ch-valprint.c
CommitLineData
a8a69e63 1/* Support for printing Chill values for GDB, the GNU debugger.
67e9b3b3
PS
2 Copyright 1986, 1988, 1989, 1991, 1992, 1993, 1994
3 Free Software Foundation, Inc.
a8a69e63
FF
4
5This file is part of GDB.
6
7This program is free software; you can redistribute it and/or modify
8it under the terms of the GNU General Public License as published by
9the Free Software Foundation; either version 2 of the License, or
10(at your option) any later version.
11
12This program is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15GNU General Public License for more details.
16
17You should have received a copy of the GNU General Public License
18along with this program; if not, write to the Free Software
19Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
20
21#include "defs.h"
22#include "obstack.h"
23#include "symtab.h"
24#include "gdbtypes.h"
25#include "valprint.h"
26#include "expression.h"
8fbdca53 27#include "value.h"
a8a69e63 28#include "language.h"
5e81259d 29#include "demangle.h"
100f92e2 30#include "c-lang.h" /* For c_val_print */
1c95d7ab
JK
31#include "typeprint.h"
32#include "ch-lang.h"
a8a69e63 33
8fbdca53 34static void
199b2450 35chill_print_value_fields PARAMS ((struct type *, char *, GDB_FILE *, int, int,
8fbdca53
FF
36 enum val_prettyprint, struct type **));
37
3bcf4181
PB
38\f
39/* Print integral scalar data VAL, of type TYPE, onto stdio stream STREAM.
40 Used to print data from type structures in a specified type. For example,
41 array bounds may be characters or booleans in some languages, and this
42 allows the ranges to be printed in their "natural" form rather than as
43 decimal integer values. */
44
45void
46chill_print_type_scalar (type, val, stream)
47 struct type *type;
48 LONGEST val;
49 GDB_FILE *stream;
50{
51 switch (TYPE_CODE (type))
52 {
53 case TYPE_CODE_RANGE:
54 if (TYPE_TARGET_TYPE (type))
55 {
56 chill_print_type_scalar (TYPE_TARGET_TYPE (type), val, stream);
57 return;
58 }
59 }
60 print_type_scalar (type, val, stream);
61}
a8a69e63 62\f
35f8a588
PB
63/* Print the elements of an array.
64 Similar to val_print_array_elements, but prints
65 element indexes (in Chill syntax). */
66
67static void
68chill_val_print_array_elements (type, valaddr, address, stream,
69 format, deref_ref, recurse, pretty)
70 struct type *type;
71 char *valaddr;
72 CORE_ADDR address;
73 GDB_FILE *stream;
74 int format;
75 int deref_ref;
76 int recurse;
77 enum val_prettyprint pretty;
78{
79 unsigned int i = 0;
80 unsigned int things_printed = 0;
81 unsigned len;
82 struct type *elttype;
83 struct type *range_type = TYPE_FIELD_TYPE (type, 0);
84 struct type *index_type = TYPE_TARGET_TYPE (range_type);
85 unsigned eltlen;
86 /* Position of the array element we are examining to see
87 whether it is repeated. */
88 unsigned int rep1;
89 /* Number of repetitions we have detected so far. */
90 unsigned int reps;
91 LONGEST low_bound = TYPE_FIELD_BITPOS (range_type, 0);
92 LONGEST high_bound = TYPE_FIELD_BITPOS (range_type, 1);
93
94 elttype = TYPE_TARGET_TYPE (type);
95 eltlen = TYPE_LENGTH (elttype);
96 len = TYPE_LENGTH (type) / eltlen;
97
98 annotate_array_section_begin (i, elttype);
99
100 for (; i < len && things_printed < print_max; i++)
101 {
102 if (i != 0)
103 {
104 if (prettyprint_arrays)
105 {
106 fprintf_filtered (stream, ",\n");
107 print_spaces_filtered (2 + 2 * recurse, stream);
108 }
109 else
110 {
111 fprintf_filtered (stream, ", ");
112 }
113 }
114 wrap_here (n_spaces (2 + 2 * recurse));
115
116 rep1 = i + 1;
117 reps = 1;
118 while ((rep1 < len) &&
119 !memcmp (valaddr + i * eltlen, valaddr + rep1 * eltlen, eltlen))
120 {
121 ++reps;
122 ++rep1;
123 }
124
125 fputs_filtered ("(", stream);
3bcf4181 126 chill_print_type_scalar (index_type, low_bound + i, stream);
35f8a588
PB
127 if (reps > 1)
128 {
129 fputs_filtered (":", stream);
3bcf4181
PB
130 chill_print_type_scalar (index_type, low_bound + i + reps - 1,
131 stream);
35f8a588
PB
132 fputs_filtered ("): ", stream);
133 val_print (elttype, valaddr + i * eltlen, 0, stream, format,
134 deref_ref, recurse + 1, pretty);
135
136 i = rep1 - 1;
137 things_printed += 1;
138 }
139 else
140 {
141 fputs_filtered ("): ", stream);
142 val_print (elttype, valaddr + i * eltlen, 0, stream, format,
143 deref_ref, recurse + 1, pretty);
144 annotate_elt ();
145 things_printed++;
146 }
147 }
148 annotate_array_section_end ();
149 if (i < len)
150 {
151 fprintf_filtered (stream, "...");
152 }
153}
154
a8a69e63
FF
155/* Print data of type TYPE located at VALADDR (within GDB), which came from
156 the inferior at address ADDRESS, onto stdio stream STREAM according to
157 FORMAT (a letter or 0 for natural format). The data at VALADDR is in
158 target byte order.
159
160 If the data are a string pointer, returns the number of string characters
161 printed.
162
163 If DEREF_REF is nonzero, then dereference references, otherwise just print
164 them like pointers.
165
166 The PRETTY parameter controls prettyprinting. */
167
168int
169chill_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
170 pretty)
171 struct type *type;
172 char *valaddr;
173 CORE_ADDR address;
199b2450 174 GDB_FILE *stream;
a8a69e63
FF
175 int format;
176 int deref_ref;
177 int recurse;
178 enum val_prettyprint pretty;
179{
a8a69e63 180 LONGEST val;
ec16f701 181 unsigned int i = 0; /* Number of characters printed. */
c7da3ed3 182 struct type *elttype;
c7da3ed3 183 CORE_ADDR addr;
a8a69e63
FF
184
185 switch (TYPE_CODE (type))
186 {
187 case TYPE_CODE_ARRAY:
188 if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0)
189 {
a8a69e63
FF
190 if (prettyprint_arrays)
191 {
192 print_spaces_filtered (2 + 2 * recurse, stream);
193 }
194 fprintf_filtered (stream, "[");
35f8a588
PB
195 chill_val_print_array_elements (type, valaddr, address, stream,
196 format, deref_ref, recurse, pretty);
a8a69e63
FF
197 fprintf_filtered (stream, "]");
198 }
199 else
200 {
201 error ("unimplemented in chill_val_print; unspecified array length");
202 }
203 break;
204
205 case TYPE_CODE_INT:
206 format = format ? format : output_format;
207 if (format)
208 {
209 print_scalar_formatted (valaddr, type, format, 0, stream);
210 }
211 else
212 {
213 val_print_type_code_int (type, valaddr, stream);
214 }
215 break;
216
217 case TYPE_CODE_CHAR:
218 format = format ? format : output_format;
219 if (format)
220 {
221 print_scalar_formatted (valaddr, type, format, 0, stream);
222 }
223 else
224 {
225 LA_PRINT_CHAR ((unsigned char) unpack_long (type, valaddr),
226 stream);
227 }
228 break;
229
230 case TYPE_CODE_FLT:
231 if (format)
232 {
233 print_scalar_formatted (valaddr, type, format, 0, stream);
234 }
235 else
236 {
237 print_floating (valaddr, type, stream);
238 }
239 break;
240
241 case TYPE_CODE_BOOL:
242 format = format ? format : output_format;
243 if (format)
244 {
245 print_scalar_formatted (valaddr, type, format, 0, stream);
246 }
247 else
248 {
61932a8e 249 /* FIXME: Why is this using builtin_type_chill_bool not type? */
a8a69e63
FF
250 val = unpack_long (builtin_type_chill_bool, valaddr);
251 fprintf_filtered (stream, val ? "TRUE" : "FALSE");
252 }
253 break;
254
255 case TYPE_CODE_UNDEF:
256 /* This happens (without TYPE_FLAG_STUB set) on systems which don't use
257 dbx xrefs (NO_DBX_XREFS in gcc) if a file has a "struct foo *bar"
258 and no complete type for struct foo in that file. */
259 fprintf_filtered (stream, "<incomplete type>");
260 break;
261
262 case TYPE_CODE_PTR:
c7da3ed3
FF
263 if (format && format != 's')
264 {
265 print_scalar_formatted (valaddr, type, format, 0, stream);
266 break;
267 }
268 addr = unpack_pointer (type, valaddr);
269 elttype = TYPE_TARGET_TYPE (type);
e10cfcaa
PB
270
271 /* We assume a NULL pointer is all zeros ... */
272 if (addr == 0)
273 {
274 fputs_filtered ("NULL", stream);
275 return 0;
276 }
c7da3ed3
FF
277
278 if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
279 {
280 /* Try to print what function it points to. */
281 print_address_demangle (addr, stream, demangle);
282 /* Return value is irrelevant except for string pointers. */
283 return (0);
284 }
285 if (addressprint && format != 's')
286 {
d24c0599 287 print_address_numeric (addr, 1, stream);
c7da3ed3
FF
288 }
289
290 /* For a pointer to char or unsigned char, also print the string
291 pointed to, unless pointer is null. */
c7da3ed3
FF
292 if (TYPE_LENGTH (elttype) == 1
293 && TYPE_CODE (elttype) == TYPE_CODE_CHAR
294 && (format == 0 || format == 's')
295 && addr != 0
296 && /* If print_max is UINT_MAX, the alloca below will fail.
297 In that case don't try to print the string. */
298 print_max < UINT_MAX)
299 {
8fbdca53 300 i = val_print_string (addr, 0, stream);
c7da3ed3
FF
301 }
302 /* Return number of characters printed, plus one for the
303 terminating null if we have "reached the end". */
304 return (i + (print_max && i != print_max));
305 break;
306
c4413e2c 307 case TYPE_CODE_STRING:
ec16f701
FF
308 i = TYPE_LENGTH (type);
309 LA_PRINT_STRING (stream, valaddr, i, 0);
c4413e2c
FF
310 /* Return number of characters printed, plus one for the terminating
311 null if we have "reached the end". */
312 return (i + (print_max && i != print_max));
313 break;
314
cba00921 315 case TYPE_CODE_BITSTRING:
e909f287 316 case TYPE_CODE_SET:
6f52d064 317 elttype = TYPE_INDEX_TYPE (type);
e10cfcaa
PB
318 check_stub_type (elttype);
319 if (TYPE_FLAGS (elttype) & TYPE_FLAG_STUB)
320 {
321 fprintf_filtered (stream, "<incomplete type>");
322 gdb_flush (stream);
323 break;
324 }
e909f287 325 {
e10cfcaa 326 struct type *range = elttype;
cba00921
PB
327 int low_bound = TYPE_LOW_BOUND (range);
328 int high_bound = TYPE_HIGH_BOUND (range);
e909f287 329 int i;
cba00921 330 int is_bitstring = TYPE_CODE (type) == TYPE_CODE_BITSTRING;
e909f287 331 int need_comma = 0;
e909f287
PB
332
333 if (is_bitstring)
334 fputs_filtered ("B'", stream);
335 else
336 fputs_filtered ("[", stream);
337 for (i = low_bound; i <= high_bound; i++)
338 {
339 int element = value_bit_index (type, valaddr, i);
340 if (is_bitstring)
341 fprintf_filtered (stream, "%d", element);
342 else if (element)
343 {
344 if (need_comma)
345 fputs_filtered (", ", stream);
3bcf4181 346 chill_print_type_scalar (range, i, stream);
e909f287
PB
347 need_comma = 1;
348
349 /* Look for a continuous range of true elements. */
350 if (i+1 <= high_bound && value_bit_index (type, valaddr, ++i))
351 {
352 int j = i; /* j is the upper bound so far of the range */
353 fputs_filtered (":", stream);
354 while (i+1 <= high_bound
355 && value_bit_index (type, valaddr, ++i))
356 j = i;
3bcf4181 357 chill_print_type_scalar (range, j, stream);
e909f287
PB
358 }
359 }
360 }
361 if (is_bitstring)
362 fputs_filtered ("'", stream);
363 else
364 fputs_filtered ("]", stream);
365 }
366 break;
367
8fbdca53 368 case TYPE_CODE_STRUCT:
6073b8de 369 if (chill_varying_type (type))
cba00921
PB
370 {
371 struct type *inner = TYPE_FIELD_TYPE (type, 1);
372 long length = unpack_long (TYPE_FIELD_TYPE (type, 0), valaddr);
373 char *data_addr = valaddr + TYPE_FIELD_BITPOS (type, 1) / 8;
374
375 switch (TYPE_CODE (inner))
376 {
377 case TYPE_CODE_STRING:
378 if (length > TYPE_LENGTH (type))
379 {
380 fprintf_filtered (stream,
381 "<dynamic length %d > static length %d>",
382 length, TYPE_LENGTH (type));
cba00921
PB
383 }
384 LA_PRINT_STRING (stream, data_addr, length, 0);
385 return length;
1c95d7ab
JK
386 default:
387 break;
cba00921
PB
388 }
389 }
8fbdca53
FF
390 chill_print_value_fields (type, valaddr, stream, format, recurse, pretty,
391 0);
392 break;
393
a8a69e63 394 case TYPE_CODE_REF:
8a177da6
PB
395 if (addressprint)
396 {
833e0d94
JK
397 fprintf_filtered (stream, "LOC(");
398 print_address_numeric
399 (extract_address (valaddr, TARGET_PTR_BIT / HOST_CHAR_BIT),
d24c0599 400 1,
833e0d94
JK
401 stream);
402 fprintf_filtered (stream, ")");
8a177da6
PB
403 if (deref_ref)
404 fputs_filtered (": ", stream);
405 }
406 /* De-reference the reference. */
407 if (deref_ref)
408 {
409 if (TYPE_CODE (TYPE_TARGET_TYPE (type)) != TYPE_CODE_UNDEF)
410 {
82a2edfb 411 value_ptr deref_val =
8a177da6
PB
412 value_at
413 (TYPE_TARGET_TYPE (type),
414 unpack_pointer (lookup_pointer_type (builtin_type_void),
415 valaddr));
416 val_print (VALUE_TYPE (deref_val),
417 VALUE_CONTENTS (deref_val),
418 VALUE_ADDRESS (deref_val), stream, format,
419 deref_ref, recurse + 1, pretty);
420 }
421 else
422 fputs_filtered ("???", stream);
423 }
424 break;
425
a8a69e63 426 case TYPE_CODE_ENUM:
8a177da6
PB
427 c_val_print (type, valaddr, address, stream, format,
428 deref_ref, recurse, pretty);
429 break;
430
11b959da
FF
431 case TYPE_CODE_RANGE:
432 if (TYPE_TARGET_TYPE (type))
433 chill_val_print (TYPE_TARGET_TYPE (type), valaddr, address, stream,
434 format, deref_ref, recurse, pretty);
435 break;
436
8a177da6
PB
437 case TYPE_CODE_MEMBER:
438 case TYPE_CODE_UNION:
a8a69e63
FF
439 case TYPE_CODE_FUNC:
440 case TYPE_CODE_VOID:
441 case TYPE_CODE_ERROR:
a8a69e63 442 default:
11b959da 443 /* Let's defer printing to the C printer, rather than
8a177da6
PB
444 print an error message. FIXME! */
445 c_val_print (type, valaddr, address, stream, format,
446 deref_ref, recurse, pretty);
a8a69e63 447 }
199b2450 448 gdb_flush (stream);
a8a69e63
FF
449 return (0);
450}
8fbdca53
FF
451
452/* Mutually recursive subroutines of cplus_print_value and c_val_print to
453 print out a structure's fields: cp_print_value_fields and cplus_print_value.
454
455 TYPE, VALADDR, STREAM, RECURSE, and PRETTY have the
456 same meanings as in cplus_print_value and c_val_print.
457
458 DONT_PRINT is an array of baseclass types that we
459 should not print, or zero if called from top level. */
460
461static void
462chill_print_value_fields (type, valaddr, stream, format, recurse, pretty,
463 dont_print)
464 struct type *type;
465 char *valaddr;
199b2450 466 GDB_FILE *stream;
8fbdca53
FF
467 int format;
468 int recurse;
469 enum val_prettyprint pretty;
470 struct type **dont_print;
471{
472 int i, len;
473 int fields_seen = 0;
474
475 check_stub_type (type);
476
8a177da6 477 fprintf_filtered (stream, "[");
8fbdca53
FF
478 len = TYPE_NFIELDS (type);
479 if (len == 0)
480 {
481 fprintf_filtered (stream, "<No data fields>");
482 }
483 else
484 {
485 for (i = 0; i < len; i++)
486 {
487 if (fields_seen)
488 {
489 fprintf_filtered (stream, ", ");
490 }
491 fields_seen = 1;
492 if (pretty)
493 {
494 fprintf_filtered (stream, "\n");
495 print_spaces_filtered (2 + 2 * recurse, stream);
496 }
497 else
498 {
499 wrap_here (n_spaces (2 + 2 * recurse));
500 }
8a177da6 501 fputs_filtered (".", stream);
5e81259d
FF
502 fprintf_symbol_filtered (stream, TYPE_FIELD_NAME (type, i),
503 language_chill, DMGL_NO_OPTS);
8a177da6 504 fputs_filtered (": ", stream);
8fbdca53
FF
505 if (TYPE_FIELD_PACKED (type, i))
506 {
82a2edfb 507 value_ptr v;
8fbdca53
FF
508
509 /* Bitfields require special handling, especially due to byte
510 order problems. */
511 v = value_from_longest (TYPE_FIELD_TYPE (type, i),
512 unpack_field_as_long (type, valaddr, i));
513
514 chill_val_print (TYPE_FIELD_TYPE (type, i), VALUE_CONTENTS (v), 0,
515 stream, format, 0, recurse + 1, pretty);
516 }
517 else
518 {
519 chill_val_print (TYPE_FIELD_TYPE (type, i),
520 valaddr + TYPE_FIELD_BITPOS (type, i) / 8,
521 0, stream, format, 0, recurse + 1, pretty);
522 }
523 }
524 if (pretty)
525 {
526 fprintf_filtered (stream, "\n");
527 print_spaces_filtered (2 * recurse, stream);
528 }
529 }
8a177da6 530 fprintf_filtered (stream, "]");
8fbdca53 531}
e10cfcaa
PB
532\f
533int
534chill_value_print (val, stream, format, pretty)
535 value_ptr val;
536 GDB_FILE *stream;
537 int format;
538 enum val_prettyprint pretty;
539{
540 /* A "repeated" value really contains several values in a row.
541 They are made by the @ operator.
542 Print such values as if they were arrays. */
543
544 if (VALUE_REPEATED (val))
545 {
546 register unsigned int n = VALUE_REPETITIONS (val);
547 register unsigned int typelen = TYPE_LENGTH (VALUE_TYPE (val));
548 fprintf_filtered (stream, "[");
549 /* Print arrays of characters using string syntax. */
550 if (typelen == 1 && TYPE_CODE (VALUE_TYPE (val)) == TYPE_CODE_INT
551 && format == 0)
552 LA_PRINT_STRING (stream, VALUE_CONTENTS (val), n, 0);
553 else
554 {
555 value_print_array_elements (val, stream, format, pretty);
556 }
557 fprintf_filtered (stream, "]");
558 return (n * typelen);
559 }
560 else
561 {
562 struct type *type = VALUE_TYPE (val);
563
564 /* If it is a pointer, indicate what it points to.
565
566 Print type also if it is a reference.
567
568 C++: if it is a member pointer, we will take care
569 of that when we print it. */
570 if (TYPE_CODE (type) == TYPE_CODE_PTR ||
571 TYPE_CODE (type) == TYPE_CODE_REF)
572 {
573 char *valaddr = VALUE_CONTENTS (val);
574 CORE_ADDR addr = unpack_pointer (type, valaddr);
575 if (TYPE_CODE (type) != TYPE_CODE_PTR || addr != 0)
576 {
577 int i;
578 char *name = TYPE_NAME (type);
579 if (name)
580 fputs_filtered (name, stream);
581 else if (TYPE_CODE (TYPE_TARGET_TYPE (type)) == TYPE_CODE_VOID)
582 fputs_filtered ("PTR", stream);
583 else
584 {
585 fprintf_filtered (stream, "(");
586 type_print (type, "", stream, -1);
587 fprintf_filtered (stream, ")");
588 }
589 fprintf_filtered (stream, "(");
590 i = val_print (type, valaddr, VALUE_ADDRESS (val),
591 stream, format, 1, 0, pretty);
592 fprintf_filtered (stream, ")");
593 return i;
594 }
595 }
596 return (val_print (type, VALUE_CONTENTS (val),
597 VALUE_ADDRESS (val), stream, format, 1, 0, pretty));
598 }
599}
600
601
This page took 0.141763 seconds and 4 git commands to generate.