xref: /dragonfly/contrib/gdb-7/gdb/c-exp.y (revision dcd37f7d)
1 /* YACC parser for C expressions, for GDB.
2    Copyright (C) 1986, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
3    1998, 1999, 2000, 2003, 2004, 2006, 2007, 2008, 2009
4    Free Software Foundation, Inc.
5 
6    This file is part of GDB.
7 
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License as published by
10    the Free Software Foundation; either version 3 of the License, or
11    (at your option) any later version.
12 
13    This program is distributed in the hope that it will be useful,
14    but WITHOUT ANY WARRANTY; without even the implied warranty of
15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16    GNU General Public License for more details.
17 
18    You should have received a copy of the GNU General Public License
19    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
20 
21 /* Parse a C expression from text in a string,
22    and return the result as a  struct expression  pointer.
23    That structure contains arithmetic operations in reverse polish,
24    with constants represented by operations that are followed by special data.
25    See expression.h for the details of the format.
26    What is important here is that it can be built up sequentially
27    during the process of parsing; the lower levels of the tree always
28    come first in the result.
29 
30    Note that malloc's and realloc's in this file are transformed to
31    xmalloc and xrealloc respectively by the same sed command in the
32    makefile that remaps any other malloc/realloc inserted by the parser
33    generator.  Doing this with #defines and trying to control the interaction
34    with include files (<malloc.h> and <stdlib.h> for example) just became
35    too messy, particularly when such includes can be inserted at random
36    times by the parser generator.  */
37 
38 %{
39 
40 #include "defs.h"
41 #include "gdb_string.h"
42 #include <ctype.h>
43 #include "expression.h"
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 "charset.h"
52 #include "block.h"
53 #include "cp-support.h"
54 #include "dfp.h"
55 #include "gdb_assert.h"
56 #include "macroscope.h"
57 
58 #define parse_type builtin_type (parse_gdbarch)
59 
60 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
61    as well as gratuitiously global symbol names, so we can have multiple
62    yacc generated parsers in gdb.  Note that these are only the variables
63    produced by yacc.  If other parser generators (bison, byacc, etc) produce
64    additional global names that conflict at link time, then those parser
65    generators need to be fixed instead of adding those names to this list. */
66 
67 #define	yymaxdepth c_maxdepth
68 #define	yyparse	c_parse_internal
69 #define	yylex	c_lex
70 #define	yyerror	c_error
71 #define	yylval	c_lval
72 #define	yychar	c_char
73 #define	yydebug	c_debug
74 #define	yypact	c_pact
75 #define	yyr1	c_r1
76 #define	yyr2	c_r2
77 #define	yydef	c_def
78 #define	yychk	c_chk
79 #define	yypgo	c_pgo
80 #define	yyact	c_act
81 #define	yyexca	c_exca
82 #define yyerrflag c_errflag
83 #define yynerrs	c_nerrs
84 #define	yyps	c_ps
85 #define	yypv	c_pv
86 #define	yys	c_s
87 #define	yy_yys	c_yys
88 #define	yystate	c_state
89 #define	yytmp	c_tmp
90 #define	yyv	c_v
91 #define	yy_yyv	c_yyv
92 #define	yyval	c_val
93 #define	yylloc	c_lloc
94 #define yyreds	c_reds		/* With YYDEBUG defined */
95 #define yytoks	c_toks		/* With YYDEBUG defined */
96 #define yyname	c_name		/* With YYDEBUG defined */
97 #define yyrule	c_rule		/* With YYDEBUG defined */
98 #define yylhs	c_yylhs
99 #define yylen	c_yylen
100 #define yydefred c_yydefred
101 #define yydgoto	c_yydgoto
102 #define yysindex c_yysindex
103 #define yyrindex c_yyrindex
104 #define yygindex c_yygindex
105 #define yytable	 c_yytable
106 #define yycheck	 c_yycheck
107 
108 #ifndef YYDEBUG
109 #define	YYDEBUG 1		/* Default to yydebug support */
110 #endif
111 
112 #define YYFPRINTF parser_fprintf
113 
114 int yyparse (void);
115 
116 static int yylex (void);
117 
118 void yyerror (char *);
119 
120 %}
121 
122 /* Although the yacc "value" of an expression is not used,
123    since the result is stored in the structure being created,
124    other node types do have values.  */
125 
126 %union
127   {
128     LONGEST lval;
129     struct {
130       LONGEST val;
131       struct type *type;
132     } typed_val_int;
133     struct {
134       DOUBLEST dval;
135       struct type *type;
136     } typed_val_float;
137     struct {
138       gdb_byte val[16];
139       struct type *type;
140     } typed_val_decfloat;
141     struct symbol *sym;
142     struct type *tval;
143     struct stoken sval;
144     struct typed_stoken tsval;
145     struct ttype tsym;
146     struct symtoken ssym;
147     int voidval;
148     struct block *bval;
149     enum exp_opcode opcode;
150     struct internalvar *ivar;
151 
152     struct stoken_vector svec;
153     struct type **tvec;
154     int *ivec;
155   }
156 
157 %{
158 /* YYSTYPE gets defined by %union */
159 static int parse_number (char *, int, int, YYSTYPE *);
160 %}
161 
162 %type <voidval> exp exp1 type_exp start variable qualified_name lcurly
163 %type <lval> rcurly
164 %type <tval> type typebase qualified_type
165 %type <tvec> nonempty_typelist
166 /* %type <bval> block */
167 
168 /* Fancy type parsing.  */
169 %type <voidval> func_mod direct_abs_decl abs_decl
170 %type <tval> ptype
171 %type <lval> array_mod
172 
173 %token <typed_val_int> INT
174 %token <typed_val_float> FLOAT
175 %token <typed_val_decfloat> DECFLOAT
176 
177 /* Both NAME and TYPENAME tokens represent symbols in the input,
178    and both convey their data as strings.
179    But a TYPENAME is a string that happens to be defined as a typedef
180    or builtin type name (such as int or char)
181    and a NAME is any other symbol.
182    Contexts where this distinction is not important can use the
183    nonterminal "name", which matches either NAME or TYPENAME.  */
184 
185 %token <tsval> STRING
186 %token <tsval> CHAR
187 %token <ssym> NAME /* BLOCKNAME defined below to give it higher precedence. */
188 %token <voidval> COMPLETE
189 %token <tsym> TYPENAME
190 %type <sval> name
191 %type <svec> string_exp
192 %type <ssym> name_not_typename
193 %type <tsym> typename
194 
195 /* A NAME_OR_INT is a symbol which is not known in the symbol table,
196    but which would parse as a valid number in the current input radix.
197    E.g. "c" when input_radix==16.  Depending on the parse, it will be
198    turned into a name or into a number.  */
199 
200 %token <ssym> NAME_OR_INT
201 
202 %token STRUCT CLASS UNION ENUM SIZEOF UNSIGNED COLONCOLON
203 %token TEMPLATE
204 %token ERROR
205 
206 /* Special type cases, put in to allow the parser to distinguish different
207    legal basetypes.  */
208 %token SIGNED_KEYWORD LONG SHORT INT_KEYWORD CONST_KEYWORD VOLATILE_KEYWORD DOUBLE_KEYWORD
209 
210 %token <voidval> VARIABLE
211 
212 %token <opcode> ASSIGN_MODIFY
213 
214 /* C++ */
215 %token TRUEKEYWORD
216 %token FALSEKEYWORD
217 
218 
219 %left ','
220 %left ABOVE_COMMA
221 %right '=' ASSIGN_MODIFY
222 %right '?'
223 %left OROR
224 %left ANDAND
225 %left '|'
226 %left '^'
227 %left '&'
228 %left EQUAL NOTEQUAL
229 %left '<' '>' LEQ GEQ
230 %left LSH RSH
231 %left '@'
232 %left '+' '-'
233 %left '*' '/' '%'
234 %right UNARY INCREMENT DECREMENT
235 %right ARROW ARROW_STAR '.' DOT_STAR '[' '('
236 %token <ssym> BLOCKNAME
237 %token <bval> FILENAME
238 %type <bval> block
239 %left COLONCOLON
240 
241 
242 %%
243 
244 start   :	exp1
245 	|	type_exp
246 	;
247 
248 type_exp:	type
249 			{ write_exp_elt_opcode(OP_TYPE);
250 			  write_exp_elt_type($1);
251 			  write_exp_elt_opcode(OP_TYPE);}
252 	;
253 
254 /* Expressions, including the comma operator.  */
255 exp1	:	exp
256 	|	exp1 ',' exp
257 			{ write_exp_elt_opcode (BINOP_COMMA); }
258 	;
259 
260 /* Expressions, not including the comma operator.  */
261 exp	:	'*' exp    %prec UNARY
262 			{ write_exp_elt_opcode (UNOP_IND); }
263 	;
264 
265 exp	:	'&' exp    %prec UNARY
266 			{ write_exp_elt_opcode (UNOP_ADDR); }
267 	;
268 
269 exp	:	'-' exp    %prec UNARY
270 			{ write_exp_elt_opcode (UNOP_NEG); }
271 	;
272 
273 exp	:	'+' exp    %prec UNARY
274 			{ write_exp_elt_opcode (UNOP_PLUS); }
275 	;
276 
277 exp	:	'!' exp    %prec UNARY
278 			{ write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
279 	;
280 
281 exp	:	'~' exp    %prec UNARY
282 			{ write_exp_elt_opcode (UNOP_COMPLEMENT); }
283 	;
284 
285 exp	:	INCREMENT exp    %prec UNARY
286 			{ write_exp_elt_opcode (UNOP_PREINCREMENT); }
287 	;
288 
289 exp	:	DECREMENT exp    %prec UNARY
290 			{ write_exp_elt_opcode (UNOP_PREDECREMENT); }
291 	;
292 
293 exp	:	exp INCREMENT    %prec UNARY
294 			{ write_exp_elt_opcode (UNOP_POSTINCREMENT); }
295 	;
296 
297 exp	:	exp DECREMENT    %prec UNARY
298 			{ write_exp_elt_opcode (UNOP_POSTDECREMENT); }
299 	;
300 
301 exp	:	SIZEOF exp       %prec UNARY
302 			{ write_exp_elt_opcode (UNOP_SIZEOF); }
303 	;
304 
305 exp	:	exp ARROW name
306 			{ write_exp_elt_opcode (STRUCTOP_PTR);
307 			  write_exp_string ($3);
308 			  write_exp_elt_opcode (STRUCTOP_PTR); }
309 	;
310 
311 exp	:	exp ARROW name COMPLETE
312 			{ mark_struct_expression ();
313 			  write_exp_elt_opcode (STRUCTOP_PTR);
314 			  write_exp_string ($3);
315 			  write_exp_elt_opcode (STRUCTOP_PTR); }
316 	;
317 
318 exp	:	exp ARROW COMPLETE
319 			{ struct stoken s;
320 			  mark_struct_expression ();
321 			  write_exp_elt_opcode (STRUCTOP_PTR);
322 			  s.ptr = "";
323 			  s.length = 0;
324 			  write_exp_string (s);
325 			  write_exp_elt_opcode (STRUCTOP_PTR); }
326 	;
327 
328 exp	:	exp ARROW qualified_name
329 			{ /* exp->type::name becomes exp->*(&type::name) */
330 			  /* Note: this doesn't work if name is a
331 			     static member!  FIXME */
332 			  write_exp_elt_opcode (UNOP_ADDR);
333 			  write_exp_elt_opcode (STRUCTOP_MPTR); }
334 	;
335 
336 exp	:	exp ARROW_STAR exp
337 			{ write_exp_elt_opcode (STRUCTOP_MPTR); }
338 	;
339 
340 exp	:	exp '.' name
341 			{ write_exp_elt_opcode (STRUCTOP_STRUCT);
342 			  write_exp_string ($3);
343 			  write_exp_elt_opcode (STRUCTOP_STRUCT); }
344 	;
345 
346 exp	:	exp '.' name COMPLETE
347 			{ mark_struct_expression ();
348 			  write_exp_elt_opcode (STRUCTOP_STRUCT);
349 			  write_exp_string ($3);
350 			  write_exp_elt_opcode (STRUCTOP_STRUCT); }
351 	;
352 
353 exp	:	exp '.' COMPLETE
354 			{ struct stoken s;
355 			  mark_struct_expression ();
356 			  write_exp_elt_opcode (STRUCTOP_STRUCT);
357 			  s.ptr = "";
358 			  s.length = 0;
359 			  write_exp_string (s);
360 			  write_exp_elt_opcode (STRUCTOP_STRUCT); }
361 	;
362 
363 exp	:	exp '.' qualified_name
364 			{ /* exp.type::name becomes exp.*(&type::name) */
365 			  /* Note: this doesn't work if name is a
366 			     static member!  FIXME */
367 			  write_exp_elt_opcode (UNOP_ADDR);
368 			  write_exp_elt_opcode (STRUCTOP_MEMBER); }
369 	;
370 
371 exp	:	exp DOT_STAR exp
372 			{ write_exp_elt_opcode (STRUCTOP_MEMBER); }
373 	;
374 
375 exp	:	exp '[' exp1 ']'
376 			{ write_exp_elt_opcode (BINOP_SUBSCRIPT); }
377 	;
378 
379 exp	:	exp '('
380 			/* This is to save the value of arglist_len
381 			   being accumulated by an outer function call.  */
382 			{ start_arglist (); }
383 		arglist ')'	%prec ARROW
384 			{ write_exp_elt_opcode (OP_FUNCALL);
385 			  write_exp_elt_longcst ((LONGEST) end_arglist ());
386 			  write_exp_elt_opcode (OP_FUNCALL); }
387 	;
388 
389 lcurly	:	'{'
390 			{ start_arglist (); }
391 	;
392 
393 arglist	:
394 	;
395 
396 arglist	:	exp
397 			{ arglist_len = 1; }
398 	;
399 
400 arglist	:	arglist ',' exp   %prec ABOVE_COMMA
401 			{ arglist_len++; }
402 	;
403 
404 rcurly	:	'}'
405 			{ $$ = end_arglist () - 1; }
406 	;
407 exp	:	lcurly arglist rcurly	%prec ARROW
408 			{ write_exp_elt_opcode (OP_ARRAY);
409 			  write_exp_elt_longcst ((LONGEST) 0);
410 			  write_exp_elt_longcst ((LONGEST) $3);
411 			  write_exp_elt_opcode (OP_ARRAY); }
412 	;
413 
414 exp	:	lcurly type rcurly exp  %prec UNARY
415 			{ write_exp_elt_opcode (UNOP_MEMVAL);
416 			  write_exp_elt_type ($2);
417 			  write_exp_elt_opcode (UNOP_MEMVAL); }
418 	;
419 
420 exp	:	'(' type ')' exp  %prec UNARY
421 			{ write_exp_elt_opcode (UNOP_CAST);
422 			  write_exp_elt_type ($2);
423 			  write_exp_elt_opcode (UNOP_CAST); }
424 	;
425 
426 exp	:	'(' exp1 ')'
427 			{ }
428 	;
429 
430 /* Binary operators in order of decreasing precedence.  */
431 
432 exp	:	exp '@' exp
433 			{ write_exp_elt_opcode (BINOP_REPEAT); }
434 	;
435 
436 exp	:	exp '*' exp
437 			{ write_exp_elt_opcode (BINOP_MUL); }
438 	;
439 
440 exp	:	exp '/' exp
441 			{ write_exp_elt_opcode (BINOP_DIV); }
442 	;
443 
444 exp	:	exp '%' exp
445 			{ write_exp_elt_opcode (BINOP_REM); }
446 	;
447 
448 exp	:	exp '+' exp
449 			{ write_exp_elt_opcode (BINOP_ADD); }
450 	;
451 
452 exp	:	exp '-' exp
453 			{ write_exp_elt_opcode (BINOP_SUB); }
454 	;
455 
456 exp	:	exp LSH exp
457 			{ write_exp_elt_opcode (BINOP_LSH); }
458 	;
459 
460 exp	:	exp RSH exp
461 			{ write_exp_elt_opcode (BINOP_RSH); }
462 	;
463 
464 exp	:	exp EQUAL exp
465 			{ write_exp_elt_opcode (BINOP_EQUAL); }
466 	;
467 
468 exp	:	exp NOTEQUAL exp
469 			{ write_exp_elt_opcode (BINOP_NOTEQUAL); }
470 	;
471 
472 exp	:	exp LEQ exp
473 			{ write_exp_elt_opcode (BINOP_LEQ); }
474 	;
475 
476 exp	:	exp GEQ exp
477 			{ write_exp_elt_opcode (BINOP_GEQ); }
478 	;
479 
480 exp	:	exp '<' exp
481 			{ write_exp_elt_opcode (BINOP_LESS); }
482 	;
483 
484 exp	:	exp '>' exp
485 			{ write_exp_elt_opcode (BINOP_GTR); }
486 	;
487 
488 exp	:	exp '&' exp
489 			{ write_exp_elt_opcode (BINOP_BITWISE_AND); }
490 	;
491 
492 exp	:	exp '^' exp
493 			{ write_exp_elt_opcode (BINOP_BITWISE_XOR); }
494 	;
495 
496 exp	:	exp '|' exp
497 			{ write_exp_elt_opcode (BINOP_BITWISE_IOR); }
498 	;
499 
500 exp	:	exp ANDAND exp
501 			{ write_exp_elt_opcode (BINOP_LOGICAL_AND); }
502 	;
503 
504 exp	:	exp OROR exp
505 			{ write_exp_elt_opcode (BINOP_LOGICAL_OR); }
506 	;
507 
508 exp	:	exp '?' exp ':' exp	%prec '?'
509 			{ write_exp_elt_opcode (TERNOP_COND); }
510 	;
511 
512 exp	:	exp '=' exp
513 			{ write_exp_elt_opcode (BINOP_ASSIGN); }
514 	;
515 
516 exp	:	exp ASSIGN_MODIFY exp
517 			{ write_exp_elt_opcode (BINOP_ASSIGN_MODIFY);
518 			  write_exp_elt_opcode ($2);
519 			  write_exp_elt_opcode (BINOP_ASSIGN_MODIFY); }
520 	;
521 
522 exp	:	INT
523 			{ write_exp_elt_opcode (OP_LONG);
524 			  write_exp_elt_type ($1.type);
525 			  write_exp_elt_longcst ((LONGEST)($1.val));
526 			  write_exp_elt_opcode (OP_LONG); }
527 	;
528 
529 exp	:	CHAR
530 			{
531 			  struct stoken_vector vec;
532 			  vec.len = 1;
533 			  vec.tokens = &$1;
534 			  write_exp_string_vector ($1.type, &vec);
535 			}
536 	;
537 
538 exp	:	NAME_OR_INT
539 			{ YYSTYPE val;
540 			  parse_number ($1.stoken.ptr, $1.stoken.length, 0, &val);
541 			  write_exp_elt_opcode (OP_LONG);
542 			  write_exp_elt_type (val.typed_val_int.type);
543 			  write_exp_elt_longcst ((LONGEST)val.typed_val_int.val);
544 			  write_exp_elt_opcode (OP_LONG);
545 			}
546 	;
547 
548 
549 exp	:	FLOAT
550 			{ write_exp_elt_opcode (OP_DOUBLE);
551 			  write_exp_elt_type ($1.type);
552 			  write_exp_elt_dblcst ($1.dval);
553 			  write_exp_elt_opcode (OP_DOUBLE); }
554 	;
555 
556 exp	:	DECFLOAT
557 			{ write_exp_elt_opcode (OP_DECFLOAT);
558 			  write_exp_elt_type ($1.type);
559 			  write_exp_elt_decfloatcst ($1.val);
560 			  write_exp_elt_opcode (OP_DECFLOAT); }
561 	;
562 
563 exp	:	variable
564 	;
565 
566 exp	:	VARIABLE
567 			/* Already written by write_dollar_variable. */
568 	;
569 
570 exp	:	SIZEOF '(' type ')'	%prec UNARY
571 			{ write_exp_elt_opcode (OP_LONG);
572 			  write_exp_elt_type (parse_type->builtin_int);
573 			  CHECK_TYPEDEF ($3);
574 			  write_exp_elt_longcst ((LONGEST) TYPE_LENGTH ($3));
575 			  write_exp_elt_opcode (OP_LONG); }
576 	;
577 
578 string_exp:
579 		STRING
580 			{
581 			  /* We copy the string here, and not in the
582 			     lexer, to guarantee that we do not leak a
583 			     string.  Note that we follow the
584 			     NUL-termination convention of the
585 			     lexer.  */
586 			  struct typed_stoken *vec = XNEW (struct typed_stoken);
587 			  $$.len = 1;
588 			  $$.tokens = vec;
589 
590 			  vec->type = $1.type;
591 			  vec->length = $1.length;
592 			  vec->ptr = malloc ($1.length + 1);
593 			  memcpy (vec->ptr, $1.ptr, $1.length + 1);
594 			}
595 
596 	|	string_exp STRING
597 			{
598 			  /* Note that we NUL-terminate here, but just
599 			     for convenience.  */
600 			  char *p;
601 			  ++$$.len;
602 			  $$.tokens = realloc ($$.tokens,
603 					       $$.len * sizeof (struct typed_stoken));
604 
605 			  p = malloc ($2.length + 1);
606 			  memcpy (p, $2.ptr, $2.length + 1);
607 
608 			  $$.tokens[$$.len - 1].type = $2.type;
609 			  $$.tokens[$$.len - 1].length = $2.length;
610 			  $$.tokens[$$.len - 1].ptr = p;
611 			}
612 		;
613 
614 exp	:	string_exp
615 			{
616 			  int i;
617 			  enum c_string_type type = C_STRING;
618 
619 			  for (i = 0; i < $1.len; ++i)
620 			    {
621 			      switch ($1.tokens[i].type)
622 				{
623 				case C_STRING:
624 				  break;
625 				case C_WIDE_STRING:
626 				case C_STRING_16:
627 				case C_STRING_32:
628 				  if (type != C_STRING
629 				      && type != $1.tokens[i].type)
630 				    error ("Undefined string concatenation.");
631 				  type = $1.tokens[i].type;
632 				  break;
633 				default:
634 				  /* internal error */
635 				  internal_error (__FILE__, __LINE__,
636 						  "unrecognized type in string concatenation");
637 				}
638 			    }
639 
640 			  write_exp_string_vector (type, &$1);
641 			  for (i = 0; i < $1.len; ++i)
642 			    free ($1.tokens[i].ptr);
643 			  free ($1.tokens);
644 			}
645 	;
646 
647 /* C++.  */
648 exp     :       TRUEKEYWORD
649                         { write_exp_elt_opcode (OP_LONG);
650                           write_exp_elt_type (parse_type->builtin_bool);
651                           write_exp_elt_longcst ((LONGEST) 1);
652                           write_exp_elt_opcode (OP_LONG); }
653 	;
654 
655 exp     :       FALSEKEYWORD
656                         { write_exp_elt_opcode (OP_LONG);
657                           write_exp_elt_type (parse_type->builtin_bool);
658                           write_exp_elt_longcst ((LONGEST) 0);
659                           write_exp_elt_opcode (OP_LONG); }
660 	;
661 
662 /* end of C++.  */
663 
664 block	:	BLOCKNAME
665 			{
666 			  if ($1.sym)
667 			    $$ = SYMBOL_BLOCK_VALUE ($1.sym);
668 			  else
669 			    error ("No file or function \"%s\".",
670 				   copy_name ($1.stoken));
671 			}
672 	|	FILENAME
673 			{
674 			  $$ = $1;
675 			}
676 	;
677 
678 block	:	block COLONCOLON name
679 			{ struct symbol *tem
680 			    = lookup_symbol (copy_name ($3), $1,
681 					     VAR_DOMAIN, (int *) NULL);
682 			  if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
683 			    error ("No function \"%s\" in specified context.",
684 				   copy_name ($3));
685 			  $$ = SYMBOL_BLOCK_VALUE (tem); }
686 	;
687 
688 variable:	block COLONCOLON name
689 			{ struct symbol *sym;
690 			  sym = lookup_symbol (copy_name ($3), $1,
691 					       VAR_DOMAIN, (int *) NULL);
692 			  if (sym == 0)
693 			    error ("No symbol \"%s\" in specified context.",
694 				   copy_name ($3));
695 
696 			  write_exp_elt_opcode (OP_VAR_VALUE);
697 			  /* block_found is set by lookup_symbol.  */
698 			  write_exp_elt_block (block_found);
699 			  write_exp_elt_sym (sym);
700 			  write_exp_elt_opcode (OP_VAR_VALUE); }
701 	;
702 
703 qualified_name:	typebase COLONCOLON name
704 			{
705 			  struct type *type = $1;
706 			  if (TYPE_CODE (type) != TYPE_CODE_STRUCT
707 			      && TYPE_CODE (type) != TYPE_CODE_UNION
708 			      && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
709 			    error ("`%s' is not defined as an aggregate type.",
710 				   TYPE_NAME (type));
711 
712 			  write_exp_elt_opcode (OP_SCOPE);
713 			  write_exp_elt_type (type);
714 			  write_exp_string ($3);
715 			  write_exp_elt_opcode (OP_SCOPE);
716 			}
717 	|	typebase COLONCOLON '~' name
718 			{
719 			  struct type *type = $1;
720 			  struct stoken tmp_token;
721 			  if (TYPE_CODE (type) != TYPE_CODE_STRUCT
722 			      && TYPE_CODE (type) != TYPE_CODE_UNION
723 			      && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
724 			    error ("`%s' is not defined as an aggregate type.",
725 				   TYPE_NAME (type));
726 
727 			  tmp_token.ptr = (char*) alloca ($4.length + 2);
728 			  tmp_token.length = $4.length + 1;
729 			  tmp_token.ptr[0] = '~';
730 			  memcpy (tmp_token.ptr+1, $4.ptr, $4.length);
731 			  tmp_token.ptr[tmp_token.length] = 0;
732 
733 			  /* Check for valid destructor name.  */
734 			  destructor_name_p (tmp_token.ptr, type);
735 			  write_exp_elt_opcode (OP_SCOPE);
736 			  write_exp_elt_type (type);
737 			  write_exp_string (tmp_token);
738 			  write_exp_elt_opcode (OP_SCOPE);
739 			}
740 	;
741 
742 variable:	qualified_name
743 	|	COLONCOLON name
744 			{
745 			  char *name = copy_name ($2);
746 			  struct symbol *sym;
747 			  struct minimal_symbol *msymbol;
748 
749 			  sym =
750 			    lookup_symbol (name, (const struct block *) NULL,
751 					   VAR_DOMAIN, (int *) NULL);
752 			  if (sym)
753 			    {
754 			      write_exp_elt_opcode (OP_VAR_VALUE);
755 			      write_exp_elt_block (NULL);
756 			      write_exp_elt_sym (sym);
757 			      write_exp_elt_opcode (OP_VAR_VALUE);
758 			      break;
759 			    }
760 
761 			  msymbol = lookup_minimal_symbol (name, NULL, NULL);
762 			  if (msymbol != NULL)
763 			    write_exp_msymbol (msymbol);
764 			  else if (!have_full_symbols () && !have_partial_symbols ())
765 			    error ("No symbol table is loaded.  Use the \"file\" command.");
766 			  else
767 			    error ("No symbol \"%s\" in current context.", name);
768 			}
769 	;
770 
771 variable:	name_not_typename
772 			{ struct symbol *sym = $1.sym;
773 
774 			  if (sym)
775 			    {
776 			      if (symbol_read_needs_frame (sym))
777 				{
778 				  if (innermost_block == 0 ||
779 				      contained_in (block_found,
780 						    innermost_block))
781 				    innermost_block = block_found;
782 				}
783 
784 			      write_exp_elt_opcode (OP_VAR_VALUE);
785 			      /* We want to use the selected frame, not
786 				 another more inner frame which happens to
787 				 be in the same block.  */
788 			      write_exp_elt_block (NULL);
789 			      write_exp_elt_sym (sym);
790 			      write_exp_elt_opcode (OP_VAR_VALUE);
791 			    }
792 			  else if ($1.is_a_field_of_this)
793 			    {
794 			      /* C++: it hangs off of `this'.  Must
795 			         not inadvertently convert from a method call
796 				 to data ref.  */
797 			      if (innermost_block == 0 ||
798 				  contained_in (block_found, innermost_block))
799 				innermost_block = block_found;
800 			      write_exp_elt_opcode (OP_THIS);
801 			      write_exp_elt_opcode (OP_THIS);
802 			      write_exp_elt_opcode (STRUCTOP_PTR);
803 			      write_exp_string ($1.stoken);
804 			      write_exp_elt_opcode (STRUCTOP_PTR);
805 			    }
806 			  else
807 			    {
808 			      struct minimal_symbol *msymbol;
809 			      char *arg = copy_name ($1.stoken);
810 
811 			      msymbol =
812 				lookup_minimal_symbol (arg, NULL, NULL);
813 			      if (msymbol != NULL)
814 				write_exp_msymbol (msymbol);
815 			      else if (!have_full_symbols () && !have_partial_symbols ())
816 				error ("No symbol table is loaded.  Use the \"file\" command.");
817 			      else
818 				error ("No symbol \"%s\" in current context.",
819 				       copy_name ($1.stoken));
820 			    }
821 			}
822 	;
823 
824 space_identifier : '@' NAME
825 		{ push_type_address_space (copy_name ($2.stoken));
826 		  push_type (tp_space_identifier);
827 		}
828 	;
829 
830 const_or_volatile: const_or_volatile_noopt
831 	|
832 	;
833 
834 cv_with_space_id : const_or_volatile space_identifier const_or_volatile
835 	;
836 
837 const_or_volatile_or_space_identifier_noopt: cv_with_space_id
838 	| const_or_volatile_noopt
839 	;
840 
841 const_or_volatile_or_space_identifier:
842 		const_or_volatile_or_space_identifier_noopt
843 	|
844 	;
845 
846 abs_decl:	'*'
847 			{ push_type (tp_pointer); $$ = 0; }
848 	|	'*' abs_decl
849 			{ push_type (tp_pointer); $$ = $2; }
850 	|	'&'
851 			{ push_type (tp_reference); $$ = 0; }
852 	|	'&' abs_decl
853 			{ push_type (tp_reference); $$ = $2; }
854 	|	direct_abs_decl
855 	;
856 
857 direct_abs_decl: '(' abs_decl ')'
858 			{ $$ = $2; }
859 	|	direct_abs_decl array_mod
860 			{
861 			  push_type_int ($2);
862 			  push_type (tp_array);
863 			}
864 	|	array_mod
865 			{
866 			  push_type_int ($1);
867 			  push_type (tp_array);
868 			  $$ = 0;
869 			}
870 
871 	| 	direct_abs_decl func_mod
872 			{ push_type (tp_function); }
873 	|	func_mod
874 			{ push_type (tp_function); }
875 	;
876 
877 array_mod:	'[' ']'
878 			{ $$ = -1; }
879 	|	'[' INT ']'
880 			{ $$ = $2.val; }
881 	;
882 
883 func_mod:	'(' ')'
884 			{ $$ = 0; }
885 	|	'(' nonempty_typelist ')'
886 			{ free ($2); $$ = 0; }
887 	;
888 
889 /* We used to try to recognize pointer to member types here, but
890    that didn't work (shift/reduce conflicts meant that these rules never
891    got executed).  The problem is that
892      int (foo::bar::baz::bizzle)
893    is a function type but
894      int (foo::bar::baz::bizzle::*)
895    is a pointer to member type.  Stroustrup loses again!  */
896 
897 type	:	ptype
898 	;
899 
900 typebase  /* Implements (approximately): (type-qualifier)* type-specifier */
901 	:	TYPENAME
902 			{ $$ = $1.type; }
903 	|	INT_KEYWORD
904 			{ $$ = parse_type->builtin_int; }
905 	|	LONG
906 			{ $$ = parse_type->builtin_long; }
907 	|	SHORT
908 			{ $$ = parse_type->builtin_short; }
909 	|	LONG INT_KEYWORD
910 			{ $$ = parse_type->builtin_long; }
911 	|	LONG SIGNED_KEYWORD INT_KEYWORD
912 			{ $$ = parse_type->builtin_long; }
913 	|	LONG SIGNED_KEYWORD
914 			{ $$ = parse_type->builtin_long; }
915 	|	SIGNED_KEYWORD LONG INT_KEYWORD
916 			{ $$ = parse_type->builtin_long; }
917 	|	UNSIGNED LONG INT_KEYWORD
918 			{ $$ = parse_type->builtin_unsigned_long; }
919 	|	LONG UNSIGNED INT_KEYWORD
920 			{ $$ = parse_type->builtin_unsigned_long; }
921 	|	LONG UNSIGNED
922 			{ $$ = parse_type->builtin_unsigned_long; }
923 	|	LONG LONG
924 			{ $$ = parse_type->builtin_long_long; }
925 	|	LONG LONG INT_KEYWORD
926 			{ $$ = parse_type->builtin_long_long; }
927 	|	LONG LONG SIGNED_KEYWORD INT_KEYWORD
928 			{ $$ = parse_type->builtin_long_long; }
929 	|	LONG LONG SIGNED_KEYWORD
930 			{ $$ = parse_type->builtin_long_long; }
931 	|	SIGNED_KEYWORD LONG LONG
932 			{ $$ = parse_type->builtin_long_long; }
933 	|	SIGNED_KEYWORD LONG LONG INT_KEYWORD
934 			{ $$ = parse_type->builtin_long_long; }
935 	|	UNSIGNED LONG LONG
936 			{ $$ = parse_type->builtin_unsigned_long_long; }
937 	|	UNSIGNED LONG LONG INT_KEYWORD
938 			{ $$ = parse_type->builtin_unsigned_long_long; }
939 	|	LONG LONG UNSIGNED
940 			{ $$ = parse_type->builtin_unsigned_long_long; }
941 	|	LONG LONG UNSIGNED INT_KEYWORD
942 			{ $$ = parse_type->builtin_unsigned_long_long; }
943 	|	SHORT INT_KEYWORD
944 			{ $$ = parse_type->builtin_short; }
945 	|	SHORT SIGNED_KEYWORD INT_KEYWORD
946 			{ $$ = parse_type->builtin_short; }
947 	|	SHORT SIGNED_KEYWORD
948 			{ $$ = parse_type->builtin_short; }
949 	|	UNSIGNED SHORT INT_KEYWORD
950 			{ $$ = parse_type->builtin_unsigned_short; }
951 	|	SHORT UNSIGNED
952 			{ $$ = parse_type->builtin_unsigned_short; }
953 	|	SHORT UNSIGNED INT_KEYWORD
954 			{ $$ = parse_type->builtin_unsigned_short; }
955 	|	DOUBLE_KEYWORD
956 			{ $$ = parse_type->builtin_double; }
957 	|	LONG DOUBLE_KEYWORD
958 			{ $$ = parse_type->builtin_long_double; }
959 	|	STRUCT name
960 			{ $$ = lookup_struct (copy_name ($2),
961 					      expression_context_block); }
962 	|	CLASS name
963 			{ $$ = lookup_struct (copy_name ($2),
964 					      expression_context_block); }
965 	|	UNION name
966 			{ $$ = lookup_union (copy_name ($2),
967 					     expression_context_block); }
968 	|	ENUM name
969 			{ $$ = lookup_enum (copy_name ($2),
970 					    expression_context_block); }
971 	|	UNSIGNED typename
972 			{ $$ = lookup_unsigned_typename (parse_language,
973 							 parse_gdbarch,
974 							 TYPE_NAME($2.type)); }
975 	|	UNSIGNED
976 			{ $$ = parse_type->builtin_unsigned_int; }
977 	|	SIGNED_KEYWORD typename
978 			{ $$ = lookup_signed_typename (parse_language,
979 						       parse_gdbarch,
980 						       TYPE_NAME($2.type)); }
981 	|	SIGNED_KEYWORD
982 			{ $$ = parse_type->builtin_int; }
983                 /* It appears that this rule for templates is never
984                    reduced; template recognition happens by lookahead
985                    in the token processing code in yylex. */
986 	|	TEMPLATE name '<' type '>'
987 			{ $$ = lookup_template_type(copy_name($2), $4,
988 						    expression_context_block);
989 			}
990 	| const_or_volatile_or_space_identifier_noopt typebase
991 			{ $$ = follow_types ($2); }
992 	| typebase const_or_volatile_or_space_identifier_noopt
993 			{ $$ = follow_types ($1); }
994 	| qualified_type
995 	;
996 
997 /* FIXME: carlton/2003-09-25: This next bit leads to lots of
998    reduce-reduce conflicts, because the parser doesn't know whether or
999    not to use qualified_name or qualified_type: the rules are
1000    identical.  If the parser is parsing 'A::B::x', then, when it sees
1001    the second '::', it knows that the expression to the left of it has
1002    to be a type, so it uses qualified_type.  But if it is parsing just
1003    'A::B', then it doesn't have any way of knowing which rule to use,
1004    so there's a reduce-reduce conflict; it picks qualified_name, since
1005    that occurs earlier in this file than qualified_type.
1006 
1007    There's no good way to fix this with the grammar as it stands; as
1008    far as I can tell, some of the problems arise from ambiguities that
1009    GDB introduces ('start' can be either an expression or a type), but
1010    some of it is inherent to the nature of C++ (you want to treat the
1011    input "(FOO)" fairly differently depending on whether FOO is an
1012    expression or a type, and if FOO is a complex expression, this can
1013    be hard to determine at the right time).  Fortunately, it works
1014    pretty well in most cases.  For example, if you do 'ptype A::B',
1015    where A::B is a nested type, then the parser will mistakenly
1016    misidentify it as an expression; but evaluate_subexp will get
1017    called with 'noside' set to EVAL_AVOID_SIDE_EFFECTS, and everything
1018    will work out anyways.  But there are situations where the parser
1019    will get confused: the most common one that I've run into is when
1020    you want to do
1021 
1022      print *((A::B *) x)"
1023 
1024    where the parser doesn't realize that A::B has to be a type until
1025    it hits the first right paren, at which point it's too late.  (The
1026    workaround is to type "print *(('A::B' *) x)" instead.)  (And
1027    another solution is to fix our symbol-handling code so that the
1028    user never wants to type something like that in the first place,
1029    because we get all the types right without the user's help!)
1030 
1031    Perhaps we could fix this by making the lexer smarter.  Some of
1032    this functionality used to be in the lexer, but in a way that
1033    worked even less well than the current solution: that attempt
1034    involved having the parser sometimes handle '::' and having the
1035    lexer sometimes handle it, and without a clear division of
1036    responsibility, it quickly degenerated into a big mess.  Probably
1037    the eventual correct solution will give more of a role to the lexer
1038    (ideally via code that is shared between the lexer and
1039    decode_line_1), but I'm not holding my breath waiting for somebody
1040    to get around to cleaning this up...  */
1041 
1042 qualified_type: typebase COLONCOLON name
1043 		{
1044 		  struct type *type = $1;
1045 		  struct type *new_type;
1046 		  char *ncopy = alloca ($3.length + 1);
1047 
1048 		  memcpy (ncopy, $3.ptr, $3.length);
1049 		  ncopy[$3.length] = '\0';
1050 
1051 		  if (TYPE_CODE (type) != TYPE_CODE_STRUCT
1052 		      && TYPE_CODE (type) != TYPE_CODE_UNION
1053 		      && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
1054 		    error ("`%s' is not defined as an aggregate type.",
1055 			   TYPE_NAME (type));
1056 
1057 		  new_type = cp_lookup_nested_type (type, ncopy,
1058 						    expression_context_block);
1059 		  if (new_type == NULL)
1060 		    error ("No type \"%s\" within class or namespace \"%s\".",
1061 			   ncopy, TYPE_NAME (type));
1062 
1063 		  $$ = new_type;
1064 		}
1065 	;
1066 
1067 typename:	TYPENAME
1068 	|	INT_KEYWORD
1069 		{
1070 		  $$.stoken.ptr = "int";
1071 		  $$.stoken.length = 3;
1072 		  $$.type = parse_type->builtin_int;
1073 		}
1074 	|	LONG
1075 		{
1076 		  $$.stoken.ptr = "long";
1077 		  $$.stoken.length = 4;
1078 		  $$.type = parse_type->builtin_long;
1079 		}
1080 	|	SHORT
1081 		{
1082 		  $$.stoken.ptr = "short";
1083 		  $$.stoken.length = 5;
1084 		  $$.type = parse_type->builtin_short;
1085 		}
1086 	;
1087 
1088 nonempty_typelist
1089 	:	type
1090 		{ $$ = (struct type **) malloc (sizeof (struct type *) * 2);
1091 		  $<ivec>$[0] = 1;	/* Number of types in vector */
1092 		  $$[1] = $1;
1093 		}
1094 	|	nonempty_typelist ',' type
1095 		{ int len = sizeof (struct type *) * (++($<ivec>1[0]) + 1);
1096 		  $$ = (struct type **) realloc ((char *) $1, len);
1097 		  $$[$<ivec>$[0]] = $3;
1098 		}
1099 	;
1100 
1101 ptype	:	typebase
1102 	|	ptype const_or_volatile_or_space_identifier abs_decl const_or_volatile_or_space_identifier
1103 		{ $$ = follow_types ($1); }
1104 	;
1105 
1106 const_and_volatile: 	CONST_KEYWORD VOLATILE_KEYWORD
1107 	| 		VOLATILE_KEYWORD CONST_KEYWORD
1108 	;
1109 
1110 const_or_volatile_noopt:  	const_and_volatile
1111 			{ push_type (tp_const);
1112 			  push_type (tp_volatile);
1113 			}
1114 	| 		CONST_KEYWORD
1115 			{ push_type (tp_const); }
1116 	| 		VOLATILE_KEYWORD
1117 			{ push_type (tp_volatile); }
1118 	;
1119 
1120 name	:	NAME { $$ = $1.stoken; }
1121 	|	BLOCKNAME { $$ = $1.stoken; }
1122 	|	TYPENAME { $$ = $1.stoken; }
1123 	|	NAME_OR_INT  { $$ = $1.stoken; }
1124 	;
1125 
1126 name_not_typename :	NAME
1127 	|	BLOCKNAME
1128 /* These would be useful if name_not_typename was useful, but it is just
1129    a fake for "variable", so these cause reduce/reduce conflicts because
1130    the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
1131    =exp) or just an exp.  If name_not_typename was ever used in an lvalue
1132    context where only a name could occur, this might be useful.
1133   	|	NAME_OR_INT
1134  */
1135 	;
1136 
1137 %%
1138 
1139 /* Take care of parsing a number (anything that starts with a digit).
1140    Set yylval and return the token type; update lexptr.
1141    LEN is the number of characters in it.  */
1142 
1143 /*** Needs some error checking for the float case ***/
1144 
1145 static int
1146 parse_number (char *p, int len, int parsed_float, YYSTYPE *putithere)
1147 {
1148   /* FIXME: Shouldn't these be unsigned?  We don't deal with negative values
1149      here, and we do kind of silly things like cast to unsigned.  */
1150   LONGEST n = 0;
1151   LONGEST prevn = 0;
1152   ULONGEST un;
1153 
1154   int i = 0;
1155   int c;
1156   int base = input_radix;
1157   int unsigned_p = 0;
1158 
1159   /* Number of "L" suffixes encountered.  */
1160   int long_p = 0;
1161 
1162   /* We have found a "L" or "U" suffix.  */
1163   int found_suffix = 0;
1164 
1165   ULONGEST high_bit;
1166   struct type *signed_type;
1167   struct type *unsigned_type;
1168 
1169   if (parsed_float)
1170     {
1171       /* It's a float since it contains a point or an exponent.  */
1172       char *s;
1173       int num;	/* number of tokens scanned by scanf */
1174       char saved_char;
1175 
1176       /* If it ends at "df", "dd" or "dl", take it as type of decimal floating
1177          point.  Return DECFLOAT.  */
1178 
1179       if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'f')
1180 	{
1181 	  p[len - 2] = '\0';
1182 	  putithere->typed_val_decfloat.type
1183 	    = parse_type->builtin_decfloat;
1184 	  decimal_from_string (putithere->typed_val_decfloat.val, 4,
1185 			       gdbarch_byte_order (parse_gdbarch), p);
1186 	  p[len - 2] = 'd';
1187 	  return DECFLOAT;
1188 	}
1189 
1190       if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'd')
1191 	{
1192 	  p[len - 2] = '\0';
1193 	  putithere->typed_val_decfloat.type
1194 	    = parse_type->builtin_decdouble;
1195 	  decimal_from_string (putithere->typed_val_decfloat.val, 8,
1196 			       gdbarch_byte_order (parse_gdbarch), p);
1197 	  p[len - 2] = 'd';
1198 	  return DECFLOAT;
1199 	}
1200 
1201       if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'l')
1202 	{
1203 	  p[len - 2] = '\0';
1204 	  putithere->typed_val_decfloat.type
1205 	    = parse_type->builtin_declong;
1206 	  decimal_from_string (putithere->typed_val_decfloat.val, 16,
1207 			       gdbarch_byte_order (parse_gdbarch), p);
1208 	  p[len - 2] = 'd';
1209 	  return DECFLOAT;
1210 	}
1211 
1212       s = malloc (len);
1213       saved_char = p[len];
1214       p[len] = 0;	/* null-terminate the token */
1215       num = sscanf (p, "%" DOUBLEST_SCAN_FORMAT "%s",
1216 		    &putithere->typed_val_float.dval, s);
1217       p[len] = saved_char;	/* restore the input stream */
1218 
1219       if (num == 1)
1220 	putithere->typed_val_float.type =
1221 	  parse_type->builtin_double;
1222 
1223       if (num == 2 )
1224 	{
1225 	  /* See if it has any float suffix: 'f' for float, 'l' for long
1226 	     double.  */
1227 	  if (!strcasecmp (s, "f"))
1228 	    putithere->typed_val_float.type =
1229 	      parse_type->builtin_float;
1230 	  else if (!strcasecmp (s, "l"))
1231 	    putithere->typed_val_float.type =
1232 	      parse_type->builtin_long_double;
1233 	  else
1234 	    {
1235 	      free (s);
1236 	      return ERROR;
1237 	    }
1238 	}
1239 
1240       free (s);
1241       return FLOAT;
1242     }
1243 
1244   /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
1245   if (p[0] == '0')
1246     switch (p[1])
1247       {
1248       case 'x':
1249       case 'X':
1250 	if (len >= 3)
1251 	  {
1252 	    p += 2;
1253 	    base = 16;
1254 	    len -= 2;
1255 	  }
1256 	break;
1257 
1258       case 't':
1259       case 'T':
1260       case 'd':
1261       case 'D':
1262 	if (len >= 3)
1263 	  {
1264 	    p += 2;
1265 	    base = 10;
1266 	    len -= 2;
1267 	  }
1268 	break;
1269 
1270       default:
1271 	base = 8;
1272 	break;
1273       }
1274 
1275   while (len-- > 0)
1276     {
1277       c = *p++;
1278       if (c >= 'A' && c <= 'Z')
1279 	c += 'a' - 'A';
1280       if (c != 'l' && c != 'u')
1281 	n *= base;
1282       if (c >= '0' && c <= '9')
1283 	{
1284 	  if (found_suffix)
1285 	    return ERROR;
1286 	  n += i = c - '0';
1287 	}
1288       else
1289 	{
1290 	  if (base > 10 && c >= 'a' && c <= 'f')
1291 	    {
1292 	      if (found_suffix)
1293 		return ERROR;
1294 	      n += i = c - 'a' + 10;
1295 	    }
1296 	  else if (c == 'l')
1297 	    {
1298 	      ++long_p;
1299 	      found_suffix = 1;
1300 	    }
1301 	  else if (c == 'u')
1302 	    {
1303 	      unsigned_p = 1;
1304 	      found_suffix = 1;
1305 	    }
1306 	  else
1307 	    return ERROR;	/* Char not a digit */
1308 	}
1309       if (i >= base)
1310 	return ERROR;		/* Invalid digit in this base */
1311 
1312       /* Portably test for overflow (only works for nonzero values, so make
1313 	 a second check for zero).  FIXME: Can't we just make n and prevn
1314 	 unsigned and avoid this?  */
1315       if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
1316 	unsigned_p = 1;		/* Try something unsigned */
1317 
1318       /* Portably test for unsigned overflow.
1319 	 FIXME: This check is wrong; for example it doesn't find overflow
1320 	 on 0x123456789 when LONGEST is 32 bits.  */
1321       if (c != 'l' && c != 'u' && n != 0)
1322 	{
1323 	  if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n))
1324 	    error ("Numeric constant too large.");
1325 	}
1326       prevn = n;
1327     }
1328 
1329   /* An integer constant is an int, a long, or a long long.  An L
1330      suffix forces it to be long; an LL suffix forces it to be long
1331      long.  If not forced to a larger size, it gets the first type of
1332      the above that it fits in.  To figure out whether it fits, we
1333      shift it right and see whether anything remains.  Note that we
1334      can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
1335      operation, because many compilers will warn about such a shift
1336      (which always produces a zero result).  Sometimes gdbarch_int_bit
1337      or gdbarch_long_bit will be that big, sometimes not.  To deal with
1338      the case where it is we just always shift the value more than
1339      once, with fewer bits each time.  */
1340 
1341   un = (ULONGEST)n >> 2;
1342   if (long_p == 0
1343       && (un >> (gdbarch_int_bit (parse_gdbarch) - 2)) == 0)
1344     {
1345       high_bit = ((ULONGEST)1) << (gdbarch_int_bit (parse_gdbarch) - 1);
1346 
1347       /* A large decimal (not hex or octal) constant (between INT_MAX
1348 	 and UINT_MAX) is a long or unsigned long, according to ANSI,
1349 	 never an unsigned int, but this code treats it as unsigned
1350 	 int.  This probably should be fixed.  GCC gives a warning on
1351 	 such constants.  */
1352 
1353       unsigned_type = parse_type->builtin_unsigned_int;
1354       signed_type = parse_type->builtin_int;
1355     }
1356   else if (long_p <= 1
1357 	   && (un >> (gdbarch_long_bit (parse_gdbarch) - 2)) == 0)
1358     {
1359       high_bit = ((ULONGEST)1) << (gdbarch_long_bit (parse_gdbarch) - 1);
1360       unsigned_type = parse_type->builtin_unsigned_long;
1361       signed_type = parse_type->builtin_long;
1362     }
1363   else
1364     {
1365       int shift;
1366       if (sizeof (ULONGEST) * HOST_CHAR_BIT
1367 	  < gdbarch_long_long_bit (parse_gdbarch))
1368 	/* A long long does not fit in a LONGEST.  */
1369 	shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1);
1370       else
1371 	shift = (gdbarch_long_long_bit (parse_gdbarch) - 1);
1372       high_bit = (ULONGEST) 1 << shift;
1373       unsigned_type = parse_type->builtin_unsigned_long_long;
1374       signed_type = parse_type->builtin_long_long;
1375     }
1376 
1377    putithere->typed_val_int.val = n;
1378 
1379    /* If the high bit of the worked out type is set then this number
1380       has to be unsigned. */
1381 
1382    if (unsigned_p || (n & high_bit))
1383      {
1384        putithere->typed_val_int.type = unsigned_type;
1385      }
1386    else
1387      {
1388        putithere->typed_val_int.type = signed_type;
1389      }
1390 
1391    return INT;
1392 }
1393 
1394 /* Temporary obstack used for holding strings.  */
1395 static struct obstack tempbuf;
1396 static int tempbuf_init;
1397 
1398 /* Parse a C escape sequence.  The initial backslash of the sequence
1399    is at (*PTR)[-1].  *PTR will be updated to point to just after the
1400    last character of the sequence.  If OUTPUT is not NULL, the
1401    translated form of the escape sequence will be written there.  If
1402    OUTPUT is NULL, no output is written and the call will only affect
1403    *PTR.  If an escape sequence is expressed in target bytes, then the
1404    entire sequence will simply be copied to OUTPUT.  Return 1 if any
1405    character was emitted, 0 otherwise.  */
1406 
1407 int
1408 c_parse_escape (char **ptr, struct obstack *output)
1409 {
1410   char *tokptr = *ptr;
1411   int result = 1;
1412 
1413   /* Some escape sequences undergo character set conversion.  Those we
1414      translate here.  */
1415   switch (*tokptr)
1416     {
1417       /* Hex escapes do not undergo character set conversion, so keep
1418 	 the escape sequence for later.  */
1419     case 'x':
1420       if (output)
1421 	obstack_grow_str (output, "\\x");
1422       ++tokptr;
1423       if (!isxdigit (*tokptr))
1424 	error (_("\\x escape without a following hex digit"));
1425       while (isxdigit (*tokptr))
1426 	{
1427 	  if (output)
1428 	    obstack_1grow (output, *tokptr);
1429 	  ++tokptr;
1430 	}
1431       break;
1432 
1433       /* Octal escapes do not undergo character set conversion, so
1434 	 keep the escape sequence for later.  */
1435     case '0':
1436     case '1':
1437     case '2':
1438     case '3':
1439     case '4':
1440     case '5':
1441     case '6':
1442     case '7':
1443       {
1444 	int i;
1445 	if (output)
1446 	  obstack_grow_str (output, "\\");
1447 	for (i = 0;
1448 	     i < 3 && isdigit (*tokptr) && *tokptr != '8' && *tokptr != '9';
1449 	     ++i)
1450 	  {
1451 	    if (output)
1452 	      obstack_1grow (output, *tokptr);
1453 	    ++tokptr;
1454 	  }
1455       }
1456       break;
1457 
1458       /* We handle UCNs later.  We could handle them here, but that
1459 	 would mean a spurious error in the case where the UCN could
1460 	 be converted to the target charset but not the host
1461 	 charset.  */
1462     case 'u':
1463     case 'U':
1464       {
1465 	char c = *tokptr;
1466 	int i, len = c == 'U' ? 8 : 4;
1467 	if (output)
1468 	  {
1469 	    obstack_1grow (output, '\\');
1470 	    obstack_1grow (output, *tokptr);
1471 	  }
1472 	++tokptr;
1473 	if (!isxdigit (*tokptr))
1474 	  error (_("\\%c escape without a following hex digit"), c);
1475 	for (i = 0; i < len && isxdigit (*tokptr); ++i)
1476 	  {
1477 	    if (output)
1478 	      obstack_1grow (output, *tokptr);
1479 	    ++tokptr;
1480 	  }
1481       }
1482       break;
1483 
1484       /* We must pass backslash through so that it does not
1485 	 cause quoting during the second expansion.  */
1486     case '\\':
1487       if (output)
1488 	obstack_grow_str (output, "\\\\");
1489       ++tokptr;
1490       break;
1491 
1492       /* Escapes which undergo conversion.  */
1493     case 'a':
1494       if (output)
1495 	obstack_1grow (output, '\a');
1496       ++tokptr;
1497       break;
1498     case 'b':
1499       if (output)
1500 	obstack_1grow (output, '\b');
1501       ++tokptr;
1502       break;
1503     case 'f':
1504       if (output)
1505 	obstack_1grow (output, '\f');
1506       ++tokptr;
1507       break;
1508     case 'n':
1509       if (output)
1510 	obstack_1grow (output, '\n');
1511       ++tokptr;
1512       break;
1513     case 'r':
1514       if (output)
1515 	obstack_1grow (output, '\r');
1516       ++tokptr;
1517       break;
1518     case 't':
1519       if (output)
1520 	obstack_1grow (output, '\t');
1521       ++tokptr;
1522       break;
1523     case 'v':
1524       if (output)
1525 	obstack_1grow (output, '\v');
1526       ++tokptr;
1527       break;
1528 
1529       /* GCC extension.  */
1530     case 'e':
1531       if (output)
1532 	obstack_1grow (output, HOST_ESCAPE_CHAR);
1533       ++tokptr;
1534       break;
1535 
1536       /* Backslash-newline expands to nothing at all.  */
1537     case '\n':
1538       ++tokptr;
1539       result = 0;
1540       break;
1541 
1542       /* A few escapes just expand to the character itself.  */
1543     case '\'':
1544     case '\"':
1545     case '?':
1546       /* GCC extensions.  */
1547     case '(':
1548     case '{':
1549     case '[':
1550     case '%':
1551       /* Unrecognized escapes turn into the character itself.  */
1552     default:
1553       if (output)
1554 	obstack_1grow (output, *tokptr);
1555       ++tokptr;
1556       break;
1557     }
1558   *ptr = tokptr;
1559   return result;
1560 }
1561 
1562 /* Parse a string or character literal from TOKPTR.  The string or
1563    character may be wide or unicode.  *OUTPTR is set to just after the
1564    end of the literal in the input string.  The resulting token is
1565    stored in VALUE.  This returns a token value, either STRING or
1566    CHAR, depending on what was parsed.  *HOST_CHARS is set to the
1567    number of host characters in the literal.  */
1568 static int
1569 parse_string_or_char (char *tokptr, char **outptr, struct typed_stoken *value,
1570 		      int *host_chars)
1571 {
1572   int quote, i;
1573   enum c_string_type type;
1574 
1575   /* Build the gdb internal form of the input string in tempbuf.  Note
1576      that the buffer is null byte terminated *only* for the
1577      convenience of debugging gdb itself and printing the buffer
1578      contents when the buffer contains no embedded nulls.  Gdb does
1579      not depend upon the buffer being null byte terminated, it uses
1580      the length string instead.  This allows gdb to handle C strings
1581      (as well as strings in other languages) with embedded null
1582      bytes */
1583 
1584   if (!tempbuf_init)
1585     tempbuf_init = 1;
1586   else
1587     obstack_free (&tempbuf, NULL);
1588   obstack_init (&tempbuf);
1589 
1590   /* Record the string type.  */
1591   if (*tokptr == 'L')
1592     {
1593       type = C_WIDE_STRING;
1594       ++tokptr;
1595     }
1596   else if (*tokptr == 'u')
1597     {
1598       type = C_STRING_16;
1599       ++tokptr;
1600     }
1601   else if (*tokptr == 'U')
1602     {
1603       type = C_STRING_32;
1604       ++tokptr;
1605     }
1606   else
1607     type = C_STRING;
1608 
1609   /* Skip the quote.  */
1610   quote = *tokptr;
1611   if (quote == '\'')
1612     type |= C_CHAR;
1613   ++tokptr;
1614 
1615   *host_chars = 0;
1616 
1617   while (*tokptr)
1618     {
1619       char c = *tokptr;
1620       if (c == '\\')
1621 	{
1622 	  ++tokptr;
1623 	  *host_chars += c_parse_escape (&tokptr, &tempbuf);
1624 	}
1625       else if (c == quote)
1626 	break;
1627       else
1628 	{
1629 	  obstack_1grow (&tempbuf, c);
1630 	  ++tokptr;
1631 	  /* FIXME: this does the wrong thing with multi-byte host
1632 	     characters.  We could use mbrlen here, but that would
1633 	     make "set host-charset" a bit less useful.  */
1634 	  ++*host_chars;
1635 	}
1636     }
1637 
1638   if (*tokptr != quote)
1639     {
1640       if (quote == '"')
1641 	error ("Unterminated string in expression.");
1642       else
1643 	error ("Unmatched single quote.");
1644     }
1645   ++tokptr;
1646 
1647   value->type = type;
1648   value->ptr = obstack_base (&tempbuf);
1649   value->length = obstack_object_size (&tempbuf);
1650 
1651   *outptr = tokptr;
1652 
1653   return quote == '"' ? STRING : CHAR;
1654 }
1655 
1656 struct token
1657 {
1658   char *operator;
1659   int token;
1660   enum exp_opcode opcode;
1661   int cxx_only;
1662 };
1663 
1664 static const struct token tokentab3[] =
1665   {
1666     {">>=", ASSIGN_MODIFY, BINOP_RSH, 0},
1667     {"<<=", ASSIGN_MODIFY, BINOP_LSH, 0},
1668     {"->*", ARROW_STAR, BINOP_END, 1}
1669   };
1670 
1671 static const struct token tokentab2[] =
1672   {
1673     {"+=", ASSIGN_MODIFY, BINOP_ADD, 0},
1674     {"-=", ASSIGN_MODIFY, BINOP_SUB, 0},
1675     {"*=", ASSIGN_MODIFY, BINOP_MUL, 0},
1676     {"/=", ASSIGN_MODIFY, BINOP_DIV, 0},
1677     {"%=", ASSIGN_MODIFY, BINOP_REM, 0},
1678     {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR, 0},
1679     {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND, 0},
1680     {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR, 0},
1681     {"++", INCREMENT, BINOP_END, 0},
1682     {"--", DECREMENT, BINOP_END, 0},
1683     {"->", ARROW, BINOP_END, 0},
1684     {"&&", ANDAND, BINOP_END, 0},
1685     {"||", OROR, BINOP_END, 0},
1686     /* "::" is *not* only C++: gdb overrides its meaning in several
1687        different ways, e.g., 'filename'::func, function::variable.  */
1688     {"::", COLONCOLON, BINOP_END, 0},
1689     {"<<", LSH, BINOP_END, 0},
1690     {">>", RSH, BINOP_END, 0},
1691     {"==", EQUAL, BINOP_END, 0},
1692     {"!=", NOTEQUAL, BINOP_END, 0},
1693     {"<=", LEQ, BINOP_END, 0},
1694     {">=", GEQ, BINOP_END, 0},
1695     {".*", DOT_STAR, BINOP_END, 1}
1696   };
1697 
1698 /* Identifier-like tokens.  */
1699 static const struct token ident_tokens[] =
1700   {
1701     {"unsigned", UNSIGNED, OP_NULL, 0},
1702     {"template", TEMPLATE, OP_NULL, 1},
1703     {"volatile", VOLATILE_KEYWORD, OP_NULL, 0},
1704     {"struct", STRUCT, OP_NULL, 0},
1705     {"signed", SIGNED_KEYWORD, OP_NULL, 0},
1706     {"sizeof", SIZEOF, OP_NULL, 0},
1707     {"double", DOUBLE_KEYWORD, OP_NULL, 0},
1708     {"false", FALSEKEYWORD, OP_NULL, 1},
1709     {"class", CLASS, OP_NULL, 1},
1710     {"union", UNION, OP_NULL, 0},
1711     {"short", SHORT, OP_NULL, 0},
1712     {"const", CONST_KEYWORD, OP_NULL, 0},
1713     {"enum", ENUM, OP_NULL, 0},
1714     {"long", LONG, OP_NULL, 0},
1715     {"true", TRUEKEYWORD, OP_NULL, 1},
1716     {"int", INT_KEYWORD, OP_NULL, 0},
1717 
1718     {"and", ANDAND, BINOP_END, 1},
1719     {"and_eq", ASSIGN_MODIFY, BINOP_BITWISE_AND, 1},
1720     {"bitand", '&', OP_NULL, 1},
1721     {"bitor", '|', OP_NULL, 1},
1722     {"compl", '~', OP_NULL, 1},
1723     {"not", '!', OP_NULL, 1},
1724     {"not_eq", NOTEQUAL, BINOP_END, 1},
1725     {"or", OROR, BINOP_END, 1},
1726     {"or_eq", ASSIGN_MODIFY, BINOP_BITWISE_IOR, 1},
1727     {"xor", '^', OP_NULL, 1},
1728     {"xor_eq", ASSIGN_MODIFY, BINOP_BITWISE_XOR, 1}
1729   };
1730 
1731 /* When we find that lexptr (the global var defined in parse.c) is
1732    pointing at a macro invocation, we expand the invocation, and call
1733    scan_macro_expansion to save the old lexptr here and point lexptr
1734    into the expanded text.  When we reach the end of that, we call
1735    end_macro_expansion to pop back to the value we saved here.  The
1736    macro expansion code promises to return only fully-expanded text,
1737    so we don't need to "push" more than one level.
1738 
1739    This is disgusting, of course.  It would be cleaner to do all macro
1740    expansion beforehand, and then hand that to lexptr.  But we don't
1741    really know where the expression ends.  Remember, in a command like
1742 
1743      (gdb) break *ADDRESS if CONDITION
1744 
1745    we evaluate ADDRESS in the scope of the current frame, but we
1746    evaluate CONDITION in the scope of the breakpoint's location.  So
1747    it's simply wrong to try to macro-expand the whole thing at once.  */
1748 static char *macro_original_text;
1749 
1750 /* We save all intermediate macro expansions on this obstack for the
1751    duration of a single parse.  The expansion text may sometimes have
1752    to live past the end of the expansion, due to yacc lookahead.
1753    Rather than try to be clever about saving the data for a single
1754    token, we simply keep it all and delete it after parsing has
1755    completed.  */
1756 static struct obstack expansion_obstack;
1757 
1758 static void
1759 scan_macro_expansion (char *expansion)
1760 {
1761   char *copy;
1762 
1763   /* We'd better not be trying to push the stack twice.  */
1764   gdb_assert (! macro_original_text);
1765 
1766   /* Copy to the obstack, and then free the intermediate
1767      expansion.  */
1768   copy = obstack_copy0 (&expansion_obstack, expansion, strlen (expansion));
1769   xfree (expansion);
1770 
1771   /* Save the old lexptr value, so we can return to it when we're done
1772      parsing the expanded text.  */
1773   macro_original_text = lexptr;
1774   lexptr = copy;
1775 }
1776 
1777 
1778 static int
1779 scanning_macro_expansion (void)
1780 {
1781   return macro_original_text != 0;
1782 }
1783 
1784 
1785 static void
1786 finished_macro_expansion (void)
1787 {
1788   /* There'd better be something to pop back to.  */
1789   gdb_assert (macro_original_text);
1790 
1791   /* Pop back to the original text.  */
1792   lexptr = macro_original_text;
1793   macro_original_text = 0;
1794 }
1795 
1796 
1797 static void
1798 scan_macro_cleanup (void *dummy)
1799 {
1800   if (macro_original_text)
1801     finished_macro_expansion ();
1802 
1803   obstack_free (&expansion_obstack, NULL);
1804 }
1805 
1806 
1807 /* The scope used for macro expansion.  */
1808 static struct macro_scope *expression_macro_scope;
1809 
1810 /* This is set if a NAME token appeared at the very end of the input
1811    string, with no whitespace separating the name from the EOF.  This
1812    is used only when parsing to do field name completion.  */
1813 static int saw_name_at_eof;
1814 
1815 /* This is set if the previously-returned token was a structure
1816    operator -- either '.' or ARROW.  This is used only when parsing to
1817    do field name completion.  */
1818 static int last_was_structop;
1819 
1820 /* Read one token, getting characters through lexptr.  */
1821 
1822 static int
1823 yylex (void)
1824 {
1825   int c;
1826   int namelen;
1827   unsigned int i;
1828   char *tokstart;
1829   int saw_structop = last_was_structop;
1830   char *copy;
1831 
1832   last_was_structop = 0;
1833 
1834  retry:
1835 
1836   /* Check if this is a macro invocation that we need to expand.  */
1837   if (! scanning_macro_expansion ())
1838     {
1839       char *expanded = macro_expand_next (&lexptr,
1840                                           standard_macro_lookup,
1841                                           expression_macro_scope);
1842 
1843       if (expanded)
1844         scan_macro_expansion (expanded);
1845     }
1846 
1847   prev_lexptr = lexptr;
1848 
1849   tokstart = lexptr;
1850   /* See if it is a special token of length 3.  */
1851   for (i = 0; i < sizeof tokentab3 / sizeof tokentab3[0]; i++)
1852     if (strncmp (tokstart, tokentab3[i].operator, 3) == 0)
1853       {
1854 	if (tokentab3[i].cxx_only
1855 	    && parse_language->la_language != language_cplus)
1856 	  break;
1857 
1858 	lexptr += 3;
1859 	yylval.opcode = tokentab3[i].opcode;
1860 	return tokentab3[i].token;
1861       }
1862 
1863   /* See if it is a special token of length 2.  */
1864   for (i = 0; i < sizeof tokentab2 / sizeof tokentab2[0]; i++)
1865     if (strncmp (tokstart, tokentab2[i].operator, 2) == 0)
1866       {
1867 	if (tokentab2[i].cxx_only
1868 	    && parse_language->la_language != language_cplus)
1869 	  break;
1870 
1871 	lexptr += 2;
1872 	yylval.opcode = tokentab2[i].opcode;
1873 	if (in_parse_field && tokentab2[i].token == ARROW)
1874 	  last_was_structop = 1;
1875 	return tokentab2[i].token;
1876       }
1877 
1878   switch (c = *tokstart)
1879     {
1880     case 0:
1881       /* If we were just scanning the result of a macro expansion,
1882          then we need to resume scanning the original text.
1883 	 If we're parsing for field name completion, and the previous
1884 	 token allows such completion, return a COMPLETE token.
1885          Otherwise, we were already scanning the original text, and
1886          we're really done.  */
1887       if (scanning_macro_expansion ())
1888         {
1889           finished_macro_expansion ();
1890           goto retry;
1891         }
1892       else if (saw_name_at_eof)
1893 	{
1894 	  saw_name_at_eof = 0;
1895 	  return COMPLETE;
1896 	}
1897       else if (saw_structop)
1898 	return COMPLETE;
1899       else
1900         return 0;
1901 
1902     case ' ':
1903     case '\t':
1904     case '\n':
1905       lexptr++;
1906       goto retry;
1907 
1908     case '[':
1909     case '(':
1910       paren_depth++;
1911       lexptr++;
1912       return c;
1913 
1914     case ']':
1915     case ')':
1916       if (paren_depth == 0)
1917 	return 0;
1918       paren_depth--;
1919       lexptr++;
1920       return c;
1921 
1922     case ',':
1923       if (comma_terminates
1924           && paren_depth == 0
1925           && ! scanning_macro_expansion ())
1926 	return 0;
1927       lexptr++;
1928       return c;
1929 
1930     case '.':
1931       /* Might be a floating point number.  */
1932       if (lexptr[1] < '0' || lexptr[1] > '9')
1933 	{
1934 	  if (in_parse_field)
1935 	    last_was_structop = 1;
1936 	  goto symbol;		/* Nope, must be a symbol. */
1937 	}
1938       /* FALL THRU into number case.  */
1939 
1940     case '0':
1941     case '1':
1942     case '2':
1943     case '3':
1944     case '4':
1945     case '5':
1946     case '6':
1947     case '7':
1948     case '8':
1949     case '9':
1950       {
1951 	/* It's a number.  */
1952 	int got_dot = 0, got_e = 0, toktype;
1953 	char *p = tokstart;
1954 	int hex = input_radix > 10;
1955 
1956 	if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
1957 	  {
1958 	    p += 2;
1959 	    hex = 1;
1960 	  }
1961 	else if (c == '0' && (p[1]=='t' || p[1]=='T' || p[1]=='d' || p[1]=='D'))
1962 	  {
1963 	    p += 2;
1964 	    hex = 0;
1965 	  }
1966 
1967 	for (;; ++p)
1968 	  {
1969 	    /* This test includes !hex because 'e' is a valid hex digit
1970 	       and thus does not indicate a floating point number when
1971 	       the radix is hex.  */
1972 	    if (!hex && !got_e && (*p == 'e' || *p == 'E'))
1973 	      got_dot = got_e = 1;
1974 	    /* This test does not include !hex, because a '.' always indicates
1975 	       a decimal floating point number regardless of the radix.  */
1976 	    else if (!got_dot && *p == '.')
1977 	      got_dot = 1;
1978 	    else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
1979 		     && (*p == '-' || *p == '+'))
1980 	      /* This is the sign of the exponent, not the end of the
1981 		 number.  */
1982 	      continue;
1983 	    /* We will take any letters or digits.  parse_number will
1984 	       complain if past the radix, or if L or U are not final.  */
1985 	    else if ((*p < '0' || *p > '9')
1986 		     && ((*p < 'a' || *p > 'z')
1987 				  && (*p < 'A' || *p > 'Z')))
1988 	      break;
1989 	  }
1990 	toktype = parse_number (tokstart, p - tokstart, got_dot|got_e, &yylval);
1991         if (toktype == ERROR)
1992 	  {
1993 	    char *err_copy = (char *) alloca (p - tokstart + 1);
1994 
1995 	    memcpy (err_copy, tokstart, p - tokstart);
1996 	    err_copy[p - tokstart] = 0;
1997 	    error ("Invalid number \"%s\".", err_copy);
1998 	  }
1999 	lexptr = p;
2000 	return toktype;
2001       }
2002 
2003     case '+':
2004     case '-':
2005     case '*':
2006     case '/':
2007     case '%':
2008     case '|':
2009     case '&':
2010     case '^':
2011     case '~':
2012     case '!':
2013     case '@':
2014     case '<':
2015     case '>':
2016     case '?':
2017     case ':':
2018     case '=':
2019     case '{':
2020     case '}':
2021     symbol:
2022       lexptr++;
2023       return c;
2024 
2025     case 'L':
2026     case 'u':
2027     case 'U':
2028       if (tokstart[1] != '"' && tokstart[1] != '\'')
2029 	break;
2030       /* Fall through.  */
2031     case '\'':
2032     case '"':
2033       {
2034 	int host_len;
2035 	int result = parse_string_or_char (tokstart, &lexptr, &yylval.tsval,
2036 					   &host_len);
2037 	if (result == CHAR)
2038 	  {
2039 	    if (host_len == 0)
2040 	      error ("Empty character constant.");
2041 	    else if (host_len > 2 && c == '\'')
2042 	      {
2043 		++tokstart;
2044 		namelen = lexptr - tokstart - 1;
2045 		goto tryname;
2046 	      }
2047 	    else if (host_len > 1)
2048 	      error ("Invalid character constant.");
2049 	  }
2050 	return result;
2051       }
2052     }
2053 
2054   if (!(c == '_' || c == '$'
2055 	|| (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
2056     /* We must have come across a bad character (e.g. ';').  */
2057     error ("Invalid character '%c' in expression.", c);
2058 
2059   /* It's a name.  See how long it is.  */
2060   namelen = 0;
2061   for (c = tokstart[namelen];
2062        (c == '_' || c == '$' || (c >= '0' && c <= '9')
2063 	|| (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '<');)
2064     {
2065       /* Template parameter lists are part of the name.
2066 	 FIXME: This mishandles `print $a<4&&$a>3'.  */
2067 
2068       if (c == '<')
2069 	{
2070                /* Scan ahead to get rest of the template specification.  Note
2071                   that we look ahead only when the '<' adjoins non-whitespace
2072                   characters; for comparison expressions, e.g. "a < b > c",
2073                   there must be spaces before the '<', etc. */
2074 
2075                char * p = find_template_name_end (tokstart + namelen);
2076                if (p)
2077                  namelen = p - tokstart;
2078                break;
2079 	}
2080       c = tokstart[++namelen];
2081     }
2082 
2083   /* The token "if" terminates the expression and is NOT removed from
2084      the input stream.  It doesn't count if it appears in the
2085      expansion of a macro.  */
2086   if (namelen == 2
2087       && tokstart[0] == 'i'
2088       && tokstart[1] == 'f'
2089       && ! scanning_macro_expansion ())
2090     {
2091       return 0;
2092     }
2093 
2094   lexptr += namelen;
2095 
2096   tryname:
2097 
2098   yylval.sval.ptr = tokstart;
2099   yylval.sval.length = namelen;
2100 
2101   /* Catch specific keywords.  */
2102   copy = copy_name (yylval.sval);
2103   for (i = 0; i < sizeof ident_tokens / sizeof ident_tokens[0]; i++)
2104     if (strcmp (copy, ident_tokens[i].operator) == 0)
2105       {
2106 	if (ident_tokens[i].cxx_only
2107 	    && parse_language->la_language != language_cplus)
2108 	  break;
2109 
2110 	/* It is ok to always set this, even though we don't always
2111 	   strictly need to.  */
2112 	yylval.opcode = ident_tokens[i].opcode;
2113 	return ident_tokens[i].token;
2114       }
2115 
2116   if (*tokstart == '$')
2117     {
2118       write_dollar_variable (yylval.sval);
2119       return VARIABLE;
2120     }
2121 
2122   /* Use token-type BLOCKNAME for symbols that happen to be defined as
2123      functions or symtabs.  If this is not so, then ...
2124      Use token-type TYPENAME for symbols that happen to be defined
2125      currently as names of types; NAME for other symbols.
2126      The caller is not constrained to care about the distinction.  */
2127   {
2128     struct symbol *sym;
2129     int is_a_field_of_this = 0;
2130     int hextype;
2131 
2132     sym = lookup_symbol (copy, expression_context_block,
2133 			 VAR_DOMAIN,
2134 			 parse_language->la_language == language_cplus
2135 			 ? &is_a_field_of_this : (int *) NULL);
2136     /* Call lookup_symtab, not lookup_partial_symtab, in case there are
2137        no psymtabs (coff, xcoff, or some future change to blow away the
2138        psymtabs once once symbols are read).  */
2139     if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
2140       {
2141 	yylval.ssym.sym = sym;
2142 	yylval.ssym.is_a_field_of_this = is_a_field_of_this;
2143 	return BLOCKNAME;
2144       }
2145     else if (!sym)
2146       {				/* See if it's a file name. */
2147 	struct symtab *symtab;
2148 
2149 	symtab = lookup_symtab (copy);
2150 
2151 	if (symtab)
2152 	  {
2153 	    yylval.bval = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK);
2154 	    return FILENAME;
2155 	  }
2156       }
2157 
2158     if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2159         {
2160 	  /* NOTE: carlton/2003-09-25: There used to be code here to
2161 	     handle nested types.  It didn't work very well.  See the
2162 	     comment before qualified_type for more info.  */
2163 	  yylval.tsym.type = SYMBOL_TYPE (sym);
2164 	  return TYPENAME;
2165         }
2166     yylval.tsym.type
2167       = language_lookup_primitive_type_by_name (parse_language,
2168 						parse_gdbarch, copy);
2169     if (yylval.tsym.type != NULL)
2170       return TYPENAME;
2171 
2172     /* Input names that aren't symbols but ARE valid hex numbers,
2173        when the input radix permits them, can be names or numbers
2174        depending on the parse.  Note we support radixes > 16 here.  */
2175     if (!sym &&
2176         ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10) ||
2177          (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10)))
2178       {
2179  	YYSTYPE newlval;	/* Its value is ignored.  */
2180 	hextype = parse_number (tokstart, namelen, 0, &newlval);
2181 	if (hextype == INT)
2182 	  {
2183 	    yylval.ssym.sym = sym;
2184 	    yylval.ssym.is_a_field_of_this = is_a_field_of_this;
2185 	    return NAME_OR_INT;
2186 	  }
2187       }
2188 
2189     /* Any other kind of symbol */
2190     yylval.ssym.sym = sym;
2191     yylval.ssym.is_a_field_of_this = is_a_field_of_this;
2192     if (in_parse_field && *lexptr == '\0')
2193       saw_name_at_eof = 1;
2194     return NAME;
2195   }
2196 }
2197 
2198 int
2199 c_parse (void)
2200 {
2201   int result;
2202   struct cleanup *back_to = make_cleanup (free_current_contents,
2203 					  &expression_macro_scope);
2204 
2205   /* Set up the scope for macro expansion.  */
2206   expression_macro_scope = NULL;
2207 
2208   if (expression_context_block)
2209     expression_macro_scope
2210       = sal_macro_scope (find_pc_line (expression_context_pc, 0));
2211   else
2212     expression_macro_scope = default_macro_scope ();
2213   if (! expression_macro_scope)
2214     expression_macro_scope = user_macro_scope ();
2215 
2216   /* Initialize macro expansion code.  */
2217   obstack_init (&expansion_obstack);
2218   gdb_assert (! macro_original_text);
2219   make_cleanup (scan_macro_cleanup, 0);
2220 
2221   /* Initialize some state used by the lexer.  */
2222   last_was_structop = 0;
2223   saw_name_at_eof = 0;
2224 
2225   result = yyparse ();
2226   do_cleanups (back_to);
2227   return result;
2228 }
2229 
2230 
2231 void
2232 yyerror (char *msg)
2233 {
2234   if (prev_lexptr)
2235     lexptr = prev_lexptr;
2236 
2237   error ("A %s in expression, near `%s'.", (msg ? msg : "error"), lexptr);
2238 }
2239