2010-05-14 Michael Snyder <msnyder@vmware.com>
[deliverable/binutils-gdb.git] / gdb / language.c
index bdf2ed72b7d8611672ad171dfcf03f1a51380766..c20d7c0eccfd796a2726678d048ef84f2fb8a27a 100644 (file)
@@ -1,7 +1,8 @@
 /* Multiple source language support for GDB.
 
    Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-   2002, 2003, 2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
+   2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
+   Free Software Foundation, Inc.
 
    Contributed by the Department of Computer Science at the State University
    of New York at Buffalo.
 
 extern void _initialize_language (void);
 
-static void set_case_str (void);
-
-static void set_range_str (void);
-
-static void set_type_str (void);
-
-static void set_lang_str (void);
-
 static void unk_lang_error (char *);
 
 static int unk_lang_parser (void);
@@ -65,9 +58,11 @@ static void set_check (char *, int);
 
 static void set_type_range_case (void);
 
-static void unk_lang_emit_char (int c, struct ui_file *stream, int quoter);
+static void unk_lang_emit_char (int c, struct type *type,
+                               struct ui_file *stream, int quoter);
 
-static void unk_lang_printchar (int c, struct ui_file *stream);
+static void unk_lang_printchar (int c, struct type *type,
+                               struct ui_file *stream);
 
 static void unk_lang_print_type (struct type *, char *, struct ui_file *,
                                 int, int);
@@ -109,16 +104,12 @@ static unsigned languages_size;
 static unsigned languages_allocsize;
 #define        DEFAULT_ALLOCSIZE 4
 
-/* The "set language/type/range" commands all put stuff in these
-   buffers.  This is to make them work as set/show commands.  The
-   user's string is copied here, then the set_* commands look at
-   them and update them to something that looks nice when it is
-   printed out. */
-
-static char *language;
-static char *type;
-static char *range;
-static char *case_sensitive;
+/* The current values of the "set language/type/range" enum
+   commands.  */
+static const char *language;
+static const char *type;
+static const char *range;
+static const char *case_sensitive;
 
 /* Warning issued when current_language and the language of the current
    frame do not match. */
@@ -136,7 +127,15 @@ show_language_command (struct ui_file *file, int from_tty,
 {
   enum language flang;         /* The language of the current frame */
 
-  deprecated_show_value_hack (file, from_tty, c, value);
+  if (language_mode == language_mode_auto)
+    fprintf_filtered (gdb_stdout,
+                     _("The current source language is "
+                       "\"auto; currently %s\".\n"),
+                     current_language->la_name);
+  else
+    fprintf_filtered (gdb_stdout, _("The current source language is \"%s\".\n"),
+                     current_language->la_name);
+
   flang = get_frame_language ();
   if (flang != language_unknown &&
       language_mode == language_mode_manual &&
@@ -150,34 +149,6 @@ set_language_command (char *ignore, int from_tty, struct cmd_list_element *c)
 {
   int i;
   enum language flang;
-  char *err_lang;
-
-  if (!language || !language[0])
-    {
-      printf_unfiltered (_("\
-The currently understood settings are:\n\n\
-local or auto    Automatic setting based on source file\n"));
-
-      for (i = 0; i < languages_size; ++i)
-       {
-         /* Already dealt with these above.  */
-         if (languages[i]->la_language == language_unknown
-             || languages[i]->la_language == language_auto)
-           continue;
-
-         /* FIXME: i18n: for now assume that the human-readable name
-            is just a capitalization of the internal name.  */
-         printf_unfiltered ("%-16s Use the %c%s language\n",
-                            languages[i]->la_name,
-         /* Capitalize first letter of language
-            name.  */
-                            toupper (languages[i]->la_name[0]),
-                            languages[i]->la_name + 1);
-       }
-      /* Restore the silly string. */
-      set_language (current_language->la_language);
-      return;
-    }
 
   /* Search the list of languages for a match.  */
   for (i = 0; i < languages_size; i++)
@@ -204,19 +175,15 @@ local or auto    Automatic setting based on source file\n"));
              language_mode = language_mode_manual;
              current_language = languages[i];
              set_type_range_case ();
-             set_lang_str ();
              expected_language = current_language;
              return;
            }
        }
     }
 
-  /* Reset the language (esp. the global string "language") to the 
-     correct values. */
-  err_lang = savestring (language, strlen (language));
-  make_cleanup (xfree, err_lang);      /* Free it after error */
-  set_language (current_language->la_language);
-  error (_("Unknown language `%s'."), err_lang);
+  internal_error (__FILE__, __LINE__,
+                 "Couldn't find language `%s' in known languages list.",
+                 language);
 }
 
 /* Show command.  Display a warning if the type setting does
@@ -225,10 +192,37 @@ static void
 show_type_command (struct ui_file *file, int from_tty,
                   struct cmd_list_element *c, const char *value)
 {
-  deprecated_show_value_hack (file, from_tty, c, value);
-  if (type_check != current_language->la_type_check)
-    printf_unfiltered (
-                       "Warning: the current type check setting does not match the language.\n");
+  if (type_mode == type_mode_auto)
+    {
+      char *tmp = NULL;
+
+      switch (type_check)
+       {
+       case type_check_on:
+         tmp = "on";
+         break;
+       case type_check_off:
+         tmp = "off";
+         break;
+       case type_check_warn:
+         tmp = "warn";
+         break;
+       default:
+         internal_error (__FILE__, __LINE__,
+                         "Unrecognized type check setting.");
+       }
+
+      fprintf_filtered (gdb_stdout,
+                       _("Type checking is \"auto; currently %s\".\n"),
+                       tmp);
+    }
+  else
+    fprintf_filtered (gdb_stdout, _("Type checking is \"%s\".\n"),
+                     value);
+
+   if (type_check != current_language->la_type_check)
+    warning (_("the current type check setting"
+              " does not match the language.\n"));
 }
 
 /* Set command.  Change the setting for type checking. */
