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