1 /* YACC parser for Pascal expressions, for GDB.
3 Free Software Foundation, Inc.
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
21 /* This file is derived from c-exp.y */
23 /* Parse a Pascal expression from text in a string,
24 and return the result as a struct expression pointer.
25 That structure contains arithmetic operations in reverse polish,
26 with constants represented by operations that are followed by special data.
27 See expression.h for the details of the format.
28 What is important here is that it can be built up sequentially
29 during the process of parsing; the lower levels of the tree always
30 come first in the result.
32 Note that malloc's and realloc's in this file are transformed to
33 xmalloc and xrealloc respectively by the same sed command in the
34 makefile that remaps any other malloc/realloc inserted by the parser
35 generator. Doing this with #defines and trying to control the interaction
36 with include files (<malloc.h> and <stdlib.h> for example) just became
37 too messy, particularly when such includes can be inserted at random
38 times by the parser generator. */
40 /* Known bugs or limitations:
41 - pascal string operations are not supported at all.
42 - there are some problems with boolean types.
43 - Pascal type hexadecimal constants are not supported
44 because they conflict with the internal variables format.
45 Probably also lots of other problems, less well defined PM */
49 #include "gdb_string.h"
51 #include "expression.h"
53 #include "parser-defs.h"
56 #include "bfd.h" /* Required by objfiles.h. */
57 #include "symfile.h" /* Required by objfiles.h. */
58 #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
60 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
61 as well as gratuitiously global symbol names, so we can have multiple
62 yacc generated parsers in gdb. Note that these are only the variables
63 produced by yacc. If other parser generators (bison, byacc, etc) produce
64 additional global names that conflict at link time, then those parser
65 generators need to be fixed instead of adding those names to this list. */
67 #define yymaxdepth pascal_maxdepth
68 #define yyparse pascal_parse
69 #define yylex pascal_lex
70 #define yyerror pascal_error
71 #define yylval pascal_lval
72 #define yychar pascal_char
73 #define yydebug pascal_debug
74 #define yypact pascal_pact
75 #define yyr1 pascal_r1
76 #define yyr2 pascal_r2
77 #define yydef pascal_def
78 #define yychk pascal_chk
79 #define yypgo pascal_pgo
80 #define yyact pascal_act
81 #define yyexca pascal_exca
82 #define yyerrflag pascal_errflag
83 #define yynerrs pascal_nerrs
84 #define yyps pascal_ps
85 #define yypv pascal_pv
87 #define yy_yys pascal_yys
88 #define yystate pascal_state
89 #define yytmp pascal_tmp
91 #define yy_yyv pascal_yyv
92 #define yyval pascal_val
93 #define yylloc pascal_lloc
94 #define yyreds pascal_reds /* With YYDEBUG defined */
95 #define yytoks pascal_toks /* With YYDEBUG defined */
96 #define yyname pascal_name /* With YYDEBUG defined */
97 #define yyrule pascal_rule /* With YYDEBUG defined */
98 #define yylhs pascal_yylhs
99 #define yylen pascal_yylen
100 #define yydefred pascal_yydefred
101 #define yydgoto pascal_yydgoto
102 #define yysindex pascal_yysindex
103 #define yyrindex pascal_yyrindex
104 #define yygindex pascal_yygindex
105 #define yytable pascal_yytable
106 #define yycheck pascal_yycheck
109 #define YYDEBUG 1 /* Default to yydebug support */
112 #define YYFPRINTF parser_fprintf
116 static int yylex (void);
121 static char * uptok (char *, int);
124 /* Although the yacc "value" of an expression is not used,
125 since the result is stored in the structure being created,
126 other node types do have values. */
143 struct symtoken ssym;
146 enum exp_opcode opcode;
147 struct internalvar *ivar;
154 /* YYSTYPE gets defined by %union */
156 parse_number (char *, int, int, YYSTYPE *);
158 static struct type *current_type;
160 static void push_current_type ();
161 static void pop_current_type ();
162 static int search_field;
165 %type <voidval> exp exp1 type_exp start normal_start variable qualified_name
166 %type <tval> type typebase
167 /* %type <bval> block */
169 /* Fancy type parsing. */
172 %token <typed_val_int> INT
173 %token <typed_val_float> FLOAT
175 /* Both NAME and TYPENAME tokens represent symbols in the input,
176 and both convey their data as strings.
177 But a TYPENAME is a string that happens to be defined as a typedef
178 or builtin type name (such as int or char)
179 and a NAME is any other symbol.
180 Contexts where this distinction is not important can use the
181 nonterminal "name", which matches either NAME or TYPENAME. */
184 %token <sval> FIELDNAME
185 %token <ssym> NAME /* BLOCKNAME defined below to give it higher precedence. */
186 %token <tsym> TYPENAME
188 %type <ssym> name_not_typename
190 /* A NAME_OR_INT is a symbol which is not known in the symbol table,
191 but which would parse as a valid number in the current input radix.
192 E.g. "c" when input_radix==16. Depending on the parse, it will be
193 turned into a name or into a number. */
195 %token <ssym> NAME_OR_INT
197 %token STRUCT CLASS SIZEOF COLONCOLON
200 /* Special type cases, put in to allow the parser to distinguish different
203 %token <voidval> VARIABLE
208 %token <lval> TRUEKEYWORD FALSEKEYWORD
218 %left '<' '>' LEQ GEQ
219 %left LSH RSH DIV MOD
223 %right UNARY INCREMENT DECREMENT
224 %right ARROW '.' '[' '('
226 %token <ssym> BLOCKNAME
233 start : { current_type = NULL;
245 { write_exp_elt_opcode(OP_TYPE);
246 write_exp_elt_type($1);
247 write_exp_elt_opcode(OP_TYPE);
248 current_type = $1; } ;
250 /* Expressions, including the comma operator. */
253 { write_exp_elt_opcode (BINOP_COMMA); }
256 /* Expressions, not including the comma operator. */
257 exp : exp '^' %prec UNARY
258 { write_exp_elt_opcode (UNOP_IND);
260 current_type = TYPE_TARGET_TYPE (current_type); }
263 exp : '@' exp %prec UNARY
264 { write_exp_elt_opcode (UNOP_ADDR);
266 current_type = TYPE_POINTER_TYPE (current_type); }
269 exp : '-' exp %prec UNARY
270 { write_exp_elt_opcode (UNOP_NEG); }
273 exp : NOT exp %prec UNARY
274 { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
277 exp : INCREMENT '(' exp ')' %prec UNARY
278 { write_exp_elt_opcode (UNOP_PREINCREMENT); }
281 exp : DECREMENT '(' exp ')' %prec UNARY
282 { write_exp_elt_opcode (UNOP_PREDECREMENT); }
285 exp : exp '.' { search_field = 1; }
288 { write_exp_elt_opcode (STRUCTOP_STRUCT);
289 write_exp_string ($4);
290 write_exp_elt_opcode (STRUCTOP_STRUCT);
293 { while (TYPE_CODE (current_type) == TYPE_CODE_PTR)
294 current_type = TYPE_TARGET_TYPE (current_type);
295 current_type = lookup_struct_elt_type (
296 current_type, $4.ptr, 0); };
299 /* We need to save the current_type value */
302 arrayfieldindex = is_pascal_string_type (
303 current_type, NULL, NULL,
304 NULL, NULL, &arrayname);
307 struct stoken stringsval;
308 stringsval.ptr = alloca (strlen (arrayname) + 1);
309 stringsval.length = strlen (arrayname);
310 strcpy (stringsval.ptr, arrayname);
311 current_type = TYPE_FIELD_TYPE (current_type,
312 arrayfieldindex - 1);
313 write_exp_elt_opcode (STRUCTOP_STRUCT);
314 write_exp_string (stringsval);
315 write_exp_elt_opcode (STRUCTOP_STRUCT);
317 push_current_type (); }
319 { pop_current_type ();
320 write_exp_elt_opcode (BINOP_SUBSCRIPT);
322 current_type = TYPE_TARGET_TYPE (current_type); }
326 /* This is to save the value of arglist_len
327 being accumulated by an outer function call. */
328 { push_current_type ();
330 arglist ')' %prec ARROW
331 { write_exp_elt_opcode (OP_FUNCALL);
332 write_exp_elt_longcst ((LONGEST) end_arglist ());
333 write_exp_elt_opcode (OP_FUNCALL);
334 pop_current_type (); }
340 | arglist ',' exp %prec ABOVE_COMMA
344 exp : type '(' exp ')' %prec UNARY
347 /* Allow automatic dereference of classes. */
348 if ((TYPE_CODE (current_type) == TYPE_CODE_PTR)
349 && (TYPE_CODE (TYPE_TARGET_TYPE (current_type)) == TYPE_CODE_CLASS)
350 && (TYPE_CODE ($1) == TYPE_CODE_CLASS))
351 write_exp_elt_opcode (UNOP_IND);
353 write_exp_elt_opcode (UNOP_CAST);
354 write_exp_elt_type ($1);
355 write_exp_elt_opcode (UNOP_CAST);
363 /* Binary operators in order of decreasing precedence. */
366 { write_exp_elt_opcode (BINOP_MUL); }
370 { write_exp_elt_opcode (BINOP_DIV); }
374 { write_exp_elt_opcode (BINOP_INTDIV); }
378 { write_exp_elt_opcode (BINOP_REM); }
382 { write_exp_elt_opcode (BINOP_ADD); }
386 { write_exp_elt_opcode (BINOP_SUB); }
390 { write_exp_elt_opcode (BINOP_LSH); }
394 { write_exp_elt_opcode (BINOP_RSH); }
398 { write_exp_elt_opcode (BINOP_EQUAL); }
401 exp : exp NOTEQUAL exp
402 { write_exp_elt_opcode (BINOP_NOTEQUAL); }
406 { write_exp_elt_opcode (BINOP_LEQ); }
410 { write_exp_elt_opcode (BINOP_GEQ); }
414 { write_exp_elt_opcode (BINOP_LESS); }
418 { write_exp_elt_opcode (BINOP_GTR); }
422 { write_exp_elt_opcode (BINOP_BITWISE_AND); }
426 { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
430 { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
434 { write_exp_elt_opcode (BINOP_ASSIGN); }
438 { write_exp_elt_opcode (OP_BOOL);
439 write_exp_elt_longcst ((LONGEST) $1);
440 write_exp_elt_opcode (OP_BOOL); }
444 { write_exp_elt_opcode (OP_BOOL);
445 write_exp_elt_longcst ((LONGEST) $1);
446 write_exp_elt_opcode (OP_BOOL); }
450 { write_exp_elt_opcode (OP_LONG);
451 write_exp_elt_type ($1.type);
452 write_exp_elt_longcst ((LONGEST)($1.val));
453 write_exp_elt_opcode (OP_LONG); }
458 parse_number ($1.stoken.ptr, $1.stoken.length, 0, &val);
459 write_exp_elt_opcode (OP_LONG);
460 write_exp_elt_type (val.typed_val_int.type);
461 write_exp_elt_longcst ((LONGEST)val.typed_val_int.val);
462 write_exp_elt_opcode (OP_LONG);
468 { write_exp_elt_opcode (OP_DOUBLE);
469 write_exp_elt_type ($1.type);
470 write_exp_elt_dblcst ($1.dval);
471 write_exp_elt_opcode (OP_DOUBLE); }
478 /* Already written by write_dollar_variable. */
481 exp : SIZEOF '(' type ')' %prec UNARY
482 { write_exp_elt_opcode (OP_LONG);
483 write_exp_elt_type (builtin_type_int);
485 write_exp_elt_longcst ((LONGEST) TYPE_LENGTH ($3));
486 write_exp_elt_opcode (OP_LONG); }
490 { /* C strings are converted into array constants with
491 an explicit null byte added at the end. Thus
492 the array upper bound is the string length.
493 There is no such thing in C as a completely empty
495 char *sp = $1.ptr; int count = $1.length;
498 write_exp_elt_opcode (OP_LONG);
499 write_exp_elt_type (builtin_type_char);
500 write_exp_elt_longcst ((LONGEST)(*sp++));
501 write_exp_elt_opcode (OP_LONG);
503 write_exp_elt_opcode (OP_LONG);
504 write_exp_elt_type (builtin_type_char);
505 write_exp_elt_longcst ((LONGEST)'\0');
506 write_exp_elt_opcode (OP_LONG);
507 write_exp_elt_opcode (OP_ARRAY);
508 write_exp_elt_longcst ((LONGEST) 0);
509 write_exp_elt_longcst ((LONGEST) ($1.length));
510 write_exp_elt_opcode (OP_ARRAY); }
516 struct value * this_val;
517 struct type * this_type;
518 write_exp_elt_opcode (OP_THIS);
519 write_exp_elt_opcode (OP_THIS);
520 /* we need type of this */
521 this_val = value_of_this (0);
523 this_type = this_val->type;
528 if (TYPE_CODE (this_type) == TYPE_CODE_PTR)
530 this_type = TYPE_TARGET_TYPE (this_type);
531 write_exp_elt_opcode (UNOP_IND);
535 current_type = this_type;
539 /* end of object pascal. */
544 $$ = SYMBOL_BLOCK_VALUE ($1.sym);
548 lookup_symtab (copy_name ($1.stoken));
550 $$ = BLOCKVECTOR_BLOCK (BLOCKVECTOR (tem), STATIC_BLOCK);
552 error ("No file or function \"%s\".",
553 copy_name ($1.stoken));
558 block : block COLONCOLON name
560 = lookup_symbol (copy_name ($3), $1,
561 VAR_NAMESPACE, (int *) NULL,
562 (struct symtab **) NULL);
563 if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
564 error ("No function \"%s\" in specified context.",
566 $$ = SYMBOL_BLOCK_VALUE (tem); }
569 variable: block COLONCOLON name
570 { struct symbol *sym;
571 sym = lookup_symbol (copy_name ($3), $1,
572 VAR_NAMESPACE, (int *) NULL,
573 (struct symtab **) NULL);
575 error ("No symbol \"%s\" in specified context.",
578 write_exp_elt_opcode (OP_VAR_VALUE);
579 /* block_found is set by lookup_symbol. */
580 write_exp_elt_block (block_found);
581 write_exp_elt_sym (sym);
582 write_exp_elt_opcode (OP_VAR_VALUE); }
585 qualified_name: typebase COLONCOLON name
587 struct type *type = $1;
588 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
589 && TYPE_CODE (type) != TYPE_CODE_UNION)
590 error ("`%s' is not defined as an aggregate type.",
593 write_exp_elt_opcode (OP_SCOPE);
594 write_exp_elt_type (type);
595 write_exp_string ($3);
596 write_exp_elt_opcode (OP_SCOPE);
600 variable: qualified_name
603 char *name = copy_name ($2);
605 struct minimal_symbol *msymbol;
608 lookup_symbol (name, (const struct block *) NULL,
609 VAR_NAMESPACE, (int *) NULL,
610 (struct symtab **) NULL);
613 write_exp_elt_opcode (OP_VAR_VALUE);
614 write_exp_elt_block (NULL);
615 write_exp_elt_sym (sym);
616 write_exp_elt_opcode (OP_VAR_VALUE);
620 msymbol = lookup_minimal_symbol (name, NULL, NULL);
623 write_exp_msymbol (msymbol,
624 lookup_function_type (builtin_type_int),
628 if (!have_full_symbols () && !have_partial_symbols ())
629 error ("No symbol table is loaded. Use the \"file\" command.");
631 error ("No symbol \"%s\" in current context.", name);
635 variable: name_not_typename
636 { struct symbol *sym = $1.sym;
640 if (symbol_read_needs_frame (sym))
642 if (innermost_block == 0 ||
643 contained_in (block_found,
645 innermost_block = block_found;
648 write_exp_elt_opcode (OP_VAR_VALUE);
649 /* We want to use the selected frame, not
650 another more inner frame which happens to
651 be in the same block. */
652 write_exp_elt_block (NULL);
653 write_exp_elt_sym (sym);
654 write_exp_elt_opcode (OP_VAR_VALUE);
655 current_type = sym->type; }
656 else if ($1.is_a_field_of_this)
658 struct value * this_val;
659 struct type * this_type;
660 /* Object pascal: it hangs off of `this'. Must
661 not inadvertently convert from a method call
663 if (innermost_block == 0 ||
664 contained_in (block_found, innermost_block))
665 innermost_block = block_found;
666 write_exp_elt_opcode (OP_THIS);
667 write_exp_elt_opcode (OP_THIS);
668 write_exp_elt_opcode (STRUCTOP_PTR);
669 write_exp_string ($1.stoken);
670 write_exp_elt_opcode (STRUCTOP_PTR);
671 /* we need type of this */
672 this_val = value_of_this (0);
674 this_type = this_val->type;
678 current_type = lookup_struct_elt_type (
680 copy_name ($1.stoken), 0);
686 struct minimal_symbol *msymbol;
687 register char *arg = copy_name ($1.stoken);
690 lookup_minimal_symbol (arg, NULL, NULL);
693 write_exp_msymbol (msymbol,
694 lookup_function_type (builtin_type_int),
697 else if (!have_full_symbols () && !have_partial_symbols ())
698 error ("No symbol table is loaded. Use the \"file\" command.");
700 error ("No symbol \"%s\" in current context.",
701 copy_name ($1.stoken));
710 /* We used to try to recognize more pointer to member types here, but
711 that didn't work (shift/reduce conflicts meant that these rules never
712 got executed). The problem is that
713 int (foo::bar::baz::bizzle)
714 is a function type but
715 int (foo::bar::baz::bizzle::*)
716 is a pointer to member type. Stroustrup loses again! */
719 | typebase COLONCOLON '*'
720 { $$ = lookup_member_type (builtin_type_int, $1); }
723 typebase /* Implements (approximately): (type-qualifier)* type-specifier */
725 { $$ = lookup_pointer_type ($2); }
729 { $$ = lookup_struct (copy_name ($2),
730 expression_context_block); }
732 { $$ = lookup_struct (copy_name ($2),
733 expression_context_block); }
734 /* "const" and "volatile" are curently ignored. A type qualifier
735 after the type is handled in the ptype rule. I think these could
739 name : NAME { $$ = $1.stoken; }
740 | BLOCKNAME { $$ = $1.stoken; }
741 | TYPENAME { $$ = $1.stoken; }
742 | NAME_OR_INT { $$ = $1.stoken; }
745 name_not_typename : NAME
747 /* These would be useful if name_not_typename was useful, but it is just
748 a fake for "variable", so these cause reduce/reduce conflicts because
749 the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
750 =exp) or just an exp. If name_not_typename was ever used in an lvalue
751 context where only a name could occur, this might be useful.
758 /* Take care of parsing a number (anything that starts with a digit).
759 Set yylval and return the token type; update lexptr.
760 LEN is the number of characters in it. */
762 /*** Needs some error checking for the float case ***/
765 parse_number (p, len, parsed_float, putithere)
771 /* FIXME: Shouldn't these be unsigned? We don't deal with negative values
772 here, and we do kind of silly things like cast to unsigned. */
773 register LONGEST n = 0;
774 register LONGEST prevn = 0;
779 register int base = input_radix;
782 /* Number of "L" suffixes encountered. */
785 /* We have found a "L" or "U" suffix. */
786 int found_suffix = 0;
789 struct type *signed_type;
790 struct type *unsigned_type;
794 /* It's a float since it contains a point or an exponent. */
796 int num = 0; /* number of tokens scanned by scanf */
797 char saved_char = p[len];
799 p[len] = 0; /* null-terminate the token */
800 if (sizeof (putithere->typed_val_float.dval) <= sizeof (float))
801 num = sscanf (p, "%g%c", (float *) &putithere->typed_val_float.dval,&c);
802 else if (sizeof (putithere->typed_val_float.dval) <= sizeof (double))
803 num = sscanf (p, "%lg%c", (double *) &putithere->typed_val_float.dval,&c);
806 #ifdef SCANF_HAS_LONG_DOUBLE
807 num = sscanf (p, "%Lg%c", &putithere->typed_val_float.dval,&c);
809 /* Scan it into a double, then assign it to the long double.
810 This at least wins with values representable in the range
813 num = sscanf (p, "%lg%c", &temp,&c);
814 putithere->typed_val_float.dval = temp;
817 p[len] = saved_char; /* restore the input stream */
818 if (num != 1) /* check scanf found ONLY a float ... */
820 /* See if it has `f' or `l' suffix (float or long double). */
822 c = tolower (p[len - 1]);
825 putithere->typed_val_float.type = builtin_type_float;
827 putithere->typed_val_float.type = builtin_type_long_double;
828 else if (isdigit (c) || c == '.')
829 putithere->typed_val_float.type = builtin_type_double;
836 /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
870 if (c >= 'A' && c <= 'Z')
872 if (c != 'l' && c != 'u')
874 if (c >= '0' && c <= '9')
882 if (base > 10 && c >= 'a' && c <= 'f')
886 n += i = c - 'a' + 10;
899 return ERROR; /* Char not a digit */
902 return ERROR; /* Invalid digit in this base */
904 /* Portably test for overflow (only works for nonzero values, so make
905 a second check for zero). FIXME: Can't we just make n and prevn
906 unsigned and avoid this? */
907 if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
908 unsigned_p = 1; /* Try something unsigned */
910 /* Portably test for unsigned overflow.
911 FIXME: This check is wrong; for example it doesn't find overflow
912 on 0x123456789 when LONGEST is 32 bits. */
913 if (c != 'l' && c != 'u' && n != 0)
915 if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n))
916 error ("Numeric constant too large.");
921 /* An integer constant is an int, a long, or a long long. An L
922 suffix forces it to be long; an LL suffix forces it to be long
923 long. If not forced to a larger size, it gets the first type of
924 the above that it fits in. To figure out whether it fits, we
925 shift it right and see whether anything remains. Note that we
926 can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
927 operation, because many compilers will warn about such a shift
928 (which always produces a zero result). Sometimes TARGET_INT_BIT
929 or TARGET_LONG_BIT will be that big, sometimes not. To deal with
930 the case where it is we just always shift the value more than
931 once, with fewer bits each time. */
933 un = (ULONGEST)n >> 2;
935 && (un >> (TARGET_INT_BIT - 2)) == 0)
937 high_bit = ((ULONGEST)1) << (TARGET_INT_BIT-1);
939 /* A large decimal (not hex or octal) constant (between INT_MAX
940 and UINT_MAX) is a long or unsigned long, according to ANSI,
941 never an unsigned int, but this code treats it as unsigned
942 int. This probably should be fixed. GCC gives a warning on
945 unsigned_type = builtin_type_unsigned_int;
946 signed_type = builtin_type_int;
949 && (un >> (TARGET_LONG_BIT - 2)) == 0)
951 high_bit = ((ULONGEST)1) << (TARGET_LONG_BIT-1);
952 unsigned_type = builtin_type_unsigned_long;
953 signed_type = builtin_type_long;
958 if (sizeof (ULONGEST) * HOST_CHAR_BIT < TARGET_LONG_LONG_BIT)
959 /* A long long does not fit in a LONGEST. */
960 shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1);
962 shift = (TARGET_LONG_LONG_BIT - 1);
963 high_bit = (ULONGEST) 1 << shift;
964 unsigned_type = builtin_type_unsigned_long_long;
965 signed_type = builtin_type_long_long;
968 putithere->typed_val_int.val = n;
970 /* If the high bit of the worked out type is set then this number
971 has to be unsigned. */
973 if (unsigned_p || (n & high_bit))
975 putithere->typed_val_int.type = unsigned_type;
979 putithere->typed_val_int.type = signed_type;
989 struct type_push *next;
992 static struct type_push *tp_top = NULL;
994 static void push_current_type ()
996 struct type_push *tpnew;
997 tpnew = (struct type_push *) malloc (sizeof (struct type_push));
998 tpnew->next = tp_top;
999 tpnew->stored = current_type;
1000 current_type = NULL;
1004 static void pop_current_type ()
1006 struct type_push *tp = tp_top;
1009 current_type = tp->stored;
1019 enum exp_opcode opcode;
1022 static const struct token tokentab3[] =
1024 {"shr", RSH, BINOP_END},
1025 {"shl", LSH, BINOP_END},
1026 {"and", ANDAND, BINOP_END},
1027 {"div", DIV, BINOP_END},
1028 {"not", NOT, BINOP_END},
1029 {"mod", MOD, BINOP_END},
1030 {"inc", INCREMENT, BINOP_END},
1031 {"dec", DECREMENT, BINOP_END},
1032 {"xor", XOR, BINOP_END}
1035 static const struct token tokentab2[] =
1037 {"or", OR, BINOP_END},
1038 {"<>", NOTEQUAL, BINOP_END},
1039 {"<=", LEQ, BINOP_END},
1040 {">=", GEQ, BINOP_END},
1041 {":=", ASSIGN, BINOP_END},
1042 {"::", COLONCOLON, BINOP_END} };
1044 /* Allocate uppercased var */
1045 /* make an uppercased copy of tokstart */
1046 static char * uptok (tokstart, namelen)
1051 char *uptokstart = (char *)malloc(namelen+1);
1052 for (i = 0;i <= namelen;i++)
1054 if ((tokstart[i]>='a' && tokstart[i]<='z'))
1055 uptokstart[i] = tokstart[i]-('a'-'A');
1057 uptokstart[i] = tokstart[i];
1059 uptokstart[namelen]='\0';
1062 /* Read one token, getting characters through lexptr. */
1075 int explen, tempbufindex;
1076 static char *tempbuf;
1077 static int tempbufsize;
1081 prev_lexptr = lexptr;
1084 explen = strlen (lexptr);
1085 /* See if it is a special token of length 3. */
1087 for (i = 0; i < sizeof (tokentab3) / sizeof (tokentab3[0]); i++)
1088 if (strncasecmp (tokstart, tokentab3[i].operator, 3) == 0
1089 && (!isalpha (tokentab3[i].operator[0]) || explen == 3
1090 || (!isalpha (tokstart[3]) && !isdigit (tokstart[3]) && tokstart[3] != '_')))
1093 yylval.opcode = tokentab3[i].opcode;
1094 return tokentab3[i].token;
1097 /* See if it is a special token of length 2. */
1099 for (i = 0; i < sizeof (tokentab2) / sizeof (tokentab2[0]); i++)
1100 if (strncasecmp (tokstart, tokentab2[i].operator, 2) == 0
1101 && (!isalpha (tokentab2[i].operator[0]) || explen == 2
1102 || (!isalpha (tokstart[2]) && !isdigit (tokstart[2]) && tokstart[2] != '_')))
1105 yylval.opcode = tokentab2[i].opcode;
1106 return tokentab2[i].token;
1109 switch (c = *tokstart)
1121 /* We either have a character constant ('0' or '\177' for example)
1122 or we have a quoted symbol reference ('foo(int,int)' in object pascal
1127 c = parse_escape (&lexptr);
1129 error ("Empty character constant.");
1131 yylval.typed_val_int.val = c;
1132 yylval.typed_val_int.type = builtin_type_char;
1137 namelen = skip_quoted (tokstart) - tokstart;
1140 lexptr = tokstart + namelen;
1141 if (lexptr[-1] != '\'')
1142 error ("Unmatched single quote.");
1145 uptokstart = uptok(tokstart,namelen);
1148 error ("Invalid character constant.");
1158 if (paren_depth == 0)
1165 if (comma_terminates && paren_depth == 0)
1171 /* Might be a floating point number. */
1172 if (lexptr[1] < '0' || lexptr[1] > '9')
1173 goto symbol; /* Nope, must be a symbol. */
1174 /* FALL THRU into number case. */
1187 /* It's a number. */
1188 int got_dot = 0, got_e = 0, toktype;
1189 register char *p = tokstart;
1190 int hex = input_radix > 10;
1192 if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
1197 else if (c == '0' && (p[1]=='t' || p[1]=='T' || p[1]=='d' || p[1]=='D'))
1205 /* This test includes !hex because 'e' is a valid hex digit
1206 and thus does not indicate a floating point number when
1207 the radix is hex. */
1208 if (!hex && !got_e && (*p == 'e' || *p == 'E'))
1209 got_dot = got_e = 1;
1210 /* This test does not include !hex, because a '.' always indicates
1211 a decimal floating point number regardless of the radix. */
1212 else if (!got_dot && *p == '.')
1214 else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
1215 && (*p == '-' || *p == '+'))
1216 /* This is the sign of the exponent, not the end of the
1219 /* We will take any letters or digits. parse_number will
1220 complain if past the radix, or if L or U are not final. */
1221 else if ((*p < '0' || *p > '9')
1222 && ((*p < 'a' || *p > 'z')
1223 && (*p < 'A' || *p > 'Z')))
1226 toktype = parse_number (tokstart, p - tokstart, got_dot|got_e, &yylval);
1227 if (toktype == ERROR)
1229 char *err_copy = (char *) alloca (p - tokstart + 1);
1231 memcpy (err_copy, tokstart, p - tokstart);
1232 err_copy[p - tokstart] = 0;
1233 error ("Invalid number \"%s\".", err_copy);
1264 /* Build the gdb internal form of the input string in tempbuf,
1265 translating any standard C escape forms seen. Note that the
1266 buffer is null byte terminated *only* for the convenience of
1267 debugging gdb itself and printing the buffer contents when
1268 the buffer contains no embedded nulls. Gdb does not depend
1269 upon the buffer being null byte terminated, it uses the length
1270 string instead. This allows gdb to handle C strings (as well
1271 as strings in other languages) with embedded null bytes */
1273 tokptr = ++tokstart;
1277 /* Grow the static temp buffer if necessary, including allocating
1278 the first one on demand. */
1279 if (tempbufindex + 1 >= tempbufsize)
1281 tempbuf = (char *) realloc (tempbuf, tempbufsize += 64);
1288 /* Do nothing, loop will terminate. */
1292 c = parse_escape (&tokptr);
1297 tempbuf[tempbufindex++] = c;
1300 tempbuf[tempbufindex++] = *tokptr++;
1303 } while ((*tokptr != '"') && (*tokptr != '\0'));
1304 if (*tokptr++ != '"')
1306 error ("Unterminated string in expression.");
1308 tempbuf[tempbufindex] = '\0'; /* See note above */
1309 yylval.sval.ptr = tempbuf;
1310 yylval.sval.length = tempbufindex;
1315 if (!(c == '_' || c == '$'
1316 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
1317 /* We must have come across a bad character (e.g. ';'). */
1318 error ("Invalid character '%c' in expression.", c);
1320 /* It's a name. See how long it is. */
1322 for (c = tokstart[namelen];
1323 (c == '_' || c == '$' || (c >= '0' && c <= '9')
1324 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '<');)
1326 /* Template parameter lists are part of the name.
1327 FIXME: This mishandles `print $a<4&&$a>3'. */
1331 int nesting_level = 1;
1332 while (tokstart[++i])
1334 if (tokstart[i] == '<')
1336 else if (tokstart[i] == '>')
1338 if (--nesting_level == 0)
1342 if (tokstart[i] == '>')
1348 /* do NOT uppercase internals because of registers !!! */
1349 c = tokstart[++namelen];
1352 uptokstart = uptok(tokstart,namelen);
1354 /* The token "if" terminates the expression and is NOT
1355 removed from the input stream. */
1356 if (namelen == 2 && uptokstart[0] == 'I' && uptokstart[1] == 'F')
1365 /* Catch specific keywords. Should be done with a data structure. */
1369 if (STREQ (uptokstart, "OBJECT"))
1371 if (STREQ (uptokstart, "RECORD"))
1373 if (STREQ (uptokstart, "SIZEOF"))
1377 if (STREQ (uptokstart, "CLASS"))
1379 if (STREQ (uptokstart, "FALSE"))
1382 return FALSEKEYWORD;
1386 if (STREQ (uptokstart, "TRUE"))
1391 if (STREQ (uptokstart, "SELF"))
1393 /* here we search for 'this' like
1394 inserted in FPC stabs debug info */
1395 static const char this_name[] = "this";
1397 if (lookup_symbol (this_name, expression_context_block,
1398 VAR_NAMESPACE, (int *) NULL,
1399 (struct symtab **) NULL))
1407 yylval.sval.ptr = tokstart;
1408 yylval.sval.length = namelen;
1410 if (*tokstart == '$')
1412 /* $ is the normal prefix for pascal hexadecimal values
1413 but this conflicts with the GDB use for debugger variables
1414 so in expression to enter hexadecimal values
1415 we still need to use C syntax with 0xff */
1416 write_dollar_variable (yylval.sval);
1420 /* Use token-type BLOCKNAME for symbols that happen to be defined as
1421 functions or symtabs. If this is not so, then ...
1422 Use token-type TYPENAME for symbols that happen to be defined
1423 currently as names of types; NAME for other symbols.
1424 The caller is not constrained to care about the distinction. */
1426 char *tmp = copy_name (yylval.sval);
1428 int is_a_field_of_this = 0;
1433 if (search_field && current_type)
1434 is_a_field = (lookup_struct_elt_type (current_type, tmp, 1) != NULL);
1438 sym = lookup_symbol (tmp, expression_context_block,
1440 &is_a_field_of_this,
1441 (struct symtab **) NULL);
1442 /* second chance uppercased (as Free Pascal does). */
1443 if (!sym && !is_a_field_of_this && !is_a_field)
1445 for (i = 0; i <= namelen; i++)
1447 if ((tmp[i] >= 'a' && tmp[i] <= 'z'))
1448 tmp[i] -= ('a'-'A');
1450 if (search_field && current_type)
1451 is_a_field = (lookup_struct_elt_type (current_type, tmp, 1) != NULL);
1455 sym = lookup_symbol (tmp, expression_context_block,
1457 &is_a_field_of_this,
1458 (struct symtab **) NULL);
1459 if (sym || is_a_field_of_this || is_a_field)
1460 for (i = 0; i <= namelen; i++)
1462 if ((tokstart[i] >= 'a' && tokstart[i] <= 'z'))
1463 tokstart[i] -= ('a'-'A');
1466 /* Third chance Capitalized (as GPC does). */
1467 if (!sym && !is_a_field_of_this && !is_a_field)
1469 for (i = 0; i <= namelen; i++)
1473 if ((tmp[i] >= 'a' && tmp[i] <= 'z'))
1474 tmp[i] -= ('a'-'A');
1477 if ((tmp[i] >= 'A' && tmp[i] <= 'Z'))
1478 tmp[i] -= ('A'-'a');
1480 if (search_field && current_type)
1481 is_a_field = (lookup_struct_elt_type (current_type, tmp, 1) != NULL);
1485 sym = lookup_symbol (tmp, expression_context_block,
1487 &is_a_field_of_this,
1488 (struct symtab **) NULL);
1489 if (sym || is_a_field_of_this || is_a_field)
1490 for (i = 0; i <= namelen; i++)
1494 if ((tokstart[i] >= 'a' && tokstart[i] <= 'z'))
1495 tokstart[i] -= ('a'-'A');
1498 if ((tokstart[i] >= 'A' && tokstart[i] <= 'Z'))
1499 tokstart[i] -= ('A'-'a');
1505 tempbuf = (char *) realloc (tempbuf, namelen + 1);
1506 strncpy (tempbuf, tokstart, namelen); tempbuf [namelen] = 0;
1507 yylval.sval.ptr = tempbuf;
1508 yylval.sval.length = namelen;
1511 /* Call lookup_symtab, not lookup_partial_symtab, in case there are
1512 no psymtabs (coff, xcoff, or some future change to blow away the
1513 psymtabs once once symbols are read). */
1514 if ((sym && SYMBOL_CLASS (sym) == LOC_BLOCK) ||
1515 lookup_symtab (tmp))
1517 yylval.ssym.sym = sym;
1518 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1521 if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
1524 /* Despite the following flaw, we need to keep this code enabled.
1525 Because we can get called from check_stub_method, if we don't
1526 handle nested types then it screws many operations in any
1527 program which uses nested types. */
1528 /* In "A::x", if x is a member function of A and there happens
1529 to be a type (nested or not, since the stabs don't make that
1530 distinction) named x, then this code incorrectly thinks we
1531 are dealing with nested types rather than a member function. */
1535 struct symbol *best_sym;
1537 /* Look ahead to detect nested types. This probably should be
1538 done in the grammar, but trying seemed to introduce a lot
1539 of shift/reduce and reduce/reduce conflicts. It's possible
1540 that it could be done, though. Or perhaps a non-grammar, but
1541 less ad hoc, approach would work well. */
1543 /* Since we do not currently have any way of distinguishing
1544 a nested type from a non-nested one (the stabs don't tell
1545 us whether a type is nested), we just ignore the
1552 /* Skip whitespace. */
1553 while (*p == ' ' || *p == '\t' || *p == '\n')
1555 if (*p == ':' && p[1] == ':')
1557 /* Skip the `::'. */
1559 /* Skip whitespace. */
1560 while (*p == ' ' || *p == '\t' || *p == '\n')
1563 while (*p == '_' || *p == '$' || (*p >= '0' && *p <= '9')
1564 || (*p >= 'a' && *p <= 'z')
1565 || (*p >= 'A' && *p <= 'Z'))
1569 struct symbol *cur_sym;
1570 /* As big as the whole rest of the expression, which is
1571 at least big enough. */
1572 char *ncopy = alloca (strlen (tmp)+strlen (namestart)+3);
1576 memcpy (tmp1, tmp, strlen (tmp));
1577 tmp1 += strlen (tmp);
1578 memcpy (tmp1, "::", 2);
1580 memcpy (tmp1, namestart, p - namestart);
1581 tmp1[p - namestart] = '\0';
1582 cur_sym = lookup_symbol (ncopy, expression_context_block,
1583 VAR_NAMESPACE, (int *) NULL,
1584 (struct symtab **) NULL);
1587 if (SYMBOL_CLASS (cur_sym) == LOC_TYPEDEF)
1605 yylval.tsym.type = SYMBOL_TYPE (best_sym);
1607 yylval.tsym.type = SYMBOL_TYPE (sym);
1611 if ((yylval.tsym.type = lookup_primitive_typename (tmp)) != 0)
1614 /* Input names that aren't symbols but ARE valid hex numbers,
1615 when the input radix permits them, can be names or numbers
1616 depending on the parse. Note we support radixes > 16 here. */
1618 ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10) ||
1619 (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10)))
1621 YYSTYPE newlval; /* Its value is ignored. */
1622 hextype = parse_number (tokstart, namelen, 0, &newlval);
1625 yylval.ssym.sym = sym;
1626 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1632 /* Any other kind of symbol */
1633 yylval.ssym.sym = sym;
1634 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1644 lexptr = prev_lexptr;
1646 error ("A %s in expression, near `%s'.", (msg ? msg : "error"), lexptr);