@@ -254,16 +248,15 @@ set_type_command (char *ignore, int from_tty, struct cmd_list_element *c)
     {
       type_mode = type_mode_auto;
       set_type_range_case ();
-      /* Avoid hitting the set_type_str call below.  We
-         did it in set_type_range_case. */
       return;
     }
   else
-    {
-      warning (_("Unrecognized type check setting: \"%s\""), type);
-    }
-  set_type_str ();
-  show_type_command (NULL, from_tty, NULL, NULL);
+    internal_error (__FILE__, __LINE__,
+                   _("Unrecognized type check setting: \"%s\""), type);
+
+  if (type_check != current_language->la_type_check)
+    warning (_("the current type check setting"
+              " does not match the language.\n"));
 }
 
 /* Show command.  Display a warning if the range setting does
@@ -272,10 +265,37 @@ static void
 show_range_command (struct ui_file *file, int from_tty,
                    struct cmd_list_element *c, const char *value)
 {
-  deprecated_show_value_hack (file, from_tty, c, value);
+  if (range_mode == range_mode_auto)
+    {
+      char *tmp;
+
+      switch (range_check)
+       {
+       case range_check_on:
+         tmp = "on";
+         break;
+       case range_check_off:
+         tmp = "off";
+         break;
+       case range_check_warn:
+         tmp = "warn";
+         break;
+       default:
+         internal_error (__FILE__, __LINE__,
+                         "Unrecognized range check setting.");
+       }
+
+      fprintf_filtered (gdb_stdout,
+                       _("Range checking is \"auto; currently %s\".\n"),
+                       tmp);
+    }
+  else
+    fprintf_filtered (gdb_stdout, _("Range checking is \"%s\".\n"),
+                     value);
+
   if (range_check != current_language->la_range_check)
-    printf_unfiltered (
-                       "Warning: the current range check setting does not match the language.\n");
+    warning (_("the current range check setting "
+              "does not match the language.\n"));
 }
 
 /* Set command.  Change the setting for range checking. */
@@ -301,16 +321,16 @@ set_range_command (char *ignore, int from_tty, struct cmd_list_element *c)
     {
       range_mode = range_mode_auto;
       set_type_range_case ();
-      /* Avoid hitting the set_range_str call below.  We
-         did it in set_type_range_case. */
       return;
     }
   else
     {
-      warning (_("Unrecognized range check setting: \"%s\""), range);
+      internal_error (__FILE__, __LINE__,
+                     _("Unrecognized range check setting: \"%s\""), range);
     }
