]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/p-exp.y
xtensa-xtregs: Constify field
[thirdparty/binutils-gdb.git] / gdb / p-exp.y
1 /* YACC parser for Pascal expressions, for GDB.
2 Copyright (C) 2000-2017 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 (const 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 gdb_byte val[16];
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 \f
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_FLOAT);
515 write_exp_elt_type (pstate, $1.type);
516 current_type = $1.type;
517 write_exp_elt_floatcst (pstate, $1.val);
518 write_exp_elt_opcode (pstate, OP_FLOAT); }
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 /* Handle suffixes: 'f' for float, 'l' for long double.
858 FIXME: This appears to be an extension -- do we want this? */
859 if (len >= 1 && tolower (p[len - 1]) == 'f')
860 {
861 putithere->typed_val_float.type
862 = parse_type (par_state)->builtin_float;
863 len--;
864 }
865 else if (len >= 1 && tolower (p[len - 1]) == 'l')
866 {
867 putithere->typed_val_float.type
868 = parse_type (par_state)->builtin_long_double;
869 len--;
870 }
871 /* Default type for floating-point literals is double. */
872 else
873 {
874 putithere->typed_val_float.type
875 = parse_type (par_state)->builtin_double;
876 }
877
878 if (!parse_float (p, len,
879 putithere->typed_val_float.type,
880 putithere->typed_val_float.val))
881 return ERROR;
882 return FLOAT;
883 }
884
885 /* Handle base-switching prefixes 0x, 0t, 0d, 0. */
886 if (p[0] == '0')
887 switch (p[1])
888 {
889 case 'x':
890 case 'X':
891 if (len >= 3)
892 {
893 p += 2;
894 base = 16;
895 len -= 2;
896 }
897 break;
898
899 case 't':
900 case 'T':
901 case 'd':
902 case 'D':
903 if (len >= 3)
904 {
905 p += 2;
906 base = 10;
907 len -= 2;
908 }
909 break;
910
911 default:
912 base = 8;
913 break;
914 }
915
916 while (len-- > 0)
917 {
918 c = *p++;
919 if (c >= 'A' && c <= 'Z')
920 c += 'a' - 'A';
921 if (c != 'l' && c != 'u')
922 n *= base;
923 if (c >= '0' && c <= '9')
924 {
925 if (found_suffix)
926 return ERROR;
927 n += i = c - '0';
928 }
929 else
930 {
931 if (base > 10 && c >= 'a' && c <= 'f')
932 {
933 if (found_suffix)
934 return ERROR;
935 n += i = c - 'a' + 10;
936 }
937 else if (c == 'l')
938 {
939 ++long_p;
940 found_suffix = 1;
941 }
942 else if (c == 'u')
943 {
944 unsigned_p = 1;
945 found_suffix = 1;
946 }
947 else
948 return ERROR; /* Char not a digit */
949 }
950 if (i >= base)
951 return ERROR; /* Invalid digit in this base. */
952
953 /* Portably test for overflow (only works for nonzero values, so make
954 a second check for zero). FIXME: Can't we just make n and prevn
955 unsigned and avoid this? */
956 if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
957 unsigned_p = 1; /* Try something unsigned. */
958
959 /* Portably test for unsigned overflow.
960 FIXME: This check is wrong; for example it doesn't find overflow
961 on 0x123456789 when LONGEST is 32 bits. */
962 if (c != 'l' && c != 'u' && n != 0)
963 {
964 if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n))
965 error (_("Numeric constant too large."));
966 }
967 prevn = n;
968 }
969
970 /* An integer constant is an int, a long, or a long long. An L
971 suffix forces it to be long; an LL suffix forces it to be long
972 long. If not forced to a larger size, it gets the first type of
973 the above that it fits in. To figure out whether it fits, we
974 shift it right and see whether anything remains. Note that we
975 can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
976 operation, because many compilers will warn about such a shift
977 (which always produces a zero result). Sometimes gdbarch_int_bit
978 or gdbarch_long_bit will be that big, sometimes not. To deal with
979 the case where it is we just always shift the value more than
980 once, with fewer bits each time. */
981
982 un = (ULONGEST)n >> 2;
983 if (long_p == 0
984 && (un >> (gdbarch_int_bit (parse_gdbarch (par_state)) - 2)) == 0)
985 {
986 high_bit
987 = ((ULONGEST)1) << (gdbarch_int_bit (parse_gdbarch (par_state)) - 1);
988
989 /* A large decimal (not hex or octal) constant (between INT_MAX
990 and UINT_MAX) is a long or unsigned long, according to ANSI,
991 never an unsigned int, but this code treats it as unsigned
992 int. This probably should be fixed. GCC gives a warning on
993 such constants. */
994
995 unsigned_type = parse_type (par_state)->builtin_unsigned_int;
996 signed_type = parse_type (par_state)->builtin_int;
997 }
998 else if (long_p <= 1
999 && (un >> (gdbarch_long_bit (parse_gdbarch (par_state)) - 2)) == 0)
1000 {
1001 high_bit
1002 = ((ULONGEST)1) << (gdbarch_long_bit (parse_gdbarch (par_state)) - 1);
1003 unsigned_type = parse_type (par_state)->builtin_unsigned_long;
1004 signed_type = parse_type (par_state)->builtin_long;
1005 }
1006 else
1007 {
1008 int shift;
1009 if (sizeof (ULONGEST) * HOST_CHAR_BIT
1010 < gdbarch_long_long_bit (parse_gdbarch (par_state)))
1011 /* A long long does not fit in a LONGEST. */
1012 shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1);
1013 else
1014 shift = (gdbarch_long_long_bit (parse_gdbarch (par_state)) - 1);
1015 high_bit = (ULONGEST) 1 << shift;
1016 unsigned_type = parse_type (par_state)->builtin_unsigned_long_long;
1017 signed_type = parse_type (par_state)->builtin_long_long;
1018 }
1019
1020 putithere->typed_val_int.val = n;
1021
1022 /* If the high bit of the worked out type is set then this number
1023 has to be unsigned. */
1024
1025 if (unsigned_p || (n & high_bit))
1026 {
1027 putithere->typed_val_int.type = unsigned_type;
1028 }
1029 else
1030 {
1031 putithere->typed_val_int.type = signed_type;
1032 }
1033
1034 return INT;
1035 }
1036
1037
1038 struct type_push
1039 {
1040 struct type *stored;
1041 struct type_push *next;
1042 };
1043
1044 static struct type_push *tp_top = NULL;
1045
1046 static void
1047 push_current_type (void)
1048 {
1049 struct type_push *tpnew;
1050 tpnew = (struct type_push *) malloc (sizeof (struct type_push));
1051 tpnew->next = tp_top;
1052 tpnew->stored = current_type;
1053 current_type = NULL;
1054 tp_top = tpnew;
1055 }
1056
1057 static void
1058 pop_current_type (void)
1059 {
1060 struct type_push *tp = tp_top;
1061 if (tp)
1062 {
1063 current_type = tp->stored;
1064 tp_top = tp->next;
1065 free (tp);
1066 }
1067 }
1068
1069 struct token
1070 {
1071 const char *oper;
1072 int token;
1073 enum exp_opcode opcode;
1074 };
1075
1076 static const struct token tokentab3[] =
1077 {
1078 {"shr", RSH, BINOP_END},
1079 {"shl", LSH, BINOP_END},
1080 {"and", ANDAND, BINOP_END},
1081 {"div", DIV, BINOP_END},
1082 {"not", NOT, BINOP_END},
1083 {"mod", MOD, BINOP_END},
1084 {"inc", INCREMENT, BINOP_END},
1085 {"dec", DECREMENT, BINOP_END},
1086 {"xor", XOR, BINOP_END}
1087 };
1088
1089 static const struct token tokentab2[] =
1090 {
1091 {"or", OR, BINOP_END},
1092 {"<>", NOTEQUAL, BINOP_END},
1093 {"<=", LEQ, BINOP_END},
1094 {">=", GEQ, BINOP_END},
1095 {":=", ASSIGN, BINOP_END},
1096 {"::", COLONCOLON, BINOP_END} };
1097
1098 /* Allocate uppercased var: */
1099 /* make an uppercased copy of tokstart. */
1100 static char *
1101 uptok (const char *tokstart, int namelen)
1102 {
1103 int i;
1104 char *uptokstart = (char *)malloc(namelen+1);
1105 for (i = 0;i <= namelen;i++)
1106 {
1107 if ((tokstart[i]>='a' && tokstart[i]<='z'))
1108 uptokstart[i] = tokstart[i]-('a'-'A');
1109 else
1110 uptokstart[i] = tokstart[i];
1111 }
1112 uptokstart[namelen]='\0';
1113 return uptokstart;
1114 }
1115
1116 /* Read one token, getting characters through lexptr. */
1117
1118 static int
1119 yylex (void)
1120 {
1121 int c;
1122 int namelen;
1123 unsigned int i;
1124 const char *tokstart;
1125 char *uptokstart;
1126 const char *tokptr;
1127 int explen, tempbufindex;
1128 static char *tempbuf;
1129 static int tempbufsize;
1130
1131 retry:
1132
1133 prev_lexptr = lexptr;
1134
1135 tokstart = lexptr;
1136 explen = strlen (lexptr);
1137
1138 /* See if it is a special token of length 3. */
1139 if (explen > 2)
1140 for (i = 0; i < sizeof (tokentab3) / sizeof (tokentab3[0]); i++)
1141 if (strncasecmp (tokstart, tokentab3[i].oper, 3) == 0
1142 && (!isalpha (tokentab3[i].oper[0]) || explen == 3
1143 || (!isalpha (tokstart[3])
1144 && !isdigit (tokstart[3]) && tokstart[3] != '_')))
1145 {
1146 lexptr += 3;
1147 yylval.opcode = tokentab3[i].opcode;
1148 return tokentab3[i].token;
1149 }
1150
1151 /* See if it is a special token of length 2. */
1152 if (explen > 1)
1153 for (i = 0; i < sizeof (tokentab2) / sizeof (tokentab2[0]); i++)
1154 if (strncasecmp (tokstart, tokentab2[i].oper, 2) == 0
1155 && (!isalpha (tokentab2[i].oper[0]) || explen == 2
1156 || (!isalpha (tokstart[2])
1157 && !isdigit (tokstart[2]) && tokstart[2] != '_')))
1158 {
1159 lexptr += 2;
1160 yylval.opcode = tokentab2[i].opcode;
1161 return tokentab2[i].token;
1162 }
1163
1164 switch (c = *tokstart)
1165 {
1166 case 0:
1167 if (search_field && parse_completion)
1168 return COMPLETE;
1169 else
1170 return 0;
1171
1172 case ' ':
1173 case '\t':
1174 case '\n':
1175 lexptr++;
1176 goto retry;
1177
1178 case '\'':
1179 /* We either have a character constant ('0' or '\177' for example)
1180 or we have a quoted symbol reference ('foo(int,int)' in object pascal
1181 for example). */
1182 lexptr++;
1183 c = *lexptr++;
1184 if (c == '\\')
1185 c = parse_escape (parse_gdbarch (pstate), &lexptr);
1186 else if (c == '\'')
1187 error (_("Empty character constant."));
1188
1189 yylval.typed_val_int.val = c;
1190 yylval.typed_val_int.type = parse_type (pstate)->builtin_char;
1191
1192 c = *lexptr++;
1193 if (c != '\'')
1194 {
1195 namelen = skip_quoted (tokstart) - tokstart;
1196 if (namelen > 2)
1197 {
1198 lexptr = tokstart + namelen;
1199 if (lexptr[-1] != '\'')
1200 error (_("Unmatched single quote."));
1201 namelen -= 2;
1202 tokstart++;
1203 uptokstart = uptok(tokstart,namelen);
1204 goto tryname;
1205 }
1206 error (_("Invalid character constant."));
1207 }
1208 return INT;
1209
1210 case '(':
1211 paren_depth++;
1212 lexptr++;
1213 return c;
1214
1215 case ')':
1216 if (paren_depth == 0)
1217 return 0;
1218 paren_depth--;
1219 lexptr++;
1220 return c;
1221
1222 case ',':
1223 if (comma_terminates && paren_depth == 0)
1224 return 0;
1225 lexptr++;
1226 return c;
1227
1228 case '.':
1229 /* Might be a floating point number. */
1230 if (lexptr[1] < '0' || lexptr[1] > '9')
1231 {
1232 goto symbol; /* Nope, must be a symbol. */
1233 }
1234
1235 /* FALL THRU into number case. */
1236
1237 case '0':
1238 case '1':
1239 case '2':
1240 case '3':
1241 case '4':
1242 case '5':
1243 case '6':
1244 case '7':
1245 case '8':
1246 case '9':
1247 {
1248 /* It's a number. */
1249 int got_dot = 0, got_e = 0, toktype;
1250 const char *p = tokstart;
1251 int hex = input_radix > 10;
1252
1253 if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
1254 {
1255 p += 2;
1256 hex = 1;
1257 }
1258 else if (c == '0' && (p[1]=='t' || p[1]=='T'
1259 || p[1]=='d' || p[1]=='D'))
1260 {
1261 p += 2;
1262 hex = 0;
1263 }
1264
1265 for (;; ++p)
1266 {
1267 /* This test includes !hex because 'e' is a valid hex digit
1268 and thus does not indicate a floating point number when
1269 the radix is hex. */
1270 if (!hex && !got_e && (*p == 'e' || *p == 'E'))
1271 got_dot = got_e = 1;
1272 /* This test does not include !hex, because a '.' always indicates
1273 a decimal floating point number regardless of the radix. */
1274 else if (!got_dot && *p == '.')
1275 got_dot = 1;
1276 else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
1277 && (*p == '-' || *p == '+'))
1278 /* This is the sign of the exponent, not the end of the
1279 number. */
1280 continue;
1281 /* We will take any letters or digits. parse_number will
1282 complain if past the radix, or if L or U are not final. */
1283 else if ((*p < '0' || *p > '9')
1284 && ((*p < 'a' || *p > 'z')
1285 && (*p < 'A' || *p > 'Z')))
1286 break;
1287 }
1288 toktype = parse_number (pstate, tokstart,
1289 p - tokstart, got_dot | got_e, &yylval);
1290 if (toktype == ERROR)
1291 {
1292 char *err_copy = (char *) alloca (p - tokstart + 1);
1293
1294 memcpy (err_copy, tokstart, p - tokstart);
1295 err_copy[p - tokstart] = 0;
1296 error (_("Invalid number \"%s\"."), err_copy);
1297 }
1298 lexptr = p;
1299 return toktype;
1300 }
1301
1302 case '+':
1303 case '-':
1304 case '*':
1305 case '/':
1306 case '|':
1307 case '&':
1308 case '^':
1309 case '~':
1310 case '!':
1311 case '@':
1312 case '<':
1313 case '>':
1314 case '[':
1315 case ']':
1316 case '?':
1317 case ':':
1318 case '=':
1319 case '{':
1320 case '}':
1321 symbol:
1322 lexptr++;
1323 return c;
1324
1325 case '"':
1326
1327 /* Build the gdb internal form of the input string in tempbuf,
1328 translating any standard C escape forms seen. Note that the
1329 buffer is null byte terminated *only* for the convenience of
1330 debugging gdb itself and printing the buffer contents when
1331 the buffer contains no embedded nulls. Gdb does not depend
1332 upon the buffer being null byte terminated, it uses the length
1333 string instead. This allows gdb to handle C strings (as well
1334 as strings in other languages) with embedded null bytes. */
1335
1336 tokptr = ++tokstart;
1337 tempbufindex = 0;
1338
1339 do {
1340 /* Grow the static temp buffer if necessary, including allocating
1341 the first one on demand. */
1342 if (tempbufindex + 1 >= tempbufsize)
1343 {
1344 tempbuf = (char *) realloc (tempbuf, tempbufsize += 64);
1345 }
1346
1347 switch (*tokptr)
1348 {
1349 case '\0':
1350 case '"':
1351 /* Do nothing, loop will terminate. */
1352 break;
1353 case '\\':
1354 ++tokptr;
1355 c = parse_escape (parse_gdbarch (pstate), &tokptr);
1356 if (c == -1)
1357 {
1358 continue;
1359 }
1360 tempbuf[tempbufindex++] = c;
1361 break;
1362 default:
1363 tempbuf[tempbufindex++] = *tokptr++;
1364 break;
1365 }
1366 } while ((*tokptr != '"') && (*tokptr != '\0'));
1367 if (*tokptr++ != '"')
1368 {
1369 error (_("Unterminated string in expression."));
1370 }
1371 tempbuf[tempbufindex] = '\0'; /* See note above. */
1372 yylval.sval.ptr = tempbuf;
1373 yylval.sval.length = tempbufindex;
1374 lexptr = tokptr;
1375 return (STRING);
1376 }
1377
1378 if (!(c == '_' || c == '$'
1379 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
1380 /* We must have come across a bad character (e.g. ';'). */
1381 error (_("Invalid character '%c' in expression."), c);
1382
1383 /* It's a name. See how long it is. */
1384 namelen = 0;
1385 for (c = tokstart[namelen];
1386 (c == '_' || c == '$' || (c >= '0' && c <= '9')
1387 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '<');)
1388 {
1389 /* Template parameter lists are part of the name.
1390 FIXME: This mishandles `print $a<4&&$a>3'. */
1391 if (c == '<')
1392 {
1393 int i = namelen;
1394 int nesting_level = 1;
1395 while (tokstart[++i])
1396 {
1397 if (tokstart[i] == '<')
1398 nesting_level++;
1399 else if (tokstart[i] == '>')
1400 {
1401 if (--nesting_level == 0)
1402 break;
1403 }
1404 }
1405 if (tokstart[i] == '>')
1406 namelen = i;
1407 else
1408 break;
1409 }
1410
1411 /* do NOT uppercase internals because of registers !!! */
1412 c = tokstart[++namelen];
1413 }
1414
1415 uptokstart = uptok(tokstart,namelen);
1416
1417 /* The token "if" terminates the expression and is NOT
1418 removed from the input stream. */
1419 if (namelen == 2 && uptokstart[0] == 'I' && uptokstart[1] == 'F')
1420 {
1421 free (uptokstart);
1422 return 0;
1423 }
1424
1425 lexptr += namelen;
1426
1427 tryname:
1428
1429 /* Catch specific keywords. Should be done with a data structure. */
1430 switch (namelen)
1431 {
1432 case 6:
1433 if (strcmp (uptokstart, "OBJECT") == 0)
1434 {
1435 free (uptokstart);
1436 return CLASS;
1437 }
1438 if (strcmp (uptokstart, "RECORD") == 0)
1439 {
1440 free (uptokstart);
1441 return STRUCT;
1442 }
1443 if (strcmp (uptokstart, "SIZEOF") == 0)
1444 {
1445 free (uptokstart);
1446 return SIZEOF;
1447 }
1448 break;
1449 case 5:
1450 if (strcmp (uptokstart, "CLASS") == 0)
1451 {
1452 free (uptokstart);
1453 return CLASS;
1454 }
1455 if (strcmp (uptokstart, "FALSE") == 0)
1456 {
1457 yylval.lval = 0;
1458 free (uptokstart);
1459 return FALSEKEYWORD;
1460 }
1461 break;
1462 case 4:
1463 if (strcmp (uptokstart, "TRUE") == 0)
1464 {
1465 yylval.lval = 1;
1466 free (uptokstart);
1467 return TRUEKEYWORD;
1468 }
1469 if (strcmp (uptokstart, "SELF") == 0)
1470 {
1471 /* Here we search for 'this' like
1472 inserted in FPC stabs debug info. */
1473 static const char this_name[] = "this";
1474
1475 if (lookup_symbol (this_name, expression_context_block,
1476 VAR_DOMAIN, NULL).symbol)
1477 {
1478 free (uptokstart);
1479 return THIS;
1480 }
1481 }
1482 break;
1483 default:
1484 break;
1485 }
1486
1487 yylval.sval.ptr = tokstart;
1488 yylval.sval.length = namelen;
1489
1490 if (*tokstart == '$')
1491 {
1492 char *tmp;
1493
1494 /* $ is the normal prefix for pascal hexadecimal values
1495 but this conflicts with the GDB use for debugger variables
1496 so in expression to enter hexadecimal values
1497 we still need to use C syntax with 0xff */
1498 write_dollar_variable (pstate, yylval.sval);
1499 tmp = (char *) alloca (namelen + 1);
1500 memcpy (tmp, tokstart, namelen);
1501 tmp[namelen] = '\0';
1502 intvar = lookup_only_internalvar (tmp + 1);
1503 free (uptokstart);
1504 return VARIABLE;
1505 }
1506
1507 /* Use token-type BLOCKNAME for symbols that happen to be defined as
1508 functions or symtabs. If this is not so, then ...
1509 Use token-type TYPENAME for symbols that happen to be defined
1510 currently as names of types; NAME for other symbols.
1511 The caller is not constrained to care about the distinction. */
1512 {
1513 char *tmp = copy_name (yylval.sval);
1514 struct symbol *sym;
1515 struct field_of_this_result is_a_field_of_this;
1516 int is_a_field = 0;
1517 int hextype;
1518
1519 is_a_field_of_this.type = NULL;
1520 if (search_field && current_type)
1521 is_a_field = (lookup_struct_elt_type (current_type, tmp, 1) != NULL);
1522 if (is_a_field)
1523 sym = NULL;
1524 else
1525 sym = lookup_symbol (tmp, expression_context_block,
1526 VAR_DOMAIN, &is_a_field_of_this).symbol;
1527 /* second chance uppercased (as Free Pascal does). */
1528 if (!sym && is_a_field_of_this.type == NULL && !is_a_field)
1529 {
1530 for (i = 0; i <= namelen; i++)
1531 {
1532 if ((tmp[i] >= 'a' && tmp[i] <= 'z'))
1533 tmp[i] -= ('a'-'A');
1534 }
1535 if (search_field && current_type)
1536 is_a_field = (lookup_struct_elt_type (current_type, tmp, 1) != NULL);
1537 if (is_a_field)
1538 sym = NULL;
1539 else
1540 sym = lookup_symbol (tmp, expression_context_block,
1541 VAR_DOMAIN, &is_a_field_of_this).symbol;
1542 }
1543 /* Third chance Capitalized (as GPC does). */
1544 if (!sym && is_a_field_of_this.type == NULL && !is_a_field)
1545 {
1546 for (i = 0; i <= namelen; i++)
1547 {
1548 if (i == 0)
1549 {
1550 if ((tmp[i] >= 'a' && tmp[i] <= 'z'))
1551 tmp[i] -= ('a'-'A');
1552 }
1553 else
1554 if ((tmp[i] >= 'A' && tmp[i] <= 'Z'))
1555 tmp[i] -= ('A'-'a');
1556 }
1557 if (search_field && current_type)
1558 is_a_field = (lookup_struct_elt_type (current_type, tmp, 1) != NULL);
1559 if (is_a_field)
1560 sym = NULL;
1561 else
1562 sym = lookup_symbol (tmp, expression_context_block,
1563 VAR_DOMAIN, &is_a_field_of_this).symbol;
1564 }
1565
1566 if (is_a_field || (is_a_field_of_this.type != NULL))
1567 {
1568 tempbuf = (char *) realloc (tempbuf, namelen + 1);
1569 strncpy (tempbuf, tmp, namelen);
1570 tempbuf [namelen] = 0;
1571 yylval.sval.ptr = tempbuf;
1572 yylval.sval.length = namelen;
1573 yylval.ssym.sym.symbol = NULL;
1574 yylval.ssym.sym.block = NULL;
1575 free (uptokstart);
1576 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1577 if (is_a_field)
1578 return FIELDNAME;
1579 else
1580 return NAME;
1581 }
1582 /* Call lookup_symtab, not lookup_partial_symtab, in case there are
1583 no psymtabs (coff, xcoff, or some future change to blow away the
1584 psymtabs once once symbols are read). */
1585 if ((sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
1586 || lookup_symtab (tmp))
1587 {
1588 yylval.ssym.sym.symbol = sym;
1589 yylval.ssym.sym.block = NULL;
1590 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1591 free (uptokstart);
1592 return BLOCKNAME;
1593 }
1594 if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
1595 {
1596 #if 1
1597 /* Despite the following flaw, we need to keep this code enabled.
1598 Because we can get called from check_stub_method, if we don't
1599 handle nested types then it screws many operations in any
1600 program which uses nested types. */
1601 /* In "A::x", if x is a member function of A and there happens
1602 to be a type (nested or not, since the stabs don't make that
1603 distinction) named x, then this code incorrectly thinks we
1604 are dealing with nested types rather than a member function. */
1605
1606 const char *p;
1607 const char *namestart;
1608 struct symbol *best_sym;
1609
1610 /* Look ahead to detect nested types. This probably should be
1611 done in the grammar, but trying seemed to introduce a lot
1612 of shift/reduce and reduce/reduce conflicts. It's possible
1613 that it could be done, though. Or perhaps a non-grammar, but
1614 less ad hoc, approach would work well. */
1615
1616 /* Since we do not currently have any way of distinguishing
1617 a nested type from a non-nested one (the stabs don't tell
1618 us whether a type is nested), we just ignore the
1619 containing type. */
1620
1621 p = lexptr;
1622 best_sym = sym;
1623 while (1)
1624 {
1625 /* Skip whitespace. */
1626 while (*p == ' ' || *p == '\t' || *p == '\n')
1627 ++p;
1628 if (*p == ':' && p[1] == ':')
1629 {
1630 /* Skip the `::'. */
1631 p += 2;
1632 /* Skip whitespace. */
1633 while (*p == ' ' || *p == '\t' || *p == '\n')
1634 ++p;
1635 namestart = p;
1636 while (*p == '_' || *p == '$' || (*p >= '0' && *p <= '9')
1637 || (*p >= 'a' && *p <= 'z')
1638 || (*p >= 'A' && *p <= 'Z'))
1639 ++p;
1640 if (p != namestart)
1641 {
1642 struct symbol *cur_sym;
1643 /* As big as the whole rest of the expression, which is
1644 at least big enough. */
1645 char *ncopy
1646 = (char *) alloca (strlen (tmp) + strlen (namestart)
1647 + 3);
1648 char *tmp1;
1649
1650 tmp1 = ncopy;
1651 memcpy (tmp1, tmp, strlen (tmp));
1652 tmp1 += strlen (tmp);
1653 memcpy (tmp1, "::", 2);
1654 tmp1 += 2;
1655 memcpy (tmp1, namestart, p - namestart);
1656 tmp1[p - namestart] = '\0';
1657 cur_sym = lookup_symbol (ncopy, expression_context_block,
1658 VAR_DOMAIN, NULL).symbol;
1659 if (cur_sym)
1660 {
1661 if (SYMBOL_CLASS (cur_sym) == LOC_TYPEDEF)
1662 {
1663 best_sym = cur_sym;
1664 lexptr = p;
1665 }
1666 else
1667 break;
1668 }
1669 else
1670 break;
1671 }
1672 else
1673 break;
1674 }
1675 else
1676 break;
1677 }
1678
1679 yylval.tsym.type = SYMBOL_TYPE (best_sym);
1680 #else /* not 0 */
1681 yylval.tsym.type = SYMBOL_TYPE (sym);
1682 #endif /* not 0 */
1683 free (uptokstart);
1684 return TYPENAME;
1685 }
1686 yylval.tsym.type
1687 = language_lookup_primitive_type (parse_language (pstate),
1688 parse_gdbarch (pstate), tmp);
1689 if (yylval.tsym.type != NULL)
1690 {
1691 free (uptokstart);
1692 return TYPENAME;
1693 }
1694
1695 /* Input names that aren't symbols but ARE valid hex numbers,
1696 when the input radix permits them, can be names or numbers
1697 depending on the parse. Note we support radixes > 16 here. */
1698 if (!sym
1699 && ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10)
1700 || (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10)))
1701 {
1702 YYSTYPE newlval; /* Its value is ignored. */
1703 hextype = parse_number (pstate, tokstart, namelen, 0, &newlval);
1704 if (hextype == INT)
1705 {
1706 yylval.ssym.sym.symbol = sym;
1707 yylval.ssym.sym.block = NULL;
1708 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL;
1709 free (uptokstart);
1710 return NAME_OR_INT;
1711 }
1712 }
1713
1714 free(uptokstart);
1715 /* Any other kind of symbol. */
1716 yylval.ssym.sym.symbol = sym;
1717 yylval.ssym.sym.block = NULL;
1718 return NAME;
1719 }
1720 }
1721
1722 int
1723 pascal_parse (struct parser_state *par_state)
1724 {
1725 /* Setting up the parser state. */
1726 scoped_restore pstate_restore = make_scoped_restore (&pstate);
1727 gdb_assert (par_state != NULL);
1728 pstate = par_state;
1729
1730 return yyparse ();
1731 }
1732
1733 void
1734 yyerror (const char *msg)
1735 {
1736 if (prev_lexptr)
1737 lexptr = prev_lexptr;
1738
1739 error (_("A %s in expression, near `%s'."), (msg ? msg : "error"), lexptr);
1740 }