Tweak to match output of autoconf 2.9 with same cygnus local patch as
[deliverable/binutils-gdb.git] / gdb / c-typeprint.c
index 396873751d53aab6cfbde047111c73f2a19ec293..a7a5341c177264d7e8e6d9c20d483b9504cbe51f 100644 (file)
@@ -1,5 +1,5 @@
 /* Support for printing C and C++ types for GDB, the GNU debugger.
-   Copyright 1986, 1988, 1989, 1991, 1993, 1994
+   Copyright 1986, 1988, 1989, 1991, 1993, 1994, 1995, 1996
    Free Software Foundation, Inc.
 
 This file is part of GDB.
@@ -16,7 +16,7 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 #include "defs.h"
 #include "obstack.h"
@@ -34,7 +34,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "c-lang.h"
 #include "typeprint.h"
 
-#include <string.h>
+#include "gdb_string.h"
 #include <errno.h>
 #include <ctype.h>
 
@@ -50,9 +50,6 @@ cp_type_print_derivation_info PARAMS ((GDB_FILE *, struct type *));
 void
 c_type_print_varspec_prefix PARAMS ((struct type *, GDB_FILE *, int, int));
 
-void
-c_type_print_base PARAMS ((struct type *, GDB_FILE *, int, int));
-
 \f
 /* Print a description of a type in the format of a 
    typedef for the current language.
@@ -64,6 +61,7 @@ c_typedef_print (type, new, stream)
    struct symbol *new;
    GDB_FILE *stream;
 {
+  CHECK_TYPEDEF (type);
    switch (current_language->la_language)
    {
 #ifdef _LANG_c
@@ -118,6 +116,9 @@ c_print_type (type, varstring, stream, show, level)
   register enum type_code code;
   int demangled_args;
 
+  if (show > 0)
+    CHECK_TYPEDEF (type);
+
   c_type_print_base (type, stream, show, level);
   code = TYPE_CODE (type);
   if ((varstring != NULL && *varstring != '\0')
@@ -315,6 +316,7 @@ c_type_print_varspec_prefix (type, stream, show, passed_a_ptr)
     case TYPE_CODE_STRING:
     case TYPE_CODE_BITSTRING:
     case TYPE_CODE_COMPLEX:
+    case TYPE_CODE_TYPEDEF:
       /* These types need no prefix.  They are listed here so that
         gcc -Wall will reveal any types that haven't been handled.  */
       break;
@@ -386,7 +388,8 @@ c_type_print_varspec_suffix (type, stream, show, passed_a_ptr, demangled_args)
        fprintf_filtered (stream, ")");
       
       fprintf_filtered (stream, "[");
-      if (TYPE_LENGTH (type) > 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0)
+      if (TYPE_LENGTH (type) >= 0 && TYPE_LENGTH (TYPE_TARGET_TYPE (type)) > 0
+         && TYPE_ARRAY_UPPER_BOUND_TYPE(type) != BOUND_CANNOT_BE_DETERMINED)
        fprintf_filtered (stream, "%d",
                          (TYPE_LENGTH (type)
                           / TYPE_LENGTH (TYPE_TARGET_TYPE (type))));
@@ -452,6 +455,7 @@ c_type_print_varspec_suffix (type, stream, show, passed_a_ptr, demangled_args)
     case TYPE_CODE_STRING:
     case TYPE_CODE_BITSTRING:
     case TYPE_CODE_COMPLEX:
+    case TYPE_CODE_TYPEDEF:
       /* These types do not need a suffix.  They are listed so that
         gcc -Wall will report types that may not have been considered.  */
       break;
@@ -509,10 +513,11 @@ c_type_print_base (type, stream, show, level)
       return;
     }
 
-  check_stub_type (type);
+  CHECK_TYPEDEF (type);
          
   switch (TYPE_CODE (type))
     {
+    case TYPE_CODE_TYPEDEF:
     case TYPE_CODE_ARRAY:
     case TYPE_CODE_PTR:
     case TYPE_CODE_MEMBER:
@@ -577,8 +582,8 @@ c_type_print_base (type, stream, show, level)
            {
              QUIT;
              /* Don't print out virtual function table.  */
-             if ((TYPE_FIELD_NAME (type, i))[5] == CPLUS_MARKER &&
-                 !strncmp (TYPE_FIELD_NAME (type, i), "_vptr", 5))
+             if (STREQN (TYPE_FIELD_NAME (type, i), "_vptr", 5)
+                 && is_cplus_marker ((TYPE_FIELD_NAME (type, i))[5]))
                continue;
 
              /* If this is a C++ class we can print the various C++ section
@@ -732,7 +737,7 @@ c_type_print_base (type, stream, show, level)
                      free (mangled_name);
                    }
                  else if (TYPE_FN_FIELD_PHYSNAME (f, j)[0] == '_'
-                       && TYPE_FN_FIELD_PHYSNAME (f, j)[1] == CPLUS_MARKER)
+                         && is_cplus_marker (TYPE_FN_FIELD_PHYSNAME (f, j)[1]))
                    cp_type_print_method_args (TYPE_FN_FIELD_ARGS (f, j) + 1,
                                               "~", method_name, 0, stream);
                  else
This page took 0.024808 seconds and 4 git commands to generate.