OSDN Git Service

gdb/
[pf3gnuchains/pf3gnuchains3x.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    2009 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 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, and return the result
20    as a struct expression pointer.  That structure contains arithmetic
21    operations in reverse polish, with constants represented by
22    operations that are followed by special data.  See expression.h for
23    the details of the format.  What is important here is that it can
24    be built up sequentially during the process of parsing; the lower
25    levels of the tree always come first in the result.
26
27    Note that malloc's and realloc's in this file are transformed to
28    xmalloc and xrealloc respectively by the same sed command in the
29    makefile that remaps any other malloc/realloc inserted by the
30    parser generator.  Doing this with #defines and trying to control
31    the interaction with include files (<malloc.h> and <stdlib.h> for
32    example) just became too messy, particularly when such includes can
33    be inserted at random times by the parser generator.  */
34    
35 %{
36
37 #include "defs.h"
38 #include "gdb_string.h"
39 #include <ctype.h>
40 #include "expression.h"
41
42 #include "objc-lang.h"  /* For objc language constructs.  */
43
44 #include "value.h"
45 #include "parser-defs.h"
46 #include "language.h"
47 #include "c-lang.h"
48 #include "bfd.h" /* Required by objfiles.h.  */
49 #include "symfile.h" /* Required by objfiles.h.  */
50 #include "objfiles.h" /* For have_full_symbols and have_partial_symbols.  */
51 #include "top.h"
52 #include "completer.h" /* For skip_quoted().  */
53 #include "block.h"
54
55 #define parse_type builtin_type (parse_gdbarch)
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 (parse_type->builtin_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 (parse_type->builtin_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 (parse_type->builtin_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 (parse_type->builtin_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 (parse_type->builtin_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                           if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
639                             error ("No function \"%s\" in specified context.",
640                                    copy_name ($3));
641                           $$ = SYMBOL_BLOCK_VALUE (tem); }
642         ;
643
644 variable:       block COLONCOLON name
645                         { struct symbol *sym;
646                           sym = lookup_symbol (copy_name ($3), $1,
647                                                VAR_DOMAIN, (int *) NULL);
648                           if (sym == 0)
649                             error ("No symbol \"%s\" in specified context.",
650                                    copy_name ($3));
651
652                           write_exp_elt_opcode (OP_VAR_VALUE);
653                           /* block_found is set by lookup_symbol.  */
654                           write_exp_elt_block (block_found);
655                           write_exp_elt_sym (sym);
656                           write_exp_elt_opcode (OP_VAR_VALUE); }
657         ;
658
659 qualified_name: typebase COLONCOLON name
660                         {
661                           struct type *type = $1;
662                           if (TYPE_CODE (type) != TYPE_CODE_STRUCT
663                               && TYPE_CODE (type) != TYPE_CODE_UNION)
664                             error ("`%s' is not defined as an aggregate type.",
665                                    TYPE_NAME (type));
666
667                           write_exp_elt_opcode (OP_SCOPE);
668                           write_exp_elt_type (type);
669                           write_exp_string ($3);
670                           write_exp_elt_opcode (OP_SCOPE);
671                         }
672         |       typebase COLONCOLON '~' name
673                         {
674                           struct type *type = $1;
675                           struct stoken tmp_token;
676                           if (TYPE_CODE (type) != TYPE_CODE_STRUCT
677                               && TYPE_CODE (type) != TYPE_CODE_UNION)
678                             error ("`%s' is not defined as an aggregate type.",
679                                    TYPE_NAME (type));
680
681                           if (strcmp (type_name_no_tag (type), $4.ptr) != 0)
682                             error ("invalid destructor `%s::~%s'",
683                                    type_name_no_tag (type), $4.ptr);
684
685                           tmp_token.ptr = (char*) alloca ($4.length + 2);
686                           tmp_token.length = $4.length + 1;
687                           tmp_token.ptr[0] = '~';
688                           memcpy (tmp_token.ptr+1, $4.ptr, $4.length);
689                           tmp_token.ptr[tmp_token.length] = 0;
690                           write_exp_elt_opcode (OP_SCOPE);
691                           write_exp_elt_type (type);
692                           write_exp_string (tmp_token);
693                           write_exp_elt_opcode (OP_SCOPE);
694                         }
695         ;
696
697 variable:       qualified_name
698         |       COLONCOLON name
699                         {
700                           char *name = copy_name ($2);
701                           struct symbol *sym;
702                           struct minimal_symbol *msymbol;
703
704                           sym =
705                             lookup_symbol (name, (const struct block *) NULL,
706                                            VAR_DOMAIN, (int *) NULL);
707                           if (sym)
708                             {
709                               write_exp_elt_opcode (OP_VAR_VALUE);
710                               write_exp_elt_block (NULL);
711                               write_exp_elt_sym (sym);
712                               write_exp_elt_opcode (OP_VAR_VALUE);
713                               break;
714                             }
715
716                           msymbol = lookup_minimal_symbol (name, NULL, NULL);
717                           if (msymbol != NULL)
718                             write_exp_msymbol (msymbol);
719                           else if (!have_full_symbols () && !have_partial_symbols ())
720                             error ("No symbol table is loaded.  Use the \"file\" command.");
721                           else
722                             error ("No symbol \"%s\" in current context.", name);
723                         }
724         ;
725
726 variable:       name_not_typename
727                         { struct symbol *sym = $1.sym;
728
729                           if (sym)
730                             {
731                               if (symbol_read_needs_frame (sym))
732                                 {
733                                   if (innermost_block == 0 ||
734                                       contained_in (block_found, 
735                                                     innermost_block))
736                                     innermost_block = block_found;
737                                 }
738
739                               write_exp_elt_opcode (OP_VAR_VALUE);
740                               /* We want to use the selected frame, not
741                                  another more inner frame which happens to
742                                  be in the same block.  */
743                               write_exp_elt_block (NULL);
744                               write_exp_elt_sym (sym);
745                               write_exp_elt_opcode (OP_VAR_VALUE);
746                             }
747                           else if ($1.is_a_field_of_this)
748                             {
749                               /* C++/ObjC: it hangs off of `this'/'self'.  
750                                  Must not inadvertently convert from a 
751                                  method call to data ref.  */
752                               if (innermost_block == 0 || 
753                                   contained_in (block_found, innermost_block))
754                                 innermost_block = block_found;
755                               write_exp_elt_opcode (OP_OBJC_SELF);
756                               write_exp_elt_opcode (OP_OBJC_SELF);
757                               write_exp_elt_opcode (STRUCTOP_PTR);
758                               write_exp_string ($1.stoken);
759                               write_exp_elt_opcode (STRUCTOP_PTR);
760                             }
761                           else
762                             {
763                               struct minimal_symbol *msymbol;
764                               char *arg = copy_name ($1.stoken);
765
766                               msymbol =
767                                 lookup_minimal_symbol (arg, NULL, NULL);
768                               if (msymbol != NULL)
769                                 write_exp_msymbol (msymbol);
770                               else if (!have_full_symbols () && 
771                                        !have_partial_symbols ())
772                                 error ("No symbol table is loaded.  Use the \"file\" command.");
773                               else
774                                 error ("No symbol \"%s\" in current context.",
775                                        copy_name ($1.stoken));
776                             }
777                         }
778         ;
779
780
781 ptype   :       typebase
782         /* "const" and "volatile" are curently ignored.  A type
783            qualifier before the type is currently handled in the
784            typebase rule.  The reason for recognizing these here
785            (shift/reduce conflicts) might be obsolete now that some
786            pointer to member rules have been deleted.  */
787         |       typebase CONST_KEYWORD
788         |       typebase VOLATILE_KEYWORD
789         |       typebase abs_decl
790                 { $$ = follow_types ($1); }
791         |       typebase CONST_KEYWORD abs_decl
792                 { $$ = follow_types ($1); }
793         |       typebase VOLATILE_KEYWORD abs_decl
794                 { $$ = follow_types ($1); }
795         ;
796
797 abs_decl:       '*'
798                         { push_type (tp_pointer); $$ = 0; }
799         |       '*' abs_decl
800                         { push_type (tp_pointer); $$ = $2; }
801         |       '&'
802                         { push_type (tp_reference); $$ = 0; }
803         |       '&' abs_decl
804                         { push_type (tp_reference); $$ = $2; }
805         |       direct_abs_decl
806         ;
807
808 direct_abs_decl: '(' abs_decl ')'
809                         { $$ = $2; }
810         |       direct_abs_decl array_mod
811                         {
812                           push_type_int ($2);
813                           push_type (tp_array);
814                         }
815         |       array_mod
816                         {
817                           push_type_int ($1);
818                           push_type (tp_array);
819                           $$ = 0;
820                         }
821
822         |       direct_abs_decl func_mod
823                         { push_type (tp_function); }
824         |       func_mod
825                         { push_type (tp_function); }
826         ;
827
828 array_mod:      '[' ']'
829                         { $$ = -1; }
830         |       '[' INT ']'
831                         { $$ = $2.val; }
832         ;
833
834 func_mod:       '(' ')'
835                         { $$ = 0; }
836         |       '(' nonempty_typelist ')'
837                         { free ($2); $$ = 0; }
838         ;
839
840 /* We used to try to recognize more pointer to member types here, but
841    that didn't work (shift/reduce conflicts meant that these rules
842    never got executed).  The problem is that
843      int (foo::bar::baz::bizzle)
844    is a function type but
845      int (foo::bar::baz::bizzle::*)
846    is a pointer to member type.  Stroustrup loses again!  */
847
848 type    :       ptype
849         ;
850
851 typebase  /* Implements (approximately): (type-qualifier)* type-specifier.  */
852         :       TYPENAME
853                         { $$ = $1.type; }
854         |       CLASSNAME
855                         {
856                           if ($1.type == NULL)
857                             error ("No symbol \"%s\" in current context.", 
858                                    copy_name($1.stoken));
859                           else
860                             $$ = $1.type;
861                         }
862         |       INT_KEYWORD
863                         { $$ = parse_type->builtin_int; }
864         |       LONG
865                         { $$ = parse_type->builtin_long; }
866         |       SHORT
867                         { $$ = parse_type->builtin_short; }
868         |       LONG INT_KEYWORD
869                         { $$ = parse_type->builtin_long; }
870         |       UNSIGNED LONG INT_KEYWORD
871                         { $$ = parse_type->builtin_unsigned_long; }
872         |       LONG LONG
873                         { $$ = parse_type->builtin_long_long; }
874         |       LONG LONG INT_KEYWORD
875                         { $$ = parse_type->builtin_long_long; }
876         |       UNSIGNED LONG LONG
877                         { $$ = parse_type->builtin_unsigned_long_long; }
878         |       UNSIGNED LONG LONG INT_KEYWORD
879                         { $$ = parse_type->builtin_unsigned_long_long; }
880         |       SHORT INT_KEYWORD
881                         { $$ = parse_type->builtin_short; }
882         |       UNSIGNED SHORT INT_KEYWORD
883                         { $$ = parse_type->builtin_unsigned_short; }
884         |       DOUBLE_KEYWORD
885                         { $$ = parse_type->builtin_double; }
886         |       LONG DOUBLE_KEYWORD
887                         { $$ = parse_type->builtin_long_double; }
888         |       STRUCT name
889                         { $$ = lookup_struct (copy_name ($2),
890                                               expression_context_block); }
891         |       CLASS name
892                         { $$ = lookup_struct (copy_name ($2),
893                                               expression_context_block); }
894         |       UNION name
895                         { $$ = lookup_union (copy_name ($2),
896                                              expression_context_block); }
897         |       ENUM name
898                         { $$ = lookup_enum (copy_name ($2),
899                                             expression_context_block); }
900         |       UNSIGNED typename
901                         { $$ = lookup_unsigned_typename (TYPE_NAME($2.type)); }
902         |       UNSIGNED
903                         { $$ = parse_type->builtin_unsigned_int; }
904         |       SIGNED_KEYWORD typename
905                         { $$ = lookup_signed_typename (TYPE_NAME($2.type)); }
906         |       SIGNED_KEYWORD
907                         { $$ = parse_type->builtin_int; }
908         |       TEMPLATE name '<' type '>'
909                         { $$ = lookup_template_type(copy_name($2), $4,
910                                                     expression_context_block);
911                         }
912         /* "const" and "volatile" are curently ignored.  A type
913            qualifier after the type is handled in the ptype rule.  I
914            think these could be too.  */
915         |       CONST_KEYWORD typebase { $$ = $2; }
916         |       VOLATILE_KEYWORD typebase { $$ = $2; }
917         ;
918
919 typename:       TYPENAME
920         |       INT_KEYWORD
921                 {
922                   $$.stoken.ptr = "int";
923                   $$.stoken.length = 3;
924                   $$.type = parse_type->builtin_int;
925                 }
926         |       LONG
927                 {
928                   $$.stoken.ptr = "long";
929                   $$.stoken.length = 4;
930                   $$.type = parse_type->builtin_long;
931                 }
932         |       SHORT
933                 {
934                   $$.stoken.ptr = "short";
935                   $$.stoken.length = 5;
936                   $$.type = parse_type->builtin_short;
937                 }
938         ;
939
940 nonempty_typelist
941         :       type
942                 { $$ = (struct type **) malloc (sizeof (struct type *) * 2);
943                   $<ivec>$[0] = 1;      /* Number of types in vector.  */
944                   $$[1] = $1;
945                 }
946         |       nonempty_typelist ',' type
947                 { int len = sizeof (struct type *) * (++($<ivec>1[0]) + 1);
948                   $$ = (struct type **) realloc ((char *) $1, len);
949                   $$[$<ivec>$[0]] = $3;
950                 }
951         ;
952
953 name    :       NAME        { $$ = $1.stoken; }
954         |       BLOCKNAME   { $$ = $1.stoken; }
955         |       TYPENAME    { $$ = $1.stoken; }
956         |       CLASSNAME   { $$ = $1.stoken; }
957         |       NAME_OR_INT { $$ = $1.stoken; }
958         ;
959
960 name_not_typename :     NAME
961         |       BLOCKNAME
962 /* These would be useful if name_not_typename was useful, but it is
963    just a fake for "variable", so these cause reduce/reduce conflicts
964    because the parser can't tell whether NAME_OR_INT is a
965    name_not_typename (=variable, =exp) or just an exp.  If
966    name_not_typename was ever used in an lvalue context where only a
967    name could occur, this might be useful.  */
968 /*      | NAME_OR_INT */
969         ;
970
971 %%
972
973 /* Take care of parsing a number (anything that starts with a digit).
974    Set yylval and return the token type; update lexptr.  LEN is the
975    number of characters in it.  */
976
977 /*** Needs some error checking for the float case.  ***/
978
979 static int
980 parse_number (p, len, parsed_float, putithere)
981      char *p;
982      int len;
983      int parsed_float;
984      YYSTYPE *putithere;
985 {
986   /* FIXME: Shouldn't these be unsigned?  We don't deal with negative
987      values here, and we do kind of silly things like cast to
988      unsigned.  */
989   LONGEST n = 0;
990   LONGEST prevn = 0;
991   unsigned LONGEST un;
992
993   int i = 0;
994   int c;
995   int base = input_radix;
996   int unsigned_p = 0;
997
998   /* Number of "L" suffixes encountered.  */
999   int long_p = 0;
1000
1001   /* We have found a "L" or "U" suffix.  */
1002   int found_suffix = 0;
1003
1004   unsigned LONGEST high_bit;
1005   struct type *signed_type;
1006   struct type *unsigned_type;
1007
1008   if (parsed_float)
1009     {
1010       char c;
1011
1012       /* It's a float since it contains a point or an exponent.  */
1013
1014       sscanf (p, "%" DOUBLEST_SCAN_FORMAT "%c",
1015               &putithere->typed_val_float.dval, &c);
1016
1017       /* See if it has `f' or `l' suffix (float or long double).  */
1018
1019       c = tolower (p[len - 1]);
1020
1021       if (c == 'f')
1022         putithere->typed_val_float.type = parse_type->builtin_float;
1023       else if (c == 'l')
1024         putithere->typed_val_float.type = parse_type->builtin_long_double;
1025       else if (isdigit (c) || c == '.')
1026         putithere->typed_val_float.type = parse_type->builtin_double;
1027       else
1028         return ERROR;
1029
1030       return FLOAT;
1031     }
1032
1033   /* Handle base-switching prefixes 0x, 0t, 0d, and 0.  */
1034   if (p[0] == '0')
1035     switch (p[1])
1036       {
1037       case 'x':
1038       case 'X':
1039         if (len >= 3)
1040           {
1041             p += 2;
1042             base = 16;
1043             len -= 2;
1044           }
1045         break;
1046
1047       case 't':
1048       case 'T':
1049       case 'd':
1050       case 'D':
1051         if (len >= 3)
1052           {
1053             p += 2;
1054             base = 10;
1055             len -= 2;
1056           }
1057         break;
1058
1059       default:
1060         base = 8;
1061         break;
1062       }
1063
1064   while (len-- > 0)
1065     {
1066       c = *p++;
1067       if (c >= 'A' && c <= 'Z')
1068         c += 'a' - 'A';
1069       if (c != 'l' && c != 'u')
1070         n *= base;
1071       if (c >= '0' && c <= '9')
1072         {
1073           if (found_suffix)
1074             return ERROR;
1075           n += i = c - '0';
1076         }
1077       else
1078         {
1079           if (base > 10 && c >= 'a' && c <= 'f')
1080             {
1081               if (found_suffix)
1082                 return ERROR;
1083               n += i = c - 'a' + 10;
1084             }
1085           else if (c == 'l')
1086             {
1087               ++long_p;
1088               found_suffix = 1;
1089             }
1090           else if (c == 'u')
1091             {
1092               unsigned_p = 1;
1093               found_suffix = 1;
1094             }
1095           else
1096             return ERROR;       /* Char not a digit.  */
1097         }
1098       if (i >= base)
1099         return ERROR;           /* Invalid digit in this base.  */
1100
1101       /* Portably test for overflow (only works for nonzero values, so
1102          make a second check for zero).  FIXME: Can't we just make n
1103          and prevn unsigned and avoid this?  */
1104       if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
1105         unsigned_p = 1;         /* Try something unsigned.  */
1106
1107       /* Portably test for unsigned overflow.
1108          FIXME: This check is wrong; for example it doesn't find 
1109          overflow on 0x123456789 when LONGEST is 32 bits.  */
1110       if (c != 'l' && c != 'u' && n != 0)
1111         {       
1112           if ((unsigned_p && (unsigned LONGEST) prevn >= (unsigned LONGEST) n))
1113             error ("Numeric constant too large.");
1114         }
1115       prevn = n;
1116     }
1117
1118   /* An integer constant is an int, a long, or a long long.  An L
1119      suffix forces it to be long; an LL suffix forces it to be long
1120      long.  If not forced to a larger size, it gets the first type of
1121      the above that it fits in.  To figure out whether it fits, we
1122      shift it right and see whether anything remains.  Note that we
1123      can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
1124      operation, because many compilers will warn about such a shift
1125      (which always produces a zero result).  Sometimes gdbarch_int_bit
1126      or gdbarch_long_int will be that big, sometimes not.  To deal with
1127      the case where it is we just always shift the value more than
1128      once, with fewer bits each time.  */
1129
1130   un = (unsigned LONGEST)n >> 2;
1131   if (long_p == 0
1132       && (un >> (gdbarch_int_bit (parse_gdbarch) - 2)) == 0)
1133     {
1134       high_bit = ((unsigned LONGEST)1) << (gdbarch_int_bit (parse_gdbarch) - 1);
1135
1136       /* A large decimal (not hex or octal) constant (between INT_MAX
1137          and UINT_MAX) is a long or unsigned long, according to ANSI,
1138          never an unsigned int, but this code treats it as unsigned
1139          int.  This probably should be fixed.  GCC gives a warning on
1140          such constants.  */
1141
1142       unsigned_type = parse_type->builtin_unsigned_int;
1143       signed_type = parse_type->builtin_int;
1144     }
1145   else if (long_p <= 1
1146            && (un >> (gdbarch_long_bit (parse_gdbarch) - 2)) == 0)
1147     {
1148       high_bit = ((unsigned LONGEST)1) << (gdbarch_long_bit (parse_gdbarch) - 1);
1149       unsigned_type = parse_type->builtin_unsigned_long;
1150       signed_type = parse_type->builtin_long;
1151     }
1152   else
1153     {
1154       high_bit = (((unsigned LONGEST)1)
1155                   << (gdbarch_long_long_bit (parse_gdbarch) - 32 - 1)
1156                   << 16
1157                   << 16);
1158       if (high_bit == 0)
1159         /* A long long does not fit in a LONGEST.  */
1160         high_bit =
1161           (unsigned LONGEST)1 << (sizeof (LONGEST) * HOST_CHAR_BIT - 1);
1162       unsigned_type = parse_type->builtin_unsigned_long_long;
1163       signed_type = parse_type->builtin_long_long;
1164     }
1165
1166    putithere->typed_val_int.val = n;
1167
1168    /* If the high bit of the worked out type is set then this number
1169       has to be unsigned.  */
1170
1171    if (unsigned_p || (n & high_bit)) 
1172      {
1173        putithere->typed_val_int.type = unsigned_type;
1174      }
1175    else 
1176      {
1177        putithere->typed_val_int.type = signed_type;
1178      }
1179
1180    return INT;
1181 }
1182
1183 struct token
1184 {
1185   char *operator;
1186   int token;
1187   enum exp_opcode opcode;
1188 };
1189
1190 static const struct token tokentab3[] =
1191   {
1192     {">>=", ASSIGN_MODIFY, BINOP_RSH},
1193     {"<<=", ASSIGN_MODIFY, BINOP_LSH}
1194   };
1195
1196 static const struct token tokentab2[] =
1197   {
1198     {"+=", ASSIGN_MODIFY, BINOP_ADD},
1199     {"-=", ASSIGN_MODIFY, BINOP_SUB},
1200     {"*=", ASSIGN_MODIFY, BINOP_MUL},
1201     {"/=", ASSIGN_MODIFY, BINOP_DIV},
1202     {"%=", ASSIGN_MODIFY, BINOP_REM},
1203     {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR},
1204     {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND},
1205     {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR},
1206     {"++", INCREMENT, BINOP_END},
1207     {"--", DECREMENT, BINOP_END},
1208     {"->", ARROW, BINOP_END},
1209     {"&&", ANDAND, BINOP_END},
1210     {"||", OROR, BINOP_END},
1211     {"::", COLONCOLON, BINOP_END},
1212     {"<<", LSH, BINOP_END},
1213     {">>", RSH, BINOP_END},
1214     {"==", EQUAL, BINOP_END},
1215     {"!=", NOTEQUAL, BINOP_END},
1216     {"<=", LEQ, BINOP_END},
1217     {">=", GEQ, BINOP_END}
1218   };
1219
1220 /* Read one token, getting characters through lexptr.  */
1221
1222 static int
1223 yylex ()
1224 {
1225   int c, tokchr;
1226   int namelen;
1227   unsigned int i;
1228   char *tokstart;
1229   char *tokptr;
1230   int tempbufindex;
1231   static char *tempbuf;
1232   static int tempbufsize;
1233   
1234  retry:
1235
1236   tokstart = lexptr;
1237   /* See if it is a special token of length 3.  */
1238   for (i = 0; i < sizeof tokentab3 / sizeof tokentab3[0]; i++)
1239     if (strncmp (tokstart, tokentab3[i].operator, 3) == 0)
1240       {
1241         lexptr += 3;
1242         yylval.opcode = tokentab3[i].opcode;
1243         return tokentab3[i].token;
1244       }
1245
1246   /* See if it is a special token of length 2.  */
1247   for (i = 0; i < sizeof tokentab2 / sizeof tokentab2[0]; i++)
1248     if (strncmp (tokstart, tokentab2[i].operator, 2) == 0)
1249       {
1250         lexptr += 2;
1251         yylval.opcode = tokentab2[i].opcode;
1252         return tokentab2[i].token;
1253       }
1254
1255   c = 0;
1256   switch (tokchr = *tokstart)
1257     {
1258     case 0:
1259       return 0;
1260
1261     case ' ':
1262     case '\t':
1263     case '\n':
1264       lexptr++;
1265       goto retry;
1266
1267     case '\'':
1268       /* We either have a character constant ('0' or '\177' for
1269          example) or we have a quoted symbol reference ('foo(int,int)'
1270          in C++ for example).  */
1271       lexptr++;
1272       c = *lexptr++;
1273       if (c == '\\')
1274         c = parse_escape (&lexptr);
1275       else if (c == '\'')
1276         error ("Empty character constant.");
1277
1278       yylval.typed_val_int.val = c;
1279       yylval.typed_val_int.type = parse_type->builtin_char;
1280
1281       c = *lexptr++;
1282       if (c != '\'')
1283         {
1284           namelen = skip_quoted (tokstart) - tokstart;
1285           if (namelen > 2)
1286             {
1287               lexptr = tokstart + namelen;
1288               if (lexptr[-1] != '\'')
1289                 error ("Unmatched single quote.");
1290               namelen -= 2;
1291               tokstart++;
1292               goto tryname;
1293             }
1294           error ("Invalid character constant.");
1295         }
1296       return INT;
1297
1298     case '(':
1299       paren_depth++;
1300       lexptr++;
1301       return '(';
1302
1303     case ')':
1304       if (paren_depth == 0)
1305         return 0;
1306       paren_depth--;
1307       lexptr++;
1308       return ')';
1309
1310     case ',':
1311       if (comma_terminates && paren_depth == 0)
1312         return 0;
1313       lexptr++;
1314       return ',';
1315
1316     case '.':
1317       /* Might be a floating point number.  */
1318       if (lexptr[1] < '0' || lexptr[1] > '9')
1319         goto symbol;            /* Nope, must be a symbol.  */
1320       /* FALL THRU into number case.  */
1321
1322     case '0':
1323     case '1':
1324     case '2':
1325     case '3':
1326     case '4':
1327     case '5':
1328     case '6':
1329     case '7':
1330     case '8':
1331     case '9':
1332       {
1333         /* It's a number.  */
1334         int got_dot = 0, got_e = 0, toktype = FLOAT;
1335         /* Initialize toktype to anything other than ERROR.  */
1336         char *p = tokstart;
1337         int hex = input_radix > 10;
1338         int local_radix = input_radix;
1339         if (tokchr == '0' && (p[1] == 'x' || p[1] == 'X'))
1340           {
1341             p += 2;
1342             hex = 1;
1343             local_radix = 16;
1344           }
1345         else if (tokchr == '0' && (p[1]=='t' || p[1]=='T' || p[1]=='d' || p[1]=='D'))
1346           {
1347             p += 2;
1348             hex = 0;
1349             local_radix = 10;
1350           }
1351
1352         for (;; ++p)
1353           {
1354             /* This test includes !hex because 'e' is a valid hex digit
1355                and thus does not indicate a floating point number when
1356                the radix is hex.  */
1357
1358             if (!hex && (*p == 'e' || *p == 'E'))
1359               if (got_e)
1360                 toktype = ERROR;        /* Only one 'e' in a float.  */
1361               else
1362                 got_e = 1;
1363             /* This test does not include !hex, because a '.' always
1364                indicates a decimal floating point number regardless of
1365                the radix.  */
1366             else if (*p == '.')
1367               if (got_dot)
1368                 toktype = ERROR;        /* Only one '.' in a float.  */
1369               else
1370                 got_dot = 1;
1371             else if (got_e && (p[-1] == 'e' || p[-1] == 'E') &&
1372                     (*p == '-' || *p == '+'))
1373               /* This is the sign of the exponent, not the end of the
1374                  number.  */
1375               continue;
1376             /* Always take decimal digits; parse_number handles radix
1377                error.  */
1378             else if (*p >= '0' && *p <= '9')
1379               continue;
1380             /* We will take letters only if hex is true, and only up
1381                to what the input radix would permit.  FSF was content
1382                to rely on parse_number to validate; but it leaks.  */
1383             else if (*p >= 'a' && *p <= 'z') 
1384               {
1385                 if (!hex || *p >= ('a' + local_radix - 10))
1386                   toktype = ERROR;
1387               }
1388             else if (*p >= 'A' && *p <= 'Z') 
1389               {
1390                 if (!hex || *p >= ('A' + local_radix - 10))
1391                   toktype = ERROR;
1392               }
1393             else break;
1394           }
1395         if (toktype != ERROR)
1396           toktype = parse_number (tokstart, p - tokstart, 
1397                                   got_dot | got_e, &yylval);
1398         if (toktype == ERROR)
1399           {
1400             char *err_copy = (char *) alloca (p - tokstart + 1);
1401
1402             memcpy (err_copy, tokstart, p - tokstart);
1403             err_copy[p - tokstart] = 0;
1404             error ("Invalid number \"%s\".", err_copy);
1405           }
1406         lexptr = p;
1407         return toktype;
1408       }
1409
1410     case '+':
1411     case '-':
1412     case '*':
1413     case '/':
1414     case '%':
1415     case '|':
1416     case '&':
1417     case '^':
1418     case '~':
1419     case '!':
1420 #if 0
1421     case '@':           /* Moved out below.  */
1422 #endif
1423     case '<':
1424     case '>':
1425     case '[':
1426     case ']':
1427     case '?':
1428     case ':':
1429     case '=':
1430     case '{':
1431     case '}':
1432     symbol:
1433       lexptr++;
1434       return tokchr;
1435
1436     case '@':
1437       if (strncmp(tokstart, "@selector", 9) == 0)
1438         {
1439           tokptr = strchr(tokstart, '(');
1440           if (tokptr == NULL)
1441             {
1442               error ("Missing '(' in @selector(...)");
1443             }
1444           tempbufindex = 0;
1445           tokptr++;     /* Skip the '('.  */
1446           do {
1447             /* Grow the static temp buffer if necessary, including
1448                allocating the first one on demand.  */
1449             if (tempbufindex + 1 >= tempbufsize)
1450               {
1451                 tempbuf = (char *) realloc (tempbuf, tempbufsize += 64);
1452               }
1453             tempbuf[tempbufindex++] = *tokptr++;
1454           } while ((*tokptr != ')') && (*tokptr != '\0'));
1455           if (*tokptr++ != ')')
1456             {
1457               error ("Missing ')' in @selector(...)");
1458             }
1459           tempbuf[tempbufindex] = '\0';
1460           yylval.sval.ptr = tempbuf;
1461           yylval.sval.length = tempbufindex;
1462           lexptr = tokptr;
1463           return SELECTOR;
1464         }
1465       if (tokstart[1] != '"')
1466         {
1467           lexptr++;
1468           return tokchr;
1469         }
1470       /* ObjC NextStep NSString constant: fall thru and parse like
1471          STRING.  */
1472       tokstart++;
1473
1474     case '"':
1475
1476       /* Build the gdb internal form of the input string in tempbuf,
1477          translating any standard C escape forms seen.  Note that the
1478          buffer is null byte terminated *only* for the convenience of
1479          debugging gdb itself and printing the buffer contents when
1480          the buffer contains no embedded nulls.  Gdb does not depend
1481          upon the buffer being null byte terminated, it uses the
1482          length string instead.  This allows gdb to handle C strings
1483          (as well as strings in other languages) with embedded null
1484          bytes.  */
1485
1486       tokptr = ++tokstart;
1487       tempbufindex = 0;
1488
1489       do {
1490         /* Grow the static temp buffer if necessary, including
1491            allocating the first one on demand.  */
1492         if (tempbufindex + 1 >= tempbufsize)
1493           {
1494             tempbuf = (char *) realloc (tempbuf, tempbufsize += 64);
1495           }
1496         switch (*tokptr)
1497           {
1498           case '\0':
1499           case '"':
1500             /* Do nothing, loop will terminate.  */
1501             break;
1502           case '\\':
1503             tokptr++;
1504             c = parse_escape (&tokptr);
1505             if (c == -1)
1506               {
1507                 continue;
1508               }
1509             tempbuf[tempbufindex++] = c;
1510             break;
1511           default:
1512             tempbuf[tempbufindex++] = *tokptr++;
1513             break;
1514           }
1515       } while ((*tokptr != '"') && (*tokptr != '\0'));
1516       if (*tokptr++ != '"')
1517         {
1518           error ("Unterminated string in expression.");
1519         }
1520       tempbuf[tempbufindex] = '\0';     /* See note above.  */
1521       yylval.sval.ptr = tempbuf;
1522       yylval.sval.length = tempbufindex;
1523       lexptr = tokptr;
1524       return (tokchr == '@' ? NSSTRING : STRING);
1525     }
1526
1527   if (!(tokchr == '_' || tokchr == '$' || 
1528        (tokchr >= 'a' && tokchr <= 'z') || (tokchr >= 'A' && tokchr <= 'Z')))
1529     /* We must have come across a bad character (e.g. ';').  */
1530     error ("Invalid character '%c' in expression.", c);
1531
1532   /* It's a name.  See how long it is.  */
1533   namelen = 0;
1534   for (c = tokstart[namelen];
1535        (c == '_' || c == '$' || (c >= '0' && c <= '9')
1536         || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '<');)
1537     {
1538        if (c == '<')
1539          {
1540            int i = namelen;
1541            while (tokstart[++i] && tokstart[i] != '>');
1542            if (tokstart[i] == '>')
1543              namelen = i;
1544           }
1545        c = tokstart[++namelen];
1546      }
1547
1548   /* The token "if" terminates the expression and is NOT 
1549      removed from the input stream.  */
1550   if (namelen == 2 && tokstart[0] == 'i' && tokstart[1] == 'f')
1551     {
1552       return 0;
1553     }
1554
1555   lexptr += namelen;
1556
1557   tryname:
1558
1559   /* Catch specific keywords.  Should be done with a data structure.  */
1560   switch (namelen)
1561     {
1562     case 8:
1563       if (strncmp (tokstart, "unsigned", 8) == 0)
1564         return UNSIGNED;
1565       if (parse_language->la_language == language_cplus
1566           && strncmp (tokstart, "template", 8) == 0)
1567         return TEMPLATE;
1568       if (strncmp (tokstart, "volatile", 8) == 0)
1569         return VOLATILE_KEYWORD;
1570       break;
1571     case 6:
1572       if (strncmp (tokstart, "struct", 6) == 0)
1573         return STRUCT;
1574       if (strncmp (tokstart, "signed", 6) == 0)
1575         return SIGNED_KEYWORD;
1576       if (strncmp (tokstart, "sizeof", 6) == 0)
1577         return SIZEOF;
1578       if (strncmp (tokstart, "double", 6) == 0) 
1579         return DOUBLE_KEYWORD;
1580       break;
1581     case 5:
1582       if ((parse_language->la_language == language_cplus)
1583           && strncmp (tokstart, "class", 5) == 0)
1584         return CLASS;
1585       if (strncmp (tokstart, "union", 5) == 0)
1586         return UNION;
1587       if (strncmp (tokstart, "short", 5) == 0)
1588         return SHORT;
1589       if (strncmp (tokstart, "const", 5) == 0)
1590         return CONST_KEYWORD;
1591       break;
1592     case 4:
1593       if (strncmp (tokstart, "enum", 4) == 0)
1594         return ENUM;
1595       if (strncmp (tokstart, "long", 4) == 0)
1596         return LONG;
1597       break;
1598     case 3:
1599       if (strncmp (tokstart, "int", 3) == 0)
1600         return INT_KEYWORD;
1601       break;
1602     default:
1603       break;
1604     }
1605
1606   yylval.sval.ptr = tokstart;
1607   yylval.sval.length = namelen;
1608
1609   if (*tokstart == '$')
1610     {
1611       write_dollar_variable (yylval.sval);
1612       return VARIABLE;
1613     }
1614
1615   /* Use token-type BLOCKNAME for symbols that happen to be defined as
1616      functions or symtabs.  If this is not so, then ...
1617      Use token-type TYPENAME for symbols that happen to be defined
1618      currently as names of types; NAME for other symbols.
1619      The caller is not constrained to care about the distinction.  */
1620   {
1621     char *tmp = copy_name (yylval.sval);
1622     struct symbol *sym;
1623     int is_a_field_of_this = 0, *need_this;
1624     int hextype;
1625
1626     if (parse_language->la_language == language_cplus ||
1627         parse_language->la_language == language_objc)
1628       need_this = &is_a_field_of_this;
1629     else
1630       need_this = (int *) NULL;
1631
1632     sym = lookup_symbol (tmp, expression_context_block,
1633                          VAR_DOMAIN,
1634                          need_this);
1635     /* Call lookup_symtab, not lookup_partial_symtab, in case there
1636        are no psymtabs (coff, xcoff, or some future change to blow
1637        away the psymtabs once symbols are read).  */
1638     if ((sym && SYMBOL_CLASS (sym) == LOC_BLOCK) ||
1639         lookup_symtab (tmp))
1640       {
1641         yylval.ssym.sym = sym;
1642         yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1643         return BLOCKNAME;
1644       }
1645     if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
1646         {
1647 #if 1
1648           /* Despite the following flaw, we need to keep this code
1649              enabled.  Because we can get called from
1650              check_stub_method, if we don't handle nested types then
1651              it screws many operations in any program which uses
1652              nested types.  */
1653           /* In "A::x", if x is a member function of A and there
1654              happens to be a type (nested or not, since the stabs
1655              don't make that distinction) named x, then this code
1656              incorrectly thinks we are dealing with nested types
1657              rather than a member function.  */
1658
1659           char *p;
1660           char *namestart;
1661           struct symbol *best_sym;
1662
1663           /* Look ahead to detect nested types.  This probably should
1664              be done in the grammar, but trying seemed to introduce a
1665              lot of shift/reduce and reduce/reduce conflicts.  It's
1666              possible that it could be done, though.  Or perhaps a
1667              non-grammar, but less ad hoc, approach would work well.  */
1668
1669           /* Since we do not currently have any way of distinguishing
1670              a nested type from a non-nested one (the stabs don't tell
1671              us whether a type is nested), we just ignore the
1672              containing type.  */
1673
1674           p = lexptr;
1675           best_sym = sym;
1676           while (1)
1677             {
1678               /* Skip whitespace.  */
1679               while (*p == ' ' || *p == '\t' || *p == '\n')
1680                 ++p;
1681               if (*p == ':' && p[1] == ':')
1682                 {
1683                   /* Skip the `::'.  */
1684                   p += 2;
1685                   /* Skip whitespace.  */
1686                   while (*p == ' ' || *p == '\t' || *p == '\n')
1687                     ++p;
1688                   namestart = p;
1689                   while (*p == '_' || *p == '$' || (*p >= '0' && *p <= '9')
1690                          || (*p >= 'a' && *p <= 'z')
1691                          || (*p >= 'A' && *p <= 'Z'))
1692                     ++p;
1693                   if (p != namestart)
1694                     {
1695                       struct symbol *cur_sym;
1696                       /* As big as the whole rest of the expression,
1697                          which is at least big enough.  */
1698                       char *ncopy = alloca (strlen (tmp) +
1699                                             strlen (namestart) + 3);
1700                       char *tmp1;
1701
1702                       tmp1 = ncopy;
1703                       memcpy (tmp1, tmp, strlen (tmp));
1704                       tmp1 += strlen (tmp);
1705                       memcpy (tmp1, "::", 2);
1706                       tmp1 += 2;
1707                       memcpy (tmp1, namestart, p - namestart);
1708                       tmp1[p - namestart] = '\0';
1709                       cur_sym = lookup_symbol (ncopy, 
1710                                                expression_context_block,
1711                                                VAR_DOMAIN, (int *) NULL);
1712                       if (cur_sym)
1713                         {
1714                           if (SYMBOL_CLASS (cur_sym) == LOC_TYPEDEF)
1715                             {
1716                               best_sym = cur_sym;
1717                               lexptr = p;
1718                             }
1719                           else
1720                             break;
1721                         }
1722                       else
1723                         break;
1724                     }
1725                   else
1726                     break;
1727                 }
1728               else
1729                 break;
1730             }
1731
1732           yylval.tsym.type = SYMBOL_TYPE (best_sym);
1733 #else /* not 0 */
1734           yylval.tsym.type = SYMBOL_TYPE (sym);
1735 #endif /* not 0 */
1736           return TYPENAME;
1737         }
1738     yylval.tsym.type
1739       = language_lookup_primitive_type_by_name (parse_language,
1740                                                 parse_gdbarch, tmp);
1741     if (yylval.tsym.type != NULL)
1742       return TYPENAME;
1743
1744     /* See if it's an ObjC classname.  */
1745     if (!sym)
1746       {
1747         CORE_ADDR Class = lookup_objc_class(tmp);
1748         if (Class)
1749           {
1750             yylval.class.class = Class;
1751             if ((sym = lookup_struct_typedef (tmp, 
1752                                               expression_context_block, 
1753                                               1)))
1754               yylval.class.type = SYMBOL_TYPE (sym);
1755             return CLASSNAME;
1756           }
1757       }
1758
1759     /* Input names that aren't symbols but ARE valid hex numbers,
1760        when the input radix permits them, can be names or numbers
1761        depending on the parse.  Note we support radixes > 16 here.  */
1762     if (!sym && 
1763         ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10) ||
1764          (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10)))
1765       {
1766         YYSTYPE newlval;        /* Its value is ignored.  */
1767         hextype = parse_number (tokstart, namelen, 0, &newlval);
1768         if (hextype == INT)
1769           {
1770             yylval.ssym.sym = sym;
1771             yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1772             return NAME_OR_INT;
1773           }
1774       }
1775
1776     /* Any other kind of symbol.  */
1777     yylval.ssym.sym = sym;
1778     yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1779     return NAME;
1780   }
1781 }
1782
1783 void
1784 yyerror (msg)
1785      char *msg;
1786 {
1787   if (*lexptr == '\0')
1788     error("A %s near end of expression.",  (msg ? msg : "error"));
1789   else
1790     error ("A %s in expression, near `%s'.", (msg ? msg : "error"), 
1791            lexptr);
1792 }