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