2011-01-05 Michael Snyder <msnyder@vmware.com>
[external/binutils.git] / gdb / language.c
1 /* Multiple source language support for GDB.
2
3    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
4    2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011
5    Free Software Foundation, Inc.
6
7    Contributed by the Department of Computer Science at the State University
8    of New York at Buffalo.
9
10    This file is part of GDB.
11
12    This program is free software; you can redistribute it and/or modify
13    it under the terms of the GNU General Public License as published by
14    the Free Software Foundation; either version 3 of the License, or
15    (at your option) any later version.
16
17    This program is distributed in the hope that it will be useful,
18    but WITHOUT ANY WARRANTY; without even the implied warranty of
19    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20    GNU General Public License for more details.
21
22    You should have received a copy of the GNU General Public License
23    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
24
25 /* This file contains functions that return things that are specific
26    to languages.  Each function should examine current_language if necessary,
27    and return the appropriate result. */
28
29 /* FIXME:  Most of these would be better organized as macros which
30    return data out of a "language-specific" struct pointer that is set
31    whenever the working language changes.  That would be a lot faster.  */
32
33 #include "defs.h"
34 #include <ctype.h>
35 #include "gdb_string.h"
36
37 #include "symtab.h"
38 #include "gdbtypes.h"
39 #include "value.h"
40 #include "gdbcmd.h"
41 #include "expression.h"
42 #include "language.h"
43 #include "target.h"
44 #include "parser-defs.h"
45 #include "jv-lang.h"
46 #include "demangle.h"
47 #include "symfile.h"
48
49 extern void _initialize_language (void);
50
51 static void unk_lang_error (char *);
52
53 static int unk_lang_parser (void);
54
55 static void show_check (char *, int);
56
57 static void set_check (char *, int);
58
59 static void set_type_range_case (void);
60
61 static void unk_lang_emit_char (int c, struct type *type,
62                                 struct ui_file *stream, int quoter);
63
64 static void unk_lang_printchar (int c, struct type *type,
65                                 struct ui_file *stream);
66
67 static void unk_lang_print_type (struct type *, const char *, struct ui_file *,
68                                  int, int);
69
70 static int unk_lang_value_print (struct value *, struct ui_file *,
71                                  const struct value_print_options *);
72
73 static CORE_ADDR unk_lang_trampoline (struct frame_info *, CORE_ADDR pc);
74
75 /* Forward declaration */
76 extern const struct language_defn unknown_language_defn;
77
78 /* The current (default at startup) state of type and range checking.
79    (If the modes are set to "auto", though, these are changed based
80    on the default language at startup, and then again based on the
81    language of the first source file.  */
82
83 enum range_mode range_mode = range_mode_auto;
84 enum range_check range_check = range_check_off;
85 enum type_mode type_mode = type_mode_auto;
86 enum type_check type_check = type_check_off;
87 enum case_mode case_mode = case_mode_auto;
88 enum case_sensitivity case_sensitivity = case_sensitive_on;
89
90 /* The current language and language_mode (see language.h) */
91
92 const struct language_defn *current_language = &unknown_language_defn;
93 enum language_mode language_mode = language_mode_auto;
94
95 /* The language that the user expects to be typing in (the language
96    of main(), or the last language we notified them about, or C).  */
97
98 const struct language_defn *expected_language;
99
100 /* The list of supported languages.  The list itself is malloc'd.  */
101
102 static const struct language_defn **languages;
103 static unsigned languages_size;
104 static unsigned languages_allocsize;
105 #define DEFAULT_ALLOCSIZE 4
106
107 /* The current values of the "set language/type/range" enum
108    commands.  */
109 static const char *language;
110 static const char *type;
111 static const char *range;
112 static const char *case_sensitive;
113
114 /* Warning issued when current_language and the language of the current
115    frame do not match. */
116 char lang_frame_mismatch_warn[] =
117 "Warning: the current language does not match this frame.";
118 \f
119 /* This page contains the functions corresponding to GDB commands
120    and their helpers. */
121
122 /* Show command.  Display a warning if the language set
123    does not match the frame. */
124 static void
125 show_language_command (struct ui_file *file, int from_tty,
126                        struct cmd_list_element *c, const char *value)
127 {
128   enum language flang;          /* The language of the current frame */
129
130   if (language_mode == language_mode_auto)
131     fprintf_filtered (gdb_stdout,
132                       _("The current source language is "
133                         "\"auto; currently %s\".\n"),
134                       current_language->la_name);
135   else
136     fprintf_filtered (gdb_stdout,
137                       _("The current source language is \"%s\".\n"),
138                       current_language->la_name);
139
140   flang = get_frame_language ();
141   if (flang != language_unknown &&
142       language_mode == language_mode_manual &&
143       current_language->la_language != flang)
144     printf_filtered ("%s\n", lang_frame_mismatch_warn);
145 }
146
147 /* Set command.  Change the current working language. */
148 static void
149 set_language_command (char *ignore, int from_tty, struct cmd_list_element *c)
150 {
151   int i;
152   enum language flang;
153
154   /* Search the list of languages for a match.  */
155   for (i = 0; i < languages_size; i++)
156     {
157       if (strcmp (languages[i]->la_name, language) == 0)
158         {
159           /* Found it!  Go into manual mode, and use this language.  */
160           if (languages[i]->la_language == language_auto)
161             {
162               /* Enter auto mode.  Set to the current frame's language, if
163                  known, or fallback to the initial language.  */
164               language_mode = language_mode_auto;
165               flang = get_frame_language ();
166               if (flang != language_unknown)
167                 set_language (flang);
168               else
169                 set_initial_language ();
170               expected_language = current_language;
171               return;
172             }
173           else
174             {
175               /* Enter manual mode.  Set the specified language.  */
176               language_mode = language_mode_manual;
177               current_language = languages[i];
178               set_type_range_case ();
179               expected_language = current_language;
180               return;
181             }
182         }
183     }
184
185   internal_error (__FILE__, __LINE__,
186                   "Couldn't find language `%s' in known languages list.",
187                   language);
188 }
189
190 /* Show command.  Display a warning if the type setting does
191    not match the current language. */
192 static void
193 show_type_command (struct ui_file *file, int from_tty,
194                    struct cmd_list_element *c, const char *value)
195 {
196   if (type_mode == type_mode_auto)
197     {
198       char *tmp = NULL;
199
200       switch (type_check)
201         {
202         case type_check_on:
203           tmp = "on";
204           break;
205         case type_check_off:
206           tmp = "off";
207           break;
208         case type_check_warn:
209           tmp = "warn";
210           break;
211         default:
212           internal_error (__FILE__, __LINE__,
213                           "Unrecognized type check setting.");
214         }
215
216       fprintf_filtered (gdb_stdout,
217                         _("Type checking is \"auto; currently %s\".\n"),
218                         tmp);
219     }
220   else
221     fprintf_filtered (gdb_stdout, _("Type checking is \"%s\".\n"),
222                       value);
223
224    if (type_check != current_language->la_type_check)
225     warning (_("the current type check setting"
226                " does not match the language.\n"));
227 }
228
229 /* Set command.  Change the setting for type checking. */
230 static void
231 set_type_command (char *ignore, int from_tty, struct cmd_list_element *c)
232 {
233   if (strcmp (type, "on") == 0)
234     {
235       type_check = type_check_on;
236       type_mode = type_mode_manual;
237     }
238   else if (strcmp (type, "warn") == 0)
239     {
240       type_check = type_check_warn;
241       type_mode = type_mode_manual;
242     }
243   else if (strcmp (type, "off") == 0)
244     {
245       type_check = type_check_off;
246       type_mode = type_mode_manual;
247     }
248   else if (strcmp (type, "auto") == 0)
249     {
250       type_mode = type_mode_auto;
251       set_type_range_case ();
252       return;
253     }
254   else
255     internal_error (__FILE__, __LINE__,
256                     _("Unrecognized type check setting: \"%s\""), type);
257
258   if (type_check != current_language->la_type_check)
259     warning (_("the current type check setting"
260                " does not match the language.\n"));
261 }
262
263 /* Show command.  Display a warning if the range setting does
264    not match the current language. */
265 static void
266 show_range_command (struct ui_file *file, int from_tty,
267                     struct cmd_list_element *c, const char *value)
268 {
269   if (range_mode == range_mode_auto)
270     {
271       char *tmp;
272
273       switch (range_check)
274         {
275         case range_check_on:
276           tmp = "on";
277           break;
278         case range_check_off:
279           tmp = "off";
280           break;
281         case range_check_warn:
282           tmp = "warn";
283           break;
284         default:
285           internal_error (__FILE__, __LINE__,
286                           "Unrecognized range check setting.");
287         }
288
289       fprintf_filtered (gdb_stdout,
290                         _("Range checking is \"auto; currently %s\".\n"),
291                         tmp);
292     }
293   else
294     fprintf_filtered (gdb_stdout, _("Range checking is \"%s\".\n"),
295                       value);
296
297   if (range_check != current_language->la_range_check)
298     warning (_("the current range check setting "
299                "does not match the language.\n"));
300 }
301
302 /* Set command.  Change the setting for range checking. */
303 static void
304 set_range_command (char *ignore, int from_tty, struct cmd_list_element *c)
305 {
306   if (strcmp (range, "on") == 0)
307     {
308       range_check = range_check_on;
309       range_mode = range_mode_manual;
310     }
311   else if (strcmp (range, "warn") == 0)
312     {
313       range_check = range_check_warn;
314       range_mode = range_mode_manual;
315     }
316   else if (strcmp (range, "off") == 0)
317     {
318       range_check = range_check_off;
319       range_mode = range_mode_manual;
320     }
321   else if (strcmp (range, "auto") == 0)
322     {
323       range_mode = range_mode_auto;
324       set_type_range_case ();
325       return;
326     }
327   else
328     {
329       internal_error (__FILE__, __LINE__,
330                       _("Unrecognized range check setting: \"%s\""), range);
331     }
332   if (range_check != current_language->la_range_check)
333     warning (_("the current range check setting "
334                "does not match the language.\n"));
335 }
336
337 /* Show command.  Display a warning if the case sensitivity setting does
338    not match the current language. */
339 static void
340 show_case_command (struct ui_file *file, int from_tty,
341                    struct cmd_list_element *c, const char *value)
342 {
343   if (case_mode == case_mode_auto)
344     {
345       char *tmp = NULL;
346
347       switch (case_sensitivity)
348         {
349         case case_sensitive_on:
350           tmp = "on";
351           break;
352         case case_sensitive_off:
353           tmp = "off";
354           break;
355         default:
356           internal_error (__FILE__, __LINE__,
357                           "Unrecognized case-sensitive setting.");
358         }
359
360       fprintf_filtered (gdb_stdout,
361                         _("Case sensitivity in "
362                           "name search is \"auto; currently %s\".\n"),
363                         tmp);
364     }
365   else
366     fprintf_filtered (gdb_stdout,
367                       _("Case sensitivity in name search is \"%s\".\n"),
368                       value);
369
370   if (case_sensitivity != current_language->la_case_sensitivity)
371     warning (_("the current case sensitivity setting does not match "
372                "the language.\n"));
373 }
374
375 /* Set command.  Change the setting for case sensitivity.  */
376
377 static void
378 set_case_command (char *ignore, int from_tty, struct cmd_list_element *c)
379 {
380    if (strcmp (case_sensitive, "on") == 0)
381      {
382        case_sensitivity = case_sensitive_on;
383        case_mode = case_mode_manual;
384      }
385    else if (strcmp (case_sensitive, "off") == 0)
386      {
387        case_sensitivity = case_sensitive_off;
388        case_mode = case_mode_manual;
389      }
390    else if (strcmp (case_sensitive, "auto") == 0)
391      {
392        case_mode = case_mode_auto;
393        set_type_range_case ();
394        return;
395      }
396    else
397      {
398        internal_error (__FILE__, __LINE__,
399                        "Unrecognized case-sensitive setting: \"%s\"",
400                        case_sensitive);
401      }
402
403    if (case_sensitivity != current_language->la_case_sensitivity)
404      warning (_("the current case sensitivity setting does not match "
405                 "the language.\n"));
406 }
407
408 /* Set the status of range and type checking and case sensitivity based on
409    the current modes and the current language.
410    If SHOW is non-zero, then print out the current language,
411    type and range checking status. */
412 static void
413 set_type_range_case (void)
414 {
415   if (range_mode == range_mode_auto)
416     range_check = current_language->la_range_check;
417
418   if (type_mode == type_mode_auto)
419     type_check = current_language->la_type_check;
420
421   if (case_mode == case_mode_auto)
422     case_sensitivity = current_language->la_case_sensitivity;
423 }
424
425 /* Set current language to (enum language) LANG.  Returns previous language. */
426
427 enum language
428 set_language (enum language lang)
429 {
430   int i;
431   enum language prev_language;
432
433   prev_language = current_language->la_language;
434
435   for (i = 0; i < languages_size; i++)
436     {
437       if (languages[i]->la_language == lang)
438         {
439           current_language = languages[i];
440           set_type_range_case ();
441           break;
442         }
443     }
444
445   return prev_language;
446 }
447 \f
448
449 /* Print out the current language settings: language, range and
450    type checking.  If QUIETLY, print only what has changed.  */
451
452 void
453 language_info (int quietly)
454 {
455   if (quietly && expected_language == current_language)
456     return;
457
458   expected_language = current_language;
459   printf_unfiltered (_("Current language:  %s\n"), language);
460   show_language_command (NULL, 1, NULL, NULL);
461
462   if (!quietly)
463     {
464       printf_unfiltered (_("Type checking:     %s\n"), type);
465       show_type_command (NULL, 1, NULL, NULL);
466       printf_unfiltered (_("Range checking:    %s\n"), range);
467       show_range_command (NULL, 1, NULL, NULL);
468       printf_unfiltered (_("Case sensitivity:  %s\n"), case_sensitive);
469       show_case_command (NULL, 1, NULL, NULL);
470     }
471 }
472 \f
473 /* Return the result of a binary operation. */
474
475 #if 0                           /* Currently unused */
476
477 struct type *
478 binop_result_type (struct value *v1, struct value *v2)
479 {
480   int size, uns;
481   struct type *t1 = check_typedef (VALUE_TYPE (v1));
482   struct type *t2 = check_typedef (VALUE_TYPE (v2));
483
484   int l1 = TYPE_LENGTH (t1);
485   int l2 = TYPE_LENGTH (t2);
486
487   switch (current_language->la_language)
488     {
489     case language_c:
490     case language_cplus:
491     case language_d:
492     case language_objc:
493       if (TYPE_CODE (t1) == TYPE_CODE_FLT)
494         return TYPE_CODE (t2) == TYPE_CODE_FLT && l2 > l1 ?
495           VALUE_TYPE (v2) : VALUE_TYPE (v1);
496       else if (TYPE_CODE (t2) == TYPE_CODE_FLT)
497         return TYPE_CODE (t1) == TYPE_CODE_FLT && l1 > l2 ?
498           VALUE_TYPE (v1) : VALUE_TYPE (v2);
499       else if (TYPE_UNSIGNED (t1) && l1 > l2)
500         return VALUE_TYPE (v1);
501       else if (TYPE_UNSIGNED (t2) && l2 > l1)
502         return VALUE_TYPE (v2);
503       else                      /* Both are signed.  Result is the
504                                    longer type.  */
505         return l1 > l2 ? VALUE_TYPE (v1) : VALUE_TYPE (v2);
506       break;
507     case language_m2:
508       /* If we are doing type-checking, l1 should equal l2, so this is
509          not needed. */
510       return l1 > l2 ? VALUE_TYPE (v1) : VALUE_TYPE (v2);
511       break;
512     }
513   internal_error (__FILE__, __LINE__, _("failed internal consistency check"));
514   return (struct type *) 0;     /* For lint */
515 }
516
517 #endif /* 0 */
518 #if 0
519 /* This page contains functions that are used in type/range checking.
520    They all return zero if the type/range check fails.
521
522    It is hoped that these will make extending GDB to parse different
523    languages a little easier.  These are primarily used in eval.c when
524    evaluating expressions and making sure that their types are correct.
525    Instead of having a mess of conjucted/disjuncted expressions in an "if",
526    the ideas of type can be wrapped up in the following functions.
527
528    Note that some of them are not currently dependent upon which language
529    is currently being parsed.  For example, floats are the same in
530    C and Modula-2 (ie. the only floating point type has TYPE_CODE of
531    TYPE_CODE_FLT), while booleans are different. */
532
533 /* Returns non-zero if its argument is a simple type.  This is the same for
534    both Modula-2 and for C.  In the C case, TYPE_CODE_CHAR will never occur,
535    and thus will never cause the failure of the test. */
536 int
537 simple_type (struct type *type)
538 {
539   CHECK_TYPEDEF (type);
540   switch (TYPE_CODE (type))
541     {
542     case TYPE_CODE_INT:
543     case TYPE_CODE_CHAR:
544     case TYPE_CODE_ENUM:
545     case TYPE_CODE_FLT:
546     case TYPE_CODE_RANGE:
547     case TYPE_CODE_BOOL:
548       return 1;
549
550     default:
551       return 0;
552     }
553 }
554
555 /* Returns non-zero if its argument is of an ordered type.
556    An ordered type is one in which the elements can be tested for the
557    properties of "greater than", "less than", etc, or for which the
558    operations "increment" or "decrement" make sense. */
559 int
560 ordered_type (struct type *type)
561 {
562   CHECK_TYPEDEF (type);
563   switch (TYPE_CODE (type))
564     {
565     case TYPE_CODE_INT:
566     case TYPE_CODE_CHAR:
567     case TYPE_CODE_ENUM:
568     case TYPE_CODE_FLT:
569     case TYPE_CODE_RANGE:
570       return 1;
571
572     default:
573       return 0;
574     }
575 }
576
577 /* Returns non-zero if the two types are the same */
578 int
579 same_type (struct type *arg1, struct type *arg2)
580 {
581   CHECK_TYPEDEF (type);
582   if (structured_type (arg1)
583       ? !structured_type (arg2) : structured_type (arg2))
584     /* One is structured and one isn't */
585     return 0;
586   else if (structured_type (arg1) && structured_type (arg2))
587     return arg1 == arg2;
588   else if (numeric_type (arg1) && numeric_type (arg2))
589     return (TYPE_CODE (arg2) == TYPE_CODE (arg1)) &&
590       (TYPE_UNSIGNED (arg1) == TYPE_UNSIGNED (arg2))
591       ? 1 : 0;
592   else
593     return arg1 == arg2;
594 }
595
596 /* Returns non-zero if the type is integral */
597 int
598 integral_type (struct type *type)
599 {
600   CHECK_TYPEDEF (type);
601   switch (current_language->la_language)
602     {
603     case language_c:
604     case language_cplus:
605     case language_d:
606     case language_objc:
607       return (TYPE_CODE (type) != TYPE_CODE_INT) &&
608         (TYPE_CODE (type) != TYPE_CODE_ENUM) ? 0 : 1;
609     case language_m2:
610     case language_pascal:
611       return TYPE_CODE (type) != TYPE_CODE_INT ? 0 : 1;
612     default:
613       error (_("Language not supported."));
614     }
615 }
616
617 /* Returns non-zero if the value is numeric */
618 int
619 numeric_type (struct type *type)
620 {
621   CHECK_TYPEDEF (type);
622   switch (TYPE_CODE (type))
623     {
624     case TYPE_CODE_INT:
625     case TYPE_CODE_FLT:
626       return 1;
627
628     default:
629       return 0;
630     }
631 }
632
633 /* Returns non-zero if the value is a character type */
634 int
635 character_type (struct type *type)
636 {
637   CHECK_TYPEDEF (type);
638   switch (current_language->la_language)
639     {
640     case language_m2:
641     case language_pascal:
642       return TYPE_CODE (type) != TYPE_CODE_CHAR ? 0 : 1;
643
644     case language_c:
645     case language_cplus:
646     case language_d:
647     case language_objc:
648       return (TYPE_CODE (type) == TYPE_CODE_INT) &&
649         TYPE_LENGTH (type) == sizeof (char)
650       ? 1 : 0;
651     default:
652       return (0);
653     }
654 }
655
656 /* Returns non-zero if the value is a string type */
657 int
658 string_type (struct type *type)
659 {
660   CHECK_TYPEDEF (type);
661   switch (current_language->la_language)
662     {
663     case language_m2:
664     case language_pascal:
665       return TYPE_CODE (type) != TYPE_CODE_STRING ? 0 : 1;
666
667     case language_c:
668     case language_cplus:
669     case language_d:
670     case language_objc:
671       /* C does not have distinct string type. */
672       return (0);
673     default:
674       return (0);
675     }
676 }
677
678 /* Returns non-zero if the value is a boolean type */
679 int
680 boolean_type (struct type *type)
681 {
682   CHECK_TYPEDEF (type);
683   if (TYPE_CODE (type) == TYPE_CODE_BOOL)
684     return 1;
685   switch (current_language->la_language)
686     {
687     case language_c:
688     case language_cplus:
689     case language_d:
690     case language_objc:
691       /* Might be more cleanly handled by having a
692          TYPE_CODE_INT_NOT_BOOL for (the deleted) CHILL and such
693          languages, or a TYPE_CODE_INT_OR_BOOL for C.  */
694       if (TYPE_CODE (type) == TYPE_CODE_INT)
695         return 1;
696     default:
697       break;
698     }
699   return 0;
700 }
701
702 /* Returns non-zero if the value is a floating-point type */
703 int
704 float_type (struct type *type)
705 {
706   CHECK_TYPEDEF (type);
707   return TYPE_CODE (type) == TYPE_CODE_FLT;
708 }
709 #endif
710
711 /* Returns non-zero if the value is a pointer type */
712 int
713 pointer_type (struct type *type)
714 {
715   return TYPE_CODE (type) == TYPE_CODE_PTR ||
716     TYPE_CODE (type) == TYPE_CODE_REF;
717 }
718
719 #if 0
720 /* Returns non-zero if the value is a structured type */
721 int
722 structured_type (struct type *type)
723 {
724   CHECK_TYPEDEF (type);
725   switch (current_language->la_language)
726     {
727     case language_c:
728     case language_cplus:
729     case language_d:
730     case language_objc:
731       return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
732         (TYPE_CODE (type) == TYPE_CODE_UNION) ||
733         (TYPE_CODE (type) == TYPE_CODE_ARRAY);
734    case language_pascal:
735       return (TYPE_CODE(type) == TYPE_CODE_STRUCT) ||
736          (TYPE_CODE(type) == TYPE_CODE_UNION) ||
737          (TYPE_CODE(type) == TYPE_CODE_SET) ||
738             (TYPE_CODE(type) == TYPE_CODE_ARRAY);
739     case language_m2:
740       return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
741         (TYPE_CODE (type) == TYPE_CODE_SET) ||
742         (TYPE_CODE (type) == TYPE_CODE_ARRAY);
743     default:
744       return (0);
745     }
746 }
747 #endif
748 \f
749 /* This page contains functions that return info about
750    (struct value) values used in GDB. */
751
752 /* Returns non-zero if the value VAL represents a true value. */
753 int
754 value_true (struct value *val)
755 {
756   /* It is possible that we should have some sort of error if a non-boolean
757      value is used in this context.  Possibly dependent on some kind of
758      "boolean-checking" option like range checking.  But it should probably
759      not depend on the language except insofar as is necessary to identify
760      a "boolean" value (i.e. in C using a float, pointer, etc., as a boolean
761      should be an error, probably).  */
762   return !value_logical_not (val);
763 }
764 \f
765 /* This page contains functions for the printing out of
766    error messages that occur during type- and range-
767    checking. */
768
769 /* These are called when a language fails a type- or range-check.  The
770    first argument should be a printf()-style format string, and the
771    rest of the arguments should be its arguments.  If
772    [type|range]_check is [type|range]_check_on, an error is printed;
773    if [type|range]_check_warn, a warning; otherwise just the
774    message. */
775
776 void
777 type_error (const char *string,...)
778 {
779   va_list args;
780
781   va_start (args, string);
782   switch (type_check)
783     {
784     case type_check_warn:
785       vwarning (string, args);
786       break;
787     case type_check_on:
788       verror (string, args);
789       break;
790     case type_check_off:
791       /* FIXME: cagney/2002-01-30: Should this function print anything
792          when type error is off?  */
793       vfprintf_filtered (gdb_stderr, string, args);
794       fprintf_filtered (gdb_stderr, "\n");
795       break;
796     default:
797       internal_error (__FILE__, __LINE__, _("bad switch"));
798     }
799   va_end (args);
800 }
801
802 void
803 range_error (const char *string,...)
804 {
805   va_list args;
806
807   va_start (args, string);
808   switch (range_check)
809     {
810     case range_check_warn:
811       vwarning (string, args);
812       break;
813     case range_check_on:
814       verror (string, args);
815       break;
816     case range_check_off:
817       /* FIXME: cagney/2002-01-30: Should this function print anything
818          when range error is off?  */
819       vfprintf_filtered (gdb_stderr, string, args);
820       fprintf_filtered (gdb_stderr, "\n");
821       break;
822     default:
823       internal_error (__FILE__, __LINE__, _("bad switch"));
824     }
825   va_end (args);
826 }
827 \f
828
829 /* This page contains miscellaneous functions */
830
831 /* Return the language enum for a given language string. */
832
833 enum language
834 language_enum (char *str)
835 {
836   int i;
837
838   for (i = 0; i < languages_size; i++)
839     if (strcmp (languages[i]->la_name, str) == 0)
840       return languages[i]->la_language;
841
842   return language_unknown;
843 }
844
845 /* Return the language struct for a given language enum. */
846
847 const struct language_defn *
848 language_def (enum language lang)
849 {
850   int i;
851
852   for (i = 0; i < languages_size; i++)
853     {
854       if (languages[i]->la_language == lang)
855         {
856           return languages[i];
857         }
858     }
859   return NULL;
860 }
861
862 /* Return the language as a string */
863 char *
864 language_str (enum language lang)
865 {
866   int i;
867
868   for (i = 0; i < languages_size; i++)
869     {
870       if (languages[i]->la_language == lang)
871         {
872           return languages[i]->la_name;
873         }
874     }
875   return "Unknown";
876 }
877
878 static void
879 set_check (char *ignore, int from_tty)
880 {
881   printf_unfiltered (
882      "\"set check\" must be followed by the name of a check subcommand.\n");
883   help_list (setchecklist, "set check ", -1, gdb_stdout);
884 }
885
886 static void
887 show_check (char *ignore, int from_tty)
888 {
889   cmd_show_list (showchecklist, from_tty, "");
890 }
891 \f
892 /* Add a language to the set of known languages.  */
893
894 void
895 add_language (const struct language_defn *lang)
896 {
897   /* For the "set language" command.  */
898   static char **language_names = NULL;
899   /* For the "help set language" command.  */
900   char *language_set_doc = NULL;
901
902   int i;
903   struct ui_file *tmp_stream;
904
905   if (lang->la_magic != LANG_MAGIC)
906     {
907       fprintf_unfiltered (gdb_stderr,
908                           "Magic number of %s language struct wrong\n",
909                           lang->la_name);
910       internal_error (__FILE__, __LINE__,
911                       _("failed internal consistency check"));
912     }
913
914   if (!languages)
915     {
916       languages_allocsize = DEFAULT_ALLOCSIZE;
917       languages = (const struct language_defn **) xmalloc
918         (languages_allocsize * sizeof (*languages));
919     }
920   if (languages_size >= languages_allocsize)
921     {
922       languages_allocsize *= 2;
923       languages = (const struct language_defn **) xrealloc ((char *) languages,
924                                  languages_allocsize * sizeof (*languages));
925     }
926   languages[languages_size++] = lang;
927
928   /* Build the language names array, to be used as enumeration in the
929      set language" enum command.  */
930   language_names = xrealloc (language_names,
931                              (languages_size + 1) * sizeof (const char *));
932   for (i = 0; i < languages_size; ++i)
933     language_names[i] = languages[i]->la_name;
934   language_names[i] = NULL;
935
936   /* Build the "help set language" docs.  */
937   tmp_stream = mem_fileopen ();
938
939   fprintf_unfiltered (tmp_stream,
940                       _("Set the current source language.\n"
941                         "The currently understood settings are:\n\nlocal or "
942                         "auto    Automatic setting based on source file\n"));
943
944   for (i = 0; i < languages_size; ++i)
945     {
946       /* Already dealt with these above.  */
947       if (languages[i]->la_language == language_unknown
948           || languages[i]->la_language == language_auto)
949         continue;
950
951       /* FIXME: i18n: for now assume that the human-readable name
952          is just a capitalization of the internal name.  */
953       fprintf_unfiltered (tmp_stream, "%-16s Use the %c%s language\n",
954                           languages[i]->la_name,
955                           /* Capitalize first letter of language
956                              name.  */
957                           toupper (languages[i]->la_name[0]),
958                           languages[i]->la_name + 1);
959     }
960
961   language_set_doc = ui_file_xstrdup (tmp_stream, NULL);
962   ui_file_delete (tmp_stream);
963
964   add_setshow_enum_cmd ("language", class_support,
965                         (const char **) language_names,
966                         &language,
967                         language_set_doc,
968                         _("Show the current source language."),
969                         NULL, set_language_command,
970                         show_language_command,
971                         &setlist, &showlist);
972
973   xfree (language_set_doc);
974 }
975
976 /* Iterate through all registered languages looking for and calling
977    any non-NULL struct language_defn.skip_trampoline() functions.
978    Return the result from the first that returns non-zero, or 0 if all
979    `fail'.  */
980 CORE_ADDR 
981 skip_language_trampoline (struct frame_info *frame, CORE_ADDR pc)
982 {
983   int i;
984
985   for (i = 0; i < languages_size; i++)
986     {
987       if (languages[i]->skip_trampoline)
988         {
989           CORE_ADDR real_pc = (languages[i]->skip_trampoline) (frame, pc);
990
991           if (real_pc)
992             return real_pc;
993         }
994     }
995
996   return 0;
997 }
998
999 /* Return demangled language symbol, or NULL.  
1000    FIXME: Options are only useful for certain languages and ignored
1001    by others, so it would be better to remove them here and have a
1002    more flexible demangler for the languages that need it.  
1003    FIXME: Sometimes the demangler is invoked when we don't know the
1004    language, so we can't use this everywhere.  */
1005 char *
1006 language_demangle (const struct language_defn *current_language, 
1007                                 const char *mangled, int options)
1008 {
1009   if (current_language != NULL && current_language->la_demangle)
1010     return current_language->la_demangle (mangled, options);
1011   return NULL;
1012 }
1013
1014 /* Return class name from physname or NULL.  */
1015 char *
1016 language_class_name_from_physname (const struct language_defn *current_language,
1017                                    const char *physname)
1018 {
1019   if (current_language != NULL
1020       && current_language->la_class_name_from_physname)
1021     return current_language->la_class_name_from_physname (physname);
1022   return NULL;
1023 }
1024
1025 /* Return non-zero if TYPE should be passed (and returned) by
1026    reference at the language level.  */
1027 int
1028 language_pass_by_reference (struct type *type)
1029 {
1030   return current_language->la_pass_by_reference (type);
1031 }
1032
1033 /* Return zero; by default, types are passed by value at the language
1034    level.  The target ABI may pass or return some structs by reference
1035    independent of this.  */
1036 int
1037 default_pass_by_reference (struct type *type)
1038 {
1039   return 0;
1040 }
1041
1042 /* Return the default string containing the list of characters
1043    delimiting words.  This is a reasonable default value that
1044    most languages should be able to use.  */
1045
1046 char *
1047 default_word_break_characters (void)
1048 {
1049   return " \t\n!@#$%^&*()+=|~`}{[]\"';:?/>.<,-";
1050 }
1051
1052 /* Print the index of array elements using the C99 syntax.  */
1053
1054 void
1055 default_print_array_index (struct value *index_value, struct ui_file *stream,
1056                            const struct value_print_options *options)
1057 {
1058   fprintf_filtered (stream, "[");
1059   LA_VALUE_PRINT (index_value, stream, options);
1060   fprintf_filtered (stream, "] = ");
1061 }
1062
1063 void
1064 default_get_string (struct value *value, gdb_byte **buffer, int *length,
1065                     struct type **char_type, const char **charset)
1066 {
1067   error (_("Getting a string is unsupported in this language."));
1068 }
1069
1070 /* Define the language that is no language.  */
1071
1072 static int
1073 unk_lang_parser (void)
1074 {
1075   return 1;
1076 }
1077
1078 static void
1079 unk_lang_error (char *msg)
1080 {
1081   error (_("Attempted to parse an expression with unknown language"));
1082 }
1083
1084 static void
1085 unk_lang_emit_char (int c, struct type *type, struct ui_file *stream,
1086                     int quoter)
1087 {
1088   error (_("internal error - unimplemented "
1089            "function unk_lang_emit_char called."));
1090 }
1091
1092 static void
1093 unk_lang_printchar (int c, struct type *type, struct ui_file *stream)
1094 {
1095   error (_("internal error - unimplemented "
1096            "function unk_lang_printchar called."));
1097 }
1098
1099 static void
1100 unk_lang_printstr (struct ui_file *stream, struct type *type,
1101                    const gdb_byte *string, unsigned int length,
1102                    const char *encoding, int force_ellipses,
1103                    const struct value_print_options *options)
1104 {
1105   error (_("internal error - unimplemented "
1106            "function unk_lang_printstr called."));
1107 }
1108
1109 static void
1110 unk_lang_print_type (struct type *type, const char *varstring,
1111                      struct ui_file *stream, int show, int level)
1112 {
1113   error (_("internal error - unimplemented "
1114            "function unk_lang_print_type called."));
1115 }
1116
1117 static int
1118 unk_lang_val_print (struct type *type, const gdb_byte *valaddr,
1119                     int embedded_offset, CORE_ADDR address,
1120                     struct ui_file *stream, int recurse,
1121                     const struct value *val,
1122                     const struct value_print_options *options)
1123 {
1124   error (_("internal error - unimplemented "
1125            "function unk_lang_val_print called."));
1126 }
1127
1128 static int
1129 unk_lang_value_print (struct value *val, struct ui_file *stream,
1130                       const struct value_print_options *options)
1131 {
1132   error (_("internal error - unimplemented "
1133            "function unk_lang_value_print called."));
1134 }
1135
1136 static CORE_ADDR unk_lang_trampoline (struct frame_info *frame, CORE_ADDR pc)
1137 {
1138   return 0;
1139 }
1140
1141 /* Unknown languages just use the cplus demangler.  */
1142 static char *unk_lang_demangle (const char *mangled, int options)
1143 {
1144   return cplus_demangle (mangled, options);
1145 }
1146
1147 static char *unk_lang_class_name (const char *mangled)
1148 {
1149   return NULL;
1150 }
1151
1152 static const struct op_print unk_op_print_tab[] =
1153 {
1154   {NULL, OP_NULL, PREC_NULL, 0}
1155 };
1156
1157 static void
1158 unknown_language_arch_info (struct gdbarch *gdbarch,
1159                             struct language_arch_info *lai)
1160 {
1161   lai->string_char_type = builtin_type (gdbarch)->builtin_char;
1162   lai->bool_type_default = builtin_type (gdbarch)->builtin_int;
1163   lai->primitive_type_vector = GDBARCH_OBSTACK_CALLOC (gdbarch, 1,
1164                                                        struct type *);
1165 }
1166
1167 const struct language_defn unknown_language_defn =
1168 {
1169   "unknown",
1170   language_unknown,
1171   range_check_off,
1172   type_check_off,
1173   case_sensitive_on,
1174   array_row_major,
1175   macro_expansion_no,
1176   &exp_descriptor_standard,
1177   unk_lang_parser,
1178   unk_lang_error,
1179   null_post_parser,
1180   unk_lang_printchar,           /* Print character constant */
1181   unk_lang_printstr,
1182   unk_lang_emit_char,
1183   unk_lang_print_type,          /* Print a type using appropriate syntax */
1184   default_print_typedef,        /* Print a typedef using appropriate syntax */
1185   unk_lang_val_print,           /* Print a value using appropriate syntax */
1186   unk_lang_value_print,         /* Print a top-level value */
1187   unk_lang_trampoline,          /* Language specific skip_trampoline */
1188   "this",                       /* name_of_this */
1189   basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
1190   basic_lookup_transparent_type,/* lookup_transparent_type */
1191   unk_lang_demangle,            /* Language specific symbol demangler */
1192   unk_lang_class_name,          /* Language specific
1193                                    class_name_from_physname */
1194   unk_op_print_tab,             /* expression operators for printing */
1195   1,                            /* c-style arrays */
1196   0,                            /* String lower bound */
1197   default_word_break_characters,
1198   default_make_symbol_completion_list,
1199   unknown_language_arch_info,   /* la_language_arch_info.  */
1200   default_print_array_index,
1201   default_pass_by_reference,
1202   default_get_string,
1203   LANG_MAGIC
1204 };
1205
1206 /* These two structs define fake entries for the "local" and "auto" options. */
1207 const struct language_defn auto_language_defn =
1208 {
1209   "auto",
1210   language_auto,
1211   range_check_off,
1212   type_check_off,
1213   case_sensitive_on,
1214   array_row_major,
1215   macro_expansion_no,
1216   &exp_descriptor_standard,
1217   unk_lang_parser,
1218   unk_lang_error,
1219   null_post_parser,
1220   unk_lang_printchar,           /* Print character constant */
1221   unk_lang_printstr,
1222   unk_lang_emit_char,
1223   unk_lang_print_type,          /* Print a type using appropriate syntax */
1224   default_print_typedef,        /* Print a typedef using appropriate syntax */
1225   unk_lang_val_print,           /* Print a value using appropriate syntax */
1226   unk_lang_value_print,         /* Print a top-level value */
1227   unk_lang_trampoline,          /* Language specific skip_trampoline */
1228   "this",                       /* name_of_this */
1229   basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
1230   basic_lookup_transparent_type,/* lookup_transparent_type */
1231   unk_lang_demangle,            /* Language specific symbol demangler */
1232   unk_lang_class_name,          /* Language specific
1233                                    class_name_from_physname */
1234   unk_op_print_tab,             /* expression operators for printing */
1235   1,                            /* c-style arrays */
1236   0,                            /* String lower bound */
1237   default_word_break_characters,
1238   default_make_symbol_completion_list,
1239   unknown_language_arch_info,   /* la_language_arch_info.  */
1240   default_print_array_index,
1241   default_pass_by_reference,
1242   default_get_string,
1243   LANG_MAGIC
1244 };
1245
1246 const struct language_defn local_language_defn =
1247 {
1248   "local",
1249   language_auto,
1250   range_check_off,
1251   type_check_off,
1252   case_sensitive_on,
1253   array_row_major,
1254   macro_expansion_no,
1255   &exp_descriptor_standard,
1256   unk_lang_parser,
1257   unk_lang_error,
1258   null_post_parser,
1259   unk_lang_printchar,           /* Print character constant */
1260   unk_lang_printstr,
1261   unk_lang_emit_char,
1262   unk_lang_print_type,          /* Print a type using appropriate syntax */
1263   default_print_typedef,        /* Print a typedef using appropriate syntax */
1264   unk_lang_val_print,           /* Print a value using appropriate syntax */
1265   unk_lang_value_print,         /* Print a top-level value */
1266   unk_lang_trampoline,          /* Language specific skip_trampoline */
1267   "this",                       /* name_of_this */
1268   basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
1269   basic_lookup_transparent_type,/* lookup_transparent_type */
1270   unk_lang_demangle,            /* Language specific symbol demangler */
1271   unk_lang_class_name,          /* Language specific
1272                                    class_name_from_physname */
1273   unk_op_print_tab,             /* expression operators for printing */
1274   1,                            /* c-style arrays */
1275   0,                            /* String lower bound */
1276   default_word_break_characters,
1277   default_make_symbol_completion_list,
1278   unknown_language_arch_info,   /* la_language_arch_info.  */
1279   default_print_array_index,
1280   default_pass_by_reference,
1281   default_get_string,
1282   LANG_MAGIC
1283 };
1284 \f
1285 /* Per-architecture language information.  */
1286
1287 static struct gdbarch_data *language_gdbarch_data;
1288
1289 struct language_gdbarch
1290 {
1291   /* A vector of per-language per-architecture info.  Indexed by "enum
1292      language".  */
1293   struct language_arch_info arch_info[nr_languages];
1294 };
1295
1296 static void *
1297 language_gdbarch_post_init (struct gdbarch *gdbarch)
1298 {
1299   struct language_gdbarch *l;
1300   int i;
1301
1302   l = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct language_gdbarch);
1303   for (i = 0; i < languages_size; i++)
1304     {
1305       if (languages[i] != NULL
1306           && languages[i]->la_language_arch_info != NULL)
1307         languages[i]->la_language_arch_info
1308           (gdbarch, l->arch_info + languages[i]->la_language);
1309     }
1310   return l;
1311 }
1312
1313 struct type *
1314 language_string_char_type (const struct language_defn *la,
1315                            struct gdbarch *gdbarch)
1316 {
1317   struct language_gdbarch *ld = gdbarch_data (gdbarch,
1318                                               language_gdbarch_data);
1319
1320   return ld->arch_info[la->la_language].string_char_type;
1321 }
1322
1323 struct type *
1324 language_bool_type (const struct language_defn *la,
1325                     struct gdbarch *gdbarch)
1326 {
1327   struct language_gdbarch *ld = gdbarch_data (gdbarch,
1328                                               language_gdbarch_data);
1329
1330   if (ld->arch_info[la->la_language].bool_type_symbol)
1331     {
1332       struct symbol *sym;
1333
1334       sym = lookup_symbol (ld->arch_info[la->la_language].bool_type_symbol,
1335                            NULL, VAR_DOMAIN, NULL);
1336       if (sym)
1337         {
1338           struct type *type = SYMBOL_TYPE (sym);
1339
1340           if (type && TYPE_CODE (type) == TYPE_CODE_BOOL)
1341             return type;
1342         }
1343     }
1344
1345   return ld->arch_info[la->la_language].bool_type_default;
1346 }
1347
1348 struct type *
1349 language_lookup_primitive_type_by_name (const struct language_defn *la,
1350                                         struct gdbarch *gdbarch,
1351                                         const char *name)
1352 {
1353   struct language_gdbarch *ld = gdbarch_data (gdbarch,
1354                                               language_gdbarch_data);
1355   struct type *const *p;
1356
1357   for (p = ld->arch_info[la->la_language].primitive_type_vector;
1358        (*p) != NULL;
1359        p++)
1360     {
1361       if (strcmp (TYPE_NAME (*p), name) == 0)
1362         return (*p);
1363     }
1364   return (NULL);
1365 }
1366
1367 /* Initialize the language routines */
1368
1369 void
1370 _initialize_language (void)
1371 {
1372   static const char *type_or_range_names[]
1373     = { "on", "off", "warn", "auto", NULL };
1374
1375   static const char *case_sensitive_names[]
1376     = { "on", "off", "auto", NULL };
1377
1378   language_gdbarch_data
1379     = gdbarch_data_register_post_init (language_gdbarch_post_init);
1380
1381   /* GDB commands for language specific stuff */
1382
1383   add_prefix_cmd ("check", no_class, set_check,
1384                   _("Set the status of the type/range checker."),
1385                   &setchecklist, "set check ", 0, &setlist);
1386   add_alias_cmd ("c", "check", no_class, 1, &setlist);
1387   add_alias_cmd ("ch", "check", no_class, 1, &setlist);
1388
1389   add_prefix_cmd ("check", no_class, show_check,
1390                   _("Show the status of the type/range checker."),
1391                   &showchecklist, "show check ", 0, &showlist);
1392   add_alias_cmd ("c", "check", no_class, 1, &showlist);
1393   add_alias_cmd ("ch", "check", no_class, 1, &showlist);
1394
1395   add_setshow_enum_cmd ("type", class_support, type_or_range_names, &type,
1396                         _("Set type checking.  (on/warn/off/auto)"),
1397                         _("Show type checking.  (on/warn/off/auto)"),
1398                         NULL, set_type_command,
1399                         show_type_command,
1400                         &setchecklist, &showchecklist);
1401
1402   add_setshow_enum_cmd ("range", class_support, type_or_range_names,
1403                         &range,
1404                         _("Set range checking.  (on/warn/off/auto)"),
1405                         _("Show range checking.  (on/warn/off/auto)"),
1406                         NULL, set_range_command,
1407                         show_range_command,
1408                         &setchecklist, &showchecklist);
1409
1410   add_setshow_enum_cmd ("case-sensitive", class_support, case_sensitive_names,
1411                         &case_sensitive, _("\
1412 Set case sensitivity in name search.  (on/off/auto)"), _("\
1413 Show case sensitivity in name search.  (on/off/auto)"), _("\
1414 For Fortran the default is off; for other languages the default is on."),
1415                         set_case_command,
1416                         show_case_command,
1417                         &setlist, &showlist);
1418
1419   add_language (&auto_language_defn);
1420   add_language (&local_language_defn);
1421   add_language (&unknown_language_defn);
1422
1423   language = xstrdup ("auto");
1424   type = xstrdup ("auto");
1425   range = xstrdup ("auto");
1426   case_sensitive = xstrdup ("auto");
1427
1428   /* Have the above take effect */
1429   set_language (language_auto);
1430 }