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