2003-05-19 David Carlton <carlton@bactrian.org>
[deliverable/binutils-gdb.git] / gdb / language.c
index a183aa55a9c773adbd51fd38fe01252b92bc685d..eb203dc587ce4260d9fccb02345e31f8d99926ec 100644 (file)
@@ -1,6 +1,8 @@
 /* Multiple source language support for GDB.
 /* Multiple source language support for GDB.
-   Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
-   Free Software Foundation, Inc.
+
+   Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000,
+   2001, 2002, 2003 Free Software Foundation, Inc.
+
    Contributed by the Department of Computer Science at the State University
    of New York at Buffalo.
 
    Contributed by the Department of Computer Science at the State University
    of New York at Buffalo.
 
@@ -42,6 +44,7 @@
 #include "target.h"
 #include "parser-defs.h"
 #include "jv-lang.h"
 #include "target.h"
 #include "parser-defs.h"
 #include "jv-lang.h"
+#include "demangle.h"
 
 extern void _initialize_language (void);
 
 
 extern void _initialize_language (void);
 
@@ -98,9 +101,10 @@ static int unk_lang_val_print (struct type *, char *, int, CORE_ADDR,
 
 static int unk_lang_value_print (struct value *, struct ui_file *, int, enum val_prettyprint);
 
 
 static int unk_lang_value_print (struct value *, struct ui_file *, int, enum val_prettyprint);
 
+static CORE_ADDR unk_lang_trampoline (CORE_ADDR pc);
+
 /* Forward declaration */
 extern const struct language_defn unknown_language_defn;
 /* Forward declaration */
 extern const struct language_defn unknown_language_defn;
-extern char *warning_pre_print;
 
 /* The current (default at startup) state of type and range checking.
    (If the modes are set to "auto", though, these are changed based
 
 /* The current (default at startup) state of type and range checking.
    (If the modes are set to "auto", though, these are changed based
@@ -485,7 +489,7 @@ set_range_str (void)
 }
 
 static void
 }
 
 static void
-set_case_str()
+set_case_str (void)
 {
    char *tmp = NULL, *prefix = "";
 
 {
    char *tmp = NULL, *prefix = "";
 
@@ -550,6 +554,7 @@ binop_result_type (struct value *v1, struct value *v2)
     {
     case language_c:
     case language_cplus:
     {
     case language_c:
     case language_cplus:
+    case language_objc:
       if (TYPE_CODE (t1) == TYPE_CODE_FLT)
        return TYPE_CODE (t2) == TYPE_CODE_FLT && l2 > l1 ?
          VALUE_TYPE (v2) : VALUE_TYPE (v1);
       if (TYPE_CODE (t1) == TYPE_CODE_FLT)
        return TYPE_CODE (t2) == TYPE_CODE_FLT && l2 > l1 ?
          VALUE_TYPE (v2) : VALUE_TYPE (v1);
@@ -568,8 +573,6 @@ binop_result_type (struct value *v1, struct value *v2)
          not needed. */
       return l1 > l2 ? VALUE_TYPE (v1) : VALUE_TYPE (v2);
       break;
          not needed. */
       return l1 > l2 ? VALUE_TYPE (v1) : VALUE_TYPE (v2);
       break;
-    case language_chill:
-      error ("Missing Chill support in function binop_result_check."); /*FIXME */
     }
   internal_error (__FILE__, __LINE__, "failed internal consistency check");
   return (struct type *) 0;    /* For lint */
     }
   internal_error (__FILE__, __LINE__, "failed internal consistency check");
   return (struct type *) 0;    /* For lint */
@@ -596,57 +599,12 @@ local_hex_format_custom (char *pre)
   return form;
 }
 
   return form;
 }
 
