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