Thu May 21 13:14:25 1998 John Metzler <jmetzler@cygnus.com>
[deliverable/binutils-gdb.git] / gdb / f-valprint.c
index f094971ad166549ad2bb03b6f1e72e8915e55441..e730f379b1170d295f2c07729adb87d9ea8edd74 100644 (file)
@@ -1,5 +1,5 @@
 /* Support for printing Fortran values for GDB, the GNU debugger.
-   Copyright 1993, 1994 Free Software Foundation, Inc.
+   Copyright 1993, 1994, 1995 Free Software Foundation, Inc.
    Contributed by Motorola.  Adapted from the C definitions by Farooq Butt
    (fmbutt@engage.sps.mot.com), additionally worked over by Stan Shebs.
 
@@ -17,10 +17,10 @@ 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 <string.h>
+#include "gdb_string.h"
 #include "symtab.h"
 #include "gdbtypes.h"
 #include "expression.h"
@@ -33,11 +33,20 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "gdbcore.h"
 #include "command.h"
 
-extern struct obstack dont_print_obstack;
-
-extern unsigned int print_max; /* No of array elements to print */ 
-
-extern int calc_f77_array_dims PARAMS ((struct type *));
+#if 0
+static int there_is_a_visible_common_named PARAMS ((char *));
+#endif
+
+static void info_common_command PARAMS ((char *, int));
+static void list_all_visible_commons PARAMS ((char *));
+static void f77_print_array PARAMS ((struct type *, char *, CORE_ADDR,
+                                    FILE *, int, int, int,
+                                    enum val_prettyprint));
+static void f77_print_array_1 PARAMS ((int, int, struct type *, char *,
+                                      CORE_ADDR, FILE *, int, int, int,
+                                      enum val_prettyprint));
+static void f77_create_arrayprint_offset_tbl PARAMS ((struct type *, FILE *));
+static void f77_get_dynamic_length_of_aggregate PARAMS ((struct type *));
 
 int f77_array_offset_tbl[MAX_FORTRAN_DIMS+1][2];
 
@@ -180,7 +189,7 @@ f77_get_dynamic_upperbound (type, upper_bound)
 
 /* Obtain F77 adjustable array dimensions */ 
 
-void
+static void
 f77_get_dynamic_length_of_aggregate (type)
      struct type *type;
 {
@@ -213,19 +222,19 @@ f77_get_dynamic_length_of_aggregate (type)
   /* Patch in a valid length value. */ 
   
   TYPE_LENGTH (type) =
-    (upper_bound - lower_bound + 1) * TYPE_LENGTH (TYPE_TARGET_TYPE (type));
+    (upper_bound - lower_bound + 1) * TYPE_LENGTH (check_typedef (TYPE_TARGET_TYPE (type)));
 }       
 
 /* Function that sets up the array offset,size table for the array 
    type "type".  */ 
 
-void 
+static void 
 f77_create_arrayprint_offset_tbl (type, stream)
      struct type *type;
      FILE *stream;
 {
   struct type *tmp_type;
-  int eltlen; 
+  int eltlen;
   int ndimen = 1;
   int upper, lower, retcode; 
   
@@ -246,44 +255,35 @@ f77_create_arrayprint_offset_tbl (type, stream)
       
       F77_DIM_SIZE (ndimen) = upper - lower + 1;
       
-      if (ndimen == 1)
-       F77_DIM_OFFSET (ndimen) = 1;
-      else
-       F77_DIM_OFFSET (ndimen) = 
-         F77_DIM_OFFSET (ndimen - 1) * F77_DIM_SIZE(ndimen - 1);
-      
       tmp_type = TYPE_TARGET_TYPE (tmp_type);
       ndimen++; 
     }
   
-  eltlen = TYPE_LENGTH (tmp_type); 
-
   /* Now we multiply eltlen by all the offsets, so that later we 
      can print out array elements correctly.  Up till now we 
      know an offset to apply to get the item but we also 
      have to know how much to add to get to the next item */
   
-  tmp_type = type; 
-  ndimen = 1
-  
-  while ((TYPE_CODE (tmp_type) == TYPE_CODE_ARRAY)) 
+  ndimen--;
+  eltlen = TYPE_LENGTH (tmp_type)
+  F77_DIM_OFFSET (ndimen) = eltlen;
+  while (--ndimen > 0)
     {
-      F77_DIM_OFFSET (ndimen) *= eltlen; 
-      ndimen++;
-      tmp_type = TYPE_TARGET_TYPE (tmp_type);
+      eltlen *= F77_DIM_SIZE (ndimen + 1);
+      F77_DIM_OFFSET (ndimen) = eltlen;
     }
 }
 
 /* Actual function which prints out F77 arrays, Valaddr == address in 
    the superior.  Address == the address in the inferior.  */
 
-void 
+static void 
 f77_print_array_1 (nss, ndimensions, type, valaddr, address, 
                   stream, format, deref_ref, recurse, pretty)
      int nss;
      int ndimensions; 
-     char *valaddr;
      struct type *type;
+     char *valaddr;
      CORE_ADDR address;
      FILE *stream;
      int format;
@@ -301,7 +301,7 @@ f77_print_array_1 (nss, ndimensions, type, valaddr, address,
          f77_print_array_1 (nss + 1, ndimensions, TYPE_TARGET_TYPE (type),
                            valaddr + i * F77_DIM_OFFSET (nss),
                            address + i * F77_DIM_OFFSET (nss), 
-                           stream, format, deref_ref, recurse, pretty, i);
+                           stream, format, deref_ref, recurse, pretty);
          fprintf_filtered (stream, ") ");
        }
     }
@@ -326,7 +326,7 @@ f77_print_array_1 (nss, ndimensions, type, valaddr, address,
 /* This function gets called to print an F77 array, we set up some 
    stuff and then immediately call f77_print_array_1() */
 
-void 
+static void 
 f77_print_array (type, valaddr, address, stream, format, deref_ref, recurse, 
                 pretty)
      struct type *type;
@@ -383,13 +383,11 @@ f_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
      enum val_prettyprint pretty;
 {
   register unsigned int i = 0;         /* Number of characters printed */
-  unsigned len;
   struct type *elttype;
   LONGEST val;
-  char *localstr;
-  char *straddr;
   CORE_ADDR addr;
   
+  CHECK_TYPEDEF (type);
   switch (TYPE_CODE (type))
     {
     case TYPE_CODE_STRING: 
@@ -417,7 +415,7 @@ f_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
       else
        {
          addr = unpack_pointer (type, valaddr);
-         elttype = TYPE_TARGET_TYPE (type);
+         elttype = check_typedef (TYPE_TARGET_TYPE (type));
          
          if (TYPE_CODE (elttype) == TYPE_CODE_FUNC)
            {
@@ -574,7 +572,7 @@ f_val_print (type, valaddr, address, stream, format, deref_ref, recurse,
   return 0;
 }
 
-void
+static void
 list_all_visible_commons (funname)
      char *funname;
 {
@@ -693,7 +691,8 @@ info_common_command (comname, from_tty)
 /* This function is used to determine whether there is a
    F77 common block visible at the current scope called 'comname'. */ 
 
-int
+#if 0
+static int
 there_is_a_visible_common_named (comname)
      char *comname;
 {
@@ -752,6 +751,7 @@ there_is_a_visible_common_named (comname)
   
   return (the_common ? 1 : 0);
 }
+#endif
 
 void
 _initialize_f_valprint ()
This page took 0.026518 seconds and 4 git commands to generate.