-#if 0
-/* FIXME: cagney/2000-03-04: This function does not appear to be used.
-   It can be deleted once 5.0 has been released. */
-/* FIXME: cagney/2000-03-04: This code assumes that the compiler
-   supports ``long long''. */
-/* Converts a number to hexadecimal (without leading "0x") and stores it in a
-   static string.  Returns a pointer to this string. */
-
-char *
-longest_raw_hex_string (LONGEST num)
-{
-  static char res_longest_raw_hex_string[50];
-  long long ll = num;          /* MERGEBUG ?? see below */
-  res_longest_raw_hex_string[0] = 0;
-  /* MERGEBUG ?? As a quick fix I am replacing this with sprintf 
-     strcat_address_numeric (num, 0, res_longest_raw_hex_string, 50); 
-   */
-
-  sprintf (res_longest_raw_hex_string, "%llx", ll);
-  return res_longest_raw_hex_string;
-}
-#endif
-
-/* Converts a number to hexadecimal and stores it in a static
-   string.  Returns a pointer to this string. */
-char *
-local_hex_string (unsigned long num)
-{
-  static char res[50];
-
-  sprintf (res, local_hex_format (), num);
-  return res;
-}
-
-/* Converts a LONGEST number to hexadecimal and stores it in a static
+/* Converts a LONGEST to custom hexadecimal and stores it in a static
    string.  Returns a pointer to this string. */
 char *
    string.  Returns a pointer to this string. */
 char *
-longest_local_hex_string (LONGEST num)
+local_hex_string (LONGEST num)
 {
 {
-  return longest_local_hex_string_custom (num, "l");
-}
-
-/* Converts a number to custom hexadecimal and stores it in a static
-   string.  Returns a pointer to this string. */
-char *
-local_hex_string_custom (unsigned long num, char *pre)
-{
-  static char res[50];
-
-  sprintf (res, local_hex_format_custom (pre), num);
-  return res;
+  return local_hex_string_custom (num, "l");
 }
 
 /* Converts a LONGEST number to custom hexadecimal and stores it in a static
 }
 
 /* Converts a LONGEST number to custom hexadecimal and stores it in a static
@@ -654,12 +612,11 @@ local_hex_string_custom (unsigned long num, char *pre)
    should end with "l", e.g. "08l" as with calls to local_hex_string_custom */
 
 char *
    should end with "l", e.g. "08l" as with calls to local_hex_string_custom */
 
 char *
-longest_local_hex_string_custom (LONGEST num, char *width)
+local_hex_string_custom (LONGEST num, char *width)
 {
 #define RESULT_BUF_LEN 50
   static char res2[RESULT_BUF_LEN];
   char format[RESULT_BUF_LEN];
 {
 #define RESULT_BUF_LEN 50
   static char res2[RESULT_BUF_LEN];
   char format[RESULT_BUF_LEN];
-#if !defined (PRINTF_HAS_LONG_LONG)
   int field_width;
   int num_len;
   int num_pad_chars;
   int field_width;
   int num_len;
   int num_pad_chars;
@@ -667,39 +624,11 @@ longest_local_hex_string_custom (LONGEST num, char *width)
   int pad_on_left;
   char *parse_ptr;
   char temp_nbr_buf[RESULT_BUF_LEN];
   int pad_on_left;
   char *parse_ptr;
   char temp_nbr_buf[RESULT_BUF_LEN];
-#endif
 
 
-#ifndef CC_HAS_LONG_LONG
-  /* If there is no long long, then LONGEST should be just long and we
-     can use local_hex_string_custom 
-   */
-  return local_hex_string_custom ((unsigned long) num, width);
-#elif defined (PRINTF_HAS_LONG_LONG)
-  /* Just use printf.  */
-  strcpy (format, local_hex_format_prefix ()); /* 0x */
-  strcat (format, "%");
-  strcat (format, width);      /* e.g. "08l" */
-  strcat (format, "l");                /* need "ll" for long long */
-  strcat (format, local_hex_format_specifier ());      /* "x" */
-  strcat (format, local_hex_format_suffix ()); /* "" */
-  sprintf (res2, format, num);
-  return res2;
-#else /* !defined (PRINTF_HAS_LONG_LONG) */
-  /* Use strcat_address_numeric to print the number into a string, then
+  /* Use phex_nz to print the number into a string, then
      build the result string from local_hex_format_prefix, padding and 
      the hex representation as indicated by "width".  */
      build the result string from local_hex_format_prefix, padding and 
      the hex representation as indicated by "width".  */
-
-  temp_nbr_buf[0] = 0;
-  /* With use_local == 0, we don't get the leading "0x" prefix. */
-  /* MERGEBUG ?? As a quick fix I am replacing this call to
-     strcat_address_numeric with sprintf
-     strcat_address_numeric(num, 0, temp_nbr_buf, RESULT_BUF_LEN);
-   */
-
-  {
-    long long ll = num;
-    sprintf (temp_nbr_buf, "%llx", ll);
-  }
+  strcpy (temp_nbr_buf, phex_nz (num, sizeof (num)));
   /* parse width */
   parse_ptr = width;
   pad_on_left = 1;
   /* parse width */
   parse_ptr = width;
   pad_on_left = 1;
@@ -722,7 +651,7 @@ longest_local_hex_string_custom (LONGEST num, char *width)
   if (strlen (local_hex_format_prefix ()) + num_len + num_pad_chars
       >= RESULT_BUF_LEN)               /* paranoia */
     internal_error (__FILE__, __LINE__,
   if (strlen (local_hex_format_prefix ()) + num_len + num_pad_chars
       >= RESULT_BUF_LEN)               /* paranoia */
     internal_error (__FILE__, __LINE__,
-                   "longest_local_hex_string_custom: insufficient space to store result");
+                   "local_hex_string_custom: insufficient space to store result");
 
   strcpy (res2, local_hex_format_prefix ());
   if (pad_on_left)
 
   strcpy (res2, local_hex_format_prefix ());
   if (pad_on_left)
@@ -743,9 +672,8 @@ longest_local_hex_string_custom (LONGEST num, char *width)
        }
     }
   return res2;
        }
     }
   return res2;