-  set_range_str ();
-  show_range_command (NULL, from_tty, NULL, NULL);
+  if (range_check != current_language->la_range_check)
+    warning (_("the current range check setting "
+              "does not match the language.\n"));
 }
 
 /* Show command.  Display a warning if the case sensitivity setting does
@@ -319,10 +339,35 @@ static void
 show_case_command (struct ui_file *file, int from_tty,
                   struct cmd_list_element *c, const char *value)
 {
-  deprecated_show_value_hack (file, from_tty, c, value);
+  if (case_mode == case_mode_auto)
+    {
+      char *tmp = NULL;
+
+      switch (case_sensitivity)
+       {
+       case case_sensitive_on:
+         tmp = "on";
+         break;
+       case case_sensitive_off:
+         tmp = "off";
+         break;
+       default:
+         internal_error (__FILE__, __LINE__,
+                         "Unrecognized case-sensitive setting.");
+       }
+
+      fprintf_filtered (gdb_stdout,
+                       _("Case sensitivity in "
+                         "name search is \"auto; currently %s\".\n"),
+                       tmp);
+    }
+  else
+    fprintf_filtered (gdb_stdout, _("Case sensitivity in name search is \"%s\".\n"),
+                     value);
+
   if (case_sensitivity != current_language->la_case_sensitivity)
-    printf_unfiltered(
-"Warning: the current case sensitivity setting does not match the language.\n");
+    warning (_("the current case sensitivity setting does not match "
+              "the language.\n"));
 }
 
 /* Set command.  Change the setting for case sensitivity.  */
@@ -344,17 +389,18 @@ set_case_command (char *ignore, int from_tty, struct cmd_list_element *c)
      {
        case_mode = case_mode_auto;
        set_type_range_case ();
-       /* Avoid hitting the set_case_str call below.  We did it in
-         set_type_range_case.  */
        return;
      }
    else
      {
-       warning (_("Unrecognized case-sensitive setting: \"%s\""),
-               case_sensitive);
+       internal_error (__FILE__, __LINE__,
+                      "Unrecognized case-sensitive setting: \"%s\"",
+                      case_sensitive);
      }
-   set_case_str();
-   show_case_command (NULL, from_tty, NULL, NULL);
+
+   if (case_sensitivity != current_language->la_case_sensitivity)
+     warning (_("the current case sensitivity setting does not match "
+               "the language.\n"));
 }
 
 /* Set the status of range and type checking and case sensitivity based on
@@ -364,7 +410,6 @@ set_case_command (char *ignore, int from_tty, struct cmd_list_element *c)
 static void
 set_type_range_case (void)
 {
-
   if (range_mode == range_mode_auto)
     range_check = current_language->la_range_check;
 
@@ -373,10 +418,6 @@ set_type_range_case (void)
 
   if (case_mode == case_mode_auto)
     case_sensitivity = current_language->la_case_sensitivity;
-
-  set_type_str ();
-  set_range_str ();
-  set_case_str ();
 }
 
 /* Set current language to (enum language) LANG.  Returns previous language. */
@@ -395,7 +436,6 @@ set_language (enum language lang)
        {
          current_language = languages[i];
          set_type_range_case ();
-         set_lang_str ();
          break;
        }
     }
@@ -403,100 +443,6 @@ set_language (enum language lang)
   return prev_language;
 }
 \f
-/* This page contains functions that update the global vars
-   language, type and range. */
-static void
-set_lang_str (void)
-{
-  char *prefix = "";
-
-  if (language)
-    xfree (language);
-  if (language_mode == language_mode_auto)
-    prefix = "auto; currently ";
-
-  language = concat (prefix, current_language->la_name, (char *)NULL);
-}
-
-static void
-set_type_str (void)
-{
-  char *tmp = NULL, *prefix = "";
-
-  if (type)
-    xfree (type);
-  if (type_mode == type_mode_auto)
-    prefix = "auto; currently ";
-
-  switch (type_check)
-    {
-    case type_check_on:
-      tmp = "on";
-      break;
-    case type_check_off:
-      tmp = "off";
-      break;
-    case type_check_warn:
-      tmp = "warn";
-      break;
-    default:
-      error (_("Unrecognized type check setting."));
-    }
-
-  type = concat (prefix, tmp, (char *)NULL);
-}
-
-static void
-set_range_str (void)
-{
-  char *tmp, *pref = "";
-
-  if (range_mode == range_mode_auto)
-    pref = "auto; currently ";
-
-  switch (range_check)
-    {
-    case range_check_on:
-      tmp = "on";
-      break;
-    case range_check_off:
-      tmp = "off";
-      break;
-    case range_check_warn:
-      tmp = "warn";
-      break;
-    default:
-      error (_("Unrecognized range check setting."));
-    }
-
-  if (range)
-    xfree (range);
-  range = concat (pref, tmp, (char *)NULL);
-}
-
-static void
-set_case_str (void)
-{
-   char *tmp = NULL, *prefix = "";
-
-   if (case_mode==case_mode_auto)
-      prefix = "auto; currently ";
-
-   switch (case_sensitivity)
-   {
-   case case_sensitive_on:
-     tmp = "on";
-     break;
-   case case_sensitive_off:
-     tmp = "off";
-     break;
-   default:
-     error (_("Unrecognized case-sensitive setting."));
-   }
-
-   xfree (case_sensitive);
-   case_sensitive = concat (prefix, tmp, (char *)NULL);
-}
 
 /* Print out the current language settings: language, range and
    type checking.  If QUIETLY, print only what has changed.  */
