Fix typo in microblaze license.
[deliverable/binutils-gdb.git] / gdb / c-lang.c
CommitLineData
c906108c 1/* C language support routines for GDB, the GNU debugger.
ce27fb25 2
6aba47ca 3 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2002, 2003,
4c38e0a4 4 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
c906108c 5
c5aa993b 6 This file is part of GDB.
c906108c 7
c5aa993b
JM
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
a9762ec7 10 the Free Software Foundation; either version 3 of the License, or
c5aa993b 11 (at your option) any later version.
c906108c 12
c5aa993b
JM
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
c906108c 17
c5aa993b 18 You should have received a copy of the GNU General Public License
a9762ec7 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
20
21#include "defs.h"
22#include "symtab.h"
23#include "gdbtypes.h"
24#include "expression.h"
25#include "parser-defs.h"
26#include "language.h"
27#include "c-lang.h"
745b8ca0 28#include "valprint.h"
84f0252a
JB
29#include "macroscope.h"
30#include "gdb_assert.h"
234b45d4 31#include "charset.h"
a15ef5f5 32#include "gdb_string.h"
9a3d7dfd 33#include "demangle.h"
b18be20d 34#include "cp-abi.h"
1fcb5155 35#include "cp-support.h"
6c7a06a3
TT
36#include "gdb_obstack.h"
37#include <ctype.h>
c906108c 38
a14ed312 39extern void _initialize_c_language (void);
6c7a06a3
TT
40
41/* Given a C string type, STR_TYPE, return the corresponding target
42 character set name. */
43
44static const char *
e17a4113 45charset_for_string_type (enum c_string_type str_type,
f870a310 46 struct gdbarch *gdbarch)
6c7a06a3
TT
47{
48 switch (str_type & ~C_CHAR)
49 {
50 case C_STRING:
f870a310 51 return target_charset (gdbarch);
6c7a06a3 52 case C_WIDE_STRING:
f870a310 53 return target_wide_charset (gdbarch);
6c7a06a3 54 case C_STRING_16:
b8899f2b 55 /* FIXME: UTF-16 is not always correct. */
f870a310 56 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
b8899f2b 57 return "UTF-16BE";
6c7a06a3 58 else
b8899f2b 59 return "UTF-16LE";
6c7a06a3 60 case C_STRING_32:
b8899f2b 61 /* FIXME: UTF-32 is not always correct. */
f870a310 62 if (gdbarch_byte_order (gdbarch) == BFD_ENDIAN_BIG)
b8899f2b 63 return "UTF-32BE";
6c7a06a3 64 else
b8899f2b 65 return "UTF-32LE";
6c7a06a3
TT
66 }
67 internal_error (__FILE__, __LINE__, "unhandled c_string_type");
68}
69
70/* Classify ELTTYPE according to what kind of character it is. Return
71 the enum constant representing the character type. Also set
72 *ENCODING to the name of the character set to use when converting
e17a4113 73 characters of this type in target BYTE_ORDER to the host character set. */
6c7a06a3
TT
74
75static enum c_string_type
f870a310 76classify_type (struct type *elttype, struct gdbarch *gdbarch,
e17a4113 77 const char **encoding)
6c7a06a3 78{
6c7a06a3
TT
79 enum c_string_type result;
80
85e306ed
TT
81 /* We loop because ELTTYPE may be a typedef, and we want to
82 successively peel each typedef until we reach a type we
83 understand. We don't use CHECK_TYPEDEF because that will strip
84 all typedefs at once -- but in C, wchar_t is itself a typedef, so
85 that would do the wrong thing. */
86 while (elttype)
6c7a06a3
TT
87 {
88 char *name = TYPE_NAME (elttype);
89
90 if (TYPE_CODE (elttype) == TYPE_CODE_CHAR || !name)
91 {
92 result = C_CHAR;
93 goto done;
94 }
95
96 if (!strcmp (name, "wchar_t"))
97 {
98 result = C_WIDE_CHAR;
99 goto done;
100 }
101
102 if (!strcmp (name, "char16_t"))
103 {
104 result = C_CHAR_16;
105 goto done;
106 }
107
108 if (!strcmp (name, "char32_t"))
109 {
110 result = C_CHAR_32;
111 goto done;
112 }
113
85e306ed
TT
114 if (TYPE_CODE (elttype) != TYPE_CODE_TYPEDEF)
115 break;
116
117 /* Call for side effects. */
118 check_typedef (elttype);
119
120 if (TYPE_TARGET_TYPE (elttype))
121 elttype = TYPE_TARGET_TYPE (elttype);
122 else
123 {
124 /* Perhaps check_typedef did not update the target type. In
125 this case, force the lookup again and hope it works out.
126 It never will for C, but it might for C++. */
127 CHECK_TYPEDEF (elttype);
128 }
6c7a06a3 129 }
6c7a06a3
TT
130
131 /* Punt. */
132 result = C_CHAR;
133
134 done:
e17a4113 135 if (encoding)
f870a310 136 *encoding = charset_for_string_type (result, gdbarch);
e17a4113 137
6c7a06a3
TT
138 return result;
139}
140
141/* Return true if print_wchar can display W without resorting to a
142 numeric escape, false otherwise. */
143
144static int
145wchar_printable (gdb_wchar_t w)
146{
147 return (gdb_iswprint (w)
148 || w == LCST ('\a') || w == LCST ('\b')
149 || w == LCST ('\f') || w == LCST ('\n')
150 || w == LCST ('\r') || w == LCST ('\t')
151 || w == LCST ('\v'));
152}
153
154/* A helper function that converts the contents of STRING to wide
155 characters and then appends them to OUTPUT. */
156
157static void
158append_string_as_wide (const char *string, struct obstack *output)
159{
160 for (; *string; ++string)
161 {
162 gdb_wchar_t w = gdb_btowc (*string);
163 obstack_grow (output, &w, sizeof (gdb_wchar_t));
164 }
165}
166
167/* Print a wide character W to OUTPUT. ORIG is a pointer to the
168 original (target) bytes representing the character, ORIG_LEN is the
169 number of valid bytes. WIDTH is the number of bytes in a base
170 characters of the type. OUTPUT is an obstack to which wide
171 characters are emitted. QUOTER is a (narrow) character indicating
172 the style of quotes surrounding the character to be printed.
173 NEED_ESCAPE is an in/out flag which is used to track numeric
174 escapes across calls. */
175
176static void
177print_wchar (gdb_wint_t w, const gdb_byte *orig, int orig_len,
e17a4113
UW
178 int width, enum bfd_endian byte_order, struct obstack *output,
179 int quoter, int *need_escapep)
6c7a06a3
TT
180{
181 int need_escape = *need_escapep;
c5504eaf 182
6c7a06a3
TT
183 *need_escapep = 0;
184 if (gdb_iswprint (w) && (!need_escape || (!gdb_iswdigit (w)
185 && w != LCST ('8')
186 && w != LCST ('9'))))
187 {
3f7f5fe4 188 gdb_wchar_t wchar = w;
2d90c72a 189
6c7a06a3
TT
190 if (w == gdb_btowc (quoter) || w == LCST ('\\'))
191 obstack_grow_wstr (output, LCST ("\\"));
2d90c72a 192 obstack_grow (output, &wchar, sizeof (gdb_wchar_t));
6c7a06a3
TT
193 }
194 else
195 {
196 switch (w)
197 {
198 case LCST ('\a'):
199 obstack_grow_wstr (output, LCST ("\\a"));
200 break;
201 case LCST ('\b'):
202 obstack_grow_wstr (output, LCST ("\\b"));
203 break;
204 case LCST ('\f'):
205 obstack_grow_wstr (output, LCST ("\\f"));
206 break;
207 case LCST ('\n'):
208 obstack_grow_wstr (output, LCST ("\\n"));
209 break;
210 case LCST ('\r'):
211 obstack_grow_wstr (output, LCST ("\\r"));
212 break;
213 case LCST ('\t'):
214 obstack_grow_wstr (output, LCST ("\\t"));
215 break;
216 case LCST ('\v'):
217 obstack_grow_wstr (output, LCST ("\\v"));
218 break;
219 default:
220 {
221 int i;
222
223 for (i = 0; i + width <= orig_len; i += width)
224 {
225 char octal[30];
e17a4113 226 ULONGEST value;
c5504eaf 227
e17a4113 228 value = extract_unsigned_integer (&orig[i], width, byte_order);
30b66ecc
TT
229 /* If the value fits in 3 octal digits, print it that
230 way. Otherwise, print it as a hex escape. */
231 if (value <= 0777)
232 sprintf (octal, "\\%.3o", (int) (value & 0777));
233 else
234 sprintf (octal, "\\x%lx", (long) value);
6c7a06a3
TT
235 append_string_as_wide (octal, output);
236 }
237 /* If we somehow have extra bytes, print them now. */
238 while (i < orig_len)
239 {
240 char octal[5];
c5504eaf 241
6c7a06a3
TT
242 sprintf (octal, "\\%.3o", orig[i] & 0xff);
243 append_string_as_wide (octal, output);
244 ++i;
245 }
246
247 *need_escapep = 1;
248 }
249 break;
250 }
251 }
252}
c906108c
SS
253
254/* Print the character C on STREAM as part of the contents of a literal
255 string whose delimiter is QUOTER. Note that that format for printing
256 characters and strings is language specific. */
257
6aecb9c2
JB
258void
259c_emit_char (int c, struct type *type,
260 struct ui_file *stream, int quoter)
c906108c 261{
e17a4113 262 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
6c7a06a3
TT
263 struct obstack wchar_buf, output;
264 struct cleanup *cleanups;
265 const char *encoding;
266 gdb_byte *buf;
267 struct wchar_iterator *iter;
268 int need_escape = 0;
234b45d4 269
f870a310 270 classify_type (type, get_type_arch (type), &encoding);
c906108c 271
6c7a06a3
TT
272 buf = alloca (TYPE_LENGTH (type));
273 pack_long (buf, type, c);
274
275 iter = make_wchar_iterator (buf, TYPE_LENGTH (type), encoding,
276 TYPE_LENGTH (type));
277 cleanups = make_cleanup_wchar_iterator (iter);
278
279 /* This holds the printable form of the wchar_t data. */
280 obstack_init (&wchar_buf);
281 make_cleanup_obstack_free (&wchar_buf);
282
283 while (1)
c906108c 284 {
6c7a06a3
TT
285 int num_chars;
286 gdb_wchar_t *chars;
287 const gdb_byte *buf;
288 size_t buflen;
289 int print_escape = 1;
290 enum wchar_iterate_result result;
291
292 num_chars = wchar_iterate (iter, &result, &chars, &buf, &buflen);
293 if (num_chars < 0)
294 break;
295 if (num_chars > 0)
296 {
297 /* If all characters are printable, print them. Otherwise,
298 we're going to have to print an escape sequence. We
299 check all characters because we want to print the target
300 bytes in the escape sequence, and we don't know character
301 boundaries there. */
302 int i;
303
304 print_escape = 0;
305 for (i = 0; i < num_chars; ++i)
306 if (!wchar_printable (chars[i]))
307 {
308 print_escape = 1;
309 break;
310 }
311
312 if (!print_escape)
313 {
314 for (i = 0; i < num_chars; ++i)
315 print_wchar (chars[i], buf, buflen, TYPE_LENGTH (type),
e17a4113 316 byte_order, &wchar_buf, quoter, &need_escape);
6c7a06a3
TT
317 }
318 }
319
320 /* This handles the NUM_CHARS == 0 case as well. */
321 if (print_escape)
e17a4113
UW
322 print_wchar (gdb_WEOF, buf, buflen, TYPE_LENGTH (type), byte_order,
323 &wchar_buf, quoter, &need_escape);
c906108c 324 }
6c7a06a3
TT
325
326 /* The output in the host encoding. */
327 obstack_init (&output);
328 make_cleanup_obstack_free (&output);
329
732f6a93 330 convert_between_encodings (INTERMEDIATE_ENCODING, host_charset (),
6c7a06a3
TT
331 obstack_base (&wchar_buf),
332 obstack_object_size (&wchar_buf),
333 1, &output, translit_char);
334 obstack_1grow (&output, '\0');
335
336 fputs_filtered (obstack_base (&output), stream);
337
338 do_cleanups (cleanups);
c906108c
SS
339}
340
341void
6c7a06a3 342c_printchar (int c, struct type *type, struct ui_file *stream)
c906108c 343{
6c7a06a3 344 enum c_string_type str_type;
6c7a06a3 345
f870a310 346 str_type = classify_type (type, get_type_arch (type), NULL);
6c7a06a3
TT
347 switch (str_type)
348 {
349 case C_CHAR:
350 break;
351 case C_WIDE_CHAR:
352 fputc_filtered ('L', stream);
353 break;
354 case C_CHAR_16:
355 fputc_filtered ('u', stream);
356 break;
357 case C_CHAR_32:
358 fputc_filtered ('U', stream);
359 break;
360 }
361
c906108c 362 fputc_filtered ('\'', stream);
6c7a06a3 363 LA_EMIT_CHAR (c, type, stream, '\'');
c906108c
SS
364 fputc_filtered ('\'', stream);
365}
366
367/* Print the character string STRING, printing at most LENGTH characters.
368 LENGTH is -1 if the string is nul terminated. Each character is WIDTH bytes
369 long. Printing stops early if the number hits print_max; repeat counts are
370 printed as appropriate. Print ellipses at the end if we had to stop before
371 printing LENGTH characters, or if FORCE_ELLIPSES. */
372
373void
6c7a06a3 374c_printstr (struct ui_file *stream, struct type *type, const gdb_byte *string,
be759fcf 375 unsigned int length, const char *user_encoding, int force_ellipses,
79a45b7d 376 const struct value_print_options *options)
c906108c 377{
e17a4113 378 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
f86f5ca3 379 unsigned int i;
c906108c
SS
380 unsigned int things_printed = 0;
381 int in_quotes = 0;
382 int need_comma = 0;
6c7a06a3
TT
383 int width = TYPE_LENGTH (type);
384 struct obstack wchar_buf, output;
385 struct cleanup *cleanup;
386 enum c_string_type str_type;
be759fcf 387 const char *type_encoding;
6c7a06a3
TT
388 const char *encoding;
389 struct wchar_iterator *iter;
390 int finished = 0;
391 int need_escape = 0;
c906108c 392
3872d37d
AS
393 if (length == -1)
394 {
395 unsigned long current_char = 1;
396
397 for (i = 0; current_char; ++i)
398 {
399 QUIT;
400 current_char = extract_unsigned_integer (string + i * width,
401 width, byte_order);
402 }
403 length = i;
404 }
405
c906108c
SS
406 /* If the string was not truncated due to `set print elements', and
407 the last byte of it is a null, we don't print that, in traditional C
408 style. */
409 if (!force_ellipses
410 && length > 0
e17a4113
UW
411 && (extract_unsigned_integer (string + (length - 1) * width,
412 width, byte_order) == 0))
c906108c
SS
413 length--;
414
f870a310
TT
415 str_type = (classify_type (type, get_type_arch (type), &type_encoding)
416 & ~C_CHAR);
6c7a06a3
TT
417 switch (str_type)
418 {
419 case C_STRING:
420 break;
421 case C_WIDE_STRING:
422 fputs_filtered ("L", stream);
423 break;
424 case C_STRING_16:
425 fputs_filtered ("u", stream);
426 break;
427 case C_STRING_32:
428 fputs_filtered ("U", stream);
429 break;
430 }
431
be759fcf
PM
432 encoding = (user_encoding && *user_encoding) ? user_encoding : type_encoding;
433
c906108c
SS
434 if (length == 0)
435 {
436 fputs_filtered ("\"\"", stream);
437 return;
438 }
439
6c7a06a3
TT
440 /* Arrange to iterate over the characters, in wchar_t form. */
441 iter = make_wchar_iterator (string, length * width, encoding, width);
442 cleanup = make_cleanup_wchar_iterator (iter);
443
444 /* WCHAR_BUF is the obstack we use to represent the string in
445 wchar_t form. */
446 obstack_init (&wchar_buf);
447 make_cleanup_obstack_free (&wchar_buf);
448
449 while (!finished && things_printed < options->print_max)
c906108c 450 {
6c7a06a3
TT
451 int num_chars;
452 enum wchar_iterate_result result;
453 gdb_wchar_t *chars;
454 const gdb_byte *buf;
455 size_t buflen;
c906108c
SS
456
457 QUIT;
458
459 if (need_comma)
460 {
6c7a06a3 461 obstack_grow_wstr (&wchar_buf, LCST (", "));
c906108c
SS
462 need_comma = 0;
463 }
464
6c7a06a3
TT
465 num_chars = wchar_iterate (iter, &result, &chars, &buf, &buflen);
466 /* We only look at repetitions when we were able to convert a
467 single character in isolation. This makes the code simpler
468 and probably does the sensible thing in the majority of
469 cases. */
7a9fe101 470 while (num_chars == 1 && things_printed < options->print_max)
6c7a06a3
TT
471 {
472 /* Count the number of repetitions. */
473 unsigned int reps = 0;
474 gdb_wchar_t current_char = chars[0];
475 const gdb_byte *orig_buf = buf;
476 int orig_len = buflen;
c906108c 477
6c7a06a3
TT
478 if (need_comma)
479 {
480 obstack_grow_wstr (&wchar_buf, LCST (", "));
481 need_comma = 0;
482 }
483
484 while (num_chars == 1 && current_char == chars[0])
485 {
486 num_chars = wchar_iterate (iter, &result, &chars, &buf, &buflen);
487 ++reps;
488 }
489
490 /* Emit CURRENT_CHAR according to the repetition count and
491 options. */
492 if (reps > options->repeat_count_threshold)
493 {
494 if (in_quotes)
495 {
496 if (options->inspect_it)
497 obstack_grow_wstr (&wchar_buf, LCST ("\\\", "));
498 else
499 obstack_grow_wstr (&wchar_buf, LCST ("\", "));
500 in_quotes = 0;
501 }
502 obstack_grow_wstr (&wchar_buf, LCST ("'"));
503 need_escape = 0;
504 print_wchar (current_char, orig_buf, orig_len, width,
e17a4113 505 byte_order, &wchar_buf, '\'', &need_escape);
6c7a06a3
TT
506 obstack_grow_wstr (&wchar_buf, LCST ("'"));
507 {
508 /* Painful gyrations. */
509 int j;
510 char *s = xstrprintf (_(" <repeats %u times>"), reps);
c5504eaf 511
6c7a06a3
TT
512 for (j = 0; s[j]; ++j)
513 {
514 gdb_wchar_t w = gdb_btowc (s[j]);
515 obstack_grow (&wchar_buf, &w, sizeof (gdb_wchar_t));
516 }
517 xfree (s);
518 }
519 things_printed += options->repeat_count_threshold;
520 need_comma = 1;
521 }
522 else
523 {
524 /* Saw the character one or more times, but fewer than
525 the repetition threshold. */
526 if (!in_quotes)
527 {
528 if (options->inspect_it)
529 obstack_grow_wstr (&wchar_buf, LCST ("\\\""));
530 else
531 obstack_grow_wstr (&wchar_buf, LCST ("\""));
532 in_quotes = 1;
533 need_escape = 0;
534 }
535
536 while (reps-- > 0)
537 {
538 print_wchar (current_char, orig_buf, orig_len, width,
e17a4113 539 byte_order, &wchar_buf, '"', &need_escape);
6c7a06a3
TT
540 ++things_printed;
541 }
542 }
543 }
544
545 /* NUM_CHARS and the other outputs from wchar_iterate are valid
546 here regardless of which branch was taken above. */
547 if (num_chars < 0)
c906108c 548 {
6c7a06a3
TT
549 /* Hit EOF. */
550 finished = 1;
551 break;
c906108c
SS
552 }
553
6c7a06a3 554 switch (result)
c906108c 555 {
6c7a06a3
TT
556 case wchar_iterate_invalid:
557 if (!in_quotes)
c906108c 558 {
79a45b7d 559 if (options->inspect_it)
6c7a06a3 560 obstack_grow_wstr (&wchar_buf, LCST ("\\\""));
c906108c 561 else
6c7a06a3
TT
562 obstack_grow_wstr (&wchar_buf, LCST ("\""));
563 in_quotes = 1;
c906108c 564 }
6c7a06a3 565 need_escape = 0;
e17a4113 566 print_wchar (gdb_WEOF, buf, buflen, width, byte_order, &wchar_buf,
6c7a06a3
TT
567 '"', &need_escape);
568 break;
569
570 case wchar_iterate_incomplete:
571 if (in_quotes)
c906108c 572 {
79a45b7d 573 if (options->inspect_it)
6c7a06a3 574 obstack_grow_wstr (&wchar_buf, LCST ("\\\","));
c906108c 575 else
6c7a06a3
TT
576 obstack_grow_wstr (&wchar_buf, LCST ("\","));
577 in_quotes = 0;
c906108c 578 }
6c7a06a3 579 obstack_grow_wstr (&wchar_buf, LCST (" <incomplete sequence "));
e17a4113 580 print_wchar (gdb_WEOF, buf, buflen, width, byte_order, &wchar_buf,
6c7a06a3
TT
581 0, &need_escape);
582 obstack_grow_wstr (&wchar_buf, LCST (">"));
583 finished = 1;
584 break;
c906108c
SS
585 }
586 }
587
588 /* Terminate the quotes if necessary. */
589 if (in_quotes)
590 {
79a45b7d 591 if (options->inspect_it)
6c7a06a3 592 obstack_grow_wstr (&wchar_buf, LCST ("\\\""));
c906108c 593 else
6c7a06a3 594 obstack_grow_wstr (&wchar_buf, LCST ("\""));
c906108c
SS
595 }
596
6c7a06a3
TT
597 if (force_ellipses || !finished)
598 obstack_grow_wstr (&wchar_buf, LCST ("..."));
599
600 /* OUTPUT is where we collect `char's for printing. */
601 obstack_init (&output);
602 make_cleanup_obstack_free (&output);
603
732f6a93 604 convert_between_encodings (INTERMEDIATE_ENCODING, host_charset (),
6c7a06a3
TT
605 obstack_base (&wchar_buf),
606 obstack_object_size (&wchar_buf),
607 1, &output, translit_char);
608 obstack_1grow (&output, '\0');
609
610 fputs_filtered (obstack_base (&output), stream);
611
612 do_cleanups (cleanup);
c906108c 613}
ae6a3a4c
TJB
614
615/* Obtain a C string from the inferior storing it in a newly allocated
fbb8f299
PM
616 buffer in BUFFER, which should be freed by the caller. If the
617 in- and out-parameter *LENGTH is specified at -1, the string is read
618 until a null character of the appropriate width is found, otherwise
619 the string is read to the length of characters specified.
620 The size of a character is determined by the length of the target
621 type of the pointer or array. If VALUE is an array with a known
622 length, the function will not read past the end of the array.
623 On completion, *LENGTH will be set to the size of the string read in
624 characters. (If a length of -1 is specified, the length returned
625 will not include the null character). CHARSET is always set to the
626 target charset. */
ae6a3a4c
TJB
627
628void
629c_get_string (struct value *value, gdb_byte **buffer, int *length,
96c07c5b 630 struct type **char_type, const char **charset)
ae6a3a4c
TJB
631{
632 int err, width;
633 unsigned int fetchlimit;
634 struct type *type = check_typedef (value_type (value));
635 struct type *element_type = TYPE_TARGET_TYPE (type);
fbb8f299 636 int req_length = *length;
e17a4113 637 enum bfd_endian byte_order = gdbarch_byte_order (get_type_arch (type));
96c07c5b 638 enum c_string_type kind;
ae6a3a4c
TJB
639
640 if (element_type == NULL)
641 goto error;
642
643 if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
644 {
645 /* If we know the size of the array, we can use it as a limit on the
646 number of characters to be fetched. */
647 if (TYPE_NFIELDS (type) == 1
648 && TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) == TYPE_CODE_RANGE)
649 {
650 LONGEST low_bound, high_bound;
651
652 get_discrete_bounds (TYPE_FIELD_TYPE (type, 0),
653 &low_bound, &high_bound);
654 fetchlimit = high_bound - low_bound + 1;
655 }
656 else
657 fetchlimit = UINT_MAX;
658 }
659 else if (TYPE_CODE (type) == TYPE_CODE_PTR)
660 fetchlimit = UINT_MAX;
661 else
662 /* We work only with arrays and pointers. */
663 goto error;
664
96c07c5b 665 if (! c_textual_element_type (element_type, 0))
ae6a3a4c 666 goto error;
96c07c5b 667 kind = classify_type (element_type,
f870a310 668 get_type_arch (element_type),
96c07c5b 669 charset);
ae6a3a4c
TJB
670 width = TYPE_LENGTH (element_type);
671
fbb8f299 672 /* If the string lives in GDB's memory instead of the inferior's, then we
ae6a3a4c
TJB
673 just need to copy it to BUFFER. Also, since such strings are arrays
674 with known size, FETCHLIMIT will hold the size of the array. */
675 if ((VALUE_LVAL (value) == not_lval
676 || VALUE_LVAL (value) == lval_internalvar)
677 && fetchlimit != UINT_MAX)
678 {
679 int i;
680 const gdb_byte *contents = value_contents (value);
681
fbb8f299
PM
682 /* If a length is specified, use that. */
683 if (*length >= 0)
684 i = *length;
685 else
686 /* Otherwise, look for a null character. */
687 for (i = 0; i < fetchlimit; i++)
688 if (extract_unsigned_integer (contents + i * width, width,
689 byte_order) == 0)
690 break;
691
692 /* I is now either a user-defined length, the number of non-null
693 characters, or FETCHLIMIT. */
ae6a3a4c
TJB
694 *length = i * width;
695 *buffer = xmalloc (*length);
696 memcpy (*buffer, contents, *length);
697 err = 0;
698 }
699 else
700 {
fbb8f299
PM
701 err = read_string (value_as_address (value), *length, width, fetchlimit,
702 byte_order, buffer, length);
ae6a3a4c
TJB
703 if (err)
704 {
8ea5dfdf 705 xfree (*buffer);
ae6a3a4c
TJB
706 error (_("Error reading string from inferior: %s"),
707 safe_strerror (err));
708 }
709 }
710
fbb8f299
PM
711 /* If the LENGTH is specified at -1, we want to return the string
712 length up to the terminating null character. If an actual length
713 was specified, we want to return the length of exactly what was
714 read. */
715 if (req_length == -1)
716 /* If the last character is null, subtract it from LENGTH. */
717 if (*length > 0
718 && extract_unsigned_integer (*buffer + *length - width, width,
719 byte_order) == 0)
720 *length -= width;
721
722 /* The read_string function will return the number of bytes read.
723 If length returned from read_string was > 0, return the number of
724 characters read by dividing the number of bytes by width. */
725 if (*length != 0)
726 *length = *length / width;
ae6a3a4c 727
96c07c5b 728 *char_type = element_type;
ae6a3a4c
TJB
729
730 return;
731
732 error:
733 {
734 char *type_str;
735
736 type_str = type_to_string (type);
737 if (type_str)
738 {
739 make_cleanup (xfree, type_str);
740 error (_("Trying to read string with inappropriate type `%s'."),
741 type_str);
742 }
743 else
744 error (_("Trying to read string with inappropriate type."));
745 }
746}
747
c906108c 748\f
6c7a06a3
TT
749/* Evaluating C and C++ expressions. */
750
751/* Convert a UCN. The digits of the UCN start at P and extend no
752 farther than LIMIT. DEST_CHARSET is the name of the character set
753 into which the UCN should be converted. The results are written to
754 OUTPUT. LENGTH is the maximum length of the UCN, either 4 or 8.
755 Returns a pointer to just after the final digit of the UCN. */
756
757static char *
758convert_ucn (char *p, char *limit, const char *dest_charset,
759 struct obstack *output, int length)
760{
761 unsigned long result = 0;
762 gdb_byte data[4];
763 int i;
764
765 for (i = 0; i < length && p < limit && isxdigit (*p); ++i, ++p)
766 result = (result << 4) + host_hex_value (*p);
767
768 for (i = 3; i >= 0; --i)
769 {
770 data[i] = result & 0xff;
771 result >>= 8;
772 }
773
b8899f2b 774 convert_between_encodings ("UTF-32BE", dest_charset, data, 4, 4, output,
6c7a06a3
TT
775 translit_none);
776
777 return p;
778}
779
780/* Emit a character, VALUE, which was specified numerically, to
781 OUTPUT. TYPE is the target character type. */
782
783static void
784emit_numeric_character (struct type *type, unsigned long value,
785 struct obstack *output)
786{
787 gdb_byte *buffer;
788
789 buffer = alloca (TYPE_LENGTH (type));
790 pack_long (buffer, type, value);
791 obstack_grow (output, buffer, TYPE_LENGTH (type));
792}
793
794/* Convert an octal escape sequence. TYPE is the target character
795 type. The digits of the escape sequence begin at P and extend no
796 farther than LIMIT. The result is written to OUTPUT. Returns a
797 pointer to just after the final digit of the escape sequence. */
798
799static char *
800convert_octal (struct type *type, char *p, char *limit, struct obstack *output)
801{
30b66ecc 802 int i;
6c7a06a3
TT
803 unsigned long value = 0;
804
30b66ecc
TT
805 for (i = 0;
806 i < 3 && p < limit && isdigit (*p) && *p != '8' && *p != '9';
807 ++i)
6c7a06a3
TT
808 {
809 value = 8 * value + host_hex_value (*p);
810 ++p;
811 }
812
813 emit_numeric_character (type, value, output);
814
815 return p;
816}
817
818/* Convert a hex escape sequence. TYPE is the target character type.
819 The digits of the escape sequence begin at P and extend no farther
820 than LIMIT. The result is written to OUTPUT. Returns a pointer to
821 just after the final digit of the escape sequence. */
822
823static char *
824convert_hex (struct type *type, char *p, char *limit, struct obstack *output)
825{
826 unsigned long value = 0;
827
828 while (p < limit && isxdigit (*p))
829 {
830 value = 16 * value + host_hex_value (*p);
831 ++p;
832 }
833
834 emit_numeric_character (type, value, output);
835
836 return p;
837}
838
839#define ADVANCE \
840 do { \
841 ++p; \
842 if (p == limit) \
843 error (_("Malformed escape sequence")); \
844 } while (0)
845
846/* Convert an escape sequence to a target format. TYPE is the target
847 character type to use, and DEST_CHARSET is the name of the target
848 character set. The backslash of the escape sequence is at *P, and
849 the escape sequence will not extend past LIMIT. The results are
850 written to OUTPUT. Returns a pointer to just past the final
851 character of the escape sequence. */
852
853static char *
854convert_escape (struct type *type, const char *dest_charset,
855 char *p, char *limit, struct obstack *output)
856{
857 /* Skip the backslash. */
858 ADVANCE;
859
860 switch (*p)
861 {
862 case '\\':
863 obstack_1grow (output, '\\');
864 ++p;
865 break;
866
867 case 'x':
868 ADVANCE;
869 if (!isxdigit (*p))
870 error (_("\\x used with no following hex digits."));
871 p = convert_hex (type, p, limit, output);
872 break;
873
874 case '0':
875 case '1':
876 case '2':
877 case '3':
878 case '4':
879 case '5':
880 case '6':
881 case '7':
882 p = convert_octal (type, p, limit, output);
883 break;
884
885 case 'u':
886 case 'U':
887 {
888 int length = *p == 'u' ? 4 : 8;
c5504eaf 889
6c7a06a3
TT
890 ADVANCE;
891 if (!isxdigit (*p))
892 error (_("\\u used with no following hex digits"));
893 p = convert_ucn (p, limit, dest_charset, output, length);
894 }
895 }
896
897 return p;
898}
899
900/* Given a single string from a (C-specific) OP_STRING list, convert
901 it to a target string, handling escape sequences specially. The
902 output is written to OUTPUT. DATA is the input string, which has
903 length LEN. DEST_CHARSET is the name of the target character set,
904 and TYPE is the type of target character to use. */
905
906static void
907parse_one_string (struct obstack *output, char *data, int len,
908 const char *dest_charset, struct type *type)
909{
910 char *limit;
911
912 limit = data + len;
913
914 while (data < limit)
915 {
916 char *p = data;
c5504eaf 917
6c7a06a3
TT
918 /* Look for next escape, or the end of the input. */
919 while (p < limit && *p != '\\')
920 ++p;
921 /* If we saw a run of characters, convert them all. */
922 if (p > data)
923 convert_between_encodings (host_charset (), dest_charset,
924 data, p - data, 1, output, translit_none);
925 /* If we saw an escape, convert it. */
926 if (p < limit)
927 p = convert_escape (type, dest_charset, p, limit, output);
928 data = p;
929 }
930}
931
932/* Expression evaluator for the C language family. Most operations
933 are delegated to evaluate_subexp_standard; see that function for a
934 description of the arguments. */
935
936static struct value *
937evaluate_subexp_c (struct type *expect_type, struct expression *exp,
938 int *pos, enum noside noside)
939{
940 enum exp_opcode op = exp->elts[*pos].opcode;
941
942 switch (op)
943 {
944 case OP_STRING:
945 {
946 int oplen, limit;
947 struct type *type;
948 struct obstack output;
949 struct cleanup *cleanup;
950 struct value *result;
951 enum c_string_type dest_type;
952 const char *dest_charset;
953
954 obstack_init (&output);
955 cleanup = make_cleanup_obstack_free (&output);
956
957 ++*pos;
958 oplen = longest_to_int (exp->elts[*pos].longconst);
959
960 ++*pos;
961 limit = *pos + BYTES_TO_EXP_ELEM (oplen + 1);
962 dest_type
963 = (enum c_string_type) longest_to_int (exp->elts[*pos].longconst);
964 switch (dest_type & ~C_CHAR)
965 {
966 case C_STRING:
d80b854b
UW
967 type = language_string_char_type (exp->language_defn,
968 exp->gdbarch);
6c7a06a3
TT
969 break;
970 case C_WIDE_STRING:
e6c014f2
UW
971 type = lookup_typename (exp->language_defn, exp->gdbarch,
972 "wchar_t", NULL, 0);
6c7a06a3
TT
973 break;
974 case C_STRING_16:
e6c014f2
UW
975 type = lookup_typename (exp->language_defn, exp->gdbarch,
976 "char16_t", NULL, 0);
6c7a06a3
TT
977 break;
978 case C_STRING_32:
e6c014f2
UW
979 type = lookup_typename (exp->language_defn, exp->gdbarch,
980 "char32_t", NULL, 0);
6c7a06a3
TT
981 break;
982 default:
983 internal_error (__FILE__, __LINE__, "unhandled c_string_type");
984 }
546e879e
TT
985
986 /* Ensure TYPE_LENGTH is valid for TYPE. */
987 check_typedef (type);
988
f870a310 989 dest_charset = charset_for_string_type (dest_type, exp->gdbarch);
6c7a06a3
TT
990
991 ++*pos;
992 while (*pos < limit)
993 {
994 int len;
995
996 len = longest_to_int (exp->elts[*pos].longconst);
997
998 ++*pos;
999 if (noside != EVAL_SKIP)
1000 parse_one_string (&output, &exp->elts[*pos].string, len,
1001 dest_charset, type);
1002 *pos += BYTES_TO_EXP_ELEM (len);
1003 }
1004
1005 /* Skip the trailing length and opcode. */
1006 *pos += 2;
1007
1008 if (noside == EVAL_SKIP)
334cc82d
TT
1009 {
1010 /* Return a dummy value of the appropriate type. */
1011 if ((dest_type & C_CHAR) != 0)
1012 result = allocate_value (type);
1013 else
3b7538c0 1014 result = value_cstring ("", 0, type);
334cc82d
TT
1015 do_cleanups (cleanup);
1016 return result;
1017 }
6c7a06a3
TT
1018
1019 if ((dest_type & C_CHAR) != 0)
1020 {
1021 LONGEST value;
1022
1023 if (obstack_object_size (&output) != TYPE_LENGTH (type))
1024 error (_("Could not convert character constant to target character set"));
1025 value = unpack_long (type, obstack_base (&output));
1026 result = value_from_longest (type, value);
1027 }
1028 else
1029 {
1030 int i;
c5504eaf 1031
6c7a06a3
TT
1032 /* Write the terminating character. */
1033 for (i = 0; i < TYPE_LENGTH (type); ++i)
1034 obstack_1grow (&output, 0);
3b7538c0
UW
1035 result = value_cstring (obstack_base (&output),
1036 obstack_object_size (&output),
1037 type);
6c7a06a3
TT
1038 }
1039 do_cleanups (cleanup);
1040 return result;
1041 }
1042 break;
1043
1044 default:
1045 break;
1046 }
1047 return evaluate_subexp_standard (expect_type, exp, pos, noside);
1048}
c5aa993b 1049
84f0252a 1050
84f0252a 1051\f
c906108c
SS
1052/* Table mapping opcodes into strings for printing operators
1053 and precedences of the operators. */
1054
1055const struct op_print c_op_print_tab[] =
c5aa993b
JM
1056{
1057 {",", BINOP_COMMA, PREC_COMMA, 0},
1058 {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
1059 {"||", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
1060 {"&&", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
1061 {"|", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
1062 {"^", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
1063 {"&", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
1064 {"==", BINOP_EQUAL, PREC_EQUAL, 0},
1065 {"!=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
1066 {"<=", BINOP_LEQ, PREC_ORDER, 0},
1067 {">=", BINOP_GEQ, PREC_ORDER, 0},
1068 {">", BINOP_GTR, PREC_ORDER, 0},
1069 {"<", BINOP_LESS, PREC_ORDER, 0},
1070 {">>", BINOP_RSH, PREC_SHIFT, 0},
1071 {"<<", BINOP_LSH, PREC_SHIFT, 0},
1072 {"+", BINOP_ADD, PREC_ADD, 0},
1073 {"-", BINOP_SUB, PREC_ADD, 0},
1074 {"*", BINOP_MUL, PREC_MUL, 0},
1075 {"/", BINOP_DIV, PREC_MUL, 0},
1076 {"%", BINOP_REM, PREC_MUL, 0},
1077 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
1078 {"-", UNOP_NEG, PREC_PREFIX, 0},
1079 {"!", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
1080 {"~", UNOP_COMPLEMENT, PREC_PREFIX, 0},
1081 {"*", UNOP_IND, PREC_PREFIX, 0},
1082 {"&", UNOP_ADDR, PREC_PREFIX, 0},
1083 {"sizeof ", UNOP_SIZEOF, PREC_PREFIX, 0},
1084 {"++", UNOP_PREINCREMENT, PREC_PREFIX, 0},
1085 {"--", UNOP_PREDECREMENT, PREC_PREFIX, 0},
c5aa993b 1086 {NULL, 0, 0, 0}
c906108c
SS
1087};
1088\f
685419e2
AC
1089enum c_primitive_types {
1090 c_primitive_type_int,
1091 c_primitive_type_long,
1092 c_primitive_type_short,
1093 c_primitive_type_char,
1094 c_primitive_type_float,
1095 c_primitive_type_double,
1096 c_primitive_type_void,
1097 c_primitive_type_long_long,
1098 c_primitive_type_signed_char,
1099 c_primitive_type_unsigned_char,
1100 c_primitive_type_unsigned_short,
1101 c_primitive_type_unsigned_int,
1102 c_primitive_type_unsigned_long,
1103 c_primitive_type_unsigned_long_long,
1104 c_primitive_type_long_double,
1105 c_primitive_type_complex,
1106 c_primitive_type_double_complex,
213e4dc2
TJB
1107 c_primitive_type_decfloat,
1108 c_primitive_type_decdouble,
1109 c_primitive_type_declong,
685419e2
AC
1110 nr_c_primitive_types
1111};
1112
e9667a65 1113void
685419e2
AC
1114c_language_arch_info (struct gdbarch *gdbarch,
1115 struct language_arch_info *lai)
1116{
1117 const struct builtin_type *builtin = builtin_type (gdbarch);
c5504eaf 1118
e9667a65 1119 lai->string_char_type = builtin->builtin_char;
685419e2
AC
1120 lai->primitive_type_vector
1121 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_c_primitive_types + 1,
1122 struct type *);
1123 lai->primitive_type_vector [c_primitive_type_int] = builtin->builtin_int;
1124 lai->primitive_type_vector [c_primitive_type_long] = builtin->builtin_long;
1125 lai->primitive_type_vector [c_primitive_type_short] = builtin->builtin_short;
1126 lai->primitive_type_vector [c_primitive_type_char] = builtin->builtin_char;
1127 lai->primitive_type_vector [c_primitive_type_float] = builtin->builtin_float;
1128 lai->primitive_type_vector [c_primitive_type_double] = builtin->builtin_double;
1129 lai->primitive_type_vector [c_primitive_type_void] = builtin->builtin_void;
1130 lai->primitive_type_vector [c_primitive_type_long_long] = builtin->builtin_long_long;
1131 lai->primitive_type_vector [c_primitive_type_signed_char] = builtin->builtin_signed_char;
1132 lai->primitive_type_vector [c_primitive_type_unsigned_char] = builtin->builtin_unsigned_char;
1133 lai->primitive_type_vector [c_primitive_type_unsigned_short] = builtin->builtin_unsigned_short;
1134 lai->primitive_type_vector [c_primitive_type_unsigned_int] = builtin->builtin_unsigned_int;
1135 lai->primitive_type_vector [c_primitive_type_unsigned_long] = builtin->builtin_unsigned_long;
1136 lai->primitive_type_vector [c_primitive_type_unsigned_long_long] = builtin->builtin_unsigned_long_long;
1137 lai->primitive_type_vector [c_primitive_type_long_double] = builtin->builtin_long_double;
1138 lai->primitive_type_vector [c_primitive_type_complex] = builtin->builtin_complex;
1139 lai->primitive_type_vector [c_primitive_type_double_complex] = builtin->builtin_double_complex;
213e4dc2
TJB
1140 lai->primitive_type_vector [c_primitive_type_decfloat] = builtin->builtin_decfloat;
1141 lai->primitive_type_vector [c_primitive_type_decdouble] = builtin->builtin_decdouble;
1142 lai->primitive_type_vector [c_primitive_type_declong] = builtin->builtin_declong;
fbb06eb1
UW
1143
1144 lai->bool_type_default = builtin->builtin_int;
cad351d1 1145}
685419e2 1146
6aecb9c2 1147const struct exp_descriptor exp_descriptor_c =
6c7a06a3
TT
1148{
1149 print_subexp_standard,
1150 operator_length_standard,
c0201579 1151 operator_check_standard,
6c7a06a3
TT
1152 op_name_standard,
1153 dump_subexp_body_standard,
1154 evaluate_subexp_c
1155};
1156
c5aa993b
JM
1157const struct language_defn c_language_defn =
1158{
c906108c
SS
1159 "c", /* Language name */
1160 language_c,
c906108c
SS
1161 range_check_off,
1162 type_check_off,
63872f9d 1163 case_sensitive_on,
7ca2d3a3 1164 array_row_major,
9a044a89 1165 macro_expansion_c,
6c7a06a3 1166 &exp_descriptor_c,
7c8adf68 1167 c_parse,
c906108c 1168 c_error,
e85c3284 1169 null_post_parser,
c906108c
SS
1170 c_printchar, /* Print a character constant */
1171 c_printstr, /* Function to print string constant */
1172 c_emit_char, /* Print a single char */
c906108c 1173 c_print_type, /* Print a type using appropriate syntax */
5c6ce71d 1174 c_print_typedef, /* Print a typedef using appropriate syntax */
c906108c
SS
1175 c_val_print, /* Print a value using appropriate syntax */
1176 c_value_print, /* Print a top-level value */
f636b87d 1177 NULL, /* Language specific skip_trampoline */
2b2d9e11 1178 NULL, /* name_of_this */
5f9a71c3 1179 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
b368761e 1180 basic_lookup_transparent_type,/* lookup_transparent_type */
9a3d7dfd 1181 NULL, /* Language specific symbol demangler */
31c27f77 1182 NULL, /* Language specific class_name_from_physname */
c906108c
SS
1183 c_op_print_tab, /* expression operators for printing */
1184 1, /* c-style arrays */
1185 0, /* String lower bound */
6084f43a 1186 default_word_break_characters,
41d27058 1187 default_make_symbol_completion_list,
685419e2 1188 c_language_arch_info,
e79af960 1189 default_print_array_index,
41f1b697 1190 default_pass_by_reference,
ae6a3a4c 1191 c_get_string,
c906108c
SS
1192 LANG_MAGIC
1193};
1194
cad351d1
UW
1195enum cplus_primitive_types {
1196 cplus_primitive_type_int,
1197 cplus_primitive_type_long,
1198 cplus_primitive_type_short,
1199 cplus_primitive_type_char,
1200 cplus_primitive_type_float,
1201 cplus_primitive_type_double,
1202 cplus_primitive_type_void,
1203 cplus_primitive_type_long_long,
1204 cplus_primitive_type_signed_char,
1205 cplus_primitive_type_unsigned_char,
1206 cplus_primitive_type_unsigned_short,
1207 cplus_primitive_type_unsigned_int,
1208 cplus_primitive_type_unsigned_long,
1209 cplus_primitive_type_unsigned_long_long,
1210 cplus_primitive_type_long_double,
1211 cplus_primitive_type_complex,
1212 cplus_primitive_type_double_complex,
1213 cplus_primitive_type_bool,
213e4dc2
TJB
1214 cplus_primitive_type_decfloat,
1215 cplus_primitive_type_decdouble,
1216 cplus_primitive_type_declong,
cad351d1 1217 nr_cplus_primitive_types
c906108c
SS
1218};
1219
cad351d1
UW
1220static void
1221cplus_language_arch_info (struct gdbarch *gdbarch,
1222 struct language_arch_info *lai)
1223{
1224 const struct builtin_type *builtin = builtin_type (gdbarch);
c5504eaf 1225
cad351d1
UW
1226 lai->string_char_type = builtin->builtin_char;
1227 lai->primitive_type_vector
1228 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_cplus_primitive_types + 1,
1229 struct type *);
1230 lai->primitive_type_vector [cplus_primitive_type_int]
1231 = builtin->builtin_int;
1232 lai->primitive_type_vector [cplus_primitive_type_long]
1233 = builtin->builtin_long;
1234 lai->primitive_type_vector [cplus_primitive_type_short]
1235 = builtin->builtin_short;
1236 lai->primitive_type_vector [cplus_primitive_type_char]
1237 = builtin->builtin_char;
1238 lai->primitive_type_vector [cplus_primitive_type_float]
1239 = builtin->builtin_float;
1240 lai->primitive_type_vector [cplus_primitive_type_double]
1241 = builtin->builtin_double;
1242 lai->primitive_type_vector [cplus_primitive_type_void]
1243 = builtin->builtin_void;
1244 lai->primitive_type_vector [cplus_primitive_type_long_long]
1245 = builtin->builtin_long_long;
1246 lai->primitive_type_vector [cplus_primitive_type_signed_char]
1247 = builtin->builtin_signed_char;
1248 lai->primitive_type_vector [cplus_primitive_type_unsigned_char]
1249 = builtin->builtin_unsigned_char;
1250 lai->primitive_type_vector [cplus_primitive_type_unsigned_short]
1251 = builtin->builtin_unsigned_short;
1252 lai->primitive_type_vector [cplus_primitive_type_unsigned_int]
1253 = builtin->builtin_unsigned_int;
1254 lai->primitive_type_vector [cplus_primitive_type_unsigned_long]
1255 = builtin->builtin_unsigned_long;
1256 lai->primitive_type_vector [cplus_primitive_type_unsigned_long_long]
1257 = builtin->builtin_unsigned_long_long;
1258 lai->primitive_type_vector [cplus_primitive_type_long_double]
1259 = builtin->builtin_long_double;
1260 lai->primitive_type_vector [cplus_primitive_type_complex]
1261 = builtin->builtin_complex;
1262 lai->primitive_type_vector [cplus_primitive_type_double_complex]
1263 = builtin->builtin_double_complex;
1264 lai->primitive_type_vector [cplus_primitive_type_bool]
1265 = builtin->builtin_bool;
213e4dc2
TJB
1266 lai->primitive_type_vector [cplus_primitive_type_decfloat]
1267 = builtin->builtin_decfloat;
1268 lai->primitive_type_vector [cplus_primitive_type_decdouble]
1269 = builtin->builtin_decdouble;
1270 lai->primitive_type_vector [cplus_primitive_type_declong]
1271 = builtin->builtin_declong;
fbb06eb1
UW
1272
1273 lai->bool_type_symbol = "bool";
1274 lai->bool_type_default = builtin->builtin_bool;
cad351d1
UW
1275}
1276
c5aa993b
JM
1277const struct language_defn cplus_language_defn =
1278{
1279 "c++", /* Language name */
c906108c 1280 language_cplus,
c906108c
SS
1281 range_check_off,
1282 type_check_off,
63872f9d 1283 case_sensitive_on,
7ca2d3a3 1284 array_row_major,
9a044a89 1285 macro_expansion_c,
6c7a06a3 1286 &exp_descriptor_c,
7c8adf68 1287 c_parse,
c906108c 1288 c_error,
e85c3284 1289 null_post_parser,
c906108c
SS
1290 c_printchar, /* Print a character constant */
1291 c_printstr, /* Function to print string constant */
1292 c_emit_char, /* Print a single char */
c906108c 1293 c_print_type, /* Print a type using appropriate syntax */
5c6ce71d 1294 c_print_typedef, /* Print a typedef using appropriate syntax */
c906108c
SS
1295 c_val_print, /* Print a value using appropriate syntax */
1296 c_value_print, /* Print a top-level value */
b18be20d 1297 cplus_skip_trampoline, /* Language specific skip_trampoline */
2b2d9e11 1298 "this", /* name_of_this */
1fcb5155 1299 cp_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
b368761e 1300 cp_lookup_transparent_type, /* lookup_transparent_type */
9a3d7dfd 1301 cplus_demangle, /* Language specific symbol demangler */
31c27f77 1302 cp_class_name_from_physname, /* Language specific class_name_from_physname */
c906108c
SS
1303 c_op_print_tab, /* expression operators for printing */
1304 1, /* c-style arrays */
1305 0, /* String lower bound */
6084f43a 1306 default_word_break_characters,
41d27058 1307 default_make_symbol_completion_list,
cad351d1 1308 cplus_language_arch_info,
e79af960 1309 default_print_array_index,
41f1b697 1310 cp_pass_by_reference,
ae6a3a4c 1311 c_get_string,
c906108c
SS
1312 LANG_MAGIC
1313};
1314
c5aa993b
JM
1315const struct language_defn asm_language_defn =
1316{
c906108c
SS
1317 "asm", /* Language name */
1318 language_asm,
c906108c
SS
1319 range_check_off,
1320 type_check_off,
63872f9d 1321 case_sensitive_on,
7ca2d3a3 1322 array_row_major,
9a044a89 1323 macro_expansion_c,
6c7a06a3 1324 &exp_descriptor_c,
7c8adf68 1325 c_parse,
c906108c 1326 c_error,
e85c3284 1327 null_post_parser,
c906108c
SS
1328 c_printchar, /* Print a character constant */
1329 c_printstr, /* Function to print string constant */
1330 c_emit_char, /* Print a single char */
c906108c 1331 c_print_type, /* Print a type using appropriate syntax */
5c6ce71d 1332 c_print_typedef, /* Print a typedef using appropriate syntax */
c906108c
SS
1333 c_val_print, /* Print a value using appropriate syntax */
1334 c_value_print, /* Print a top-level value */
f636b87d 1335 NULL, /* Language specific skip_trampoline */
2b2d9e11 1336 NULL, /* name_of_this */
5f9a71c3 1337 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
b368761e 1338 basic_lookup_transparent_type,/* lookup_transparent_type */
9a3d7dfd 1339 NULL, /* Language specific symbol demangler */
31c27f77 1340 NULL, /* Language specific class_name_from_physname */
c906108c
SS
1341 c_op_print_tab, /* expression operators for printing */
1342 1, /* c-style arrays */
1343 0, /* String lower bound */
6084f43a 1344 default_word_break_characters,
41d27058 1345 default_make_symbol_completion_list,
e9667a65 1346 c_language_arch_info, /* FIXME: la_language_arch_info. */
e79af960 1347 default_print_array_index,
41f1b697 1348 default_pass_by_reference,
ae6a3a4c 1349 c_get_string,
c906108c
SS
1350 LANG_MAGIC
1351};
1352
20a0e81d
JB
1353/* The following language_defn does not represent a real language.
1354 It just provides a minimal support a-la-C that should allow users
1355 to do some simple operations when debugging applications that use
1356 a language currently not supported by GDB. */
1357
1358const struct language_defn minimal_language_defn =
1359{
1360 "minimal", /* Language name */
1361 language_minimal,
20a0e81d
JB
1362 range_check_off,
1363 type_check_off,
1364 case_sensitive_on,
7ca2d3a3 1365 array_row_major,
9a044a89 1366 macro_expansion_c,
6c7a06a3 1367 &exp_descriptor_c,
7c8adf68 1368 c_parse,
20a0e81d 1369 c_error,
e85c3284 1370 null_post_parser,
20a0e81d
JB
1371 c_printchar, /* Print a character constant */
1372 c_printstr, /* Function to print string constant */
1373 c_emit_char, /* Print a single char */
20a0e81d 1374 c_print_type, /* Print a type using appropriate syntax */
5c6ce71d 1375 c_print_typedef, /* Print a typedef using appropriate syntax */
20a0e81d
JB
1376 c_val_print, /* Print a value using appropriate syntax */
1377 c_value_print, /* Print a top-level value */
1378 NULL, /* Language specific skip_trampoline */
2b2d9e11 1379 NULL, /* name_of_this */
5f9a71c3 1380 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
b368761e 1381 basic_lookup_transparent_type,/* lookup_transparent_type */
20a0e81d 1382 NULL, /* Language specific symbol demangler */
31c27f77 1383 NULL, /* Language specific class_name_from_physname */
20a0e81d
JB
1384 c_op_print_tab, /* expression operators for printing */
1385 1, /* c-style arrays */
1386 0, /* String lower bound */
6084f43a 1387 default_word_break_characters,
41d27058 1388 default_make_symbol_completion_list,
e9667a65 1389 c_language_arch_info,
e79af960 1390 default_print_array_index,
41f1b697 1391 default_pass_by_reference,
ae6a3a4c 1392 c_get_string,
20a0e81d
JB
1393 LANG_MAGIC
1394};
1395
c906108c 1396void
fba45db2 1397_initialize_c_language (void)
c906108c
SS
1398{
1399 add_language (&c_language_defn);
1400 add_language (&cplus_language_defn);
1401 add_language (&asm_language_defn);
20a0e81d 1402 add_language (&minimal_language_defn);
c906108c 1403}
This page took 0.779439 seconds and 4 git commands to generate.