Remove paren_depth global
[deliverable/binutils-gdb.git] / gdb / f-exp.y
1
2 /* YACC parser for Fortran expressions, for GDB.
3 Copyright (C) 1986-2019 Free Software Foundation, Inc.
4
5 Contributed by Motorola. Adapted from the C parser by Farooq Butt
6 (fmbutt@engage.sps.mot.com).
7
8 This file is part of GDB.
9
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.
14
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.
19
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/>. */
22
23 /* This was blantantly ripped off the C expression parser, please
24 be aware of that as you look at its basic structure -FMB */
25
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.
34
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. */
42
43 %{
44
45 #include "defs.h"
46 #include "expression.h"
47 #include "value.h"
48 #include "parser-defs.h"
49 #include "language.h"
50 #include "f-lang.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 */
54 #include "block.h"
55 #include <ctype.h>
56 #include <algorithm>
57
58 #define parse_type(ps) builtin_type (ps->gdbarch ())
59 #define parse_f_type(ps) builtin_f_type (ps->gdbarch ())
60
61 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror,
62 etc). */
63 #define GDB_YY_REMAP_PREFIX f_
64 #include "yy-remap.h"
65
66 /* The state of the parser, used internally when we are parsing the
67 expression. */
68
69 static struct parser_state *pstate = NULL;
70
71 /* Depth of parentheses. */
72 static int paren_depth;
73
74 int yyparse (void);
75
76 static int yylex (void);
77
78 static void yyerror (const char *);
79
80 static void growbuf_by_size (int);
81
82 static int match_string_literal (void);
83
84 static void push_kind_type (LONGEST val, struct type *type);
85
86 static struct type *convert_to_kind_type (struct type *basetype, int kind);
87
88 %}
89
90 /* Although the yacc "value" of an expression is not used,
91 since the result is stored in the structure being created,
92 other node types do have values. */
93
94 %union
95 {
96 LONGEST lval;
97 struct {
98 LONGEST val;
99 struct type *type;
100 } typed_val;
101 struct {
102 gdb_byte val[16];
103 struct type *type;
104 } typed_val_float;
105 struct symbol *sym;
106 struct type *tval;
107 struct stoken sval;
108 struct ttype tsym;
109 struct symtoken ssym;
110 int voidval;
111 enum exp_opcode opcode;
112 struct internalvar *ivar;
113
114 struct type **tvec;
115 int *ivec;
116 }
117
118 %{
119 /* YYSTYPE gets defined by %union */
120 static int parse_number (struct parser_state *, const char *, int,
121 int, YYSTYPE *);
122 %}
123
124 %type <voidval> exp type_exp start variable
125 %type <tval> type typebase
126 %type <tvec> nonempty_typelist
127 /* %type <bval> block */
128
129 /* Fancy type parsing. */
130 %type <voidval> func_mod direct_abs_decl abs_decl
131 %type <tval> ptype
132
133 %token <typed_val> INT
134 %token <typed_val_float> FLOAT
135
136 /* Both NAME and TYPENAME tokens represent symbols in the input,
137 and both convey their data as strings.
138 But a TYPENAME is a string that happens to be defined as a typedef
139 or builtin type name (such as int or char)
140 and a NAME is any other symbol.
141 Contexts where this distinction is not important can use the
142 nonterminal "name", which matches either NAME or TYPENAME. */
143
144 %token <sval> STRING_LITERAL
145 %token <lval> BOOLEAN_LITERAL
146 %token <ssym> NAME
147 %token <tsym> TYPENAME
148 %type <sval> name
149 %type <ssym> name_not_typename
150
151 /* A NAME_OR_INT is a symbol which is not known in the symbol table,
152 but which would parse as a valid number in the current input radix.
153 E.g. "c" when input_radix==16. Depending on the parse, it will be
154 turned into a name or into a number. */
155
156 %token <ssym> NAME_OR_INT
157
158 %token SIZEOF KIND
159 %token ERROR
160
161 /* Special type cases, put in to allow the parser to distinguish different
162 legal basetypes. */
163 %token INT_KEYWORD INT_S2_KEYWORD LOGICAL_S1_KEYWORD LOGICAL_S2_KEYWORD
164 %token LOGICAL_S8_KEYWORD
165 %token LOGICAL_KEYWORD REAL_KEYWORD REAL_S8_KEYWORD REAL_S16_KEYWORD
166 %token COMPLEX_S8_KEYWORD COMPLEX_S16_KEYWORD COMPLEX_S32_KEYWORD
167 %token BOOL_AND BOOL_OR BOOL_NOT
168 %token <lval> CHARACTER
169
170 %token <voidval> DOLLAR_VARIABLE
171
172 %token <opcode> ASSIGN_MODIFY
173 %token <opcode> UNOP_INTRINSIC
174
175 %left ','
176 %left ABOVE_COMMA
177 %right '=' ASSIGN_MODIFY
178 %right '?'
179 %left BOOL_OR
180 %right BOOL_NOT
181 %left BOOL_AND
182 %left '|'
183 %left '^'
184 %left '&'
185 %left EQUAL NOTEQUAL
186 %left LESSTHAN GREATERTHAN LEQ GEQ
187 %left LSH RSH
188 %left '@'
189 %left '+' '-'
190 %left '*' '/'
191 %right STARSTAR
192 %right '%'
193 %right UNARY
194 %right '('
195
196 \f
197 %%
198
199 start : exp
200 | type_exp
201 ;
202
203 type_exp: type
204 { write_exp_elt_opcode (pstate, OP_TYPE);
205 write_exp_elt_type (pstate, $1);
206 write_exp_elt_opcode (pstate, OP_TYPE); }
207 ;
208
209 exp : '(' exp ')'
210 { }
211 ;
212
213 /* Expressions, not including the comma operator. */
214 exp : '*' exp %prec UNARY
215 { write_exp_elt_opcode (pstate, UNOP_IND); }
216 ;
217
218 exp : '&' exp %prec UNARY
219 { write_exp_elt_opcode (pstate, UNOP_ADDR); }
220 ;
221
222 exp : '-' exp %prec UNARY
223 { write_exp_elt_opcode (pstate, UNOP_NEG); }
224 ;
225
226 exp : BOOL_NOT exp %prec UNARY
227 { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
228 ;
229
230 exp : '~' exp %prec UNARY
231 { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); }
232 ;
233
234 exp : SIZEOF exp %prec UNARY
235 { write_exp_elt_opcode (pstate, UNOP_SIZEOF); }
236 ;
237
238 exp : KIND '(' exp ')' %prec UNARY
239 { write_exp_elt_opcode (pstate, UNOP_KIND); }
240 ;
241
242 /* No more explicit array operators, we treat everything in F77 as
243 a function call. The disambiguation as to whether we are
244 doing a subscript operation or a function call is done
245 later in eval.c. */
246
247 exp : exp '('
248 { start_arglist (); }
249 arglist ')'
250 { write_exp_elt_opcode (pstate,
251 OP_F77_UNDETERMINED_ARGLIST);
252 write_exp_elt_longcst (pstate,
253 (LONGEST) end_arglist ());
254 write_exp_elt_opcode (pstate,
255 OP_F77_UNDETERMINED_ARGLIST); }
256 ;
257
258 exp : UNOP_INTRINSIC '(' exp ')'
259 { write_exp_elt_opcode (pstate, $1); }
260 ;
261
262 arglist :
263 ;
264
265 arglist : exp
266 { arglist_len = 1; }
267 ;
268
269 arglist : subrange
270 { arglist_len = 1; }
271 ;
272
273 arglist : arglist ',' exp %prec ABOVE_COMMA
274 { arglist_len++; }
275 ;
276
277 /* There are four sorts of subrange types in F90. */
278
279 subrange: exp ':' exp %prec ABOVE_COMMA
280 { write_exp_elt_opcode (pstate, OP_RANGE);
281 write_exp_elt_longcst (pstate, NONE_BOUND_DEFAULT);
282 write_exp_elt_opcode (pstate, OP_RANGE); }
283 ;
284
285 subrange: exp ':' %prec ABOVE_COMMA
286 { write_exp_elt_opcode (pstate, OP_RANGE);
287 write_exp_elt_longcst (pstate, HIGH_BOUND_DEFAULT);
288 write_exp_elt_opcode (pstate, OP_RANGE); }
289 ;
290
291 subrange: ':' exp %prec ABOVE_COMMA
292 { write_exp_elt_opcode (pstate, OP_RANGE);
293 write_exp_elt_longcst (pstate, LOW_BOUND_DEFAULT);
294 write_exp_elt_opcode (pstate, OP_RANGE); }
295 ;
296
297 subrange: ':' %prec ABOVE_COMMA
298 { write_exp_elt_opcode (pstate, OP_RANGE);
299 write_exp_elt_longcst (pstate, BOTH_BOUND_DEFAULT);
300 write_exp_elt_opcode (pstate, OP_RANGE); }
301 ;
302
303 complexnum: exp ',' exp
304 { }
305 ;
306
307 exp : '(' complexnum ')'
308 { write_exp_elt_opcode (pstate, OP_COMPLEX);
309 write_exp_elt_type (pstate,
310 parse_f_type (pstate)
311 ->builtin_complex_s16);
312 write_exp_elt_opcode (pstate, OP_COMPLEX); }
313 ;
314
315 exp : '(' type ')' exp %prec UNARY
316 { write_exp_elt_opcode (pstate, UNOP_CAST);
317 write_exp_elt_type (pstate, $2);
318 write_exp_elt_opcode (pstate, UNOP_CAST); }
319 ;
320
321 exp : exp '%' name
322 { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
323 write_exp_string (pstate, $3);
324 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
325 ;
326
327 /* Binary operators in order of decreasing precedence. */
328
329 exp : exp '@' exp
330 { write_exp_elt_opcode (pstate, BINOP_REPEAT); }
331 ;
332
333 exp : exp STARSTAR exp
334 { write_exp_elt_opcode (pstate, BINOP_EXP); }
335 ;
336
337 exp : exp '*' exp
338 { write_exp_elt_opcode (pstate, BINOP_MUL); }
339 ;
340
341 exp : exp '/' exp
342 { write_exp_elt_opcode (pstate, BINOP_DIV); }
343 ;
344
345 exp : exp '+' exp
346 { write_exp_elt_opcode (pstate, BINOP_ADD); }
347 ;
348
349 exp : exp '-' exp
350 { write_exp_elt_opcode (pstate, BINOP_SUB); }
351 ;
352
353 exp : exp LSH exp
354 { write_exp_elt_opcode (pstate, BINOP_LSH); }
355 ;
356
357 exp : exp RSH exp
358 { write_exp_elt_opcode (pstate, BINOP_RSH); }
359 ;
360
361 exp : exp EQUAL exp
362 { write_exp_elt_opcode (pstate, BINOP_EQUAL); }
363 ;
364
365 exp : exp NOTEQUAL exp
366 { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
367 ;
368
369 exp : exp LEQ exp
370 { write_exp_elt_opcode (pstate, BINOP_LEQ); }
371 ;
372
373 exp : exp GEQ exp
374 { write_exp_elt_opcode (pstate, BINOP_GEQ); }
375 ;
376
377 exp : exp LESSTHAN exp
378 { write_exp_elt_opcode (pstate, BINOP_LESS); }
379 ;
380
381 exp : exp GREATERTHAN exp
382 { write_exp_elt_opcode (pstate, BINOP_GTR); }
383 ;
384
385 exp : exp '&' exp
386 { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
387 ;
388
389 exp : exp '^' exp
390 { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
391 ;
392
393 exp : exp '|' exp
394 { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
395 ;
396
397 exp : exp BOOL_AND exp
398 { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
399 ;
400
401
402 exp : exp BOOL_OR exp
403 { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
404 ;
405
406 exp : exp '=' exp
407 { write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
408 ;
409
410 exp : exp ASSIGN_MODIFY exp
411 { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY);
412 write_exp_elt_opcode (pstate, $2);
413 write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); }
414 ;
415
416 exp : INT
417 { write_exp_elt_opcode (pstate, OP_LONG);
418 write_exp_elt_type (pstate, $1.type);
419 write_exp_elt_longcst (pstate, (LONGEST) ($1.val));
420 write_exp_elt_opcode (pstate, OP_LONG); }
421 ;
422
423 exp : NAME_OR_INT
424 { YYSTYPE val;
425 parse_number (pstate, $1.stoken.ptr,
426 $1.stoken.length, 0, &val);
427 write_exp_elt_opcode (pstate, OP_LONG);
428 write_exp_elt_type (pstate, val.typed_val.type);
429 write_exp_elt_longcst (pstate,
430 (LONGEST)val.typed_val.val);
431 write_exp_elt_opcode (pstate, OP_LONG); }
432 ;
433
434 exp : FLOAT
435 { write_exp_elt_opcode (pstate, OP_FLOAT);
436 write_exp_elt_type (pstate, $1.type);
437 write_exp_elt_floatcst (pstate, $1.val);
438 write_exp_elt_opcode (pstate, OP_FLOAT); }
439 ;
440
441 exp : variable
442 ;
443
444 exp : DOLLAR_VARIABLE
445 ;
446
447 exp : SIZEOF '(' type ')' %prec UNARY
448 { write_exp_elt_opcode (pstate, OP_LONG);
449 write_exp_elt_type (pstate,
450 parse_f_type (pstate)
451 ->builtin_integer);
452 $3 = check_typedef ($3);
453 write_exp_elt_longcst (pstate,
454 (LONGEST) TYPE_LENGTH ($3));
455 write_exp_elt_opcode (pstate, OP_LONG); }
456 ;
457
458 exp : BOOLEAN_LITERAL
459 { write_exp_elt_opcode (pstate, OP_BOOL);
460 write_exp_elt_longcst (pstate, (LONGEST) $1);
461 write_exp_elt_opcode (pstate, OP_BOOL);
462 }
463 ;
464
465 exp : STRING_LITERAL
466 {
467 write_exp_elt_opcode (pstate, OP_STRING);
468 write_exp_string (pstate, $1);
469 write_exp_elt_opcode (pstate, OP_STRING);
470 }
471 ;
472
473 variable: name_not_typename
474 { struct block_symbol sym = $1.sym;
475
476 if (sym.symbol)
477 {
478 if (symbol_read_needs_frame (sym.symbol))
479 innermost_block.update (sym);
480 write_exp_elt_opcode (pstate, OP_VAR_VALUE);
481 write_exp_elt_block (pstate, sym.block);
482 write_exp_elt_sym (pstate, sym.symbol);
483 write_exp_elt_opcode (pstate, OP_VAR_VALUE);
484 break;
485 }
486 else
487 {
488 struct bound_minimal_symbol msymbol;
489 char *arg = copy_name ($1.stoken);
490
491 msymbol =
492 lookup_bound_minimal_symbol (arg);
493 if (msymbol.minsym != NULL)
494 write_exp_msymbol (pstate, msymbol);
495 else if (!have_full_symbols () && !have_partial_symbols ())
496 error (_("No symbol table is loaded. Use the \"file\" command."));
497 else
498 error (_("No symbol \"%s\" in current context."),
499 copy_name ($1.stoken));
500 }
501 }
502 ;
503
504
505 type : ptype
506 ;
507
508 ptype : typebase
509 | typebase abs_decl
510 {
511 /* This is where the interesting stuff happens. */
512 int done = 0;
513 int array_size;
514 struct type *follow_type = $1;
515 struct type *range_type;
516
517 while (!done)
518 switch (pop_type ())
519 {
520 case tp_end:
521 done = 1;
522 break;
523 case tp_pointer:
524 follow_type = lookup_pointer_type (follow_type);
525 break;
526 case tp_reference:
527 follow_type = lookup_lvalue_reference_type (follow_type);
528 break;
529 case tp_array:
530 array_size = pop_type_int ();
531 if (array_size != -1)
532 {
533 range_type =
534 create_static_range_type ((struct type *) NULL,
535 parse_f_type (pstate)
536 ->builtin_integer,
537 0, array_size - 1);
538 follow_type =
539 create_array_type ((struct type *) NULL,
540 follow_type, range_type);
541 }
542 else
543 follow_type = lookup_pointer_type (follow_type);
544 break;
545 case tp_function:
546 follow_type = lookup_function_type (follow_type);
547 break;
548 case tp_kind:
549 {
550 int kind_val = pop_type_int ();
551 follow_type
552 = convert_to_kind_type (follow_type, kind_val);
553 }
554 break;
555 }
556 $$ = follow_type;
557 }
558 ;
559
560 abs_decl: '*'
561 { push_type (tp_pointer); $$ = 0; }
562 | '*' abs_decl
563 { push_type (tp_pointer); $$ = $2; }
564 | '&'
565 { push_type (tp_reference); $$ = 0; }
566 | '&' abs_decl
567 { push_type (tp_reference); $$ = $2; }
568 | direct_abs_decl
569 ;
570
571 direct_abs_decl: '(' abs_decl ')'
572 { $$ = $2; }
573 | '(' KIND '=' INT ')'
574 { push_kind_type ($4.val, $4.type); }
575 | '*' INT
576 { push_kind_type ($2.val, $2.type); }
577 | direct_abs_decl func_mod
578 { push_type (tp_function); }
579 | func_mod
580 { push_type (tp_function); }
581 ;
582
583 func_mod: '(' ')'
584 { $$ = 0; }
585 | '(' nonempty_typelist ')'
586 { free ($2); $$ = 0; }
587 ;
588
589 typebase /* Implements (approximately): (type-qualifier)* type-specifier */
590 : TYPENAME
591 { $$ = $1.type; }
592 | INT_KEYWORD
593 { $$ = parse_f_type (pstate)->builtin_integer; }
594 | INT_S2_KEYWORD
595 { $$ = parse_f_type (pstate)->builtin_integer_s2; }
596 | CHARACTER
597 { $$ = parse_f_type (pstate)->builtin_character; }
598 | LOGICAL_S8_KEYWORD
599 { $$ = parse_f_type (pstate)->builtin_logical_s8; }
600 | LOGICAL_KEYWORD
601 { $$ = parse_f_type (pstate)->builtin_logical; }
602 | LOGICAL_S2_KEYWORD
603 { $$ = parse_f_type (pstate)->builtin_logical_s2; }
604 | LOGICAL_S1_KEYWORD
605 { $$ = parse_f_type (pstate)->builtin_logical_s1; }
606 | REAL_KEYWORD
607 { $$ = parse_f_type (pstate)->builtin_real; }
608 | REAL_S8_KEYWORD
609 { $$ = parse_f_type (pstate)->builtin_real_s8; }
610 | REAL_S16_KEYWORD
611 { $$ = parse_f_type (pstate)->builtin_real_s16; }
612 | COMPLEX_S8_KEYWORD
613 { $$ = parse_f_type (pstate)->builtin_complex_s8; }
614 | COMPLEX_S16_KEYWORD
615 { $$ = parse_f_type (pstate)->builtin_complex_s16; }
616 | COMPLEX_S32_KEYWORD
617 { $$ = parse_f_type (pstate)->builtin_complex_s32; }
618 ;
619
620 nonempty_typelist
621 : type
622 { $$ = (struct type **) malloc (sizeof (struct type *) * 2);
623 $<ivec>$[0] = 1; /* Number of types in vector */
624 $$[1] = $1;
625 }
626 | nonempty_typelist ',' type
627 { int len = sizeof (struct type *) * (++($<ivec>1[0]) + 1);
628 $$ = (struct type **) realloc ((char *) $1, len);
629 $$[$<ivec>$[0]] = $3;
630 }
631 ;
632
633 name : NAME
634 { $$ = $1.stoken; }
635 ;
636
637 name_not_typename : NAME
638 /* These would be useful if name_not_typename was useful, but it is just
639 a fake for "variable", so these cause reduce/reduce conflicts because
640 the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
641 =exp) or just an exp. If name_not_typename was ever used in an lvalue
642 context where only a name could occur, this might be useful.
643 | NAME_OR_INT
644 */
645 ;
646
647 %%
648
649 /* Take care of parsing a number (anything that starts with a digit).
650 Set yylval and return the token type; update lexptr.
651 LEN is the number of characters in it. */
652
653 /*** Needs some error checking for the float case ***/
654
655 static int
656 parse_number (struct parser_state *par_state,
657 const char *p, int len, int parsed_float, YYSTYPE *putithere)
658 {
659 LONGEST n = 0;
660 LONGEST prevn = 0;
661 int c;
662 int base = input_radix;
663 int unsigned_p = 0;
664 int long_p = 0;
665 ULONGEST high_bit;
666 struct type *signed_type;
667 struct type *unsigned_type;
668
669 if (parsed_float)
670 {
671 /* It's a float since it contains a point or an exponent. */
672 /* [dD] is not understood as an exponent by parse_float,
673 change it to 'e'. */
674 char *tmp, *tmp2;
675
676 tmp = xstrdup (p);
677 for (tmp2 = tmp; *tmp2; ++tmp2)
678 if (*tmp2 == 'd' || *tmp2 == 'D')
679 *tmp2 = 'e';
680
681 /* FIXME: Should this use different types? */
682 putithere->typed_val_float.type = parse_f_type (pstate)->builtin_real_s8;
683 bool parsed = parse_float (tmp, len,
684 putithere->typed_val_float.type,
685 putithere->typed_val_float.val);
686 free (tmp);
687 return parsed? FLOAT : ERROR;
688 }
689
690 /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
691 if (p[0] == '0')
692 switch (p[1])
693 {
694 case 'x':
695 case 'X':
696 if (len >= 3)
697 {
698 p += 2;
699 base = 16;
700 len -= 2;
701 }
702 break;
703
704 case 't':
705 case 'T':
706 case 'd':
707 case 'D':
708 if (len >= 3)
709 {
710 p += 2;
711 base = 10;
712 len -= 2;
713 }
714 break;
715
716 default:
717 base = 8;
718 break;
719 }
720
721 while (len-- > 0)
722 {
723 c = *p++;
724 if (isupper (c))
725 c = tolower (c);
726 if (len == 0 && c == 'l')
727 long_p = 1;
728 else if (len == 0 && c == 'u')
729 unsigned_p = 1;
730 else
731 {
732 int i;
733 if (c >= '0' && c <= '9')
734 i = c - '0';
735 else if (c >= 'a' && c <= 'f')
736 i = c - 'a' + 10;
737 else
738 return ERROR; /* Char not a digit */
739 if (i >= base)
740 return ERROR; /* Invalid digit in this base */
741 n *= base;
742 n += i;
743 }
744 /* Portably test for overflow (only works for nonzero values, so make
745 a second check for zero). */
746 if ((prevn >= n) && n != 0)
747 unsigned_p=1; /* Try something unsigned */
748 /* If range checking enabled, portably test for unsigned overflow. */
749 if (RANGE_CHECK && n != 0)
750 {
751 if ((unsigned_p && (unsigned)prevn >= (unsigned)n))
752 range_error (_("Overflow on numeric constant."));
753 }
754 prevn = n;
755 }
756
757 /* If the number is too big to be an int, or it's got an l suffix
758 then it's a long. Work out if this has to be a long by
759 shifting right and seeing if anything remains, and the
760 target int size is different to the target long size.
761
762 In the expression below, we could have tested
763 (n >> gdbarch_int_bit (parse_gdbarch))
764 to see if it was zero,
765 but too many compilers warn about that, when ints and longs
766 are the same size. So we shift it twice, with fewer bits
767 each time, for the same result. */
768
769 if ((gdbarch_int_bit (par_state->gdbarch ())
770 != gdbarch_long_bit (par_state->gdbarch ())
771 && ((n >> 2)
772 >> (gdbarch_int_bit (par_state->gdbarch ())-2))) /* Avoid
773 shift warning */
774 || long_p)
775 {
776 high_bit = ((ULONGEST)1)
777 << (gdbarch_long_bit (par_state->gdbarch ())-1);
778 unsigned_type = parse_type (par_state)->builtin_unsigned_long;
779 signed_type = parse_type (par_state)->builtin_long;
780 }
781 else
782 {
783 high_bit =
784 ((ULONGEST)1) << (gdbarch_int_bit (par_state->gdbarch ()) - 1);
785 unsigned_type = parse_type (par_state)->builtin_unsigned_int;
786 signed_type = parse_type (par_state)->builtin_int;
787 }
788
789 putithere->typed_val.val = n;
790
791 /* If the high bit of the worked out type is set then this number
792 has to be unsigned. */
793
794 if (unsigned_p || (n & high_bit))
795 putithere->typed_val.type = unsigned_type;
796 else
797 putithere->typed_val.type = signed_type;
798
799 return INT;
800 }
801
802 /* Called to setup the type stack when we encounter a '(kind=N)' type
803 modifier, performs some bounds checking on 'N' and then pushes this to
804 the type stack followed by the 'tp_kind' marker. */
805 static void
806 push_kind_type (LONGEST val, struct type *type)
807 {
808 int ival;
809
810 if (TYPE_UNSIGNED (type))
811 {
812 ULONGEST uval = static_cast <ULONGEST> (val);
813 if (uval > INT_MAX)
814 error (_("kind value out of range"));
815 ival = static_cast <int> (uval);
816 }
817 else
818 {
819 if (val > INT_MAX || val < 0)
820 error (_("kind value out of range"));
821 ival = static_cast <int> (val);
822 }
823
824 push_type_int (ival);
825 push_type (tp_kind);
826 }
827
828 /* Called when a type has a '(kind=N)' modifier after it, for example
829 'character(kind=1)'. The BASETYPE is the type described by 'character'
830 in our example, and KIND is the integer '1'. This function returns a
831 new type that represents the basetype of a specific kind. */
832 static struct type *
833 convert_to_kind_type (struct type *basetype, int kind)
834 {
835 if (basetype == parse_f_type (pstate)->builtin_character)
836 {
837 /* Character of kind 1 is a special case, this is the same as the
838 base character type. */
839 if (kind == 1)
840 return parse_f_type (pstate)->builtin_character;
841 }
842 else if (basetype == parse_f_type (pstate)->builtin_complex_s8)
843 {
844 if (kind == 4)
845 return parse_f_type (pstate)->builtin_complex_s8;
846 else if (kind == 8)
847 return parse_f_type (pstate)->builtin_complex_s16;
848 else if (kind == 16)
849 return parse_f_type (pstate)->builtin_complex_s32;
850 }
851 else if (basetype == parse_f_type (pstate)->builtin_real)
852 {
853 if (kind == 4)
854 return parse_f_type (pstate)->builtin_real;
855 else if (kind == 8)
856 return parse_f_type (pstate)->builtin_real_s8;
857 else if (kind == 16)
858 return parse_f_type (pstate)->builtin_real_s16;
859 }
860 else if (basetype == parse_f_type (pstate)->builtin_logical)
861 {
862 if (kind == 1)
863 return parse_f_type (pstate)->builtin_logical_s1;
864 else if (kind == 2)
865 return parse_f_type (pstate)->builtin_logical_s2;
866 else if (kind == 4)
867 return parse_f_type (pstate)->builtin_logical;
868 else if (kind == 8)
869 return parse_f_type (pstate)->builtin_logical_s8;
870 }
871 else if (basetype == parse_f_type (pstate)->builtin_integer)
872 {
873 if (kind == 2)
874 return parse_f_type (pstate)->builtin_integer_s2;
875 else if (kind == 4)
876 return parse_f_type (pstate)->builtin_integer;
877 else if (kind == 8)
878 return parse_f_type (pstate)->builtin_integer_s8;
879 }
880
881 error (_("unsupported kind %d for type %s"),
882 kind, TYPE_SAFE_NAME (basetype));
883
884 /* Should never get here. */
885 return nullptr;
886 }
887
888 struct token
889 {
890 /* The string to match against. */
891 const char *oper;
892
893 /* The lexer token to return. */
894 int token;
895
896 /* The expression opcode to embed within the token. */
897 enum exp_opcode opcode;
898
899 /* When this is true the string in OPER is matched exactly including
900 case, when this is false OPER is matched case insensitively. */
901 bool case_sensitive;
902 };
903
904 static const struct token dot_ops[] =
905 {
906 { ".and.", BOOL_AND, BINOP_END, false },
907 { ".or.", BOOL_OR, BINOP_END, false },
908 { ".not.", BOOL_NOT, BINOP_END, false },
909 { ".eq.", EQUAL, BINOP_END, false },
910 { ".eqv.", EQUAL, BINOP_END, false },
911 { ".neqv.", NOTEQUAL, BINOP_END, false },
912 { ".ne.", NOTEQUAL, BINOP_END, false },
913 { ".le.", LEQ, BINOP_END, false },
914 { ".ge.", GEQ, BINOP_END, false },
915 { ".gt.", GREATERTHAN, BINOP_END, false },
916 { ".lt.", LESSTHAN, BINOP_END, false },
917 };
918
919 /* Holds the Fortran representation of a boolean, and the integer value we
920 substitute in when one of the matching strings is parsed. */
921 struct f77_boolean_val
922 {
923 /* The string representing a Fortran boolean. */
924 const char *name;
925
926 /* The integer value to replace it with. */
927 int value;
928 };
929
930 /* The set of Fortran booleans. These are matched case insensitively. */
931 static const struct f77_boolean_val boolean_values[] =
932 {
933 { ".true.", 1 },
934 { ".false.", 0 }
935 };
936
937 static const struct token f77_keywords[] =
938 {
939 /* Historically these have always been lowercase only in GDB. */
940 { "complex_16", COMPLEX_S16_KEYWORD, BINOP_END, true },
941 { "complex_32", COMPLEX_S32_KEYWORD, BINOP_END, true },
942 { "character", CHARACTER, BINOP_END, true },
943 { "integer_2", INT_S2_KEYWORD, BINOP_END, true },
944 { "logical_1", LOGICAL_S1_KEYWORD, BINOP_END, true },
945 { "logical_2", LOGICAL_S2_KEYWORD, BINOP_END, true },
946 { "logical_8", LOGICAL_S8_KEYWORD, BINOP_END, true },
947 { "complex_8", COMPLEX_S8_KEYWORD, BINOP_END, true },
948 { "integer", INT_KEYWORD, BINOP_END, true },
949 { "logical", LOGICAL_KEYWORD, BINOP_END, true },
950 { "real_16", REAL_S16_KEYWORD, BINOP_END, true },
951 { "complex", COMPLEX_S8_KEYWORD, BINOP_END, true },
952 { "sizeof", SIZEOF, BINOP_END, true },
953 { "real_8", REAL_S8_KEYWORD, BINOP_END, true },
954 { "real", REAL_KEYWORD, BINOP_END, true },
955 /* The following correspond to actual functions in Fortran and are case
956 insensitive. */
957 { "kind", KIND, BINOP_END, false },
958 { "abs", UNOP_INTRINSIC, UNOP_ABS, false }
959 };
960
961 /* Implementation of a dynamically expandable buffer for processing input
962 characters acquired through lexptr and building a value to return in
963 yylval. Ripped off from ch-exp.y */
964
965 static char *tempbuf; /* Current buffer contents */
966 static int tempbufsize; /* Size of allocated buffer */
967 static int tempbufindex; /* Current index into buffer */
968
969 #define GROWBY_MIN_SIZE 64 /* Minimum amount to grow buffer by */
970
971 #define CHECKBUF(size) \
972 do { \
973 if (tempbufindex + (size) >= tempbufsize) \
974 { \
975 growbuf_by_size (size); \
976 } \
977 } while (0);
978
979
980 /* Grow the static temp buffer if necessary, including allocating the
981 first one on demand. */
982
983 static void
984 growbuf_by_size (int count)
985 {
986 int growby;
987
988 growby = std::max (count, GROWBY_MIN_SIZE);
989 tempbufsize += growby;
990 if (tempbuf == NULL)
991 tempbuf = (char *) malloc (tempbufsize);
992 else
993 tempbuf = (char *) realloc (tempbuf, tempbufsize);
994 }
995
996 /* Blatantly ripped off from ch-exp.y. This routine recognizes F77
997 string-literals.
998
999 Recognize a string literal. A string literal is a nonzero sequence
1000 of characters enclosed in matching single quotes, except that
1001 a single character inside single quotes is a character literal, which
1002 we reject as a string literal. To embed the terminator character inside
1003 a string, it is simply doubled (I.E. 'this''is''one''string') */
1004
1005 static int
1006 match_string_literal (void)
1007 {
1008 const char *tokptr = lexptr;
1009
1010 for (tempbufindex = 0, tokptr++; *tokptr != '\0'; tokptr++)
1011 {
1012 CHECKBUF (1);
1013 if (*tokptr == *lexptr)
1014 {
1015 if (*(tokptr + 1) == *lexptr)
1016 tokptr++;
1017 else
1018 break;
1019 }
1020 tempbuf[tempbufindex++] = *tokptr;
1021 }
1022 if (*tokptr == '\0' /* no terminator */
1023 || tempbufindex == 0) /* no string */
1024 return 0;
1025 else
1026 {
1027 tempbuf[tempbufindex] = '\0';
1028 yylval.sval.ptr = tempbuf;
1029 yylval.sval.length = tempbufindex;
1030 lexptr = ++tokptr;
1031 return STRING_LITERAL;
1032 }
1033 }
1034
1035 /* Read one token, getting characters through lexptr. */
1036
1037 static int
1038 yylex (void)
1039 {
1040 int c;
1041 int namelen;
1042 unsigned int token;
1043 const char *tokstart;
1044
1045 retry:
1046
1047 prev_lexptr = lexptr;
1048
1049 tokstart = lexptr;
1050
1051 /* First of all, let us make sure we are not dealing with the
1052 special tokens .true. and .false. which evaluate to 1 and 0. */
1053
1054 if (*lexptr == '.')
1055 {
1056 for (int i = 0; i < ARRAY_SIZE (boolean_values); i++)
1057 {
1058 if (strncasecmp (tokstart, boolean_values[i].name,
1059 strlen (boolean_values[i].name)) == 0)
1060 {
1061 lexptr += strlen (boolean_values[i].name);
1062 yylval.lval = boolean_values[i].value;
1063 return BOOLEAN_LITERAL;
1064 }
1065 }
1066 }
1067
1068 /* See if it is a special .foo. operator. */
1069 for (int i = 0; i < ARRAY_SIZE (dot_ops); i++)
1070 if (strncasecmp (tokstart, dot_ops[i].oper,
1071 strlen (dot_ops[i].oper)) == 0)
1072 {
1073 gdb_assert (!dot_ops[i].case_sensitive);
1074 lexptr += strlen (dot_ops[i].oper);
1075 yylval.opcode = dot_ops[i].opcode;
1076 return dot_ops[i].token;
1077 }
1078
1079 /* See if it is an exponentiation operator. */
1080
1081 if (strncmp (tokstart, "**", 2) == 0)
1082 {
1083 lexptr += 2;
1084 yylval.opcode = BINOP_EXP;
1085 return STARSTAR;
1086 }
1087
1088 switch (c = *tokstart)
1089 {
1090 case 0:
1091 return 0;
1092
1093 case ' ':
1094 case '\t':
1095 case '\n':
1096 lexptr++;
1097 goto retry;
1098
1099 case '\'':
1100 token = match_string_literal ();
1101 if (token != 0)
1102 return (token);
1103 break;
1104
1105 case '(':
1106 paren_depth++;
1107 lexptr++;
1108 return c;
1109
1110 case ')':
1111 if (paren_depth == 0)
1112 return 0;
1113 paren_depth--;
1114 lexptr++;
1115 return c;
1116
1117 case ',':
1118 if (comma_terminates && paren_depth == 0)
1119 return 0;
1120 lexptr++;
1121 return c;
1122
1123 case '.':
1124 /* Might be a floating point number. */
1125 if (lexptr[1] < '0' || lexptr[1] > '9')
1126 goto symbol; /* Nope, must be a symbol. */
1127 /* FALL THRU. */
1128
1129 case '0':
1130 case '1':
1131 case '2':
1132 case '3':
1133 case '4':
1134 case '5':
1135 case '6':
1136 case '7':
1137 case '8':
1138 case '9':
1139 {
1140 /* It's a number. */
1141 int got_dot = 0, got_e = 0, got_d = 0, toktype;
1142 const char *p = tokstart;
1143 int hex = input_radix > 10;
1144
1145 if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
1146 {
1147 p += 2;
1148 hex = 1;
1149 }
1150 else if (c == '0' && (p[1]=='t' || p[1]=='T'
1151 || p[1]=='d' || p[1]=='D'))
1152 {
1153 p += 2;
1154 hex = 0;
1155 }
1156
1157 for (;; ++p)
1158 {
1159 if (!hex && !got_e && (*p == 'e' || *p == 'E'))
1160 got_dot = got_e = 1;
1161 else if (!hex && !got_d && (*p == 'd' || *p == 'D'))
1162 got_dot = got_d = 1;
1163 else if (!hex && !got_dot && *p == '.')
1164 got_dot = 1;
1165 else if (((got_e && (p[-1] == 'e' || p[-1] == 'E'))
1166 || (got_d && (p[-1] == 'd' || p[-1] == 'D')))
1167 && (*p == '-' || *p == '+'))
1168 /* This is the sign of the exponent, not the end of the
1169 number. */
1170 continue;
1171 /* We will take any letters or digits. parse_number will
1172 complain if past the radix, or if L or U are not final. */
1173 else if ((*p < '0' || *p > '9')
1174 && ((*p < 'a' || *p > 'z')
1175 && (*p < 'A' || *p > 'Z')))
1176 break;
1177 }
1178 toktype = parse_number (pstate, tokstart, p - tokstart,
1179 got_dot|got_e|got_d,
1180 &yylval);
1181 if (toktype == ERROR)
1182 {
1183 char *err_copy = (char *) alloca (p - tokstart + 1);
1184
1185 memcpy (err_copy, tokstart, p - tokstart);
1186 err_copy[p - tokstart] = 0;
1187 error (_("Invalid number \"%s\"."), err_copy);
1188 }
1189 lexptr = p;
1190 return toktype;
1191 }
1192
1193 case '+':
1194 case '-':
1195 case '*':
1196 case '/':
1197 case '%':
1198 case '|':
1199 case '&':
1200 case '^':
1201 case '~':
1202 case '!':
1203 case '@':
1204 case '<':
1205 case '>':
1206 case '[':
1207 case ']':
1208 case '?':
1209 case ':':
1210 case '=':
1211 case '{':
1212 case '}':
1213 symbol:
1214 lexptr++;
1215 return c;
1216 }
1217
1218 if (!(c == '_' || c == '$' || c ==':'
1219 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
1220 /* We must have come across a bad character (e.g. ';'). */
1221 error (_("Invalid character '%c' in expression."), c);
1222
1223 namelen = 0;
1224 for (c = tokstart[namelen];
1225 (c == '_' || c == '$' || c == ':' || (c >= '0' && c <= '9')
1226 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'));
1227 c = tokstart[++namelen]);
1228
1229 /* The token "if" terminates the expression and is NOT
1230 removed from the input stream. */
1231
1232 if (namelen == 2 && tokstart[0] == 'i' && tokstart[1] == 'f')
1233 return 0;
1234
1235 lexptr += namelen;
1236
1237 /* Catch specific keywords. */
1238
1239 for (int i = 0; i < ARRAY_SIZE (f77_keywords); i++)
1240 if (strlen (f77_keywords[i].oper) == namelen
1241 && ((!f77_keywords[i].case_sensitive
1242 && strncasecmp (tokstart, f77_keywords[i].oper, namelen) == 0)
1243 || (f77_keywords[i].case_sensitive
1244 && strncmp (tokstart, f77_keywords[i].oper, namelen) == 0)))
1245 {
1246 yylval.opcode = f77_keywords[i].opcode;
1247 return f77_keywords[i].token;
1248 }
1249
1250 yylval.sval.ptr = tokstart;
1251 yylval.sval.length = namelen;
1252
1253 if (*tokstart == '$')
1254 {
1255 write_dollar_variable (pstate, yylval.sval);
1256 return DOLLAR_VARIABLE;
1257 }
1258
1259 /* Use token-type TYPENAME for symbols that happen to be defined
1260 currently as names of types; NAME for other symbols.
1261 The caller is not constrained to care about the distinction. */
1262 {
1263 char *tmp = copy_name (yylval.sval);
1264 struct block_symbol result;
1265 struct field_of_this_result is_a_field_of_this;
1266 enum domain_enum_tag lookup_domains[] =
1267 {
1268 STRUCT_DOMAIN,
1269 VAR_DOMAIN,
1270 MODULE_DOMAIN
1271 };
1272 int hextype;
1273
1274 for (int i = 0; i < ARRAY_SIZE (lookup_domains); ++i)
1275 {
1276 /* Initialize this in case we *don't* use it in this call; that
1277 way we can refer to it unconditionally below. */
1278 memset (&is_a_field_of_this, 0, sizeof (is_a_field_of_this));
1279
1280 result = lookup_symbol (tmp, pstate->expression_context_block,
1281 lookup_domains[i],
1282 pstate->language ()->la_language
1283 == language_cplus
1284 ? &is_a_field_of_this : NULL);
1285 if (result.symbol && SYMBOL_CLASS (result.symbol) == LOC_TYPEDEF)
1286 {
1287 yylval.tsym.type = SYMBOL_TYPE (result.symbol);
1288 return TYPENAME;
1289 }
1290
1291 if (result.symbol)
1292 break;
1293 }
1294
1295 yylval.tsym.type
1296 = language_lookup_primitive_type (pstate->language (),
1297 pstate->gdbarch (), tmp);
1298 if (yylval.tsym.type != NULL)
1299 return TYPENAME;
1300
1301 /* Input names that aren't symbols but ARE valid hex numbers,
1302 when the input radix permits them, can be names or numbers
1303 depending on the parse. Note we support radixes > 16 here. */
1304 if (!result.symbol
1305 && ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10)
1306 || (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10)))
1307 {
1308 YYSTYPE newlval; /* Its value is ignored. */
1309 hextype = parse_number (pstate, tokstart, namelen, 0, &newlval);
1310 if (hextype == INT)
1311 {
1312 yylval.ssym.sym = result;
1313 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1314 return NAME_OR_INT;
1315 }
1316 }
1317
1318 /* Any other kind of symbol */
1319 yylval.ssym.sym = result;
1320 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1321 return NAME;
1322 }
1323 }
1324
1325 int
1326 f_parse (struct parser_state *par_state)
1327 {
1328 /* Setting up the parser state. */
1329 scoped_restore pstate_restore = make_scoped_restore (&pstate);
1330 scoped_restore restore_yydebug = make_scoped_restore (&yydebug,
1331 parser_debug);
1332 gdb_assert (par_state != NULL);
1333 pstate = par_state;
1334 paren_depth = 0;
1335
1336 return yyparse ();
1337 }
1338
1339 static void
1340 yyerror (const char *msg)
1341 {
1342 if (prev_lexptr)
1343 lexptr = prev_lexptr;
1344
1345 error (_("A %s in expression, near `%s'."), msg, lexptr);
1346 }
This page took 0.0612 seconds and 5 git commands to generate.