* defs.h: define language_pascal in language enumeration.
[external/binutils.git] / gdb / language.c
1 /* Multiple source language support for GDB.
2    Copyright 1991, 1992, 2000 Free Software Foundation, Inc.
3    Contributed by the Department of Computer Science at the State University
4    of New York at Buffalo.
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 2 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, write to the Free Software
20    Foundation, Inc., 59 Temple Place - Suite 330,
21    Boston, MA 02111-1307, USA.  */
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 "gdb_string.h"
34
35 #include "symtab.h"
36 #include "gdbtypes.h"
37 #include "value.h"
38 #include "gdbcmd.h"
39 #include "frame.h"
40 #include "expression.h"
41 #include "language.h"
42 #include "target.h"
43 #include "parser-defs.h"
44
45 extern void _initialize_language (void);
46
47 static void show_language_command (char *, int);
48
49 static void set_language_command (char *, int);
50
51 static void show_type_command (char *, int);
52
53 static void set_type_command (char *, int);
54
55 static void show_range_command (char *, int);
56
57 static void set_range_command (char *, int);
58
59 static void set_range_str (void);
60
61 static void set_type_str (void);
62
63 static void set_lang_str (void);
64
65 static void unk_lang_error (char *);
66
67 static int unk_lang_parser (void);
68
69 static void show_check (char *, int);
70
71 static void set_check (char *, int);
72
73 static void set_type_range (void);
74
75 static void unk_lang_emit_char (int c, struct ui_file *stream, int quoter);
76
77 static void unk_lang_printchar (int c, struct ui_file *stream);
78
79 static void unk_lang_printstr (struct ui_file * stream, char *string,
80                                unsigned int length, int width,
81                                int force_ellipses);
82
83 static struct type *unk_lang_create_fundamental_type (struct objfile *, int);
84
85 static void unk_lang_print_type (struct type *, char *, struct ui_file *,
86                                  int, int);
87
88 static int unk_lang_val_print (struct type *, char *, int, CORE_ADDR,
89                                struct ui_file *, int, int, int,
90                                enum val_prettyprint);
91
92 static int unk_lang_value_print (value_ptr, struct ui_file *, int, enum val_prettyprint);
93
94 /* Forward declaration */
95 extern const struct language_defn unknown_language_defn;
96 extern char *warning_pre_print;
97
98 /* The current (default at startup) state of type and range checking.
99    (If the modes are set to "auto", though, these are changed based
100    on the default language at startup, and then again based on the
101    language of the first source file.  */
102
103 enum range_mode range_mode = range_mode_auto;
104 enum range_check range_check = range_check_off;
105 enum type_mode type_mode = type_mode_auto;
106 enum type_check type_check = type_check_off;
107
108 /* The current language and language_mode (see language.h) */
109
110 const struct language_defn *current_language = &unknown_language_defn;
111 enum language_mode language_mode = language_mode_auto;
112
113 /* The language that the user expects to be typing in (the language
114    of main(), or the last language we notified them about, or C).  */
115
116 const struct language_defn *expected_language;
117
118 /* The list of supported languages.  The list itself is malloc'd.  */
119
120 static const struct language_defn **languages;
121 static unsigned languages_size;
122 static unsigned languages_allocsize;
123 #define DEFAULT_ALLOCSIZE 4
124
125 /* The "set language/type/range" commands all put stuff in these
126    buffers.  This is to make them work as set/show commands.  The
127    user's string is copied here, then the set_* commands look at
128    them and update them to something that looks nice when it is
129    printed out. */
130
131 static char *language;
132 static char *type;
133 static char *range;
134
135 /* Warning issued when current_language and the language of the current
136    frame do not match. */
137 char lang_frame_mismatch_warn[] =
138 "Warning: the current language does not match this frame.";
139 \f
140
141 /* This page contains the functions corresponding to GDB commands
142    and their helpers. */
143
144 /* Show command.  Display a warning if the language set
145    does not match the frame. */
146 static void
147 show_language_command (ignore, from_tty)
148      char *ignore;
149      int from_tty;
150 {
151   enum language flang;          /* The language of the current frame */
152
153   flang = get_frame_language ();
154   if (flang != language_unknown &&
155       language_mode == language_mode_manual &&
156       current_language->la_language != flang)
157     printf_filtered ("%s\n", lang_frame_mismatch_warn);
158 }
159
160 /* Set command.  Change the current working language. */
161 static void
162 set_language_command (ignore, from_tty)
163      char *ignore;
164      int from_tty;
165 {
166   int i;
167   enum language flang;
168   char *err_lang;
169
170   if (!language || !language[0])
171     {
172       printf_unfiltered ("The currently understood settings are:\n\n");
173       printf_unfiltered ("local or auto    Automatic setting based on source file\n");
174
175       for (i = 0; i < languages_size; ++i)
176         {
177           /* Already dealt with these above.  */
178           if (languages[i]->la_language == language_unknown
179               || languages[i]->la_language == language_auto)
180             continue;
181
182           /* FIXME for now assume that the human-readable name is just
183              a capitalization of the internal name.  */
184           printf_unfiltered ("%-16s Use the %c%s language\n",
185                              languages[i]->la_name,
186           /* Capitalize first letter of language
187              name.  */
188                              toupper (languages[i]->la_name[0]),
189                              languages[i]->la_name + 1);
190         }
191       /* Restore the silly string. */
192       set_language (current_language->la_language);
193       return;
194     }
195
196   /* Search the list of languages for a match.  */
197   for (i = 0; i < languages_size; i++)
198     {
199       if (STREQ (languages[i]->la_name, language))
200         {
201           /* Found it!  Go into manual mode, and use this language.  */
202           if (languages[i]->la_language == language_auto)
203             {
204               /* Enter auto mode.  Set to the current frame's language, if known.  */
205               language_mode = language_mode_auto;
206               flang = get_frame_language ();
207               if (flang != language_unknown)
208                 set_language (flang);
209               expected_language = current_language;
210               return;
211             }
212           else
213             {
214               /* Enter manual mode.  Set the specified language.  */
215               language_mode = language_mode_manual;
216               current_language = languages[i];
217               set_type_range ();
218               set_lang_str ();
219               expected_language = current_language;
220               return;
221             }
222         }
223     }
224
225   /* Reset the language (esp. the global string "language") to the 
226      correct values. */
227   err_lang = savestring (language, strlen (language));
228   make_cleanup (free, err_lang);        /* Free it after error */
229   set_language (current_language->la_language);
230   error ("Unknown language `%s'.", err_lang);
231 }
232
233 /* Show command.  Display a warning if the type setting does
234    not match the current language. */
235 static void
236 show_type_command (ignore, from_tty)
237      char *ignore;
238      int from_tty;
239 {
240   if (type_check != current_language->la_type_check)
241     printf_unfiltered (
242                         "Warning: the current type check setting does not match the language.\n");
243 }
244
245 /* Set command.  Change the setting for type checking. */
246 static void
247 set_type_command (ignore, from_tty)
248      char *ignore;
249      int from_tty;
250 {
251   if (STREQ (type, "on"))
252     {
253       type_check = type_check_on;
254       type_mode = type_mode_manual;
255     }
256   else if (STREQ (type, "warn"))
257     {
258       type_check = type_check_warn;
259       type_mode = type_mode_manual;
260     }
261   else if (STREQ (type, "off"))
262     {
263       type_check = type_check_off;
264       type_mode = type_mode_manual;
265     }
266   else if (STREQ (type, "auto"))
267     {
268       type_mode = type_mode_auto;
269       set_type_range ();
270       /* Avoid hitting the set_type_str call below.  We
271          did it in set_type_range. */
272       return;
273     }
274   else
275     {
276       warning ("Unrecognized type check setting: \"%s\"", type);
277     }
278   set_type_str ();
279   show_type_command ((char *) NULL, from_tty);
280 }
281
282 /* Show command.  Display a warning if the range setting does
283    not match the current language. */
284 static void
285 show_range_command (ignore, from_tty)
286      char *ignore;
287      int from_tty;
288 {
289
290   if (range_check != current_language->la_range_check)
291     printf_unfiltered (
292                         "Warning: the current range check setting does not match the language.\n");
293 }
294
295 /* Set command.  Change the setting for range checking. */
296 static void
297 set_range_command (ignore, from_tty)
298      char *ignore;
299      int from_tty;
300 {
301   if (STREQ (range, "on"))
302     {
303       range_check = range_check_on;
304       range_mode = range_mode_manual;
305     }
306   else if (STREQ (range, "warn"))
307     {
308       range_check = range_check_warn;
309       range_mode = range_mode_manual;
310     }
311   else if (STREQ (range, "off"))
312     {
313       range_check = range_check_off;
314       range_mode = range_mode_manual;
315     }
316   else if (STREQ (range, "auto"))
317     {
318       range_mode = range_mode_auto;
319       set_type_range ();
320       /* Avoid hitting the set_range_str call below.  We
321          did it in set_type_range. */
322       return;
323     }
324   else
325     {
326       warning ("Unrecognized range check setting: \"%s\"", range);
327     }
328   set_range_str ();
329   show_range_command ((char *) 0, from_tty);
330 }
331
332 /* Set the status of range and type checking based on
333    the current modes and the current language.
334    If SHOW is non-zero, then print out the current language,
335    type and range checking status. */
336 static void
337 set_type_range ()
338 {
339
340   if (range_mode == range_mode_auto)
341     range_check = current_language->la_range_check;
342
343   if (type_mode == type_mode_auto)
344     type_check = current_language->la_type_check;
345
346   set_type_str ();
347   set_range_str ();
348 }
349
350 /* Set current language to (enum language) LANG.  Returns previous language. */
351
352 enum language
353 set_language (lang)
354      enum language lang;
355 {
356   int i;
357   enum language prev_language;
358
359   prev_language = current_language->la_language;
360
361   for (i = 0; i < languages_size; i++)
362     {
363       if (languages[i]->la_language == lang)
364         {
365           current_language = languages[i];
366           set_type_range ();
367           set_lang_str ();
368           break;
369         }
370     }
371
372   return prev_language;
373 }
374 \f
375 /* This page contains functions that update the global vars
376    language, type and range. */
377 static void
378 set_lang_str ()
379 {
380   char *prefix = "";
381
382   if (language)
383     free (language);
384   if (language_mode == language_mode_auto)
385     prefix = "auto; currently ";
386
387   language = concat (prefix, current_language->la_name, NULL);
388 }
389
390 static void
391 set_type_str ()
392 {
393   char *tmp = NULL, *prefix = "";
394
395   if (type)
396     free (type);
397   if (type_mode == type_mode_auto)
398     prefix = "auto; currently ";
399
400   switch (type_check)
401     {
402     case type_check_on:
403       tmp = "on";
404       break;
405     case type_check_off:
406       tmp = "off";
407       break;
408     case type_check_warn:
409       tmp = "warn";
410       break;
411     default:
412       error ("Unrecognized type check setting.");
413     }
414
415   type = concat (prefix, tmp, NULL);
416 }
417
418 static void
419 set_range_str ()
420 {
421   char *tmp, *pref = "";
422
423   if (range_mode == range_mode_auto)
424     pref = "auto; currently ";
425
426   switch (range_check)
427     {
428     case range_check_on:
429       tmp = "on";
430       break;
431     case range_check_off:
432       tmp = "off";
433       break;
434     case range_check_warn:
435       tmp = "warn";
436       break;
437     default:
438       error ("Unrecognized range check setting.");
439     }
440
441   if (range)
442     free (range);
443   range = concat (pref, tmp, NULL);
444 }
445
446
447 /* Print out the current language settings: language, range and
448    type checking.  If QUIETLY, print only what has changed.  */
449
450 void
451 language_info (quietly)
452      int quietly;
453 {
454   if (quietly && expected_language == current_language)
455     return;
456
457   expected_language = current_language;
458   printf_unfiltered ("Current language:  %s\n", language);
459   show_language_command ((char *) 0, 1);
460
461   if (!quietly)
462     {
463       printf_unfiltered ("Type checking:     %s\n", type);
464       show_type_command ((char *) 0, 1);
465       printf_unfiltered ("Range checking:    %s\n", range);
466       show_range_command ((char *) 0, 1);
467     }
468 }
469 \f
470 /* Return the result of a binary operation. */
471
472 #if 0                           /* Currently unused */
473
474 struct type *
475 binop_result_type (v1, v2)
476      value_ptr v1, v2;
477 {
478   int size, uns;
479   struct type *t1 = check_typedef (VALUE_TYPE (v1));
480   struct type *t2 = check_typedef (VALUE_TYPE (v2));
481
482   int l1 = TYPE_LENGTH (t1);
483   int l2 = TYPE_LENGTH (t2);
484
485   switch (current_language->la_language)
486     {
487     case language_c:
488     case language_cplus:
489       if (TYPE_CODE (t1) == TYPE_CODE_FLT)
490         return TYPE_CODE (t2) == TYPE_CODE_FLT && l2 > l1 ?
491           VALUE_TYPE (v2) : VALUE_TYPE (v1);
492       else if (TYPE_CODE (t2) == TYPE_CODE_FLT)
493         return TYPE_CODE (t1) == TYPE_CODE_FLT && l1 > l2 ?
494           VALUE_TYPE (v1) : VALUE_TYPE (v2);
495       else if (TYPE_UNSIGNED (t1) && l1 > l2)
496         return VALUE_TYPE (v1);
497       else if (TYPE_UNSIGNED (t2) && l2 > l1)
498         return VALUE_TYPE (v2);
499       else                      /* Both are signed.  Result is the longer type */
500         return l1 > l2 ? VALUE_TYPE (v1) : VALUE_TYPE (v2);
501       break;
502     case language_m2:
503       /* If we are doing type-checking, l1 should equal l2, so this is
504          not needed. */
505       return l1 > l2 ? VALUE_TYPE (v1) : VALUE_TYPE (v2);
506       break;
507     case language_chill:
508       error ("Missing Chill support in function binop_result_check.");  /*FIXME */
509     }
510   abort ();
511   return (struct type *) 0;     /* For lint */
512 }
513
514 #endif /* 0 */
515 \f
516
517 /* This page contains functions that return format strings for
518    printf for printing out numbers in different formats */
519
520 /* Returns the appropriate printf format for hexadecimal
521    numbers. */
522 char *
523 local_hex_format_custom (pre)
524      char *pre;
525 {
526   static char form[50];
527
528   strcpy (form, local_hex_format_prefix ());
529   strcat (form, "%");
530   strcat (form, pre);
531   strcat (form, local_hex_format_specifier ());
532   strcat (form, local_hex_format_suffix ());
533   return form;
534 }
535
536 #if 0
537 /* FIXME: cagney/2000-03-04: This function does not appear to be used.
538    It can be deleted once 5.0 has been released. */
539 /* FIXME: cagney/2000-03-04: This code assumes that the compiler
540    supports ``long long''. */
541 /* Converts a number to hexadecimal (without leading "0x") and stores it in a
542    static string.  Returns a pointer to this string. */
543
544 char *
545 longest_raw_hex_string (num)
546      LONGEST num;
547 {
548   static char res_longest_raw_hex_string[50];
549   long long ll = num;           /* MERGEBUG ?? see below */
550   res_longest_raw_hex_string[0] = 0;
551   /* MERGEBUG ?? As a quick fix I am replacing this with sprintf 
552      strcat_address_numeric (num, 0, res_longest_raw_hex_string, 50); 
553    */
554
555   sprintf (res_longest_raw_hex_string, "%llx", ll);
556   return res_longest_raw_hex_string;
557 }
558 #endif
559
560 /* Converts a number to hexadecimal and stores it in a static
561    string.  Returns a pointer to this string. */
562 char *
563 local_hex_string (num)
564      unsigned long num;
565 {
566   static char res[50];
567
568   sprintf (res, local_hex_format (), num);
569   return res;
570 }
571
572 /* Converts a LONGEST number to hexadecimal and stores it in a static
573    string.  Returns a pointer to this string. */
574 char *
575 longest_local_hex_string (num)
576      LONGEST num;
577 {
578   return longest_local_hex_string_custom (num, "l");
579 }
580
581 /* Converts a number to custom hexadecimal and stores it in a static
582    string.  Returns a pointer to this string. */
583 char *
584 local_hex_string_custom (num, pre)
585      unsigned long num;
586      char *pre;
587 {
588   static char res[50];
589
590   sprintf (res, local_hex_format_custom (pre), num);
591   return res;
592 }
593
594 /* Converts a LONGEST number to custom hexadecimal and stores it in a static
595    string.  Returns a pointer to this string. Note that the width parameter
596    should end with "l", e.g. "08l" as with calls to local_hex_string_custom */
597
598 char *
599 longest_local_hex_string_custom (num, width)
600      LONGEST num;
601      char *width;
602 {
603 #define RESULT_BUF_LEN 50
604   static char res2[RESULT_BUF_LEN];
605   char format[RESULT_BUF_LEN];
606 #if !defined (PRINTF_HAS_LONG_LONG)
607   int field_width;
608   int num_len;
609   int num_pad_chars;
610   char *pad_char;               /* string with one character */
611   int pad_on_left;
612   char *parse_ptr;
613   char temp_nbr_buf[RESULT_BUF_LEN];
614 #endif
615
616 #ifndef CC_HAS_LONG_LONG
617   /* If there is no long long, then LONGEST should be just long and we
618      can use local_hex_string_custom 
619    */
620   return local_hex_string_custom ((unsigned long) num, width);
621 #elif defined (PRINTF_HAS_LONG_LONG)
622   /* Just use printf.  */
623   strcpy (format, local_hex_format_prefix ());  /* 0x */
624   strcat (format, "%");
625   strcat (format, width);       /* e.g. "08l" */
626   strcat (format, "l");         /* need "ll" for long long */
627   strcat (format, local_hex_format_specifier ());       /* "x" */
628   strcat (format, local_hex_format_suffix ());  /* "" */
629   sprintf (res2, format, num);
630   return res2;
631 #else /* !defined (PRINTF_HAS_LONG_LONG) */
632   /* Use strcat_address_numeric to print the number into a string, then
633      build the result string from local_hex_format_prefix, padding and 
634      the hex representation as indicated by "width".  */
635
636   temp_nbr_buf[0] = 0;
637   /* With use_local == 0, we don't get the leading "0x" prefix. */
638   /* MERGEBUG ?? As a quick fix I am replacing this call to
639      strcat_address_numeric with sprintf
640      strcat_address_numeric(num, 0, temp_nbr_buf, RESULT_BUF_LEN);
641    */
642
643   {
644     long long ll = num;
645     sprintf (temp_nbr_buf, "%llx", ll);
646   }
647   /* parse width */
648   parse_ptr = width;
649   pad_on_left = 1;
650   pad_char = " ";
651   if (*parse_ptr == '-')
652     {
653       parse_ptr++;
654       pad_on_left = 0;
655     }
656   if (*parse_ptr == '0')
657     {
658       parse_ptr++;
659       if (pad_on_left)
660         pad_char = "0";         /* If padding is on the right, it is blank */
661     }
662   field_width = atoi (parse_ptr);
663   num_len = strlen (temp_nbr_buf);
664   num_pad_chars = field_width - strlen (temp_nbr_buf);  /* possibly negative */
665
666   if (strlen (local_hex_format_prefix ()) + num_len + num_pad_chars
667       < RESULT_BUF_LEN)         /* paranoia */
668     internal_error ("longest_local_hex_string_custom: insufficient space to store result");
669
670   strcpy (res2, local_hex_format_prefix ());
671   if (pad_on_left)
672     {
673       while (num_pad_chars > 0)
674         {
675           strcat (res2, pad_char);
676           num_pad_chars--;
677         }
678     }
679   strcat (res2, temp_nbr_buf);
680   if (!pad_on_left)
681     {
682       while (num_pad_chars > 0)
683         {
684           strcat (res2, pad_char);
685           num_pad_chars--;
686         }
687     }
688   return res2;
689 #endif
690
691 }                               /* longest_local_hex_string_custom */
692
693 /* Returns the appropriate printf format for octal
694    numbers. */
695 char *
696 local_octal_format_custom (pre)
697      char *pre;
698 {
699   static char form[50];
700
701   strcpy (form, local_octal_format_prefix ());
702   strcat (form, "%");
703   strcat (form, pre);
704   strcat (form, local_octal_format_specifier ());
705   strcat (form, local_octal_format_suffix ());
706   return form;
707 }
708
709 /* Returns the appropriate printf format for decimal numbers. */
710 char *
711 local_decimal_format_custom (pre)
712      char *pre;
713 {
714   static char form[50];
715
716   strcpy (form, local_decimal_format_prefix ());
717   strcat (form, "%");
718   strcat (form, pre);
719   strcat (form, local_decimal_format_specifier ());
720   strcat (form, local_decimal_format_suffix ());
721   return form;
722 }
723 \f
724 #if 0
725 /* This page contains functions that are used in type/range checking.
726    They all return zero if the type/range check fails.
727
728    It is hoped that these will make extending GDB to parse different
729    languages a little easier.  These are primarily used in eval.c when
730    evaluating expressions and making sure that their types are correct.
731    Instead of having a mess of conjucted/disjuncted expressions in an "if",
732    the ideas of type can be wrapped up in the following functions.
733
734    Note that some of them are not currently dependent upon which language
735    is currently being parsed.  For example, floats are the same in
736    C and Modula-2 (ie. the only floating point type has TYPE_CODE of
737    TYPE_CODE_FLT), while booleans are different. */
738
739 /* Returns non-zero if its argument is a simple type.  This is the same for
740    both Modula-2 and for C.  In the C case, TYPE_CODE_CHAR will never occur,
741    and thus will never cause the failure of the test. */
742 int
743 simple_type (type)
744      struct type *type;
745 {
746   CHECK_TYPEDEF (type);
747   switch (TYPE_CODE (type))
748     {
749     case TYPE_CODE_INT:
750     case TYPE_CODE_CHAR:
751     case TYPE_CODE_ENUM:
752     case TYPE_CODE_FLT:
753     case TYPE_CODE_RANGE:
754     case TYPE_CODE_BOOL:
755       return 1;
756
757     default:
758       return 0;
759     }
760 }
761
762 /* Returns non-zero if its argument is of an ordered type.
763    An ordered type is one in which the elements can be tested for the
764    properties of "greater than", "less than", etc, or for which the
765    operations "increment" or "decrement" make sense. */
766 int
767 ordered_type (type)
768      struct type *type;
769 {
770   CHECK_TYPEDEF (type);
771   switch (TYPE_CODE (type))
772     {
773     case TYPE_CODE_INT:
774     case TYPE_CODE_CHAR:
775     case TYPE_CODE_ENUM:
776     case TYPE_CODE_FLT:
777     case TYPE_CODE_RANGE:
778       return 1;
779
780     default:
781       return 0;
782     }
783 }
784
785 /* Returns non-zero if the two types are the same */
786 int
787 same_type (arg1, arg2)
788      struct type *arg1, *arg2;
789 {
790   CHECK_TYPEDEF (type);
791   if (structured_type (arg1) ? !structured_type (arg2) : structured_type (arg2))
792     /* One is structured and one isn't */
793     return 0;
794   else if (structured_type (arg1) && structured_type (arg2))
795     return arg1 == arg2;
796   else if (numeric_type (arg1) && numeric_type (arg2))
797     return (TYPE_CODE (arg2) == TYPE_CODE (arg1)) &&
798       (TYPE_UNSIGNED (arg1) == TYPE_UNSIGNED (arg2))
799       ? 1 : 0;
800   else
801     return arg1 == arg2;
802 }
803
804 /* Returns non-zero if the type is integral */
805 int
806 integral_type (type)
807      struct type *type;
808 {
809   CHECK_TYPEDEF (type);
810   switch (current_language->la_language)
811     {
812     case language_c:
813     case language_cplus:
814       return (TYPE_CODE (type) != TYPE_CODE_INT) &&
815         (TYPE_CODE (type) != TYPE_CODE_ENUM) ? 0 : 1;
816     case language_m2:
817     case language_pascal:
818       return TYPE_CODE (type) != TYPE_CODE_INT ? 0 : 1;
819     case language_chill:
820       error ("Missing Chill support in function integral_type.");       /*FIXME */
821     default:
822       error ("Language not supported.");
823     }
824 }
825
826 /* Returns non-zero if the value is numeric */
827 int
828 numeric_type (type)
829      struct type *type;
830 {
831   CHECK_TYPEDEF (type);
832   switch (TYPE_CODE (type))
833     {
834     case TYPE_CODE_INT:
835     case TYPE_CODE_FLT:
836       return 1;
837
838     default:
839       return 0;
840     }
841 }
842
843 /* Returns non-zero if the value is a character type */
844 int
845 character_type (type)
846      struct type *type;
847 {
848   CHECK_TYPEDEF (type);
849   switch (current_language->la_language)
850     {
851     case language_chill:
852     case language_m2:
853     case language_pascal:
854       return TYPE_CODE (type) != TYPE_CODE_CHAR ? 0 : 1;
855
856     case language_c:
857     case language_cplus:
858       return (TYPE_CODE (type) == TYPE_CODE_INT) &&
859         TYPE_LENGTH (type) == sizeof (char)
860       ? 1 : 0;
861     default:
862       return (0);
863     }
864 }
865
866 /* Returns non-zero if the value is a string type */
867 int
868 string_type (type)
869      struct type *type;
870 {
871   CHECK_TYPEDEF (type);
872   switch (current_language->la_language)
873     {
874     case language_chill:
875     case language_m2:
876     case language_pascal:
877       return TYPE_CODE (type) != TYPE_CODE_STRING ? 0 : 1;
878
879     case language_c:
880     case language_cplus:
881       /* C does not have distinct string type. */
882       return (0);
883     default:
884       return (0);
885     }
886 }
887
888 /* Returns non-zero if the value is a boolean type */
889 int
890 boolean_type (type)
891      struct type *type;
892 {
893   CHECK_TYPEDEF (type);
894   if (TYPE_CODE (type) == TYPE_CODE_BOOL)
895     return 1;
896   switch (current_language->la_language)
897     {
898     case language_c:
899     case language_cplus:
900       /* Might be more cleanly handled by having a TYPE_CODE_INT_NOT_BOOL
901          for CHILL and such languages, or a TYPE_CODE_INT_OR_BOOL for C.  */
902       if (TYPE_CODE (type) == TYPE_CODE_INT)
903         return 1;
904     default:
905       break;
906     }
907   return 0;
908 }
909
910 /* Returns non-zero if the value is a floating-point type */
911 int
912 float_type (type)
913      struct type *type;
914 {
915   CHECK_TYPEDEF (type);
916   return TYPE_CODE (type) == TYPE_CODE_FLT;
917 }
918
919 /* Returns non-zero if the value is a pointer type */
920 int
921 pointer_type (type)
922      struct type *type;
923 {
924   return TYPE_CODE (type) == TYPE_CODE_PTR ||
925     TYPE_CODE (type) == TYPE_CODE_REF;
926 }
927
928 /* Returns non-zero if the value is a structured type */
929 int
930 structured_type (type)
931      struct type *type;
932 {
933   CHECK_TYPEDEF (type);
934   switch (current_language->la_language)
935     {
936     case language_c:
937     case language_cplus:
938       return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
939         (TYPE_CODE (type) == TYPE_CODE_UNION) ||
940         (TYPE_CODE (type) == TYPE_CODE_ARRAY);
941    case language_pascal:
942       return (TYPE_CODE(type) == TYPE_CODE_STRUCT) ||
943          (TYPE_CODE(type) == TYPE_CODE_UNION) ||
944          (TYPE_CODE(type) == TYPE_CODE_SET) ||
945             (TYPE_CODE(type) == TYPE_CODE_ARRAY);
946     case language_m2:
947       return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
948         (TYPE_CODE (type) == TYPE_CODE_SET) ||
949         (TYPE_CODE (type) == TYPE_CODE_ARRAY);
950     case language_chill:
951       error ("Missing Chill support in function structured_type.");     /*FIXME */
952     default:
953       return (0);
954     }
955 }
956 #endif
957 \f
958 struct type *
959 lang_bool_type ()
960 {
961   struct symbol *sym;
962   struct type *type;
963   switch (current_language->la_language)
964     {
965     case language_chill:
966       return builtin_type_chill_bool;
967     case language_fortran:
968       sym = lookup_symbol ("logical", NULL, VAR_NAMESPACE, NULL, NULL);
969       if (sym)
970         {
971           type = SYMBOL_TYPE (sym);
972           if (type && TYPE_CODE (type) == TYPE_CODE_BOOL)
973             return type;
974         }
975       return builtin_type_f_logical_s2;
976     case language_cplus:
977     case language_pascal:
978       if (current_language->la_language==language_cplus)
979         {sym = lookup_symbol ("bool", NULL, VAR_NAMESPACE, NULL, NULL);}
980       else
981         {sym = lookup_symbol ("boolean", NULL, VAR_NAMESPACE, NULL, NULL);}
982       if (sym)
983         {
984           type = SYMBOL_TYPE (sym);
985           if (type && TYPE_CODE (type) == TYPE_CODE_BOOL)
986             return type;
987         }
988       return builtin_type_bool;
989     default:
990       return builtin_type_int;
991     }
992 }
993 \f
994 /* This page contains functions that return info about
995    (struct value) values used in GDB. */
996
997 /* Returns non-zero if the value VAL represents a true value. */
998 int
999 value_true (val)
1000      value_ptr val;
1001 {
1002   /* It is possible that we should have some sort of error if a non-boolean
1003      value is used in this context.  Possibly dependent on some kind of
1004      "boolean-checking" option like range checking.  But it should probably
1005      not depend on the language except insofar as is necessary to identify
1006      a "boolean" value (i.e. in C using a float, pointer, etc., as a boolean
1007      should be an error, probably).  */
1008   return !value_logical_not (val);
1009 }
1010 \f
1011 /* Returns non-zero if the operator OP is defined on
1012    the values ARG1 and ARG2. */
1013
1014 #if 0                           /* Currently unused */
1015
1016 void
1017 binop_type_check (arg1, arg2, op)
1018      value_ptr arg1, arg2;
1019      int op;
1020 {
1021   struct type *t1, *t2;
1022
1023   /* If we're not checking types, always return success. */
1024   if (!STRICT_TYPE)
1025     return;
1026
1027   t1 = VALUE_TYPE (arg1);
1028   if (arg2 != NULL)
1029     t2 = VALUE_TYPE (arg2);
1030   else
1031     t2 = NULL;
1032
1033   switch (op)
1034     {
1035     case BINOP_ADD:
1036     case BINOP_SUB:
1037       if ((numeric_type (t1) && pointer_type (t2)) ||
1038           (pointer_type (t1) && numeric_type (t2)))
1039         {
1040           warning ("combining pointer and integer.\n");
1041           break;
1042         }
1043     case BINOP_MUL:
1044     case BINOP_LSH:
1045     case BINOP_RSH:
1046       if (!numeric_type (t1) || !numeric_type (t2))
1047         type_op_error ("Arguments to %s must be numbers.", op);
1048       else if (!same_type (t1, t2))
1049         type_op_error ("Arguments to %s must be of the same type.", op);
1050       break;
1051
1052     case BINOP_LOGICAL_AND:
1053     case BINOP_LOGICAL_OR:
1054       if (!boolean_type (t1) || !boolean_type (t2))
1055         type_op_error ("Arguments to %s must be of boolean type.", op);
1056       break;
1057
1058     case BINOP_EQUAL:
1059       if ((pointer_type (t1) && !(pointer_type (t2) || integral_type (t2))) ||
1060           (pointer_type (t2) && !(pointer_type (t1) || integral_type (t1))))
1061         type_op_error ("A pointer can only be compared to an integer or pointer.", op);
1062       else if ((pointer_type (t1) && integral_type (t2)) ||
1063                (integral_type (t1) && pointer_type (t2)))
1064         {
1065           warning ("combining integer and pointer.\n");
1066           break;
1067         }
1068       else if (!simple_type (t1) || !simple_type (t2))
1069         type_op_error ("Arguments to %s must be of simple type.", op);
1070       else if (!same_type (t1, t2))
1071         type_op_error ("Arguments to %s must be of the same type.", op);
1072       break;
1073
1074     case BINOP_REM:
1075     case BINOP_MOD:
1076       if (!integral_type (t1) || !integral_type (t2))
1077         type_op_error ("Arguments to %s must be of integral type.", op);
1078       break;
1079
1080     case BINOP_LESS:
1081     case BINOP_GTR:
1082     case BINOP_LEQ:
1083     case BINOP_GEQ:
1084       if (!ordered_type (t1) || !ordered_type (t2))
1085         type_op_error ("Arguments to %s must be of ordered type.", op);
1086       else if (!same_type (t1, t2))
1087         type_op_error ("Arguments to %s must be of the same type.", op);
1088       break;
1089
1090     case BINOP_ASSIGN:
1091       if (pointer_type (t1) && !integral_type (t2))
1092         type_op_error ("A pointer can only be assigned an integer.", op);
1093       else if (pointer_type (t1) && integral_type (t2))
1094         {
1095           warning ("combining integer and pointer.");
1096           break;
1097         }
1098       else if (!simple_type (t1) || !simple_type (t2))
1099         type_op_error ("Arguments to %s must be of simple type.", op);
1100       else if (!same_type (t1, t2))
1101         type_op_error ("Arguments to %s must be of the same type.", op);
1102       break;
1103
1104     case BINOP_CONCAT:
1105       /* FIXME:  Needs to handle bitstrings as well. */
1106       if (!(string_type (t1) || character_type (t1) || integral_type (t1))
1107         || !(string_type (t2) || character_type (t2) || integral_type (t2)))
1108         type_op_error ("Arguments to %s must be strings or characters.", op);
1109       break;
1110
1111       /* Unary checks -- arg2 is null */
1112
1113     case UNOP_LOGICAL_NOT:
1114       if (!boolean_type (t1))
1115         type_op_error ("Argument to %s must be of boolean type.", op);
1116       break;
1117
1118     case UNOP_PLUS:
1119     case UNOP_NEG:
1120       if (!numeric_type (t1))
1121         type_op_error ("Argument to %s must be of numeric type.", op);
1122       break;
1123
1124     case UNOP_IND:
1125       if (integral_type (t1))
1126         {
1127           warning ("combining pointer and integer.\n");
1128           break;
1129         }
1130       else if (!pointer_type (t1))
1131         type_op_error ("Argument to %s must be a pointer.", op);
1132       break;
1133
1134     case UNOP_PREINCREMENT:
1135     case UNOP_POSTINCREMENT:
1136     case UNOP_PREDECREMENT:
1137     case UNOP_POSTDECREMENT:
1138       if (!ordered_type (t1))
1139         type_op_error ("Argument to %s must be of an ordered type.", op);
1140       break;
1141
1142     default:
1143       /* Ok.  The following operators have different meanings in
1144          different languages. */
1145       switch (current_language->la_language)
1146         {
1147 #ifdef _LANG_c
1148         case language_c:
1149         case language_cplus:
1150           switch (op)
1151             {
1152             case BINOP_DIV:
1153               if (!numeric_type (t1) || !numeric_type (t2))
1154                 type_op_error ("Arguments to %s must be numbers.", op);
1155               break;
1156             }
1157           break;
1158 #endif
1159
1160 #ifdef _LANG_m2
1161         case language_m2:
1162           switch (op)
1163             {
1164             case BINOP_DIV:
1165               if (!float_type (t1) || !float_type (t2))
1166                 type_op_error ("Arguments to %s must be floating point numbers.", op);
1167               break;
1168             case BINOP_INTDIV:
1169               if (!integral_type (t1) || !integral_type (t2))
1170                 type_op_error ("Arguments to %s must be of integral type.", op);
1171               break;
1172             }
1173 #endif
1174
1175 #ifdef _LANG_pascal
1176       case language_pascal:
1177          switch(op)
1178          {
1179          case BINOP_DIV:
1180             if (!float_type(t1) && !float_type(t2))
1181                type_op_error ("Arguments to %s must be floating point numbers.",op);
1182             break;
1183          case BINOP_INTDIV:
1184             if (!integral_type(t1) || !integral_type(t2))
1185                type_op_error ("Arguments to %s must be of integral type.",op);
1186             break;
1187          }
1188 #endif
1189
1190 #ifdef _LANG_chill
1191         case language_chill:
1192           error ("Missing Chill support in function binop_type_check.");        /*FIXME */
1193 #endif
1194
1195         }
1196     }
1197 }
1198
1199 #endif /* 0 */
1200 \f
1201
1202 /* This page contains functions for the printing out of
1203    error messages that occur during type- and range-
1204    checking. */
1205
1206 /* Prints the format string FMT with the operator as a string
1207    corresponding to the opcode OP.  If FATAL is non-zero, then
1208    this is an error and error () is called.  Otherwise, it is
1209    a warning and printf() is called. */
1210 void
1211 op_error (fmt, op, fatal)
1212      char *fmt;
1213      enum exp_opcode op;
1214      int fatal;
1215 {
1216   if (fatal)
1217     error (fmt, op_string (op));
1218   else
1219     {
1220       warning (fmt, op_string (op));
1221     }
1222 }
1223
1224 /* These are called when a language fails a type- or range-check.
1225    The first argument should be a printf()-style format string, and
1226    the rest of the arguments should be its arguments.  If
1227    [type|range]_check is [type|range]_check_on, then return_to_top_level()
1228    is called in the style of error ().  Otherwise, the message is prefixed
1229    by the value of warning_pre_print and we do not return to the top level. */
1230
1231 void
1232 type_error (char *string,...)
1233 {
1234   va_list args;
1235   va_start (args, string);
1236
1237   if (type_check == type_check_warn)
1238     fprintf_filtered (gdb_stderr, warning_pre_print);
1239   else
1240     error_begin ();
1241
1242   vfprintf_filtered (gdb_stderr, string, args);
1243   fprintf_filtered (gdb_stderr, "\n");
1244   va_end (args);
1245   if (type_check == type_check_on)
1246     return_to_top_level (RETURN_ERROR);
1247 }
1248
1249 void
1250 range_error (char *string,...)
1251 {
1252   va_list args;
1253   va_start (args, string);
1254
1255   if (range_check == range_check_warn)
1256     fprintf_filtered (gdb_stderr, warning_pre_print);
1257   else
1258     error_begin ();
1259
1260   vfprintf_filtered (gdb_stderr, string, args);
1261   fprintf_filtered (gdb_stderr, "\n");
1262   va_end (args);
1263   if (range_check == range_check_on)
1264     return_to_top_level (RETURN_ERROR);
1265 }
1266 \f
1267
1268 /* This page contains miscellaneous functions */
1269
1270 /* Return the language enum for a given language string. */
1271
1272 enum language
1273 language_enum (str)
1274      char *str;
1275 {
1276   int i;
1277
1278   for (i = 0; i < languages_size; i++)
1279     if (STREQ (languages[i]->la_name, str))
1280       return languages[i]->la_language;
1281
1282   return language_unknown;
1283 }
1284
1285 /* Return the language struct for a given language enum. */
1286
1287 const struct language_defn *
1288 language_def (lang)
1289      enum language lang;
1290 {
1291   int i;
1292
1293   for (i = 0; i < languages_size; i++)
1294     {
1295       if (languages[i]->la_language == lang)
1296         {
1297           return languages[i];
1298         }
1299     }
1300   return NULL;
1301 }
1302
1303 /* Return the language as a string */
1304 char *
1305 language_str (lang)
1306      enum language lang;
1307 {
1308   int i;
1309
1310   for (i = 0; i < languages_size; i++)
1311     {
1312       if (languages[i]->la_language == lang)
1313         {
1314           return languages[i]->la_name;
1315         }
1316     }
1317   return "Unknown";
1318 }
1319
1320 static void
1321 set_check (ignore, from_tty)
1322      char *ignore;
1323      int from_tty;
1324 {
1325   printf_unfiltered (
1326      "\"set check\" must be followed by the name of a check subcommand.\n");
1327   help_list (setchecklist, "set check ", -1, gdb_stdout);
1328 }
1329
1330 static void
1331 show_check (ignore, from_tty)
1332      char *ignore;
1333      int from_tty;
1334 {
1335   cmd_show_list (showchecklist, from_tty, "");
1336 }
1337 \f
1338 /* Add a language to the set of known languages.  */
1339
1340 void
1341 add_language (lang)
1342      const struct language_defn *lang;
1343 {
1344   if (lang->la_magic != LANG_MAGIC)
1345     {
1346       fprintf_unfiltered (gdb_stderr, "Magic number of %s language struct wrong\n",
1347                           lang->la_name);
1348       abort ();
1349     }
1350
1351   if (!languages)
1352     {
1353       languages_allocsize = DEFAULT_ALLOCSIZE;
1354       languages = (const struct language_defn **) xmalloc
1355         (languages_allocsize * sizeof (*languages));
1356     }
1357   if (languages_size >= languages_allocsize)
1358     {
1359       languages_allocsize *= 2;
1360       languages = (const struct language_defn **) xrealloc ((char *) languages,
1361                                  languages_allocsize * sizeof (*languages));
1362     }
1363   languages[languages_size++] = lang;
1364 }
1365
1366 /* Define the language that is no language.  */
1367
1368 static int
1369 unk_lang_parser ()
1370 {
1371   return 1;
1372 }
1373
1374 static void
1375 unk_lang_error (msg)
1376      char *msg;
1377 {
1378   error ("Attempted to parse an expression with unknown language");
1379 }
1380
1381 static void
1382 unk_lang_emit_char (c, stream, quoter)
1383      register int c;
1384      struct ui_file *stream;
1385      int quoter;
1386 {
1387   error ("internal error - unimplemented function unk_lang_emit_char called.");
1388 }
1389
1390 static void
1391 unk_lang_printchar (c, stream)
1392      register int c;
1393      struct ui_file *stream;
1394 {
1395   error ("internal error - unimplemented function unk_lang_printchar called.");
1396 }
1397
1398 static void
1399 unk_lang_printstr (stream, string, length, width, force_ellipses)
1400      struct ui_file *stream;
1401      char *string;
1402      unsigned int length;
1403      int width;
1404      int force_ellipses;
1405 {
1406   error ("internal error - unimplemented function unk_lang_printstr called.");
1407 }
1408
1409 static struct type *
1410 unk_lang_create_fundamental_type (objfile, typeid)
1411      struct objfile *objfile;
1412      int typeid;
1413 {
1414   error ("internal error - unimplemented function unk_lang_create_fundamental_type called.");
1415 }
1416
1417 static void
1418 unk_lang_print_type (type, varstring, stream, show, level)
1419      struct type *type;
1420      char *varstring;
1421      struct ui_file *stream;
1422      int show;
1423      int level;
1424 {
1425   error ("internal error - unimplemented function unk_lang_print_type called.");
1426 }
1427
1428 static int
1429 unk_lang_val_print (type, valaddr, embedded_offset, address, stream, format, deref_ref,
1430                     recurse, pretty)
1431      struct type *type;
1432      char *valaddr;
1433      int embedded_offset;
1434      CORE_ADDR address;
1435      struct ui_file *stream;
1436      int format;
1437      int deref_ref;
1438      int recurse;
1439      enum val_prettyprint pretty;
1440 {
1441   error ("internal error - unimplemented function unk_lang_val_print called.");
1442 }
1443
1444 static int
1445 unk_lang_value_print (val, stream, format, pretty)
1446      value_ptr val;
1447      struct ui_file *stream;
1448      int format;
1449      enum val_prettyprint pretty;
1450 {
1451   error ("internal error - unimplemented function unk_lang_value_print called.");
1452 }
1453
1454 static struct type **CONST_PTR (unknown_builtin_types[]) =
1455 {
1456   0
1457 };
1458 static const struct op_print unk_op_print_tab[] =
1459 {
1460   {NULL, OP_NULL, PREC_NULL, 0}
1461 };
1462
1463 const struct language_defn unknown_language_defn =
1464 {
1465   "unknown",
1466   language_unknown,
1467   &unknown_builtin_types[0],
1468   range_check_off,
1469   type_check_off,
1470   unk_lang_parser,
1471   unk_lang_error,
1472   evaluate_subexp_standard,
1473   unk_lang_printchar,           /* Print character constant */
1474   unk_lang_printstr,
1475   unk_lang_emit_char,
1476   unk_lang_create_fundamental_type,
1477   unk_lang_print_type,          /* Print a type using appropriate syntax */
1478   unk_lang_val_print,           /* Print a value using appropriate syntax */
1479   unk_lang_value_print,         /* Print a top-level value */
1480   {"", "", "", ""},             /* Binary format info */
1481   {"0%lo", "0", "o", ""},       /* Octal format info */
1482   {"%ld", "", "d", ""},         /* Decimal format info */
1483   {"0x%lx", "0x", "x", ""},     /* Hex format info */
1484   unk_op_print_tab,             /* expression operators for printing */
1485   1,                            /* c-style arrays */
1486   0,                            /* String lower bound */
1487   &builtin_type_char,           /* Type of string elements */
1488   LANG_MAGIC
1489 };
1490
1491 /* These two structs define fake entries for the "local" and "auto" options. */
1492 const struct language_defn auto_language_defn =
1493 {
1494   "auto",
1495   language_auto,
1496   &unknown_builtin_types[0],
1497   range_check_off,
1498   type_check_off,
1499   unk_lang_parser,
1500   unk_lang_error,
1501   evaluate_subexp_standard,
1502   unk_lang_printchar,           /* Print character constant */
1503   unk_lang_printstr,
1504   unk_lang_emit_char,
1505   unk_lang_create_fundamental_type,
1506   unk_lang_print_type,          /* Print a type using appropriate syntax */
1507   unk_lang_val_print,           /* Print a value using appropriate syntax */
1508   unk_lang_value_print,         /* Print a top-level value */
1509   {"", "", "", ""},             /* Binary format info */
1510   {"0%lo", "0", "o", ""},       /* Octal format info */
1511   {"%ld", "", "d", ""},         /* Decimal format info */
1512   {"0x%lx", "0x", "x", ""},     /* Hex format info */
1513   unk_op_print_tab,             /* expression operators for printing */
1514   1,                            /* c-style arrays */
1515   0,                            /* String lower bound */
1516   &builtin_type_char,           /* Type of string elements */
1517   LANG_MAGIC
1518 };
1519
1520 const struct language_defn local_language_defn =
1521 {
1522   "local",
1523   language_auto,
1524   &unknown_builtin_types[0],
1525   range_check_off,
1526   type_check_off,
1527   unk_lang_parser,
1528   unk_lang_error,
1529   evaluate_subexp_standard,
1530   unk_lang_printchar,           /* Print character constant */
1531   unk_lang_printstr,
1532   unk_lang_emit_char,
1533   unk_lang_create_fundamental_type,
1534   unk_lang_print_type,          /* Print a type using appropriate syntax */
1535   unk_lang_val_print,           /* Print a value using appropriate syntax */
1536   unk_lang_value_print,         /* Print a top-level value */
1537   {"", "", "", ""},             /* Binary format info */
1538   {"0%lo", "0", "o", ""},       /* Octal format info */
1539   {"%ld", "", "d", ""},         /* Decimal format info */
1540   {"0x%lx", "0x", "x", ""},     /* Hex format info */
1541   unk_op_print_tab,             /* expression operators for printing */
1542   1,                            /* c-style arrays */
1543   0,                            /* String lower bound */
1544   &builtin_type_char,           /* Type of string elements */
1545   LANG_MAGIC
1546 };
1547 \f
1548 /* Initialize the language routines */
1549
1550 void
1551 _initialize_language ()
1552 {
1553   struct cmd_list_element *set, *show;
1554
1555   /* GDB commands for language specific stuff */
1556
1557   set = add_set_cmd ("language", class_support, var_string_noescape,
1558                      (char *) &language,
1559                      "Set the current source language.",
1560                      &setlist);
1561   show = add_show_from_set (set, &showlist);
1562   set->function.cfunc = set_language_command;
1563   show->function.cfunc = show_language_command;
1564
1565   add_prefix_cmd ("check", no_class, set_check,
1566                   "Set the status of the type/range checker",
1567                   &setchecklist, "set check ", 0, &setlist);
1568   add_alias_cmd ("c", "check", no_class, 1, &setlist);
1569   add_alias_cmd ("ch", "check", no_class, 1, &setlist);
1570
1571   add_prefix_cmd ("check", no_class, show_check,
1572                   "Show the status of the type/range checker",
1573                   &showchecklist, "show check ", 0, &showlist);
1574   add_alias_cmd ("c", "check", no_class, 1, &showlist);
1575   add_alias_cmd ("ch", "check", no_class, 1, &showlist);
1576
1577   set = add_set_cmd ("type", class_support, var_string_noescape,
1578                      (char *) &type,
1579                      "Set type checking.  (on/warn/off/auto)",
1580                      &setchecklist);
1581   show = add_show_from_set (set, &showchecklist);
1582   set->function.cfunc = set_type_command;
1583   show->function.cfunc = show_type_command;
1584
1585   set = add_set_cmd ("range", class_support, var_string_noescape,
1586                      (char *) &range,
1587                      "Set range checking.  (on/warn/off/auto)",
1588                      &setchecklist);
1589   show = add_show_from_set (set, &showchecklist);
1590   set->function.cfunc = set_range_command;
1591   show->function.cfunc = show_range_command;
1592
1593   add_language (&unknown_language_defn);
1594   add_language (&local_language_defn);
1595   add_language (&auto_language_defn);
1596
1597   language = savestring ("auto", strlen ("auto"));
1598   set_language_command (language, 0);
1599
1600   type = savestring ("auto", strlen ("auto"));
1601   set_type_command (NULL, 0);
1602
1603   range = savestring ("auto", strlen ("auto"));
1604   set_range_command (NULL, 0);
1605 }