1 /* YACC parser for Pascal expressions, for GDB.
2 Copyright (C) 2000-2019 Free Software Foundation, Inc.
4 This file is part of GDB.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 /* This file is derived from c-exp.y */
21 /* Parse a Pascal expression from text in a string,
22 and return the result as a struct expression pointer.
23 That structure contains arithmetic operations in reverse polish,
24 with constants represented by operations that are followed by special data.
25 See expression.h for the details of the format.
26 What is important here is that it can be built up sequentially
27 during the process of parsing; the lower levels of the tree always
28 come first in the result.
30 Note that malloc's and realloc's in this file are transformed to
31 xmalloc and xrealloc respectively by the same sed command in the
32 makefile that remaps any other malloc/realloc inserted by the parser
33 generator. Doing this with #defines and trying to control the interaction
34 with include files (<malloc.h> and <stdlib.h> for example) just became
35 too messy, particularly when such includes can be inserted at random
36 times by the parser generator. */
38 /* Known bugs or limitations:
39 - pascal string operations are not supported at all.
40 - there are some problems with boolean types.
41 - Pascal type hexadecimal constants are not supported
42 because they conflict with the internal variables format.
43 Probably also lots of other problems, less well defined PM. */
48 #include "expression.h"
50 #include "parser-defs.h"
53 #include "bfd.h" /* Required by objfiles.h. */
54 #include "symfile.h" /* Required by objfiles.h. */
55 #include "objfiles.h" /* For have_full_symbols and have_partial_symbols. */
57 #include "completer.h"
59 #define parse_type(ps) builtin_type (ps->gdbarch ())
61 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror,
63 #define GDB_YY_REMAP_PREFIX pascal_
66 /* The state of the parser, used internally when we are parsing the
69 static struct parser_state *pstate = NULL;
71 /* Depth of parentheses. */
72 static int paren_depth;
76 static int yylex (void);
78 static void yyerror (const char *);
80 static char *uptok (const char *, int);
83 /* Although the yacc "value" of an expression is not used,
84 since the result is stored in the structure being created,
85 other node types do have values. */
102 struct symtoken ssym;
104 const struct block *bval;
105 enum exp_opcode opcode;
106 struct internalvar *ivar;
113 /* YYSTYPE gets defined by %union */
114 static int parse_number (struct parser_state *,
115 const char *, int, int, YYSTYPE *);
117 static struct type *current_type;
118 static struct internalvar *intvar;
119 static int leftdiv_is_integer;
120 static void push_current_type (void);
121 static void pop_current_type (void);
122 static int search_field;
125 %type <voidval> exp exp1 type_exp start normal_start variable qualified_name
126 %type <tval> type typebase
127 /* %type <bval> block */
129 /* Fancy type parsing. */
132 %token <typed_val_int> INT
133 %token <typed_val_float> FLOAT
135 /* Both NAME and TYPENAME tokens represent symbols in the input,
136 and both convey their data as strings.
137 But a TYPENAME is a string that happens to be defined as a typedef
138 or builtin type name (such as int or char)
139 and a NAME is any other symbol.
140 Contexts where this distinction is not important can use the
141 nonterminal "name", which matches either NAME or TYPENAME. */
144 %token <sval> FIELDNAME
145 %token <voidval> COMPLETE
146 %token <ssym> NAME /* BLOCKNAME defined below to give it higher precedence. */
147 %token <tsym> TYPENAME
149 %type <ssym> name_not_typename
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. */
156 %token <ssym> NAME_OR_INT
158 %token STRUCT CLASS SIZEOF COLONCOLON
161 /* Special type cases, put in to allow the parser to distinguish different
164 %token <voidval> DOLLAR_VARIABLE
169 %token <lval> TRUEKEYWORD FALSEKEYWORD
179 %left '<' '>' LEQ GEQ
180 %left LSH RSH DIV MOD
184 %right UNARY INCREMENT DECREMENT
185 %right ARROW '.' '[' '('
187 %token <ssym> BLOCKNAME
194 start : { current_type = NULL;
197 leftdiv_is_integer = 0;
208 { write_exp_elt_opcode (pstate, OP_TYPE);
209 write_exp_elt_type (pstate, $1);
210 write_exp_elt_opcode (pstate, OP_TYPE);
211 current_type = $1; } ;
213 /* Expressions, including the comma operator. */
216 { write_exp_elt_opcode (pstate, BINOP_COMMA); }
219 /* Expressions, not including the comma operator. */
220 exp : exp '^' %prec UNARY
221 { write_exp_elt_opcode (pstate, UNOP_IND);
223 current_type = TYPE_TARGET_TYPE (current_type); }
226 exp : '@' exp %prec UNARY
227 { write_exp_elt_opcode (pstate, UNOP_ADDR);
229 current_type = TYPE_POINTER_TYPE (current_type); }
232 exp : '-' exp %prec UNARY
233 { write_exp_elt_opcode (pstate, UNOP_NEG); }
236 exp : NOT exp %prec UNARY
237 { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
240 exp : INCREMENT '(' exp ')' %prec UNARY
241 { write_exp_elt_opcode (pstate, UNOP_PREINCREMENT); }
244 exp : DECREMENT '(' exp ')' %prec UNARY
245 { write_exp_elt_opcode (pstate, UNOP_PREDECREMENT); }
249 field_exp : exp '.' %prec UNARY
250 { search_field = 1; }
253 exp : field_exp FIELDNAME
254 { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
255 write_exp_string (pstate, $2);
256 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
260 while (TYPE_CODE (current_type)
263 TYPE_TARGET_TYPE (current_type);
264 current_type = lookup_struct_elt_type (
265 current_type, $2.ptr, 0);
272 { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
273 write_exp_string (pstate, $2);
274 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
278 while (TYPE_CODE (current_type)
281 TYPE_TARGET_TYPE (current_type);
282 current_type = lookup_struct_elt_type (
283 current_type, $2.ptr, 0);
287 exp : field_exp name COMPLETE
288 { mark_struct_expression (pstate);
289 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
290 write_exp_string (pstate, $2);
291 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
293 exp : field_exp COMPLETE
295 mark_struct_expression (pstate);
296 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
299 write_exp_string (pstate, s);
300 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
304 /* We need to save the current_type value. */
305 { const char *arrayname;
307 arrayfieldindex = is_pascal_string_type (
308 current_type, NULL, NULL,
309 NULL, NULL, &arrayname);
312 struct stoken stringsval;
315 buf = (char *) alloca (strlen (arrayname) + 1);
316 stringsval.ptr = buf;
317 stringsval.length = strlen (arrayname);
318 strcpy (buf, arrayname);
319 current_type = TYPE_FIELD_TYPE (current_type,
320 arrayfieldindex - 1);
321 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
322 write_exp_string (pstate, stringsval);
323 write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
325 push_current_type (); }
327 { pop_current_type ();
328 write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT);
330 current_type = TYPE_TARGET_TYPE (current_type); }
334 /* This is to save the value of arglist_len
335 being accumulated by an outer function call. */
336 { push_current_type ();
338 arglist ')' %prec ARROW
339 { write_exp_elt_opcode (pstate, OP_FUNCALL);
340 write_exp_elt_longcst (pstate,
341 (LONGEST) end_arglist ());
342 write_exp_elt_opcode (pstate, OP_FUNCALL);
345 current_type = TYPE_TARGET_TYPE (current_type);
352 | arglist ',' exp %prec ABOVE_COMMA
356 exp : type '(' exp ')' %prec UNARY
359 /* Allow automatic dereference of classes. */
360 if ((TYPE_CODE (current_type) == TYPE_CODE_PTR)
361 && (TYPE_CODE (TYPE_TARGET_TYPE (current_type)) == TYPE_CODE_STRUCT)
362 && (TYPE_CODE ($1) == TYPE_CODE_STRUCT))
363 write_exp_elt_opcode (pstate, UNOP_IND);
365 write_exp_elt_opcode (pstate, UNOP_CAST);
366 write_exp_elt_type (pstate, $1);
367 write_exp_elt_opcode (pstate, UNOP_CAST);
375 /* Binary operators in order of decreasing precedence. */
378 { write_exp_elt_opcode (pstate, BINOP_MUL); }
382 if (current_type && is_integral_type (current_type))
383 leftdiv_is_integer = 1;
387 if (leftdiv_is_integer && current_type
388 && is_integral_type (current_type))
390 write_exp_elt_opcode (pstate, UNOP_CAST);
391 write_exp_elt_type (pstate,
393 ->builtin_long_double);
395 = parse_type (pstate)->builtin_long_double;
396 write_exp_elt_opcode (pstate, UNOP_CAST);
397 leftdiv_is_integer = 0;
400 write_exp_elt_opcode (pstate, BINOP_DIV);
405 { write_exp_elt_opcode (pstate, BINOP_INTDIV); }
409 { write_exp_elt_opcode (pstate, BINOP_REM); }
413 { write_exp_elt_opcode (pstate, BINOP_ADD); }
417 { write_exp_elt_opcode (pstate, BINOP_SUB); }
421 { write_exp_elt_opcode (pstate, BINOP_LSH); }
425 { write_exp_elt_opcode (pstate, BINOP_RSH); }
429 { write_exp_elt_opcode (pstate, BINOP_EQUAL);
430 current_type = parse_type (pstate)->builtin_bool;
434 exp : exp NOTEQUAL exp
435 { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL);
436 current_type = parse_type (pstate)->builtin_bool;
441 { write_exp_elt_opcode (pstate, BINOP_LEQ);
442 current_type = parse_type (pstate)->builtin_bool;
447 { write_exp_elt_opcode (pstate, BINOP_GEQ);
448 current_type = parse_type (pstate)->builtin_bool;
453 { write_exp_elt_opcode (pstate, BINOP_LESS);
454 current_type = parse_type (pstate)->builtin_bool;
459 { write_exp_elt_opcode (pstate, BINOP_GTR);
460 current_type = parse_type (pstate)->builtin_bool;
465 { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
469 { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
473 { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
477 { write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
481 { write_exp_elt_opcode (pstate, OP_BOOL);
482 write_exp_elt_longcst (pstate, (LONGEST) $1);
483 current_type = parse_type (pstate)->builtin_bool;
484 write_exp_elt_opcode (pstate, OP_BOOL); }
488 { write_exp_elt_opcode (pstate, OP_BOOL);
489 write_exp_elt_longcst (pstate, (LONGEST) $1);
490 current_type = parse_type (pstate)->builtin_bool;
491 write_exp_elt_opcode (pstate, OP_BOOL); }
495 { write_exp_elt_opcode (pstate, OP_LONG);
496 write_exp_elt_type (pstate, $1.type);
497 current_type = $1.type;
498 write_exp_elt_longcst (pstate, (LONGEST)($1.val));
499 write_exp_elt_opcode (pstate, OP_LONG); }
504 parse_number (pstate, $1.stoken.ptr,
505 $1.stoken.length, 0, &val);
506 write_exp_elt_opcode (pstate, OP_LONG);
507 write_exp_elt_type (pstate, val.typed_val_int.type);
508 current_type = val.typed_val_int.type;
509 write_exp_elt_longcst (pstate, (LONGEST)
510 val.typed_val_int.val);
511 write_exp_elt_opcode (pstate, OP_LONG);
517 { write_exp_elt_opcode (pstate, OP_FLOAT);
518 write_exp_elt_type (pstate, $1.type);
519 current_type = $1.type;
520 write_exp_elt_floatcst (pstate, $1.val);
521 write_exp_elt_opcode (pstate, OP_FLOAT); }
527 exp : DOLLAR_VARIABLE
528 /* Already written by write_dollar_variable.
529 Handle current_type. */
531 struct value * val, * mark;
533 mark = value_mark ();
534 val = value_of_internalvar (pstate->gdbarch (),
536 current_type = value_type (val);
537 value_release_to_mark (mark);
542 exp : SIZEOF '(' type ')' %prec UNARY
543 { write_exp_elt_opcode (pstate, OP_LONG);
544 write_exp_elt_type (pstate,
545 parse_type (pstate)->builtin_int);
546 current_type = parse_type (pstate)->builtin_int;
547 $3 = check_typedef ($3);
548 write_exp_elt_longcst (pstate,
549 (LONGEST) TYPE_LENGTH ($3));
550 write_exp_elt_opcode (pstate, OP_LONG); }
553 exp : SIZEOF '(' exp ')' %prec UNARY
554 { write_exp_elt_opcode (pstate, UNOP_SIZEOF);
555 current_type = parse_type (pstate)->builtin_int; }
558 { /* C strings are converted into array constants with
559 an explicit null byte added at the end. Thus
560 the array upper bound is the string length.
561 There is no such thing in C as a completely empty
563 const char *sp = $1.ptr; int count = $1.length;
567 write_exp_elt_opcode (pstate, OP_LONG);
568 write_exp_elt_type (pstate,
571 write_exp_elt_longcst (pstate,
573 write_exp_elt_opcode (pstate, OP_LONG);
575 write_exp_elt_opcode (pstate, OP_LONG);
576 write_exp_elt_type (pstate,
579 write_exp_elt_longcst (pstate, (LONGEST)'\0');
580 write_exp_elt_opcode (pstate, OP_LONG);
581 write_exp_elt_opcode (pstate, OP_ARRAY);
582 write_exp_elt_longcst (pstate, (LONGEST) 0);
583 write_exp_elt_longcst (pstate,
584 (LONGEST) ($1.length));
585 write_exp_elt_opcode (pstate, OP_ARRAY); }
591 struct value * this_val;
592 struct type * this_type;
593 write_exp_elt_opcode (pstate, OP_THIS);
594 write_exp_elt_opcode (pstate, OP_THIS);
595 /* We need type of this. */
597 = value_of_this_silent (pstate->language ());
599 this_type = value_type (this_val);
604 if (TYPE_CODE (this_type) == TYPE_CODE_PTR)
606 this_type = TYPE_TARGET_TYPE (this_type);
607 write_exp_elt_opcode (pstate, UNOP_IND);
611 current_type = this_type;
615 /* end of object pascal. */
619 if ($1.sym.symbol != 0)
620 $$ = SYMBOL_BLOCK_VALUE ($1.sym.symbol);
624 lookup_symtab (copy_name ($1.stoken));
626 $$ = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (tem),
629 error (_("No file or function \"%s\"."),
630 copy_name ($1.stoken));
635 block : block COLONCOLON name
637 = lookup_symbol (copy_name ($3), $1,
638 VAR_DOMAIN, NULL).symbol;
640 if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
641 error (_("No function \"%s\" in specified context."),
643 $$ = SYMBOL_BLOCK_VALUE (tem); }
646 variable: block COLONCOLON name
647 { struct block_symbol sym;
649 sym = lookup_symbol (copy_name ($3), $1,
652 error (_("No symbol \"%s\" in specified context."),
655 write_exp_elt_opcode (pstate, OP_VAR_VALUE);
656 write_exp_elt_block (pstate, sym.block);
657 write_exp_elt_sym (pstate, sym.symbol);
658 write_exp_elt_opcode (pstate, OP_VAR_VALUE); }
661 qualified_name: typebase COLONCOLON name
663 struct type *type = $1;
665 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
666 && TYPE_CODE (type) != TYPE_CODE_UNION)
667 error (_("`%s' is not defined as an aggregate type."),
670 write_exp_elt_opcode (pstate, OP_SCOPE);
671 write_exp_elt_type (pstate, type);
672 write_exp_string (pstate, $3);
673 write_exp_elt_opcode (pstate, OP_SCOPE);
677 variable: qualified_name
680 char *name = copy_name ($2);
682 struct bound_minimal_symbol msymbol;
685 lookup_symbol (name, (const struct block *) NULL,
686 VAR_DOMAIN, NULL).symbol;
689 write_exp_elt_opcode (pstate, OP_VAR_VALUE);
690 write_exp_elt_block (pstate, NULL);
691 write_exp_elt_sym (pstate, sym);
692 write_exp_elt_opcode (pstate, OP_VAR_VALUE);
696 msymbol = lookup_bound_minimal_symbol (name);
697 if (msymbol.minsym != NULL)
698 write_exp_msymbol (pstate, msymbol);
699 else if (!have_full_symbols ()
700 && !have_partial_symbols ())
701 error (_("No symbol table is loaded. "
702 "Use the \"file\" command."));
704 error (_("No symbol \"%s\" in current context."),
709 variable: name_not_typename
710 { struct block_symbol sym = $1.sym;
714 if (symbol_read_needs_frame (sym.symbol))
715 innermost_block.update (sym);
717 write_exp_elt_opcode (pstate, OP_VAR_VALUE);
718 write_exp_elt_block (pstate, sym.block);
719 write_exp_elt_sym (pstate, sym.symbol);
720 write_exp_elt_opcode (pstate, OP_VAR_VALUE);
721 current_type = sym.symbol->type; }
722 else if ($1.is_a_field_of_this)
724 struct value * this_val;
725 struct type * this_type;
726 /* Object pascal: it hangs off of `this'. Must
727 not inadvertently convert from a method call
729 innermost_block.update (sym);
730 write_exp_elt_opcode (pstate, OP_THIS);
731 write_exp_elt_opcode (pstate, OP_THIS);
732 write_exp_elt_opcode (pstate, STRUCTOP_PTR);
733 write_exp_string (pstate, $1.stoken);
734 write_exp_elt_opcode (pstate, STRUCTOP_PTR);
735 /* We need type of this. */
737 = value_of_this_silent (pstate->language ());
739 this_type = value_type (this_val);
743 current_type = lookup_struct_elt_type (
745 copy_name ($1.stoken), 0);
751 struct bound_minimal_symbol msymbol;
752 char *arg = copy_name ($1.stoken);
755 lookup_bound_minimal_symbol (arg);
756 if (msymbol.minsym != NULL)
757 write_exp_msymbol (pstate, msymbol);
758 else if (!have_full_symbols ()
759 && !have_partial_symbols ())
760 error (_("No symbol table is loaded. "
761 "Use the \"file\" command."));
763 error (_("No symbol \"%s\" in current context."),
764 copy_name ($1.stoken));
773 /* We used to try to recognize more pointer to member types here, but
774 that didn't work (shift/reduce conflicts meant that these rules never
775 got executed). The problem is that
776 int (foo::bar::baz::bizzle)
777 is a function type but
778 int (foo::bar::baz::bizzle::*)
779 is a pointer to member type. Stroustrup loses again! */
784 typebase /* Implements (approximately): (type-qualifier)* type-specifier */
786 { $$ = lookup_pointer_type ($2); }
791 = lookup_struct (copy_name ($2),
792 pstate->expression_context_block);
796 = lookup_struct (copy_name ($2),
797 pstate->expression_context_block);
799 /* "const" and "volatile" are curently ignored. A type qualifier
800 after the type is handled in the ptype rule. I think these could
804 name : NAME { $$ = $1.stoken; }
805 | BLOCKNAME { $$ = $1.stoken; }
806 | TYPENAME { $$ = $1.stoken; }
807 | NAME_OR_INT { $$ = $1.stoken; }
810 name_not_typename : NAME
812 /* These would be useful if name_not_typename was useful, but it is just
813 a fake for "variable", so these cause reduce/reduce conflicts because
814 the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
815 =exp) or just an exp. If name_not_typename was ever used in an lvalue
816 context where only a name could occur, this might be useful.
823 /* Take care of parsing a number (anything that starts with a digit).
824 Set yylval and return the token type; update lexptr.
825 LEN is the number of characters in it. */
827 /*** Needs some error checking for the float case ***/
830 parse_number (struct parser_state *par_state,
831 const char *p, int len, int parsed_float, YYSTYPE *putithere)
833 /* FIXME: Shouldn't these be unsigned? We don't deal with negative values
834 here, and we do kind of silly things like cast to unsigned. */
841 int base = input_radix;
844 /* Number of "L" suffixes encountered. */
847 /* We have found a "L" or "U" suffix. */
848 int found_suffix = 0;
851 struct type *signed_type;
852 struct type *unsigned_type;
856 /* Handle suffixes: 'f' for float, 'l' for long double.
857 FIXME: This appears to be an extension -- do we want this? */
858 if (len >= 1 && tolower (p[len - 1]) == 'f')
860 putithere->typed_val_float.type
861 = parse_type (par_state)->builtin_float;
864 else if (len >= 1 && tolower (p[len - 1]) == 'l')
866 putithere->typed_val_float.type
867 = parse_type (par_state)->builtin_long_double;
870 /* Default type for floating-point literals is double. */
873 putithere->typed_val_float.type
874 = parse_type (par_state)->builtin_double;
877 if (!parse_float (p, len,
878 putithere->typed_val_float.type,
879 putithere->typed_val_float.val))
884 /* Handle base-switching prefixes 0x, 0t, 0d, 0. */
918 if (c >= 'A' && c <= 'Z')
920 if (c != 'l' && c != 'u')
922 if (c >= '0' && c <= '9')
930 if (base > 10 && c >= 'a' && c <= 'f')
934 n += i = c - 'a' + 10;
947 return ERROR; /* Char not a digit */
950 return ERROR; /* Invalid digit in this base. */
952 /* Portably test for overflow (only works for nonzero values, so make
953 a second check for zero). FIXME: Can't we just make n and prevn
954 unsigned and avoid this? */
955 if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
956 unsigned_p = 1; /* Try something unsigned. */
958 /* Portably test for unsigned overflow.
959 FIXME: This check is wrong; for example it doesn't find overflow
960 on 0x123456789 when LONGEST is 32 bits. */
961 if (c != 'l' && c != 'u' && n != 0)
963 if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n))
964 error (_("Numeric constant too large."));
969 /* An integer constant is an int, a long, or a long long. An L
970 suffix forces it to be long; an LL suffix forces it to be long
971 long. If not forced to a larger size, it gets the first type of
972 the above that it fits in. To figure out whether it fits, we
973 shift it right and see whether anything remains. Note that we
974 can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
975 operation, because many compilers will warn about such a shift
976 (which always produces a zero result). Sometimes gdbarch_int_bit
977 or gdbarch_long_bit will be that big, sometimes not. To deal with
978 the case where it is we just always shift the value more than
979 once, with fewer bits each time. */
981 un = (ULONGEST)n >> 2;
983 && (un >> (gdbarch_int_bit (par_state->gdbarch ()) - 2)) == 0)
986 = ((ULONGEST)1) << (gdbarch_int_bit (par_state->gdbarch ()) - 1);
988 /* A large decimal (not hex or octal) constant (between INT_MAX
989 and UINT_MAX) is a long or unsigned long, according to ANSI,
990 never an unsigned int, but this code treats it as unsigned
991 int. This probably should be fixed. GCC gives a warning on
994 unsigned_type = parse_type (par_state)->builtin_unsigned_int;
995 signed_type = parse_type (par_state)->builtin_int;
998 && (un >> (gdbarch_long_bit (par_state->gdbarch ()) - 2)) == 0)
1001 = ((ULONGEST)1) << (gdbarch_long_bit (par_state->gdbarch ()) - 1);
1002 unsigned_type = parse_type (par_state)->builtin_unsigned_long;
1003 signed_type = parse_type (par_state)->builtin_long;
1008 if (sizeof (ULONGEST) * HOST_CHAR_BIT
1009 < gdbarch_long_long_bit (par_state->gdbarch ()))
1010 /* A long long does not fit in a LONGEST. */
1011 shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1);
1013 shift = (gdbarch_long_long_bit (par_state->gdbarch ()) - 1);
1014 high_bit = (ULONGEST) 1 << shift;
1015 unsigned_type = parse_type (par_state)->builtin_unsigned_long_long;
1016 signed_type = parse_type (par_state)->builtin_long_long;
1019 putithere->typed_val_int.val = n;
1021 /* If the high bit of the worked out type is set then this number
1022 has to be unsigned. */
1024 if (unsigned_p || (n & high_bit))
1026 putithere->typed_val_int.type = unsigned_type;
1030 putithere->typed_val_int.type = signed_type;
1039 struct type *stored;
1040 struct type_push *next;
1043 static struct type_push *tp_top = NULL;
1046 push_current_type (void)
1048 struct type_push *tpnew;
1049 tpnew = (struct type_push *) malloc (sizeof (struct type_push));
1050 tpnew->next = tp_top;
1051 tpnew->stored = current_type;
1052 current_type = NULL;
1057 pop_current_type (void)
1059 struct type_push *tp = tp_top;
1062 current_type = tp->stored;
1072 enum exp_opcode opcode;
1075 static const struct token tokentab3[] =
1077 {"shr", RSH, BINOP_END},
1078 {"shl", LSH, BINOP_END},
1079 {"and", ANDAND, BINOP_END},
1080 {"div", DIV, BINOP_END},
1081 {"not", NOT, BINOP_END},
1082 {"mod", MOD, BINOP_END},
1083 {"inc", INCREMENT, BINOP_END},
1084 {"dec", DECREMENT, BINOP_END},
1085 {"xor", XOR, BINOP_END}
1088 static const struct token tokentab2[] =
1090 {"or", OR, BINOP_END},
1091 {"<>", NOTEQUAL, BINOP_END},
1092 {"<=", LEQ, BINOP_END},
1093 {">=", GEQ, BINOP_END},
1094 {":=", ASSIGN, BINOP_END},
1095 {"::", COLONCOLON, BINOP_END} };
1097 /* Allocate uppercased var: */
1098 /* make an uppercased copy of tokstart. */
1100 uptok (const char *tokstart, int namelen)
1103 char *uptokstart = (char *)malloc(namelen+1);
1104 for (i = 0;i <= namelen;i++)
1106 if ((tokstart[i]>='a' && tokstart[i]<='z'))
1107 uptokstart[i] = tokstart[i]-('a'-'A');
1109 uptokstart[i] = tokstart[i];
1111 uptokstart[namelen]='\0';
1115 /* Read one token, getting characters through lexptr. */
1122 const char *tokstart;
1125 int explen, tempbufindex;
1126 static char *tempbuf;
1127 static int tempbufsize;
1131 prev_lexptr = lexptr;
1134 explen = strlen (lexptr);
1136 /* See if it is a special token of length 3. */
1138 for (int i = 0; i < sizeof (tokentab3) / sizeof (tokentab3[0]); i++)
1139 if (strncasecmp (tokstart, tokentab3[i].oper, 3) == 0
1140 && (!isalpha (tokentab3[i].oper[0]) || explen == 3
1141 || (!isalpha (tokstart[3])
1142 && !isdigit (tokstart[3]) && tokstart[3] != '_')))
1145 yylval.opcode = tokentab3[i].opcode;
1146 return tokentab3[i].token;
1149 /* See if it is a special token of length 2. */
1151 for (int i = 0; i < sizeof (tokentab2) / sizeof (tokentab2[0]); i++)
1152 if (strncasecmp (tokstart, tokentab2[i].oper, 2) == 0
1153 && (!isalpha (tokentab2[i].oper[0]) || explen == 2
1154 || (!isalpha (tokstart[2])
1155 && !isdigit (tokstart[2]) && tokstart[2] != '_')))
1158 yylval.opcode = tokentab2[i].opcode;
1159 return tokentab2[i].token;
1162 switch (c = *tokstart)
1165 if (search_field && parse_completion)
1177 /* We either have a character constant ('0' or '\177' for example)
1178 or we have a quoted symbol reference ('foo(int,int)' in object pascal
1183 c = parse_escape (pstate->gdbarch (), &lexptr);
1185 error (_("Empty character constant."));
1187 yylval.typed_val_int.val = c;
1188 yylval.typed_val_int.type = parse_type (pstate)->builtin_char;
1193 namelen = skip_quoted (tokstart) - tokstart;
1196 lexptr = tokstart + namelen;
1197 if (lexptr[-1] != '\'')
1198 error (_("Unmatched single quote."));
1201 uptokstart = uptok(tokstart,namelen);
1204 error (_("Invalid character constant."));
1214 if (paren_depth == 0)
1221 if (pstate->comma_terminates && paren_depth == 0)
1227 /* Might be a floating point number. */
1228 if (lexptr[1] < '0' || lexptr[1] > '9')
1230 goto symbol; /* Nope, must be a symbol. */
1246 /* It's a number. */
1247 int got_dot = 0, got_e = 0, toktype;
1248 const char *p = tokstart;
1249 int hex = input_radix > 10;
1251 if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
1256 else if (c == '0' && (p[1]=='t' || p[1]=='T'
1257 || p[1]=='d' || p[1]=='D'))
1265 /* This test includes !hex because 'e' is a valid hex digit
1266 and thus does not indicate a floating point number when
1267 the radix is hex. */
1268 if (!hex && !got_e && (*p == 'e' || *p == 'E'))
1269 got_dot = got_e = 1;
1270 /* This test does not include !hex, because a '.' always indicates
1271 a decimal floating point number regardless of the radix. */
1272 else if (!got_dot && *p == '.')
1274 else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
1275 && (*p == '-' || *p == '+'))
1276 /* This is the sign of the exponent, not the end of the
1279 /* We will take any letters or digits. parse_number will
1280 complain if past the radix, or if L or U are not final. */
1281 else if ((*p < '0' || *p > '9')
1282 && ((*p < 'a' || *p > 'z')
1283 && (*p < 'A' || *p > 'Z')))
1286 toktype = parse_number (pstate, tokstart,
1287 p - tokstart, got_dot | got_e, &yylval);
1288 if (toktype == ERROR)
1290 char *err_copy = (char *) alloca (p - tokstart + 1);
1292 memcpy (err_copy, tokstart, p - tokstart);
1293 err_copy[p - tokstart] = 0;
1294 error (_("Invalid number \"%s\"."), err_copy);
1325 /* Build the gdb internal form of the input string in tempbuf,
1326 translating any standard C escape forms seen. Note that the
1327 buffer is null byte terminated *only* for the convenience of
1328 debugging gdb itself and printing the buffer contents when
1329 the buffer contains no embedded nulls. Gdb does not depend
1330 upon the buffer being null byte terminated, it uses the length
1331 string instead. This allows gdb to handle C strings (as well
1332 as strings in other languages) with embedded null bytes. */
1334 tokptr = ++tokstart;
1338 /* Grow the static temp buffer if necessary, including allocating
1339 the first one on demand. */
1340 if (tempbufindex + 1 >= tempbufsize)
1342 tempbuf = (char *) realloc (tempbuf, tempbufsize += 64);
1349 /* Do nothing, loop will terminate. */
1353 c = parse_escape (pstate->gdbarch (), &tokptr);
1358 tempbuf[tempbufindex++] = c;
1361 tempbuf[tempbufindex++] = *tokptr++;
1364 } while ((*tokptr != '"') && (*tokptr != '\0'));
1365 if (*tokptr++ != '"')
1367 error (_("Unterminated string in expression."));
1369 tempbuf[tempbufindex] = '\0'; /* See note above. */
1370 yylval.sval.ptr = tempbuf;
1371 yylval.sval.length = tempbufindex;
1376 if (!(c == '_' || c == '$'
1377 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
1378 /* We must have come across a bad character (e.g. ';'). */
1379 error (_("Invalid character '%c' in expression."), c);
1381 /* It's a name. See how long it is. */
1383 for (c = tokstart[namelen];
1384 (c == '_' || c == '$' || (c >= '0' && c <= '9')
1385 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '<');)
1387 /* Template parameter lists are part of the name.
1388 FIXME: This mishandles `print $a<4&&$a>3'. */
1392 int nesting_level = 1;
1393 while (tokstart[++i])
1395 if (tokstart[i] == '<')
1397 else if (tokstart[i] == '>')
1399 if (--nesting_level == 0)
1403 if (tokstart[i] == '>')
1409 /* do NOT uppercase internals because of registers !!! */
1410 c = tokstart[++namelen];
1413 uptokstart = uptok(tokstart,namelen);
1415 /* The token "if" terminates the expression and is NOT
1416 removed from the input stream. */
1417 if (namelen == 2 && uptokstart[0] == 'I' && uptokstart[1] == 'F')
1427 /* Catch specific keywords. Should be done with a data structure. */
1431 if (strcmp (uptokstart, "OBJECT") == 0)
1436 if (strcmp (uptokstart, "RECORD") == 0)
1441 if (strcmp (uptokstart, "SIZEOF") == 0)
1448 if (strcmp (uptokstart, "CLASS") == 0)
1453 if (strcmp (uptokstart, "FALSE") == 0)
1457 return FALSEKEYWORD;
1461 if (strcmp (uptokstart, "TRUE") == 0)
1467 if (strcmp (uptokstart, "SELF") == 0)
1469 /* Here we search for 'this' like
1470 inserted in FPC stabs debug info. */
1471 static const char this_name[] = "this";
1473 if (lookup_symbol (this_name, pstate->expression_context_block,
1474 VAR_DOMAIN, NULL).symbol)
1485 yylval.sval.ptr = tokstart;
1486 yylval.sval.length = namelen;
1488 if (*tokstart == '$')
1492 /* $ is the normal prefix for pascal hexadecimal values
1493 but this conflicts with the GDB use for debugger variables
1494 so in expression to enter hexadecimal values
1495 we still need to use C syntax with 0xff */
1496 write_dollar_variable (pstate, yylval.sval);
1497 tmp = (char *) alloca (namelen + 1);
1498 memcpy (tmp, tokstart, namelen);
1499 tmp[namelen] = '\0';
1500 intvar = lookup_only_internalvar (tmp + 1);
1502 return DOLLAR_VARIABLE;
1505 /* Use token-type BLOCKNAME for symbols that happen to be defined as
1506 functions or symtabs. If this is not so, then ...
1507 Use token-type TYPENAME for symbols that happen to be defined
1508 currently as names of types; NAME for other symbols.
1509 The caller is not constrained to care about the distinction. */
1511 char *tmp = copy_name (yylval.sval);
1513 struct field_of_this_result is_a_field_of_this;
1517 is_a_field_of_this.type = NULL;
1518 if (search_field && current_type)
1519 is_a_field = (lookup_struct_elt_type (current_type, tmp, 1) != NULL);
1523 sym = lookup_symbol (tmp, pstate->expression_context_block,
1524 VAR_DOMAIN, &is_a_field_of_this).symbol;
1525 /* second chance uppercased (as Free Pascal does). */
1526 if (!sym && is_a_field_of_this.type == NULL && !is_a_field)
1528 for (int i = 0; i <= namelen; i++)
1530 if ((tmp[i] >= 'a' && tmp[i] <= 'z'))
1531 tmp[i] -= ('a'-'A');
1533 if (search_field && current_type)
1534 is_a_field = (lookup_struct_elt_type (current_type, tmp, 1) != NULL);
1538 sym = lookup_symbol (tmp, pstate->expression_context_block,
1539 VAR_DOMAIN, &is_a_field_of_this).symbol;
1541 /* Third chance Capitalized (as GPC does). */
1542 if (!sym && is_a_field_of_this.type == NULL && !is_a_field)
1544 for (int i = 0; i <= namelen; i++)
1548 if ((tmp[i] >= 'a' && tmp[i] <= 'z'))
1549 tmp[i] -= ('a'-'A');
1552 if ((tmp[i] >= 'A' && tmp[i] <= 'Z'))
1553 tmp[i] -= ('A'-'a');
1555 if (search_field && current_type)
1556 is_a_field = (lookup_struct_elt_type (current_type, tmp, 1) != NULL);
1560 sym = lookup_symbol (tmp, pstate->expression_context_block,
1561 VAR_DOMAIN, &is_a_field_of_this).symbol;
1564 if (is_a_field || (is_a_field_of_this.type != NULL))
1566 tempbuf = (char *) realloc (tempbuf, namelen + 1);
1567 strncpy (tempbuf, tmp, namelen);
1568 tempbuf [namelen] = 0;
1569 yylval.sval.ptr = tempbuf;
1570 yylval.sval.length = namelen;
1571 yylval.ssym.sym.symbol = NULL;
1572 yylval.ssym.sym.block = NULL;
1574 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1580 /* Call lookup_symtab, not lookup_partial_symtab, in case there are
1581 no psymtabs (coff, xcoff, or some future change to blow away the
1582 psymtabs once once symbols are read). */
1583 if ((sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
1584 || lookup_symtab (tmp))
1586 yylval.ssym.sym.symbol = sym;
1587 yylval.ssym.sym.block = NULL;
1588 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1592 if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
1595 /* Despite the following flaw, we need to keep this code enabled.
1596 Because we can get called from check_stub_method, if we don't
1597 handle nested types then it screws many operations in any
1598 program which uses nested types. */
1599 /* In "A::x", if x is a member function of A and there happens
1600 to be a type (nested or not, since the stabs don't make that
1601 distinction) named x, then this code incorrectly thinks we
1602 are dealing with nested types rather than a member function. */
1605 const char *namestart;
1606 struct symbol *best_sym;
1608 /* Look ahead to detect nested types. This probably should be
1609 done in the grammar, but trying seemed to introduce a lot
1610 of shift/reduce and reduce/reduce conflicts. It's possible
1611 that it could be done, though. Or perhaps a non-grammar, but
1612 less ad hoc, approach would work well. */
1614 /* Since we do not currently have any way of distinguishing
1615 a nested type from a non-nested one (the stabs don't tell
1616 us whether a type is nested), we just ignore the
1623 /* Skip whitespace. */
1624 while (*p == ' ' || *p == '\t' || *p == '\n')
1626 if (*p == ':' && p[1] == ':')
1628 /* Skip the `::'. */
1630 /* Skip whitespace. */
1631 while (*p == ' ' || *p == '\t' || *p == '\n')
1634 while (*p == '_' || *p == '$' || (*p >= '0' && *p <= '9')
1635 || (*p >= 'a' && *p <= 'z')
1636 || (*p >= 'A' && *p <= 'Z'))
1640 struct symbol *cur_sym;
1641 /* As big as the whole rest of the expression, which is
1642 at least big enough. */
1644 = (char *) alloca (strlen (tmp) + strlen (namestart)
1649 memcpy (tmp1, tmp, strlen (tmp));
1650 tmp1 += strlen (tmp);
1651 memcpy (tmp1, "::", 2);
1653 memcpy (tmp1, namestart, p - namestart);
1654 tmp1[p - namestart] = '\0';
1656 = lookup_symbol (ncopy,
1657 pstate->expression_context_block,
1658 VAR_DOMAIN, NULL).symbol;
1661 if (SYMBOL_CLASS (cur_sym) == LOC_TYPEDEF)
1679 yylval.tsym.type = SYMBOL_TYPE (best_sym);
1681 yylval.tsym.type = SYMBOL_TYPE (sym);
1687 = language_lookup_primitive_type (pstate->language (),
1688 pstate->gdbarch (), tmp);
1689 if (yylval.tsym.type != NULL)
1695 /* Input names that aren't symbols but ARE valid hex numbers,
1696 when the input radix permits them, can be names or numbers
1697 depending on the parse. Note we support radixes > 16 here. */
1699 && ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10)
1700 || (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10)))
1702 YYSTYPE newlval; /* Its value is ignored. */
1703 hextype = parse_number (pstate, tokstart, namelen, 0, &newlval);
1706 yylval.ssym.sym.symbol = sym;
1707 yylval.ssym.sym.block = NULL;
1708 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1715 /* Any other kind of symbol. */
1716 yylval.ssym.sym.symbol = sym;
1717 yylval.ssym.sym.block = NULL;
1723 pascal_parse (struct parser_state *par_state)
1725 /* Setting up the parser state. */
1726 scoped_restore pstate_restore = make_scoped_restore (&pstate);
1727 gdb_assert (par_state != NULL);
1735 yyerror (const char *msg)
1738 lexptr = prev_lexptr;
1740 error (_("A %s in expression, near `%s'."), msg, lexptr);