-#endif
 
 
-}                              /* longest_local_hex_string_custom */
+}                              /* local_hex_string_custom */
 
 /* Returns the appropriate printf format for octal
    numbers. */
 
 /* Returns the appropriate printf format for octal
    numbers. */
@@ -862,13 +790,12 @@ integral_type (struct type *type)
     {
     case language_c:
     case language_cplus:
     {
     case language_c:
     case language_cplus:
+    case language_objc:
       return (TYPE_CODE (type) != TYPE_CODE_INT) &&
        (TYPE_CODE (type) != TYPE_CODE_ENUM) ? 0 : 1;
     case language_m2:
     case language_pascal:
       return TYPE_CODE (type) != TYPE_CODE_INT ? 0 : 1;
       return (TYPE_CODE (type) != TYPE_CODE_INT) &&
        (TYPE_CODE (type) != TYPE_CODE_ENUM) ? 0 : 1;
     case language_m2:
     case language_pascal:
       return TYPE_CODE (type) != TYPE_CODE_INT ? 0 : 1;
-    case language_chill:
-      error ("Missing Chill support in function integral_type.");      /*FIXME */
     default:
       error ("Language not supported.");
     }
     default:
       error ("Language not supported.");
     }
@@ -897,13 +824,13 @@ character_type (struct type *type)
   CHECK_TYPEDEF (type);
   switch (current_language->la_language)
     {
   CHECK_TYPEDEF (type);
   switch (current_language->la_language)
     {
-    case language_chill:
     case language_m2:
     case language_pascal:
       return TYPE_CODE (type) != TYPE_CODE_CHAR ? 0 : 1;
 
     case language_c:
     case language_cplus:
     case language_m2:
     case language_pascal:
       return TYPE_CODE (type) != TYPE_CODE_CHAR ? 0 : 1;
 
     case language_c:
     case language_cplus:
+    case language_objc:
       return (TYPE_CODE (type) == TYPE_CODE_INT) &&
        TYPE_LENGTH (type) == sizeof (char)
       ? 1 : 0;
       return (TYPE_CODE (type) == TYPE_CODE_INT) &&
        TYPE_LENGTH (type) == sizeof (char)
       ? 1 : 0;
@@ -919,13 +846,13 @@ string_type (struct type *type)
   CHECK_TYPEDEF (type);
   switch (current_language->la_language)
     {
   CHECK_TYPEDEF (type);
   switch (current_language->la_language)
     {
-    case language_chill:
     case language_m2:
     case language_pascal:
       return TYPE_CODE (type) != TYPE_CODE_STRING ? 0 : 1;
 
     case language_c:
     case language_cplus:
     case language_m2:
     case language_pascal:
       return TYPE_CODE (type) != TYPE_CODE_STRING ? 0 : 1;
 
     case language_c:
     case language_cplus:
+    case language_objc:
       /* C does not have distinct string type. */
       return (0);
     default:
       /* C does not have distinct string type. */
       return (0);
     default:
@@ -944,8 +871,10 @@ boolean_type (struct type *type)
     {
     case language_c:
     case language_cplus:
     {
     case language_c:
     case language_cplus:
-      /* Might be more cleanly handled by having a TYPE_CODE_INT_NOT_BOOL
-         for CHILL and such languages, or a TYPE_CODE_INT_OR_BOOL for C.  */
+    case language_objc:
+      /* Might be more cleanly handled by having a
+         TYPE_CODE_INT_NOT_BOOL for (the deleted) CHILL and such
+         languages, or a TYPE_CODE_INT_OR_BOOL for C.  */
       if (TYPE_CODE (type) == TYPE_CODE_INT)
        return 1;
     default:
       if (TYPE_CODE (type) == TYPE_CODE_INT)
        return 1;
     default:
@@ -979,6 +908,7 @@ structured_type (struct type *type)
     {
     case language_c:
     case language_cplus:
     {
     case language_c:
     case language_cplus:
+    case language_objc:
       return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
        (TYPE_CODE (type) == TYPE_CODE_UNION) ||
        (TYPE_CODE (type) == TYPE_CODE_ARRAY);
       return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
        (TYPE_CODE (type) == TYPE_CODE_UNION) ||
        (TYPE_CODE (type) == TYPE_CODE_ARRAY);
@@ -991,8 +921,6 @@ structured_type (struct type *type)
       return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
        (TYPE_CODE (type) == TYPE_CODE_SET) ||
        (TYPE_CODE (type) == TYPE_CODE_ARRAY);
       return (TYPE_CODE (type) == TYPE_CODE_STRUCT) ||
        (TYPE_CODE (type) == TYPE_CODE_SET) ||
        (TYPE_CODE (type) == TYPE_CODE_ARRAY);
-    case language_chill:
-      error ("Missing Chill support in function structured_type.");    /*FIXME */
     default:
       return (0);
     }
     default:
       return (0);
     }
@@ -1006,10 +934,8 @@ lang_bool_type (void)
   struct type *type;
   switch (current_language->la_language)
     {
   struct type *type;
   switch (current_language->la_language)
     {
-    case language_chill:
-      return builtin_type_chill_bool;
     case language_fortran:
     case language_fortran:
-      sym = lookup_symbol ("logical", NULL, VAR_NAMESPACE, NULL, NULL);
+      sym = lookup_symbol ("logical", NULL, VAR_DOMAIN, NULL, NULL);
       if (sym)
        {
          type = SYMBOL_TYPE (sym);
       if (sym)
        {
          type = SYMBOL_TYPE (sym);
@@ -1020,9 +946,9 @@ lang_bool_type (void)
     case language_cplus:
     case language_pascal:
       if (current_language->la_language==language_cplus)
     case language_cplus:
     case language_pascal:
       if (current_language->la_language==language_cplus)
-        {sym = lookup_symbol ("bool", NULL, VAR_NAMESPACE, NULL, NULL);}
+        {sym = lookup_symbol ("bool", NULL, VAR_DOMAIN, NULL, NULL);}
       else
       else
-        {sym = lookup_symbol ("boolean", NULL, VAR_NAMESPACE, NULL, NULL);}
+        {sym = lookup_symbol ("boolean", NULL, VAR_DOMAIN, NULL, NULL);}
       if (sym)
        {
          type = SYMBOL_TYPE (sym);
       if (sym)
        {
          type = SYMBOL_TYPE (sym);
@@ -1031,7 +957,7 @@ lang_bool_type (void)
        }
       return builtin_type_bool;
     case language_java:
        }
       return builtin_type_bool;
     case language_java:
-      sym = lookup_symbol ("boolean", NULL, VAR_NAMESPACE, NULL, NULL);
+      sym = lookup_symbol ("boolean", NULL, VAR_DOMAIN, NULL, NULL);
       if (sym)
        {
          type = SYMBOL_TYPE (sym);
       if (sym)
        {
          type = SYMBOL_TYPE (sym);
@@ -1197,6 +1123,7 @@ binop_type_check (struct value *arg1, struct value *arg2, int op)
 #ifdef _LANG_c
        case language_c:
        case language_cplus:
 #ifdef _LANG_c
        case language_c:
        case language_cplus:
+       case language_objc:
          switch (op)
            {
            case BINOP_DIV:
          switch (op)
            {
            case BINOP_DIV:
@@ -1237,11 +1164,6 @@ binop_type_check (struct value *arg1, struct value *arg2, int op)
         }
 #endif
 
         }
 #endif
 
-#ifdef _LANG_chill
-       case language_chill:
-         error ("Missing Chill support in function binop_type_check.");        /*FIXME */
-#endif
-
        }
     }
 }
        }
     }
 }
@@ -1268,47 +1190,63 @@ op_error (char *fmt, enum exp_opcode op, int fatal)
     }
 }
 
     }
 }
 
-/* These are called when a language fails a type- or range-check.
-   The first argument should be a printf()-style format string, and
-   the rest of the arguments should be its arguments.  If
-   [type|range]_check is [type|range]_check_on, then return_to_top_level()
-   is called in the style of error ().  Otherwise, the message is prefixed
-   by the value of warning_pre_print and we do not return to the top level. */
+/* These are called when a language fails a type- or range-check.  The
+   first argument should be a printf()-style format string, and the
+   rest of the arguments should be its arguments.  If
+   [type|range]_check is [type|range]_check_on, an error is printed;
+   if [type|range]_check_warn, a warning; otherwise just the
+   message. */
 
 void
 
 void
-type_error (char *string,...)
+type_error (const char *string,...)
 {
   va_list args;
   va_start (args, string);
 
 {
   va_list args;
   va_start (args, string);
 
-  if (type_check == type_check_warn)
-    fprintf_filtered (gdb_stderr, warning_pre_print);
-  else
-    error_begin ();
-
-  vfprintf_filtered (gdb_stderr, string, args);
-  fprintf_filtered (gdb_stderr, "\n");
+  switch (type_check)
+    {
+    case type_check_warn:
+      vwarning (string, args);
+      break;
+    case type_check_on:
+      verror (string, args);
+      break;
+    case type_check_off:
+      /* FIXME: cagney/2002-01-30: Should this function print anything
+         when type error is off?  */
+      vfprintf_filtered (gdb_stderr, string, args);
+      fprintf_filtered (gdb_stderr, "\n");
+      break;
+    default:
+      internal_error (__FILE__, __LINE__, "bad switch");
+    }
   va_end (args);
   va_end (args);
-  if (type_check == type_check_on)
-    return_to_top_level (RETURN_ERROR);
 }
 
 void
 }
 
 void
-range_error (char *string,...)
+range_error (const char *string,...)
 {
   va_list args;
   va_start (args, string);
 
 {
   va_list args;
   va_start (args, string);
 
-  if (range_check == range_check_warn)
-    fprintf_filtered (gdb_stderr, warning_pre_print);
-  else
-    error_begin ();
-
-  vfprintf_filtered (gdb_stderr, string, args);
-  fprintf_filtered (gdb_stderr, "\n");
+  switch (range_check)
+    {
+    case range_check_warn:
+      vwarning (string, args);
+      break;
+    case range_check_on:
+      verror (string, args);
+      break;
+    case range_check_off:
+      /* FIXME: cagney/2002-01-30: Should this function print anything
+         when range error is off?  */
+      vfprintf_filtered (gdb_stderr, string, args);
+      fprintf_filtered (gdb_stderr, "\n");
+      break;
+    default:
+      internal_error (__FILE__, __LINE__, "bad switch");
+    }
   va_end (args);
   va_end (args);
-  if (range_check == range_check_on)
-    return_to_top_level (RETURN_ERROR);
 }
 \f
 
 }
 \f
 
@@ -1402,6 +1340,44 @@ add_language (const struct language_defn *lang)
   languages[languages_size++] = lang;
 }
 
   languages[languages_size++] = lang;
 }
 
