* pe-dll.c (fill_edata): don't strip underscores
[deliverable/binutils-gdb.git] / gdb / language.c
index b9c04aeef9d779c6dbe807700eec838cd6734c09..1c10026f813a7eb97e9fe381f8d7dc3d7b3e70c1 100644 (file)
@@ -28,12 +28,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
    whenever the working language changes.  That would be a lot faster.  */
 
 #include "defs.h"
+#include <ctype.h>
 #include "gdb_string.h"
-#ifdef ANSI_PROTOTYPES
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
 
 #include "symtab.h"
 #include "gdbtypes.h"
@@ -87,6 +83,28 @@ set_check PARAMS ((char *, int));
 static void
 set_type_range PARAMS ((void));
 
+static void
+unk_lang_emit_char PARAMS ((int c, GDB_FILE *stream, int quoter));
+
+static void
+unk_lang_printchar PARAMS ((int c, GDB_FILE *stream));
+
+static void
+unk_lang_printstr PARAMS ((GDB_FILE *stream, char *string, unsigned int length, int width, int force_ellipses));
+
+static struct type *
+unk_lang_create_fundamental_type PARAMS ((struct objfile *, int));
+
+static void
+unk_lang_print_type PARAMS ((struct type *, char *, GDB_FILE *, int, int));
+
+static int
+unk_lang_val_print PARAMS ((struct type *, char *, CORE_ADDR, GDB_FILE *,
+                           int, int, int, enum val_prettyprint));
+
+static int
+unk_lang_value_print PARAMS ((value_ptr, GDB_FILE *, int, enum val_prettyprint));
+
 /* Forward declaration */
 extern const struct language_defn unknown_language_defn;
 extern char *warning_pre_print;
@@ -163,19 +181,31 @@ set_language_command (ignore, from_tty)
   enum language flang;
   char *err_lang;
 
