/* Fortran language support routines for GDB, the GNU debugger.
- Copyright (C) 1993-1996, 1998-2005, 2007-2012 Free Software
- Foundation, Inc.
+ Copyright (C) 1993-2017 Free Software Foundation, Inc.
Contributed by Motorola. Adapted from the C parser by Farooq Butt
(fmbutt@engage.sps.mot.com).
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include "defs.h"
-#include "gdb_string.h"
#include "symtab.h"
#include "gdbtypes.h"
#include "expression.h"
#include "parser-defs.h"
#include "language.h"
+#include "varobj.h"
#include "f-lang.h"
#include "valprint.h"
#include "value.h"
/* Local functions */
-extern void _initialize_f_language (void);
-
static void f_printchar (int c, struct type *type, struct ui_file * stream);
static void f_emit_char (int c, struct type *type,
struct ui_file * stream, int quoter);
{".LT.", BINOP_LESS, PREC_ORDER, 0},
{"**", UNOP_IND, PREC_PREFIX, 0},
{"@", BINOP_REPEAT, PREC_REPEAT, 0},
- {NULL, 0, 0, 0}
+ {NULL, OP_NULL, PREC_REPEAT, 0}
};
\f
enum f_primitive_types {
/* Remove the modules separator :: from the default break list. */
-static char *
+static const char *
f_word_break_characters (void)
{
static char *retval;
/* Consider the modules separator :: as a valid symbol name character
class. */
-static VEC (char_ptr) *
-f_make_symbol_completion_list (char *text, char *word)
+static void
+f_collect_symbol_completion_matches (completion_tracker &tracker,
+ complete_symbol_mode mode,
+ const char *text, const char *word,
+ enum type_code code)
{
- return default_make_symbol_completion_list_break_on (text, word, ":");
+ default_collect_symbol_completion_matches_break_on (tracker, mode,
+ text, word, ":", code);
}
-const struct language_defn f_language_defn =
+static const char *f_extensions[] =
+{
+ ".f", ".F", ".for", ".FOR", ".ftn", ".FTN", ".fpp", ".FPP",
+ ".f90", ".F90", ".f95", ".F95", ".f03", ".F03", ".f08", ".F08",
+ NULL
+};
+
+extern const struct language_defn f_language_defn =
{
"fortran",
+ "Fortran",
language_fortran,
range_check_on,
case_sensitive_off,
array_column_major,
macro_expansion_no,
+ f_extensions,
&exp_descriptor_standard,
f_parse, /* parser */
- f_error, /* parser error function */
+ f_yyerror, /* parser error function */
null_post_parser,
f_printchar, /* Print character constant */
f_printstr, /* function to print string constant */
NULL, /* name_of_this */
cp_lookup_symbol_nonlocal, /* lookup_symbol_nonlocal */
basic_lookup_transparent_type,/* lookup_transparent_type */
+
+ /* We could support demangling here to provide module namespaces
+ also for inferiors with only minimal symbol table (ELF symbols).
+ Just the mangling standard is not standardized across compilers
+ and there is no DW_AT_producer available for inferiors with only
+ the ELF symbols to check the mangling kind. */
NULL, /* Language specific symbol demangler */
+ NULL,
NULL, /* Language specific
class_name_from_physname */
f_op_print_tab, /* expression operators for printing */
0, /* arrays are first-class (not c-style) */
1, /* String lower bound */
f_word_break_characters,
- f_make_symbol_completion_list,
+ f_collect_symbol_completion_matches,
f_language_arch_info,
default_print_array_index,
default_pass_by_reference,
default_get_string,
+ c_watch_location_expression,
NULL, /* la_get_symbol_name_cmp */
iterate_over_symbols,
+ &default_varobj_ops,
+ NULL,
+ NULL,
LANG_MAGIC
};
= GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_f_type);
builtin_f_type->builtin_void
- = arch_type (gdbarch, TYPE_CODE_VOID, 1, "VOID");
+ = arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT, "VOID");
builtin_f_type->builtin_character
= arch_integer_type (gdbarch, TARGET_CHAR_BIT, 0, "character");
builtin_f_type->builtin_real
= arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
- "real", NULL);
+ "real", gdbarch_float_format (gdbarch));
builtin_f_type->builtin_real_s8
= arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
- "real*8", NULL);
+ "real*8", gdbarch_double_format (gdbarch));
builtin_f_type->builtin_real_s16
= arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
- "real*16", NULL);
+ "real*16", gdbarch_long_double_format (gdbarch));
builtin_f_type->builtin_complex_s8
= arch_complex_type (gdbarch, "complex*8",
const struct builtin_f_type *
builtin_f_type (struct gdbarch *gdbarch)
{
- return gdbarch_data (gdbarch, f_type_data);
+ return (const struct builtin_f_type *) gdbarch_data (gdbarch, f_type_data);
}
void
_initialize_f_language (void)
{
f_type_data = gdbarch_data_register_post_init (build_fortran_types);
-
- add_language (&f_language_defn);
}