@@ -540,6 +486,7 @@ binop_result_type (struct value *v1, struct value *v2)
     {
     case language_c:
     case language_cplus:
+    case language_d:
     case language_objc:
       if (TYPE_CODE (t1) == TYPE_CODE_FLT)
        return TYPE_CODE (t2) == TYPE_CODE_FLT && l2 > l1 ?
@@ -651,6 +598,7 @@ integral_type (struct type *type)
     {
     case language_c:
     case language_cplus:
+    case language_d:
     case language_objc:
       return (TYPE_CODE (type) != TYPE_CODE_INT) &&
        (TYPE_CODE (type) != TYPE_CODE_ENUM) ? 0 : 1;
@@ -691,6 +639,7 @@ character_type (struct type *type)
 
     case language_c:
     case language_cplus:
+    case language_d:
     case language_objc:
       return (TYPE_CODE (type) == TYPE_CODE_INT) &&
        TYPE_LENGTH (type) == sizeof (char)
@@ -713,6 +662,7 @@ string_type (struct type *type)
 
     case language_c:
     case language_cplus:
+    case language_d:
     case language_objc:
       /* C does not have distinct string type. */
       return (0);
@@ -732,6 +682,7 @@ boolean_type (struct type *type)
     {
     case language_c:
     case language_cplus:
+    case language_d:
     case language_objc:
       /* Might be more cleanly handled by having a
          TYPE_CODE_INT_NOT_BOOL for (the deleted) CHILL and such
@@ -751,6 +702,7 @@ float_type (struct type *type)
   CHECK_TYPEDEF (type);
   return TYPE_CODE (type) == TYPE_CODE_FLT;
 }
+#endif
 
 /* Returns non-zero if the value is a pointer type */
 int
@@ -760,6 +712,7 @@ pointer_type (struct type *type)
     TYPE_CODE (type) == TYPE_CODE_REF;
 }
 
+#if 0
 /* Returns non-zero if the value is a structured type */
 int
 structured_type (struct type *type)
@@ -769,6 +722,7 @@ structured_type (struct type *type)
     {
     case language_c:
     case language_cplus:
+    case language_d:
     case language_objc:
       return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
        (TYPE_CODE (type) == TYPE_CODE_UNION) ||
@@ -819,8 +773,8 @@ void
 type_error (const char *string,...)
 {
   va_list args;
-  va_start (args, string);
 
+  va_start (args, string);
   switch (type_check)
     {
     case type_check_warn:
@@ -845,8 +799,8 @@ void
 range_error (const char *string,...)
 {
   va_list args;
-  va_start (args, string);
 
+  va_start (args, string);
   switch (range_check)
     {
     case range_check_warn:
@@ -936,6 +890,14 @@ show_check (char *ignore, int from_tty)
 void
 add_language (const struct language_defn *lang)
 {
+  /* For the "set language" command.  */
+  static char **language_names = NULL;
+  /* For the "help set language" command.  */
+  char *language_set_doc = NULL;
+
+  int i;
+  struct ui_file *tmp_stream;
+
   if (lang->la_magic != LANG_MAGIC)
     {
       fprintf_unfiltered (gdb_stderr, "Magic number of %s language struct wrong\n",
@@ -956,6 +918,53 @@ add_language (const struct language_defn *lang)
                                 languages_allocsize * sizeof (*languages));
     }
   languages[languages_size++] = lang;
+
+  /* Build the language names array, to be used as enumeration in the
+     set language" enum command.  */
+  language_names = xrealloc (language_names,
+                            (languages_size + 1) * sizeof (const char *));
+  for (i = 0; i < languages_size; ++i)
+    language_names[i] = languages[i]->la_name;
+  language_names[i] = NULL;
+
+  /* Build the "help set language" docs.  */
+  tmp_stream = mem_fileopen ();
+
+  fprintf_unfiltered (tmp_stream, _("\
+Set the current source language.\n\
+The currently understood settings are:\n\n\
+local or auto    Automatic setting based on source file\n"));
+
+  for (i = 0; i < languages_size; ++i)
+    {
+      /* Already dealt with these above.  */
+      if (languages[i]->la_language == language_unknown
+         || languages[i]->la_language == language_auto)
+       continue;
+
+      /* FIXME: i18n: for now assume that the human-readable name
+        is just a capitalization of the internal name.  */
+      fprintf_unfiltered (tmp_stream, "%-16s Use the %c%s language\n",
+                         languages[i]->la_name,
+                         /* Capitalize first letter of language
+                            name.  */
+                         toupper (languages[i]->la_name[0]),
+                         languages[i]->la_name + 1);
+    }
+
+  language_set_doc = ui_file_xstrdup (tmp_stream, NULL);
+  ui_file_delete (tmp_stream);
+
+  add_setshow_enum_cmd ("language", class_support,
+                       (const char **) language_names,
+                       &language,
+                       language_set_doc, _("\
+Show the current source language."), NULL,
+                       set_language_command,
+                       show_language_command,
+                       &setlist, &showlist);
+
+  xfree (language_set_doc);
 }
 
 /* Iterate through all registered languages looking for and calling
@@ -972,6 +981,7 @@ skip_language_trampoline (struct frame_info *frame, CORE_ADDR pc)
       if (languages[i]->skip_trampoline)
        {
          CORE_ADDR real_pc = (languages[i]->skip_trampoline) (frame, pc);
+
          if (real_pc)
            return real_pc;
        }
@@ -1043,6 +1053,13 @@ default_print_array_index (struct value *index_value, struct ui_file *stream,
   fprintf_filtered (stream, "] = ");
 }
 
+void
+default_get_string (struct value *value, gdb_byte **buffer, int *length,
+                   struct type **char_type, const char **charset)
+{
+  error (_("Getting a string is unsupported in this language."));
+}
+
 /* Define the language that is no language.  */
 
 static int
@@ -1058,20 +1075,22 @@ unk_lang_error (char *msg)
 }
 
 static void
-unk_lang_emit_char (int c, struct ui_file *stream, int quoter)
+unk_lang_emit_char (int c, struct type *type, struct ui_file *stream,
+                   int quoter)
 {
   error (_("internal error - unimplemented function unk_lang_emit_char called."));
 }
 
 static void
-unk_lang_printchar (int c, struct ui_file *stream)
+unk_lang_printchar (int c, struct type *type, struct ui_file *stream)
 {
   error (_("internal error - unimplemented function unk_lang_printchar called."));
 }
 
 static void
-unk_lang_printstr (struct ui_file *stream, const gdb_byte *string,
-                  unsigned int length, int width, int force_ellipses,
+unk_lang_printstr (struct ui_file *stream, struct type *type,
+                  const gdb_byte *string, unsigned int length,
+                  const char *encoding, int force_ellipses,
                   const struct value_print_options *options)
 {
   error (_("internal error - unimplemented function unk_lang_printstr called."));
@@ -1165,6 +1184,7 @@ const struct language_defn unknown_language_defn =
   unknown_language_arch_info,  /* la_language_arch_info.  */
   default_print_array_index,
   default_pass_by_reference,
+  default_get_string,
   LANG_MAGIC
 };
 
@@ -1203,6 +1223,7 @@ const struct language_defn auto_language_defn =
   unknown_language_arch_info,  /* la_language_arch_info.  */
   default_print_array_index,
   default_pass_by_reference,
+  default_get_string,
   LANG_MAGIC
 };
 
@@ -1240,6 +1261,7 @@ const struct language_defn local_language_defn =
   unknown_language_arch_info,  /* la_language_arch_info.  */
   default_print_array_index,
   default_pass_by_reference,
+  default_get_string,
   LANG_MAGIC
 };
 \f
@@ -1277,6 +1299,7 @@ language_string_char_type (const struct language_defn *la,
 {
   struct language_gdbarch *ld = gdbarch_data (gdbarch,
                                              language_gdbarch_data);
+
   return ld->arch_info[la->la_language].string_char_type;
 }
 
@@ -1290,11 +1313,13 @@ language_bool_type (const struct language_defn *la,
   if (ld->arch_info[la->la_language].bool_type_symbol)
     {
       struct symbol *sym;
+
       sym = lookup_symbol (ld->arch_info[la->la_language].bool_type_symbol,
                           NULL, VAR_DOMAIN, NULL);
       if (sym)
        {
          struct type *type = SYMBOL_TYPE (sym);
+
          if (type && TYPE_CODE (type) == TYPE_CODE_BOOL)
            return type;
        }
@@ -1311,6 +1336,7 @@ language_lookup_primitive_type_by_name (const struct language_defn *la,
   struct language_gdbarch *ld = gdbarch_data (gdbarch,
                                              language_gdbarch_data);
   struct type *const *p;
+
   for (p = ld->arch_info[la->la_language].primitive_type_vector;
        (*p) != NULL;
        p++)
@@ -1326,22 +1352,17 @@ language_lookup_primitive_type_by_name (const struct language_defn *la,
 void
 _initialize_language (void)
 {
-  struct cmd_list_element *set, *show;
+  static const char *type_or_range_names[]
+    = { "on", "off", "warn", "auto", NULL };
+
+  static const char *case_sensitive_names[]
+    = { "on", "off", "auto", NULL };
 
   language_gdbarch_data
     = gdbarch_data_register_post_init (language_gdbarch_post_init);
 
   /* GDB commands for language specific stuff */
 
-  /* FIXME: cagney/2005-02-20: This should be implemented using an
-     enum.  */
-  add_setshow_string_noescape_cmd ("language", class_support, &language, _("\
-Set the current source language."), _("\
-Show the current source language."), NULL,
-                                  set_language_command,
-                                  show_language_command,
-                                  &setlist, &showlist);
-
   add_prefix_cmd ("check", no_class, set_check,
                  _("Set the status of the type/range checker."),
                  &setchecklist, "set check ", 0, &setlist);
@@ -1354,43 +1375,38 @@ Show the current source language."), NULL,
   add_alias_cmd ("c", "check", no_class, 1, &showlist);
   add_alias_cmd ("ch", "check", no_class, 1, &showlist);
 
-  /* FIXME: cagney/2005-02-20: This should be implemented using an
-     enum.  */
-  add_setshow_string_noescape_cmd ("type", class_support, &type, _("\
+  add_setshow_enum_cmd ("type", class_support, type_or_range_names, &type, _("\
 Set type checking.  (on/warn/off/auto)"), _("\
 Show type checking.  (on/warn/off/auto)"), NULL,
-                                  set_type_command,
-                                  show_type_command,
-                                  &setchecklist, &showchecklist);
+                       set_type_command,
+                       show_type_command,
+                       &setchecklist, &showchecklist);
 
-  /* FIXME: cagney/2005-02-20: This should be implemented using an
-     enum.  */
-  add_setshow_string_noescape_cmd ("range", class_support, &range, _("\
+  add_setshow_enum_cmd ("range", class_support, type_or_range_names,
+                       &range, _("\
 Set range checking.  (on/warn/off/auto)"), _("\
 Show range checking.  (on/warn/off/auto)"), NULL,
-                                  set_range_command,
-                                  show_range_command,
-                                  &setchecklist, &showchecklist);
-
-  /* FIXME: cagney/2005-02-20: This should be implemented using an
-     enum.  */
-  add_setshow_string_noescape_cmd ("case-sensitive", class_support,
-                                  &case_sensitive, _("\
+                       set_range_command,
+                       show_range_command,
+                       &setchecklist, &showchecklist);
+
+  add_setshow_enum_cmd ("case-sensitive", class_support, case_sensitive_names,
+                       &case_sensitive, _("\
 Set case sensitivity in name search.  (on/off/auto)"), _("\
 Show case sensitivity in name search.  (on/off/auto)"), _("\
 For Fortran the default is off; for other languages the default is on."),
-                                  set_case_command,
-                                  show_case_command,
-                                  &setlist, &showlist);
+                       set_case_command,
+                       show_case_command,
+                       &setlist, &showlist);
 
-  add_language (&unknown_language_defn);
-  add_language (&local_language_defn);
   add_language (&auto_language_defn);
+  add_language (&local_language_defn);
+  add_language (&unknown_language_defn);
 
-  language = savestring ("auto", strlen ("auto"));
-  type = savestring ("auto", strlen ("auto"));
-  range = savestring ("auto", strlen ("auto"));
-  case_sensitive = savestring ("auto",strlen ("auto"));
+  language = xstrdup ("auto");
+  type = xstrdup ("auto");
+  range = xstrdup ("auto");
+  case_sensitive = xstrdup ("auto");
 
   /* Have the above take effect */
   set_language (language_auto);
This page took 0.032355 seconds and 4 git commands to generate.