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