*** empty log message ***
[deliverable/binutils-gdb.git] / gdb / c-lang.c
CommitLineData
c906108c 1/* C language support routines for GDB, the GNU debugger.
ce27fb25 2
28e7fd62 3 Copyright (C) 1992-2013 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"
21#include "symtab.h"
22#include "gdbtypes.h"
23#include "expression.h"
24#include "parser-defs.h"
25#include "language.h"
26#include "c-lang.h"
745b8ca0 27#include "valprint.h"
84f0252a
JB
28#include "macroscope.h"
29#include "gdb_assert.h"
234b45d4 30#include "charset.h"
a15ef5f5 31#include "gdb_string.h"
9a3d7dfd 32#include "demangle.h"
b18be20d 33#include "cp-abi.h"
1fcb5155 34#include "cp-support.h"
6c7a06a3
TT
35#include "gdb_obstack.h"
36#include <ctype.h>
621c8364 37#include "exceptions.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 66 }
9b20d036 67 internal_error (__FILE__, __LINE__, _("unhandled c_string_type"));
6c7a06a3
TT
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
aff410f1
MS
73 characters of this type in target BYTE_ORDER to the host character
74 set. */
6c7a06a3
TT
75
76static enum c_string_type
f870a310 77classify_type (struct type *elttype, struct gdbarch *gdbarch,
e17a4113 78 const char **encoding)
6c7a06a3 79{
6c7a06a3
TT
80 enum c_string_type result;
81
85e306ed
TT
82 /* We loop because ELTTYPE may be a typedef, and we want to
83 successively peel each typedef until we reach a type we
84 understand. We don't use CHECK_TYPEDEF because that will strip
85 all typedefs at once -- but in C, wchar_t is itself a typedef, so
86 that would do the wrong thing. */
87 while (elttype)
6c7a06a3 88 {
0d5cff50 89 const char *name = TYPE_NAME (elttype);
6c7a06a3
TT
90
91 if (TYPE_CODE (elttype) == TYPE_CODE_CHAR || !name)
92 {
93 result = C_CHAR;
94 goto done;
95 }
96
97 if (!strcmp (name, "wchar_t"))
98 {
99 result = C_WIDE_CHAR;
100 goto done;
101 }
102
103 if (!strcmp (name, "char16_t"))
104 {
105 result = C_CHAR_16;
106 goto done;
107 }
108
109 if (!strcmp (name, "char32_t"))
110 {
111 result = C_CHAR_32;
112 goto done;
113 }
114
85e306ed
TT
115 if (TYPE_CODE (elttype) != TYPE_CODE_TYPEDEF)
116 break;
117
118 /* Call for side effects. */
119 check_typedef (elttype);
120
121 if (TYPE_TARGET_TYPE (elttype))
122 elttype = TYPE_TARGET_TYPE (elttype);
123 else
124 {
125 /* Perhaps check_typedef did not update the target type. In
126 this case, force the lookup again and hope it works out.
127 It never will for C, but it might for C++. */
128 CHECK_TYPEDEF (elttype);
129 }
6c7a06a3 130 }
6c7a06a3
TT
131
132 /* Punt. */
133 result = C_CHAR;
134
135 done:
e17a4113 136 if (encoding)
f870a310 137 *encoding = charset_for_string_type (result, gdbarch);
e17a4113 138
6c7a06a3
TT
139 return result;
140}
141
aff410f1
MS
142/* Print the character C on STREAM as part of the contents of a
143 literal string whose delimiter is QUOTER. Note that that format
144 for printing characters and strings is language specific. */
c906108c 145
6aecb9c2
JB
146void
147c_emit_char (int c, struct type *type,
148 struct ui_file *stream, int quoter)
c906108c 149{
6c7a06a3 150 const char *encoding;
234b45d4 151
f870a310 152 classify_type (type, get_type_arch (type), &encoding);
3b2b8fea 153 generic_emit_char (c, type, stream, quoter, encoding);
c906108c
SS
154}
155
156void
6c7a06a3 157c_printchar (int c, struct type *type, struct ui_file *stream)
c906108c 158{
6c7a06a3 159 enum c_string_type str_type;
6c7a06a3 160
f870a310 161 str_type = classify_type (type, get_type_arch (type), NULL);
6c7a06a3
TT
162 switch (str_type)
163 {
164 case C_CHAR:
165 break;
166 case C_WIDE_CHAR:
167 fputc_filtered ('L', stream);
168 break;
169 case C_CHAR_16:
170 fputc_filtered ('u', stream);
171 break;
172 case C_CHAR_32:
173 fputc_filtered ('U', stream);
174 break;
175 }
176
c906108c 177 fputc_filtered ('\'', stream);
6c7a06a3 178 LA_EMIT_CHAR (c, type, stream, '\'');
c906108c
SS
179 fputc_filtered ('\'', stream);
180}
181
aff410f1
MS
182/* Print the character string STRING, printing at most LENGTH
183 characters. LENGTH is -1 if the string is nul terminated. Each
184 character is WIDTH bytes long. Printing stops early if the number
185 hits print_max; repeat counts are printed as appropriate. Print
186 ellipses at the end if we had to stop before printing LENGTH
187 characters, or if FORCE_ELLIPSES. */
c906108c
SS
188
189void
aff410f1
MS
190c_printstr (struct ui_file *stream, struct type *type,
191 const gdb_byte *string, unsigned int length,
192 const char *user_encoding, int force_ellipses,
79a45b7d 193 const struct value_print_options *options)
c906108c 194{
3b2b8fea
TT
195 enum c_string_type str_type;
196 const char *type_encoding;
197 const char *encoding;
198
f870a310
TT
199 str_type = (classify_type (type, get_type_arch (type), &type_encoding)
200 & ~C_CHAR);
6c7a06a3
TT
201 switch (str_type)
202 {
203 case C_STRING:
204 break;
205 case C_WIDE_STRING:
206 fputs_filtered ("L", stream);
207 break;
208 case C_STRING_16:
209 fputs_filtered ("u", stream);
210 break;
211 case C_STRING_32:
212 fputs_filtered ("U", stream);
213 break;
214 }
215
3b2b8fea 216 encoding = (user_encoding && *user_encoding) ? user_encoding : type_encoding;
6c7a06a3 217
3b2b8fea
TT
218 generic_printstr (stream, type, string, length, encoding, force_ellipses,
219 '"', 1, options);
c906108c 220}
ae6a3a4c
TJB
221
222/* Obtain a C string from the inferior storing it in a newly allocated
aff410f1
MS
223 buffer in BUFFER, which should be freed by the caller. If the in-
224 and out-parameter *LENGTH is specified at -1, the string is read
fbb8f299 225 until a null character of the appropriate width is found, otherwise
aff410f1
MS
226 the string is read to the length of characters specified. The size
227 of a character is determined by the length of the target type of
228 the pointer or array. If VALUE is an array with a known length,
229 the function will not read past the end of the array. On
230 completion, *LENGTH will be set to the size of the string read in
fbb8f299
PM
231 characters. (If a length of -1 is specified, the length returned
232 will not include the null character). CHARSET is always set to the
233 target charset. */
ae6a3a4c
TJB
234
235void
aff410f1
MS
236c_get_string (struct value *value, gdb_byte **buffer,
237 int *length, struct type **char_type,
238 const char **charset)
ae6a3a4c
TJB
239{
240 int err, width;
241 unsigned int fetchlimit;
242 struct type *type = check_typedef (value_type (value));
243 struct type *element_type = TYPE_TARGET_TYPE (type);
fbb8f299 244 int req_length = *length;
aff410f1
MS
245 enum bfd_endian byte_order
246 = gdbarch_byte_order (get_type_arch (type));
ae6a3a4c
TJB
247
248 if (element_type == NULL)
249 goto error;
250
251 if (TYPE_CODE (type) == TYPE_CODE_ARRAY)
252 {
aff410f1
MS
253 /* If we know the size of the array, we can use it as a limit on
254 the number of characters to be fetched. */
ae6a3a4c
TJB
255 if (TYPE_NFIELDS (type) == 1
256 && TYPE_CODE (TYPE_FIELD_TYPE (type, 0)) == TYPE_CODE_RANGE)
257 {
258 LONGEST low_bound, high_bound;
259
260 get_discrete_bounds (TYPE_FIELD_TYPE (type, 0),
261 &low_bound, &high_bound);
262 fetchlimit = high_bound - low_bound + 1;
263 }
264 else
265 fetchlimit = UINT_MAX;
266 }
267 else if (TYPE_CODE (type) == TYPE_CODE_PTR)
268 fetchlimit = UINT_MAX;
269 else
270 /* We work only with arrays and pointers. */
271 goto error;
272
96c07c5b 273 if (! c_textual_element_type (element_type, 0))
ae6a3a4c 274 goto error;
df54f8eb 275 classify_type (element_type, get_type_arch (element_type), charset);
ae6a3a4c
TJB
276 width = TYPE_LENGTH (element_type);
277
aff410f1
MS
278 /* If the string lives in GDB's memory instead of the inferior's,
279 then we just need to copy it to BUFFER. Also, since such strings
280 are arrays with known size, FETCHLIMIT will hold the size of the
281 array. */
ae6a3a4c
TJB
282 if ((VALUE_LVAL (value) == not_lval
283 || VALUE_LVAL (value) == lval_internalvar)
284 && fetchlimit != UINT_MAX)
285 {
286 int i;
287 const gdb_byte *contents = value_contents (value);
288
fbb8f299
PM
289 /* If a length is specified, use that. */
290 if (*length >= 0)
291 i = *length;
292 else
293 /* Otherwise, look for a null character. */
294 for (i = 0; i < fetchlimit; i++)
aff410f1
MS
295 if (extract_unsigned_integer (contents + i * width,
296 width, byte_order) == 0)
fbb8f299
PM
297 break;
298
299 /* I is now either a user-defined length, the number of non-null
300 characters, or FETCHLIMIT. */
ae6a3a4c
TJB
301 *length = i * width;
302 *buffer = xmalloc (*length);
303 memcpy (*buffer, contents, *length);
304 err = 0;
305 }
306 else
307 {
621c8364
TT
308 CORE_ADDR addr = value_as_address (value);
309
310 err = read_string (addr, *length, width, fetchlimit,
311 byte_order, buffer, length);
ae6a3a4c
TJB
312 if (err)
313 {
8ea5dfdf 314 xfree (*buffer);
621c8364
TT
315 if (err == EIO)
316 throw_error (MEMORY_ERROR, "Address %s out of bounds",
317 paddress (get_type_arch (type), addr));
318 else
319 error (_("Error reading string from inferior: %s"),
320 safe_strerror (err));
ae6a3a4c
TJB
321 }
322 }
323
fbb8f299
PM
324 /* If the LENGTH is specified at -1, we want to return the string
325 length up to the terminating null character. If an actual length
326 was specified, we want to return the length of exactly what was
327 read. */
328 if (req_length == -1)
329 /* If the last character is null, subtract it from LENGTH. */
330 if (*length > 0
aff410f1
MS
331 && extract_unsigned_integer (*buffer + *length - width,
332 width, byte_order) == 0)
fbb8f299
PM
333 *length -= width;
334
335 /* The read_string function will return the number of bytes read.
336 If length returned from read_string was > 0, return the number of
337 characters read by dividing the number of bytes by width. */
338 if (*length != 0)
339 *length = *length / width;
ae6a3a4c 340
96c07c5b 341 *char_type = element_type;
ae6a3a4c
TJB
342
343 return;
344
345 error:
346 {
347 char *type_str;
348
349 type_str = type_to_string (type);
350 if (type_str)
351 {
352 make_cleanup (xfree, type_str);
353 error (_("Trying to read string with inappropriate type `%s'."),
354 type_str);
355 }
356 else
357 error (_("Trying to read string with inappropriate type."));
358 }
359}
360
c906108c 361\f
6c7a06a3
TT
362/* Evaluating C and C++ expressions. */
363
364/* Convert a UCN. The digits of the UCN start at P and extend no
365 farther than LIMIT. DEST_CHARSET is the name of the character set
366 into which the UCN should be converted. The results are written to
367 OUTPUT. LENGTH is the maximum length of the UCN, either 4 or 8.
368 Returns a pointer to just after the final digit of the UCN. */
369
370static char *
371convert_ucn (char *p, char *limit, const char *dest_charset,
372 struct obstack *output, int length)
373{
374 unsigned long result = 0;
375 gdb_byte data[4];
376 int i;
377
378 for (i = 0; i < length && p < limit && isxdigit (*p); ++i, ++p)
379 result = (result << 4) + host_hex_value (*p);
380
381 for (i = 3; i >= 0; --i)
382 {
383 data[i] = result & 0xff;
384 result >>= 8;
385 }
386
aff410f1
MS
387 convert_between_encodings ("UTF-32BE", dest_charset, data,
388 4, 4, output, translit_none);
6c7a06a3
TT
389
390 return p;
391}
392
393/* Emit a character, VALUE, which was specified numerically, to
394 OUTPUT. TYPE is the target character type. */
395
396static void
397emit_numeric_character (struct type *type, unsigned long value,
398 struct obstack *output)
399{
400 gdb_byte *buffer;
401
402 buffer = alloca (TYPE_LENGTH (type));
403 pack_long (buffer, type, value);
404 obstack_grow (output, buffer, TYPE_LENGTH (type));
405}
406
407/* Convert an octal escape sequence. TYPE is the target character
408 type. The digits of the escape sequence begin at P and extend no
409 farther than LIMIT. The result is written to OUTPUT. Returns a
410 pointer to just after the final digit of the escape sequence. */
411
412static char *
aff410f1
MS
413convert_octal (struct type *type, char *p,
414 char *limit, struct obstack *output)
6c7a06a3 415{
30b66ecc 416 int i;
6c7a06a3
TT
417 unsigned long value = 0;
418
30b66ecc
TT
419 for (i = 0;
420 i < 3 && p < limit && isdigit (*p) && *p != '8' && *p != '9';
421 ++i)
6c7a06a3
TT
422 {
423 value = 8 * value + host_hex_value (*p);
424 ++p;
425 }
426
427 emit_numeric_character (type, value, output);
428
429 return p;
430}
431
432/* Convert a hex escape sequence. TYPE is the target character type.
433 The digits of the escape sequence begin at P and extend no farther
434 than LIMIT. The result is written to OUTPUT. Returns a pointer to
435 just after the final digit of the escape sequence. */
436
437static char *
aff410f1
MS
438convert_hex (struct type *type, char *p,
439 char *limit, struct obstack *output)
6c7a06a3
TT
440{
441 unsigned long value = 0;
442
443 while (p < limit && isxdigit (*p))
444 {
445 value = 16 * value + host_hex_value (*p);
446 ++p;
447 }
448
449 emit_numeric_character (type, value, output);
450
451 return p;
452}
453
454#define ADVANCE \
455 do { \
456 ++p; \
457 if (p == limit) \
458 error (_("Malformed escape sequence")); \
459 } while (0)
460
461/* Convert an escape sequence to a target format. TYPE is the target
462 character type to use, and DEST_CHARSET is the name of the target
463 character set. The backslash of the escape sequence is at *P, and
464 the escape sequence will not extend past LIMIT. The results are
465 written to OUTPUT. Returns a pointer to just past the final
466 character of the escape sequence. */
467
468static char *
469convert_escape (struct type *type, const char *dest_charset,
470 char *p, char *limit, struct obstack *output)
471{
472 /* Skip the backslash. */
473 ADVANCE;
474
475 switch (*p)
476 {
477 case '\\':
478 obstack_1grow (output, '\\');
479 ++p;
480 break;
481
482 case 'x':
483 ADVANCE;
484 if (!isxdigit (*p))
485 error (_("\\x used with no following hex digits."));
486 p = convert_hex (type, p, limit, output);
487 break;
488
489 case '0':
490 case '1':
491 case '2':
492 case '3':
493 case '4':
494 case '5':
495 case '6':
496 case '7':
497 p = convert_octal (type, p, limit, output);
498 break;
499
500 case 'u':
501 case 'U':
502 {
503 int length = *p == 'u' ? 4 : 8;
c5504eaf 504
6c7a06a3
TT
505 ADVANCE;
506 if (!isxdigit (*p))
507 error (_("\\u used with no following hex digits"));
508 p = convert_ucn (p, limit, dest_charset, output, length);
509 }
510 }
511
512 return p;
513}
514
515/* Given a single string from a (C-specific) OP_STRING list, convert
516 it to a target string, handling escape sequences specially. The
517 output is written to OUTPUT. DATA is the input string, which has
518 length LEN. DEST_CHARSET is the name of the target character set,
519 and TYPE is the type of target character to use. */
520
521static void
522parse_one_string (struct obstack *output, char *data, int len,
523 const char *dest_charset, struct type *type)
524{
525 char *limit;
526
527 limit = data + len;
528
529 while (data < limit)
530 {
531 char *p = data;
c5504eaf 532
6c7a06a3
TT
533 /* Look for next escape, or the end of the input. */
534 while (p < limit && *p != '\\')
535 ++p;
536 /* If we saw a run of characters, convert them all. */
537 if (p > data)
538 convert_between_encodings (host_charset (), dest_charset,
aff410f1
MS
539 data, p - data, 1,
540 output, translit_none);
6c7a06a3
TT
541 /* If we saw an escape, convert it. */
542 if (p < limit)
543 p = convert_escape (type, dest_charset, p, limit, output);
544 data = p;
545 }
546}
547
548/* Expression evaluator for the C language family. Most operations
549 are delegated to evaluate_subexp_standard; see that function for a
550 description of the arguments. */
551
f4b8a18d 552struct value *
6c7a06a3
TT
553evaluate_subexp_c (struct type *expect_type, struct expression *exp,
554 int *pos, enum noside noside)
555{
556 enum exp_opcode op = exp->elts[*pos].opcode;
557
558 switch (op)
559 {
560 case OP_STRING:
561 {
562 int oplen, limit;
563 struct type *type;
564 struct obstack output;
565 struct cleanup *cleanup;
566 struct value *result;
567 enum c_string_type dest_type;
568 const char *dest_charset;
c50491a7 569 int satisfy_expected = 0;
6c7a06a3
TT
570
571 obstack_init (&output);
572 cleanup = make_cleanup_obstack_free (&output);
573
574 ++*pos;
575 oplen = longest_to_int (exp->elts[*pos].longconst);
576
577 ++*pos;
578 limit = *pos + BYTES_TO_EXP_ELEM (oplen + 1);
579 dest_type
580 = (enum c_string_type) longest_to_int (exp->elts[*pos].longconst);
581 switch (dest_type & ~C_CHAR)
582 {
583 case C_STRING:
d80b854b
UW
584 type = language_string_char_type (exp->language_defn,
585 exp->gdbarch);
6c7a06a3
TT
586 break;
587 case C_WIDE_STRING:
e6c014f2
UW
588 type = lookup_typename (exp->language_defn, exp->gdbarch,
589 "wchar_t", NULL, 0);
6c7a06a3
TT
590 break;
591 case C_STRING_16:
e6c014f2
UW
592 type = lookup_typename (exp->language_defn, exp->gdbarch,
593 "char16_t", NULL, 0);
6c7a06a3
TT
594 break;
595 case C_STRING_32:
e6c014f2
UW
596 type = lookup_typename (exp->language_defn, exp->gdbarch,
597 "char32_t", NULL, 0);
6c7a06a3
TT
598 break;
599 default:
9b20d036 600 internal_error (__FILE__, __LINE__, _("unhandled c_string_type"));
6c7a06a3 601 }
546e879e
TT
602
603 /* Ensure TYPE_LENGTH is valid for TYPE. */
604 check_typedef (type);
605
c50491a7
TT
606 /* If the caller expects an array of some integral type,
607 satisfy them. If something odder is expected, rely on the
608 caller to cast. */
609 if (expect_type && TYPE_CODE (expect_type) == TYPE_CODE_ARRAY)
610 {
611 struct type *element_type
612 = check_typedef (TYPE_TARGET_TYPE (expect_type));
613
614 if (TYPE_CODE (element_type) == TYPE_CODE_INT
615 || TYPE_CODE (element_type) == TYPE_CODE_CHAR)
616 {
617 type = element_type;
618 satisfy_expected = 1;
619 }
620 }
621
f870a310 622 dest_charset = charset_for_string_type (dest_type, exp->gdbarch);
6c7a06a3
TT
623
624 ++*pos;
625 while (*pos < limit)
626 {
627 int len;
628
629 len = longest_to_int (exp->elts[*pos].longconst);
630
631 ++*pos;
632 if (noside != EVAL_SKIP)
633 parse_one_string (&output, &exp->elts[*pos].string, len,
634 dest_charset, type);
635 *pos += BYTES_TO_EXP_ELEM (len);
636 }
637
638 /* Skip the trailing length and opcode. */
639 *pos += 2;
640
641 if (noside == EVAL_SKIP)
334cc82d
TT
642 {
643 /* Return a dummy value of the appropriate type. */
c50491a7
TT
644 if (expect_type != NULL)
645 result = allocate_value (expect_type);
646 else if ((dest_type & C_CHAR) != 0)
334cc82d
TT
647 result = allocate_value (type);
648 else
3b7538c0 649 result = value_cstring ("", 0, type);
334cc82d
TT
650 do_cleanups (cleanup);
651 return result;
652 }
6c7a06a3
TT
653
654 if ((dest_type & C_CHAR) != 0)
655 {
656 LONGEST value;
657
658 if (obstack_object_size (&output) != TYPE_LENGTH (type))
3e43a32a
MS
659 error (_("Could not convert character "
660 "constant to target character set"));
6c7a06a3
TT
661 value = unpack_long (type, obstack_base (&output));
662 result = value_from_longest (type, value);
663 }
664 else
665 {
666 int i;
c5504eaf 667
6c7a06a3
TT
668 /* Write the terminating character. */
669 for (i = 0; i < TYPE_LENGTH (type); ++i)
670 obstack_1grow (&output, 0);
c50491a7
TT
671
672 if (satisfy_expected)
673 {
674 LONGEST low_bound, high_bound;
675 int element_size = TYPE_LENGTH (type);
676
677 if (get_discrete_bounds (TYPE_INDEX_TYPE (expect_type),
678 &low_bound, &high_bound) < 0)
679 {
680 low_bound = 0;
681 high_bound = (TYPE_LENGTH (expect_type) / element_size) - 1;
682 }
683 if (obstack_object_size (&output) / element_size
684 > (high_bound - low_bound + 1))
685 error (_("Too many array elements"));
686
687 result = allocate_value (expect_type);
688 memcpy (value_contents_raw (result), obstack_base (&output),
689 obstack_object_size (&output));
690 }
691 else
692 result = value_cstring (obstack_base (&output),
693 obstack_object_size (&output),
694 type);
6c7a06a3
TT
695 }
696 do_cleanups (cleanup);
697 return result;
698 }
699 break;
700
701 default:
702 break;
703 }
704 return evaluate_subexp_standard (expect_type, exp, pos, noside);
705}
c5aa993b 706
84f0252a 707
84f0252a 708\f
c906108c
SS
709/* Table mapping opcodes into strings for printing operators
710 and precedences of the operators. */
711
712const struct op_print c_op_print_tab[] =
c5aa993b
JM
713{
714 {",", BINOP_COMMA, PREC_COMMA, 0},
715 {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
716 {"||", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
717 {"&&", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
718 {"|", BINOP_BITWISE_IOR, PREC_BITWISE_IOR, 0},
719 {"^", BINOP_BITWISE_XOR, PREC_BITWISE_XOR, 0},
720 {"&", BINOP_BITWISE_AND, PREC_BITWISE_AND, 0},
721 {"==", BINOP_EQUAL, PREC_EQUAL, 0},
722 {"!=", BINOP_NOTEQUAL, PREC_EQUAL, 0},
723 {"<=", BINOP_LEQ, PREC_ORDER, 0},
724 {">=", BINOP_GEQ, PREC_ORDER, 0},
725 {">", BINOP_GTR, PREC_ORDER, 0},
726 {"<", BINOP_LESS, PREC_ORDER, 0},
727 {">>", BINOP_RSH, PREC_SHIFT, 0},
728 {"<<", BINOP_LSH, PREC_SHIFT, 0},
729 {"+", BINOP_ADD, PREC_ADD, 0},
730 {"-", BINOP_SUB, PREC_ADD, 0},
731 {"*", BINOP_MUL, PREC_MUL, 0},
732 {"/", BINOP_DIV, PREC_MUL, 0},
733 {"%", BINOP_REM, PREC_MUL, 0},
734 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
735 {"-", UNOP_NEG, PREC_PREFIX, 0},
736 {"!", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
737 {"~", UNOP_COMPLEMENT, PREC_PREFIX, 0},
738 {"*", UNOP_IND, PREC_PREFIX, 0},
739 {"&", UNOP_ADDR, PREC_PREFIX, 0},
740 {"sizeof ", UNOP_SIZEOF, PREC_PREFIX, 0},
741 {"++", UNOP_PREINCREMENT, PREC_PREFIX, 0},
742 {"--", UNOP_PREDECREMENT, PREC_PREFIX, 0},
c5aa993b 743 {NULL, 0, 0, 0}
c906108c
SS
744};
745\f
685419e2
AC
746enum c_primitive_types {
747 c_primitive_type_int,
748 c_primitive_type_long,
749 c_primitive_type_short,
750 c_primitive_type_char,
751 c_primitive_type_float,
752 c_primitive_type_double,
753 c_primitive_type_void,
754 c_primitive_type_long_long,
755 c_primitive_type_signed_char,
756 c_primitive_type_unsigned_char,
757 c_primitive_type_unsigned_short,
758 c_primitive_type_unsigned_int,
759 c_primitive_type_unsigned_long,
760 c_primitive_type_unsigned_long_long,
761 c_primitive_type_long_double,
762 c_primitive_type_complex,
763 c_primitive_type_double_complex,
213e4dc2
TJB
764 c_primitive_type_decfloat,
765 c_primitive_type_decdouble,
766 c_primitive_type_declong,
685419e2
AC
767 nr_c_primitive_types
768};
769
e9667a65 770void
685419e2
AC
771c_language_arch_info (struct gdbarch *gdbarch,
772 struct language_arch_info *lai)
773{
774 const struct builtin_type *builtin = builtin_type (gdbarch);
c5504eaf 775
e9667a65 776 lai->string_char_type = builtin->builtin_char;
685419e2
AC
777 lai->primitive_type_vector
778 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_c_primitive_types + 1,
779 struct type *);
780 lai->primitive_type_vector [c_primitive_type_int] = builtin->builtin_int;
781 lai->primitive_type_vector [c_primitive_type_long] = builtin->builtin_long;
782 lai->primitive_type_vector [c_primitive_type_short] = builtin->builtin_short;
783 lai->primitive_type_vector [c_primitive_type_char] = builtin->builtin_char;
784 lai->primitive_type_vector [c_primitive_type_float] = builtin->builtin_float;
785 lai->primitive_type_vector [c_primitive_type_double] = builtin->builtin_double;
786 lai->primitive_type_vector [c_primitive_type_void] = builtin->builtin_void;
787 lai->primitive_type_vector [c_primitive_type_long_long] = builtin->builtin_long_long;
788 lai->primitive_type_vector [c_primitive_type_signed_char] = builtin->builtin_signed_char;
789 lai->primitive_type_vector [c_primitive_type_unsigned_char] = builtin->builtin_unsigned_char;
790 lai->primitive_type_vector [c_primitive_type_unsigned_short] = builtin->builtin_unsigned_short;
791 lai->primitive_type_vector [c_primitive_type_unsigned_int] = builtin->builtin_unsigned_int;
792 lai->primitive_type_vector [c_primitive_type_unsigned_long] = builtin->builtin_unsigned_long;
793 lai->primitive_type_vector [c_primitive_type_unsigned_long_long] = builtin->builtin_unsigned_long_long;
794 lai->primitive_type_vector [c_primitive_type_long_double] = builtin->builtin_long_double;
795 lai->primitive_type_vector [c_primitive_type_complex] = builtin->builtin_complex;
796 lai->primitive_type_vector [c_primitive_type_double_complex] = builtin->builtin_double_complex;
213e4dc2
TJB
797 lai->primitive_type_vector [c_primitive_type_decfloat] = builtin->builtin_decfloat;
798 lai->primitive_type_vector [c_primitive_type_decdouble] = builtin->builtin_decdouble;
799 lai->primitive_type_vector [c_primitive_type_declong] = builtin->builtin_declong;
fbb06eb1
UW
800
801 lai->bool_type_default = builtin->builtin_int;
cad351d1 802}
685419e2 803
6aecb9c2 804const struct exp_descriptor exp_descriptor_c =
6c7a06a3
TT
805{
806 print_subexp_standard,
807 operator_length_standard,
c0201579 808 operator_check_standard,
6c7a06a3
TT
809 op_name_standard,
810 dump_subexp_body_standard,
811 evaluate_subexp_c
812};
813
c5aa993b
JM
814const struct language_defn c_language_defn =
815{
c906108c
SS
816 "c", /* Language name */
817 language_c,
c906108c 818 range_check_off,
63872f9d 819 case_sensitive_on,
7ca2d3a3 820 array_row_major,
9a044a89 821 macro_expansion_c,
6c7a06a3 822 &exp_descriptor_c,
7c8adf68 823 c_parse,
c906108c 824 c_error,
e85c3284 825 null_post_parser,
c906108c
SS
826 c_printchar, /* Print a character constant */
827 c_printstr, /* Function to print string constant */
828 c_emit_char, /* Print a single char */
c906108c 829 c_print_type, /* Print a type using appropriate syntax */
5c6ce71d 830 c_print_typedef, /* Print a typedef using appropriate syntax */
c906108c
SS
831 c_val_print, /* Print a value using appropriate syntax */
832 c_value_print, /* Print a top-level value */
a5ee536b 833 default_read_var_value, /* la_read_var_value */
f636b87d 834 NULL, /* Language specific skip_trampoline */
2b2d9e11 835 NULL, /* name_of_this */
5f9a71c3 836 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
b368761e 837 basic_lookup_transparent_type,/* lookup_transparent_type */
9a3d7dfd 838 NULL, /* Language specific symbol demangler */
aff410f1
MS
839 NULL, /* Language specific
840 class_name_from_physname */
c906108c
SS
841 c_op_print_tab, /* expression operators for printing */
842 1, /* c-style arrays */
843 0, /* String lower bound */
6084f43a 844 default_word_break_characters,
41d27058 845 default_make_symbol_completion_list,
685419e2 846 c_language_arch_info,
e79af960 847 default_print_array_index,
41f1b697 848 default_pass_by_reference,
ae6a3a4c 849 c_get_string,
1a119f36 850 NULL, /* la_get_symbol_name_cmp */
f8eba3c6 851 iterate_over_symbols,
c906108c
SS
852 LANG_MAGIC
853};
854
cad351d1
UW
855enum cplus_primitive_types {
856 cplus_primitive_type_int,
857 cplus_primitive_type_long,
858 cplus_primitive_type_short,
859 cplus_primitive_type_char,
860 cplus_primitive_type_float,
861 cplus_primitive_type_double,
862 cplus_primitive_type_void,
863 cplus_primitive_type_long_long,
864 cplus_primitive_type_signed_char,
865 cplus_primitive_type_unsigned_char,
866 cplus_primitive_type_unsigned_short,
867 cplus_primitive_type_unsigned_int,
868 cplus_primitive_type_unsigned_long,
869 cplus_primitive_type_unsigned_long_long,
870 cplus_primitive_type_long_double,
871 cplus_primitive_type_complex,
872 cplus_primitive_type_double_complex,
873 cplus_primitive_type_bool,
213e4dc2
TJB
874 cplus_primitive_type_decfloat,
875 cplus_primitive_type_decdouble,
876 cplus_primitive_type_declong,
cad351d1 877 nr_cplus_primitive_types
c906108c
SS
878};
879
cad351d1
UW
880static void
881cplus_language_arch_info (struct gdbarch *gdbarch,
882 struct language_arch_info *lai)
883{
884 const struct builtin_type *builtin = builtin_type (gdbarch);
c5504eaf 885
cad351d1
UW
886 lai->string_char_type = builtin->builtin_char;
887 lai->primitive_type_vector
888 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_cplus_primitive_types + 1,
889 struct type *);
890 lai->primitive_type_vector [cplus_primitive_type_int]
891 = builtin->builtin_int;
892 lai->primitive_type_vector [cplus_primitive_type_long]
893 = builtin->builtin_long;
894 lai->primitive_type_vector [cplus_primitive_type_short]
895 = builtin->builtin_short;
896 lai->primitive_type_vector [cplus_primitive_type_char]
897 = builtin->builtin_char;
898 lai->primitive_type_vector [cplus_primitive_type_float]
899 = builtin->builtin_float;
900 lai->primitive_type_vector [cplus_primitive_type_double]
901 = builtin->builtin_double;
902 lai->primitive_type_vector [cplus_primitive_type_void]
903 = builtin->builtin_void;
904 lai->primitive_type_vector [cplus_primitive_type_long_long]
905 = builtin->builtin_long_long;
906 lai->primitive_type_vector [cplus_primitive_type_signed_char]
907 = builtin->builtin_signed_char;
908 lai->primitive_type_vector [cplus_primitive_type_unsigned_char]
909 = builtin->builtin_unsigned_char;
910 lai->primitive_type_vector [cplus_primitive_type_unsigned_short]
911 = builtin->builtin_unsigned_short;
912 lai->primitive_type_vector [cplus_primitive_type_unsigned_int]
913 = builtin->builtin_unsigned_int;
914 lai->primitive_type_vector [cplus_primitive_type_unsigned_long]
915 = builtin->builtin_unsigned_long;
916 lai->primitive_type_vector [cplus_primitive_type_unsigned_long_long]
917 = builtin->builtin_unsigned_long_long;
918 lai->primitive_type_vector [cplus_primitive_type_long_double]
919 = builtin->builtin_long_double;
920 lai->primitive_type_vector [cplus_primitive_type_complex]
921 = builtin->builtin_complex;
922 lai->primitive_type_vector [cplus_primitive_type_double_complex]
923 = builtin->builtin_double_complex;
924 lai->primitive_type_vector [cplus_primitive_type_bool]
925 = builtin->builtin_bool;
213e4dc2
TJB
926 lai->primitive_type_vector [cplus_primitive_type_decfloat]
927 = builtin->builtin_decfloat;
928 lai->primitive_type_vector [cplus_primitive_type_decdouble]
929 = builtin->builtin_decdouble;
930 lai->primitive_type_vector [cplus_primitive_type_declong]
931 = builtin->builtin_declong;
fbb06eb1
UW
932
933 lai->bool_type_symbol = "bool";
934 lai->bool_type_default = builtin->builtin_bool;
cad351d1
UW
935}
936
c5aa993b
JM
937const struct language_defn cplus_language_defn =
938{
939 "c++", /* Language name */
c906108c 940 language_cplus,
c906108c 941 range_check_off,
63872f9d 942 case_sensitive_on,
7ca2d3a3 943 array_row_major,
9a044a89 944 macro_expansion_c,
6c7a06a3 945 &exp_descriptor_c,
7c8adf68 946 c_parse,
c906108c 947 c_error,
e85c3284 948 null_post_parser,
c906108c
SS
949 c_printchar, /* Print a character constant */
950 c_printstr, /* Function to print string constant */
951 c_emit_char, /* Print a single char */
c906108c 952 c_print_type, /* Print a type using appropriate syntax */
5c6ce71d 953 c_print_typedef, /* Print a typedef using appropriate syntax */
c906108c
SS
954 c_val_print, /* Print a value using appropriate syntax */
955 c_value_print, /* Print a top-level value */
a5ee536b 956 default_read_var_value, /* la_read_var_value */
b18be20d 957 cplus_skip_trampoline, /* Language specific skip_trampoline */
2b2d9e11 958 "this", /* name_of_this */
1fcb5155 959 cp_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
b368761e 960 cp_lookup_transparent_type, /* lookup_transparent_type */
9a3d7dfd 961 cplus_demangle, /* Language specific symbol demangler */
aff410f1
MS
962 cp_class_name_from_physname, /* Language specific
963 class_name_from_physname */
c906108c
SS
964 c_op_print_tab, /* expression operators for printing */
965 1, /* c-style arrays */
966 0, /* String lower bound */
6084f43a 967 default_word_break_characters,
41d27058 968 default_make_symbol_completion_list,
cad351d1 969 cplus_language_arch_info,
e79af960 970 default_print_array_index,
41f1b697 971 cp_pass_by_reference,
ae6a3a4c 972 c_get_string,
1a119f36 973 NULL, /* la_get_symbol_name_cmp */
f8eba3c6 974 iterate_over_symbols,
c906108c
SS
975 LANG_MAGIC
976};
977
c5aa993b
JM
978const struct language_defn asm_language_defn =
979{
c906108c
SS
980 "asm", /* Language name */
981 language_asm,
c906108c 982 range_check_off,
63872f9d 983 case_sensitive_on,
7ca2d3a3 984 array_row_major,
9a044a89 985 macro_expansion_c,
6c7a06a3 986 &exp_descriptor_c,
7c8adf68 987 c_parse,
c906108c 988 c_error,
e85c3284 989 null_post_parser,
c906108c
SS
990 c_printchar, /* Print a character constant */
991 c_printstr, /* Function to print string constant */
992 c_emit_char, /* Print a single char */
c906108c 993 c_print_type, /* Print a type using appropriate syntax */
5c6ce71d 994 c_print_typedef, /* Print a typedef using appropriate syntax */
c906108c
SS
995 c_val_print, /* Print a value using appropriate syntax */
996 c_value_print, /* Print a top-level value */
a5ee536b 997 default_read_var_value, /* la_read_var_value */
f636b87d 998 NULL, /* Language specific skip_trampoline */
2b2d9e11 999 NULL, /* name_of_this */
5f9a71c3 1000 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
b368761e 1001 basic_lookup_transparent_type,/* lookup_transparent_type */
9a3d7dfd 1002 NULL, /* Language specific symbol demangler */
aff410f1
MS
1003 NULL, /* Language specific
1004 class_name_from_physname */
c906108c
SS
1005 c_op_print_tab, /* expression operators for printing */
1006 1, /* c-style arrays */
1007 0, /* String lower bound */
6084f43a 1008 default_word_break_characters,
41d27058 1009 default_make_symbol_completion_list,
aff410f1 1010 c_language_arch_info, /* FIXME: la_language_arch_info. */
e79af960 1011 default_print_array_index,
41f1b697 1012 default_pass_by_reference,
ae6a3a4c 1013 c_get_string,
1a119f36 1014 NULL, /* la_get_symbol_name_cmp */
f8eba3c6 1015 iterate_over_symbols,
c906108c
SS
1016 LANG_MAGIC
1017};
1018
20a0e81d
JB
1019/* The following language_defn does not represent a real language.
1020 It just provides a minimal support a-la-C that should allow users
1021 to do some simple operations when debugging applications that use
1022 a language currently not supported by GDB. */
1023
1024const struct language_defn minimal_language_defn =
1025{
1026 "minimal", /* Language name */
1027 language_minimal,
20a0e81d 1028 range_check_off,
20a0e81d 1029 case_sensitive_on,
7ca2d3a3 1030 array_row_major,
9a044a89 1031 macro_expansion_c,
6c7a06a3 1032 &exp_descriptor_c,
7c8adf68 1033 c_parse,
20a0e81d 1034 c_error,
e85c3284 1035 null_post_parser,
20a0e81d
JB
1036 c_printchar, /* Print a character constant */
1037 c_printstr, /* Function to print string constant */
1038 c_emit_char, /* Print a single char */
20a0e81d 1039 c_print_type, /* Print a type using appropriate syntax */
5c6ce71d 1040 c_print_typedef, /* Print a typedef using appropriate syntax */
20a0e81d
JB
1041 c_val_print, /* Print a value using appropriate syntax */
1042 c_value_print, /* Print a top-level value */
a5ee536b 1043 default_read_var_value, /* la_read_var_value */
20a0e81d 1044 NULL, /* Language specific skip_trampoline */
2b2d9e11 1045 NULL, /* name_of_this */
5f9a71c3 1046 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
b368761e 1047 basic_lookup_transparent_type,/* lookup_transparent_type */
20a0e81d 1048 NULL, /* Language specific symbol demangler */
aff410f1
MS
1049 NULL, /* Language specific
1050 class_name_from_physname */
20a0e81d
JB
1051 c_op_print_tab, /* expression operators for printing */
1052 1, /* c-style arrays */
1053 0, /* String lower bound */
6084f43a 1054 default_word_break_characters,
41d27058 1055 default_make_symbol_completion_list,
e9667a65 1056 c_language_arch_info,
e79af960 1057 default_print_array_index,
41f1b697 1058 default_pass_by_reference,
ae6a3a4c 1059 c_get_string,
1a119f36 1060 NULL, /* la_get_symbol_name_cmp */
f8eba3c6 1061 iterate_over_symbols,
20a0e81d
JB
1062 LANG_MAGIC
1063};
1064
c906108c 1065void
fba45db2 1066_initialize_c_language (void)
c906108c
SS
1067{
1068 add_language (&c_language_defn);
1069 add_language (&cplus_language_defn);
1070 add_language (&asm_language_defn);
20a0e81d 1071 add_language (&minimal_language_defn);
c906108c 1072}
This page took 0.990049 seconds and 4 git commands to generate.