Move int type methods out of dwarf2_per_cu_data
[deliverable/binutils-gdb.git] / gdb / f-lang.h
index 0dbe55f3aee8d995ffbe6b6e69b4f499bc948ed6..84a63a8a410133194f5cb0da83789f250d9771c6 100644 (file)
@@ -1,5 +1,7 @@
 /* Fortran language support definitions for GDB, the GNU debugger.
-   Copyright 1992, 1993, 1994, 2000 Free Software Foundation, Inc.
+
+   Copyright (C) 1992-2020 Free Software Foundation, Inc.
+
    Contributed by Motorola.  Adapted from the C definitions by Farooq Butt
    (fmbutt@engage.sps.mot.com).
 
@@ -7,7 +9,7 @@
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    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., 59 Temple Place - Suite 330,
-   Boston, MA 02111-1307, USA.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
+
+#ifndef F_LANG_H
+#define F_LANG_H
+
+struct type_print_options;
+struct parser_state;
+
+extern int f_parse (struct parser_state *);
 
-extern int f_parse PARAMS ((void));
+/* Implement the la_print_typedef language method for Fortran.  */
 
-extern void f_error PARAMS ((char *)); /* Defined in f-exp.y */
+extern void f_print_typedef (struct type *type, struct symbol *new_symbol,
+                            struct ui_file *stream);
 
-extern void f_print_type (struct type *, char *, struct ui_file *, int,
-                         int);
+extern void f_print_type (struct type *, const char *, struct ui_file *, int,
+                         int, const struct type_print_options *);
 
-extern int f_val_print (struct type *, char *, int, CORE_ADDR,
-                       struct ui_file *, int, int, int,
-                       enum val_prettyprint);
+/* Implement la_value_print_inner for Fortran.  */
+
+extern void f_value_print_innner (struct value *val, struct ui_file *stream,
+                                 int recurse,
+                                 const struct value_print_options *options);
 
 /* Language-specific data structures */
 
-struct common_entry
-  {
-    struct symbol *symbol;     /* The symbol node corresponding
-                                  to this component */
-    struct common_entry *next; /* The next component */
-  };
+/* A common block.  */
+
+struct common_block
+{
+  /* The number of entries in the block.  */
+  size_t n_entries;
+
+  /* The contents of the block, allocated using the struct hack.  All
+     pointers in the array are non-NULL.  */
+  struct symbol *contents[1];
+};
+
+extern LONGEST f77_get_upperbound (struct type *);
 
-struct saved_f77_common
-  {
-    char *name;                        /* Name of COMMON */
-    char *owning_function;     /* Name of parent function */
-    int secnum;                        /* Section # of .bss */
-    CORE_ADDR offset;          /* Offset from .bss for 
-                                  this block */
-    struct common_entry *entries;      /* List of block's components */
-    struct common_entry *end_of_entries;       /* ptr. to end of components */
-    struct saved_f77_common *next;     /* Next saved COMMON block */
-  };
+extern LONGEST f77_get_lowerbound (struct type *);
 
-typedef struct saved_f77_common SAVED_F77_COMMON, *SAVED_F77_COMMON_PTR;
+extern void f77_get_dynamic_array_length (struct type *);
 
-typedef struct common_entry COMMON_ENTRY, *COMMON_ENTRY_PTR;
+extern int calc_f77_array_dims (struct type *);
 
-extern SAVED_F77_COMMON_PTR head_common_list;  /* Ptr to 1st saved COMMON  */
-extern SAVED_F77_COMMON_PTR tail_common_list;  /* Ptr to last saved COMMON  */
-extern SAVED_F77_COMMON_PTR current_common;    /* Ptr to current COMMON */
 
-extern SAVED_F77_COMMON_PTR find_common_for_function PARAMS ((char *, char *));
+/* Fortran (F77) types */
 