-  /* FIXME -- do this from the list, with HELP.  */
-  if (!language || !language[0]) {
-    printf_unfiltered("The currently understood settings are:\n\n");
-    printf_unfiltered ("local or auto    Automatic setting based on source file\n");
-    printf_unfiltered ("c                Use the C language\n");
-    printf_unfiltered ("c++              Use the C++ language\n");
-    printf_unfiltered ("chill            Use the Chill language\n");
-    printf_unfiltered ("fortran          Use the Fortran language\n");
-    printf_unfiltered ("modula-2         Use the Modula-2 language\n");
-    /* Restore the silly string. */
-    set_language(current_language->la_language);
-    return;
-  }
+  if (!language || !language[0])
+    {
+      printf_unfiltered("The currently understood settings are:\n\n");
+      printf_unfiltered ("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 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++) {
@@ -318,13 +348,16 @@ set_type_range()
   set_range_str();
 }
 
-/* Set current language to (enum language) LANG.  */
+/* Set current language to (enum language) LANG.  Returns previous language. */
 
-void
+enum language
 set_language(lang)
    enum language lang;
 {
   int i;
+  enum language prev_language;
+
+  prev_language = current_language->la_language;
 
   for (i = 0; i < languages_size; i++) {
     if (languages[i]->la_language == lang) {
@@ -334,6 +367,8 @@ set_language(lang)
       break;
     }
   }
+
+  return prev_language;
 }
 \f
 /* This page contains functions that update the global vars
@@ -786,7 +821,7 @@ lang_bool_type ()
       sym = lookup_symbol ("logical", NULL, VAR_NAMESPACE, NULL, NULL);
       if (sym)
        {
-         struct type *type = SYMBOL_TYPE (sym);
+         type = SYMBOL_TYPE (sym);
          if (type && TYPE_CODE (type) == TYPE_CODE_BOOL)
            return type;
        }
@@ -795,7 +830,7 @@ lang_bool_type ()
       sym = lookup_symbol ("bool", NULL, VAR_NAMESPACE, NULL, NULL);
       if (sym)
        {
-         struct type *type = SYMBOL_TYPE (sym);
+         type = SYMBOL_TYPE (sym);
          if (type && TYPE_CODE (type) == TYPE_CODE_BOOL)
            return type;
        }
@@ -1180,6 +1215,15 @@ unk_lang_error (msg)
   error ("Attempted to parse an expression with unknown language");
 }
 
+static void
+unk_lang_emit_char (c, stream, quoter)
+     register int c;
+     GDB_FILE *stream;
+     int quoter;
+{
+  error ("internal error - unimplemented function unk_lang_emit_char called.");
+}
+
 static void
 unk_lang_printchar (c, stream)
      register int c;
@@ -1189,10 +1233,11 @@ unk_lang_printchar (c, stream)
 }
 
 static void
-unk_lang_printstr (stream, string, length, force_ellipses)
+unk_lang_printstr (stream, string, length, width, force_ellipses)
      GDB_FILE *stream;
      char *string;
      unsigned int length;
+     int width;
      int force_ellipses;
 {
   error ("internal error - unimplemented function unk_lang_printstr called.");
@@ -1206,7 +1251,7 @@ unk_lang_create_fundamental_type (objfile, typeid)
   error ("internal error - unimplemented function unk_lang_create_fundamental_type called.");
 }
 
-void
+static void
 unk_lang_print_type (type, varstring, stream, show, level)
      struct type *type;
      char *varstring;
@@ -1217,7 +1262,7 @@ unk_lang_print_type (type, varstring, stream, show, level)
   error ("internal error - unimplemented function unk_lang_print_type called.");
 }
 
-int
+static int
 unk_lang_val_print (type, valaddr, address, stream, format, deref_ref,
                    recurse, pretty)
      struct type *type;
@@ -1232,7 +1277,7 @@ unk_lang_val_print (type, valaddr, address, stream, format, deref_ref,
   error ("internal error - unimplemented function unk_lang_val_print called.");
 }
 
-int
+static int
 unk_lang_value_print (val, stream, format, pretty)
      value_ptr val;
      GDB_FILE *stream;
@@ -1242,7 +1287,7 @@ unk_lang_value_print (val, stream, format, pretty)
   error ("internal error - unimplemented function unk_lang_value_print called.");
 }
 
-static struct type ** const (unknown_builtin_types[]) = { 0 };
+static struct type ** CONST_PTR (unknown_builtin_types[]) = { 0 };
 static const struct op_print unk_op_print_tab[] = {
     {NULL, OP_NULL, PREC_NULL, 0}
 };
@@ -1258,6 +1303,7 @@ const struct language_defn unknown_language_defn = {
   evaluate_subexp_standard,
   unk_lang_printchar,          /* Print character constant */
   unk_lang_printstr,
+  unk_lang_emit_char,
   unk_lang_create_fundamental_type,
   unk_lang_print_type,         /* Print a type using appropriate syntax */
   unk_lang_val_print,          /* Print a value using appropriate syntax */
@@ -1285,6 +1331,7 @@ const struct language_defn auto_language_defn = {
   evaluate_subexp_standard,
   unk_lang_printchar,          /* Print character constant */
   unk_lang_printstr,
+  unk_lang_emit_char,
   unk_lang_create_fundamental_type,
   unk_lang_print_type,         /* Print a type using appropriate syntax */
   unk_lang_val_print,          /* Print a value using appropriate syntax */
@@ -1311,6 +1358,7 @@ const struct language_defn local_language_defn = {
   evaluate_subexp_standard,
   unk_lang_printchar,          /* Print character constant */
   unk_lang_printstr,
+  unk_lang_emit_char,
   unk_lang_create_fundamental_type,
   unk_lang_print_type,         /* Print a type using appropriate syntax */
   unk_lang_val_print,          /* Print a value using appropriate syntax */
This page took 0.026712 seconds and 4 git commands to generate.