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