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