Target FP: Use target format throughout expression parsing
[external/binutils.git] / gdb / c-exp.y
1 /* YACC parser for C expressions, for GDB.
2    Copyright (C) 1986-2017 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 /* Parse a C expression from text in a string,
20    and return the result as a  struct expression  pointer.
21    That structure contains arithmetic operations in reverse polish,
22    with constants represented by operations that are followed by special data.
23    See expression.h for the details of the format.
24    What is important here is that it can be built up sequentially
25    during the process of parsing; the lower levels of the tree always
26    come first in the result.
27
28    Note that malloc's and realloc's in this file are transformed to
29    xmalloc and xrealloc respectively by the same sed command in the
30    makefile that remaps any other malloc/realloc inserted by the parser
31    generator.  Doing this with #defines and trying to control the interaction
32    with include files (<malloc.h> and <stdlib.h> for example) just became
33    too messy, particularly when such includes can be inserted at random
34    times by the parser generator.  */
35
36 %{
37
38 #include "defs.h"
39 #include <ctype.h>
40 #include "expression.h"
41 #include "value.h"
42 #include "parser-defs.h"
43 #include "language.h"
44 #include "c-lang.h"
45 #include "bfd.h" /* Required by objfiles.h.  */
46 #include "symfile.h" /* Required by objfiles.h.  */
47 #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
48 #include "charset.h"
49 #include "block.h"
50 #include "cp-support.h"
51 #include "macroscope.h"
52 #include "objc-lang.h"
53 #include "typeprint.h"
54 #include "cp-abi.h"
55
56 #define parse_type(ps) builtin_type (parse_gdbarch (ps))
57
58 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror,
59    etc).  */
60 #define GDB_YY_REMAP_PREFIX c_
61 #include "yy-remap.h"
62
63 /* The state of the parser, used internally when we are parsing the
64    expression.  */
65
66 static struct parser_state *pstate = NULL;
67
68 int yyparse (void);
69
70 static int yylex (void);
71
72 void yyerror (const char *);
73
74 static int type_aggregate_p (struct type *);
75
76 %}
77
78 /* Although the yacc "value" of an expression is not used,
79    since the result is stored in the structure being created,
80    other node types do have values.  */
81
82 %union
83   {
84     LONGEST lval;
85     struct {
86       LONGEST val;
87       struct type *type;
88     } typed_val_int;
89     struct {
90       gdb_byte val[16];
91       struct type *type;
92     } typed_val_float;
93     struct type *tval;
94     struct stoken sval;
95     struct typed_stoken tsval;
96     struct ttype tsym;
97     struct symtoken ssym;
98     int voidval;
99     const struct block *bval;
100     enum exp_opcode opcode;
101
102     struct stoken_vector svec;
103     VEC (type_ptr) *tvec;
104
105     struct type_stack *type_stack;
106
107     struct objc_class_str theclass;
108   }
109
110 %{
111 /* YYSTYPE gets defined by %union */
112 static int parse_number (struct parser_state *par_state,
113                          const char *, int, int, YYSTYPE *);
114 static struct stoken operator_stoken (const char *);
115 static void check_parameter_typelist (VEC (type_ptr) *);
116 static void write_destructor_name (struct parser_state *par_state,
117                                    struct stoken);
118
119 #ifdef YYBISON
120 static void c_print_token (FILE *file, int type, YYSTYPE value);
121 #define YYPRINT(FILE, TYPE, VALUE) c_print_token (FILE, TYPE, VALUE)
122 #endif
123 %}
124
125 %type <voidval> exp exp1 type_exp start variable qualified_name lcurly function_method
126 %type <lval> rcurly
127 %type <tval> type typebase
128 %type <tvec> nonempty_typelist func_mod parameter_typelist
129 /* %type <bval> block */
130
131 /* Fancy type parsing.  */
132 %type <tval> ptype
133 %type <lval> array_mod
134 %type <tval> conversion_type_id
135
136 %type <type_stack> ptr_operator_ts abs_decl direct_abs_decl
137
138 %token <typed_val_int> INT
139 %token <typed_val_float> FLOAT
140
141 /* Both NAME and TYPENAME tokens represent symbols in the input,
142    and both convey their data as strings.
143    But a TYPENAME is a string that happens to be defined as a typedef
144    or builtin type name (such as int or char)
145    and a NAME is any other symbol.
146    Contexts where this distinction is not important can use the
147    nonterminal "name", which matches either NAME or TYPENAME.  */
148
149 %token <tsval> STRING
150 %token <sval> NSSTRING          /* ObjC Foundation "NSString" literal */
151 %token SELECTOR                 /* ObjC "@selector" pseudo-operator   */
152 %token <tsval> CHAR
153 %token <ssym> NAME /* BLOCKNAME defined below to give it higher precedence. */
154 %token <ssym> UNKNOWN_CPP_NAME
155 %token <voidval> COMPLETE
156 %token <tsym> TYPENAME
157 %token <theclass> CLASSNAME     /* ObjC Class name */
158 %type <sval> name
159 %type <svec> string_exp
160 %type <ssym> name_not_typename
161 %type <tsym> type_name
162
163  /* This is like a '[' token, but is only generated when parsing
164     Objective C.  This lets us reuse the same parser without
165     erroneously parsing ObjC-specific expressions in C.  */
166 %token OBJC_LBRAC
167
168 /* A NAME_OR_INT is a symbol which is not known in the symbol table,
169    but which would parse as a valid number in the current input radix.
170    E.g. "c" when input_radix==16.  Depending on the parse, it will be
171    turned into a name or into a number.  */
172
173 %token <ssym> NAME_OR_INT
174
175 %token OPERATOR
176 %token STRUCT CLASS UNION ENUM SIZEOF UNSIGNED COLONCOLON
177 %token TEMPLATE
178 %token ERROR
179 %token NEW DELETE
180 %type <sval> oper
181 %token REINTERPRET_CAST DYNAMIC_CAST STATIC_CAST CONST_CAST
182 %token ENTRY
183 %token TYPEOF
184 %token DECLTYPE
185 %token TYPEID
186
187 /* Special type cases, put in to allow the parser to distinguish different
188    legal basetypes.  */
189 %token SIGNED_KEYWORD LONG SHORT INT_KEYWORD CONST_KEYWORD VOLATILE_KEYWORD DOUBLE_KEYWORD
190
191 %token <sval> VARIABLE
192
193 %token <opcode> ASSIGN_MODIFY
194
195 /* C++ */
196 %token TRUEKEYWORD
197 %token FALSEKEYWORD
198
199
200 %left ','
201 %left ABOVE_COMMA
202 %right '=' ASSIGN_MODIFY
203 %right '?'
204 %left OROR
205 %left ANDAND
206 %left '|'
207 %left '^'
208 %left '&'
209 %left EQUAL NOTEQUAL
210 %left '<' '>' LEQ GEQ
211 %left LSH RSH
212 %left '@'
213 %left '+' '-'
214 %left '*' '/' '%'
215 %right UNARY INCREMENT DECREMENT
216 %right ARROW ARROW_STAR '.' DOT_STAR '[' OBJC_LBRAC '('
217 %token <ssym> BLOCKNAME
218 %token <bval> FILENAME
219 %type <bval> block
220 %left COLONCOLON
221
222 %token DOTDOTDOT
223
224 \f
225 %%
226
227 start   :       exp1
228         |       type_exp
229         ;
230
231 type_exp:       type
232                         { write_exp_elt_opcode(pstate, OP_TYPE);
233                           write_exp_elt_type(pstate, $1);
234                           write_exp_elt_opcode(pstate, OP_TYPE);}
235         |       TYPEOF '(' exp ')'
236                         {
237                           write_exp_elt_opcode (pstate, OP_TYPEOF);
238                         }
239         |       TYPEOF '(' type ')'
240                         {
241                           write_exp_elt_opcode (pstate, OP_TYPE);
242                           write_exp_elt_type (pstate, $3);
243                           write_exp_elt_opcode (pstate, OP_TYPE);
244                         }
245         |       DECLTYPE '(' exp ')'
246                         {
247                           write_exp_elt_opcode (pstate, OP_DECLTYPE);
248                         }
249         ;
250
251 /* Expressions, including the comma operator.  */
252 exp1    :       exp
253         |       exp1 ',' exp
254                         { write_exp_elt_opcode (pstate, BINOP_COMMA); }
255         ;
256
257 /* Expressions, not including the comma operator.  */
258 exp     :       '*' exp    %prec UNARY
259                         { write_exp_elt_opcode (pstate, UNOP_IND); }
260         ;
261
262 exp     :       '&' exp    %prec UNARY
263                         { write_exp_elt_opcode (pstate, UNOP_ADDR); }
264         ;
265
266 exp     :       '-' exp    %prec UNARY
267                         { write_exp_elt_opcode (pstate, UNOP_NEG); }
268         ;
269
270 exp     :       '+' exp    %prec UNARY
271                         { write_exp_elt_opcode (pstate, UNOP_PLUS); }
272         ;
273
274 exp     :       '!' exp    %prec UNARY
275                         { write_exp_elt_opcode (pstate, UNOP_LOGICAL_NOT); }
276         ;
277
278 exp     :       '~' exp    %prec UNARY
279                         { write_exp_elt_opcode (pstate, UNOP_COMPLEMENT); }
280         ;
281
282 exp     :       INCREMENT exp    %prec UNARY
283                         { write_exp_elt_opcode (pstate, UNOP_PREINCREMENT); }
284         ;
285
286 exp     :       DECREMENT exp    %prec UNARY
287                         { write_exp_elt_opcode (pstate, UNOP_PREDECREMENT); }
288         ;
289
290 exp     :       exp INCREMENT    %prec UNARY
291                         { write_exp_elt_opcode (pstate, UNOP_POSTINCREMENT); }
292         ;
293
294 exp     :       exp DECREMENT    %prec UNARY
295                         { write_exp_elt_opcode (pstate, UNOP_POSTDECREMENT); }
296         ;
297
298 exp     :       TYPEID '(' exp ')' %prec UNARY
299                         { write_exp_elt_opcode (pstate, OP_TYPEID); }
300         ;
301
302 exp     :       TYPEID '(' type_exp ')' %prec UNARY
303                         { write_exp_elt_opcode (pstate, OP_TYPEID); }
304         ;
305
306 exp     :       SIZEOF exp       %prec UNARY
307                         { write_exp_elt_opcode (pstate, UNOP_SIZEOF); }
308         ;
309
310 exp     :       exp ARROW name
311                         { write_exp_elt_opcode (pstate, STRUCTOP_PTR);
312                           write_exp_string (pstate, $3);
313                           write_exp_elt_opcode (pstate, STRUCTOP_PTR); }
314         ;
315
316 exp     :       exp ARROW name COMPLETE
317                         { mark_struct_expression (pstate);
318                           write_exp_elt_opcode (pstate, STRUCTOP_PTR);
319                           write_exp_string (pstate, $3);
320                           write_exp_elt_opcode (pstate, STRUCTOP_PTR); }
321         ;
322
323 exp     :       exp ARROW COMPLETE
324                         { struct stoken s;
325                           mark_struct_expression (pstate);
326                           write_exp_elt_opcode (pstate, STRUCTOP_PTR);
327                           s.ptr = "";
328                           s.length = 0;
329                           write_exp_string (pstate, s);
330                           write_exp_elt_opcode (pstate, STRUCTOP_PTR); }
331         ;
332
333 exp     :       exp ARROW '~' name
334                         { write_exp_elt_opcode (pstate, STRUCTOP_PTR);
335                           write_destructor_name (pstate, $4);
336                           write_exp_elt_opcode (pstate, STRUCTOP_PTR); }
337         ;
338
339 exp     :       exp ARROW '~' name COMPLETE
340                         { mark_struct_expression (pstate);
341                           write_exp_elt_opcode (pstate, STRUCTOP_PTR);
342                           write_destructor_name (pstate, $4);
343                           write_exp_elt_opcode (pstate, STRUCTOP_PTR); }
344         ;
345
346 exp     :       exp ARROW qualified_name
347                         { /* exp->type::name becomes exp->*(&type::name) */
348                           /* Note: this doesn't work if name is a
349                              static member!  FIXME */
350                           write_exp_elt_opcode (pstate, UNOP_ADDR);
351                           write_exp_elt_opcode (pstate, STRUCTOP_MPTR); }
352         ;
353
354 exp     :       exp ARROW_STAR exp
355                         { write_exp_elt_opcode (pstate, STRUCTOP_MPTR); }
356         ;
357
358 exp     :       exp '.' name
359                         { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
360                           write_exp_string (pstate, $3);
361                           write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
362         ;
363
364 exp     :       exp '.' name COMPLETE
365                         { mark_struct_expression (pstate);
366                           write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
367                           write_exp_string (pstate, $3);
368                           write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
369         ;
370
371 exp     :       exp '.' COMPLETE
372                         { struct stoken s;
373                           mark_struct_expression (pstate);
374                           write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
375                           s.ptr = "";
376                           s.length = 0;
377                           write_exp_string (pstate, s);
378                           write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
379         ;
380
381 exp     :       exp '.' '~' name
382                         { write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
383                           write_destructor_name (pstate, $4);
384                           write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
385         ;
386
387 exp     :       exp '.' '~' name COMPLETE
388                         { mark_struct_expression (pstate);
389                           write_exp_elt_opcode (pstate, STRUCTOP_STRUCT);
390                           write_destructor_name (pstate, $4);
391                           write_exp_elt_opcode (pstate, STRUCTOP_STRUCT); }
392         ;
393
394 exp     :       exp '.' qualified_name
395                         { /* exp.type::name becomes exp.*(&type::name) */
396                           /* Note: this doesn't work if name is a
397                              static member!  FIXME */
398                           write_exp_elt_opcode (pstate, UNOP_ADDR);
399                           write_exp_elt_opcode (pstate, STRUCTOP_MEMBER); }
400         ;
401
402 exp     :       exp DOT_STAR exp
403                         { write_exp_elt_opcode (pstate, STRUCTOP_MEMBER); }
404         ;
405
406 exp     :       exp '[' exp1 ']'
407                         { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); }
408         ;
409
410 exp     :       exp OBJC_LBRAC exp1 ']'
411                         { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); }
412         ;
413
414 /*
415  * The rules below parse ObjC message calls of the form:
416  *      '[' target selector {':' argument}* ']'
417  */
418
419 exp     :       OBJC_LBRAC TYPENAME
420                         {
421                           CORE_ADDR theclass;
422
423                           theclass = lookup_objc_class (parse_gdbarch (pstate),
424                                                      copy_name ($2.stoken));
425                           if (theclass == 0)
426                             error (_("%s is not an ObjC Class"),
427                                    copy_name ($2.stoken));
428                           write_exp_elt_opcode (pstate, OP_LONG);
429                           write_exp_elt_type (pstate,
430                                             parse_type (pstate)->builtin_int);
431                           write_exp_elt_longcst (pstate, (LONGEST) theclass);
432                           write_exp_elt_opcode (pstate, OP_LONG);
433                           start_msglist();
434                         }
435                 msglist ']'
436                         { write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL);
437                           end_msglist (pstate);
438                           write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL);
439                         }
440         ;
441
442 exp     :       OBJC_LBRAC CLASSNAME
443                         {
444                           write_exp_elt_opcode (pstate, OP_LONG);
445                           write_exp_elt_type (pstate,
446                                             parse_type (pstate)->builtin_int);
447                           write_exp_elt_longcst (pstate, (LONGEST) $2.theclass);
448                           write_exp_elt_opcode (pstate, OP_LONG);
449                           start_msglist();
450                         }
451                 msglist ']'
452                         { write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL);
453                           end_msglist (pstate);
454                           write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL);
455                         }
456         ;
457
458 exp     :       OBJC_LBRAC exp
459                         { start_msglist(); }
460                 msglist ']'
461                         { write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL);
462                           end_msglist (pstate);
463                           write_exp_elt_opcode (pstate, OP_OBJC_MSGCALL);
464                         }
465         ;
466
467 msglist :       name
468                         { add_msglist(&$1, 0); }
469         |       msgarglist
470         ;
471
472 msgarglist :    msgarg
473         |       msgarglist msgarg
474         ;
475
476 msgarg  :       name ':' exp
477                         { add_msglist(&$1, 1); }
478         |       ':' exp /* Unnamed arg.  */
479                         { add_msglist(0, 1);   }
480         |       ',' exp /* Variable number of args.  */
481                         { add_msglist(0, 0);   }
482         ;
483
484 exp     :       exp '('
485                         /* This is to save the value of arglist_len
486                            being accumulated by an outer function call.  */
487                         { start_arglist (); }
488                 arglist ')'     %prec ARROW
489                         { write_exp_elt_opcode (pstate, OP_FUNCALL);
490                           write_exp_elt_longcst (pstate,
491                                                  (LONGEST) end_arglist ());
492                           write_exp_elt_opcode (pstate, OP_FUNCALL); }
493         ;
494
495 /* This is here to disambiguate with the production for
496    "func()::static_var" further below, which uses
497    function_method_void.  */
498 exp     :       exp '(' ')' %prec ARROW
499                         { start_arglist ();
500                           write_exp_elt_opcode (pstate, OP_FUNCALL);
501                           write_exp_elt_longcst (pstate,
502                                                  (LONGEST) end_arglist ());
503                           write_exp_elt_opcode (pstate, OP_FUNCALL); }
504         ;
505
506
507 exp     :       UNKNOWN_CPP_NAME '('
508                         {
509                           /* This could potentially be a an argument defined
510                              lookup function (Koenig).  */
511                           write_exp_elt_opcode (pstate, OP_ADL_FUNC);
512                           write_exp_elt_block (pstate,
513                                                expression_context_block);
514                           write_exp_elt_sym (pstate,
515                                              NULL); /* Placeholder.  */
516                           write_exp_string (pstate, $1.stoken);
517                           write_exp_elt_opcode (pstate, OP_ADL_FUNC);
518
519                         /* This is to save the value of arglist_len
520                            being accumulated by an outer function call.  */
521
522                           start_arglist ();
523                         }
524                 arglist ')'     %prec ARROW
525                         {
526                           write_exp_elt_opcode (pstate, OP_FUNCALL);
527                           write_exp_elt_longcst (pstate,
528                                                  (LONGEST) end_arglist ());
529                           write_exp_elt_opcode (pstate, OP_FUNCALL);
530                         }
531         ;
532
533 lcurly  :       '{'
534                         { start_arglist (); }
535         ;
536
537 arglist :
538         ;
539
540 arglist :       exp
541                         { arglist_len = 1; }
542         ;
543
544 arglist :       arglist ',' exp   %prec ABOVE_COMMA
545                         { arglist_len++; }
546         ;
547
548 function_method:       exp '(' parameter_typelist ')' const_or_volatile
549                         { int i;
550                           VEC (type_ptr) *type_list = $3;
551                           struct type *type_elt;
552                           LONGEST len = VEC_length (type_ptr, type_list);
553
554                           write_exp_elt_opcode (pstate, TYPE_INSTANCE);
555                           /* Save the const/volatile qualifiers as
556                              recorded by the const_or_volatile
557                              production's actions.  */
558                           write_exp_elt_longcst (pstate,
559                                                  follow_type_instance_flags ());
560                           write_exp_elt_longcst (pstate, len);
561                           for (i = 0;
562                                VEC_iterate (type_ptr, type_list, i, type_elt);
563                                ++i)
564                             write_exp_elt_type (pstate, type_elt);
565                           write_exp_elt_longcst(pstate, len);
566                           write_exp_elt_opcode (pstate, TYPE_INSTANCE);
567                           VEC_free (type_ptr, type_list);
568                         }
569         ;
570
571 function_method_void:       exp '(' ')' const_or_volatile
572                        { write_exp_elt_opcode (pstate, TYPE_INSTANCE);
573                          /* See above.  */
574                          write_exp_elt_longcst (pstate,
575                                                 follow_type_instance_flags ());
576                          write_exp_elt_longcst (pstate, 0);
577                          write_exp_elt_longcst (pstate, 0);
578                          write_exp_elt_opcode (pstate, TYPE_INSTANCE);
579                        }
580        ;
581
582 exp     :       function_method
583         ;
584
585 /* Normally we must interpret "func()" as a function call, instead of
586    a type.  The user needs to write func(void) to disambiguate.
587    However, in the "func()::static_var" case, there's no
588    ambiguity.  */
589 function_method_void_or_typelist: function_method
590         |               function_method_void
591         ;
592
593 exp     :       function_method_void_or_typelist COLONCOLON name
594                         {
595                           write_exp_elt_opcode (pstate, OP_FUNC_STATIC_VAR);
596                           write_exp_string (pstate, $3);
597                           write_exp_elt_opcode (pstate, OP_FUNC_STATIC_VAR);
598                         }
599         ;
600
601 rcurly  :       '}'
602                         { $$ = end_arglist () - 1; }
603         ;
604 exp     :       lcurly arglist rcurly   %prec ARROW
605                         { write_exp_elt_opcode (pstate, OP_ARRAY);
606                           write_exp_elt_longcst (pstate, (LONGEST) 0);
607                           write_exp_elt_longcst (pstate, (LONGEST) $3);
608                           write_exp_elt_opcode (pstate, OP_ARRAY); }
609         ;
610
611 exp     :       lcurly type_exp rcurly exp  %prec UNARY
612                         { write_exp_elt_opcode (pstate, UNOP_MEMVAL_TYPE); }
613         ;
614
615 exp     :       '(' type_exp ')' exp  %prec UNARY
616                         { write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); }
617         ;
618
619 exp     :       '(' exp1 ')'
620                         { }
621         ;
622
623 /* Binary operators in order of decreasing precedence.  */
624
625 exp     :       exp '@' exp
626                         { write_exp_elt_opcode (pstate, BINOP_REPEAT); }
627         ;
628
629 exp     :       exp '*' exp
630                         { write_exp_elt_opcode (pstate, BINOP_MUL); }
631         ;
632
633 exp     :       exp '/' exp
634                         { write_exp_elt_opcode (pstate, BINOP_DIV); }
635         ;
636
637 exp     :       exp '%' exp
638                         { write_exp_elt_opcode (pstate, BINOP_REM); }
639         ;
640
641 exp     :       exp '+' exp
642                         { write_exp_elt_opcode (pstate, BINOP_ADD); }
643         ;
644
645 exp     :       exp '-' exp
646                         { write_exp_elt_opcode (pstate, BINOP_SUB); }
647         ;
648
649 exp     :       exp LSH exp
650                         { write_exp_elt_opcode (pstate, BINOP_LSH); }
651         ;
652
653 exp     :       exp RSH exp
654                         { write_exp_elt_opcode (pstate, BINOP_RSH); }
655         ;
656
657 exp     :       exp EQUAL exp
658                         { write_exp_elt_opcode (pstate, BINOP_EQUAL); }
659         ;
660
661 exp     :       exp NOTEQUAL exp
662                         { write_exp_elt_opcode (pstate, BINOP_NOTEQUAL); }
663         ;
664
665 exp     :       exp LEQ exp
666                         { write_exp_elt_opcode (pstate, BINOP_LEQ); }
667         ;
668
669 exp     :       exp GEQ exp
670                         { write_exp_elt_opcode (pstate, BINOP_GEQ); }
671         ;
672
673 exp     :       exp '<' exp
674                         { write_exp_elt_opcode (pstate, BINOP_LESS); }
675         ;
676
677 exp     :       exp '>' exp
678                         { write_exp_elt_opcode (pstate, BINOP_GTR); }
679         ;
680
681 exp     :       exp '&' exp
682                         { write_exp_elt_opcode (pstate, BINOP_BITWISE_AND); }
683         ;
684
685 exp     :       exp '^' exp
686                         { write_exp_elt_opcode (pstate, BINOP_BITWISE_XOR); }
687         ;
688
689 exp     :       exp '|' exp
690                         { write_exp_elt_opcode (pstate, BINOP_BITWISE_IOR); }
691         ;
692
693 exp     :       exp ANDAND exp
694                         { write_exp_elt_opcode (pstate, BINOP_LOGICAL_AND); }
695         ;
696
697 exp     :       exp OROR exp
698                         { write_exp_elt_opcode (pstate, BINOP_LOGICAL_OR); }
699         ;
700
701 exp     :       exp '?' exp ':' exp     %prec '?'
702                         { write_exp_elt_opcode (pstate, TERNOP_COND); }
703         ;
704
705 exp     :       exp '=' exp
706                         { write_exp_elt_opcode (pstate, BINOP_ASSIGN); }
707         ;
708
709 exp     :       exp ASSIGN_MODIFY exp
710                         { write_exp_elt_opcode (pstate, BINOP_ASSIGN_MODIFY);
711                           write_exp_elt_opcode (pstate, $2);
712                           write_exp_elt_opcode (pstate,
713                                                 BINOP_ASSIGN_MODIFY); }
714         ;
715
716 exp     :       INT
717                         { write_exp_elt_opcode (pstate, OP_LONG);
718                           write_exp_elt_type (pstate, $1.type);
719                           write_exp_elt_longcst (pstate, (LONGEST) ($1.val));
720                           write_exp_elt_opcode (pstate, OP_LONG); }
721         ;
722
723 exp     :       CHAR
724                         {
725                           struct stoken_vector vec;
726                           vec.len = 1;
727                           vec.tokens = &$1;
728                           write_exp_string_vector (pstate, $1.type, &vec);
729                         }
730         ;
731
732 exp     :       NAME_OR_INT
733                         { YYSTYPE val;
734                           parse_number (pstate, $1.stoken.ptr,
735                                         $1.stoken.length, 0, &val);
736                           write_exp_elt_opcode (pstate, OP_LONG);
737                           write_exp_elt_type (pstate, val.typed_val_int.type);
738                           write_exp_elt_longcst (pstate,
739                                             (LONGEST) val.typed_val_int.val);
740                           write_exp_elt_opcode (pstate, OP_LONG);
741                         }
742         ;
743
744
745 exp     :       FLOAT
746                         { write_exp_elt_opcode (pstate, OP_FLOAT);
747                           write_exp_elt_type (pstate, $1.type);
748                           write_exp_elt_floatcst (pstate, $1.val);
749                           write_exp_elt_opcode (pstate, OP_FLOAT); }
750         ;
751
752 exp     :       variable
753         ;
754
755 exp     :       VARIABLE
756                         {
757                           write_dollar_variable (pstate, $1);
758                         }
759         ;
760
761 exp     :       SELECTOR '(' name ')'
762                         {
763                           write_exp_elt_opcode (pstate, OP_OBJC_SELECTOR);
764                           write_exp_string (pstate, $3);
765                           write_exp_elt_opcode (pstate, OP_OBJC_SELECTOR); }
766         ;
767
768 exp     :       SIZEOF '(' type ')'     %prec UNARY
769                         { struct type *type = $3;
770                           write_exp_elt_opcode (pstate, OP_LONG);
771                           write_exp_elt_type (pstate, lookup_signed_typename
772                                               (parse_language (pstate),
773                                                parse_gdbarch (pstate),
774                                                "int"));
775                           type = check_typedef (type);
776
777                             /* $5.3.3/2 of the C++ Standard (n3290 draft)
778                                says of sizeof:  "When applied to a reference
779                                or a reference type, the result is the size of
780                                the referenced type."  */
781                           if (TYPE_IS_REFERENCE (type))
782                             type = check_typedef (TYPE_TARGET_TYPE (type));
783                           write_exp_elt_longcst (pstate,
784                                                  (LONGEST) TYPE_LENGTH (type));
785                           write_exp_elt_opcode (pstate, OP_LONG); }
786         ;
787
788 exp     :       REINTERPRET_CAST '<' type_exp '>' '(' exp ')' %prec UNARY
789                         { write_exp_elt_opcode (pstate,
790                                                 UNOP_REINTERPRET_CAST); }
791         ;
792
793 exp     :       STATIC_CAST '<' type_exp '>' '(' exp ')' %prec UNARY
794                         { write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); }
795         ;
796
797 exp     :       DYNAMIC_CAST '<' type_exp '>' '(' exp ')' %prec UNARY
798                         { write_exp_elt_opcode (pstate, UNOP_DYNAMIC_CAST); }
799         ;
800
801 exp     :       CONST_CAST '<' type_exp '>' '(' exp ')' %prec UNARY
802                         { /* We could do more error checking here, but
803                              it doesn't seem worthwhile.  */
804                           write_exp_elt_opcode (pstate, UNOP_CAST_TYPE); }
805         ;
806
807 string_exp:
808                 STRING
809                         {
810                           /* We copy the string here, and not in the
811                              lexer, to guarantee that we do not leak a
812                              string.  Note that we follow the
813                              NUL-termination convention of the
814                              lexer.  */
815                           struct typed_stoken *vec = XNEW (struct typed_stoken);
816                           $$.len = 1;
817                           $$.tokens = vec;
818
819                           vec->type = $1.type;
820                           vec->length = $1.length;
821                           vec->ptr = (char *) malloc ($1.length + 1);
822                           memcpy (vec->ptr, $1.ptr, $1.length + 1);
823                         }
824
825         |       string_exp STRING
826                         {
827                           /* Note that we NUL-terminate here, but just
828                              for convenience.  */
829                           char *p;
830                           ++$$.len;
831                           $$.tokens = XRESIZEVEC (struct typed_stoken,
832                                                   $$.tokens, $$.len);
833
834                           p = (char *) malloc ($2.length + 1);
835                           memcpy (p, $2.ptr, $2.length + 1);
836
837                           $$.tokens[$$.len - 1].type = $2.type;
838                           $$.tokens[$$.len - 1].length = $2.length;
839                           $$.tokens[$$.len - 1].ptr = p;
840                         }
841                 ;
842
843 exp     :       string_exp
844                         {
845                           int i;
846                           c_string_type type = C_STRING;
847
848                           for (i = 0; i < $1.len; ++i)
849                             {
850                               switch ($1.tokens[i].type)
851                                 {
852                                 case C_STRING:
853                                   break;
854                                 case C_WIDE_STRING:
855                                 case C_STRING_16:
856                                 case C_STRING_32:
857                                   if (type != C_STRING
858                                       && type != $1.tokens[i].type)
859                                     error (_("Undefined string concatenation."));
860                                   type = (enum c_string_type_values) $1.tokens[i].type;
861                                   break;
862                                 default:
863                                   /* internal error */
864                                   internal_error (__FILE__, __LINE__,
865                                                   "unrecognized type in string concatenation");
866                                 }
867                             }
868
869                           write_exp_string_vector (pstate, type, &$1);
870                           for (i = 0; i < $1.len; ++i)
871                             free ($1.tokens[i].ptr);
872                           free ($1.tokens);
873                         }
874         ;
875
876 exp     :       NSSTRING        /* ObjC NextStep NSString constant
877                                  * of the form '@' '"' string '"'.
878                                  */
879                         { write_exp_elt_opcode (pstate, OP_OBJC_NSSTRING);
880                           write_exp_string (pstate, $1);
881                           write_exp_elt_opcode (pstate, OP_OBJC_NSSTRING); }
882         ;
883
884 /* C++.  */
885 exp     :       TRUEKEYWORD
886                         { write_exp_elt_opcode (pstate, OP_LONG);
887                           write_exp_elt_type (pstate,
888                                           parse_type (pstate)->builtin_bool);
889                           write_exp_elt_longcst (pstate, (LONGEST) 1);
890                           write_exp_elt_opcode (pstate, OP_LONG); }
891         ;
892
893 exp     :       FALSEKEYWORD
894                         { write_exp_elt_opcode (pstate, OP_LONG);
895                           write_exp_elt_type (pstate,
896                                           parse_type (pstate)->builtin_bool);
897                           write_exp_elt_longcst (pstate, (LONGEST) 0);
898                           write_exp_elt_opcode (pstate, OP_LONG); }
899         ;
900
901 /* end of C++.  */
902
903 block   :       BLOCKNAME
904                         {
905                           if ($1.sym.symbol)
906                             $$ = SYMBOL_BLOCK_VALUE ($1.sym.symbol);
907                           else
908                             error (_("No file or function \"%s\"."),
909                                    copy_name ($1.stoken));
910                         }
911         |       FILENAME
912                         {
913                           $$ = $1;
914                         }
915         ;
916
917 block   :       block COLONCOLON name
918                         { struct symbol *tem
919                             = lookup_symbol (copy_name ($3), $1,
920                                              VAR_DOMAIN, NULL).symbol;
921
922                           if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
923                             error (_("No function \"%s\" in specified context."),
924                                    copy_name ($3));
925                           $$ = SYMBOL_BLOCK_VALUE (tem); }
926         ;
927
928 variable:       name_not_typename ENTRY
929                         { struct symbol *sym = $1.sym.symbol;
930
931                           if (sym == NULL || !SYMBOL_IS_ARGUMENT (sym)
932                               || !symbol_read_needs_frame (sym))
933                             error (_("@entry can be used only for function "
934                                      "parameters, not for \"%s\""),
935                                    copy_name ($1.stoken));
936
937                           write_exp_elt_opcode (pstate, OP_VAR_ENTRY_VALUE);
938                           write_exp_elt_sym (pstate, sym);
939                           write_exp_elt_opcode (pstate, OP_VAR_ENTRY_VALUE);
940                         }
941         ;
942
943 variable:       block COLONCOLON name
944                         { struct block_symbol sym
945                             = lookup_symbol (copy_name ($3), $1,
946                                              VAR_DOMAIN, NULL);
947
948                           if (sym.symbol == 0)
949                             error (_("No symbol \"%s\" in specified context."),
950                                    copy_name ($3));
951                           if (symbol_read_needs_frame (sym.symbol))
952                             {
953                               if (innermost_block == 0
954                                   || contained_in (sym.block,
955                                                    innermost_block))
956                                 innermost_block = sym.block;
957                             }
958
959                           write_exp_elt_opcode (pstate, OP_VAR_VALUE);
960                           write_exp_elt_block (pstate, sym.block);
961                           write_exp_elt_sym (pstate, sym.symbol);
962                           write_exp_elt_opcode (pstate, OP_VAR_VALUE); }
963         ;
964
965 qualified_name: TYPENAME COLONCOLON name
966                         {
967                           struct type *type = $1.type;
968                           type = check_typedef (type);
969                           if (!type_aggregate_p (type))
970                             error (_("`%s' is not defined as an aggregate type."),
971                                    TYPE_SAFE_NAME (type));
972
973                           write_exp_elt_opcode (pstate, OP_SCOPE);
974                           write_exp_elt_type (pstate, type);
975                           write_exp_string (pstate, $3);
976                           write_exp_elt_opcode (pstate, OP_SCOPE);
977                         }
978         |       TYPENAME COLONCOLON '~' name
979                         {
980                           struct type *type = $1.type;
981                           struct stoken tmp_token;
982                           char *buf;
983
984                           type = check_typedef (type);
985                           if (!type_aggregate_p (type))
986                             error (_("`%s' is not defined as an aggregate type."),
987                                    TYPE_SAFE_NAME (type));
988                           buf = (char *) alloca ($4.length + 2);
989                           tmp_token.ptr = buf;
990                           tmp_token.length = $4.length + 1;
991                           buf[0] = '~';
992                           memcpy (buf+1, $4.ptr, $4.length);
993                           buf[tmp_token.length] = 0;
994
995                           /* Check for valid destructor name.  */
996                           destructor_name_p (tmp_token.ptr, $1.type);
997                           write_exp_elt_opcode (pstate, OP_SCOPE);
998                           write_exp_elt_type (pstate, type);
999                           write_exp_string (pstate, tmp_token);
1000                           write_exp_elt_opcode (pstate, OP_SCOPE);
1001                         }
1002         |       TYPENAME COLONCOLON name COLONCOLON name
1003                         {
1004                           char *copy = copy_name ($3);
1005                           error (_("No type \"%s\" within class "
1006                                    "or namespace \"%s\"."),
1007                                  copy, TYPE_SAFE_NAME ($1.type));
1008                         }
1009         ;
1010
1011 variable:       qualified_name
1012         |       COLONCOLON name_not_typename
1013                         {
1014                           char *name = copy_name ($2.stoken);
1015                           struct symbol *sym;
1016                           struct bound_minimal_symbol msymbol;
1017
1018                           sym
1019                             = lookup_symbol (name, (const struct block *) NULL,
1020                                              VAR_DOMAIN, NULL).symbol;
1021                           if (sym)
1022                             {
1023                               write_exp_elt_opcode (pstate, OP_VAR_VALUE);
1024                               write_exp_elt_block (pstate, NULL);
1025                               write_exp_elt_sym (pstate, sym);
1026                               write_exp_elt_opcode (pstate, OP_VAR_VALUE);
1027                               break;
1028                             }
1029
1030                           msymbol = lookup_bound_minimal_symbol (name);
1031                           if (msymbol.minsym != NULL)
1032                             write_exp_msymbol (pstate, msymbol);
1033                           else if (!have_full_symbols () && !have_partial_symbols ())
1034                             error (_("No symbol table is loaded.  Use the \"file\" command."));
1035                           else
1036                             error (_("No symbol \"%s\" in current context."), name);
1037                         }
1038         ;
1039
1040 variable:       name_not_typename
1041                         { struct block_symbol sym = $1.sym;
1042
1043                           if (sym.symbol)
1044                             {
1045                               if (symbol_read_needs_frame (sym.symbol))
1046                                 {
1047                                   if (innermost_block == 0
1048                                       || contained_in (sym.block,
1049                                                        innermost_block))
1050                                     innermost_block = sym.block;
1051                                 }
1052
1053                               write_exp_elt_opcode (pstate, OP_VAR_VALUE);
1054                               write_exp_elt_block (pstate, sym.block);
1055                               write_exp_elt_sym (pstate, sym.symbol);
1056                               write_exp_elt_opcode (pstate, OP_VAR_VALUE);
1057                             }
1058                           else if ($1.is_a_field_of_this)
1059                             {
1060                               /* C++: it hangs off of `this'.  Must
1061                                  not inadvertently convert from a method call
1062                                  to data ref.  */
1063                               if (innermost_block == 0
1064                                   || contained_in (sym.block,
1065                                                    innermost_block))
1066                                 innermost_block = sym.block;
1067                               write_exp_elt_opcode (pstate, OP_THIS);
1068                               write_exp_elt_opcode (pstate, OP_THIS);
1069                               write_exp_elt_opcode (pstate, STRUCTOP_PTR);
1070                               write_exp_string (pstate, $1.stoken);
1071                               write_exp_elt_opcode (pstate, STRUCTOP_PTR);
1072                             }
1073                           else
1074                             {
1075                               char *arg = copy_name ($1.stoken);
1076
1077                               bound_minimal_symbol msymbol
1078                                 = lookup_bound_minimal_symbol (arg);
1079                               if (msymbol.minsym == NULL)
1080                                 {
1081                                   if (!have_full_symbols () && !have_partial_symbols ())
1082                                     error (_("No symbol table is loaded.  Use the \"file\" command."));
1083                                   else
1084                                     error (_("No symbol \"%s\" in current context."),
1085                                            copy_name ($1.stoken));
1086                                 }
1087
1088                               /* This minsym might be an alias for
1089                                  another function.  See if we can find
1090                                  the debug symbol for the target, and
1091                                  if so, use it instead, since it has
1092                                  return type / prototype info.  This
1093                                  is important for example for "p
1094                                  *__errno_location()".  */
1095                               symbol *alias_target
1096                                 = find_function_alias_target (msymbol);
1097                               if (alias_target != NULL)
1098                                 {
1099                                   write_exp_elt_opcode (pstate, OP_VAR_VALUE);
1100                                   write_exp_elt_block
1101                                     (pstate, SYMBOL_BLOCK_VALUE (alias_target));
1102                                   write_exp_elt_sym (pstate, alias_target);
1103                                   write_exp_elt_opcode (pstate, OP_VAR_VALUE);
1104                                 }
1105                               else
1106                                 write_exp_msymbol (pstate, msymbol);
1107                             }
1108                         }
1109         ;
1110
1111 space_identifier : '@' NAME
1112                 { insert_type_address_space (pstate, copy_name ($2.stoken)); }
1113         ;
1114
1115 const_or_volatile: const_or_volatile_noopt
1116         |
1117         ;
1118
1119 cv_with_space_id : const_or_volatile space_identifier const_or_volatile
1120         ;
1121
1122 const_or_volatile_or_space_identifier_noopt: cv_with_space_id
1123         | const_or_volatile_noopt
1124         ;
1125
1126 const_or_volatile_or_space_identifier:
1127                 const_or_volatile_or_space_identifier_noopt
1128         |
1129         ;
1130
1131 ptr_operator:
1132                 ptr_operator '*'
1133                         { insert_type (tp_pointer); }
1134                 const_or_volatile_or_space_identifier
1135         |       '*'
1136                         { insert_type (tp_pointer); }
1137                 const_or_volatile_or_space_identifier
1138         |       '&'
1139                         { insert_type (tp_reference); }
1140         |       '&' ptr_operator
1141                         { insert_type (tp_reference); }
1142         |       ANDAND
1143                         { insert_type (tp_rvalue_reference); }
1144         |       ANDAND ptr_operator
1145                         { insert_type (tp_rvalue_reference); }
1146         ;
1147
1148 ptr_operator_ts: ptr_operator
1149                         {
1150                           $$ = get_type_stack ();
1151                           /* This cleanup is eventually run by
1152                              c_parse.  */
1153                           make_cleanup (type_stack_cleanup, $$);
1154                         }
1155         ;
1156
1157 abs_decl:       ptr_operator_ts direct_abs_decl
1158                         { $$ = append_type_stack ($2, $1); }
1159         |       ptr_operator_ts
1160         |       direct_abs_decl
1161         ;
1162
1163 direct_abs_decl: '(' abs_decl ')'
1164                         { $$ = $2; }
1165         |       direct_abs_decl array_mod
1166                         {
1167                           push_type_stack ($1);
1168                           push_type_int ($2);
1169                           push_type (tp_array);
1170                           $$ = get_type_stack ();
1171                         }
1172         |       array_mod
1173                         {
1174                           push_type_int ($1);
1175                           push_type (tp_array);
1176                           $$ = get_type_stack ();
1177                         }
1178
1179         |       direct_abs_decl func_mod
1180                         {
1181                           push_type_stack ($1);
1182                           push_typelist ($2);
1183                           $$ = get_type_stack ();
1184                         }
1185         |       func_mod
1186                         {
1187                           push_typelist ($1);
1188                           $$ = get_type_stack ();
1189                         }
1190         ;
1191
1192 array_mod:      '[' ']'
1193                         { $$ = -1; }
1194         |       OBJC_LBRAC ']'
1195                         { $$ = -1; }
1196         |       '[' INT ']'
1197                         { $$ = $2.val; }
1198         |       OBJC_LBRAC INT ']'
1199                         { $$ = $2.val; }
1200         ;
1201
1202 func_mod:       '(' ')'
1203                         { $$ = NULL; }
1204         |       '(' parameter_typelist ')'
1205                         { $$ = $2; }
1206         ;
1207
1208 /* We used to try to recognize pointer to member types here, but
1209    that didn't work (shift/reduce conflicts meant that these rules never
1210    got executed).  The problem is that
1211      int (foo::bar::baz::bizzle)
1212    is a function type but
1213      int (foo::bar::baz::bizzle::*)
1214    is a pointer to member type.  Stroustrup loses again!  */
1215
1216 type    :       ptype
1217         ;
1218
1219 typebase  /* Implements (approximately): (type-qualifier)* type-specifier */
1220         :       TYPENAME
1221                         { $$ = $1.type; }
1222         |       INT_KEYWORD
1223                         { $$ = lookup_signed_typename (parse_language (pstate),
1224                                                        parse_gdbarch (pstate),
1225                                                        "int"); }
1226         |       LONG
1227                         { $$ = lookup_signed_typename (parse_language (pstate),
1228                                                        parse_gdbarch (pstate),
1229                                                        "long"); }
1230         |       SHORT
1231                         { $$ = lookup_signed_typename (parse_language (pstate),
1232                                                        parse_gdbarch (pstate),
1233                                                        "short"); }
1234         |       LONG INT_KEYWORD
1235                         { $$ = lookup_signed_typename (parse_language (pstate),
1236                                                        parse_gdbarch (pstate),
1237                                                        "long"); }
1238         |       LONG SIGNED_KEYWORD INT_KEYWORD
1239                         { $$ = lookup_signed_typename (parse_language (pstate),
1240                                                        parse_gdbarch (pstate),
1241                                                        "long"); }
1242         |       LONG SIGNED_KEYWORD
1243                         { $$ = lookup_signed_typename (parse_language (pstate),
1244                                                        parse_gdbarch (pstate),
1245                                                        "long"); }
1246         |       SIGNED_KEYWORD LONG INT_KEYWORD
1247                         { $$ = lookup_signed_typename (parse_language (pstate),
1248                                                        parse_gdbarch (pstate),
1249                                                        "long"); }
1250         |       UNSIGNED LONG INT_KEYWORD
1251                         { $$ = lookup_unsigned_typename (parse_language (pstate),
1252                                                          parse_gdbarch (pstate),
1253                                                          "long"); }
1254         |       LONG UNSIGNED INT_KEYWORD
1255                         { $$ = lookup_unsigned_typename (parse_language (pstate),
1256                                                          parse_gdbarch (pstate),
1257                                                          "long"); }
1258         |       LONG UNSIGNED
1259                         { $$ = lookup_unsigned_typename (parse_language (pstate),
1260                                                          parse_gdbarch (pstate),
1261                                                          "long"); }
1262         |       LONG LONG
1263                         { $$ = lookup_signed_typename (parse_language (pstate),
1264                                                        parse_gdbarch (pstate),
1265                                                        "long long"); }
1266         |       LONG LONG INT_KEYWORD
1267                         { $$ = lookup_signed_typename (parse_language (pstate),
1268                                                        parse_gdbarch (pstate),
1269                                                        "long long"); }
1270         |       LONG LONG SIGNED_KEYWORD INT_KEYWORD
1271                         { $$ = lookup_signed_typename (parse_language (pstate),
1272                                                        parse_gdbarch (pstate),
1273                                                        "long long"); }
1274         |       LONG LONG SIGNED_KEYWORD
1275                         { $$ = lookup_signed_typename (parse_language (pstate),
1276                                                        parse_gdbarch (pstate),
1277                                                        "long long"); }
1278         |       SIGNED_KEYWORD LONG LONG
1279                         { $$ = lookup_signed_typename (parse_language (pstate),
1280                                                        parse_gdbarch (pstate),
1281                                                        "long long"); }
1282         |       SIGNED_KEYWORD LONG LONG INT_KEYWORD
1283                         { $$ = lookup_signed_typename (parse_language (pstate),
1284                                                        parse_gdbarch (pstate),
1285                                                        "long long"); }
1286         |       UNSIGNED LONG LONG
1287                         { $$ = lookup_unsigned_typename (parse_language (pstate),
1288                                                          parse_gdbarch (pstate),
1289                                                          "long long"); }
1290         |       UNSIGNED LONG LONG INT_KEYWORD
1291                         { $$ = lookup_unsigned_typename (parse_language (pstate),
1292                                                          parse_gdbarch (pstate),
1293                                                          "long long"); }
1294         |       LONG LONG UNSIGNED
1295                         { $$ = lookup_unsigned_typename (parse_language (pstate),
1296                                                          parse_gdbarch (pstate),
1297                                                          "long long"); }
1298         |       LONG LONG UNSIGNED INT_KEYWORD
1299                         { $$ = lookup_unsigned_typename (parse_language (pstate),
1300                                                          parse_gdbarch (pstate),
1301                                                          "long long"); }
1302         |       SHORT INT_KEYWORD
1303                         { $$ = lookup_signed_typename (parse_language (pstate),
1304                                                        parse_gdbarch (pstate),
1305                                                        "short"); }
1306         |       SHORT SIGNED_KEYWORD INT_KEYWORD
1307                         { $$ = lookup_signed_typename (parse_language (pstate),
1308                                                        parse_gdbarch (pstate),
1309                                                        "short"); }
1310         |       SHORT SIGNED_KEYWORD
1311                         { $$ = lookup_signed_typename (parse_language (pstate),
1312                                                        parse_gdbarch (pstate),
1313                                                        "short"); }
1314         |       UNSIGNED SHORT INT_KEYWORD
1315                         { $$ = lookup_unsigned_typename (parse_language (pstate),
1316                                                          parse_gdbarch (pstate),
1317                                                          "short"); }
1318         |       SHORT UNSIGNED
1319                         { $$ = lookup_unsigned_typename (parse_language (pstate),
1320                                                          parse_gdbarch (pstate),
1321                                                          "short"); }
1322         |       SHORT UNSIGNED INT_KEYWORD
1323                         { $$ = lookup_unsigned_typename (parse_language (pstate),
1324                                                          parse_gdbarch (pstate),
1325                                                          "short"); }
1326         |       DOUBLE_KEYWORD
1327                         { $$ = lookup_typename (parse_language (pstate),
1328                                                 parse_gdbarch (pstate),
1329                                                 "double",
1330                                                 (struct block *) NULL,
1331                                                 0); }
1332         |       LONG DOUBLE_KEYWORD
1333                         { $$ = lookup_typename (parse_language (pstate),
1334                                                 parse_gdbarch (pstate),
1335                                                 "long double",
1336                                                 (struct block *) NULL,
1337                                                 0); }
1338         |       STRUCT name
1339                         { $$ = lookup_struct (copy_name ($2),
1340                                               expression_context_block); }
1341         |       STRUCT COMPLETE
1342                         {
1343                           mark_completion_tag (TYPE_CODE_STRUCT, "", 0);
1344                           $$ = NULL;
1345                         }
1346         |       STRUCT name COMPLETE
1347                         {
1348                           mark_completion_tag (TYPE_CODE_STRUCT, $2.ptr,
1349                                                $2.length);
1350                           $$ = NULL;
1351                         }
1352         |       CLASS name
1353                         { $$ = lookup_struct (copy_name ($2),
1354                                               expression_context_block); }
1355         |       CLASS COMPLETE
1356                         {
1357                           mark_completion_tag (TYPE_CODE_STRUCT, "", 0);
1358                           $$ = NULL;
1359                         }
1360         |       CLASS name COMPLETE
1361                         {
1362                           mark_completion_tag (TYPE_CODE_STRUCT, $2.ptr,
1363                                                $2.length);
1364                           $$ = NULL;
1365                         }
1366         |       UNION name
1367                         { $$ = lookup_union (copy_name ($2),
1368                                              expression_context_block); }
1369         |       UNION COMPLETE
1370                         {
1371                           mark_completion_tag (TYPE_CODE_UNION, "", 0);
1372                           $$ = NULL;
1373                         }
1374         |       UNION name COMPLETE
1375                         {
1376                           mark_completion_tag (TYPE_CODE_UNION, $2.ptr,
1377                                                $2.length);
1378                           $$ = NULL;
1379                         }
1380         |       ENUM name
1381                         { $$ = lookup_enum (copy_name ($2),
1382                                             expression_context_block); }
1383         |       ENUM COMPLETE
1384                         {
1385                           mark_completion_tag (TYPE_CODE_ENUM, "", 0);
1386                           $$ = NULL;
1387                         }
1388         |       ENUM name COMPLETE
1389                         {
1390                           mark_completion_tag (TYPE_CODE_ENUM, $2.ptr,
1391                                                $2.length);
1392                           $$ = NULL;
1393                         }
1394         |       UNSIGNED type_name
1395                         { $$ = lookup_unsigned_typename (parse_language (pstate),
1396                                                          parse_gdbarch (pstate),
1397                                                          TYPE_NAME($2.type)); }
1398         |       UNSIGNED
1399                         { $$ = lookup_unsigned_typename (parse_language (pstate),
1400                                                          parse_gdbarch (pstate),
1401                                                          "int"); }
1402         |       SIGNED_KEYWORD type_name
1403                         { $$ = lookup_signed_typename (parse_language (pstate),
1404                                                        parse_gdbarch (pstate),
1405                                                        TYPE_NAME($2.type)); }
1406         |       SIGNED_KEYWORD
1407                         { $$ = lookup_signed_typename (parse_language (pstate),
1408                                                        parse_gdbarch (pstate),
1409                                                        "int"); }
1410                 /* It appears that this rule for templates is never
1411                    reduced; template recognition happens by lookahead
1412                    in the token processing code in yylex. */
1413         |       TEMPLATE name '<' type '>'
1414                         { $$ = lookup_template_type(copy_name($2), $4,
1415                                                     expression_context_block);
1416                         }
1417         | const_or_volatile_or_space_identifier_noopt typebase
1418                         { $$ = follow_types ($2); }
1419         | typebase const_or_volatile_or_space_identifier_noopt
1420                         { $$ = follow_types ($1); }
1421         ;
1422
1423 type_name:      TYPENAME
1424         |       INT_KEYWORD
1425                 {
1426                   $$.stoken.ptr = "int";
1427                   $$.stoken.length = 3;
1428                   $$.type = lookup_signed_typename (parse_language (pstate),
1429                                                     parse_gdbarch (pstate),
1430                                                     "int");
1431                 }
1432         |       LONG
1433                 {
1434                   $$.stoken.ptr = "long";
1435                   $$.stoken.length = 4;
1436                   $$.type = lookup_signed_typename (parse_language (pstate),
1437                                                     parse_gdbarch (pstate),
1438                                                     "long");
1439                 }
1440         |       SHORT
1441                 {
1442                   $$.stoken.ptr = "short";
1443                   $$.stoken.length = 5;
1444                   $$.type = lookup_signed_typename (parse_language (pstate),
1445                                                     parse_gdbarch (pstate),
1446                                                     "short");
1447                 }
1448         ;
1449
1450 parameter_typelist:
1451                 nonempty_typelist
1452                         { check_parameter_typelist ($1); }
1453         |       nonempty_typelist ',' DOTDOTDOT
1454                         {
1455                           VEC_safe_push (type_ptr, $1, NULL);
1456                           check_parameter_typelist ($1);
1457                           $$ = $1;
1458                         }
1459         ;
1460
1461 nonempty_typelist
1462         :       type
1463                 {
1464                   VEC (type_ptr) *typelist = NULL;
1465                   VEC_safe_push (type_ptr, typelist, $1);
1466                   $$ = typelist;
1467                 }
1468         |       nonempty_typelist ',' type
1469                 {
1470                   VEC_safe_push (type_ptr, $1, $3);
1471                   $$ = $1;
1472                 }
1473         ;
1474
1475 ptype   :       typebase
1476         |       ptype abs_decl
1477                 {
1478                   push_type_stack ($2);
1479                   $$ = follow_types ($1);
1480                 }
1481         ;
1482
1483 conversion_type_id: typebase conversion_declarator
1484                 { $$ = follow_types ($1); }
1485         ;
1486
1487 conversion_declarator:  /* Nothing.  */
1488         | ptr_operator conversion_declarator
1489         ;
1490
1491 const_and_volatile:     CONST_KEYWORD VOLATILE_KEYWORD
1492         |               VOLATILE_KEYWORD CONST_KEYWORD
1493         ;
1494
1495 const_or_volatile_noopt:        const_and_volatile
1496                         { insert_type (tp_const);
1497                           insert_type (tp_volatile);
1498                         }
1499         |               CONST_KEYWORD
1500                         { insert_type (tp_const); }
1501         |               VOLATILE_KEYWORD
1502                         { insert_type (tp_volatile); }
1503         ;
1504
1505 oper:   OPERATOR NEW
1506                         { $$ = operator_stoken (" new"); }
1507         |       OPERATOR DELETE
1508                         { $$ = operator_stoken (" delete"); }
1509         |       OPERATOR NEW '[' ']'
1510                         { $$ = operator_stoken (" new[]"); }
1511         |       OPERATOR DELETE '[' ']'
1512                         { $$ = operator_stoken (" delete[]"); }
1513         |       OPERATOR NEW OBJC_LBRAC ']'
1514                         { $$ = operator_stoken (" new[]"); }
1515         |       OPERATOR DELETE OBJC_LBRAC ']'
1516                         { $$ = operator_stoken (" delete[]"); }
1517         |       OPERATOR '+'
1518                         { $$ = operator_stoken ("+"); }
1519         |       OPERATOR '-'
1520                         { $$ = operator_stoken ("-"); }
1521         |       OPERATOR '*'
1522                         { $$ = operator_stoken ("*"); }
1523         |       OPERATOR '/'
1524                         { $$ = operator_stoken ("/"); }
1525         |       OPERATOR '%'
1526                         { $$ = operator_stoken ("%"); }
1527         |       OPERATOR '^'
1528                         { $$ = operator_stoken ("^"); }
1529         |       OPERATOR '&'
1530                         { $$ = operator_stoken ("&"); }
1531         |       OPERATOR '|'
1532                         { $$ = operator_stoken ("|"); }
1533         |       OPERATOR '~'
1534                         { $$ = operator_stoken ("~"); }
1535         |       OPERATOR '!'
1536                         { $$ = operator_stoken ("!"); }
1537         |       OPERATOR '='
1538                         { $$ = operator_stoken ("="); }
1539         |       OPERATOR '<'
1540                         { $$ = operator_stoken ("<"); }
1541         |       OPERATOR '>'
1542                         { $$ = operator_stoken (">"); }
1543         |       OPERATOR ASSIGN_MODIFY
1544                         { const char *op = " unknown";
1545                           switch ($2)
1546                             {
1547                             case BINOP_RSH:
1548                               op = ">>=";
1549                               break;
1550                             case BINOP_LSH:
1551                               op = "<<=";
1552                               break;
1553                             case BINOP_ADD:
1554                               op = "+=";
1555                               break;
1556                             case BINOP_SUB:
1557                               op = "-=";
1558                               break;
1559                             case BINOP_MUL:
1560                               op = "*=";
1561                               break;
1562                             case BINOP_DIV:
1563                               op = "/=";
1564                               break;
1565                             case BINOP_REM:
1566                               op = "%=";
1567                               break;
1568                             case BINOP_BITWISE_IOR:
1569                               op = "|=";
1570                               break;
1571                             case BINOP_BITWISE_AND:
1572                               op = "&=";
1573                               break;
1574                             case BINOP_BITWISE_XOR:
1575                               op = "^=";
1576                               break;
1577                             default:
1578                               break;
1579                             }
1580
1581                           $$ = operator_stoken (op);
1582                         }
1583         |       OPERATOR LSH
1584                         { $$ = operator_stoken ("<<"); }
1585         |       OPERATOR RSH
1586                         { $$ = operator_stoken (">>"); }
1587         |       OPERATOR EQUAL
1588                         { $$ = operator_stoken ("=="); }
1589         |       OPERATOR NOTEQUAL
1590                         { $$ = operator_stoken ("!="); }
1591         |       OPERATOR LEQ
1592                         { $$ = operator_stoken ("<="); }
1593         |       OPERATOR GEQ
1594                         { $$ = operator_stoken (">="); }
1595         |       OPERATOR ANDAND
1596                         { $$ = operator_stoken ("&&"); }
1597         |       OPERATOR OROR
1598                         { $$ = operator_stoken ("||"); }
1599         |       OPERATOR INCREMENT
1600                         { $$ = operator_stoken ("++"); }
1601         |       OPERATOR DECREMENT
1602                         { $$ = operator_stoken ("--"); }
1603         |       OPERATOR ','
1604                         { $$ = operator_stoken (","); }
1605         |       OPERATOR ARROW_STAR
1606                         { $$ = operator_stoken ("->*"); }
1607         |       OPERATOR ARROW
1608                         { $$ = operator_stoken ("->"); }
1609         |       OPERATOR '(' ')'
1610                         { $$ = operator_stoken ("()"); }
1611         |       OPERATOR '[' ']'
1612                         { $$ = operator_stoken ("[]"); }
1613         |       OPERATOR OBJC_LBRAC ']'
1614                         { $$ = operator_stoken ("[]"); }
1615         |       OPERATOR conversion_type_id
1616                         { string_file buf;
1617
1618                           c_print_type ($2, NULL, &buf, -1, 0,
1619                                         &type_print_raw_options);
1620
1621                           /* This also needs canonicalization.  */
1622                           std::string canon
1623                             = cp_canonicalize_string (buf.c_str ());
1624                           if (canon.empty ())
1625                             canon = std::move (buf.string ());
1626                           $$ = operator_stoken ((" " + canon).c_str ());
1627                         }
1628         ;
1629
1630
1631
1632 name    :       NAME { $$ = $1.stoken; }
1633         |       BLOCKNAME { $$ = $1.stoken; }
1634         |       TYPENAME { $$ = $1.stoken; }
1635         |       NAME_OR_INT  { $$ = $1.stoken; }
1636         |       UNKNOWN_CPP_NAME  { $$ = $1.stoken; }
1637         |       oper { $$ = $1; }
1638         ;
1639
1640 name_not_typename :     NAME
1641         |       BLOCKNAME
1642 /* These would be useful if name_not_typename was useful, but it is just
1643    a fake for "variable", so these cause reduce/reduce conflicts because
1644    the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
1645    =exp) or just an exp.  If name_not_typename was ever used in an lvalue
1646    context where only a name could occur, this might be useful.
1647         |       NAME_OR_INT
1648  */
1649         |       oper
1650                         {
1651                           struct field_of_this_result is_a_field_of_this;
1652
1653                           $$.stoken = $1;
1654                           $$.sym = lookup_symbol ($1.ptr,
1655                                                   expression_context_block,
1656                                                   VAR_DOMAIN,
1657                                                   &is_a_field_of_this);
1658                           $$.is_a_field_of_this
1659                             = is_a_field_of_this.type != NULL;
1660                         }
1661         |       UNKNOWN_CPP_NAME
1662         ;
1663
1664 %%
1665
1666 /* Like write_exp_string, but prepends a '~'.  */
1667
1668 static void
1669 write_destructor_name (struct parser_state *par_state, struct stoken token)
1670 {
1671   char *copy = (char *) alloca (token.length + 1);
1672
1673   copy[0] = '~';
1674   memcpy (&copy[1], token.ptr, token.length);
1675
1676   token.ptr = copy;
1677   ++token.length;
1678
1679   write_exp_string (par_state, token);
1680 }
1681
1682 /* Returns a stoken of the operator name given by OP (which does not
1683    include the string "operator").  */
1684
1685 static struct stoken
1686 operator_stoken (const char *op)
1687 {
1688   struct stoken st = { NULL, 0 };
1689   char *buf;
1690
1691   st.length = CP_OPERATOR_LEN + strlen (op);
1692   buf = (char *) malloc (st.length + 1);
1693   strcpy (buf, CP_OPERATOR_STR);
1694   strcat (buf, op);
1695   st.ptr = buf;
1696
1697   /* The toplevel (c_parse) will free the memory allocated here.  */
1698   make_cleanup (free, buf);
1699   return st;
1700 };
1701
1702 /* Return true if the type is aggregate-like.  */
1703
1704 static int
1705 type_aggregate_p (struct type *type)
1706 {
1707   return (TYPE_CODE (type) == TYPE_CODE_STRUCT
1708           || TYPE_CODE (type) == TYPE_CODE_UNION
1709           || TYPE_CODE (type) == TYPE_CODE_NAMESPACE
1710           || (TYPE_CODE (type) == TYPE_CODE_ENUM
1711               && TYPE_DECLARED_CLASS (type)));
1712 }
1713
1714 /* Validate a parameter typelist.  */
1715
1716 static void
1717 check_parameter_typelist (VEC (type_ptr) *params)
1718 {
1719   struct type *type;
1720   int ix;
1721
1722   for (ix = 0; VEC_iterate (type_ptr, params, ix, type); ++ix)
1723     {
1724       if (type != NULL && TYPE_CODE (check_typedef (type)) == TYPE_CODE_VOID)
1725         {
1726           if (ix == 0)
1727             {
1728               if (VEC_length (type_ptr, params) == 1)
1729                 {
1730                   /* Ok.  */
1731                   break;
1732                 }
1733               VEC_free (type_ptr, params);
1734               error (_("parameter types following 'void'"));
1735             }
1736           else
1737             {
1738               VEC_free (type_ptr, params);
1739               error (_("'void' invalid as parameter type"));
1740             }
1741         }
1742     }
1743 }
1744
1745 /* Take care of parsing a number (anything that starts with a digit).
1746    Set yylval and return the token type; update lexptr.
1747    LEN is the number of characters in it.  */
1748
1749 /*** Needs some error checking for the float case ***/
1750
1751 static int
1752 parse_number (struct parser_state *par_state,
1753               const char *buf, int len, int parsed_float, YYSTYPE *putithere)
1754 {
1755   /* FIXME: Shouldn't these be unsigned?  We don't deal with negative values
1756      here, and we do kind of silly things like cast to unsigned.  */
1757   LONGEST n = 0;
1758   LONGEST prevn = 0;
1759   ULONGEST un;
1760
1761   int i = 0;
1762   int c;
1763   int base = input_radix;
1764   int unsigned_p = 0;
1765
1766   /* Number of "L" suffixes encountered.  */
1767   int long_p = 0;
1768
1769   /* We have found a "L" or "U" suffix.  */
1770   int found_suffix = 0;
1771
1772   ULONGEST high_bit;
1773   struct type *signed_type;
1774   struct type *unsigned_type;
1775   char *p;
1776
1777   p = (char *) alloca (len);
1778   memcpy (p, buf, len);
1779
1780   if (parsed_float)
1781     {
1782       /* Handle suffixes for decimal floating-point: "df", "dd" or "dl".  */
1783       if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'f')
1784         {
1785           putithere->typed_val_float.type
1786             = parse_type (par_state)->builtin_decfloat;
1787           len -= 2;
1788         }
1789       else if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'd')
1790         {
1791           putithere->typed_val_float.type
1792             = parse_type (par_state)->builtin_decdouble;
1793           len -= 2;
1794         }
1795       else if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'l')
1796         {
1797           putithere->typed_val_float.type
1798             = parse_type (par_state)->builtin_declong;
1799           len -= 2;
1800         }
1801       /* Handle suffixes: 'f' for float, 'l' for long double.  */
1802       else if (len >= 1 && tolower (p[len - 1]) == 'f')
1803         {
1804           putithere->typed_val_float.type
1805             = parse_type (par_state)->builtin_float;
1806           len -= 1;
1807         }
1808       else if (len >= 1 && tolower (p[len - 1]) == 'l')
1809         {
1810           putithere->typed_val_float.type
1811             = parse_type (par_state)->builtin_long_double;
1812           len -= 1;
1813         }
1814       /* Default type for floating-point literals is double.  */
1815       else
1816         {
1817           putithere->typed_val_float.type
1818             = parse_type (par_state)->builtin_double;
1819         }
1820
1821       if (!parse_float (p, len,
1822                         putithere->typed_val_float.type,
1823                         putithere->typed_val_float.val))
1824         return ERROR;
1825       return FLOAT;
1826     }
1827
1828   /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
1829   if (p[0] == '0' && len > 1)
1830     switch (p[1])
1831       {
1832       case 'x':
1833       case 'X':
1834         if (len >= 3)
1835           {
1836             p += 2;
1837             base = 16;
1838             len -= 2;
1839           }
1840         break;
1841
1842       case 'b':
1843       case 'B':
1844         if (len >= 3)
1845           {
1846             p += 2;
1847             base = 2;
1848             len -= 2;
1849           }
1850         break;
1851
1852       case 't':
1853       case 'T':
1854       case 'd':
1855       case 'D':
1856         if (len >= 3)
1857           {
1858             p += 2;
1859             base = 10;
1860             len -= 2;
1861           }
1862         break;
1863
1864       default:
1865         base = 8;
1866         break;
1867       }
1868
1869   while (len-- > 0)
1870     {
1871       c = *p++;
1872       if (c >= 'A' && c <= 'Z')
1873         c += 'a' - 'A';
1874       if (c != 'l' && c != 'u')
1875         n *= base;
1876       if (c >= '0' && c <= '9')
1877         {
1878           if (found_suffix)
1879             return ERROR;
1880           n += i = c - '0';
1881         }
1882       else
1883         {
1884           if (base > 10 && c >= 'a' && c <= 'f')
1885             {
1886               if (found_suffix)
1887                 return ERROR;
1888               n += i = c - 'a' + 10;
1889             }
1890           else if (c == 'l')
1891             {
1892               ++long_p;
1893               found_suffix = 1;
1894             }
1895           else if (c == 'u')
1896             {
1897               unsigned_p = 1;
1898               found_suffix = 1;
1899             }
1900           else
1901             return ERROR;       /* Char not a digit */
1902         }
1903       if (i >= base)
1904         return ERROR;           /* Invalid digit in this base */
1905
1906       /* Portably test for overflow (only works for nonzero values, so make
1907          a second check for zero).  FIXME: Can't we just make n and prevn
1908          unsigned and avoid this?  */
1909       if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
1910         unsigned_p = 1;         /* Try something unsigned */
1911
1912       /* Portably test for unsigned overflow.
1913          FIXME: This check is wrong; for example it doesn't find overflow
1914          on 0x123456789 when LONGEST is 32 bits.  */
1915       if (c != 'l' && c != 'u' && n != 0)
1916         {       
1917           if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n))
1918             error (_("Numeric constant too large."));
1919         }
1920       prevn = n;
1921     }
1922
1923   /* An integer constant is an int, a long, or a long long.  An L
1924      suffix forces it to be long; an LL suffix forces it to be long
1925      long.  If not forced to a larger size, it gets the first type of
1926      the above that it fits in.  To figure out whether it fits, we
1927      shift it right and see whether anything remains.  Note that we
1928      can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
1929      operation, because many compilers will warn about such a shift
1930      (which always produces a zero result).  Sometimes gdbarch_int_bit
1931      or gdbarch_long_bit will be that big, sometimes not.  To deal with
1932      the case where it is we just always shift the value more than
1933      once, with fewer bits each time.  */
1934
1935   un = (ULONGEST)n >> 2;
1936   if (long_p == 0
1937       && (un >> (gdbarch_int_bit (parse_gdbarch (par_state)) - 2)) == 0)
1938     {
1939       high_bit
1940         = ((ULONGEST)1) << (gdbarch_int_bit (parse_gdbarch (par_state)) - 1);
1941
1942       /* A large decimal (not hex or octal) constant (between INT_MAX
1943          and UINT_MAX) is a long or unsigned long, according to ANSI,
1944          never an unsigned int, but this code treats it as unsigned
1945          int.  This probably should be fixed.  GCC gives a warning on
1946          such constants.  */
1947
1948       unsigned_type = parse_type (par_state)->builtin_unsigned_int;
1949       signed_type = parse_type (par_state)->builtin_int;
1950     }
1951   else if (long_p <= 1
1952            && (un >> (gdbarch_long_bit (parse_gdbarch (par_state)) - 2)) == 0)
1953     {
1954       high_bit
1955         = ((ULONGEST)1) << (gdbarch_long_bit (parse_gdbarch (par_state)) - 1);
1956       unsigned_type = parse_type (par_state)->builtin_unsigned_long;
1957       signed_type = parse_type (par_state)->builtin_long;
1958     }
1959   else
1960     {
1961       int shift;
1962       if (sizeof (ULONGEST) * HOST_CHAR_BIT
1963           < gdbarch_long_long_bit (parse_gdbarch (par_state)))
1964         /* A long long does not fit in a LONGEST.  */
1965         shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1);
1966       else
1967         shift = (gdbarch_long_long_bit (parse_gdbarch (par_state)) - 1);
1968       high_bit = (ULONGEST) 1 << shift;
1969       unsigned_type = parse_type (par_state)->builtin_unsigned_long_long;
1970       signed_type = parse_type (par_state)->builtin_long_long;
1971     }
1972
1973    putithere->typed_val_int.val = n;
1974
1975    /* If the high bit of the worked out type is set then this number
1976       has to be unsigned. */
1977
1978    if (unsigned_p || (n & high_bit))
1979      {
1980        putithere->typed_val_int.type = unsigned_type;
1981      }
1982    else
1983      {
1984        putithere->typed_val_int.type = signed_type;
1985      }
1986
1987    return INT;
1988 }
1989
1990 /* Temporary obstack used for holding strings.  */
1991 static struct obstack tempbuf;
1992 static int tempbuf_init;
1993
1994 /* Parse a C escape sequence.  The initial backslash of the sequence
1995    is at (*PTR)[-1].  *PTR will be updated to point to just after the
1996    last character of the sequence.  If OUTPUT is not NULL, the
1997    translated form of the escape sequence will be written there.  If
1998    OUTPUT is NULL, no output is written and the call will only affect
1999    *PTR.  If an escape sequence is expressed in target bytes, then the
2000    entire sequence will simply be copied to OUTPUT.  Return 1 if any
2001    character was emitted, 0 otherwise.  */
2002
2003 int
2004 c_parse_escape (const char **ptr, struct obstack *output)
2005 {
2006   const char *tokptr = *ptr;
2007   int result = 1;
2008
2009   /* Some escape sequences undergo character set conversion.  Those we
2010      translate here.  */
2011   switch (*tokptr)
2012     {
2013       /* Hex escapes do not undergo character set conversion, so keep
2014          the escape sequence for later.  */
2015     case 'x':
2016       if (output)
2017         obstack_grow_str (output, "\\x");
2018       ++tokptr;
2019       if (!isxdigit (*tokptr))
2020         error (_("\\x escape without a following hex digit"));
2021       while (isxdigit (*tokptr))
2022         {
2023           if (output)
2024             obstack_1grow (output, *tokptr);
2025           ++tokptr;
2026         }
2027       break;
2028
2029       /* Octal escapes do not undergo character set conversion, so
2030          keep the escape sequence for later.  */
2031     case '0':
2032     case '1':
2033     case '2':
2034     case '3':
2035     case '4':
2036     case '5':
2037     case '6':
2038     case '7':
2039       {
2040         int i;
2041         if (output)
2042           obstack_grow_str (output, "\\");
2043         for (i = 0;
2044              i < 3 && isdigit (*tokptr) && *tokptr != '8' && *tokptr != '9';
2045              ++i)
2046           {
2047             if (output)
2048               obstack_1grow (output, *tokptr);
2049             ++tokptr;
2050           }
2051       }
2052       break;
2053
2054       /* We handle UCNs later.  We could handle them here, but that
2055          would mean a spurious error in the case where the UCN could
2056          be converted to the target charset but not the host
2057          charset.  */
2058     case 'u':
2059     case 'U':
2060       {
2061         char c = *tokptr;
2062         int i, len = c == 'U' ? 8 : 4;
2063         if (output)
2064           {
2065             obstack_1grow (output, '\\');
2066             obstack_1grow (output, *tokptr);
2067           }
2068         ++tokptr;
2069         if (!isxdigit (*tokptr))
2070           error (_("\\%c escape without a following hex digit"), c);
2071         for (i = 0; i < len && isxdigit (*tokptr); ++i)
2072           {
2073             if (output)
2074               obstack_1grow (output, *tokptr);
2075             ++tokptr;
2076           }
2077       }
2078       break;
2079
2080       /* We must pass backslash through so that it does not
2081          cause quoting during the second expansion.  */
2082     case '\\':
2083       if (output)
2084         obstack_grow_str (output, "\\\\");
2085       ++tokptr;
2086       break;
2087
2088       /* Escapes which undergo conversion.  */
2089     case 'a':
2090       if (output)
2091         obstack_1grow (output, '\a');
2092       ++tokptr;
2093       break;
2094     case 'b':
2095       if (output)
2096         obstack_1grow (output, '\b');
2097       ++tokptr;
2098       break;
2099     case 'f':
2100       if (output)
2101         obstack_1grow (output, '\f');
2102       ++tokptr;
2103       break;
2104     case 'n':
2105       if (output)
2106         obstack_1grow (output, '\n');
2107       ++tokptr;
2108       break;
2109     case 'r':
2110       if (output)
2111         obstack_1grow (output, '\r');
2112       ++tokptr;
2113       break;
2114     case 't':
2115       if (output)
2116         obstack_1grow (output, '\t');
2117       ++tokptr;
2118       break;
2119     case 'v':
2120       if (output)
2121         obstack_1grow (output, '\v');
2122       ++tokptr;
2123       break;
2124
2125       /* GCC extension.  */
2126     case 'e':
2127       if (output)
2128         obstack_1grow (output, HOST_ESCAPE_CHAR);
2129       ++tokptr;
2130       break;
2131
2132       /* Backslash-newline expands to nothing at all.  */
2133     case '\n':
2134       ++tokptr;
2135       result = 0;
2136       break;
2137
2138       /* A few escapes just expand to the character itself.  */
2139     case '\'':
2140     case '\"':
2141     case '?':
2142       /* GCC extensions.  */
2143     case '(':
2144     case '{':
2145     case '[':
2146     case '%':
2147       /* Unrecognized escapes turn into the character itself.  */
2148     default:
2149       if (output)
2150         obstack_1grow (output, *tokptr);
2151       ++tokptr;
2152       break;
2153     }
2154   *ptr = tokptr;
2155   return result;
2156 }
2157
2158 /* Parse a string or character literal from TOKPTR.  The string or
2159    character may be wide or unicode.  *OUTPTR is set to just after the
2160    end of the literal in the input string.  The resulting token is
2161    stored in VALUE.  This returns a token value, either STRING or
2162    CHAR, depending on what was parsed.  *HOST_CHARS is set to the
2163    number of host characters in the literal.  */
2164
2165 static int
2166 parse_string_or_char (const char *tokptr, const char **outptr,
2167                       struct typed_stoken *value, int *host_chars)
2168 {
2169   int quote;
2170   c_string_type type;
2171   int is_objc = 0;
2172
2173   /* Build the gdb internal form of the input string in tempbuf.  Note
2174      that the buffer is null byte terminated *only* for the
2175      convenience of debugging gdb itself and printing the buffer
2176      contents when the buffer contains no embedded nulls.  Gdb does
2177      not depend upon the buffer being null byte terminated, it uses
2178      the length string instead.  This allows gdb to handle C strings
2179      (as well as strings in other languages) with embedded null
2180      bytes */
2181
2182   if (!tempbuf_init)
2183     tempbuf_init = 1;
2184   else
2185     obstack_free (&tempbuf, NULL);
2186   obstack_init (&tempbuf);
2187
2188   /* Record the string type.  */
2189   if (*tokptr == 'L')
2190     {
2191       type = C_WIDE_STRING;
2192       ++tokptr;
2193     }
2194   else if (*tokptr == 'u')
2195     {
2196       type = C_STRING_16;
2197       ++tokptr;
2198     }
2199   else if (*tokptr == 'U')
2200     {
2201       type = C_STRING_32;
2202       ++tokptr;
2203     }
2204   else if (*tokptr == '@')
2205     {
2206       /* An Objective C string.  */
2207       is_objc = 1;
2208       type = C_STRING;
2209       ++tokptr;
2210     }
2211   else
2212     type = C_STRING;
2213
2214   /* Skip the quote.  */
2215   quote = *tokptr;
2216   if (quote == '\'')
2217     type |= C_CHAR;
2218   ++tokptr;
2219
2220   *host_chars = 0;
2221
2222   while (*tokptr)
2223     {
2224       char c = *tokptr;
2225       if (c == '\\')
2226         {
2227           ++tokptr;
2228           *host_chars += c_parse_escape (&tokptr, &tempbuf);
2229         }
2230       else if (c == quote)
2231         break;
2232       else
2233         {
2234           obstack_1grow (&tempbuf, c);
2235           ++tokptr;
2236           /* FIXME: this does the wrong thing with multi-byte host
2237              characters.  We could use mbrlen here, but that would
2238              make "set host-charset" a bit less useful.  */
2239           ++*host_chars;
2240         }
2241     }
2242
2243   if (*tokptr != quote)
2244     {
2245       if (quote == '"')
2246         error (_("Unterminated string in expression."));
2247       else
2248         error (_("Unmatched single quote."));
2249     }
2250   ++tokptr;
2251
2252   value->type = type;
2253   value->ptr = (char *) obstack_base (&tempbuf);
2254   value->length = obstack_object_size (&tempbuf);
2255
2256   *outptr = tokptr;
2257
2258   return quote == '"' ? (is_objc ? NSSTRING : STRING) : CHAR;
2259 }
2260
2261 /* This is used to associate some attributes with a token.  */
2262
2263 enum token_flag
2264 {
2265   /* If this bit is set, the token is C++-only.  */
2266
2267   FLAG_CXX = 1,
2268
2269   /* If this bit is set, the token is conditional: if there is a
2270      symbol of the same name, then the token is a symbol; otherwise,
2271      the token is a keyword.  */
2272
2273   FLAG_SHADOW = 2
2274 };
2275 DEF_ENUM_FLAGS_TYPE (enum token_flag, token_flags);
2276
2277 struct token
2278 {
2279   const char *oper;
2280   int token;
2281   enum exp_opcode opcode;
2282   token_flags flags;
2283 };
2284
2285 static const struct token tokentab3[] =
2286   {
2287     {">>=", ASSIGN_MODIFY, BINOP_RSH, 0},
2288     {"<<=", ASSIGN_MODIFY, BINOP_LSH, 0},
2289     {"->*", ARROW_STAR, BINOP_END, FLAG_CXX},
2290     {"...", DOTDOTDOT, BINOP_END, 0}
2291   };
2292
2293 static const struct token tokentab2[] =
2294   {
2295     {"+=", ASSIGN_MODIFY, BINOP_ADD, 0},
2296     {"-=", ASSIGN_MODIFY, BINOP_SUB, 0},
2297     {"*=", ASSIGN_MODIFY, BINOP_MUL, 0},
2298     {"/=", ASSIGN_MODIFY, BINOP_DIV, 0},
2299     {"%=", ASSIGN_MODIFY, BINOP_REM, 0},
2300     {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR, 0},
2301     {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND, 0},
2302     {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR, 0},
2303     {"++", INCREMENT, BINOP_END, 0},
2304     {"--", DECREMENT, BINOP_END, 0},
2305     {"->", ARROW, BINOP_END, 0},
2306     {"&&", ANDAND, BINOP_END, 0},
2307     {"||", OROR, BINOP_END, 0},
2308     /* "::" is *not* only C++: gdb overrides its meaning in several
2309        different ways, e.g., 'filename'::func, function::variable.  */
2310     {"::", COLONCOLON, BINOP_END, 0},
2311     {"<<", LSH, BINOP_END, 0},
2312     {">>", RSH, BINOP_END, 0},
2313     {"==", EQUAL, BINOP_END, 0},
2314     {"!=", NOTEQUAL, BINOP_END, 0},
2315     {"<=", LEQ, BINOP_END, 0},
2316     {">=", GEQ, BINOP_END, 0},
2317     {".*", DOT_STAR, BINOP_END, FLAG_CXX}
2318   };
2319
2320 /* Identifier-like tokens.  */
2321 static const struct token ident_tokens[] =
2322   {
2323     {"unsigned", UNSIGNED, OP_NULL, 0},
2324     {"template", TEMPLATE, OP_NULL, FLAG_CXX},
2325     {"volatile", VOLATILE_KEYWORD, OP_NULL, 0},
2326     {"struct", STRUCT, OP_NULL, 0},
2327     {"signed", SIGNED_KEYWORD, OP_NULL, 0},
2328     {"sizeof", SIZEOF, OP_NULL, 0},
2329     {"double", DOUBLE_KEYWORD, OP_NULL, 0},
2330     {"false", FALSEKEYWORD, OP_NULL, FLAG_CXX},
2331     {"class", CLASS, OP_NULL, FLAG_CXX},
2332     {"union", UNION, OP_NULL, 0},
2333     {"short", SHORT, OP_NULL, 0},
2334     {"const", CONST_KEYWORD, OP_NULL, 0},
2335     {"enum", ENUM, OP_NULL, 0},
2336     {"long", LONG, OP_NULL, 0},
2337     {"true", TRUEKEYWORD, OP_NULL, FLAG_CXX},
2338     {"int", INT_KEYWORD, OP_NULL, 0},
2339     {"new", NEW, OP_NULL, FLAG_CXX},
2340     {"delete", DELETE, OP_NULL, FLAG_CXX},
2341     {"operator", OPERATOR, OP_NULL, FLAG_CXX},
2342
2343     {"and", ANDAND, BINOP_END, FLAG_CXX},
2344     {"and_eq", ASSIGN_MODIFY, BINOP_BITWISE_AND, FLAG_CXX},
2345     {"bitand", '&', OP_NULL, FLAG_CXX},
2346     {"bitor", '|', OP_NULL, FLAG_CXX},
2347     {"compl", '~', OP_NULL, FLAG_CXX},
2348     {"not", '!', OP_NULL, FLAG_CXX},
2349     {"not_eq", NOTEQUAL, BINOP_END, FLAG_CXX},
2350     {"or", OROR, BINOP_END, FLAG_CXX},
2351     {"or_eq", ASSIGN_MODIFY, BINOP_BITWISE_IOR, FLAG_CXX},
2352     {"xor", '^', OP_NULL, FLAG_CXX},
2353     {"xor_eq", ASSIGN_MODIFY, BINOP_BITWISE_XOR, FLAG_CXX},
2354
2355     {"const_cast", CONST_CAST, OP_NULL, FLAG_CXX },
2356     {"dynamic_cast", DYNAMIC_CAST, OP_NULL, FLAG_CXX },
2357     {"static_cast", STATIC_CAST, OP_NULL, FLAG_CXX },
2358     {"reinterpret_cast", REINTERPRET_CAST, OP_NULL, FLAG_CXX },
2359
2360     {"__typeof__", TYPEOF, OP_TYPEOF, 0 },
2361     {"__typeof", TYPEOF, OP_TYPEOF, 0 },
2362     {"typeof", TYPEOF, OP_TYPEOF, FLAG_SHADOW },
2363     {"__decltype", DECLTYPE, OP_DECLTYPE, FLAG_CXX },
2364     {"decltype", DECLTYPE, OP_DECLTYPE, FLAG_CXX | FLAG_SHADOW },
2365
2366     {"typeid", TYPEID, OP_TYPEID, FLAG_CXX}
2367   };
2368
2369 /* When we find that lexptr (the global var defined in parse.c) is
2370    pointing at a macro invocation, we expand the invocation, and call
2371    scan_macro_expansion to save the old lexptr here and point lexptr
2372    into the expanded text.  When we reach the end of that, we call
2373    end_macro_expansion to pop back to the value we saved here.  The
2374    macro expansion code promises to return only fully-expanded text,
2375    so we don't need to "push" more than one level.
2376
2377    This is disgusting, of course.  It would be cleaner to do all macro
2378    expansion beforehand, and then hand that to lexptr.  But we don't
2379    really know where the expression ends.  Remember, in a command like
2380
2381      (gdb) break *ADDRESS if CONDITION
2382
2383    we evaluate ADDRESS in the scope of the current frame, but we
2384    evaluate CONDITION in the scope of the breakpoint's location.  So
2385    it's simply wrong to try to macro-expand the whole thing at once.  */
2386 static const char *macro_original_text;
2387
2388 /* We save all intermediate macro expansions on this obstack for the
2389    duration of a single parse.  The expansion text may sometimes have
2390    to live past the end of the expansion, due to yacc lookahead.
2391    Rather than try to be clever about saving the data for a single
2392    token, we simply keep it all and delete it after parsing has
2393    completed.  */
2394 static struct obstack expansion_obstack;
2395
2396 static void
2397 scan_macro_expansion (char *expansion)
2398 {
2399   char *copy;
2400
2401   /* We'd better not be trying to push the stack twice.  */
2402   gdb_assert (! macro_original_text);
2403
2404   /* Copy to the obstack, and then free the intermediate
2405      expansion.  */
2406   copy = (char *) obstack_copy0 (&expansion_obstack, expansion,
2407                                  strlen (expansion));
2408   xfree (expansion);
2409
2410   /* Save the old lexptr value, so we can return to it when we're done
2411      parsing the expanded text.  */
2412   macro_original_text = lexptr;
2413   lexptr = copy;
2414 }
2415
2416 static int
2417 scanning_macro_expansion (void)
2418 {
2419   return macro_original_text != 0;
2420 }
2421
2422 static void
2423 finished_macro_expansion (void)
2424 {
2425   /* There'd better be something to pop back to.  */
2426   gdb_assert (macro_original_text);
2427
2428   /* Pop back to the original text.  */
2429   lexptr = macro_original_text;
2430   macro_original_text = 0;
2431 }
2432
2433 static void
2434 scan_macro_cleanup (void *dummy)
2435 {
2436   if (macro_original_text)
2437     finished_macro_expansion ();
2438
2439   obstack_free (&expansion_obstack, NULL);
2440 }
2441
2442 /* Return true iff the token represents a C++ cast operator.  */
2443
2444 static int
2445 is_cast_operator (const char *token, int len)
2446 {
2447   return (! strncmp (token, "dynamic_cast", len)
2448           || ! strncmp (token, "static_cast", len)
2449           || ! strncmp (token, "reinterpret_cast", len)
2450           || ! strncmp (token, "const_cast", len));
2451 }
2452
2453 /* The scope used for macro expansion.  */
2454 static struct macro_scope *expression_macro_scope;
2455
2456 /* This is set if a NAME token appeared at the very end of the input
2457    string, with no whitespace separating the name from the EOF.  This
2458    is used only when parsing to do field name completion.  */
2459 static int saw_name_at_eof;
2460
2461 /* This is set if the previously-returned token was a structure
2462    operator -- either '.' or ARROW.  This is used only when parsing to
2463    do field name completion.  */
2464 static int last_was_structop;
2465
2466 /* Read one token, getting characters through lexptr.  */
2467
2468 static int
2469 lex_one_token (struct parser_state *par_state, int *is_quoted_name)
2470 {
2471   int c;
2472   int namelen;
2473   unsigned int i;
2474   const char *tokstart;
2475   int saw_structop = last_was_structop;
2476   char *copy;
2477
2478   last_was_structop = 0;
2479   *is_quoted_name = 0;
2480
2481  retry:
2482
2483   /* Check if this is a macro invocation that we need to expand.  */
2484   if (! scanning_macro_expansion ())
2485     {
2486       char *expanded = macro_expand_next (&lexptr,
2487                                           standard_macro_lookup,
2488                                           expression_macro_scope);
2489
2490       if (expanded)
2491         scan_macro_expansion (expanded);
2492     }
2493
2494   prev_lexptr = lexptr;
2495
2496   tokstart = lexptr;
2497   /* See if it is a special token of length 3.  */
2498   for (i = 0; i < sizeof tokentab3 / sizeof tokentab3[0]; i++)
2499     if (strncmp (tokstart, tokentab3[i].oper, 3) == 0)
2500       {
2501         if ((tokentab3[i].flags & FLAG_CXX) != 0
2502             && parse_language (par_state)->la_language != language_cplus)
2503           break;
2504
2505         lexptr += 3;
2506         yylval.opcode = tokentab3[i].opcode;
2507         return tokentab3[i].token;
2508       }
2509
2510   /* See if it is a special token of length 2.  */
2511   for (i = 0; i < sizeof tokentab2 / sizeof tokentab2[0]; i++)
2512     if (strncmp (tokstart, tokentab2[i].oper, 2) == 0)
2513       {
2514         if ((tokentab2[i].flags & FLAG_CXX) != 0
2515             && parse_language (par_state)->la_language != language_cplus)
2516           break;
2517
2518         lexptr += 2;
2519         yylval.opcode = tokentab2[i].opcode;
2520         if (parse_completion && tokentab2[i].token == ARROW)
2521           last_was_structop = 1;
2522         return tokentab2[i].token;
2523       }
2524
2525   switch (c = *tokstart)
2526     {
2527     case 0:
2528       /* If we were just scanning the result of a macro expansion,
2529          then we need to resume scanning the original text.
2530          If we're parsing for field name completion, and the previous
2531          token allows such completion, return a COMPLETE token.
2532          Otherwise, we were already scanning the original text, and
2533          we're really done.  */
2534       if (scanning_macro_expansion ())
2535         {
2536           finished_macro_expansion ();
2537           goto retry;
2538         }
2539       else if (saw_name_at_eof)
2540         {
2541           saw_name_at_eof = 0;
2542           return COMPLETE;
2543         }
2544       else if (saw_structop)
2545         return COMPLETE;
2546       else
2547         return 0;
2548
2549     case ' ':
2550     case '\t':
2551     case '\n':
2552       lexptr++;
2553       goto retry;
2554
2555     case '[':
2556     case '(':
2557       paren_depth++;
2558       lexptr++;
2559       if (parse_language (par_state)->la_language == language_objc
2560           && c == '[')
2561         return OBJC_LBRAC;
2562       return c;
2563
2564     case ']':
2565     case ')':
2566       if (paren_depth == 0)
2567         return 0;
2568       paren_depth--;
2569       lexptr++;
2570       return c;
2571
2572     case ',':
2573       if (comma_terminates
2574           && paren_depth == 0
2575           && ! scanning_macro_expansion ())
2576         return 0;
2577       lexptr++;
2578       return c;
2579
2580     case '.':
2581       /* Might be a floating point number.  */
2582       if (lexptr[1] < '0' || lexptr[1] > '9')
2583         {
2584           if (parse_completion)
2585             last_was_structop = 1;
2586           goto symbol;          /* Nope, must be a symbol. */
2587         }
2588       /* FALL THRU into number case.  */
2589
2590     case '0':
2591     case '1':
2592     case '2':
2593     case '3':
2594     case '4':
2595     case '5':
2596     case '6':
2597     case '7':
2598     case '8':
2599     case '9':
2600       {
2601         /* It's a number.  */
2602         int got_dot = 0, got_e = 0, toktype;
2603         const char *p = tokstart;
2604         int hex = input_radix > 10;
2605
2606         if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
2607           {
2608             p += 2;
2609             hex = 1;
2610           }
2611         else if (c == '0' && (p[1]=='t' || p[1]=='T' || p[1]=='d' || p[1]=='D'))
2612           {
2613             p += 2;
2614             hex = 0;
2615           }
2616
2617         for (;; ++p)
2618           {
2619             /* This test includes !hex because 'e' is a valid hex digit
2620                and thus does not indicate a floating point number when
2621                the radix is hex.  */
2622             if (!hex && !got_e && (*p == 'e' || *p == 'E'))
2623               got_dot = got_e = 1;
2624             /* This test does not include !hex, because a '.' always indicates
2625                a decimal floating point number regardless of the radix.  */
2626             else if (!got_dot && *p == '.')
2627               got_dot = 1;
2628             else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
2629                      && (*p == '-' || *p == '+'))
2630               /* This is the sign of the exponent, not the end of the
2631                  number.  */
2632               continue;
2633             /* We will take any letters or digits.  parse_number will
2634                complain if past the radix, or if L or U are not final.  */
2635             else if ((*p < '0' || *p > '9')
2636                      && ((*p < 'a' || *p > 'z')
2637                                   && (*p < 'A' || *p > 'Z')))
2638               break;
2639           }
2640         toktype = parse_number (par_state, tokstart, p - tokstart,
2641                                 got_dot|got_e, &yylval);
2642         if (toktype == ERROR)
2643           {
2644             char *err_copy = (char *) alloca (p - tokstart + 1);
2645
2646             memcpy (err_copy, tokstart, p - tokstart);
2647             err_copy[p - tokstart] = 0;
2648             error (_("Invalid number \"%s\"."), err_copy);
2649           }
2650         lexptr = p;
2651         return toktype;
2652       }
2653
2654     case '@':
2655       {
2656         const char *p = &tokstart[1];
2657         size_t len = strlen ("entry");
2658
2659         if (parse_language (par_state)->la_language == language_objc)
2660           {
2661             size_t len = strlen ("selector");
2662
2663             if (strncmp (p, "selector", len) == 0
2664                 && (p[len] == '\0' || isspace (p[len])))
2665               {
2666                 lexptr = p + len;
2667                 return SELECTOR;
2668               }
2669             else if (*p == '"')
2670               goto parse_string;
2671           }
2672
2673         while (isspace (*p))
2674           p++;
2675         if (strncmp (p, "entry", len) == 0 && !isalnum (p[len])
2676             && p[len] != '_')
2677           {
2678             lexptr = &p[len];
2679             return ENTRY;
2680           }
2681       }
2682       /* FALLTHRU */
2683     case '+':
2684     case '-':
2685     case '*':
2686     case '/':
2687     case '%':
2688     case '|':
2689     case '&':
2690     case '^':
2691     case '~':
2692     case '!':
2693     case '<':
2694     case '>':
2695     case '?':
2696     case ':':
2697     case '=':
2698     case '{':
2699     case '}':
2700     symbol:
2701       lexptr++;
2702       return c;
2703
2704     case 'L':
2705     case 'u':
2706     case 'U':
2707       if (tokstart[1] != '"' && tokstart[1] != '\'')
2708         break;
2709       /* Fall through.  */
2710     case '\'':
2711     case '"':
2712
2713     parse_string:
2714       {
2715         int host_len;
2716         int result = parse_string_or_char (tokstart, &lexptr, &yylval.tsval,
2717                                            &host_len);
2718         if (result == CHAR)
2719           {
2720             if (host_len == 0)
2721               error (_("Empty character constant."));
2722             else if (host_len > 2 && c == '\'')
2723               {
2724                 ++tokstart;
2725                 namelen = lexptr - tokstart - 1;
2726                 *is_quoted_name = 1;
2727
2728                 goto tryname;
2729               }
2730             else if (host_len > 1)
2731               error (_("Invalid character constant."));
2732           }
2733         return result;
2734       }
2735     }
2736
2737   if (!(c == '_' || c == '$'
2738         || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
2739     /* We must have come across a bad character (e.g. ';').  */
2740     error (_("Invalid character '%c' in expression."), c);
2741
2742   /* It's a name.  See how long it is.  */
2743   namelen = 0;
2744   for (c = tokstart[namelen];
2745        (c == '_' || c == '$' || (c >= '0' && c <= '9')
2746         || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '<');)
2747     {
2748       /* Template parameter lists are part of the name.
2749          FIXME: This mishandles `print $a<4&&$a>3'.  */
2750
2751       if (c == '<')
2752         {
2753           if (! is_cast_operator (tokstart, namelen))
2754             {
2755               /* Scan ahead to get rest of the template specification.  Note
2756                  that we look ahead only when the '<' adjoins non-whitespace
2757                  characters; for comparison expressions, e.g. "a < b > c",
2758                  there must be spaces before the '<', etc. */
2759               const char *p = find_template_name_end (tokstart + namelen);
2760
2761               if (p)
2762                 namelen = p - tokstart;
2763             }
2764           break;
2765         }
2766       c = tokstart[++namelen];
2767     }
2768
2769   /* The token "if" terminates the expression and is NOT removed from
2770      the input stream.  It doesn't count if it appears in the
2771      expansion of a macro.  */
2772   if (namelen == 2
2773       && tokstart[0] == 'i'
2774       && tokstart[1] == 'f'
2775       && ! scanning_macro_expansion ())
2776     {
2777       return 0;
2778     }
2779
2780   /* For the same reason (breakpoint conditions), "thread N"
2781      terminates the expression.  "thread" could be an identifier, but
2782      an identifier is never followed by a number without intervening
2783      punctuation.  "task" is similar.  Handle abbreviations of these,
2784      similarly to breakpoint.c:find_condition_and_thread.  */
2785   if (namelen >= 1
2786       && (strncmp (tokstart, "thread", namelen) == 0
2787           || strncmp (tokstart, "task", namelen) == 0)
2788       && (tokstart[namelen] == ' ' || tokstart[namelen] == '\t')
2789       && ! scanning_macro_expansion ())
2790     {
2791       const char *p = tokstart + namelen + 1;
2792
2793       while (*p == ' ' || *p == '\t')
2794         p++;
2795       if (*p >= '0' && *p <= '9')
2796         return 0;
2797     }
2798
2799   lexptr += namelen;
2800
2801   tryname:
2802
2803   yylval.sval.ptr = tokstart;
2804   yylval.sval.length = namelen;
2805
2806   /* Catch specific keywords.  */
2807   copy = copy_name (yylval.sval);
2808   for (i = 0; i < sizeof ident_tokens / sizeof ident_tokens[0]; i++)
2809     if (strcmp (copy, ident_tokens[i].oper) == 0)
2810       {
2811         if ((ident_tokens[i].flags & FLAG_CXX) != 0
2812             && parse_language (par_state)->la_language != language_cplus)
2813           break;
2814
2815         if ((ident_tokens[i].flags & FLAG_SHADOW) != 0)
2816           {
2817             struct field_of_this_result is_a_field_of_this;
2818
2819             if (lookup_symbol (copy, expression_context_block,
2820                                VAR_DOMAIN,
2821                                (parse_language (par_state)->la_language
2822                                 == language_cplus ? &is_a_field_of_this
2823                                 : NULL)).symbol
2824                 != NULL)
2825               {
2826                 /* The keyword is shadowed.  */
2827                 break;
2828               }
2829           }
2830
2831         /* It is ok to always set this, even though we don't always
2832            strictly need to.  */
2833         yylval.opcode = ident_tokens[i].opcode;
2834         return ident_tokens[i].token;
2835       }
2836
2837   if (*tokstart == '$')
2838     return VARIABLE;
2839
2840   if (parse_completion && *lexptr == '\0')
2841     saw_name_at_eof = 1;
2842
2843   yylval.ssym.stoken = yylval.sval;
2844   yylval.ssym.sym.symbol = NULL;
2845   yylval.ssym.sym.block = NULL;
2846   yylval.ssym.is_a_field_of_this = 0;
2847   return NAME;
2848 }
2849
2850 /* An object of this type is pushed on a FIFO by the "outer" lexer.  */
2851 typedef struct
2852 {
2853   int token;
2854   YYSTYPE value;
2855 } token_and_value;
2856
2857 DEF_VEC_O (token_and_value);
2858
2859 /* A FIFO of tokens that have been read but not yet returned to the
2860    parser.  */
2861 static VEC (token_and_value) *token_fifo;
2862
2863 /* Non-zero if the lexer should return tokens from the FIFO.  */
2864 static int popping;
2865
2866 /* Temporary storage for c_lex; this holds symbol names as they are
2867    built up.  */
2868 auto_obstack name_obstack;
2869
2870 /* Classify a NAME token.  The contents of the token are in `yylval'.
2871    Updates yylval and returns the new token type.  BLOCK is the block
2872    in which lookups start; this can be NULL to mean the global scope.
2873    IS_QUOTED_NAME is non-zero if the name token was originally quoted
2874    in single quotes.  */
2875
2876 static int
2877 classify_name (struct parser_state *par_state, const struct block *block,
2878                int is_quoted_name)
2879 {
2880   struct block_symbol bsym;
2881   char *copy;
2882   struct field_of_this_result is_a_field_of_this;
2883
2884   copy = copy_name (yylval.sval);
2885
2886   /* Initialize this in case we *don't* use it in this call; that way
2887      we can refer to it unconditionally below.  */
2888   memset (&is_a_field_of_this, 0, sizeof (is_a_field_of_this));
2889
2890   bsym = lookup_symbol (copy, block, VAR_DOMAIN,
2891                         parse_language (par_state)->la_name_of_this
2892                         ? &is_a_field_of_this : NULL);
2893
2894   if (bsym.symbol && SYMBOL_CLASS (bsym.symbol) == LOC_BLOCK)
2895     {
2896       yylval.ssym.sym = bsym;
2897       yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
2898       return BLOCKNAME;
2899     }
2900   else if (!bsym.symbol)
2901     {
2902       /* If we found a field of 'this', we might have erroneously
2903          found a constructor where we wanted a type name.  Handle this
2904          case by noticing that we found a constructor and then look up
2905          the type tag instead.  */
2906       if (is_a_field_of_this.type != NULL
2907           && is_a_field_of_this.fn_field != NULL
2908           && TYPE_FN_FIELD_CONSTRUCTOR (is_a_field_of_this.fn_field->fn_fields,
2909                                         0))
2910         {
2911           struct field_of_this_result inner_is_a_field_of_this;
2912
2913           bsym = lookup_symbol (copy, block, STRUCT_DOMAIN,
2914                                 &inner_is_a_field_of_this);
2915           if (bsym.symbol != NULL)
2916             {
2917               yylval.tsym.type = SYMBOL_TYPE (bsym.symbol);
2918               return TYPENAME;
2919             }
2920         }
2921
2922       /* If we found a field, then we want to prefer it over a
2923          filename.  However, if the name was quoted, then it is better
2924          to check for a filename or a block, since this is the only
2925          way the user has of requiring the extension to be used.  */
2926       if (is_a_field_of_this.type == NULL || is_quoted_name)
2927         {
2928           /* See if it's a file name. */
2929           struct symtab *symtab;
2930
2931           symtab = lookup_symtab (copy);
2932           if (symtab)
2933             {
2934               yylval.bval = BLOCKVECTOR_BLOCK (SYMTAB_BLOCKVECTOR (symtab),
2935                                                STATIC_BLOCK);
2936               return FILENAME;
2937             }
2938         }
2939     }
2940
2941   if (bsym.symbol && SYMBOL_CLASS (bsym.symbol) == LOC_TYPEDEF)
2942     {
2943       yylval.tsym.type = SYMBOL_TYPE (bsym.symbol);
2944       return TYPENAME;
2945     }
2946
2947   /* See if it's an ObjC classname.  */
2948   if (parse_language (par_state)->la_language == language_objc && !bsym.symbol)
2949     {
2950       CORE_ADDR Class = lookup_objc_class (parse_gdbarch (par_state), copy);
2951       if (Class)
2952         {
2953           struct symbol *sym;
2954
2955           yylval.theclass.theclass = Class;
2956           sym = lookup_struct_typedef (copy, expression_context_block, 1);
2957           if (sym)
2958             yylval.theclass.type = SYMBOL_TYPE (sym);
2959           return CLASSNAME;
2960         }
2961     }
2962
2963   /* Input names that aren't symbols but ARE valid hex numbers, when
2964      the input radix permits them, can be names or numbers depending
2965      on the parse.  Note we support radixes > 16 here.  */
2966   if (!bsym.symbol
2967       && ((copy[0] >= 'a' && copy[0] < 'a' + input_radix - 10)
2968           || (copy[0] >= 'A' && copy[0] < 'A' + input_radix - 10)))
2969     {
2970       YYSTYPE newlval;  /* Its value is ignored.  */
2971       int hextype = parse_number (par_state, copy, yylval.sval.length,
2972                                   0, &newlval);
2973
2974       if (hextype == INT)
2975         {
2976           yylval.ssym.sym = bsym;
2977           yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
2978           return NAME_OR_INT;
2979         }
2980     }
2981
2982   /* Any other kind of symbol */
2983   yylval.ssym.sym = bsym;
2984   yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
2985
2986   if (bsym.symbol == NULL
2987       && parse_language (par_state)->la_language == language_cplus
2988       && is_a_field_of_this.type == NULL
2989       && lookup_minimal_symbol (copy, NULL, NULL).minsym == NULL)
2990     return UNKNOWN_CPP_NAME;
2991
2992   return NAME;
2993 }
2994
2995 /* Like classify_name, but used by the inner loop of the lexer, when a
2996    name might have already been seen.  CONTEXT is the context type, or
2997    NULL if this is the first component of a name.  */
2998
2999 static int
3000 classify_inner_name (struct parser_state *par_state,
3001                      const struct block *block, struct type *context)
3002 {
3003   struct type *type;
3004   char *copy;
3005
3006   if (context == NULL)
3007     return classify_name (par_state, block, 0);
3008
3009   type = check_typedef (context);
3010   if (!type_aggregate_p (type))
3011     return ERROR;
3012
3013   copy = copy_name (yylval.ssym.stoken);
3014   /* N.B. We assume the symbol can only be in VAR_DOMAIN.  */
3015   yylval.ssym.sym = cp_lookup_nested_symbol (type, copy, block, VAR_DOMAIN);
3016
3017   /* If no symbol was found, search for a matching base class named
3018      COPY.  This will allow users to enter qualified names of class members
3019      relative to the `this' pointer.  */
3020   if (yylval.ssym.sym.symbol == NULL)
3021     {
3022       struct type *base_type = cp_find_type_baseclass_by_name (type, copy);
3023
3024       if (base_type != NULL)
3025         {
3026           yylval.tsym.type = base_type;
3027           return TYPENAME;
3028         }
3029
3030       return ERROR;
3031     }
3032
3033   switch (SYMBOL_CLASS (yylval.ssym.sym.symbol))
3034     {
3035     case LOC_BLOCK:
3036     case LOC_LABEL:
3037       /* cp_lookup_nested_symbol might have accidentally found a constructor
3038          named COPY when we really wanted a base class of the same name.
3039          Double-check this case by looking for a base class.  */
3040       {
3041         struct type *base_type = cp_find_type_baseclass_by_name (type, copy);
3042
3043         if (base_type != NULL)
3044           {
3045             yylval.tsym.type = base_type;
3046             return TYPENAME;
3047           }
3048       }
3049       return ERROR;
3050
3051     case LOC_TYPEDEF:
3052       yylval.tsym.type = SYMBOL_TYPE (yylval.ssym.sym.symbol);
3053       return TYPENAME;
3054
3055     default:
3056       return NAME;
3057     }
3058   internal_error (__FILE__, __LINE__, _("not reached"));
3059 }
3060
3061 /* The outer level of a two-level lexer.  This calls the inner lexer
3062    to return tokens.  It then either returns these tokens, or
3063    aggregates them into a larger token.  This lets us work around a
3064    problem in our parsing approach, where the parser could not
3065    distinguish between qualified names and qualified types at the
3066    right point.
3067
3068    This approach is still not ideal, because it mishandles template
3069    types.  See the comment in lex_one_token for an example.  However,
3070    this is still an improvement over the earlier approach, and will
3071    suffice until we move to better parsing technology.  */
3072
3073 static int
3074 yylex (void)
3075 {
3076   token_and_value current;
3077   int first_was_coloncolon, last_was_coloncolon;
3078   struct type *context_type = NULL;
3079   int last_to_examine, next_to_examine, checkpoint;
3080   const struct block *search_block;
3081   int is_quoted_name;
3082
3083   if (popping && !VEC_empty (token_and_value, token_fifo))
3084     goto do_pop;
3085   popping = 0;
3086
3087   /* Read the first token and decide what to do.  Most of the
3088      subsequent code is C++-only; but also depends on seeing a "::" or
3089      name-like token.  */
3090   current.token = lex_one_token (pstate, &is_quoted_name);
3091   if (current.token == NAME)
3092     current.token = classify_name (pstate, expression_context_block,
3093                                    is_quoted_name);
3094   if (parse_language (pstate)->la_language != language_cplus
3095       || (current.token != TYPENAME && current.token != COLONCOLON
3096           && current.token != FILENAME))
3097     return current.token;
3098
3099   /* Read any sequence of alternating "::" and name-like tokens into
3100      the token FIFO.  */
3101   current.value = yylval;
3102   VEC_safe_push (token_and_value, token_fifo, &current);
3103   last_was_coloncolon = current.token == COLONCOLON;
3104   while (1)
3105     {
3106       int ignore;
3107
3108       /* We ignore quoted names other than the very first one.
3109          Subsequent ones do not have any special meaning.  */
3110       current.token = lex_one_token (pstate, &ignore);
3111       current.value = yylval;
3112       VEC_safe_push (token_and_value, token_fifo, &current);
3113
3114       if ((last_was_coloncolon && current.token != NAME)
3115           || (!last_was_coloncolon && current.token != COLONCOLON))
3116         break;
3117       last_was_coloncolon = !last_was_coloncolon;
3118     }
3119   popping = 1;
3120
3121   /* We always read one extra token, so compute the number of tokens
3122      to examine accordingly.  */
3123   last_to_examine = VEC_length (token_and_value, token_fifo) - 2;
3124   next_to_examine = 0;
3125
3126   current = *VEC_index (token_and_value, token_fifo, next_to_examine);
3127   ++next_to_examine;
3128
3129   name_obstack.clear ();
3130   checkpoint = 0;
3131   if (current.token == FILENAME)
3132     search_block = current.value.bval;
3133   else if (current.token == COLONCOLON)
3134     search_block = NULL;
3135   else
3136     {
3137       gdb_assert (current.token == TYPENAME);
3138       search_block = expression_context_block;
3139       obstack_grow (&name_obstack, current.value.sval.ptr,
3140                     current.value.sval.length);
3141       context_type = current.value.tsym.type;
3142       checkpoint = 1;
3143     }
3144
3145   first_was_coloncolon = current.token == COLONCOLON;
3146   last_was_coloncolon = first_was_coloncolon;
3147
3148   while (next_to_examine <= last_to_examine)
3149     {
3150       token_and_value *next;
3151
3152       next = VEC_index (token_and_value, token_fifo, next_to_examine);
3153       ++next_to_examine;
3154
3155       if (next->token == NAME && last_was_coloncolon)
3156         {
3157           int classification;
3158
3159           yylval = next->value;
3160           classification = classify_inner_name (pstate, search_block,
3161                                                 context_type);
3162           /* We keep going until we either run out of names, or until
3163              we have a qualified name which is not a type.  */
3164           if (classification != TYPENAME && classification != NAME)
3165             break;
3166
3167           /* Accept up to this token.  */
3168           checkpoint = next_to_examine;
3169
3170           /* Update the partial name we are constructing.  */
3171           if (context_type != NULL)
3172             {
3173               /* We don't want to put a leading "::" into the name.  */
3174               obstack_grow_str (&name_obstack, "::");
3175             }
3176           obstack_grow (&name_obstack, next->value.sval.ptr,
3177                         next->value.sval.length);
3178
3179           yylval.sval.ptr = (const char *) obstack_base (&name_obstack);
3180           yylval.sval.length = obstack_object_size (&name_obstack);
3181           current.value = yylval;
3182           current.token = classification;
3183
3184           last_was_coloncolon = 0;
3185
3186           if (classification == NAME)
3187             break;
3188
3189           context_type = yylval.tsym.type;
3190         }
3191       else if (next->token == COLONCOLON && !last_was_coloncolon)
3192         last_was_coloncolon = 1;
3193       else
3194         {
3195           /* We've reached the end of the name.  */
3196           break;
3197         }
3198     }
3199
3200   /* If we have a replacement token, install it as the first token in
3201      the FIFO, and delete the other constituent tokens.  */
3202   if (checkpoint > 0)
3203     {
3204       current.value.sval.ptr
3205         = (const char *) obstack_copy0 (&expansion_obstack,
3206                                         current.value.sval.ptr,
3207                                         current.value.sval.length);
3208
3209       VEC_replace (token_and_value, token_fifo, 0, &current);
3210       if (checkpoint > 1)
3211         VEC_block_remove (token_and_value, token_fifo, 1, checkpoint - 1);
3212     }
3213
3214  do_pop:
3215   current = *VEC_index (token_and_value, token_fifo, 0);
3216   VEC_ordered_remove (token_and_value, token_fifo, 0);
3217   yylval = current.value;
3218   return current.token;
3219 }
3220
3221 int
3222 c_parse (struct parser_state *par_state)
3223 {
3224   int result;
3225   struct cleanup *back_to;
3226
3227   /* Setting up the parser state.  */
3228   scoped_restore pstate_restore = make_scoped_restore (&pstate);
3229   gdb_assert (par_state != NULL);
3230   pstate = par_state;
3231
3232   /* Note that parsing (within yyparse) freely installs cleanups
3233      assuming they'll be run here (below).  */
3234
3235   back_to = make_cleanup (free_current_contents, &expression_macro_scope);
3236
3237   /* Set up the scope for macro expansion.  */
3238   expression_macro_scope = NULL;
3239
3240   if (expression_context_block)
3241     expression_macro_scope
3242       = sal_macro_scope (find_pc_line (expression_context_pc, 0));
3243   else
3244     expression_macro_scope = default_macro_scope ();
3245   if (! expression_macro_scope)
3246     expression_macro_scope = user_macro_scope ();
3247
3248   /* Initialize macro expansion code.  */
3249   obstack_init (&expansion_obstack);
3250   gdb_assert (! macro_original_text);
3251   make_cleanup (scan_macro_cleanup, 0);
3252
3253   scoped_restore restore_yydebug = make_scoped_restore (&yydebug,
3254                                                         parser_debug);
3255
3256   /* Initialize some state used by the lexer.  */
3257   last_was_structop = 0;
3258   saw_name_at_eof = 0;
3259
3260   VEC_free (token_and_value, token_fifo);
3261   popping = 0;
3262   name_obstack.clear ();
3263
3264   result = yyparse ();
3265   do_cleanups (back_to);
3266
3267   return result;
3268 }
3269
3270 #ifdef YYBISON
3271
3272 /* This is called via the YYPRINT macro when parser debugging is
3273    enabled.  It prints a token's value.  */
3274
3275 static void
3276 c_print_token (FILE *file, int type, YYSTYPE value)
3277 {
3278   switch (type)
3279     {
3280     case INT:
3281       parser_fprintf (file, "typed_val_int<%s, %s>",
3282                       TYPE_SAFE_NAME (value.typed_val_int.type),
3283                       pulongest (value.typed_val_int.val));
3284       break;
3285
3286     case CHAR:
3287     case STRING:
3288       {
3289         char *copy = (char *) alloca (value.tsval.length + 1);
3290
3291         memcpy (copy, value.tsval.ptr, value.tsval.length);
3292         copy[value.tsval.length] = '\0';
3293
3294         parser_fprintf (file, "tsval<type=%d, %s>", value.tsval.type, copy);
3295       }
3296       break;
3297
3298     case NSSTRING:
3299     case VARIABLE:
3300       parser_fprintf (file, "sval<%s>", copy_name (value.sval));
3301       break;
3302
3303     case TYPENAME:
3304       parser_fprintf (file, "tsym<type=%s, name=%s>",
3305                       TYPE_SAFE_NAME (value.tsym.type),
3306                       copy_name (value.tsym.stoken));
3307       break;
3308
3309     case NAME:
3310     case UNKNOWN_CPP_NAME:
3311     case NAME_OR_INT:
3312     case BLOCKNAME:
3313       parser_fprintf (file, "ssym<name=%s, sym=%s, field_of_this=%d>",
3314                        copy_name (value.ssym.stoken),
3315                        (value.ssym.sym.symbol == NULL
3316                         ? "(null)" : SYMBOL_PRINT_NAME (value.ssym.sym.symbol)),
3317                        value.ssym.is_a_field_of_this);
3318       break;
3319
3320     case FILENAME:
3321       parser_fprintf (file, "bval<%s>", host_address_to_string (value.bval));
3322       break;
3323     }
3324 }
3325
3326 #endif
3327
3328 void
3329 yyerror (const char *msg)
3330 {
3331   if (prev_lexptr)
3332     lexptr = prev_lexptr;
3333
3334   error (_("A %s in expression, near `%s'."), (msg ? msg : "error"), lexptr);
3335 }