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