Add AArch64 Pointer Authentication to the NEWS file
[external/binutils.git] / gdb / p-exp.y
1 /* YACC parser for Pascal expressions, for GDB.
2    Copyright (C) 2000-2019 Free Software Foundation, Inc.
3
4    This file is part of GDB.
5
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.
10
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.
15
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/>.  */
18
19 /* This file is derived from c-exp.y */
20
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.
29
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.  */
37
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.  */
44 %{
45
46 #include "defs.h"
47 #include <ctype.h>
48 #include "expression.h"
49 #include "value.h"
50 #include "parser-defs.h"
51 #include "language.h"
52 #include "p-lang.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.  */
56 #include "block.h"
57 #include "completer.h"
58
59 #define parse_type(ps) builtin_type (parse_gdbarch (ps))
60
61 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror,
62    etc).  */
63 #define GDB_YY_REMAP_PREFIX pascal_
64 #include "yy-remap.h"
65
66 /* The state of the parser, used internally when we are parsing the
67    expression.  */
68
69 static struct parser_state *pstate = NULL;
70
71 int yyparse (void);
72
73 static int yylex (void);
74
75 static void yyerror (const char *);
76
77 static char *uptok (const char *, int);
78 %}
79
80 /* Although the yacc "value" of an expression is not used,
81    since the result is stored in the structure being created,
82    other node types do have values.  */
83
84 %union
85   {
86     LONGEST lval;
87     struct {
88       LONGEST val;
89       struct type *type;
90     } typed_val_int;
91     struct {
92       gdb_byte val[16];
93       struct type *type;
94     } typed_val_float;
95     struct symbol *sym;
96     struct type *tval;
97     struct stoken sval;
98     struct ttype tsym;
99     struct symtoken ssym;
100     int voidval;
101     const struct block *bval;
102     enum exp_opcode opcode;
103     struct internalvar *ivar;
104
105     struct type **tvec;
106     int *ivec;
107   }
108
109 %{
110 /* YYSTYPE gets defined by %union */
111 static int parse_number (struct parser_state *,
112                          const char *, int, int, YYSTYPE *);
113
114 static struct type *current_type;
115 static struct internalvar *intvar;
116 static int leftdiv_is_integer;
117 static void push_current_type (void);
118 static void pop_current_type (void);
119 static int search_field;
120 %}
121
122 %type <voidval> exp exp1 type_exp start normal_start variable qualified_name
123 %type <tval> type typebase
124 /* %type <bval> block */
125
126 /* Fancy type parsing.  */
127 %type <tval> ptype
128
129 %token <typed_val_int> INT
130 %token <typed_val_float> FLOAT
131
132 /* Both NAME and TYPENAME tokens represent symbols in the input,
133    and both convey their data as strings.
134    But a TYPENAME is a string that happens to be defined as a typedef
135    or builtin type name (such as int or char)
136    and a NAME is any other symbol.
137    Contexts where this distinction is not important can use the
138    nonterminal "name", which matches either NAME or TYPENAME.  */
139
140 %token <sval> STRING
141 %token <sval> FIELDNAME
142 %token <voidval> COMPLETE
143 %token <ssym> NAME /* BLOCKNAME defined below to give it higher precedence.  */
144 %token <tsym> TYPENAME
145 %type <sval> name
146 %type <ssym> name_not_typename
147
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.  */
152
153 %token <ssym> NAME_OR_INT
154
155 %token STRUCT CLASS SIZEOF COLONCOLON
156 %token ERROR
157
158 /* Special type cases, put in to allow the parser to distinguish different
159    legal basetypes.  */
160
161 %token <voidval> DOLLAR_VARIABLE
162
163
164 /* Object pascal */
165 %token THIS
166 %token <lval> TRUEKEYWORD FALSEKEYWORD
167
168 %left ','
169 %left ABOVE_COMMA
170 %right ASSIGN
171 %left NOT
172 %left OR
173 %left XOR
174 %left ANDAND
175 %left '=' NOTEQUAL
176 %left '<' '>' LEQ GEQ
177 %left LSH RSH DIV MOD
178 %left '@'
179 %left '+' '-'
180 %left '*' '/'
181 %right UNARY INCREMENT DECREMENT
182 %right ARROW '.' '[' '('
183 %left '^'
184 %token <ssym> BLOCKNAME
185 %type <bval> block
186 %left COLONCOLON
187
188 \f
189 %%
190
191 start   :       { current_type = NULL;
192                   intvar = NULL;
193                   search_field = 0;
194                   leftdiv_is_integer = 0;
195                 }
196                 normal_start {}
197         ;
198
199 normal_start    :
200                 exp1
201         |       type_exp
202         ;
203
204 type_exp:       type
205                         { write_exp_elt_opcode (pstate, OP_TYPE);
206                           write_exp_elt_type (pstate, $1);
207                           write_exp_elt_opcode (pstate, OP_TYPE);
208                           current_type = $1; } ;
209
210 /* Expressions, including the comma operator.  */
211 exp1    :       exp
212         |       exp1 ',' exp
213                         { write_exp_elt_opcode (pstate, BINOP_COMMA); }
214         ;
215
216 /* Expressions, not including the comma operator.  */
217 exp     :       exp '^'   %prec UNARY
218                         { write_exp_elt_opcode (pstate, UNOP_IND);
219                           if (current_type)
220                             current_type = TYPE_TARGET_TYPE (current_type); }
221         ;
222
223 exp     :       '@' exp    %prec UNARY
224                         { write_exp_elt_opcode (pstate, UNOP_ADDR);
225                           if (current_type)
226                             current_type = TYPE_POINTER_TYPE (current_type); }
227         ;
228
229 exp     :       '-' exp    %prec UNARY
230                         { write_exp_elt_opcode (pstate, UNOP_NEG); }
231         ;
232
233 exp     :       NOT exp    %prec UNARY
234                         { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
235         ;
236
237 exp     :       INCREMENT '(' exp ')'   %prec UNARY
238                         { write_exp_elt_opcode (pstate, UNOP_PREINCREMENT); }
239         ;
240
241 exp     :       DECREMENT  '(' exp ')'   %prec UNARY
242                         { write_exp_elt_opcode (pstate, UNOP_PREDECREMENT); }
243         ;
244
245
246 field_exp       :       exp '.' %prec UNARY
247                         { search_field = 1; }
248         ;
249
250 exp     :       field_exp FIELDNAME
251                         { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
252                           write_exp_string (pstate, $2);
253                           write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
254                           search_field = 0;
255                           if (current_type)
256                             {
257                               while (TYPE_CODE (current_type)
258                                      == TYPE_CODE_PTR)
259                                 current_type =
260                                   TYPE_TARGET_TYPE (current_type);
261                               current_type = lookup_struct_elt_type (
262                                 current_type, $2.ptr, 0);
263                             }
264                          }
265         ;
266
267
268 exp     :       field_exp name
269                         { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
270                           write_exp_string (pstate, $2);
271                           write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
272                           search_field = 0;
273                           if (current_type)
274                             {
275                               while (TYPE_CODE (current_type)
276                                      == TYPE_CODE_PTR)
277                                 current_type =
278                                   TYPE_TARGET_TYPE (current_type);
279                               current_type = lookup_struct_elt_type (
280                                 current_type, $2.ptr, 0);
281                             }
282                         }
283         ;
284 exp     :       field_exp  name COMPLETE
285                         { mark_struct_expression (pstate);
286                           write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
287                           write_exp_string (pstate, $2);
288                           write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
289         ;
290 exp     :       field_exp COMPLETE
291                         { struct stoken s;
292                           mark_struct_expression (pstate);
293                           write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
294                           s.ptr = "";
295                           s.length = 0;
296                           write_exp_string (pstate, s);
297                           write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
298         ;
299
300 exp     :       exp '['
301                         /* We need to save the current_type value.  */
302                         { const char *arrayname;
303                           int arrayfieldindex;
304                           arrayfieldindex = is_pascal_string_type (
305                                 current_type, NULL, NULL,
306                                 NULL, NULL, &arrayname);
307                           if (arrayfieldindex)
308                             {
309                               struct stoken stringsval;
310                               char *buf;
311
312                               buf = (char *) alloca (strlen (arrayname) + 1);
313                               stringsval.ptr = buf;
314                               stringsval.length = strlen (arrayname);
315                               strcpy (buf, arrayname);
316                               current_type = TYPE_FIELD_TYPE (current_type,
317                                 arrayfieldindex - 1);
318                               write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
319                               write_exp_string (pstate, stringsval);
320                               write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
321                             }
322                           push_current_type ();  }
323                 exp1 ']'
324                         { pop_current_type ();
325                           write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT);
326                           if (current_type)
327                             current_type = TYPE_TARGET_TYPE (current_type); }
328         ;
329
330 exp     :       exp '('
331                         /* This is to save the value of arglist_len
332                            being accumulated by an outer function call.  */
333                         { push_current_type ();
334                           start_arglist (); }
335                 arglist ')'     %prec ARROW
336                         { write_exp_elt_opcode (pstate, OP_FUNCALL);
337                           write_exp_elt_longcst (pstate,
338                                                  (LONGEST) end_arglist ());
339                           write_exp_elt_opcode (pstate, OP_FUNCALL);
340                           pop_current_type ();
341                           if (current_type)
342                             current_type = TYPE_TARGET_TYPE (current_type);
343                         }
344         ;
345
346 arglist :
347          | exp
348                         { arglist_len = 1; }
349          | arglist ',' exp   %prec ABOVE_COMMA
350                         { arglist_len++; }
351         ;
352
353 exp     :       type '(' exp ')' %prec UNARY
354                         { if (current_type)
355                             {
356                               /* Allow automatic dereference of classes.  */
357                               if ((TYPE_CODE (current_type) == TYPE_CODE_PTR)
358                                   && (TYPE_CODE (TYPE_TARGET_TYPE (current_type)) == TYPE_CODE_STRUCT)
359                                   && (TYPE_CODE ($1) == TYPE_CODE_STRUCT))
360                                 write_exp_elt_opcode (pstate, UNOP_IND);
361                             }
362                           write_exp_elt_opcode (pstate, UNOP_CAST);
363                           write_exp_elt_type (pstate, $1);
364                           write_exp_elt_opcode (pstate, UNOP_CAST);
365                           current_type = $1; }
366         ;
367
368 exp     :       '(' exp1 ')'
369                         { }
370         ;
371
372 /* Binary operators in order of decreasing precedence.  */
373
374 exp     :       exp '*' exp
375                         { write_exp_elt_opcode (pstate, BINOP_MUL); }
376         ;
377
378 exp     :       exp '/' {
379                           if (current_type && is_integral_type (current_type))
380                             leftdiv_is_integer = 1;
381                         }
382                 exp
383                         {
384                           if (leftdiv_is_integer && current_type
385                               && is_integral_type (current_type))
386                             {
387                               write_exp_elt_opcode (pstate, UNOP_CAST);
388                               write_exp_elt_type (pstate,
389                                                   parse_type (pstate)
390                                                   ->builtin_long_double);
391                               current_type
392                                 = parse_type (pstate)->builtin_long_double;
393                               write_exp_elt_opcode (pstate, UNOP_CAST);
394                               leftdiv_is_integer = 0;
395                             }
396
397                           write_exp_elt_opcode (pstate, BINOP_DIV);
398                         }
399         ;
400
401 exp     :       exp DIV exp
402                         { write_exp_elt_opcode (pstate, BINOP_INTDIV); }
403         ;
404
405 exp     :       exp MOD exp
406                         { write_exp_elt_opcode (pstate, BINOP_REM); }
407         ;
408
409 exp     :       exp '+' exp
410                         { write_exp_elt_opcode (pstate, BINOP_ADD); }
411         ;
412
413 exp     :       exp '-' exp
414                         { write_exp_elt_opcode (pstate, BINOP_SUB); }
415         ;
416
417 exp     :       exp LSH exp
418                         { write_exp_elt_opcode (pstate, BINOP_LSH); }
419         ;
420
421 exp     :       exp RSH exp
422                         { write_exp_elt_opcode (pstate, BINOP_RSH); }
423         ;
424
425 exp     :       exp '=' exp
426                         { write_exp_elt_opcode (pstate, BINOP_EQUAL);
427                           current_type = parse_type (pstate)->builtin_bool;
428                         }
429         ;
430
431 exp     :       exp NOTEQUAL exp
432                         { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL);
433                           current_type = parse_type (pstate)->builtin_bool;
434                         }
435         ;
436
437 exp     :       exp LEQ exp
438                         { write_exp_elt_opcode (pstate, BINOP_LEQ);
439                           current_type = parse_type (pstate)->builtin_bool;
440                         }
441         ;
442
443 exp     :       exp GEQ exp
444                         { write_exp_elt_opcode (pstate, BINOP_GEQ);
445                           current_type = parse_type (pstate)->builtin_bool;
446                         }
447         ;
448
449 exp     :       exp '<' exp
450                         { write_exp_elt_opcode (pstate, BINOP_LESS);
451                           current_type = parse_type (pstate)->builtin_bool;
452                         }
453         ;
454
455 exp     :       exp '>' exp
456                         { write_exp_elt_opcode (pstate, BINOP_GTR);
457                           current_type = parse_type (pstate)->builtin_bool;
458                         }
459         ;
460
461 exp     :       exp ANDAND exp
462                         { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
463         ;
464
465 exp     :       exp XOR exp
466                         { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
467         ;
468
469 exp     :       exp OR exp
470                         { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
471         ;
472
473 exp     :       exp ASSIGN exp
474                         { write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
475         ;
476
477 exp     :       TRUEKEYWORD
478                         { write_exp_elt_opcode (pstate, OP_BOOL);
479                           write_exp_elt_longcst (pstate, (LONGEST) $1);
480                           current_type = parse_type (pstate)->builtin_bool;
481                           write_exp_elt_opcode (pstate, OP_BOOL); }
482         ;
483
484 exp     :       FALSEKEYWORD
485                         { write_exp_elt_opcode (pstate, OP_BOOL);
486                           write_exp_elt_longcst (pstate, (LONGEST) $1);
487                           current_type = parse_type (pstate)->builtin_bool;
488                           write_exp_elt_opcode (pstate, OP_BOOL); }
489         ;
490
491 exp     :       INT
492                         { write_exp_elt_opcode (pstate, OP_LONG);
493                           write_exp_elt_type (pstate, $1.type);
494                           current_type = $1.type;
495                           write_exp_elt_longcst (pstate, (LONGEST)($1.val));
496                           write_exp_elt_opcode (pstate, OP_LONG); }
497         ;
498
499 exp     :       NAME_OR_INT
500                         { YYSTYPE val;
501                           parse_number (pstate, $1.stoken.ptr,
502                                         $1.stoken.length, 0, &val);
503                           write_exp_elt_opcode (pstate, OP_LONG);
504                           write_exp_elt_type (pstate, val.typed_val_int.type);
505                           current_type = val.typed_val_int.type;
506                           write_exp_elt_longcst (pstate, (LONGEST)
507                                                  val.typed_val_int.val);
508                           write_exp_elt_opcode (pstate, OP_LONG);
509                         }
510         ;
511
512
513 exp     :       FLOAT
514                         { write_exp_elt_opcode (pstate, OP_FLOAT);
515                           write_exp_elt_type (pstate, $1.type);
516                           current_type = $1.type;
517                           write_exp_elt_floatcst (pstate, $1.val);
518                           write_exp_elt_opcode (pstate, OP_FLOAT); }
519         ;
520
521 exp     :       variable
522         ;
523
524 exp     :       DOLLAR_VARIABLE
525                         /* Already written by write_dollar_variable.
526                            Handle current_type.  */
527                         {  if (intvar) {
528                              struct value * val, * mark;
529
530                              mark = value_mark ();
531                              val = value_of_internalvar (parse_gdbarch (pstate),
532                                                          intvar);
533                              current_type = value_type (val);
534                              value_release_to_mark (mark);
535                            }
536                         }
537         ;
538
539 exp     :       SIZEOF '(' type ')'     %prec UNARY
540                         { write_exp_elt_opcode (pstate, OP_LONG);
541                           write_exp_elt_type (pstate,
542                                             parse_type (pstate)->builtin_int);
543                           current_type = parse_type (pstate)->builtin_int;
544                           $3 = check_typedef ($3);
545                           write_exp_elt_longcst (pstate,
546                                                  (LONGEST) TYPE_LENGTH ($3));
547                           write_exp_elt_opcode (pstate, OP_LONG); }
548         ;
549
550 exp     :       SIZEOF  '(' exp ')'      %prec UNARY
551                         { write_exp_elt_opcode (pstate, UNOP_SIZEOF);
552                           current_type = parse_type (pstate)->builtin_int; }
553
554 exp     :       STRING
555                         { /* C strings are converted into array constants with
556                              an explicit null byte added at the end.  Thus
557                              the array upper bound is the string length.
558                              There is no such thing in C as a completely empty
559                              string.  */
560                           const char *sp = $1.ptr; int count = $1.length;
561
562                           while (count-- > 0)
563                             {
564                               write_exp_elt_opcode (pstate, OP_LONG);
565                               write_exp_elt_type (pstate,
566                                                   parse_type (pstate)
567                                                   ->builtin_char);
568                               write_exp_elt_longcst (pstate,
569                                                      (LONGEST) (*sp++));
570                               write_exp_elt_opcode (pstate, OP_LONG);
571                             }
572                           write_exp_elt_opcode (pstate, OP_LONG);
573                           write_exp_elt_type (pstate,
574                                               parse_type (pstate)
575                                               ->builtin_char);
576                           write_exp_elt_longcst (pstate, (LONGEST)'\0');
577                           write_exp_elt_opcode (pstate, OP_LONG);
578                           write_exp_elt_opcode (pstate, OP_ARRAY);
579                           write_exp_elt_longcst (pstate, (LONGEST) 0);
580                           write_exp_elt_longcst (pstate,
581                                                  (LONGEST) ($1.length));
582                           write_exp_elt_opcode (pstate, OP_ARRAY); }
583         ;
584
585 /* Object pascal  */
586 exp     :       THIS
587                         {
588                           struct value * this_val;
589                           struct type * this_type;
590                           write_exp_elt_opcode (pstate, OP_THIS);
591                           write_exp_elt_opcode (pstate, OP_THIS);
592                           /* We need type of this.  */
593                           this_val
594                             = value_of_this_silent (parse_language (pstate));
595                           if (this_val)
596                             this_type = value_type (this_val);
597                           else
598                             this_type = NULL;
599                           if (this_type)
600                             {
601                               if (TYPE_CODE (this_type) == TYPE_CODE_PTR)
602                                 {
603                                   this_type = TYPE_TARGET_TYPE (this_type);
604                                   write_exp_elt_opcode (pstate, UNOP_IND);
605                                 }
606                             }
607
608                           current_type = this_type;
609                         }
610         ;
611
612 /* end of object pascal.  */
613
614 block   :       BLOCKNAME
615                         {
616                           if ($1.sym.symbol != 0)
617                               $$ = SYMBOL_BLOCK_VALUE ($1.sym.symbol);
618                           else
619                             {
620                               struct symtab *tem =
621                                   lookup_symtab (copy_name ($1.stoken));
622                               if (tem)
623                                 $$ = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (tem),
624                                                         STATIC_BLOCK);
625                               else
626                                 error (_("No file or function \"%s\"."),
627                                        copy_name ($1.stoken));
628                             }
629                         }
630         ;
631
632 block   :       block COLONCOLON name
633                         { struct symbol *tem
634                             = lookup_symbol (copy_name ($3), $1,
635                                              VAR_DOMAIN, NULL).symbol;
636
637                           if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
638                             error (_("No function \"%s\" in specified context."),
639                                    copy_name ($3));
640                           $$ = SYMBOL_BLOCK_VALUE (tem); }
641         ;
642
643 variable:       block COLONCOLON name
644                         { struct block_symbol sym;
645
646                           sym = lookup_symbol (copy_name ($3), $1,
647                                                VAR_DOMAIN, NULL);
648                           if (sym.symbol == 0)
649                             error (_("No symbol \"%s\" in specified context."),
650                                    copy_name ($3));
651
652                           write_exp_elt_opcode (pstate, OP_VAR_VALUE);
653                           write_exp_elt_block (pstate, sym.block);
654                           write_exp_elt_sym (pstate, sym.symbol);
655                           write_exp_elt_opcode (pstate, OP_VAR_VALUE); }
656         ;
657
658 qualified_name: typebase COLONCOLON name
659                         {
660                           struct type *type = $1;
661
662                           if (TYPE_CODE (type) != TYPE_CODE_STRUCT
663                               && TYPE_CODE (type) != TYPE_CODE_UNION)
664                             error (_("`%s' is not defined as an aggregate type."),
665                                    TYPE_NAME (type));
666
667                           write_exp_elt_opcode (pstate, OP_SCOPE);
668                           write_exp_elt_type (pstate, type);
669                           write_exp_string (pstate, $3);
670                           write_exp_elt_opcode (pstate, OP_SCOPE);
671                         }
672         ;
673
674 variable:       qualified_name
675         |       COLONCOLON name
676                         {
677                           char *name = copy_name ($2);
678                           struct symbol *sym;
679                           struct bound_minimal_symbol msymbol;
680
681                           sym =
682                             lookup_symbol (name, (const struct block *) NULL,
683                                            VAR_DOMAIN, NULL).symbol;
684                           if (sym)
685                             {
686                               write_exp_elt_opcode (pstate, OP_VAR_VALUE);
687                               write_exp_elt_block (pstate, NULL);
688                               write_exp_elt_sym (pstate, sym);
689                               write_exp_elt_opcode (pstate, OP_VAR_VALUE);
690                               break;
691                             }
692
693                           msymbol = lookup_bound_minimal_symbol (name);
694                           if (msymbol.minsym != NULL)
695                             write_exp_msymbol (pstate, msymbol);
696                           else if (!have_full_symbols ()
697                                    && !have_partial_symbols ())
698                             error (_("No symbol table is loaded.  "
699                                    "Use the \"file\" command."));
700                           else
701                             error (_("No symbol \"%s\" in current context."),
702                                    name);
703                         }
704         ;
705
706 variable:       name_not_typename
707                         { struct block_symbol sym = $1.sym;
708
709                           if (sym.symbol)
710                             {
711                               if (symbol_read_needs_frame (sym.symbol))
712                                 innermost_block.update (sym);
713
714                               write_exp_elt_opcode (pstate, OP_VAR_VALUE);
715                               write_exp_elt_block (pstate, sym.block);
716                               write_exp_elt_sym (pstate, sym.symbol);
717                               write_exp_elt_opcode (pstate, OP_VAR_VALUE);
718                               current_type = sym.symbol->type; }
719                           else if ($1.is_a_field_of_this)
720                             {
721                               struct value * this_val;
722                               struct type * this_type;
723                               /* Object pascal: it hangs off of `this'.  Must
724                                  not inadvertently convert from a method call
725                                  to data ref.  */
726                               innermost_block.update (sym);
727                               write_exp_elt_opcode (pstate, OP_THIS);
728                               write_exp_elt_opcode (pstate, OP_THIS);
729                               write_exp_elt_opcode (pstate, STRUCTOP_PTR);
730                               write_exp_string (pstate, $1.stoken);
731                               write_exp_elt_opcode (pstate, STRUCTOP_PTR);
732                               /* We need type of this.  */
733                               this_val
734                                 = value_of_this_silent (parse_language (pstate));
735                               if (this_val)
736                                 this_type = value_type (this_val);
737                               else
738                                 this_type = NULL;
739                               if (this_type)
740                                 current_type = lookup_struct_elt_type (
741                                   this_type,
742                                   copy_name ($1.stoken), 0);
743                               else
744                                 current_type = NULL;
745                             }
746                           else
747                             {
748                               struct bound_minimal_symbol msymbol;
749                               char *arg = copy_name ($1.stoken);
750
751                               msymbol =
752                                 lookup_bound_minimal_symbol (arg);
753                               if (msymbol.minsym != NULL)
754                                 write_exp_msymbol (pstate, msymbol);
755                               else if (!have_full_symbols ()
756                                        && !have_partial_symbols ())
757                                 error (_("No symbol table is loaded.  "
758                                        "Use the \"file\" command."));
759                               else
760                                 error (_("No symbol \"%s\" in current context."),
761                                        copy_name ($1.stoken));
762                             }
763                         }
764         ;
765
766
767 ptype   :       typebase
768         ;
769
770 /* We used to try to recognize more pointer to member types here, but
771    that didn't work (shift/reduce conflicts meant that these rules never
772    got executed).  The problem is that
773      int (foo::bar::baz::bizzle)
774    is a function type but
775      int (foo::bar::baz::bizzle::*)
776    is a pointer to member type.  Stroustrup loses again!  */
777
778 type    :       ptype
779         ;
780
781 typebase  /* Implements (approximately): (type-qualifier)* type-specifier */
782         :       '^' typebase
783                         { $$ = lookup_pointer_type ($2); }
784         |       TYPENAME
785                         { $$ = $1.type; }
786         |       STRUCT name
787                         { $$ = lookup_struct (copy_name ($2),
788                                               expression_context_block); }
789         |       CLASS name
790                         { $$ = lookup_struct (copy_name ($2),
791                                               expression_context_block); }
792         /* "const" and "volatile" are curently ignored.  A type qualifier
793            after the type is handled in the ptype rule.  I think these could
794            be too.  */
795         ;
796
797 name    :       NAME { $$ = $1.stoken; }
798         |       BLOCKNAME { $$ = $1.stoken; }
799         |       TYPENAME { $$ = $1.stoken; }
800         |       NAME_OR_INT  { $$ = $1.stoken; }
801         ;
802
803 name_not_typename :     NAME
804         |       BLOCKNAME
805 /* These would be useful if name_not_typename was useful, but it is just
806    a fake for "variable", so these cause reduce/reduce conflicts because
807    the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
808    =exp) or just an exp.  If name_not_typename was ever used in an lvalue
809    context where only a name could occur, this might be useful.
810         |       NAME_OR_INT
811  */
812         ;
813
814 %%
815
816 /* Take care of parsing a number (anything that starts with a digit).
817    Set yylval and return the token type; update lexptr.
818    LEN is the number of characters in it.  */
819
820 /*** Needs some error checking for the float case ***/
821
822 static int
823 parse_number (struct parser_state *par_state,
824               const char *p, int len, int parsed_float, YYSTYPE *putithere)
825 {
826   /* FIXME: Shouldn't these be unsigned?  We don't deal with negative values
827      here, and we do kind of silly things like cast to unsigned.  */
828   LONGEST n = 0;
829   LONGEST prevn = 0;
830   ULONGEST un;
831
832   int i = 0;
833   int c;
834   int base = input_radix;
835   int unsigned_p = 0;
836
837   /* Number of "L" suffixes encountered.  */
838   int long_p = 0;
839
840   /* We have found a "L" or "U" suffix.  */
841   int found_suffix = 0;
842
843   ULONGEST high_bit;
844   struct type *signed_type;
845   struct type *unsigned_type;
846
847   if (parsed_float)
848     {
849       /* Handle suffixes: 'f' for float, 'l' for long double.
850          FIXME: This appears to be an extension -- do we want this?  */
851       if (len >= 1 && tolower (p[len - 1]) == 'f')
852         {
853           putithere->typed_val_float.type
854             = parse_type (par_state)->builtin_float;
855           len--;
856         }
857       else if (len >= 1 && tolower (p[len - 1]) == 'l')
858         {
859           putithere->typed_val_float.type
860             = parse_type (par_state)->builtin_long_double;
861           len--;
862         }
863       /* Default type for floating-point literals is double.  */
864       else
865         {
866           putithere->typed_val_float.type
867             = parse_type (par_state)->builtin_double;
868         }
869
870       if (!parse_float (p, len,
871                         putithere->typed_val_float.type,
872                         putithere->typed_val_float.val))
873         return ERROR;
874       return FLOAT;
875     }
876
877   /* Handle base-switching prefixes 0x, 0t, 0d, 0.  */
878   if (p[0] == '0')
879     switch (p[1])
880       {
881       case 'x':
882       case 'X':
883         if (len >= 3)
884           {
885             p += 2;
886             base = 16;
887             len -= 2;
888           }
889         break;
890
891       case 't':
892       case 'T':
893       case 'd':
894       case 'D':
895         if (len >= 3)
896           {
897             p += 2;
898             base = 10;
899             len -= 2;
900           }
901         break;
902
903       default:
904         base = 8;
905         break;
906       }
907
908   while (len-- > 0)
909     {
910       c = *p++;
911       if (c >= 'A' && c <= 'Z')
912         c += 'a' - 'A';
913       if (c != 'l' && c != 'u')
914         n *= base;
915       if (c >= '0' && c <= '9')
916         {
917           if (found_suffix)
918             return ERROR;
919           n += i = c - '0';
920         }
921       else
922         {
923           if (base > 10 && c >= 'a' && c <= 'f')
924             {
925               if (found_suffix)
926                 return ERROR;
927               n += i = c - 'a' + 10;
928             }
929           else if (c == 'l')
930             {
931               ++long_p;
932               found_suffix = 1;
933             }
934           else if (c == 'u')
935             {
936               unsigned_p = 1;
937               found_suffix = 1;
938             }
939           else
940             return ERROR;       /* Char not a digit */
941         }
942       if (i >= base)
943         return ERROR;           /* Invalid digit in this base.  */
944
945       /* Portably test for overflow (only works for nonzero values, so make
946          a second check for zero).  FIXME: Can't we just make n and prevn
947          unsigned and avoid this?  */
948       if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
949         unsigned_p = 1;         /* Try something unsigned.  */
950
951       /* Portably test for unsigned overflow.
952          FIXME: This check is wrong; for example it doesn't find overflow
953          on 0x123456789 when LONGEST is 32 bits.  */
954       if (c != 'l' && c != 'u' && n != 0)
955         {
956           if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n))
957             error (_("Numeric constant too large."));
958         }
959       prevn = n;
960     }
961
962   /* An integer constant is an int, a long, or a long long.  An L
963      suffix forces it to be long; an LL suffix forces it to be long
964      long.  If not forced to a larger size, it gets the first type of
965      the above that it fits in.  To figure out whether it fits, we
966      shift it right and see whether anything remains.  Note that we
967      can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
968      operation, because many compilers will warn about such a shift
969      (which always produces a zero result).  Sometimes gdbarch_int_bit
970      or gdbarch_long_bit will be that big, sometimes not.  To deal with
971      the case where it is we just always shift the value more than
972      once, with fewer bits each time.  */
973
974   un = (ULONGEST)n >> 2;
975   if (long_p == 0
976       && (un >> (gdbarch_int_bit (parse_gdbarch (par_state)) - 2)) == 0)
977     {
978       high_bit
979         = ((ULONGEST)1) << (gdbarch_int_bit (parse_gdbarch (par_state)) - 1);
980
981       /* A large decimal (not hex or octal) constant (between INT_MAX
982          and UINT_MAX) is a long or unsigned long, according to ANSI,
983          never an unsigned int, but this code treats it as unsigned
984          int.  This probably should be fixed.  GCC gives a warning on
985          such constants.  */
986
987       unsigned_type = parse_type (par_state)->builtin_unsigned_int;
988       signed_type = parse_type (par_state)->builtin_int;
989     }
990   else if (long_p <= 1
991            && (un >> (gdbarch_long_bit (parse_gdbarch (par_state)) - 2)) == 0)
992     {
993       high_bit
994         = ((ULONGEST)1) << (gdbarch_long_bit (parse_gdbarch (par_state)) - 1);
995       unsigned_type = parse_type (par_state)->builtin_unsigned_long;
996       signed_type = parse_type (par_state)->builtin_long;
997     }
998   else
999     {
1000       int shift;
1001       if (sizeof (ULONGEST) * HOST_CHAR_BIT
1002           < gdbarch_long_long_bit (parse_gdbarch (par_state)))
1003         /* A long long does not fit in a LONGEST.  */
1004         shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1);
1005       else
1006         shift = (gdbarch_long_long_bit (parse_gdbarch (par_state)) - 1);
1007       high_bit = (ULONGEST) 1 << shift;
1008       unsigned_type = parse_type (par_state)->builtin_unsigned_long_long;
1009       signed_type = parse_type (par_state)->builtin_long_long;
1010     }
1011
1012    putithere->typed_val_int.val = n;
1013
1014    /* If the high bit of the worked out type is set then this number
1015       has to be unsigned.  */
1016
1017    if (unsigned_p || (n & high_bit))
1018      {
1019        putithere->typed_val_int.type = unsigned_type;
1020      }
1021    else
1022      {
1023        putithere->typed_val_int.type = signed_type;
1024      }
1025
1026    return INT;
1027 }
1028
1029
1030 struct type_push
1031 {
1032   struct type *stored;
1033   struct type_push *next;
1034 };
1035
1036 static struct type_push *tp_top = NULL;
1037
1038 static void
1039 push_current_type (void)
1040 {
1041   struct type_push *tpnew;
1042   tpnew = (struct type_push *) malloc (sizeof (struct type_push));
1043   tpnew->next = tp_top;
1044   tpnew->stored = current_type;
1045   current_type = NULL;
1046   tp_top = tpnew;
1047 }
1048
1049 static void
1050 pop_current_type (void)
1051 {
1052   struct type_push *tp = tp_top;
1053   if (tp)
1054     {
1055       current_type = tp->stored;
1056       tp_top = tp->next;
1057       free (tp);
1058     }
1059 }
1060
1061 struct token
1062 {
1063   const char *oper;
1064   int token;
1065   enum exp_opcode opcode;
1066 };
1067
1068 static const struct token tokentab3[] =
1069   {
1070     {"shr", RSH, BINOP_END},
1071     {"shl", LSH, BINOP_END},
1072     {"and", ANDAND, BINOP_END},
1073     {"div", DIV, BINOP_END},
1074     {"not", NOT, BINOP_END},
1075     {"mod", MOD, BINOP_END},
1076     {"inc", INCREMENT, BINOP_END},
1077     {"dec", DECREMENT, BINOP_END},
1078     {"xor", XOR, BINOP_END}
1079   };
1080
1081 static const struct token tokentab2[] =
1082   {
1083     {"or", OR, BINOP_END},
1084     {"<>", NOTEQUAL, BINOP_END},
1085     {"<=", LEQ, BINOP_END},
1086     {">=", GEQ, BINOP_END},
1087     {":=", ASSIGN, BINOP_END},
1088     {"::", COLONCOLON, BINOP_END} };
1089
1090 /* Allocate uppercased var: */
1091 /* make an uppercased copy of tokstart.  */
1092 static char *
1093 uptok (const char *tokstart, int namelen)
1094 {
1095   int i;
1096   char *uptokstart = (char *)malloc(namelen+1);
1097   for (i = 0;i <= namelen;i++)
1098     {
1099       if ((tokstart[i]>='a' && tokstart[i]<='z'))
1100         uptokstart[i] = tokstart[i]-('a'-'A');
1101       else
1102         uptokstart[i] = tokstart[i];
1103     }
1104   uptokstart[namelen]='\0';
1105   return uptokstart;
1106 }
1107
1108 /* Read one token, getting characters through lexptr.  */
1109
1110 static int
1111 yylex (void)
1112 {
1113   int c;
1114   int namelen;
1115   const char *tokstart;
1116   char *uptokstart;
1117   const char *tokptr;
1118   int explen, tempbufindex;
1119   static char *tempbuf;
1120   static int tempbufsize;
1121
1122  retry:
1123
1124   prev_lexptr = lexptr;
1125
1126   tokstart = lexptr;
1127   explen = strlen (lexptr);
1128
1129   /* See if it is a special token of length 3.  */
1130   if (explen > 2)
1131     for (int i = 0; i < sizeof (tokentab3) / sizeof (tokentab3[0]); i++)
1132       if (strncasecmp (tokstart, tokentab3[i].oper, 3) == 0
1133           && (!isalpha (tokentab3[i].oper[0]) || explen == 3
1134               || (!isalpha (tokstart[3])
1135                   && !isdigit (tokstart[3]) && tokstart[3] != '_')))
1136         {
1137           lexptr += 3;
1138           yylval.opcode = tokentab3[i].opcode;
1139           return tokentab3[i].token;
1140         }
1141
1142   /* See if it is a special token of length 2.  */
1143   if (explen > 1)
1144   for (int i = 0; i < sizeof (tokentab2) / sizeof (tokentab2[0]); i++)
1145       if (strncasecmp (tokstart, tokentab2[i].oper, 2) == 0
1146           && (!isalpha (tokentab2[i].oper[0]) || explen == 2
1147               || (!isalpha (tokstart[2])
1148                   && !isdigit (tokstart[2]) && tokstart[2] != '_')))
1149         {
1150           lexptr += 2;
1151           yylval.opcode = tokentab2[i].opcode;
1152           return tokentab2[i].token;
1153         }
1154
1155   switch (c = *tokstart)
1156     {
1157     case 0:
1158       if (search_field && parse_completion)
1159         return COMPLETE;
1160       else
1161        return 0;
1162
1163     case ' ':
1164     case '\t':
1165     case '\n':
1166       lexptr++;
1167       goto retry;
1168
1169     case '\'':
1170       /* We either have a character constant ('0' or '\177' for example)
1171          or we have a quoted symbol reference ('foo(int,int)' in object pascal
1172          for example).  */
1173       lexptr++;
1174       c = *lexptr++;
1175       if (c == '\\')
1176         c = parse_escape (parse_gdbarch (pstate), &lexptr);
1177       else if (c == '\'')
1178         error (_("Empty character constant."));
1179
1180       yylval.typed_val_int.val = c;
1181       yylval.typed_val_int.type = parse_type (pstate)->builtin_char;
1182
1183       c = *lexptr++;
1184       if (c != '\'')
1185         {
1186           namelen = skip_quoted (tokstart) - tokstart;
1187           if (namelen > 2)
1188             {
1189               lexptr = tokstart + namelen;
1190               if (lexptr[-1] != '\'')
1191                 error (_("Unmatched single quote."));
1192               namelen -= 2;
1193               tokstart++;
1194               uptokstart = uptok(tokstart,namelen);
1195               goto tryname;
1196             }
1197           error (_("Invalid character constant."));
1198         }
1199       return INT;
1200
1201     case '(':
1202       paren_depth++;
1203       lexptr++;
1204       return c;
1205
1206     case ')':
1207       if (paren_depth == 0)
1208         return 0;
1209       paren_depth--;
1210       lexptr++;
1211       return c;
1212
1213     case ',':
1214       if (comma_terminates && paren_depth == 0)
1215         return 0;
1216       lexptr++;
1217       return c;
1218
1219     case '.':
1220       /* Might be a floating point number.  */
1221       if (lexptr[1] < '0' || lexptr[1] > '9')
1222         {
1223           goto symbol;          /* Nope, must be a symbol.  */
1224         }
1225
1226       /* FALL THRU.  */
1227
1228     case '0':
1229     case '1':
1230     case '2':
1231     case '3':
1232     case '4':
1233     case '5':
1234     case '6':
1235     case '7':
1236     case '8':
1237     case '9':
1238       {
1239         /* It's a number.  */
1240         int got_dot = 0, got_e = 0, toktype;
1241         const char *p = tokstart;
1242         int hex = input_radix > 10;
1243
1244         if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
1245           {
1246             p += 2;
1247             hex = 1;
1248           }
1249         else if (c == '0' && (p[1]=='t' || p[1]=='T'
1250                               || p[1]=='d' || p[1]=='D'))
1251           {
1252             p += 2;
1253             hex = 0;
1254           }
1255
1256         for (;; ++p)
1257           {
1258             /* This test includes !hex because 'e' is a valid hex digit
1259                and thus does not indicate a floating point number when
1260                the radix is hex.  */
1261             if (!hex && !got_e && (*p == 'e' || *p == 'E'))
1262               got_dot = got_e = 1;
1263             /* This test does not include !hex, because a '.' always indicates
1264                a decimal floating point number regardless of the radix.  */
1265             else if (!got_dot && *p == '.')
1266               got_dot = 1;
1267             else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
1268                      && (*p == '-' || *p == '+'))
1269               /* This is the sign of the exponent, not the end of the
1270                  number.  */
1271               continue;
1272             /* We will take any letters or digits.  parse_number will
1273                complain if past the radix, or if L or U are not final.  */
1274             else if ((*p < '0' || *p > '9')
1275                      && ((*p < 'a' || *p > 'z')
1276                                   && (*p < 'A' || *p > 'Z')))
1277               break;
1278           }
1279         toktype = parse_number (pstate, tokstart,
1280                                 p - tokstart, got_dot | got_e, &yylval);
1281         if (toktype == ERROR)
1282           {
1283             char *err_copy = (char *) alloca (p - tokstart + 1);
1284
1285             memcpy (err_copy, tokstart, p - tokstart);
1286             err_copy[p - tokstart] = 0;
1287             error (_("Invalid number \"%s\"."), err_copy);
1288           }
1289         lexptr = p;
1290         return toktype;
1291       }
1292
1293     case '+':
1294     case '-':
1295     case '*':
1296     case '/':
1297     case '|':
1298     case '&':
1299     case '^':
1300     case '~':
1301     case '!':
1302     case '@':
1303     case '<':
1304     case '>':
1305     case '[':
1306     case ']':
1307     case '?':
1308     case ':':
1309     case '=':
1310     case '{':
1311     case '}':
1312     symbol:
1313       lexptr++;
1314       return c;
1315
1316     case '"':
1317
1318       /* Build the gdb internal form of the input string in tempbuf,
1319          translating any standard C escape forms seen.  Note that the
1320          buffer is null byte terminated *only* for the convenience of
1321          debugging gdb itself and printing the buffer contents when
1322          the buffer contains no embedded nulls.  Gdb does not depend
1323          upon the buffer being null byte terminated, it uses the length
1324          string instead.  This allows gdb to handle C strings (as well
1325          as strings in other languages) with embedded null bytes.  */
1326
1327       tokptr = ++tokstart;
1328       tempbufindex = 0;
1329
1330       do {
1331         /* Grow the static temp buffer if necessary, including allocating
1332            the first one on demand.  */
1333         if (tempbufindex + 1 >= tempbufsize)
1334           {
1335             tempbuf = (char *) realloc (tempbuf, tempbufsize += 64);
1336           }
1337
1338         switch (*tokptr)
1339           {
1340           case '\0':
1341           case '"':
1342             /* Do nothing, loop will terminate.  */
1343             break;
1344           case '\\':
1345             ++tokptr;
1346             c = parse_escape (parse_gdbarch (pstate), &tokptr);
1347             if (c == -1)
1348               {
1349                 continue;
1350               }
1351             tempbuf[tempbufindex++] = c;
1352             break;
1353           default:
1354             tempbuf[tempbufindex++] = *tokptr++;
1355             break;
1356           }
1357       } while ((*tokptr != '"') && (*tokptr != '\0'));
1358       if (*tokptr++ != '"')
1359         {
1360           error (_("Unterminated string in expression."));
1361         }
1362       tempbuf[tempbufindex] = '\0';     /* See note above.  */
1363       yylval.sval.ptr = tempbuf;
1364       yylval.sval.length = tempbufindex;
1365       lexptr = tokptr;
1366       return (STRING);
1367     }
1368
1369   if (!(c == '_' || c == '$'
1370         || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
1371     /* We must have come across a bad character (e.g. ';').  */
1372     error (_("Invalid character '%c' in expression."), c);
1373
1374   /* It's a name.  See how long it is.  */
1375   namelen = 0;
1376   for (c = tokstart[namelen];
1377        (c == '_' || c == '$' || (c >= '0' && c <= '9')
1378         || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '<');)
1379     {
1380       /* Template parameter lists are part of the name.
1381          FIXME: This mishandles `print $a<4&&$a>3'.  */
1382       if (c == '<')
1383         {
1384           int i = namelen;
1385           int nesting_level = 1;
1386           while (tokstart[++i])
1387             {
1388               if (tokstart[i] == '<')
1389                 nesting_level++;
1390               else if (tokstart[i] == '>')
1391                 {
1392                   if (--nesting_level == 0)
1393                     break;
1394                 }
1395             }
1396           if (tokstart[i] == '>')
1397             namelen = i;
1398           else
1399             break;
1400         }
1401
1402       /* do NOT uppercase internals because of registers !!!  */
1403       c = tokstart[++namelen];
1404     }
1405
1406   uptokstart = uptok(tokstart,namelen);
1407
1408   /* The token "if" terminates the expression and is NOT
1409      removed from the input stream.  */
1410   if (namelen == 2 && uptokstart[0] == 'I' && uptokstart[1] == 'F')
1411     {
1412       free (uptokstart);
1413       return 0;
1414     }
1415
1416   lexptr += namelen;
1417
1418   tryname:
1419
1420   /* Catch specific keywords.  Should be done with a data structure.  */
1421   switch (namelen)
1422     {
1423     case 6:
1424       if (strcmp (uptokstart, "OBJECT") == 0)
1425         {
1426           free (uptokstart);
1427           return CLASS;
1428         }
1429       if (strcmp (uptokstart, "RECORD") == 0)
1430         {
1431           free (uptokstart);
1432           return STRUCT;
1433         }
1434       if (strcmp (uptokstart, "SIZEOF") == 0)
1435         {
1436           free (uptokstart);
1437           return SIZEOF;
1438         }
1439       break;
1440     case 5:
1441       if (strcmp (uptokstart, "CLASS") == 0)
1442         {
1443           free (uptokstart);
1444           return CLASS;
1445         }
1446       if (strcmp (uptokstart, "FALSE") == 0)
1447         {
1448           yylval.lval = 0;
1449           free (uptokstart);
1450           return FALSEKEYWORD;
1451         }
1452       break;
1453     case 4:
1454       if (strcmp (uptokstart, "TRUE") == 0)
1455         {
1456           yylval.lval = 1;
1457           free (uptokstart);
1458           return TRUEKEYWORD;
1459         }
1460       if (strcmp (uptokstart, "SELF") == 0)
1461         {
1462           /* Here we search for 'this' like
1463              inserted in FPC stabs debug info.  */
1464           static const char this_name[] = "this";
1465
1466           if (lookup_symbol (this_name, expression_context_block,
1467                              VAR_DOMAIN, NULL).symbol)
1468             {
1469               free (uptokstart);
1470               return THIS;
1471             }
1472         }
1473       break;
1474     default:
1475       break;
1476     }
1477
1478   yylval.sval.ptr = tokstart;
1479   yylval.sval.length = namelen;
1480
1481   if (*tokstart == '$')
1482     {
1483       char *tmp;
1484
1485       /* $ is the normal prefix for pascal hexadecimal values
1486         but this conflicts with the GDB use for debugger variables
1487         so in expression to enter hexadecimal values
1488         we still need to use C syntax with 0xff  */
1489       write_dollar_variable (pstate, yylval.sval);
1490       tmp = (char *) alloca (namelen + 1);
1491       memcpy (tmp, tokstart, namelen);
1492       tmp[namelen] = '\0';
1493       intvar = lookup_only_internalvar (tmp + 1);
1494       free (uptokstart);
1495       return DOLLAR_VARIABLE;
1496     }
1497
1498   /* Use token-type BLOCKNAME for symbols that happen to be defined as
1499      functions or symtabs.  If this is not so, then ...
1500      Use token-type TYPENAME for symbols that happen to be defined
1501      currently as names of types; NAME for other symbols.
1502      The caller is not constrained to care about the distinction.  */
1503   {
1504     char *tmp = copy_name (yylval.sval);
1505     struct symbol *sym;
1506     struct field_of_this_result is_a_field_of_this;
1507     int is_a_field = 0;
1508     int hextype;
1509
1510     is_a_field_of_this.type = NULL;
1511     if (search_field && current_type)
1512       is_a_field = (lookup_struct_elt_type (current_type, tmp, 1) != NULL);
1513     if (is_a_field)
1514       sym = NULL;
1515     else
1516       sym = lookup_symbol (tmp, expression_context_block,
1517                            VAR_DOMAIN, &is_a_field_of_this).symbol;
1518     /* second chance uppercased (as Free Pascal does).  */
1519     if (!sym && is_a_field_of_this.type == NULL && !is_a_field)
1520       {
1521        for (int i = 0; i <= namelen; i++)
1522          {
1523            if ((tmp[i] >= 'a' && tmp[i] <= 'z'))
1524              tmp[i] -= ('a'-'A');
1525          }
1526        if (search_field && current_type)
1527          is_a_field = (lookup_struct_elt_type (current_type, tmp, 1) != NULL);
1528        if (is_a_field)
1529          sym = NULL;
1530        else
1531          sym = lookup_symbol (tmp, expression_context_block,
1532                               VAR_DOMAIN, &is_a_field_of_this).symbol;
1533       }
1534     /* Third chance Capitalized (as GPC does).  */
1535     if (!sym && is_a_field_of_this.type == NULL && !is_a_field)
1536       {
1537        for (int i = 0; i <= namelen; i++)
1538          {
1539            if (i == 0)
1540              {
1541               if ((tmp[i] >= 'a' && tmp[i] <= 'z'))
1542                 tmp[i] -= ('a'-'A');
1543              }
1544            else
1545            if ((tmp[i] >= 'A' && tmp[i] <= 'Z'))
1546              tmp[i] -= ('A'-'a');
1547           }
1548        if (search_field && current_type)
1549          is_a_field = (lookup_struct_elt_type (current_type, tmp, 1) != NULL);
1550        if (is_a_field)
1551          sym = NULL;
1552        else
1553          sym = lookup_symbol (tmp, expression_context_block,
1554                               VAR_DOMAIN, &is_a_field_of_this).symbol;
1555       }
1556
1557     if (is_a_field || (is_a_field_of_this.type != NULL))
1558       {
1559         tempbuf = (char *) realloc (tempbuf, namelen + 1);
1560         strncpy (tempbuf, tmp, namelen);
1561         tempbuf [namelen] = 0;
1562         yylval.sval.ptr = tempbuf;
1563         yylval.sval.length = namelen;
1564         yylval.ssym.sym.symbol = NULL;
1565         yylval.ssym.sym.block = NULL;
1566         free (uptokstart);
1567         yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1568         if (is_a_field)
1569           return FIELDNAME;
1570         else
1571           return NAME;
1572       }
1573     /* Call lookup_symtab, not lookup_partial_symtab, in case there are
1574        no psymtabs (coff, xcoff, or some future change to blow away the
1575        psymtabs once once symbols are read).  */
1576     if ((sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
1577         || lookup_symtab (tmp))
1578       {
1579         yylval.ssym.sym.symbol = sym;
1580         yylval.ssym.sym.block = NULL;
1581         yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1582         free (uptokstart);
1583         return BLOCKNAME;
1584       }
1585     if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
1586         {
1587 #if 1
1588           /* Despite the following flaw, we need to keep this code enabled.
1589              Because we can get called from check_stub_method, if we don't
1590              handle nested types then it screws many operations in any
1591              program which uses nested types.  */
1592           /* In "A::x", if x is a member function of A and there happens
1593              to be a type (nested or not, since the stabs don't make that
1594              distinction) named x, then this code incorrectly thinks we
1595              are dealing with nested types rather than a member function.  */
1596
1597           const char *p;
1598           const char *namestart;
1599           struct symbol *best_sym;
1600
1601           /* Look ahead to detect nested types.  This probably should be
1602              done in the grammar, but trying seemed to introduce a lot
1603              of shift/reduce and reduce/reduce conflicts.  It's possible
1604              that it could be done, though.  Or perhaps a non-grammar, but
1605              less ad hoc, approach would work well.  */
1606
1607           /* Since we do not currently have any way of distinguishing
1608              a nested type from a non-nested one (the stabs don't tell
1609              us whether a type is nested), we just ignore the
1610              containing type.  */
1611
1612           p = lexptr;
1613           best_sym = sym;
1614           while (1)
1615             {
1616               /* Skip whitespace.  */
1617               while (*p == ' ' || *p == '\t' || *p == '\n')
1618                 ++p;
1619               if (*p == ':' && p[1] == ':')
1620                 {
1621                   /* Skip the `::'.  */
1622                   p += 2;
1623                   /* Skip whitespace.  */
1624                   while (*p == ' ' || *p == '\t' || *p == '\n')
1625                     ++p;
1626                   namestart = p;
1627                   while (*p == '_' || *p == '$' || (*p >= '0' && *p <= '9')
1628                          || (*p >= 'a' && *p <= 'z')
1629                          || (*p >= 'A' && *p <= 'Z'))
1630                     ++p;
1631                   if (p != namestart)
1632                     {
1633                       struct symbol *cur_sym;
1634                       /* As big as the whole rest of the expression, which is
1635                          at least big enough.  */
1636                       char *ncopy
1637                         = (char *) alloca (strlen (tmp) + strlen (namestart)
1638                                            + 3);
1639                       char *tmp1;
1640
1641                       tmp1 = ncopy;
1642                       memcpy (tmp1, tmp, strlen (tmp));
1643                       tmp1 += strlen (tmp);
1644                       memcpy (tmp1, "::", 2);
1645                       tmp1 += 2;
1646                       memcpy (tmp1, namestart, p - namestart);
1647                       tmp1[p - namestart] = '\0';
1648                       cur_sym = lookup_symbol (ncopy, expression_context_block,
1649                                                VAR_DOMAIN, NULL).symbol;
1650                       if (cur_sym)
1651                         {
1652                           if (SYMBOL_CLASS (cur_sym) == LOC_TYPEDEF)
1653                             {
1654                               best_sym = cur_sym;
1655                               lexptr = p;
1656                             }
1657                           else
1658                             break;
1659                         }
1660                       else
1661                         break;
1662                     }
1663                   else
1664                     break;
1665                 }
1666               else
1667                 break;
1668             }
1669
1670           yylval.tsym.type = SYMBOL_TYPE (best_sym);
1671 #else /* not 0 */
1672           yylval.tsym.type = SYMBOL_TYPE (sym);
1673 #endif /* not 0 */
1674           free (uptokstart);
1675           return TYPENAME;
1676         }
1677     yylval.tsym.type
1678       = language_lookup_primitive_type (parse_language (pstate),
1679                                         parse_gdbarch (pstate), tmp);
1680     if (yylval.tsym.type != NULL)
1681       {
1682         free (uptokstart);
1683         return TYPENAME;
1684       }
1685
1686     /* Input names that aren't symbols but ARE valid hex numbers,
1687        when the input radix permits them, can be names or numbers
1688        depending on the parse.  Note we support radixes > 16 here.  */
1689     if (!sym
1690         && ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10)
1691             || (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10)))
1692       {
1693         YYSTYPE newlval;        /* Its value is ignored.  */
1694         hextype = parse_number (pstate, tokstart, namelen, 0, &newlval);
1695         if (hextype == INT)
1696           {
1697             yylval.ssym.sym.symbol = sym;
1698             yylval.ssym.sym.block = NULL;
1699             yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1700             free (uptokstart);
1701             return NAME_OR_INT;
1702           }
1703       }
1704
1705     free(uptokstart);
1706     /* Any other kind of symbol.  */
1707     yylval.ssym.sym.symbol = sym;
1708     yylval.ssym.sym.block = NULL;
1709     return NAME;
1710   }
1711 }
1712
1713 int
1714 pascal_parse (struct parser_state *par_state)
1715 {
1716   /* Setting up the parser state.  */
1717   scoped_restore pstate_restore = make_scoped_restore (&pstate);
1718   gdb_assert (par_state != NULL);
1719   pstate = par_state;
1720
1721   return yyparse ();
1722 }
1723
1724 static void
1725 yyerror (const char *msg)
1726 {
1727   if (prev_lexptr)
1728     lexptr = prev_lexptr;
1729
1730   error (_("A %s in expression, near `%s'."), msg, lexptr);
1731 }