2 /* YACC parser for Fortran expressions, for GDB.
3 Copyright (C) 1986-2019 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 */
58 #define parse_type(ps) builtin_type (ps->gdbarch ())
59 #define parse_f_type(ps) builtin_f_type (ps->gdbarch ())
61 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror,
63 #define GDB_YY_REMAP_PREFIX f_
66 /* The state of the parser, used internally when we are parsing the
69 static struct parser_state *pstate = NULL;
73 static int yylex (void);
75 static void yyerror (const char *);
77 static void growbuf_by_size (int);
79 static int match_string_literal (void);
81 static void push_kind_type (LONGEST val, struct type *type);
83 static struct type *convert_to_kind_type (struct type *basetype, int kind);
87 /* Although the yacc "value" of an expression is not used,
88 since the result is stored in the structure being created,
89 other node types do have values. */
106 struct symtoken ssym;
108 enum exp_opcode opcode;
109 struct internalvar *ivar;
116 /* YYSTYPE gets defined by %union */
117 static int parse_number (struct parser_state *, const char *, int,
121 %type <voidval> exp type_exp start variable
122 %type <tval> type typebase
123 %type <tvec> nonempty_typelist
124 /* %type <bval> block */
126 /* Fancy type parsing. */
127 %type <voidval> func_mod direct_abs_decl abs_decl
130 %token <typed_val> INT
131 %token <typed_val_float> FLOAT
133 /* Both NAME and TYPENAME tokens represent symbols in the input,
134 and both convey their data as strings.
135 But a TYPENAME is a string that happens to be defined as a typedef
136 or builtin type name (such as int or char)
137 and a NAME is any other symbol.
138 Contexts where this distinction is not important can use the
139 nonterminal "name", which matches either NAME or TYPENAME. */
141 %token <sval> STRING_LITERAL
142 %token <lval> BOOLEAN_LITERAL
144 %token <tsym> TYPENAME
146 %type <ssym> name_not_typename
148 /* A NAME_OR_INT is a symbol which is not known in the symbol table,
149 but which would parse as a valid number in the current input radix.
150 E.g. "c" when input_radix==16. Depending on the parse, it will be
151 turned into a name or into a number. */
153 %token <ssym> NAME_OR_INT
158 /* Special type cases, put in to allow the parser to distinguish different
160 %token INT_KEYWORD INT_S2_KEYWORD LOGICAL_S1_KEYWORD LOGICAL_S2_KEYWORD
161 %token LOGICAL_S8_KEYWORD
162 %token LOGICAL_KEYWORD REAL_KEYWORD REAL_S8_KEYWORD REAL_S16_KEYWORD
163 %token COMPLEX_S8_KEYWORD COMPLEX_S16_KEYWORD COMPLEX_S32_KEYWORD
164 %token BOOL_AND BOOL_OR BOOL_NOT
165 %token <lval> CHARACTER
167 %token <voidval> DOLLAR_VARIABLE
169 %token <opcode> ASSIGN_MODIFY
170 %token <opcode> UNOP_INTRINSIC
174 %right '=' ASSIGN_MODIFY
183 %left LESSTHAN GREATERTHAN LEQ GEQ
201 { write_exp_elt_opcode (pstate, OP_TYPE);
202 write_exp_elt_type (pstate, $1);
203 write_exp_elt_opcode (pstate, OP_TYPE); }
210 /* Expressions, not including the comma operator. */
211 exp : '*' exp %prec UNARY
212 { write_exp_elt_opcode (pstate, UNOP_IND); }
215 exp : '&' exp %prec UNARY
216 { write_exp_elt_opcode (pstate, UNOP_ADDR); }
219 exp : '-' exp %prec UNARY
220 { write_exp_elt_opcode (pstate, UNOP_NEG); }
223 exp : BOOL_NOT exp %prec UNARY
224 { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
227 exp : '~' exp %prec UNARY
228 { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); }
231 exp : SIZEOF exp %prec UNARY
232 { write_exp_elt_opcode (pstate, UNOP_SIZEOF); }
235 exp : KIND '(' exp ')' %prec UNARY
236 { write_exp_elt_opcode (pstate, UNOP_KIND); }
239 /* No more explicit array operators, we treat everything in F77 as
240 a function call. The disambiguation as to whether we are
241 doing a subscript operation or a function call is done
245 { start_arglist (); }
247 { write_exp_elt_opcode (pstate,
248 OP_F77_UNDETERMINED_ARGLIST);
249 write_exp_elt_longcst (pstate,
250 (LONGEST) end_arglist ());
251 write_exp_elt_opcode (pstate,
252 OP_F77_UNDETERMINED_ARGLIST); }
255 exp : UNOP_INTRINSIC '(' exp ')'
256 { write_exp_elt_opcode (pstate, $1); }
270 arglist : arglist ',' exp %prec ABOVE_COMMA
274 /* There are four sorts of subrange types in F90. */
276 subrange: exp ':' exp %prec ABOVE_COMMA
277 { write_exp_elt_opcode (pstate, OP_RANGE);
278 write_exp_elt_longcst (pstate, NONE_BOUND_DEFAULT);
279 write_exp_elt_opcode (pstate, OP_RANGE); }
282 subrange: exp ':' %prec ABOVE_COMMA
283 { write_exp_elt_opcode (pstate, OP_RANGE);
284 write_exp_elt_longcst (pstate, HIGH_BOUND_DEFAULT);
285 write_exp_elt_opcode (pstate, OP_RANGE); }
288 subrange: ':' exp %prec ABOVE_COMMA
289 { write_exp_elt_opcode (pstate, OP_RANGE);
290 write_exp_elt_longcst (pstate, LOW_BOUND_DEFAULT);
291 write_exp_elt_opcode (pstate, OP_RANGE); }
294 subrange: ':' %prec ABOVE_COMMA
295 { write_exp_elt_opcode (pstate, OP_RANGE);
296 write_exp_elt_longcst (pstate, BOTH_BOUND_DEFAULT);
297 write_exp_elt_opcode (pstate, OP_RANGE); }
300 complexnum: exp ',' exp
304 exp : '(' complexnum ')'
305 { write_exp_elt_opcode (pstate, OP_COMPLEX);
306 write_exp_elt_type (pstate,
307 parse_f_type (pstate)
308 ->builtin_complex_s16);
309 write_exp_elt_opcode (pstate, OP_COMPLEX); }
312 exp : '(' type ')' exp %prec UNARY
313 { write_exp_elt_opcode (pstate, UNOP_CAST);
314 write_exp_elt_type (pstate, $2);
315 write_exp_elt_opcode (pstate, UNOP_CAST); }
319 { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
320 write_exp_string (pstate, $3);
321 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
324 /* Binary operators in order of decreasing precedence. */
327 { write_exp_elt_opcode (pstate, BINOP_REPEAT); }
330 exp : exp STARSTAR exp
331 { write_exp_elt_opcode (pstate, BINOP_EXP); }
335 { write_exp_elt_opcode (pstate, BINOP_MUL); }
339 { write_exp_elt_opcode (pstate, BINOP_DIV); }
343 { write_exp_elt_opcode (pstate, BINOP_ADD); }
347 { write_exp_elt_opcode (pstate, BINOP_SUB); }
351 { write_exp_elt_opcode (pstate, BINOP_LSH); }
355 { write_exp_elt_opcode (pstate, BINOP_RSH); }
359 { write_exp_elt_opcode (pstate, BINOP_EQUAL); }
362 exp : exp NOTEQUAL exp
363 { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
367 { write_exp_elt_opcode (pstate, BINOP_LEQ); }
371 { write_exp_elt_opcode (pstate, BINOP_GEQ); }
374 exp : exp LESSTHAN exp
375 { write_exp_elt_opcode (pstate, BINOP_LESS); }
378 exp : exp GREATERTHAN exp
379 { write_exp_elt_opcode (pstate, BINOP_GTR); }
383 { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
387 { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
391 { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
394 exp : exp BOOL_AND exp
395 { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
399 exp : exp BOOL_OR exp
400 { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
404 { write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
407 exp : exp ASSIGN_MODIFY exp
408 { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY);
409 write_exp_elt_opcode (pstate, $2);
410 write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY); }
414 { write_exp_elt_opcode (pstate, OP_LONG);
415 write_exp_elt_type (pstate, $1.type);
416 write_exp_elt_longcst (pstate, (LONGEST) ($1.val));
417 write_exp_elt_opcode (pstate, OP_LONG); }
422 parse_number (pstate, $1.stoken.ptr,
423 $1.stoken.length, 0, &val);
424 write_exp_elt_opcode (pstate, OP_LONG);
425 write_exp_elt_type (pstate, val.typed_val.type);
426 write_exp_elt_longcst (pstate,
427 (LONGEST)val.typed_val.val);
428 write_exp_elt_opcode (pstate, OP_LONG); }
432 { write_exp_elt_opcode (pstate, OP_FLOAT);
433 write_exp_elt_type (pstate, $1.type);
434 write_exp_elt_floatcst (pstate, $1.val);
435 write_exp_elt_opcode (pstate, OP_FLOAT); }
441 exp : DOLLAR_VARIABLE
444 exp : SIZEOF '(' type ')' %prec UNARY
445 { write_exp_elt_opcode (pstate, OP_LONG);
446 write_exp_elt_type (pstate,
447 parse_f_type (pstate)
449 $3 = check_typedef ($3);
450 write_exp_elt_longcst (pstate,
451 (LONGEST) TYPE_LENGTH ($3));
452 write_exp_elt_opcode (pstate, OP_LONG); }
455 exp : BOOLEAN_LITERAL
456 { write_exp_elt_opcode (pstate, OP_BOOL);
457 write_exp_elt_longcst (pstate, (LONGEST) $1);
458 write_exp_elt_opcode (pstate, OP_BOOL);
464 write_exp_elt_opcode (pstate, OP_STRING);
465 write_exp_string (pstate, $1);
466 write_exp_elt_opcode (pstate, OP_STRING);
470 variable: name_not_typename
471 { struct block_symbol sym = $1.sym;
475 if (symbol_read_needs_frame (sym.symbol))
476 innermost_block.update (sym);
477 write_exp_elt_opcode (pstate, OP_VAR_VALUE);
478 write_exp_elt_block (pstate, sym.block);
479 write_exp_elt_sym (pstate, sym.symbol);
480 write_exp_elt_opcode (pstate, OP_VAR_VALUE);
485 struct bound_minimal_symbol msymbol;
486 char *arg = copy_name ($1.stoken);
489 lookup_bound_minimal_symbol (arg);
490 if (msymbol.minsym != NULL)
491 write_exp_msymbol (pstate, msymbol);
492 else if (!have_full_symbols () && !have_partial_symbols ())
493 error (_("No symbol table is loaded. Use the \"file\" command."));
495 error (_("No symbol \"%s\" in current context."),
496 copy_name ($1.stoken));
508 /* This is where the interesting stuff happens. */
511 struct type *follow_type = $1;
512 struct type *range_type;
521 follow_type = lookup_pointer_type (follow_type);
524 follow_type = lookup_lvalue_reference_type (follow_type);
527 array_size = pop_type_int ();
528 if (array_size != -1)
531 create_static_range_type ((struct type *) NULL,
532 parse_f_type (pstate)
536 create_array_type ((struct type *) NULL,
537 follow_type, range_type);
540 follow_type = lookup_pointer_type (follow_type);
543 follow_type = lookup_function_type (follow_type);
547 int kind_val = pop_type_int ();
549 = convert_to_kind_type (follow_type, kind_val);
558 { push_type (tp_pointer); $$ = 0; }
560 { push_type (tp_pointer); $$ = $2; }
562 { push_type (tp_reference); $$ = 0; }
564 { push_type (tp_reference); $$ = $2; }
568 direct_abs_decl: '(' abs_decl ')'
570 | '(' KIND '=' INT ')'
571 { push_kind_type ($4.val, $4.type); }
573 { push_kind_type ($2.val, $2.type); }
574 | direct_abs_decl func_mod
575 { push_type (tp_function); }
577 { push_type (tp_function); }
582 | '(' nonempty_typelist ')'
583 { free ($2); $$ = 0; }
586 typebase /* Implements (approximately): (type-qualifier)* type-specifier */
590 { $$ = parse_f_type (pstate)->builtin_integer; }
592 { $$ = parse_f_type (pstate)->builtin_integer_s2; }
594 { $$ = parse_f_type (pstate)->builtin_character; }
596 { $$ = parse_f_type (pstate)->builtin_logical_s8; }
598 { $$ = parse_f_type (pstate)->builtin_logical; }
600 { $$ = parse_f_type (pstate)->builtin_logical_s2; }
602 { $$ = parse_f_type (pstate)->builtin_logical_s1; }
604 { $$ = parse_f_type (pstate)->builtin_real; }
606 { $$ = parse_f_type (pstate)->builtin_real_s8; }
608 { $$ = parse_f_type (pstate)->builtin_real_s16; }
610 { $$ = parse_f_type (pstate)->builtin_complex_s8; }
611 | COMPLEX_S16_KEYWORD
612 { $$ = parse_f_type (pstate)->builtin_complex_s16; }
613 | COMPLEX_S32_KEYWORD
614 { $$ = parse_f_type (pstate)->builtin_complex_s32; }
619 { $$ = (struct type **) malloc (sizeof (struct type *) * 2);
620 $<ivec>$[0] = 1; /* Number of types in vector */
623 | nonempty_typelist ',' type
624 { int len = sizeof (struct type *) * (++($<ivec>1[0]) + 1);
625 $$ = (struct type **) realloc ((char *) $1, len);
626 $$[$<ivec>$[0]] = $3;
634 name_not_typename : NAME
635 /* These would be useful if name_not_typename was useful, but it is just
636 a fake for "variable", so these cause reduce/reduce conflicts because
637 the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
638 =exp) or just an exp. If name_not_typename was ever used in an lvalue
639 context where only a name could occur, this might be useful.
646 /* Take care of parsing a number (anything that starts with a digit).
647 Set yylval and return the token type; update lexptr.
648 LEN is the number of characters in it. */
650 /*** Needs some error checking for the float case ***/
653 parse_number (struct parser_state *par_state,
654 const char *p, int len, int parsed_float, YYSTYPE *putithere)
659 int base = input_radix;
663 struct type *signed_type;
664 struct type *unsigned_type;
668 /* It's a float since it contains a point or an exponent. */
669 /* [dD] is not understood as an exponent by parse_float,
674 for (tmp2 = tmp; *tmp2; ++tmp2)
675 if (*tmp2 == 'd' || *tmp2 == 'D')
678 /* FIXME: Should this use different types? */
679 putithere->typed_val_float.type = parse_f_type (pstate)->builtin_real_s8;
680 bool parsed = parse_float (tmp, len,
681 putithere->typed_val_float.type,
682 putithere->typed_val_float.val);
684 return parsed? FLOAT : ERROR;
687 /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
723 if (len == 0 && c == 'l')
725 else if (len == 0 && c == 'u')
730 if (c >= '0' && c <= '9')
732 else if (c >= 'a' && c <= 'f')
735 return ERROR; /* Char not a digit */
737 return ERROR; /* Invalid digit in this base */
741 /* Portably test for overflow (only works for nonzero values, so make
742 a second check for zero). */
743 if ((prevn >= n) && n != 0)
744 unsigned_p=1; /* Try something unsigned */
745 /* If range checking enabled, portably test for unsigned overflow. */
746 if (RANGE_CHECK && n != 0)
748 if ((unsigned_p && (unsigned)prevn >= (unsigned)n))
749 range_error (_("Overflow on numeric constant."));
754 /* If the number is too big to be an int, or it's got an l suffix
755 then it's a long. Work out if this has to be a long by
756 shifting right and seeing if anything remains, and the
757 target int size is different to the target long size.
759 In the expression below, we could have tested
760 (n >> gdbarch_int_bit (parse_gdbarch))
761 to see if it was zero,
762 but too many compilers warn about that, when ints and longs
763 are the same size. So we shift it twice, with fewer bits
764 each time, for the same result. */
766 if ((gdbarch_int_bit (par_state->gdbarch ())
767 != gdbarch_long_bit (par_state->gdbarch ())
769 >> (gdbarch_int_bit (par_state->gdbarch ())-2))) /* Avoid
773 high_bit = ((ULONGEST)1)
774 << (gdbarch_long_bit (par_state->gdbarch ())-1);
775 unsigned_type = parse_type (par_state)->builtin_unsigned_long;
776 signed_type = parse_type (par_state)->builtin_long;
781 ((ULONGEST)1) << (gdbarch_int_bit (par_state->gdbarch ()) - 1);
782 unsigned_type = parse_type (par_state)->builtin_unsigned_int;
783 signed_type = parse_type (par_state)->builtin_int;
786 putithere->typed_val.val = n;
788 /* If the high bit of the worked out type is set then this number
789 has to be unsigned. */
791 if (unsigned_p || (n & high_bit))
792 putithere->typed_val.type = unsigned_type;
794 putithere->typed_val.type = signed_type;
799 /* Called to setup the type stack when we encounter a '(kind=N)' type
800 modifier, performs some bounds checking on 'N' and then pushes this to
801 the type stack followed by the 'tp_kind' marker. */
803 push_kind_type (LONGEST val, struct type *type)
807 if (TYPE_UNSIGNED (type))
809 ULONGEST uval = static_cast <ULONGEST> (val);
811 error (_("kind value out of range"));
812 ival = static_cast <int> (uval);
816 if (val > INT_MAX || val < 0)
817 error (_("kind value out of range"));
818 ival = static_cast <int> (val);
821 push_type_int (ival);
825 /* Called when a type has a '(kind=N)' modifier after it, for example
826 'character(kind=1)'. The BASETYPE is the type described by 'character'
827 in our example, and KIND is the integer '1'. This function returns a
828 new type that represents the basetype of a specific kind. */
830 convert_to_kind_type (struct type *basetype, int kind)
832 if (basetype == parse_f_type (pstate)->builtin_character)
834 /* Character of kind 1 is a special case, this is the same as the
835 base character type. */
837 return parse_f_type (pstate)->builtin_character;
839 else if (basetype == parse_f_type (pstate)->builtin_complex_s8)
842 return parse_f_type (pstate)->builtin_complex_s8;
844 return parse_f_type (pstate)->builtin_complex_s16;
846 return parse_f_type (pstate)->builtin_complex_s32;
848 else if (basetype == parse_f_type (pstate)->builtin_real)
851 return parse_f_type (pstate)->builtin_real;
853 return parse_f_type (pstate)->builtin_real_s8;
855 return parse_f_type (pstate)->builtin_real_s16;
857 else if (basetype == parse_f_type (pstate)->builtin_logical)
860 return parse_f_type (pstate)->builtin_logical_s1;
862 return parse_f_type (pstate)->builtin_logical_s2;
864 return parse_f_type (pstate)->builtin_logical;
866 return parse_f_type (pstate)->builtin_logical_s8;
868 else if (basetype == parse_f_type (pstate)->builtin_integer)
871 return parse_f_type (pstate)->builtin_integer_s2;
873 return parse_f_type (pstate)->builtin_integer;
875 return parse_f_type (pstate)->builtin_integer_s8;
878 error (_("unsupported kind %d for type %s"),
879 kind, TYPE_SAFE_NAME (basetype));
881 /* Should never get here. */
887 /* The string to match against. */
890 /* The lexer token to return. */
893 /* The expression opcode to embed within the token. */
894 enum exp_opcode opcode;
896 /* When this is true the string in OPER is matched exactly including
897 case, when this is false OPER is matched case insensitively. */
901 static const struct token dot_ops[] =
903 { ".and.", BOOL_AND, BINOP_END, false },
904 { ".or.", BOOL_OR, BINOP_END, false },
905 { ".not.", BOOL_NOT, BINOP_END, false },
906 { ".eq.", EQUAL, BINOP_END, false },
907 { ".eqv.", EQUAL, BINOP_END, false },
908 { ".neqv.", NOTEQUAL, BINOP_END, false },
909 { ".ne.", NOTEQUAL, BINOP_END, false },
910 { ".le.", LEQ, BINOP_END, false },
911 { ".ge.", GEQ, BINOP_END, false },
912 { ".gt.", GREATERTHAN, BINOP_END, false },
913 { ".lt.", LESSTHAN, BINOP_END, false },
916 /* Holds the Fortran representation of a boolean, and the integer value we
917 substitute in when one of the matching strings is parsed. */
918 struct f77_boolean_val
920 /* The string representing a Fortran boolean. */
923 /* The integer value to replace it with. */
927 /* The set of Fortran booleans. These are matched case insensitively. */
928 static const struct f77_boolean_val boolean_values[] =
934 static const struct token f77_keywords[] =
936 /* Historically these have always been lowercase only in GDB. */
937 { "complex_16", COMPLEX_S16_KEYWORD, BINOP_END, true },
938 { "complex_32", COMPLEX_S32_KEYWORD, BINOP_END, true },
939 { "character", CHARACTER, BINOP_END, true },
940 { "integer_2", INT_S2_KEYWORD, BINOP_END, true },
941 { "logical_1", LOGICAL_S1_KEYWORD, BINOP_END, true },
942 { "logical_2", LOGICAL_S2_KEYWORD, BINOP_END, true },
943 { "logical_8", LOGICAL_S8_KEYWORD, BINOP_END, true },
944 { "complex_8", COMPLEX_S8_KEYWORD, BINOP_END, true },
945 { "integer", INT_KEYWORD, BINOP_END, true },
946 { "logical", LOGICAL_KEYWORD, BINOP_END, true },
947 { "real_16", REAL_S16_KEYWORD, BINOP_END, true },
948 { "complex", COMPLEX_S8_KEYWORD, BINOP_END, true },
949 { "sizeof", SIZEOF, BINOP_END, true },
950 { "real_8", REAL_S8_KEYWORD, BINOP_END, true },
951 { "real", REAL_KEYWORD, BINOP_END, true },
952 /* The following correspond to actual functions in Fortran and are case
954 { "kind", KIND, BINOP_END, false },
955 { "abs", UNOP_INTRINSIC, UNOP_ABS, false }
958 /* Implementation of a dynamically expandable buffer for processing input
959 characters acquired through lexptr and building a value to return in
960 yylval. Ripped off from ch-exp.y */
962 static char *tempbuf; /* Current buffer contents */
963 static int tempbufsize; /* Size of allocated buffer */
964 static int tempbufindex; /* Current index into buffer */
966 #define GROWBY_MIN_SIZE 64 /* Minimum amount to grow buffer by */
968 #define CHECKBUF(size) \
970 if (tempbufindex + (size) >= tempbufsize) \
972 growbuf_by_size (size); \
977 /* Grow the static temp buffer if necessary, including allocating the
978 first one on demand. */
981 growbuf_by_size (int count)
985 growby = std::max (count, GROWBY_MIN_SIZE);
986 tempbufsize += growby;
988 tempbuf = (char *) malloc (tempbufsize);
990 tempbuf = (char *) realloc (tempbuf, tempbufsize);
993 /* Blatantly ripped off from ch-exp.y. This routine recognizes F77
996 Recognize a string literal. A string literal is a nonzero sequence
997 of characters enclosed in matching single quotes, except that
998 a single character inside single quotes is a character literal, which
999 we reject as a string literal. To embed the terminator character inside
1000 a string, it is simply doubled (I.E. 'this''is''one''string') */
1003 match_string_literal (void)
1005 const char *tokptr = lexptr;
1007 for (tempbufindex = 0, tokptr++; *tokptr != '\0'; tokptr++)
1010 if (*tokptr == *lexptr)
1012 if (*(tokptr + 1) == *lexptr)
1017 tempbuf[tempbufindex++] = *tokptr;
1019 if (*tokptr == '\0' /* no terminator */
1020 || tempbufindex == 0) /* no string */
1024 tempbuf[tempbufindex] = '\0';
1025 yylval.sval.ptr = tempbuf;
1026 yylval.sval.length = tempbufindex;
1028 return STRING_LITERAL;
1032 /* Read one token, getting characters through lexptr. */
1040 const char *tokstart;
1044 prev_lexptr = lexptr;
1048 /* First of all, let us make sure we are not dealing with the
1049 special tokens .true. and .false. which evaluate to 1 and 0. */
1053 for (int i = 0; i < ARRAY_SIZE (boolean_values); i++)
1055 if (strncasecmp (tokstart, boolean_values[i].name,
1056 strlen (boolean_values[i].name)) == 0)
1058 lexptr += strlen (boolean_values[i].name);
1059 yylval.lval = boolean_values[i].value;
1060 return BOOLEAN_LITERAL;
1065 /* See if it is a special .foo. operator. */
1066 for (int i = 0; i < ARRAY_SIZE (dot_ops); i++)
1067 if (strncasecmp (tokstart, dot_ops[i].oper,
1068 strlen (dot_ops[i].oper)) == 0)
1070 gdb_assert (!dot_ops[i].case_sensitive);
1071 lexptr += strlen (dot_ops[i].oper);
1072 yylval.opcode = dot_ops[i].opcode;
1073 return dot_ops[i].token;
1076 /* See if it is an exponentiation operator. */
1078 if (strncmp (tokstart, "**", 2) == 0)
1081 yylval.opcode = BINOP_EXP;
1085 switch (c = *tokstart)
1097 token = match_string_literal ();
1108 if (paren_depth == 0)
1115 if (comma_terminates && paren_depth == 0)
1121 /* Might be a floating point number. */
1122 if (lexptr[1] < '0' || lexptr[1] > '9')
1123 goto symbol; /* Nope, must be a symbol. */
1137 /* It's a number. */
1138 int got_dot = 0, got_e = 0, got_d = 0, toktype;
1139 const char *p = tokstart;
1140 int hex = input_radix > 10;
1142 if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
1147 else if (c == '0' && (p[1]=='t' || p[1]=='T'
1148 || p[1]=='d' || p[1]=='D'))
1156 if (!hex && !got_e && (*p == 'e' || *p == 'E'))
1157 got_dot = got_e = 1;
1158 else if (!hex && !got_d && (*p == 'd' || *p == 'D'))
1159 got_dot = got_d = 1;
1160 else if (!hex && !got_dot && *p == '.')
1162 else if (((got_e && (p[-1] == 'e' || p[-1] == 'E'))
1163 || (got_d && (p[-1] == 'd' || p[-1] == 'D')))
1164 && (*p == '-' || *p == '+'))
1165 /* This is the sign of the exponent, not the end of the
1168 /* We will take any letters or digits. parse_number will
1169 complain if past the radix, or if L or U are not final. */
1170 else if ((*p < '0' || *p > '9')
1171 && ((*p < 'a' || *p > 'z')
1172 && (*p < 'A' || *p > 'Z')))
1175 toktype = parse_number (pstate, tokstart, p - tokstart,
1176 got_dot|got_e|got_d,
1178 if (toktype == ERROR)
1180 char *err_copy = (char *) alloca (p - tokstart + 1);
1182 memcpy (err_copy, tokstart, p - tokstart);
1183 err_copy[p - tokstart] = 0;
1184 error (_("Invalid number \"%s\"."), err_copy);
1215 if (!(c == '_' || c == '$' || c ==':'
1216 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
1217 /* We must have come across a bad character (e.g. ';'). */
1218 error (_("Invalid character '%c' in expression."), c);
1221 for (c = tokstart[namelen];
1222 (c == '_' || c == '$' || c == ':' || (c >= '0' && c <= '9')
1223 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'));
1224 c = tokstart[++namelen]);
1226 /* The token "if" terminates the expression and is NOT
1227 removed from the input stream. */
1229 if (namelen == 2 && tokstart[0] == 'i' && tokstart[1] == 'f')
1234 /* Catch specific keywords. */
1236 for (int i = 0; i < ARRAY_SIZE (f77_keywords); i++)
1237 if (strlen (f77_keywords[i].oper) == namelen
1238 && ((!f77_keywords[i].case_sensitive
1239 && strncasecmp (tokstart, f77_keywords[i].oper, namelen) == 0)
1240 || (f77_keywords[i].case_sensitive
1241 && strncmp (tokstart, f77_keywords[i].oper, namelen) == 0)))
1243 yylval.opcode = f77_keywords[i].opcode;
1244 return f77_keywords[i].token;
1247 yylval.sval.ptr = tokstart;
1248 yylval.sval.length = namelen;
1250 if (*tokstart == '$')
1252 write_dollar_variable (pstate, yylval.sval);
1253 return DOLLAR_VARIABLE;
1256 /* Use token-type TYPENAME for symbols that happen to be defined
1257 currently as names of types; NAME for other symbols.
1258 The caller is not constrained to care about the distinction. */
1260 char *tmp = copy_name (yylval.sval);
1261 struct block_symbol result;
1262 struct field_of_this_result is_a_field_of_this;
1263 enum domain_enum_tag lookup_domains[] =
1271 for (int i = 0; i < ARRAY_SIZE (lookup_domains); ++i)
1273 /* Initialize this in case we *don't* use it in this call; that
1274 way we can refer to it unconditionally below. */
1275 memset (&is_a_field_of_this, 0, sizeof (is_a_field_of_this));
1277 result = lookup_symbol (tmp, pstate->expression_context_block,
1279 pstate->language ()->la_language
1281 ? &is_a_field_of_this : NULL);
1282 if (result.symbol && SYMBOL_CLASS (result.symbol) == LOC_TYPEDEF)
1284 yylval.tsym.type = SYMBOL_TYPE (result.symbol);
1293 = language_lookup_primitive_type (pstate->language (),
1294 pstate->gdbarch (), tmp);
1295 if (yylval.tsym.type != NULL)
1298 /* Input names that aren't symbols but ARE valid hex numbers,
1299 when the input radix permits them, can be names or numbers
1300 depending on the parse. Note we support radixes > 16 here. */
1302 && ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10)
1303 || (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10)))
1305 YYSTYPE newlval; /* Its value is ignored. */
1306 hextype = parse_number (pstate, tokstart, namelen, 0, &newlval);
1309 yylval.ssym.sym = result;
1310 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1315 /* Any other kind of symbol */
1316 yylval.ssym.sym = result;
1317 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1323 f_parse (struct parser_state *par_state)
1325 /* Setting up the parser state. */
1326 scoped_restore pstate_restore = make_scoped_restore (&pstate);
1327 scoped_restore restore_yydebug = make_scoped_restore (&yydebug,
1329 gdb_assert (par_state != NULL);
1336 yyerror (const char *msg)
1339 lexptr = prev_lexptr;
1341 error (_("A %s in expression, near `%s'."), msg, lexptr);