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