2 /* YACC parser for Fortran expressions, for GDB.
3 Copyright (C) 1986-2022 Free Software Foundation, Inc.
5 Contributed by Motorola. Adapted from the C parser by Farooq Butt
6 (fmbutt@engage.sps.mot.com).
8 This file is part of GDB.
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
12 the Free Software Foundation; either version 3 of the License, or
13 (at your option) any later version.
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.
20 You should have received a copy of the GNU General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>. */
23 /* This was blantantly ripped off the C expression parser, please
24 be aware of that as you look at its basic structure -FMB */
26 /* Parse a F77 expression from text in a string,
27 and return the result as a struct expression pointer.
28 That structure contains arithmetic operations in reverse polish,
29 with constants represented by operations that are followed by special data.
30 See expression.h for the details of the format.
31 What is important here is that it can be built up sequentially
32 during the process of parsing; the lower levels of the tree always
33 come first in the result.
35 Note that malloc's and realloc's in this file are transformed to
36 xmalloc and xrealloc respectively by the same sed command in the
37 makefile that remaps any other malloc/realloc inserted by the parser
38 generator. Doing this with #defines and trying to control the interaction
39 with include files (<malloc.h> and <stdlib.h> for example) just became
40 too messy, particularly when such includes can be inserted at random
41 times by the parser generator. */
46 #include "expression.h"
48 #include "parser-defs.h"
51 #include "bfd.h" /* Required by objfiles.h. */
52 #include "symfile.h" /* Required by objfiles.h. */
53 #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
57 #include "type-stack.h"
60 #define parse_type(ps) builtin_type (ps->gdbarch ())
61 #define parse_f_type(ps) builtin_f_type (ps->gdbarch ())
63 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror,
65 #define GDB_YY_REMAP_PREFIX f_
68 /* The state of the parser, used internally when we are parsing the
71 static struct parser_state
*pstate
= NULL
;
73 /* Depth of parentheses. */
74 static int paren_depth
;
76 /* The current type stack. */
77 static struct type_stack
*type_stack
;
81 static int yylex (void);
83 static void yyerror (const char *);
85 static void growbuf_by_size
(int);
87 static int match_string_literal
(void);
89 static void push_kind_type
(LONGEST val
, struct type
*type
);
91 static struct type
*convert_to_kind_type
(struct type
*basetype
, int kind
);
93 static void wrap_unop_intrinsic
(exp_opcode opcode
);
95 static void wrap_binop_intrinsic
(exp_opcode opcode
);
97 static void wrap_ternop_intrinsic
(exp_opcode opcode
);
100 static void fortran_wrap2_kind
(type
*base_type
);
103 static void fortran_wrap3_kind
(type
*base_type
);
105 using namespace expr
;
108 /* Although the yacc "value" of an expression is not used,
109 since the result is stored in the structure being created,
110 other node types do have values. */
127 struct symtoken ssym
;
129 enum exp_opcode opcode
;
130 struct internalvar
*ivar
;
137 /* YYSTYPE gets defined by %union */
138 static int parse_number
(struct parser_state
*, const char *, int,
142 %type
<voidval
> exp type_exp start variable
143 %type
<tval
> type typebase
144 %type
<tvec
> nonempty_typelist
145 /* %type <bval> block */
147 /* Fancy type parsing. */
148 %type
<voidval
> func_mod direct_abs_decl abs_decl
151 %token
<typed_val
> INT
152 %token
<typed_val_float
> FLOAT
154 /* Both NAME and TYPENAME tokens represent symbols in the input,
155 and both convey their data as strings.
156 But a TYPENAME is a string that happens to be defined as a typedef
157 or builtin type name (such as int or char)
158 and a NAME is any other symbol.
159 Contexts where this distinction is not important can use the
160 nonterminal "name", which matches either NAME or TYPENAME. */
162 %token
<sval
> STRING_LITERAL
163 %token
<lval
> BOOLEAN_LITERAL
165 %token
<tsym
> TYPENAME
166 %token
<voidval
> COMPLETE
168 %type
<ssym
> name_not_typename
170 /* A NAME_OR_INT is a symbol which is not known in the symbol table,
171 but which would parse as a valid number in the current input radix.
172 E.g. "c" when input_radix==16. Depending on the parse, it will be
173 turned into a name or into a number. */
175 %token
<ssym
> NAME_OR_INT
180 /* Special type cases, put in to allow the parser to distinguish different
182 %token INT_S1_KEYWORD INT_S2_KEYWORD INT_KEYWORD INT_S4_KEYWORD INT_S8_KEYWORD
183 %token LOGICAL_S1_KEYWORD LOGICAL_S2_KEYWORD LOGICAL_KEYWORD LOGICAL_S4_KEYWORD
184 %token LOGICAL_S8_KEYWORD
185 %token REAL_KEYWORD REAL_S4_KEYWORD REAL_S8_KEYWORD REAL_S16_KEYWORD
186 %token COMPLEX_KEYWORD COMPLEX_S4_KEYWORD COMPLEX_S8_KEYWORD
187 %token COMPLEX_S16_KEYWORD
188 %token BOOL_AND BOOL_OR BOOL_NOT
189 %token SINGLE DOUBLE PRECISION
190 %token
<lval
> CHARACTER
192 %token
<sval
> DOLLAR_VARIABLE
194 %token
<opcode
> ASSIGN_MODIFY
195 %token
<opcode
> UNOP_INTRINSIC BINOP_INTRINSIC
196 %token
<opcode
> UNOP_OR_BINOP_INTRINSIC UNOP_OR_BINOP_OR_TERNOP_INTRINSIC
200 %right
'=' ASSIGN_MODIFY
209 %left LESSTHAN GREATERTHAN LEQ GEQ
227 { pstate
->push_new
<type_operation
> ($1); }
234 /* Expressions, not including the comma operator. */
235 exp
: '*' exp %prec UNARY
236 { pstate
->wrap
<unop_ind_operation
> (); }
239 exp
: '&' exp %prec UNARY
240 { pstate
->wrap
<unop_addr_operation
> (); }
243 exp
: '-' exp %prec UNARY
244 { pstate
->wrap
<unary_neg_operation
> (); }
247 exp
: BOOL_NOT exp %prec UNARY
248 { pstate
->wrap
<unary_logical_not_operation
> (); }
251 exp
: '~' exp %prec UNARY
252 { pstate
->wrap
<unary_complement_operation
> (); }
255 exp
: SIZEOF exp %prec UNARY
256 { pstate
->wrap
<unop_sizeof_operation
> (); }
259 exp
: KIND
'(' exp
')' %prec UNARY
260 { pstate
->wrap
<fortran_kind_operation
> (); }
263 /* No more explicit array operators, we treat everything in F77 as
264 a function call. The disambiguation as to whether we are
265 doing a subscript operation or a function call is done
269 { pstate
->start_arglist
(); }
272 std
::vector
<operation_up
> args
273 = pstate
->pop_vector
(pstate
->end_arglist
());
274 pstate
->push_new
<fortran_undetermined
>
275 (pstate
->pop
(), std
::move
(args
));
279 exp
: UNOP_INTRINSIC
'(' exp
')'
281 wrap_unop_intrinsic
($1);
285 exp
: BINOP_INTRINSIC
'(' exp
',' exp
')'
287 wrap_binop_intrinsic
($1);
291 exp
: UNOP_OR_BINOP_INTRINSIC
'('
292 { pstate
->start_arglist
(); }
295 const int n
= pstate
->end_arglist
();
300 wrap_unop_intrinsic
($1);
303 wrap_binop_intrinsic
($1);
306 gdb_assert_not_reached
307 ("wrong number of arguments for intrinsics");
311 exp
: UNOP_OR_BINOP_OR_TERNOP_INTRINSIC
'('
312 { pstate
->start_arglist
(); }
315 const int n
= pstate
->end_arglist
();
320 wrap_unop_intrinsic
($1);
323 wrap_binop_intrinsic
($1);
326 wrap_ternop_intrinsic
($1);
329 gdb_assert_not_reached
330 ("wrong number of arguments for intrinsics");
339 { pstate
->arglist_len
= 1; }
343 { pstate
->arglist_len
= 1; }
346 arglist
: arglist
',' exp %prec ABOVE_COMMA
347 { pstate
->arglist_len
++; }
350 arglist
: arglist
',' subrange %prec ABOVE_COMMA
351 { pstate
->arglist_len
++; }
354 /* There are four sorts of subrange types in F90. */
356 subrange: exp
':' exp %prec ABOVE_COMMA
358 operation_up high
= pstate
->pop
();
359 operation_up low
= pstate
->pop
();
360 pstate
->push_new
<fortran_range_operation
>
361 (RANGE_STANDARD
, std
::move
(low
),
362 std
::move
(high
), operation_up
());
366 subrange: exp
':' %prec ABOVE_COMMA
368 operation_up low
= pstate
->pop
();
369 pstate
->push_new
<fortran_range_operation
>
370 (RANGE_HIGH_BOUND_DEFAULT
, std
::move
(low
),
371 operation_up
(), operation_up
());
375 subrange: ':' exp %prec ABOVE_COMMA
377 operation_up high
= pstate
->pop
();
378 pstate
->push_new
<fortran_range_operation
>
379 (RANGE_LOW_BOUND_DEFAULT
, operation_up
(),
380 std
::move
(high
), operation_up
());
384 subrange: ':' %prec ABOVE_COMMA
386 pstate
->push_new
<fortran_range_operation
>
387 (RANGE_LOW_BOUND_DEFAULT
388 | RANGE_HIGH_BOUND_DEFAULT
,
389 operation_up
(), operation_up
(),
394 /* And each of the four subrange types can also have a stride. */
395 subrange: exp
':' exp
':' exp %prec ABOVE_COMMA
397 operation_up stride
= pstate
->pop
();
398 operation_up high
= pstate
->pop
();
399 operation_up low
= pstate
->pop
();
400 pstate
->push_new
<fortran_range_operation
>
401 (RANGE_STANDARD | RANGE_HAS_STRIDE
,
402 std
::move
(low
), std
::move
(high
),
407 subrange: exp
':' ':' exp %prec ABOVE_COMMA
409 operation_up stride
= pstate
->pop
();
410 operation_up low
= pstate
->pop
();
411 pstate
->push_new
<fortran_range_operation
>
412 (RANGE_HIGH_BOUND_DEFAULT
414 std
::move
(low
), operation_up
(),
419 subrange: ':' exp
':' exp %prec ABOVE_COMMA
421 operation_up stride
= pstate
->pop
();
422 operation_up high
= pstate
->pop
();
423 pstate
->push_new
<fortran_range_operation
>
424 (RANGE_LOW_BOUND_DEFAULT
426 operation_up
(), std
::move
(high
),
431 subrange: ':' ':' exp %prec ABOVE_COMMA
433 operation_up stride
= pstate
->pop
();
434 pstate
->push_new
<fortran_range_operation
>
435 (RANGE_LOW_BOUND_DEFAULT
436 | RANGE_HIGH_BOUND_DEFAULT
438 operation_up
(), operation_up
(),
443 complexnum: exp
',' exp
447 exp
: '(' complexnum
')'
449 operation_up rhs
= pstate
->pop
();
450 operation_up lhs
= pstate
->pop
();
451 pstate
->push_new
<complex_operation
>
452 (std
::move
(lhs
), std
::move
(rhs
),
453 parse_f_type
(pstate
)->builtin_complex_s16
);
457 exp
: '(' type
')' exp %prec UNARY
459 pstate
->push_new
<unop_cast_operation
>
460 (pstate
->pop
(), $2);
466 pstate
->push_new
<fortran_structop_operation
>
467 (pstate
->pop
(), copy_name
($3));
471 exp
: exp
'%' name COMPLETE
473 structop_base_operation
*op
474 = new fortran_structop_operation
(pstate
->pop
(),
476 pstate
->mark_struct_expression
(op
);
477 pstate
->push
(operation_up
(op
));
481 exp
: exp
'%' COMPLETE
483 structop_base_operation
*op
484 = new fortran_structop_operation
(pstate
->pop
(),
486 pstate
->mark_struct_expression
(op
);
487 pstate
->push
(operation_up
(op
));
491 /* Binary operators in order of decreasing precedence. */
494 { pstate
->wrap2
<repeat_operation
> (); }
497 exp
: exp STARSTAR exp
498 { pstate
->wrap2
<exp_operation
> (); }
502 { pstate
->wrap2
<mul_operation
> (); }
506 { pstate
->wrap2
<div_operation
> (); }
510 { pstate
->wrap2
<add_operation
> (); }
514 { pstate
->wrap2
<sub_operation
> (); }
518 { pstate
->wrap2
<lsh_operation
> (); }
522 { pstate
->wrap2
<rsh_operation
> (); }
526 { pstate
->wrap2
<equal_operation
> (); }
529 exp
: exp NOTEQUAL exp
530 { pstate
->wrap2
<notequal_operation
> (); }
534 { pstate
->wrap2
<leq_operation
> (); }
538 { pstate
->wrap2
<geq_operation
> (); }
541 exp
: exp LESSTHAN exp
542 { pstate
->wrap2
<less_operation
> (); }
545 exp
: exp GREATERTHAN exp
546 { pstate
->wrap2
<gtr_operation
> (); }
550 { pstate
->wrap2
<bitwise_and_operation
> (); }
554 { pstate
->wrap2
<bitwise_xor_operation
> (); }
558 { pstate
->wrap2
<bitwise_ior_operation
> (); }
561 exp
: exp BOOL_AND exp
562 { pstate
->wrap2
<logical_and_operation
> (); }
566 exp
: exp BOOL_OR exp
567 { pstate
->wrap2
<logical_or_operation
> (); }
571 { pstate
->wrap2
<assign_operation
> (); }
574 exp
: exp ASSIGN_MODIFY exp
576 operation_up rhs
= pstate
->pop
();
577 operation_up lhs
= pstate
->pop
();
578 pstate
->push_new
<assign_modify_operation
>
579 ($2, std
::move
(lhs
), std
::move
(rhs
));
585 pstate
->push_new
<long_const_operation
>
592 parse_number
(pstate
, $1.stoken.ptr
,
593 $1.stoken.length
, 0, &val
);
594 pstate
->push_new
<long_const_operation
>
603 std
::copy
(std
::begin
($1.val
), std
::end
($1.val
),
605 pstate
->push_new
<float_const_operation
> ($1.type
, data
);
612 exp
: DOLLAR_VARIABLE
613 { pstate
->push_dollar
($1); }
616 exp
: SIZEOF
'(' type
')' %prec UNARY
618 $3 = check_typedef
($3);
619 pstate
->push_new
<long_const_operation
>
620 (parse_f_type
(pstate
)->builtin_integer
,
625 exp
: BOOLEAN_LITERAL
626 { pstate
->push_new
<bool_operation
> ($1); }
631 pstate
->push_new
<string_operation
>
636 variable: name_not_typename
637 { struct block_symbol sym
= $1.sym
;
638 std
::string name
= copy_name
($1.stoken
);
639 pstate
->push_symbol
(name.c_str
(), sym
);
650 /* This is where the interesting stuff happens. */
653 struct type
*follow_type
= $1;
654 struct type
*range_type
;
657 switch
(type_stack
->pop
())
663 follow_type
= lookup_pointer_type
(follow_type
);
666 follow_type
= lookup_lvalue_reference_type
(follow_type
);
669 array_size
= type_stack
->pop_int
();
670 if
(array_size
!= -1)
673 create_static_range_type
((struct type
*) NULL
,
674 parse_f_type
(pstate
)
678 create_array_type
((struct type
*) NULL
,
679 follow_type
, range_type
);
682 follow_type
= lookup_pointer_type
(follow_type
);
685 follow_type
= lookup_function_type
(follow_type
);
689 int kind_val
= type_stack
->pop_int
();
691 = convert_to_kind_type
(follow_type
, kind_val
);
700 { type_stack
->push
(tp_pointer
); $$
= 0; }
702 { type_stack
->push
(tp_pointer
); $$
= $2; }
704 { type_stack
->push
(tp_reference
); $$
= 0; }
706 { type_stack
->push
(tp_reference
); $$
= $2; }
710 direct_abs_decl: '(' abs_decl
')'
712 |
'(' KIND
'=' INT
')'
713 { push_kind_type
($4.val
, $4.type
); }
715 { push_kind_type
($2.val
, $2.type
); }
716 | direct_abs_decl func_mod
717 { type_stack
->push
(tp_function
); }
719 { type_stack
->push
(tp_function
); }
724 |
'(' nonempty_typelist
')'
725 { free
($2); $$
= 0; }
728 typebase
/* Implements (approximately): (type-qualifier)* type-specifier */
732 { $$
= parse_f_type
(pstate
)->builtin_integer_s1
; }
734 { $$
= parse_f_type
(pstate
)->builtin_integer_s2
; }
736 { $$
= parse_f_type
(pstate
)->builtin_integer
; }
738 { $$
= parse_f_type
(pstate
)->builtin_integer
; }
740 { $$
= parse_f_type
(pstate
)->builtin_integer_s8
; }
742 { $$
= parse_f_type
(pstate
)->builtin_character
; }
744 { $$
= parse_f_type
(pstate
)->builtin_logical_s1
; }
746 { $$
= parse_f_type
(pstate
)->builtin_logical_s2
; }
748 { $$
= parse_f_type
(pstate
)->builtin_logical
; }
750 { $$
= parse_f_type
(pstate
)->builtin_logical
; }
752 { $$
= parse_f_type
(pstate
)->builtin_logical_s8
; }
754 { $$
= parse_f_type
(pstate
)->builtin_real
; }
756 { $$
= parse_f_type
(pstate
)->builtin_real
; }
758 { $$
= parse_f_type
(pstate
)->builtin_real_s8
; }
760 { $$
= parse_f_type
(pstate
)->builtin_real_s16
; }
762 { $$
= parse_f_type
(pstate
)->builtin_complex
; }
764 { $$
= parse_f_type
(pstate
)->builtin_complex
; }
766 { $$
= parse_f_type
(pstate
)->builtin_complex_s8
; }
767 | COMPLEX_S16_KEYWORD
768 { $$
= parse_f_type
(pstate
)->builtin_complex_s16
; }
770 { $$
= parse_f_type
(pstate
)->builtin_real
;}
772 { $$
= parse_f_type
(pstate
)->builtin_real_s8
;}
773 | SINGLE COMPLEX_KEYWORD
774 { $$
= parse_f_type
(pstate
)->builtin_complex
;}
775 | DOUBLE COMPLEX_KEYWORD
776 { $$
= parse_f_type
(pstate
)->builtin_complex_s8
;}
781 { $$
= (struct type
**) malloc
(sizeof
(struct type
*) * 2);
782 $
<ivec
>$
[0] = 1; /* Number of types in vector */
785 | nonempty_typelist
',' type
786 { int len
= sizeof
(struct type
*) * (++($
<ivec
>1[0]) + 1);
787 $$
= (struct type
**) realloc
((char *) $1, len
);
788 $$
[$
<ivec
>$
[0]] = $3;
799 name_not_typename
: NAME
800 /* These would be useful if name_not_typename was useful, but it is just
801 a fake for "variable", so these cause reduce/reduce conflicts because
802 the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
803 =exp) or just an exp. If name_not_typename was ever used in an lvalue
804 context where only a name could occur, this might be useful.
811 /* Called to match intrinsic function calls with one argument to their
812 respective implementation and push the operation. */
815 wrap_unop_intrinsic
(exp_opcode code
)
820 pstate
->wrap
<fortran_abs_operation
> ();
823 pstate
->wrap
<fortran_floor_operation_1arg
> ();
825 case FORTRAN_CEILING
:
826 pstate
->wrap
<fortran_ceil_operation_1arg
> ();
828 case UNOP_FORTRAN_ALLOCATED
:
829 pstate
->wrap
<fortran_allocated_operation
> ();
831 case UNOP_FORTRAN_RANK
:
832 pstate
->wrap
<fortran_rank_operation
> ();
834 case UNOP_FORTRAN_SHAPE
:
835 pstate
->wrap
<fortran_array_shape_operation
> ();
837 case UNOP_FORTRAN_LOC
:
838 pstate
->wrap
<fortran_loc_operation
> ();
840 case FORTRAN_ASSOCIATED
:
841 pstate
->wrap
<fortran_associated_1arg
> ();
843 case FORTRAN_ARRAY_SIZE
:
844 pstate
->wrap
<fortran_array_size_1arg
> ();
847 pstate
->wrap
<fortran_cmplx_operation_1arg
> ();
851 pstate
->push_new
<fortran_bound_1arg
> (code
, pstate
->pop
());
854 gdb_assert_not_reached
("unhandled intrinsic");
858 /* Called to match intrinsic function calls with two arguments to their
859 respective implementation and push the operation. */
862 wrap_binop_intrinsic
(exp_opcode code
)
867 fortran_wrap2_kind
<fortran_floor_operation_2arg
>
868 (parse_f_type
(pstate
)->builtin_integer
);
870 case FORTRAN_CEILING
:
871 fortran_wrap2_kind
<fortran_ceil_operation_2arg
>
872 (parse_f_type
(pstate
)->builtin_integer
);
875 pstate
->wrap2
<fortran_mod_operation
> ();
877 case BINOP_FORTRAN_MODULO
:
878 pstate
->wrap2
<fortran_modulo_operation
> ();
881 pstate
->wrap2
<fortran_cmplx_operation_2arg
> ();
883 case FORTRAN_ASSOCIATED
:
884 pstate
->wrap2
<fortran_associated_2arg
> ();
886 case FORTRAN_ARRAY_SIZE
:
887 pstate
->wrap2
<fortran_array_size_2arg
> ();
892 operation_up arg2
= pstate
->pop
();
893 operation_up arg1
= pstate
->pop
();
894 pstate
->push_new
<fortran_bound_2arg
> (code
, std
::move
(arg1
),
899 gdb_assert_not_reached
("unhandled intrinsic");
903 /* Called to match intrinsic function calls with three arguments to their
904 respective implementation and push the operation. */
907 wrap_ternop_intrinsic
(exp_opcode code
)
914 operation_up kind_arg
= pstate
->pop
();
915 operation_up arg2
= pstate
->pop
();
916 operation_up arg1
= pstate
->pop
();
918 value
*val
= kind_arg
->evaluate
(nullptr
, pstate
->expout.get
(),
919 EVAL_AVOID_SIDE_EFFECTS
);
920 gdb_assert
(val
!= nullptr
);
923 = convert_to_kind_type
(parse_f_type
(pstate
)->builtin_integer
,
924 value_as_long
(val
));
926 pstate
->push_new
<fortran_bound_3arg
> (code
, std
::move
(arg1
),
927 std
::move
(arg2
), follow_type
);
930 case FORTRAN_ARRAY_SIZE
:
931 fortran_wrap3_kind
<fortran_array_size_3arg
>
932 (parse_f_type
(pstate
)->builtin_integer
);
935 fortran_wrap3_kind
<fortran_cmplx_operation_3arg
>
936 (parse_f_type
(pstate
)->builtin_complex
);
939 gdb_assert_not_reached
("unhandled intrinsic");
943 /* A helper that pops two operations (similar to wrap2), evaluates the last one
944 assuming it is a kind parameter, and wraps them in some other operation
945 pushing it to the stack. */
949 fortran_wrap2_kind
(type
*base_type
)
951 operation_up kind_arg
= pstate
->pop
();
952 operation_up arg
= pstate
->pop
();
954 value
*val
= kind_arg
->evaluate
(nullptr
, pstate
->expout.get
(),
955 EVAL_AVOID_SIDE_EFFECTS
);
956 gdb_assert
(val
!= nullptr
);
958 type
*follow_type
= convert_to_kind_type
(base_type
, value_as_long
(val
));
960 pstate
->push_new
<T
> (std
::move
(arg
), follow_type
);
963 /* A helper that pops three operations, evaluates the last one assuming it is a
964 kind parameter, and wraps them in some other operation pushing it to the
969 fortran_wrap3_kind
(type
*base_type
)
971 operation_up kind_arg
= pstate
->pop
();
972 operation_up arg2
= pstate
->pop
();
973 operation_up arg1
= pstate
->pop
();
975 value
*val
= kind_arg
->evaluate
(nullptr
, pstate
->expout.get
(),
976 EVAL_AVOID_SIDE_EFFECTS
);
977 gdb_assert
(val
!= nullptr
);
979 type
*follow_type
= convert_to_kind_type
(base_type
, value_as_long
(val
));
981 pstate
->push_new
<T
> (std
::move
(arg1
), std
::move
(arg2
), follow_type
);
984 /* Take care of parsing a number (anything that starts with a digit).
985 Set yylval and return the token type; update lexptr.
986 LEN is the number of characters in it. */
988 /*** Needs some error checking for the float case ***/
991 parse_number
(struct parser_state
*par_state
,
992 const char *p
, int len
, int parsed_float
, YYSTYPE *putithere
)
997 int base
= input_radix
;
1001 struct type
*signed_type
;
1002 struct type
*unsigned_type
;
1006 /* It's a float since it contains a point or an exponent. */
1007 /* [dD] is not understood as an exponent by parse_float,
1008 change it to 'e'. */
1012 for
(tmp2
= tmp
; *tmp2
; ++tmp2
)
1013 if
(*tmp2
== 'd' ||
*tmp2
== 'D')
1016 /* FIXME: Should this use different types? */
1017 putithere
->typed_val_float.type
= parse_f_type
(pstate
)->builtin_real_s8
;
1018 bool parsed
= parse_float
(tmp
, len
,
1019 putithere
->typed_val_float.type
,
1020 putithere
->typed_val_float.val
);
1022 return parsed? FLOAT
: ERROR
;
1025 /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
1026 if
(p
[0] == '0' && len
> 1)
1061 if
(len
== 0 && c
== 'l')
1063 else if
(len
== 0 && c
== 'u')
1068 if
(c
>= '0' && c
<= '9')
1070 else if
(c
>= 'a' && c
<= 'f')
1073 return ERROR
; /* Char not a digit */
1075 return ERROR
; /* Invalid digit in this base */
1079 /* Test for overflow. */
1080 if
(prevn
== 0 && n
== 0)
1082 else if
(RANGE_CHECK
&& prevn
>= n
)
1083 range_error
(_
("Overflow on numeric constant."));
1087 /* If the number is too big to be an int, or it's got an l suffix
1088 then it's a long. Work out if this has to be a long by
1089 shifting right and seeing if anything remains, and the
1090 target int size is different to the target long size.
1092 In the expression below, we could have tested
1093 (n >> gdbarch_int_bit (parse_gdbarch))
1094 to see if it was zero,
1095 but too many compilers warn about that, when ints and longs
1096 are the same size. So we shift it twice, with fewer bits
1097 each time, for the same result. */
1100 if
((gdbarch_int_bit
(par_state
->gdbarch
())
1101 != gdbarch_long_bit
(par_state
->gdbarch
())
1103 >> (gdbarch_int_bit
(par_state
->gdbarch
())-2))) /* Avoid
1107 bits_available
= gdbarch_long_bit
(par_state
->gdbarch
());
1108 unsigned_type
= parse_type
(par_state
)->builtin_unsigned_long
;
1109 signed_type
= parse_type
(par_state
)->builtin_long
;
1113 bits_available
= gdbarch_int_bit
(par_state
->gdbarch
());
1114 unsigned_type
= parse_type
(par_state
)->builtin_unsigned_int
;
1115 signed_type
= parse_type
(par_state
)->builtin_int
;
1117 high_bit
= ((ULONGEST
)1) << (bits_available
- 1);
1120 && ((n
>> 2) >> (bits_available
- 2)))
1121 range_error
(_
("Overflow on numeric constant."));
1123 putithere
->typed_val.val
= n
;
1125 /* If the high bit of the worked out type is set then this number
1126 has to be unsigned. */
1128 if
(unsigned_p ||
(n
& high_bit
))
1129 putithere
->typed_val.type
= unsigned_type
;
1131 putithere
->typed_val.type
= signed_type
;
1136 /* Called to setup the type stack when we encounter a '(kind=N)' type
1137 modifier, performs some bounds checking on 'N' and then pushes this to
1138 the type stack followed by the 'tp_kind' marker. */
1140 push_kind_type
(LONGEST val
, struct type
*type
)
1144 if
(type
->is_unsigned
())
1146 ULONGEST uval
= static_cast
<ULONGEST
> (val
);
1148 error (_
("kind value out of range"));
1149 ival
= static_cast
<int> (uval
);
1153 if
(val
> INT_MAX || val
< 0)
1154 error (_
("kind value out of range"));
1155 ival
= static_cast
<int> (val
);
1158 type_stack
->push
(ival
);
1159 type_stack
->push
(tp_kind
);
1162 /* Called when a type has a '(kind=N)' modifier after it, for example
1163 'character(kind=1)'. The BASETYPE is the type described by 'character'
1164 in our example, and KIND is the integer '1'. This function returns a
1165 new type that represents the basetype of a specific kind. */
1166 static struct type
*
1167 convert_to_kind_type
(struct type
*basetype
, int kind
)
1169 if
(basetype
== parse_f_type
(pstate
)->builtin_character
)
1171 /* Character of kind 1 is a special case, this is the same as the
1172 base character type. */
1174 return parse_f_type
(pstate
)->builtin_character
;
1176 else if
(basetype
== parse_f_type
(pstate
)->builtin_complex
)
1179 return parse_f_type
(pstate
)->builtin_complex
;
1181 return parse_f_type
(pstate
)->builtin_complex_s8
;
1182 else if
(kind
== 16)
1183 return parse_f_type
(pstate
)->builtin_complex_s16
;
1185 else if
(basetype
== parse_f_type
(pstate
)->builtin_real
)
1188 return parse_f_type
(pstate
)->builtin_real
;
1190 return parse_f_type
(pstate
)->builtin_real_s8
;
1191 else if
(kind
== 16)
1192 return parse_f_type
(pstate
)->builtin_real_s16
;
1194 else if
(basetype
== parse_f_type
(pstate
)->builtin_logical
)
1197 return parse_f_type
(pstate
)->builtin_logical_s1
;
1199 return parse_f_type
(pstate
)->builtin_logical_s2
;
1201 return parse_f_type
(pstate
)->builtin_logical
;
1203 return parse_f_type
(pstate
)->builtin_logical_s8
;
1205 else if
(basetype
== parse_f_type
(pstate
)->builtin_integer
)
1208 return parse_f_type
(pstate
)->builtin_integer_s1
;
1210 return parse_f_type
(pstate
)->builtin_integer_s2
;
1212 return parse_f_type
(pstate
)->builtin_integer
;
1214 return parse_f_type
(pstate
)->builtin_integer_s8
;
1217 error (_
("unsupported kind %d for type %s"),
1218 kind
, TYPE_SAFE_NAME
(basetype
));
1220 /* Should never get here. */
1226 /* The string to match against. */
1229 /* The lexer token to return. */
1232 /* The expression opcode to embed within the token. */
1233 enum exp_opcode opcode
;
1235 /* When this is true the string in OPER is matched exactly including
1236 case, when this is false OPER is matched case insensitively. */
1237 bool case_sensitive
;
1240 /* List of Fortran operators. */
1242 static const struct token fortran_operators
[] =
1244 { ".and.", BOOL_AND
, OP_NULL
, false
},
1245 { ".or.", BOOL_OR
, OP_NULL
, false
},
1246 { ".not.", BOOL_NOT
, OP_NULL
, false
},
1247 { ".eq.", EQUAL
, OP_NULL
, false
},
1248 { ".eqv.", EQUAL
, OP_NULL
, false
},
1249 { ".neqv.", NOTEQUAL
, OP_NULL
, false
},
1250 { ".xor.", NOTEQUAL
, OP_NULL
, false
},
1251 { "==", EQUAL
, OP_NULL
, false
},
1252 { ".ne.", NOTEQUAL
, OP_NULL
, false
},
1253 { "/=", NOTEQUAL
, OP_NULL
, false
},
1254 { ".le.", LEQ
, OP_NULL
, false
},
1255 { "<=", LEQ
, OP_NULL
, false
},
1256 { ".ge.", GEQ
, OP_NULL
, false
},
1257 { ">=", GEQ
, OP_NULL
, false
},
1258 { ".gt.", GREATERTHAN
, OP_NULL
, false
},
1259 { ">", GREATERTHAN
, OP_NULL
, false
},
1260 { ".lt.", LESSTHAN
, OP_NULL
, false
},
1261 { "<", LESSTHAN
, OP_NULL
, false
},
1262 { "**", STARSTAR
, BINOP_EXP
, false
},
1265 /* Holds the Fortran representation of a boolean, and the integer value we
1266 substitute in when one of the matching strings is parsed. */
1267 struct f77_boolean_val
1269 /* The string representing a Fortran boolean. */
1272 /* The integer value to replace it with. */
1276 /* The set of Fortran booleans. These are matched case insensitively. */
1277 static const struct f77_boolean_val boolean_values
[] =
1283 static const token f_keywords
[] =
1285 /* Historically these have always been lowercase only in GDB. */
1286 { "character", CHARACTER
, OP_NULL
, true
},
1287 { "complex", COMPLEX_KEYWORD
, OP_NULL
, true
},
1288 { "complex_4", COMPLEX_S4_KEYWORD
, OP_NULL
, true
},
1289 { "complex_8", COMPLEX_S8_KEYWORD
, OP_NULL
, true
},
1290 { "complex_16", COMPLEX_S16_KEYWORD
, OP_NULL
, true
},
1291 { "integer_1", INT_S1_KEYWORD
, OP_NULL
, true
},
1292 { "integer_2", INT_S2_KEYWORD
, OP_NULL
, true
},
1293 { "integer_4", INT_S4_KEYWORD
, OP_NULL
, true
},
1294 { "integer", INT_KEYWORD
, OP_NULL
, true
},
1295 { "integer_8", INT_S8_KEYWORD
, OP_NULL
, true
},
1296 { "logical_1", LOGICAL_S1_KEYWORD
, OP_NULL
, true
},
1297 { "logical_2", LOGICAL_S2_KEYWORD
, OP_NULL
, true
},
1298 { "logical", LOGICAL_KEYWORD
, OP_NULL
, true
},
1299 { "logical_4", LOGICAL_S4_KEYWORD
, OP_NULL
, true
},
1300 { "logical_8", LOGICAL_S8_KEYWORD
, OP_NULL
, true
},
1301 { "real", REAL_KEYWORD
, OP_NULL
, true
},
1302 { "real_4", REAL_S4_KEYWORD
, OP_NULL
, true
},
1303 { "real_8", REAL_S8_KEYWORD
, OP_NULL
, true
},
1304 { "real_16", REAL_S16_KEYWORD
, OP_NULL
, true
},
1305 { "sizeof", SIZEOF
, OP_NULL
, true
},
1306 { "single", SINGLE
, OP_NULL
, true
},
1307 { "double", DOUBLE
, OP_NULL
, true
},
1308 { "precision", PRECISION
, OP_NULL
, true
},
1309 /* The following correspond to actual functions in Fortran and are case
1311 { "kind", KIND
, OP_NULL
, false
},
1312 { "abs", UNOP_INTRINSIC
, UNOP_ABS
, false
},
1313 { "mod", BINOP_INTRINSIC
, BINOP_MOD
, false
},
1314 { "floor", UNOP_OR_BINOP_INTRINSIC
, FORTRAN_FLOOR
, false
},
1315 { "ceiling", UNOP_OR_BINOP_INTRINSIC
, FORTRAN_CEILING
, false
},
1316 { "modulo", BINOP_INTRINSIC
, BINOP_FORTRAN_MODULO
, false
},
1317 { "cmplx", UNOP_OR_BINOP_OR_TERNOP_INTRINSIC
, FORTRAN_CMPLX
, false
},
1318 { "lbound", UNOP_OR_BINOP_OR_TERNOP_INTRINSIC
, FORTRAN_LBOUND
, false
},
1319 { "ubound", UNOP_OR_BINOP_OR_TERNOP_INTRINSIC
, FORTRAN_UBOUND
, false
},
1320 { "allocated", UNOP_INTRINSIC
, UNOP_FORTRAN_ALLOCATED
, false
},
1321 { "associated", UNOP_OR_BINOP_INTRINSIC
, FORTRAN_ASSOCIATED
, false
},
1322 { "rank", UNOP_INTRINSIC
, UNOP_FORTRAN_RANK
, false
},
1323 { "size", UNOP_OR_BINOP_OR_TERNOP_INTRINSIC
, FORTRAN_ARRAY_SIZE
, false
},
1324 { "shape", UNOP_INTRINSIC
, UNOP_FORTRAN_SHAPE
, false
},
1325 { "loc", UNOP_INTRINSIC
, UNOP_FORTRAN_LOC
, false
},
1328 /* Implementation of a dynamically expandable buffer for processing input
1329 characters acquired through lexptr and building a value to return in
1330 yylval. Ripped off from ch-exp.y */
1332 static char *tempbuf
; /* Current buffer contents */
1333 static int tempbufsize
; /* Size of allocated buffer */
1334 static int tempbufindex
; /* Current index into buffer */
1336 #define GROWBY_MIN_SIZE 64 /* Minimum amount to grow buffer by */
1338 #define CHECKBUF(size) \
1340 if
(tempbufindex
+ (size
) >= tempbufsize
) \
1342 growbuf_by_size
(size
); \
1347 /* Grow the static temp buffer if necessary, including allocating the
1348 first one on demand. */
1351 growbuf_by_size
(int count
)
1355 growby
= std
::max
(count
, GROWBY_MIN_SIZE
);
1356 tempbufsize
+= growby
;
1357 if
(tempbuf
== NULL
)
1358 tempbuf
= (char *) malloc
(tempbufsize
);
1360 tempbuf
= (char *) realloc
(tempbuf
, tempbufsize
);
1363 /* Blatantly ripped off from ch-exp.y. This routine recognizes F77
1366 Recognize a string literal. A string literal is a nonzero sequence
1367 of characters enclosed in matching single quotes, except that
1368 a single character inside single quotes is a character literal, which
1369 we reject as a string literal. To embed the terminator character inside
1370 a string, it is simply doubled (I.E. 'this''is''one''string') */
1373 match_string_literal
(void)
1375 const char *tokptr
= pstate
->lexptr
;
1377 for
(tempbufindex
= 0, tokptr
++; *tokptr
!= '\0'; tokptr
++)
1380 if
(*tokptr
== *pstate
->lexptr
)
1382 if
(*(tokptr
+ 1) == *pstate
->lexptr
)
1387 tempbuf
[tempbufindex
++] = *tokptr
;
1389 if
(*tokptr
== '\0' /* no terminator */
1390 || tempbufindex
== 0) /* no string */
1394 tempbuf
[tempbufindex
] = '\0';
1395 yylval.sval.ptr
= tempbuf
;
1396 yylval.sval.length
= tempbufindex
;
1397 pstate
->lexptr
= ++tokptr
;
1398 return STRING_LITERAL
;
1402 /* This is set if a NAME token appeared at the very end of the input
1403 string, with no whitespace separating the name from the EOF. This
1404 is used only when parsing to do field name completion. */
1405 static bool saw_name_at_eof
;
1407 /* This is set if the previously-returned token was a structure
1409 static bool last_was_structop
;
1411 /* Read one token, getting characters through lexptr. */
1419 const char *tokstart
;
1420 bool saw_structop
= last_was_structop
;
1422 last_was_structop
= false
;
1426 pstate
->prev_lexptr
= pstate
->lexptr
;
1428 tokstart
= pstate
->lexptr
;
1430 /* First of all, let us make sure we are not dealing with the
1431 special tokens .true. and .false. which evaluate to 1 and 0. */
1433 if
(*pstate
->lexptr
== '.')
1435 for
(const auto
&candidate
: boolean_values
)
1437 if
(strncasecmp
(tokstart
, candidate.name
,
1438 strlen
(candidate.name
)) == 0)
1440 pstate
->lexptr
+= strlen
(candidate.name
);
1441 yylval.lval
= candidate.value
;
1442 return BOOLEAN_LITERAL
;
1447 /* See if it is a Fortran operator. */
1448 for
(const auto
&candidate
: fortran_operators
)
1449 if
(strncasecmp
(tokstart
, candidate.oper
,
1450 strlen
(candidate.oper
)) == 0)
1452 gdb_assert
(!candidate.case_sensitive
);
1453 pstate
->lexptr
+= strlen
(candidate.oper
);
1454 yylval.opcode
= candidate.opcode
;
1455 return candidate.token
;
1458 switch
(c
= *tokstart
)
1461 if
(saw_name_at_eof
)
1463 saw_name_at_eof
= false
;
1466 else if
(pstate
->parse_completion
&& saw_structop
)
1477 token
= match_string_literal
();
1488 if
(paren_depth
== 0)
1495 if
(pstate
->comma_terminates
&& paren_depth
== 0)
1501 /* Might be a floating point number. */
1502 if
(pstate
->lexptr
[1] < '0' || pstate
->lexptr
[1] > '9')
1503 goto symbol
; /* Nope, must be a symbol. */
1517 /* It's a number. */
1518 int got_dot
= 0, got_e
= 0, got_d
= 0, toktype
;
1519 const char *p
= tokstart
;
1520 int hex
= input_radix
> 10;
1522 if
(c
== '0' && (p
[1] == 'x' || p
[1] == 'X'))
1527 else if
(c
== '0' && (p
[1]=='t' || p
[1]=='T'
1528 || p
[1]=='d' || p
[1]=='D'))
1536 if
(!hex
&& !got_e
&& (*p
== 'e' ||
*p
== 'E'))
1537 got_dot
= got_e
= 1;
1538 else if
(!hex
&& !got_d
&& (*p
== 'd' ||
*p
== 'D'))
1539 got_dot
= got_d
= 1;
1540 else if
(!hex
&& !got_dot
&& *p
== '.')
1542 else if
(((got_e
&& (p
[-1] == 'e' || p
[-1] == 'E'))
1543 ||
(got_d
&& (p
[-1] == 'd' || p
[-1] == 'D')))
1544 && (*p
== '-' ||
*p
== '+'))
1545 /* This is the sign of the exponent, not the end of the
1548 /* We will take any letters or digits. parse_number will
1549 complain if past the radix, or if L or U are not final. */
1550 else if
((*p
< '0' ||
*p
> '9')
1551 && ((*p
< 'a' ||
*p
> 'z')
1552 && (*p
< 'A' ||
*p
> 'Z')))
1555 toktype
= parse_number
(pstate
, tokstart
, p
- tokstart
,
1556 got_dot|got_e|got_d
,
1558 if
(toktype
== ERROR
)
1560 char *err_copy
= (char *) alloca
(p
- tokstart
+ 1);
1562 memcpy
(err_copy
, tokstart
, p
- tokstart
);
1563 err_copy
[p
- tokstart
] = 0;
1564 error (_
("Invalid number \"%s\"."), err_copy
);
1571 last_was_structop
= true
;
1597 if
(!(c
== '_' || c
== '$' || c
==':'
1598 ||
(c
>= 'a' && c
<= 'z') ||
(c
>= 'A' && c
<= 'Z')))
1599 /* We must have come across a bad character (e.g. ';'). */
1600 error (_
("Invalid character '%c' in expression."), c
);
1603 for
(c
= tokstart
[namelen
];
1604 (c
== '_' || c
== '$' || c
== ':' ||
(c
>= '0' && c
<= '9')
1605 ||
(c
>= 'a' && c
<= 'z') ||
(c
>= 'A' && c
<= 'Z'));
1606 c
= tokstart
[++namelen
]);
1608 /* The token "if" terminates the expression and is NOT
1609 removed from the input stream. */
1611 if
(namelen
== 2 && tokstart
[0] == 'i' && tokstart
[1] == 'f')
1614 pstate
->lexptr
+= namelen
;
1616 /* Catch specific keywords. */
1618 for
(const auto
&keyword
: f_keywords
)
1619 if
(strlen
(keyword.oper
) == namelen
1620 && ((!keyword.case_sensitive
1621 && strncasecmp
(tokstart
, keyword.oper
, namelen
) == 0)
1622 ||
(keyword.case_sensitive
1623 && strncmp
(tokstart
, keyword.oper
, namelen
) == 0)))
1625 yylval.opcode
= keyword.opcode
;
1626 return keyword.token
;
1629 yylval.sval.ptr
= tokstart
;
1630 yylval.sval.length
= namelen
;
1632 if
(*tokstart
== '$')
1633 return DOLLAR_VARIABLE
;
1635 /* Use token-type TYPENAME for symbols that happen to be defined
1636 currently as names of types; NAME for other symbols.
1637 The caller is not constrained to care about the distinction. */
1639 std
::string tmp
= copy_name
(yylval.sval
);
1640 struct block_symbol result
;
1641 const domain_enum lookup_domains
[] =
1649 for
(const auto
&domain
: lookup_domains
)
1651 result
= lookup_symbol
(tmp.c_str
(), pstate
->expression_context_block
,
1653 if
(result.symbol
&& result.symbol
->aclass
() == LOC_TYPEDEF
)
1655 yylval.tsym.type
= result.symbol
->type
();
1664 = language_lookup_primitive_type
(pstate
->language
(),
1665 pstate
->gdbarch
(), tmp.c_str
());
1666 if
(yylval.tsym.type
!= NULL
)
1669 /* Input names that aren't symbols but ARE valid hex numbers,
1670 when the input radix permits them, can be names or numbers
1671 depending on the parse. Note we support radixes > 16 here. */
1673 && ((tokstart
[0] >= 'a' && tokstart
[0] < 'a' + input_radix
- 10)
1674 ||
(tokstart
[0] >= 'A' && tokstart
[0] < 'A' + input_radix
- 10)))
1676 YYSTYPE newlval
; /* Its value is ignored. */
1677 hextype
= parse_number
(pstate
, tokstart
, namelen
, 0, &newlval
);
1680 yylval.ssym.sym
= result
;
1681 yylval.ssym.is_a_field_of_this
= false
;
1686 if
(pstate
->parse_completion
&& *pstate
->lexptr
== '\0')
1687 saw_name_at_eof
= true
;
1689 /* Any other kind of symbol */
1690 yylval.ssym.sym
= result
;
1691 yylval.ssym.is_a_field_of_this
= false
;
1697 f_language::parser
(struct parser_state
*par_state
) const
1699 /* Setting up the parser state. */
1700 scoped_restore pstate_restore
= make_scoped_restore
(&pstate
);
1701 scoped_restore restore_yydebug
= make_scoped_restore
(&yydebug,
1703 gdb_assert
(par_state
!= NULL
);
1705 last_was_structop
= false
;
1706 saw_name_at_eof
= false
;
1709 struct type_stack stack
;
1710 scoped_restore restore_type_stack
= make_scoped_restore
(&type_stack
,
1713 int result
= yyparse ();
1715 pstate
->set_operation
(pstate
->pop
());
1720 yyerror (const char *msg
)
1722 if
(pstate
->prev_lexptr
)
1723 pstate
->lexptr
= pstate
->prev_lexptr
;
1725 error (_
("A %s in expression, near `%s'."), msg
, pstate
->lexptr
);