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