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