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