-#define UNINITIALIZED_SECNUM -1
-#define COMMON_NEEDS_PATCHING(blk) ((blk)->secnum == UNINITIALIZED_SECNUM)
+struct builtin_f_type
+{
+  struct type *builtin_character;
+  struct type *builtin_integer;
+  struct type *builtin_integer_s2;
+  struct type *builtin_integer_s8;
+  struct type *builtin_logical;
+  struct type *builtin_logical_s1;
+  struct type *builtin_logical_s2;
+  struct type *builtin_logical_s8;
+  struct type *builtin_real;
+  struct type *builtin_real_s8;
+  struct type *builtin_real_s16;
+  struct type *builtin_complex_s8;
+  struct type *builtin_complex_s16;
+  struct type *builtin_complex_s32;
+  struct type *builtin_void;
+};
 
-#define BLANK_COMMON_NAME_ORIGINAL "#BLNK_COM" /* XLF assigned  */
-#define BLANK_COMMON_NAME_MF77     "__BLNK__"  /* MF77 assigned  */
-#define BLANK_COMMON_NAME_LOCAL    "__BLANK"   /* Local GDB */
+/* Return the Fortran type table for the specified architecture.  */
+extern const struct builtin_f_type *builtin_f_type (struct gdbarch *gdbarch);
 
-#define BOUND_FETCH_OK 1
-#define BOUND_FETCH_ERROR -999
+/* Ensures that function argument VALUE is in the appropriate form to
+   pass to a Fortran function.  Returns a possibly new value that should
+   be used instead of VALUE.
 
-/* When reasonable array bounds cannot be fetched, such as when 
-   you ask to 'mt print symbols' and there is no stack frame and 
-   therefore no way of knowing the bounds of stack-based arrays, 
-   we have to assign default bounds, these are as good as any... */
+   When IS_ARTIFICIAL is true this indicates an artificial argument,
+   e.g. hidden string lengths which the GNU Fortran argument passing
+   convention specifies as being passed by value.
 
-#define DEFAULT_UPPER_BOUND 999999
-#define DEFAULT_LOWER_BOUND -999999
+   When IS_ARTIFICIAL is false, the argument is passed by pointer.  If the
+   value is already in target memory then return a value that is a pointer
+   to VALUE.  If VALUE is not in memory (e.g. an integer literal), allocate
+   space in the target, copy VALUE in, and return a pointer to the in
+   memory copy.  */
 
-extern char *real_main_name;   /* Name of main function */
-extern int real_main_c_value;  /* C_value field of main function */
+extern struct value *fortran_argument_convert (struct value *value,
+                                              bool is_artificial);
 
-extern int f77_get_dynamic_upperbound PARAMS ((struct type *, int *));
+/* Ensures that function argument TYPE is appropriate to inform the debugger
+   that ARG should be passed as a pointer.  Returns the potentially updated
+   argument type.
 
-extern int f77_get_dynamic_lowerbound PARAMS ((struct type *, int *));
+   If ARG is of type pointer then the type of ARG is returned, otherwise
+   TYPE is returned untouched.
 
-extern void f77_get_dynamic_array_length PARAMS ((struct type *));
+   This function exists to augment the types of Fortran function call
+   parameters to be pointers to the reported value, when the corresponding ARG
+   has also been wrapped in a pointer (by fortran_argument_convert).  This
+   informs the debugger that these arguments should be passed as a pointer
+   rather than as the pointed to type.  */
 
-extern int calc_f77_array_dims PARAMS ((struct type *));
+extern struct type *fortran_preserve_arg_pointer (struct value *arg,
+                                                 struct type *type);
 
-#define DEFAULT_DOTMAIN_NAME_IN_MF77            ".MAIN_"
-#define DEFAULT_MAIN_NAME_IN_MF77               "MAIN_"
-#define DEFAULT_DOTMAIN_NAME_IN_XLF_BUGGY       ".main "
-#define DEFAULT_DOTMAIN_NAME_IN_XLF             ".main"
+#endif /* F_LANG_H */
This page took 0.025575 seconds and 4 git commands to generate.