+/* Iterate through all registered languages looking for and calling
+   any non-NULL struct language_defn.skip_trampoline() functions.
+   Return the result from the first that returns non-zero, or 0 if all
+   `fail'.  */
+CORE_ADDR 
+skip_language_trampoline (CORE_ADDR pc)
+{
+  int i;
+
+  for (i = 0; i < languages_size; i++)
+    {
+      if (languages[i]->skip_trampoline)
+       {
+         CORE_ADDR real_pc = (languages[i]->skip_trampoline) (pc);
+         if (real_pc)
+           return real_pc;
+       }
+    }
+
+  return 0;
+}
+
+/* Return demangled language symbol, or NULL.  
+   FIXME: Options are only useful for certain languages and ignored
+   by others, so it would be better to remove them here and have a
+   more flexible demangler for the languages that need it.  
+   FIXME: Sometimes the demangler is invoked when we don't know the
+   language, so we can't use this everywhere.  */
+char *
+language_demangle (const struct language_defn *current_language, 
+                               const char *mangled, int options)
+{
+  if (current_language != NULL && current_language->la_demangle)
+    return current_language->la_demangle (mangled, options);
+  return NULL;
+}
+
+
 /* Define the language that is no language.  */
 
 static int
 /* Define the language that is no language.  */
 
 static int
