forked from Imagelibrary/binutils-gdb
* eval.c (evaluate_subexp): Clean up handling of
OP_UNDETERMINED_ARGLIST (no backtracking, more general). * f-valprint.c (f_val_print): Print TYPE_CODE_STRING using LA_PRINT_STRING, and not val_print_string (which reads from inferior). * ch-lang.c (chill_is_varying_struct), ch-lang.h: Remve function duplicate function made redundant by chill_varying_type. Re-write of f77 string and complex number support: * language.h (struct language_defn): New fields string_lower_bound and string_char_type. * c-lang.c (c_language_defn, cplus_language_defn, asm_language_defn), language.c (unknown_language_defn, auto_language_defn, local_language_defn), m2-lang.c (m2_language_defn), f-lang.c (f_language_defn), ch-lang.c (chill_language_defn): Set new fields. * gdbtypes.c (create_string_type): Use new string_char_type field. * valops.c (value_string): Use new string_lower_bound field. * defs.h (TARGET_COMPLEX_BIT, TARGET_DOUBLE_COMPLEX_BIT): Removed. * f-lang.c (f_create_fundamental_type, _initialize_f_language), m2-lang.c (m2_create_fundamental_type), gdbtypes.c (_initialize_gdbtypes): Set TYPE_TARGET_TYPE of complex types. Set their TYPE_CODEs to TYPE_CODE_COMPLEX. * mdebugread.c (mdebug_type_complex, mdebug_type_double_complex): Removed. Use builtin_type_complex and builtin_type_double_complex. * gdbtypes.h (enum type_code): Removed TYPE_CODE_LITERAL_STRING and TYPE_CODE_LITERAL_COMPLEX. * c-typeprint.c, f-typeprint.c, f-valprint.c, eval.c: Removed uses of TYPE_CODE_LITERAL_STRING and TYPE_CODE_LITERAL_COMPLEX. * gdbtypes.c, gdbtypes.h (f77_create_literal_complex_type, f77_create_literal_string_type): Removed. * value.h (VALUE_LITERAL_DATA, VALUE_SUBSTRING_MEMADDR, VALUE_SUBSTRING_MYADDR): Removed. * expression.h (enum exp_opcode): Rename OP_F77_LITERAL_COMPLEX to OP_COMPLEX. * parse.c: Update accordingly. * f-valprint.c (f77_print_cmplx): Removed. (f_val_print case TYPE_CODE_COMPLEX): Re-write to use print_floating. * f-exp.y (STRING_LITERAL): Use OP_STRING instead of OP_ARRAY. * eval.c (evaluate_subexp): For case OP_ARRAY, don't call f77_value_literal_string. * valops.c, value.h (f77_value_literal_string, f77_value_substring, f77_assign_from_literal_string, f77_assign_from_literal_complex): Removed. (value_assign): No longer need to handle literal types. * valops.c (f77_value_literal_complex), value.h: Re-written and renamed to value_literal_complex. Last arg is now a (complex) type. * valops.c (f77_cast_into_complex): Re-written and renamed to cast_into_complex. * eval.c (evaluate_subexp): Update accordingly.
This commit is contained in:
63
gdb/f-lang.c
63
gdb/f-lang.c
@@ -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,23 +393,6 @@ static const struct op_print f_op_print_tab[] = {
|
||||
{ NULL, 0, 0, 0 }
|
||||
};
|
||||
|
||||
/* 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;
|
||||
|
||||
struct type ** const (f_builtin_types[]) =
|
||||
{
|
||||
&builtin_type_f_character,
|
||||
@@ -432,6 +435,8 @@ const struct language_defn f_language_defn = {
|
||||
{"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 +494,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,
|
||||
|
||||
Reference in New Issue
Block a user