* core-aout.c (fetch_core_registers): Cast core_reg_size to int
[deliverable/binutils-gdb.git] / gdb / f-lang.c
index 77dce4f51797722fba40d2f6563e2db8ffb8917c..57a68099ece291dee9ea8c41314c704e82ee0a77 100644 (file)
@@ -1,5 +1,5 @@
 /* Fortran language support routines for GDB, the GNU debugger.
-   Copyright 1993, 1994 Free Software Foundation, Inc.
+   Copyright 1993, 1994, 1996 Free Software Foundation, Inc.
    Contributed by Motorola.  Adapted from the C parser by Farooq Butt
    (fmbutt@engage.sps.mot.com).
 
@@ -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"
@@ -28,6 +28,23 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #include "language.h"
 #include "f-lang.h"
 
+/* The built-in types of F77.  FIXME: integer*4 is missing, plain
+   logical is missing (builtin_type_logical is logical*4).  */
+
+struct type *builtin_type_f_character;
+struct type *builtin_type_f_logical;
+struct type *builtin_type_f_logical_s1;
+struct type *builtin_type_f_logical_s2;
+struct type *builtin_type_f_integer; 
+struct type *builtin_type_f_integer_s2;
+struct type *builtin_type_f_real;
+struct type *builtin_type_f_real_s8;
+struct type *builtin_type_f_real_s16;
+struct type *builtin_type_f_complex_s8;
+struct type *builtin_type_f_complex_s16;
+struct type *builtin_type_f_complex_s32;
+struct type *builtin_type_f_void;
+
 /* Print the character C on STREAM as part of the contents of a literal
    string whose delimiter is QUOTER.  Note that that format for printing
    characters and strings is language specific.
@@ -318,19 +335,22 @@ f_create_fundamental_type (objfile, typeid)
                        0, "real*16", objfile);
       break;
     case FT_COMPLEX:
-      type = init_type (TYPE_CODE_FLT,
-                       TARGET_COMPLEX_BIT / TARGET_CHAR_BIT,
+      type = init_type (TYPE_CODE_COMPLEX,
+                       2 * TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
                        0, "complex*8", objfile);
+      TYPE_TARGET_TYPE (type) = builtin_type_f_real;
       break;
     case FT_DBL_PREC_COMPLEX:
-      type = init_type (TYPE_CODE_FLT,
-                       TARGET_DOUBLE_COMPLEX_BIT / TARGET_CHAR_BIT,
+      type = init_type (TYPE_CODE_COMPLEX,
+                       2 * TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
                        0, "complex*16", objfile);
+      TYPE_TARGET_TYPE (type) = builtin_type_f_real_s8;
       break;
     case FT_EXT_PREC_COMPLEX:
-      type = init_type (TYPE_CODE_FLT,
-                       TARGET_DOUBLE_COMPLEX_BIT / TARGET_CHAR_BIT,
+      type = init_type (TYPE_CODE_COMPLEX,
+                       2 * TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
                        0, "complex*32", objfile);
+      TYPE_TARGET_TYPE (type) = builtin_type_f_real_s16;
       break;
     default:
       /* FIXME:  For now, if we are asked to produce a type not in this
@@ -373,27 +393,9 @@ static const struct op_print f_op_print_tab[] = {
   { NULL,    0, 0, 0 }
 };
 \f
-/* The built-in types of F77.  */
-
-struct type *builtin_type_f_character;
-struct type *builtin_type_f_integer;
-struct type *builtin_type_f_logical;
-struct type *builtin_type_f_logical_s1;
-struct type *builtin_type_f_logical_s2;
-struct type *builtin_type_f_integer; 
-struct type *builtin_type_f_integer_s2;
-struct type *builtin_type_f_real;
-struct type *builtin_type_f_real_s8;
-struct type *builtin_type_f_real_s16;
-struct type *builtin_type_f_complex_s8;
-struct type *builtin_type_f_complex_s16;
-struct type *builtin_type_f_complex_s32;
-struct type *builtin_type_f_void;
-
 struct type ** const (f_builtin_types[]) = 
 {
   &builtin_type_f_character,
-  &builtin_type_f_integer,
   &builtin_type_f_logical,
   &builtin_type_f_logical_s1,
   &builtin_type_f_logical_s2,
@@ -421,6 +423,7 @@ const struct language_defn f_language_defn = {
   type_check_on,
   f_parse,                     /* parser */
   f_error,                     /* parser error function */
+  evaluate_subexp_standard,
   f_printchar,                 /* Print character constant */
   f_printstr,                  /* function to print string constant */
   f_create_fundamental_type,   /* Create fundamental type in this language */
@@ -432,6 +435,9 @@ const struct language_defn f_language_defn = {
   {"%d",   "",    "d", ""},    /* Decimal format info */
   {"0x%x", "0x",  "x", ""},    /* Hex format info */
   f_op_print_tab,              /* expression operators for printing */
+  0,                           /* arrays are first-class (not c-style) */
+  1,                           /* String lower bound */
+  &builtin_type_f_character,   /* Type of string elements */ 
   LANG_MAGIC
   };
 
@@ -489,24 +495,26 @@ _initialize_f_language ()
               "real*16", (struct objfile *) NULL);
   
   builtin_type_f_complex_s8 =
-    init_type (TYPE_CODE_COMPLEX, TARGET_COMPLEX_BIT / TARGET_CHAR_BIT,
+    init_type (TYPE_CODE_COMPLEX, 2 * TARGET_FLOAT_BIT / TARGET_CHAR_BIT,
               0,
               "complex*8", (struct objfile *) NULL);
+  TYPE_TARGET_TYPE (builtin_type_f_complex_s8) = builtin_type_f_real;
   
   builtin_type_f_complex_s16 =
-    init_type (TYPE_CODE_COMPLEX, TARGET_DOUBLE_COMPLEX_BIT / TARGET_CHAR_BIT,
+    init_type (TYPE_CODE_COMPLEX, 2 * TARGET_DOUBLE_BIT / TARGET_CHAR_BIT,
               0,
               "complex*16", (struct objfile *) NULL);
+  TYPE_TARGET_TYPE (builtin_type_f_complex_s16) = builtin_type_f_real_s8;
   
-#if 0
   /* We have a new size == 4 double floats for the
      complex*32 data type */
   
   builtin_type_f_complex_s32 = 
-    init_type (TYPE_CODE_COMPLEX, TARGET_EXT_COMPLEX_BIT / TARGET_CHAR_BIT,
+    init_type (TYPE_CODE_COMPLEX, 2 * TARGET_LONG_DOUBLE_BIT / TARGET_CHAR_BIT,
               0,
               "complex*32", (struct objfile *) NULL);
-#endif
+  TYPE_TARGET_TYPE (builtin_type_f_complex_s32) = builtin_type_f_real_s16;
+
   builtin_type_string =
     init_type (TYPE_CODE_STRING, TARGET_CHAR_BIT / TARGET_CHAR_BIT,
               0,
@@ -539,10 +547,7 @@ SAVED_BF_PTR allocate_saved_bf_node()
 {
   SAVED_BF_PTR new;
   
-  new = (SAVED_BF_PTR) malloc (sizeof (SAVED_BF));
-  
-  if (new == NULL)
-    fatal("could not allocate enough memory to save one more .bf on save list");
+  new = (SAVED_BF_PTR) xmalloc (sizeof (SAVED_BF));
   return(new);
 }
 
@@ -550,11 +555,7 @@ SAVED_FUNCTION *allocate_saved_function_node()
 {
   SAVED_FUNCTION *new;
   
-  new = (SAVED_FUNCTION *) malloc (sizeof (SAVED_FUNCTION));
-  
-  if (new == NULL)
-    fatal("could not allocate enough memory to save one more function on save list");
-  
+  new = (SAVED_FUNCTION *) xmalloc (sizeof (SAVED_FUNCTION));
   return(new);
 }
 
@@ -562,11 +563,7 @@ SAVED_F77_COMMON_PTR allocate_saved_f77_common_node()
 {
   SAVED_F77_COMMON_PTR new;
   
-  new = (SAVED_F77_COMMON_PTR) malloc (sizeof (SAVED_F77_COMMON));
-  
-  if (new == NULL)
-    fatal("could not allocate enough memory to save one more F77 COMMON blk on save list");
-  
+  new = (SAVED_F77_COMMON_PTR) xmalloc (sizeof (SAVED_F77_COMMON));
   return(new);
 }
 
@@ -574,11 +571,7 @@ COMMON_ENTRY_PTR allocate_common_entry_node()
 {
   COMMON_ENTRY_PTR new;
   
-  new = (COMMON_ENTRY_PTR) malloc (sizeof (COMMON_ENTRY));
-  
-  if (new == NULL)
-    fatal("could not allocate enough memory to save one more COMMON entry on save list");
-  
+  new = (COMMON_ENTRY_PTR) xmalloc (sizeof (COMMON_ENTRY));
   return(new);
 }
 
@@ -589,13 +582,16 @@ SAVED_F77_COMMON_PTR current_common=NULL;       /* Ptr to current COMMON */
 
 static SAVED_BF_PTR saved_bf_list=NULL;          /* Ptr to (.bf,function) 
                                                     list*/
+#if 0
 static SAVED_BF_PTR saved_bf_list_end=NULL;      /* Ptr to above list's end */
+#endif
 static SAVED_BF_PTR current_head_bf_list=NULL;   /* Current head of above list
                                                  */
 
+#if 0
 static SAVED_BF_PTR tmp_bf_ptr;                  /* Generic temporary for use 
                                                     in macros */ 
-
+#endif
 
 /* The following function simply enters a given common block onto 
    the global common block chain */
@@ -627,10 +623,10 @@ void add_common_block(name,offset,secnum,func_stab)
   
   tmp = allocate_saved_f77_common_node();
   
-  local_copy_func_stab = malloc (strlen(func_stab) + 1);
+  local_copy_func_stab = xmalloc (strlen(func_stab) + 1);
   strcpy(local_copy_func_stab,func_stab); 
   
-  tmp->name = malloc(strlen(name) + 1);
+  tmp->name = xmalloc(strlen(name) + 1);
   
   /* local_copy_func_stab is a stabstring, let us first extract the 
      function name from the stab by NULLing out the ':' character. */ 
@@ -645,7 +641,7 @@ void add_common_block(name,offset,secnum,func_stab)
     error("Malformed function STAB found in add_common_block()");
   
   
-  tmp->owning_function = malloc (strlen(local_copy_func_stab) + 1); 
+  tmp->owning_function = xmalloc (strlen(local_copy_func_stab) + 1); 
   
   strcpy(tmp->owning_function,local_copy_func_stab); 
   
@@ -831,6 +827,7 @@ void patch_all_commons_by_name (name, offset, secnum)
    first by a queueing algorithm and upon failure fall back to 
    a linear scan. */ 
 
+#if 0
 #define ADD_BF_SYMNUM(bf_sym,fcn_sym) \
   \
   if (saved_bf_list == NULL) \
@@ -855,7 +852,7 @@ else \
                 saved_bf_list_end->next = tmp_bf_ptr;  \
                   saved_bf_list_end = tmp_bf_ptr; \
                   } 
-
+#endif
 
 /* This function frees the entire (.bf,function) list */ 
 
@@ -927,7 +924,9 @@ get_bf_for_fcn (the_function)
 }
 
 static SAVED_FUNCTION_PTR saved_function_list=NULL; 
+#if 0  /* Currently unused */
 static SAVED_FUNCTION_PTR saved_function_list_end=NULL; 
+#endif
 
 void clear_function_list()
 {
This page took 0.036925 seconds and 4 git commands to generate.