@@ -1463,7 +1439,19 @@ unk_lang_value_print (struct value *val, struct ui_file *stream, int format,
   error ("internal error - unimplemented function unk_lang_value_print called.");
 }
 
   error ("internal error - unimplemented function unk_lang_value_print called.");
 }
 
-static struct type **CONST_PTR (unknown_builtin_types[]) =
+static CORE_ADDR unk_lang_trampoline (CORE_ADDR pc)
+{
+  return 0;
+}
+
+/* Unknown languages just use the cplus demangler.  */
+static char *unk_lang_demangle (const char *mangled, int options)
+{
+  return cplus_demangle (mangled, options);
+}
+
+
+static struct type **const (unknown_builtin_types[]) =
 {
   0
 };
 {
   0
 };
@@ -1490,6 +1478,10 @@ const struct language_defn unknown_language_defn =
   unk_lang_print_type,         /* Print a type using appropriate syntax */
   unk_lang_val_print,          /* Print a value using appropriate syntax */
   unk_lang_value_print,                /* Print a top-level value */
   unk_lang_print_type,         /* Print a type using appropriate syntax */
   unk_lang_val_print,          /* Print a value using appropriate syntax */
   unk_lang_value_print,                /* Print a top-level value */
+  unk_lang_trampoline,         /* Language specific skip_trampoline */
+  value_of_this,               /* value_of_this */
+  basic_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
+  unk_lang_demangle,           /* Language specific symbol demangler */
   {"", "", "", ""},            /* Binary format info */
   {"0%lo", "0", "o", ""},      /* Octal format info */
   {"%ld", "", "d", ""},                /* Decimal format info */
   {"", "", "", ""},            /* Binary format info */
   {"0%lo", "0", "o", ""},      /* Octal format info */
   {"%ld", "", "d", ""},                /* Decimal format info */
