gdb: Convert la_name_of_this to a method
[deliverable/binutils-gdb.git] / gdb / f-lang.c
CommitLineData
c906108c 1/* Fortran language support routines for GDB, the GNU debugger.
ce27fb25 2
b811d2c2 3 Copyright (C) 1993-2020 Free Software Foundation, Inc.
ce27fb25 4
c906108c
SS
5 Contributed by Motorola. Adapted from the C parser by Farooq Butt
6 (fmbutt@engage.sps.mot.com).
7
c5aa993b 8 This file is part of GDB.
c906108c 9
c5aa993b
JM
10 This program is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
a9762ec7 12 the Free Software Foundation; either version 3 of the License, or
c5aa993b 13 (at your option) any later version.
c906108c 14
c5aa993b
JM
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
c906108c 19
c5aa993b 20 You should have received a copy of the GNU General Public License
a9762ec7 21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
22
23#include "defs.h"
4de283e4 24#include "symtab.h"
d55e5aa6 25#include "gdbtypes.h"
4de283e4 26#include "expression.h"
d55e5aa6 27#include "parser-defs.h"
4de283e4
TT
28#include "language.h"
29#include "varobj.h"
30#include "gdbcore.h"
31#include "f-lang.h"
745b8ca0 32#include "valprint.h"
5f9a71c3 33#include "value.h"
4de283e4
TT
34#include "cp-support.h"
35#include "charset.h"
36#include "c-lang.h"
37#include "target-float.h"
0d12e84c 38#include "gdbarch.h"
4de283e4
TT
39
40#include <math.h>
c906108c 41
c906108c
SS
42/* Local functions */
43
3b2b8fea
TT
44/* Return the encoding that should be used for the character type
45 TYPE. */
46
47static const char *
48f_get_encoding (struct type *type)
49{
50 const char *encoding;
51
52 switch (TYPE_LENGTH (type))
53 {
54 case 1:
55 encoding = target_charset (get_type_arch (type));
56 break;
57 case 4:
34877895 58 if (type_byte_order (type) == BFD_ENDIAN_BIG)
3b2b8fea
TT
59 encoding = "UTF-32BE";
60 else
61 encoding = "UTF-32LE";
62 break;
63
64 default:
65 error (_("unrecognized character type"));
66 }
67
68 return encoding;
69}
70
c906108c 71\f
c5aa993b 72
c906108c
SS
73/* Table of operators and their precedences for printing expressions. */
74
c5aa993b
JM
75static const struct op_print f_op_print_tab[] =
76{
77 {"+", BINOP_ADD, PREC_ADD, 0},
78 {"+", UNOP_PLUS, PREC_PREFIX, 0},
79 {"-", BINOP_SUB, PREC_ADD, 0},
80 {"-", UNOP_NEG, PREC_PREFIX, 0},
81 {"*", BINOP_MUL, PREC_MUL, 0},
82 {"/", BINOP_DIV, PREC_MUL, 0},
83 {"DIV", BINOP_INTDIV, PREC_MUL, 0},
84 {"MOD", BINOP_REM, PREC_MUL, 0},
85 {"=", BINOP_ASSIGN, PREC_ASSIGN, 1},
86 {".OR.", BINOP_LOGICAL_OR, PREC_LOGICAL_OR, 0},
87 {".AND.", BINOP_LOGICAL_AND, PREC_LOGICAL_AND, 0},
88 {".NOT.", UNOP_LOGICAL_NOT, PREC_PREFIX, 0},
89 {".EQ.", BINOP_EQUAL, PREC_EQUAL, 0},
90 {".NE.", BINOP_NOTEQUAL, PREC_EQUAL, 0},
91 {".LE.", BINOP_LEQ, PREC_ORDER, 0},
92 {".GE.", BINOP_GEQ, PREC_ORDER, 0},
93 {".GT.", BINOP_GTR, PREC_ORDER, 0},
94 {".LT.", BINOP_LESS, PREC_ORDER, 0},
95 {"**", UNOP_IND, PREC_PREFIX, 0},
96 {"@", BINOP_REPEAT, PREC_REPEAT, 0},
f486487f 97 {NULL, OP_NULL, PREC_REPEAT, 0}
c906108c
SS
98};
99\f
cad351d1
UW
100enum f_primitive_types {
101 f_primitive_type_character,
102 f_primitive_type_logical,
103 f_primitive_type_logical_s1,
104 f_primitive_type_logical_s2,
ce4b0682 105 f_primitive_type_logical_s8,
cad351d1
UW
106 f_primitive_type_integer,
107 f_primitive_type_integer_s2,
108 f_primitive_type_real,
109 f_primitive_type_real_s8,
110 f_primitive_type_real_s16,
111 f_primitive_type_complex_s8,
112 f_primitive_type_complex_s16,
113 f_primitive_type_void,
114 nr_f_primitive_types
c906108c
SS
115};
116
9dad4a58 117/* Special expression evaluation cases for Fortran. */
cb8c24b6
SM
118
119static struct value *
9dad4a58
AB
120evaluate_subexp_f (struct type *expect_type, struct expression *exp,
121 int *pos, enum noside noside)
122{
b6d03bb2 123 struct value *arg1 = NULL, *arg2 = NULL;
4d00f5d8
AB
124 enum exp_opcode op;
125 int pc;
126 struct type *type;
127
128 pc = *pos;
129 *pos += 1;
130 op = exp->elts[pc].opcode;
131
132 switch (op)
133 {
134 default:
135 *pos -= 1;
136 return evaluate_subexp_standard (expect_type, exp, pos, noside);
137
0841c79a 138 case UNOP_ABS:
fe1fe7ea 139 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
0841c79a
AB
140 if (noside == EVAL_SKIP)
141 return eval_skip_value (exp);
142 type = value_type (arg1);
78134374 143 switch (type->code ())
0841c79a
AB
144 {
145 case TYPE_CODE_FLT:
146 {
147 double d
148 = fabs (target_float_to_host_double (value_contents (arg1),
149 value_type (arg1)));
150 return value_from_host_double (type, d);
151 }
152 case TYPE_CODE_INT:
153 {
154 LONGEST l = value_as_long (arg1);
155 l = llabs (l);
156 return value_from_longest (type, l);
157 }
158 }
159 error (_("ABS of type %s not supported"), TYPE_SAFE_NAME (type));
160
b6d03bb2 161 case BINOP_MOD:
fe1fe7ea 162 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
b6d03bb2
AB
163 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
164 if (noside == EVAL_SKIP)
165 return eval_skip_value (exp);
166 type = value_type (arg1);
78134374 167 if (type->code () != value_type (arg2)->code ())
b6d03bb2 168 error (_("non-matching types for parameters to MOD ()"));
78134374 169 switch (type->code ())
b6d03bb2
AB
170 {
171 case TYPE_CODE_FLT:
172 {
173 double d1
174 = target_float_to_host_double (value_contents (arg1),
175 value_type (arg1));
176 double d2
177 = target_float_to_host_double (value_contents (arg2),
178 value_type (arg2));
179 double d3 = fmod (d1, d2);
180 return value_from_host_double (type, d3);
181 }
182 case TYPE_CODE_INT:
183 {
184 LONGEST v1 = value_as_long (arg1);
185 LONGEST v2 = value_as_long (arg2);
186 if (v2 == 0)
187 error (_("calling MOD (N, 0) is undefined"));
188 LONGEST v3 = v1 - (v1 / v2) * v2;
189 return value_from_longest (value_type (arg1), v3);
190 }
191 }
192 error (_("MOD of type %s not supported"), TYPE_SAFE_NAME (type));
193
194 case UNOP_FORTRAN_CEILING:
195 {
fe1fe7ea 196 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
b6d03bb2
AB
197 if (noside == EVAL_SKIP)
198 return eval_skip_value (exp);
199 type = value_type (arg1);
78134374 200 if (type->code () != TYPE_CODE_FLT)
b6d03bb2
AB
201 error (_("argument to CEILING must be of type float"));
202 double val
203 = target_float_to_host_double (value_contents (arg1),
204 value_type (arg1));
205 val = ceil (val);
206 return value_from_host_double (type, val);
207 }
208
209 case UNOP_FORTRAN_FLOOR:
210 {
fe1fe7ea 211 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
b6d03bb2
AB
212 if (noside == EVAL_SKIP)
213 return eval_skip_value (exp);
214 type = value_type (arg1);
78134374 215 if (type->code () != TYPE_CODE_FLT)
b6d03bb2
AB
216 error (_("argument to FLOOR must be of type float"));
217 double val
218 = target_float_to_host_double (value_contents (arg1),
219 value_type (arg1));
220 val = floor (val);
221 return value_from_host_double (type, val);
222 }
223
224 case BINOP_FORTRAN_MODULO:
225 {
fe1fe7ea 226 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
b6d03bb2
AB
227 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
228 if (noside == EVAL_SKIP)
229 return eval_skip_value (exp);
230 type = value_type (arg1);
78134374 231 if (type->code () != value_type (arg2)->code ())
b6d03bb2
AB
232 error (_("non-matching types for parameters to MODULO ()"));
233 /* MODULO(A, P) = A - FLOOR (A / P) * P */
78134374 234 switch (type->code ())
b6d03bb2
AB
235 {
236 case TYPE_CODE_INT:
237 {
238 LONGEST a = value_as_long (arg1);
239 LONGEST p = value_as_long (arg2);
240 LONGEST result = a - (a / p) * p;
241 if (result != 0 && (a < 0) != (p < 0))
242 result += p;
243 return value_from_longest (value_type (arg1), result);
244 }
245 case TYPE_CODE_FLT:
246 {
247 double a
248 = target_float_to_host_double (value_contents (arg1),
249 value_type (arg1));
250 double p
251 = target_float_to_host_double (value_contents (arg2),
252 value_type (arg2));
253 double result = fmod (a, p);
254 if (result != 0 && (a < 0.0) != (p < 0.0))
255 result += p;
256 return value_from_host_double (type, result);
257 }
258 }
259 error (_("MODULO of type %s not supported"), TYPE_SAFE_NAME (type));
260 }
261
262 case BINOP_FORTRAN_CMPLX:
fe1fe7ea 263 arg1 = evaluate_subexp (nullptr, exp, pos, noside);
b6d03bb2
AB
264 arg2 = evaluate_subexp (value_type (arg1), exp, pos, noside);
265 if (noside == EVAL_SKIP)
266 return eval_skip_value (exp);
267 type = builtin_f_type(exp->gdbarch)->builtin_complex_s16;
268 return value_literal_complex (arg1, arg2, type);
269
83228e93 270 case UNOP_FORTRAN_KIND:
4d00f5d8
AB
271 arg1 = evaluate_subexp (NULL, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
272 type = value_type (arg1);
273
78134374 274 switch (type->code ())
4d00f5d8
AB
275 {
276 case TYPE_CODE_STRUCT:
277 case TYPE_CODE_UNION:
278 case TYPE_CODE_MODULE:
279 case TYPE_CODE_FUNC:
280 error (_("argument to kind must be an intrinsic type"));
281 }
282
283 if (!TYPE_TARGET_TYPE (type))
284 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
285 TYPE_LENGTH (type));
286 return value_from_longest (builtin_type (exp->gdbarch)->builtin_int,
78134374 287 TYPE_LENGTH (TYPE_TARGET_TYPE (type)));
4d00f5d8
AB
288 }
289
290 /* Should be unreachable. */
291 return nullptr;
9dad4a58
AB
292}
293
83228e93
AB
294/* Special expression lengths for Fortran. */
295
296static void
297operator_length_f (const struct expression *exp, int pc, int *oplenp,
298 int *argsp)
299{
300 int oplen = 1;
301 int args = 0;
302
303 switch (exp->elts[pc - 1].opcode)
304 {
305 default:
306 operator_length_standard (exp, pc, oplenp, argsp);
307 return;
308
309 case UNOP_FORTRAN_KIND:
b6d03bb2
AB
310 case UNOP_FORTRAN_FLOOR:
311 case UNOP_FORTRAN_CEILING:
83228e93
AB
312 oplen = 1;
313 args = 1;
314 break;
b6d03bb2
AB
315
316 case BINOP_FORTRAN_CMPLX:
317 case BINOP_FORTRAN_MODULO:
318 oplen = 1;
319 args = 2;
320 break;
83228e93
AB
321 }
322
323 *oplenp = oplen;
324 *argsp = args;
325}
326
b6d03bb2
AB
327/* Helper for PRINT_SUBEXP_F. Arguments are as for PRINT_SUBEXP_F, except
328 the extra argument NAME which is the text that should be printed as the
329 name of this operation. */
330
331static void
332print_unop_subexp_f (struct expression *exp, int *pos,
333 struct ui_file *stream, enum precedence prec,
334 const char *name)
335{
336 (*pos)++;
337 fprintf_filtered (stream, "%s(", name);
338 print_subexp (exp, pos, stream, PREC_SUFFIX);
339 fputs_filtered (")", stream);
340}
341
342/* Helper for PRINT_SUBEXP_F. Arguments are as for PRINT_SUBEXP_F, except
343 the extra argument NAME which is the text that should be printed as the
344 name of this operation. */
345
346static void
347print_binop_subexp_f (struct expression *exp, int *pos,
348 struct ui_file *stream, enum precedence prec,
349 const char *name)
350{
351 (*pos)++;
352 fprintf_filtered (stream, "%s(", name);
353 print_subexp (exp, pos, stream, PREC_SUFFIX);
354 fputs_filtered (",", stream);
355 print_subexp (exp, pos, stream, PREC_SUFFIX);
356 fputs_filtered (")", stream);
357}
358
83228e93
AB
359/* Special expression printing for Fortran. */
360
361static void
362print_subexp_f (struct expression *exp, int *pos,
363 struct ui_file *stream, enum precedence prec)
364{
365 int pc = *pos;
366 enum exp_opcode op = exp->elts[pc].opcode;
367
368 switch (op)
369 {
370 default:
371 print_subexp_standard (exp, pos, stream, prec);
372 return;
373
374 case UNOP_FORTRAN_KIND:
b6d03bb2
AB
375 print_unop_subexp_f (exp, pos, stream, prec, "KIND");
376 return;
377
378 case UNOP_FORTRAN_FLOOR:
379 print_unop_subexp_f (exp, pos, stream, prec, "FLOOR");
380 return;
381
382 case UNOP_FORTRAN_CEILING:
383 print_unop_subexp_f (exp, pos, stream, prec, "CEILING");
384 return;
385
386 case BINOP_FORTRAN_CMPLX:
387 print_binop_subexp_f (exp, pos, stream, prec, "CMPLX");
388 return;
389
390 case BINOP_FORTRAN_MODULO:
391 print_binop_subexp_f (exp, pos, stream, prec, "MODULO");
83228e93
AB
392 return;
393 }
394}
395
396/* Special expression names for Fortran. */
397
398static const char *
399op_name_f (enum exp_opcode opcode)
400{
401 switch (opcode)
402 {
403 default:
404 return op_name_standard (opcode);
405
406#define OP(name) \
407 case name: \
408 return #name ;
409#include "fortran-operator.def"
410#undef OP
411 }
412}
413
414/* Special expression dumping for Fortran. */
415
416static int
417dump_subexp_body_f (struct expression *exp,
418 struct ui_file *stream, int elt)
419{
420 int opcode = exp->elts[elt].opcode;
421 int oplen, nargs, i;
422
423 switch (opcode)
424 {
425 default:
426 return dump_subexp_body_standard (exp, stream, elt);
427
428 case UNOP_FORTRAN_KIND:
b6d03bb2
AB
429 case UNOP_FORTRAN_FLOOR:
430 case UNOP_FORTRAN_CEILING:
431 case BINOP_FORTRAN_CMPLX:
432 case BINOP_FORTRAN_MODULO:
83228e93
AB
433 operator_length_f (exp, (elt + 1), &oplen, &nargs);
434 break;
435 }
436
437 elt += oplen;
438 for (i = 0; i < nargs; i += 1)
439 elt = dump_subexp (exp, stream, elt);
440
441 return elt;
442}
443
444/* Special expression checking for Fortran. */
445
446static int
447operator_check_f (struct expression *exp, int pos,
448 int (*objfile_func) (struct objfile *objfile,
449 void *data),
450 void *data)
451{
452 const union exp_element *const elts = exp->elts;
453
454 switch (elts[pos].opcode)
455 {
456 case UNOP_FORTRAN_KIND:
b6d03bb2
AB
457 case UNOP_FORTRAN_FLOOR:
458 case UNOP_FORTRAN_CEILING:
459 case BINOP_FORTRAN_CMPLX:
460 case BINOP_FORTRAN_MODULO:
83228e93
AB
461 /* Any references to objfiles are held in the arguments to this
462 expression, not within the expression itself, so no additional
463 checking is required here, the outer expression iteration code
464 will take care of checking each argument. */
465 break;
466
467 default:
468 return operator_check_standard (exp, pos, objfile_func, data);
469 }
470
471 return 0;
472}
473
27087b7f 474static const char * const f_extensions[] =
56618e20
TT
475{
476 ".f", ".F", ".for", ".FOR", ".ftn", ".FTN", ".fpp", ".FPP",
477 ".f90", ".F90", ".f95", ".F95", ".f03", ".F03", ".f08", ".F08",
478 NULL
479};
480
9dad4a58
AB
481/* Expression processing for Fortran. */
482static const struct exp_descriptor exp_descriptor_f =
483{
83228e93
AB
484 print_subexp_f,
485 operator_length_f,
486 operator_check_f,
487 op_name_f,
488 dump_subexp_body_f,
9dad4a58
AB
489 evaluate_subexp_f
490};
491
0874fd07
AB
492/* Constant data that describes the Fortran language. */
493
494extern const struct language_data f_language_data =
c5aa993b 495{
c906108c 496 "fortran",
6abde28f 497 "Fortran",
c906108c 498 language_fortran,
c906108c 499 range_check_on,
63872f9d 500 case_sensitive_off,
7ca2d3a3 501 array_column_major,
9a044a89 502 macro_expansion_no,
56618e20 503 f_extensions,
9dad4a58 504 &exp_descriptor_f,
59cc4834 505 false, /* la_store_sym_names_in_linkage_form_p */
c906108c
SS
506 f_op_print_tab, /* expression operators for printing */
507 0, /* arrays are first-class (not c-style) */
508 1, /* String lower bound */
a53b64ea 509 &default_varobj_ops,
c5aa993b 510};
c906108c 511
0874fd07
AB
512/* Class representing the Fortran language. */
513
514class f_language : public language_defn
515{
516public:
517 f_language ()
518 : language_defn (language_fortran, f_language_data)
519 { /* Nothing. */ }
1fb314aa
AB
520
521 /* See language.h. */
522 void language_arch_info (struct gdbarch *gdbarch,
523 struct language_arch_info *lai) const override
524 {
525 const struct builtin_f_type *builtin = builtin_f_type (gdbarch);
526
527 lai->string_char_type = builtin->builtin_character;
528 lai->primitive_type_vector
529 = GDBARCH_OBSTACK_CALLOC (gdbarch, nr_f_primitive_types + 1,
530 struct type *);
531
532 lai->primitive_type_vector [f_primitive_type_character]
533 = builtin->builtin_character;
534 lai->primitive_type_vector [f_primitive_type_logical]
535 = builtin->builtin_logical;
536 lai->primitive_type_vector [f_primitive_type_logical_s1]
537 = builtin->builtin_logical_s1;
538 lai->primitive_type_vector [f_primitive_type_logical_s2]
539 = builtin->builtin_logical_s2;
540 lai->primitive_type_vector [f_primitive_type_logical_s8]
541 = builtin->builtin_logical_s8;
542 lai->primitive_type_vector [f_primitive_type_real]
543 = builtin->builtin_real;
544 lai->primitive_type_vector [f_primitive_type_real_s8]
545 = builtin->builtin_real_s8;
546 lai->primitive_type_vector [f_primitive_type_real_s16]
547 = builtin->builtin_real_s16;
548 lai->primitive_type_vector [f_primitive_type_complex_s8]
549 = builtin->builtin_complex_s8;
550 lai->primitive_type_vector [f_primitive_type_complex_s16]
551 = builtin->builtin_complex_s16;
552 lai->primitive_type_vector [f_primitive_type_void]
553 = builtin->builtin_void;
554
555 lai->bool_type_symbol = "logical";
556 lai->bool_type_default = builtin->builtin_logical_s2;
557 }
fb8006fd
AB
558
559 /* See language.h. */
560 unsigned int search_name_hash (const char *name) const override
561 {
562 return cp_search_name_hash (name);
563 }
fbfb0a46
AB
564
565 /* See language.h. */
566
0a50df5d
AB
567 char *demangle (const char *mangled, int options) const override
568 {
569 /* We could support demangling here to provide module namespaces
570 also for inferiors with only minimal symbol table (ELF symbols).
571 Just the mangling standard is not standardized across compilers
572 and there is no DW_AT_producer available for inferiors with only
573 the ELF symbols to check the mangling kind. */
574 return nullptr;
575 }
576
577 /* See language.h. */
578
fbfb0a46
AB
579 void print_type (struct type *type, const char *varstring,
580 struct ui_file *stream, int show, int level,
581 const struct type_print_options *flags) const override
582 {
583 f_print_type (type, varstring, stream, show, level, flags);
584 }
c9debfb9 585
53fc67f8
AB
586 /* See language.h. This just returns default set of word break
587 characters but with the modules separator `::' removed. */
588
589 const char *word_break_characters (void) const override
590 {
591 static char *retval;
592
593 if (!retval)
594 {
595 char *s;
596
597 retval = xstrdup (language_defn::word_break_characters ());
598 s = strchr (retval, ':');
599 if (s)
600 {
601 char *last_char = &s[strlen (s) - 1];
602
603 *s = *last_char;
604 *last_char = 0;
605 }
606 }
607 return retval;
608 }
609
7e56227d
AB
610
611 /* See language.h. */
612
613 void collect_symbol_completion_matches (completion_tracker &tracker,
614 complete_symbol_mode mode,
615 symbol_name_match_type name_match_type,
616 const char *text, const char *word,
617 enum type_code code) const override
618 {
619 /* Consider the modules separator :: as a valid symbol name character
620 class. */
621 default_collect_symbol_completion_matches_break_on (tracker, mode,
622 name_match_type,
623 text, word, ":",
624 code);
625 }
626
ebe2334e
AB
627 /* See language.h. */
628
629 void value_print_inner
630 (struct value *val, struct ui_file *stream, int recurse,
631 const struct value_print_options *options) const override
632 {
633 return f_value_print_inner (val, stream, recurse, options);
634 }
635
a78a19b1
AB
636 /* See language.h. */
637
638 struct block_symbol lookup_symbol_nonlocal
639 (const char *name, const struct block *block,
640 const domain_enum domain) const override
641 {
642 return cp_lookup_symbol_nonlocal (this, name, block, domain);
643 }
ebe2334e 644
87afa652
AB
645 /* See language.h. */
646
647 int parser (struct parser_state *ps) const override
648 {
649 return f_parse (ps);
650 }
651
ec8cec5b
AB
652 /* See language.h. */
653
654 void emitchar (int ch, struct type *chtype,
655 struct ui_file *stream, int quoter) const override
656 {
657 const char *encoding = f_get_encoding (chtype);
658 generic_emit_char (ch, chtype, stream, quoter, encoding);
659 }
660
52b50f2c
AB
661 /* See language.h. */
662
663 void printchar (int ch, struct type *chtype,
664 struct ui_file *stream) const override
665 {
666 fputs_filtered ("'", stream);
667 LA_EMIT_CHAR (ch, chtype, stream, '\'');
668 fputs_filtered ("'", stream);
669 }
670
d711ee67
AB
671 /* See language.h. */
672
673 void printstr (struct ui_file *stream, struct type *elttype,
674 const gdb_byte *string, unsigned int length,
675 const char *encoding, int force_ellipses,
676 const struct value_print_options *options) const override
677 {
678 const char *type_encoding = f_get_encoding (elttype);
679
680 if (TYPE_LENGTH (elttype) == 4)
681 fputs_filtered ("4_", stream);
682
683 if (!encoding || !*encoding)
684 encoding = type_encoding;
685
686 generic_printstr (stream, elttype, string, length, encoding,
687 force_ellipses, '\'', 0, options);
688 }
689
4ffc13fb
AB
690 /* See language.h. */
691
692 void print_typedef (struct type *type, struct symbol *new_symbol,
693 struct ui_file *stream) const override
694 {
695 f_print_typedef (type, new_symbol, stream);
696 }
697
39e7ecca
AB
698 /* See language.h. */
699
700 bool is_string_type_p (struct type *type) const override
701 {
702 type = check_typedef (type);
703 return (type->code () == TYPE_CODE_STRING
704 || (type->code () == TYPE_CODE_ARRAY
705 && TYPE_TARGET_TYPE (type)->code () == TYPE_CODE_CHAR));
706 }
707
22e3f3ed
AB
708 /* See language.h. */
709
710 const char *struct_too_deep_ellipsis () const override
711 { return "(...)"; }
712
c9debfb9
AB
713protected:
714
715 /* See language.h. */
716
717 symbol_name_matcher_ftype *get_symbol_name_matcher_inner
718 (const lookup_name_info &lookup_name) const override
719 {
720 return cp_get_symbol_name_matcher (lookup_name);
721 }
0874fd07
AB
722};
723
724/* Single instance of the Fortran language class. */
725
726static f_language f_language_defn;
727
54ef06c7
UW
728static void *
729build_fortran_types (struct gdbarch *gdbarch)
c906108c 730{
54ef06c7
UW
731 struct builtin_f_type *builtin_f_type
732 = GDBARCH_OBSTACK_ZALLOC (gdbarch, struct builtin_f_type);
733
e9bb382b 734 builtin_f_type->builtin_void
bbe75b9d 735 = arch_type (gdbarch, TYPE_CODE_VOID, TARGET_CHAR_BIT, "void");
e9bb382b
UW
736
737 builtin_f_type->builtin_character
4a270568 738 = arch_type (gdbarch, TYPE_CODE_CHAR, TARGET_CHAR_BIT, "character");
e9bb382b
UW
739
740 builtin_f_type->builtin_logical_s1
741 = arch_boolean_type (gdbarch, TARGET_CHAR_BIT, 1, "logical*1");
742
743 builtin_f_type->builtin_integer_s2
744 = arch_integer_type (gdbarch, gdbarch_short_bit (gdbarch), 0,
745 "integer*2");
746
067630bd
AB
747 builtin_f_type->builtin_integer_s8
748 = arch_integer_type (gdbarch, gdbarch_long_long_bit (gdbarch), 0,
749 "integer*8");
750
e9bb382b
UW
751 builtin_f_type->builtin_logical_s2
752 = arch_boolean_type (gdbarch, gdbarch_short_bit (gdbarch), 1,
753 "logical*2");
754
ce4b0682
SDJ
755 builtin_f_type->builtin_logical_s8
756 = arch_boolean_type (gdbarch, gdbarch_long_long_bit (gdbarch), 1,
757 "logical*8");
758
e9bb382b
UW
759 builtin_f_type->builtin_integer
760 = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), 0,
761 "integer");
762
763 builtin_f_type->builtin_logical
764 = arch_boolean_type (gdbarch, gdbarch_int_bit (gdbarch), 1,
765 "logical*4");
766
767 builtin_f_type->builtin_real
768 = arch_float_type (gdbarch, gdbarch_float_bit (gdbarch),
49f190bc 769 "real", gdbarch_float_format (gdbarch));
e9bb382b
UW
770 builtin_f_type->builtin_real_s8
771 = arch_float_type (gdbarch, gdbarch_double_bit (gdbarch),
49f190bc 772 "real*8", gdbarch_double_format (gdbarch));
34d11c68 773 auto fmt = gdbarch_floatformat_for_type (gdbarch, "real(kind=16)", 128);
dc42e902
AB
774 if (fmt != nullptr)
775 builtin_f_type->builtin_real_s16
776 = arch_float_type (gdbarch, 128, "real*16", fmt);
777 else if (gdbarch_long_double_bit (gdbarch) == 128)
778 builtin_f_type->builtin_real_s16
779 = arch_float_type (gdbarch, gdbarch_long_double_bit (gdbarch),
780 "real*16", gdbarch_long_double_format (gdbarch));
781 else
782 builtin_f_type->builtin_real_s16
783 = arch_type (gdbarch, TYPE_CODE_ERROR, 128, "real*16");
e9bb382b
UW
784
785 builtin_f_type->builtin_complex_s8
5b930b45 786 = init_complex_type ("complex*8", builtin_f_type->builtin_real);
e9bb382b 787 builtin_f_type->builtin_complex_s16
5b930b45 788 = init_complex_type ("complex*16", builtin_f_type->builtin_real_s8);
0830d301 789
78134374 790 if (builtin_f_type->builtin_real_s16->code () == TYPE_CODE_ERROR)
0830d301
TT
791 builtin_f_type->builtin_complex_s32
792 = arch_type (gdbarch, TYPE_CODE_ERROR, 256, "complex*32");
793 else
794 builtin_f_type->builtin_complex_s32
795 = init_complex_type ("complex*32", builtin_f_type->builtin_real_s16);
54ef06c7
UW
796
797 return builtin_f_type;
798}
799
800static struct gdbarch_data *f_type_data;
801
802const struct builtin_f_type *
803builtin_f_type (struct gdbarch *gdbarch)
804{
9a3c8263 805 return (const struct builtin_f_type *) gdbarch_data (gdbarch, f_type_data);
4e845cd3
MS
806}
807
6c265988 808void _initialize_f_language ();
4e845cd3 809void
6c265988 810_initialize_f_language ()
4e845cd3 811{
54ef06c7 812 f_type_data = gdbarch_data_register_post_init (build_fortran_types);
c906108c 813}
aa3cfbda
RB
814
815/* See f-lang.h. */
816
817struct value *
818fortran_argument_convert (struct value *value, bool is_artificial)
819{
820 if (!is_artificial)
821 {
822 /* If the value is not in the inferior e.g. registers values,
823 convenience variables and user input. */
824 if (VALUE_LVAL (value) != lval_memory)
825 {
826 struct type *type = value_type (value);
827 const int length = TYPE_LENGTH (type);
828 const CORE_ADDR addr
829 = value_as_long (value_allocate_space_in_inferior (length));
830 write_memory (addr, value_contents (value), length);
831 struct value *val
832 = value_from_contents_and_address (type, value_contents (value),
833 addr);
834 return value_addr (val);
835 }
836 else
837 return value_addr (value); /* Program variables, e.g. arrays. */
838 }
839 return value;
840}
841
842/* See f-lang.h. */
843
844struct type *
845fortran_preserve_arg_pointer (struct value *arg, struct type *type)
846{
78134374 847 if (value_type (arg)->code () == TYPE_CODE_PTR)
aa3cfbda
RB
848 return value_type (arg);
849 return type;
850}
This page took 1.650601 seconds and 4 git commands to generate.