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