@@ -1520,6 +1512,10 @@ const struct language_defn auto_language_defn =
   unk_lang_print_type,         /* Print a type using appropriate syntax */
   unk_lang_val_print,          /* Print a value using appropriate syntax */
   unk_lang_value_print,                /* Print a top-level value */
   unk_lang_print_type,         /* Print a type using appropriate syntax */
   unk_lang_val_print,          /* Print a value using appropriate syntax */
   unk_lang_value_print,                /* Print a top-level value */
+  unk_lang_trampoline,         /* Language specific skip_trampoline */
+  value_of_this,               /* value_of_this */
+  basic_lookup_symbol_nonlocal,        /* lookup_symbol_nonlocal */
+  unk_lang_demangle,           /* Language specific symbol demangler */
   {"", "", "", ""},            /* Binary format info */
   {"0%lo", "0", "o", ""},      /* Octal format info */
   {"%ld", "", "d", ""},                /* Decimal format info */
   {"", "", "", ""},            /* Binary format info */
   {"0%lo", "0", "o", ""},      /* Octal format info */
   {"%ld", "", "d", ""},                /* Decimal format info */
@@ -1549,6 +1545,10 @@ const struct language_defn local_language_defn =
   unk_lang_print_type,         /* Print a type using appropriate syntax */
   unk_lang_val_print,          /* Print a value using appropriate syntax */
   unk_lang_value_print,                /* Print a top-level value */
   unk_lang_print_type,         /* Print a type using appropriate syntax */
   unk_lang_val_print,          /* Print a value using appropriate syntax */
   unk_lang_value_print,                /* Print a top-level value */
