-Wpointer-sign: alpha-tdep.c.
[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,
ac91cd70 539 (gdb_byte *) data, p - data, 1,
aff410f1 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},
a016fc87 735 {"+", UNOP_PLUS, PREC_PREFIX, 0},
c5aa993b
JM
736 {"-", UNOP_NEG, PREC_PREFIX, 0},
737 {"!", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
738 {"~", UNOP_COMPLEMENT, PREC_PREFIX, 0},
739 {"*", UNOP_IND, PREC_PREFIX, 0},
740 {"&", UNOP_ADDR, PREC_PREFIX, 0},
741 {"sizeof ", UNOP_SIZEOF, PREC_PREFIX, 0},
742 {"++", UNOP_PREINCREMENT, PREC_PREFIX, 0},
743 {"--", UNOP_PREDECREMENT, PREC_PREFIX, 0},
c5aa993b 744 {NULL, 0, 0, 0}
c906108c
SS
745};
746\f
685419e2
AC
747enum c_primitive_types {
748 c_primitive_type_int,
749 c_primitive_type_long,
750 c_primitive_type_short,
751 c_primitive_type_char,
752 c_primitive_type_float,
753 c_primitive_type_double,
754 c_primitive_type_void,
755 c_primitive_type_long_long,
756 c_primitive_type_signed_char,
757 c_primitive_type_unsigned_char,
758 c_primitive_type_unsigned_short,
759 c_primitive_type_unsigned_int,
760 c_primitive_type_unsigned_long,
761 c_primitive_type_unsigned_long_long,
762 c_primitive_type_long_double,
763 c_primitive_type_complex,
764 c_primitive_type_double_complex,
213e4dc2
TJB
765 c_primitive_type_decfloat,
766 c_primitive_type_decdouble,
767 c_primitive_type_declong,
685419e2
AC
768 nr_c_primitive_types
769};
770
e9667a65 771void
685419e2
AC
772c_language_arch_info (struct gdbarch *gdbarch,
773 struct language_arch_info *lai)
774{
775 const struct builtin_type *builtin = builtin_type (gdbarch);
c5504eaf 776
e9667a65 777 lai->string_char_type = builtin->builtin_char;
685419e2
AC
778 lai->primitive_type_vector
779 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_c_primitive_types + 1,
780 struct type *);
781 lai->primitive_type_vector [c_primitive_type_int] = builtin->builtin_int;
782 lai->primitive_type_vector [c_primitive_type_long] = builtin->builtin_long;
783 lai->primitive_type_vector [c_primitive_type_short] = builtin->builtin_short;
784 lai->primitive_type_vector [c_primitive_type_char] = builtin->builtin_char;
785 lai->primitive_type_vector [c_primitive_type_float] = builtin->builtin_float;
786 lai->primitive_type_vector [c_primitive_type_double] = builtin->builtin_double;
787 lai->primitive_type_vector [c_primitive_type_void] = builtin->builtin_void;
788 lai->primitive_type_vector [c_primitive_type_long_long] = builtin->builtin_long_long;
789 lai->primitive_type_vector [c_primitive_type_signed_char] = builtin->builtin_signed_char;
790 lai->primitive_type_vector [c_primitive_type_unsigned_char] = builtin->builtin_unsigned_char;
791 lai->primitive_type_vector [c_primitive_type_unsigned_short] = builtin->builtin_unsigned_short;
792 lai->primitive_type_vector [c_primitive_type_unsigned_int] = builtin->builtin_unsigned_int;
793 lai->primitive_type_vector [c_primitive_type_unsigned_long] = builtin->builtin_unsigned_long;
794 lai->primitive_type_vector [c_primitive_type_unsigned_long_long] = builtin->builtin_unsigned_long_long;
795 lai->primitive_type_vector [c_primitive_type_long_double] = builtin->builtin_long_double;
796 lai->primitive_type_vector [c_primitive_type_complex] = builtin->builtin_complex;
797 lai->primitive_type_vector [c_primitive_type_double_complex] = builtin->builtin_double_complex;
213e4dc2
TJB
798 lai->primitive_type_vector [c_primitive_type_decfloat] = builtin->builtin_decfloat;
799 lai->primitive_type_vector [c_primitive_type_decdouble] = builtin->builtin_decdouble;
800 lai->primitive_type_vector [c_primitive_type_declong] = builtin->builtin_declong;
fbb06eb1
UW
801
802 lai->bool_type_default = builtin->builtin_int;
cad351d1 803}
685419e2 804
6aecb9c2 805const struct exp_descriptor exp_descriptor_c =
6c7a06a3
TT
806{
807 print_subexp_standard,
808 operator_length_standard,
c0201579 809 operator_check_standard,
6c7a06a3
TT
810 op_name_standard,
811 dump_subexp_body_standard,
812 evaluate_subexp_c
813};
814
c5aa993b
JM
815const struct language_defn c_language_defn =
816{
c906108c
SS
817 "c", /* Language name */
818 language_c,
c906108c 819 range_check_off,
63872f9d 820 case_sensitive_on,
7ca2d3a3 821 array_row_major,
9a044a89 822 macro_expansion_c,
6c7a06a3 823 &exp_descriptor_c,
7c8adf68 824 c_parse,
c906108c 825 c_error,
e85c3284 826 null_post_parser,
c906108c
SS
827 c_printchar, /* Print a character constant */
828 c_printstr, /* Function to print string constant */
829 c_emit_char, /* Print a single char */
c906108c 830 c_print_type, /* Print a type using appropriate syntax */
5c6ce71d 831 c_print_typedef, /* Print a typedef using appropriate syntax */
c906108c
SS
832 c_val_print, /* Print a value using appropriate syntax */
833 c_value_print, /* Print a top-level value */
a5ee536b 834 default_read_var_value, /* la_read_var_value */
f636b87d 835 NULL, /* Language specific skip_trampoline */
2b2d9e11 836 NULL, /* name_of_this */
5f9a71c3 837 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
b368761e 838 basic_lookup_transparent_type,/* lookup_transparent_type */
9a3d7dfd 839 NULL, /* Language specific symbol demangler */
aff410f1
MS
840 NULL, /* Language specific
841 class_name_from_physname */
c906108c
SS
842 c_op_print_tab, /* expression operators for printing */
843 1, /* c-style arrays */
844 0, /* String lower bound */
6084f43a 845 default_word_break_characters,
41d27058 846 default_make_symbol_completion_list,
685419e2 847 c_language_arch_info,
e79af960 848 default_print_array_index,
41f1b697 849 default_pass_by_reference,
ae6a3a4c 850 c_get_string,
1a119f36 851 NULL, /* la_get_symbol_name_cmp */
f8eba3c6 852 iterate_over_symbols,
c906108c
SS
853 LANG_MAGIC
854};
855
cad351d1
UW
856enum cplus_primitive_types {
857 cplus_primitive_type_int,
858 cplus_primitive_type_long,
859 cplus_primitive_type_short,
860 cplus_primitive_type_char,
861 cplus_primitive_type_float,
862 cplus_primitive_type_double,
863 cplus_primitive_type_void,
864 cplus_primitive_type_long_long,
865 cplus_primitive_type_signed_char,
866 cplus_primitive_type_unsigned_char,
867 cplus_primitive_type_unsigned_short,
868 cplus_primitive_type_unsigned_int,
869 cplus_primitive_type_unsigned_long,
870 cplus_primitive_type_unsigned_long_long,
871 cplus_primitive_type_long_double,
872 cplus_primitive_type_complex,
873 cplus_primitive_type_double_complex,
874 cplus_primitive_type_bool,
213e4dc2
TJB
875 cplus_primitive_type_decfloat,
876 cplus_primitive_type_decdouble,
877 cplus_primitive_type_declong,
cad351d1 878 nr_cplus_primitive_types
c906108c
SS
879};
880
cad351d1
UW
881static void
882cplus_language_arch_info (struct gdbarch *gdbarch,
883 struct language_arch_info *lai)
884{
885 const struct builtin_type *builtin = builtin_type (gdbarch);
c5504eaf 886
cad351d1
UW
887 lai->string_char_type = builtin->builtin_char;
888 lai->primitive_type_vector
889 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_cplus_primitive_types + 1,
890 struct type *);
891 lai->primitive_type_vector [cplus_primitive_type_int]
892 = builtin->builtin_int;
893 lai->primitive_type_vector [cplus_primitive_type_long]
894 = builtin->builtin_long;
895 lai->primitive_type_vector [cplus_primitive_type_short]
896 = builtin->builtin_short;
897 lai->primitive_type_vector [cplus_primitive_type_char]
898 = builtin->builtin_char;
899 lai->primitive_type_vector [cplus_primitive_type_float]
900 = builtin->builtin_float;
901 lai->primitive_type_vector [cplus_primitive_type_double]
902 = builtin->builtin_double;
903 lai->primitive_type_vector [cplus_primitive_type_void]
904 = builtin->builtin_void;
905 lai->primitive_type_vector [cplus_primitive_type_long_long]
906 = builtin->builtin_long_long;
907 lai->primitive_type_vector [cplus_primitive_type_signed_char]
908 = builtin->builtin_signed_char;
909 lai->primitive_type_vector [cplus_primitive_type_unsigned_char]
910 = builtin->builtin_unsigned_char;
911 lai->primitive_type_vector [cplus_primitive_type_unsigned_short]
912 = builtin->builtin_unsigned_short;
913 lai->primitive_type_vector [cplus_primitive_type_unsigned_int]
914 = builtin->builtin_unsigned_int;
915 lai->primitive_type_vector [cplus_primitive_type_unsigned_long]
916 = builtin->builtin_unsigned_long;
917 lai->primitive_type_vector [cplus_primitive_type_unsigned_long_long]
918 = builtin->builtin_unsigned_long_long;
919 lai->primitive_type_vector [cplus_primitive_type_long_double]
920 = builtin->builtin_long_double;
921 lai->primitive_type_vector [cplus_primitive_type_complex]
922 = builtin->builtin_complex;
923 lai->primitive_type_vector [cplus_primitive_type_double_complex]
924 = builtin->builtin_double_complex;
925 lai->primitive_type_vector [cplus_primitive_type_bool]
926 = builtin->builtin_bool;
213e4dc2
TJB
927 lai->primitive_type_vector [cplus_primitive_type_decfloat]
928 = builtin->builtin_decfloat;
929 lai->primitive_type_vector [cplus_primitive_type_decdouble]
930 = builtin->builtin_decdouble;
931 lai->primitive_type_vector [cplus_primitive_type_declong]
932 = builtin->builtin_declong;
fbb06eb1
UW
933
934 lai->bool_type_symbol = "bool";
935 lai->bool_type_default = builtin->builtin_bool;
cad351d1
UW
936}
937
c5aa993b
JM
938const struct language_defn cplus_language_defn =
939{
940 "c++", /* Language name */
c906108c 941 language_cplus,
c906108c 942 range_check_off,
63872f9d 943 case_sensitive_on,
7ca2d3a3 944 array_row_major,
9a044a89 945 macro_expansion_c,
6c7a06a3 946 &exp_descriptor_c,
7c8adf68 947 c_parse,
c906108c 948 c_error,
e85c3284 949 null_post_parser,
c906108c
SS
950 c_printchar, /* Print a character constant */
951 c_printstr, /* Function to print string constant */
952 c_emit_char, /* Print a single char */
c906108c 953 c_print_type, /* Print a type using appropriate syntax */
5c6ce71d 954 c_print_typedef, /* Print a typedef using appropriate syntax */
c906108c
SS
955 c_val_print, /* Print a value using appropriate syntax */
956 c_value_print, /* Print a top-level value */
a5ee536b 957 default_read_var_value, /* la_read_var_value */
b18be20d 958 cplus_skip_trampoline, /* Language specific skip_trampoline */
2b2d9e11 959 "this", /* name_of_this */
1fcb5155 960 cp_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
b368761e 961 cp_lookup_transparent_type, /* lookup_transparent_type */
8de20a37 962 gdb_demangle, /* Language specific symbol demangler */
aff410f1
MS
963 cp_class_name_from_physname, /* Language specific
964 class_name_from_physname */
c906108c
SS
965 c_op_print_tab, /* expression operators for printing */
966 1, /* c-style arrays */
967 0, /* String lower bound */
6084f43a 968 default_word_break_characters,
41d27058 969 default_make_symbol_completion_list,
cad351d1 970 cplus_language_arch_info,
e79af960 971 default_print_array_index,
41f1b697 972 cp_pass_by_reference,
ae6a3a4c 973 c_get_string,
1a119f36 974 NULL, /* la_get_symbol_name_cmp */
f8eba3c6 975 iterate_over_symbols,
c906108c
SS
976 LANG_MAGIC
977};
978
c5aa993b
JM
979const struct language_defn asm_language_defn =
980{
c906108c
SS
981 "asm", /* Language name */
982 language_asm,
c906108c 983 range_check_off,
63872f9d 984 case_sensitive_on,
7ca2d3a3 985 array_row_major,
9a044a89 986 macro_expansion_c,
6c7a06a3 987 &exp_descriptor_c,
7c8adf68 988 c_parse,
c906108c 989 c_error,
e85c3284 990 null_post_parser,
c906108c
SS
991 c_printchar, /* Print a character constant */
992 c_printstr, /* Function to print string constant */
993 c_emit_char, /* Print a single char */
c906108c 994 c_print_type, /* Print a type using appropriate syntax */
5c6ce71d 995 c_print_typedef, /* Print a typedef using appropriate syntax */
c906108c
SS
996 c_val_print, /* Print a value using appropriate syntax */
997 c_value_print, /* Print a top-level value */
a5ee536b 998 default_read_var_value, /* la_read_var_value */
f636b87d 999 NULL, /* Language specific skip_trampoline */
2b2d9e11 1000 NULL, /* name_of_this */
5f9a71c3 1001 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
b368761e 1002 basic_lookup_transparent_type,/* lookup_transparent_type */
9a3d7dfd 1003 NULL, /* Language specific symbol demangler */
aff410f1
MS
1004 NULL, /* Language specific
1005 class_name_from_physname */
c906108c
SS
1006 c_op_print_tab, /* expression operators for printing */
1007 1, /* c-style arrays */
1008 0, /* String lower bound */
6084f43a 1009 default_word_break_characters,
41d27058 1010 default_make_symbol_completion_list,
aff410f1 1011 c_language_arch_info, /* FIXME: la_language_arch_info. */
e79af960 1012 default_print_array_index,
41f1b697 1013 default_pass_by_reference,
ae6a3a4c 1014 c_get_string,
1a119f36 1015 NULL, /* la_get_symbol_name_cmp */
f8eba3c6 1016 iterate_over_symbols,
c906108c
SS
1017 LANG_MAGIC
1018};
1019
20a0e81d
JB
1020/* The following language_defn does not represent a real language.
1021 It just provides a minimal support a-la-C that should allow users
1022 to do some simple operations when debugging applications that use
1023 a language currently not supported by GDB. */
1024
1025const struct language_defn minimal_language_defn =
1026{
1027 "minimal", /* Language name */
1028 language_minimal,
20a0e81d 1029 range_check_off,
20a0e81d 1030 case_sensitive_on,
7ca2d3a3 1031 array_row_major,
9a044a89 1032 macro_expansion_c,
6c7a06a3 1033 &exp_descriptor_c,
7c8adf68 1034 c_parse,
20a0e81d 1035 c_error,
e85c3284 1036 null_post_parser,
20a0e81d
JB
1037 c_printchar, /* Print a character constant */
1038 c_printstr, /* Function to print string constant */
1039 c_emit_char, /* Print a single char */
20a0e81d 1040 c_print_type, /* Print a type using appropriate syntax */
5c6ce71d 1041 c_print_typedef, /* Print a typedef using appropriate syntax */
20a0e81d
JB
1042 c_val_print, /* Print a value using appropriate syntax */
1043 c_value_print, /* Print a top-level value */
a5ee536b 1044 default_read_var_value, /* la_read_var_value */
20a0e81d 1045 NULL, /* Language specific skip_trampoline */
2b2d9e11 1046 NULL, /* name_of_this */
5f9a71c3 1047 basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
b368761e 1048 basic_lookup_transparent_type,/* lookup_transparent_type */
20a0e81d 1049 NULL, /* Language specific symbol demangler */
aff410f1
MS
1050 NULL, /* Language specific
1051 class_name_from_physname */
20a0e81d
JB
1052 c_op_print_tab, /* expression operators for printing */
1053 1, /* c-style arrays */
1054 0, /* String lower bound */
6084f43a 1055 default_word_break_characters,
41d27058 1056 default_make_symbol_completion_list,
e9667a65 1057 c_language_arch_info,
e79af960 1058 default_print_array_index,
41f1b697 1059 default_pass_by_reference,
ae6a3a4c 1060 c_get_string,
1a119f36 1061 NULL, /* la_get_symbol_name_cmp */
f8eba3c6 1062 iterate_over_symbols,
20a0e81d
JB
1063 LANG_MAGIC
1064};
1065
c906108c 1066void
fba45db2 1067_initialize_c_language (void)
c906108c
SS
1068{
1069 add_language (&c_language_defn);
1070 add_language (&cplus_language_defn);
1071 add_language (&asm_language_defn);
20a0e81d 1072 add_language (&minimal_language_defn);
c906108c 1073}
This page took 1.672169 seconds and 4 git commands to generate.