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