+  unk_lang_trampoline,         /* Language specific skip_trampoline */
+  value_of_this,               /* value_of_this */
+  basic_lookup_symbol_nonlocal,        /* lookup_symbol_nonlocal */
+  unk_lang_demangle,           /* Language specific symbol demangler */
   {"", "", "", ""},            /* Binary format info */
   {"0%lo", "0", "o", ""},      /* Octal format info */
   {"%ld", "", "d", ""},                /* Decimal format info */
   {"", "", "", ""},            /* Binary format info */
   {"0%lo", "0", "o", ""},      /* Octal format info */
   {"%ld", "", "d", ""},                /* Decimal format info */
@@ -1574,17 +1574,17 @@ _initialize_language (void)
                     "Set the current source language.",
                     &setlist);
   show = add_show_from_set (set, &showlist);
                     "Set the current source language.",
                     &setlist);
   show = add_show_from_set (set, &showlist);
-  set->function.cfunc = set_language_command;
-  show->function.cfunc = show_language_command;
+  set_cmd_cfunc (set, set_language_command);
+  set_cmd_cfunc (show, show_language_command);
 
   add_prefix_cmd ("check", no_class, set_check,
 
   add_prefix_cmd ("check", no_class, set_check,
-                 "Set the status of the type/range checker",
+                 "Set the status of the type/range checker.",
                  &setchecklist, "set check ", 0, &setlist);
   add_alias_cmd ("c", "check", no_class, 1, &setlist);
   add_alias_cmd ("ch", "check", no_class, 1, &setlist);
 
   add_prefix_cmd ("check", no_class, show_check,
                  &setchecklist, "set check ", 0, &setlist);
   add_alias_cmd ("c", "check", no_class, 1, &setlist);
   add_alias_cmd ("ch", "check", no_class, 1, &setlist);
 
   add_prefix_cmd ("check", no_class, show_check,
-                 "Show the status of the type/range checker",
+                 "Show the status of the type/range checker.",
                  &showchecklist, "show check ", 0, &showlist);
   add_alias_cmd ("c", "check", no_class, 1, &showlist);
   add_alias_cmd ("ch", "check", no_class, 1, &showlist);
                  &showchecklist, "show check ", 0, &showlist);
   add_alias_cmd ("c", "check", no_class, 1, &showlist);
   add_alias_cmd ("ch", "check", no_class, 1, &showlist);
@@ -1594,16 +1594,16 @@ _initialize_language (void)
                     "Set type checking.  (on/warn/off/auto)",
                     &setchecklist);
   show = add_show_from_set (set, &showchecklist);
                     "Set type checking.  (on/warn/off/auto)",
                     &setchecklist);
   show = add_show_from_set (set, &showchecklist);
-  set->function.cfunc = set_type_command;
-  show->function.cfunc = show_type_command;
+  set_cmd_cfunc (set, set_type_command);
+  set_cmd_cfunc (show, show_type_command);
 
   set = add_set_cmd ("range", class_support, var_string_noescape,
                     (char *) &range,
                     "Set range checking.  (on/warn/off/auto)",
                     &setchecklist);
   show = add_show_from_set (set, &showchecklist);
 
   set = add_set_cmd ("range", class_support, var_string_noescape,
                     (char *) &range,
                     "Set range checking.  (on/warn/off/auto)",
                     &setchecklist);
   show = add_show_from_set (set, &showchecklist);
-  set->function.cfunc = set_range_command;
-  show->function.cfunc = show_range_command;
+  set_cmd_cfunc (set, set_range_command);
+  set_cmd_cfunc (show, show_range_command);
 
   set = add_set_cmd ("case-sensitive", class_support, var_string_noescape,
                      (char *) &case_sensitive,
 
   set = add_set_cmd ("case-sensitive", class_support, var_string_noescape,
                      (char *) &case_sensitive,
@@ -1611,8 +1611,8 @@ _initialize_language (void)
 For Fortran the default is off; for other languages the default is on.",
                      &setlist);
   show = add_show_from_set (set, &showlist);
 For Fortran the default is off; for other languages the default is on.",
                      &setlist);
   show = add_show_from_set (set, &showlist);
-  set->function.cfunc = set_case_command;
-  show->function.cfunc = show_case_command;
+  set_cmd_cfunc (set, set_case_command);
+  set_cmd_cfunc (show, show_case_command);
 
   add_language (&unknown_language_defn);
   add_language (&local_language_defn);
 
   add_language (&unknown_language_defn);
   add_language (&local_language_defn);
This page took 0.031543 seconds and 4 git commands to generate.