Remove config.if.
[deliverable/binutils-gdb.git] / gdb / c-exp.y
1 /* YACC parser for C expressions, for GDB.
2 Copyright 1986, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
3 1998, 1999, 2000, 2003, 2004
4 Free Software Foundation, Inc.
5
6 This file is part of GDB.
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
12
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
21
22 /* Parse a C expression from text in a string,
23 and return the result as a struct expression pointer.
24 That structure contains arithmetic operations in reverse polish,
25 with constants represented by operations that are followed by special data.
26 See expression.h for the details of the format.
27 What is important here is that it can be built up sequentially
28 during the process of parsing; the lower levels of the tree always
29 come first in the result.
30
31 Note that malloc's and realloc's in this file are transformed to
32 xmalloc and xrealloc respectively by the same sed command in the
33 makefile that remaps any other malloc/realloc inserted by the parser
34 generator. Doing this with #defines and trying to control the interaction
35 with include files (<malloc.h> and <stdlib.h> for example) just became
36 too messy, particularly when such includes can be inserted at random
37 times by the parser generator. */
38
39 %{
40
41 #include "defs.h"
42 #include "gdb_string.h"
43 #include <ctype.h>
44 #include "expression.h"
45 #include "value.h"
46 #include "parser-defs.h"
47 #include "language.h"
48 #include "c-lang.h"
49 #include "bfd.h" /* Required by objfiles.h. */
50 #include "symfile.h" /* Required by objfiles.h. */
51 #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
52 #include "charset.h"
53 #include "block.h"
54 #include "cp-support.h"
55
56 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
57 as well as gratuitiously global symbol names, so we can have multiple
58 yacc generated parsers in gdb. Note that these are only the variables
59 produced by yacc. If other parser generators (bison, byacc, etc) produce
60 additional global names that conflict at link time, then those parser
61 generators need to be fixed instead of adding those names to this list. */
62
63 #define yymaxdepth c_maxdepth
64 #define yyparse c_parse
65 #define yylex c_lex
66 #define yyerror c_error
67 #define yylval c_lval
68 #define yychar c_char
69 #define yydebug c_debug
70 #define yypact c_pact
71 #define yyr1 c_r1
72 #define yyr2 c_r2
73 #define yydef c_def
74 #define yychk c_chk
75 #define yypgo c_pgo
76 #define yyact c_act
77 #define yyexca c_exca
78 #define yyerrflag c_errflag
79 #define yynerrs c_nerrs
80 #define yyps c_ps
81 #define yypv c_pv
82 #define yys c_s
83 #define yy_yys c_yys
84 #define yystate c_state
85 #define yytmp c_tmp
86 #define yyv c_v
87 #define yy_yyv c_yyv
88 #define yyval c_val
89 #define yylloc c_lloc
90 #define yyreds c_reds /* With YYDEBUG defined */
91 #define yytoks c_toks /* With YYDEBUG defined */
92 #define yyname c_name /* With YYDEBUG defined */
93 #define yyrule c_rule /* With YYDEBUG defined */
94 #define yylhs c_yylhs
95 #define yylen c_yylen
96 #define yydefred c_yydefred
97 #define yydgoto c_yydgoto
98 #define yysindex c_yysindex
99 #define yyrindex c_yyrindex
100 #define yygindex c_yygindex
101 #define yytable c_yytable
102 #define yycheck c_yycheck
103
104 #ifndef YYDEBUG
105 #define YYDEBUG 1 /* Default to yydebug support */
106 #endif
107
108 #define YYFPRINTF parser_fprintf
109
110 int yyparse (void);
111
112 static int yylex (void);
113
114 void yyerror (char *);
115
116 %}
117
118 /* Although the yacc "value" of an expression is not used,
119 since the result is stored in the structure being created,
120 other node types do have values. */
121
122 %union
123 {
124 LONGEST lval;
125 struct {
126 LONGEST val;
127 struct type *type;
128 } typed_val_int;
129 struct {
130 DOUBLEST dval;
131 struct type *type;
132 } typed_val_float;
133 struct symbol *sym;
134 struct type *tval;
135 struct stoken sval;
136 struct ttype tsym;
137 struct symtoken ssym;
138 int voidval;
139 struct block *bval;
140 enum exp_opcode opcode;
141 struct internalvar *ivar;
142
143 struct type **tvec;
144 int *ivec;
145 }
146
147 %{
148 /* YYSTYPE gets defined by %union */
149 static int parse_number (char *, int, int, YYSTYPE *);
150 %}
151
152 %type <voidval> exp exp1 type_exp start variable qualified_name lcurly
153 %type <lval> rcurly
154 %type <tval> type typebase qualified_type
155 %type <tvec> nonempty_typelist
156 /* %type <bval> block */
157
158 /* Fancy type parsing. */
159 %type <voidval> func_mod direct_abs_decl abs_decl
160 %type <tval> ptype
161 %type <lval> array_mod
162
163 %token <typed_val_int> INT
164 %token <typed_val_float> FLOAT
165
166 /* Both NAME and TYPENAME tokens represent symbols in the input,
167 and both convey their data as strings.
168 But a TYPENAME is a string that happens to be defined as a typedef
169 or builtin type name (such as int or char)
170 and a NAME is any other symbol.
171 Contexts where this distinction is not important can use the
172 nonterminal "name", which matches either NAME or TYPENAME. */
173
174 %token <sval> STRING
175 %token <ssym> NAME /* BLOCKNAME defined below to give it higher precedence. */
176 %token <tsym> TYPENAME
177 %type <sval> name
178 %type <ssym> name_not_typename
179 %type <tsym> typename
180
181 /* A NAME_OR_INT is a symbol which is not known in the symbol table,
182 but which would parse as a valid number in the current input radix.
183 E.g. "c" when input_radix==16. Depending on the parse, it will be
184 turned into a name or into a number. */
185
186 %token <ssym> NAME_OR_INT
187
188 %token STRUCT CLASS UNION ENUM SIZEOF UNSIGNED COLONCOLON
189 %token TEMPLATE
190 %token ERROR
191
192 /* Special type cases, put in to allow the parser to distinguish different
193 legal basetypes. */
194 %token SIGNED_KEYWORD LONG SHORT INT_KEYWORD CONST_KEYWORD VOLATILE_KEYWORD DOUBLE_KEYWORD
195
196 %token <voidval> VARIABLE
197
198 %token <opcode> ASSIGN_MODIFY
199
200 /* C++ */
201 %token TRUEKEYWORD
202 %token FALSEKEYWORD
203
204
205 %left ','
206 %left ABOVE_COMMA
207 %right '=' ASSIGN_MODIFY
208 %right '?'
209 %left OROR
210 %left ANDAND
211 %left '|'
212 %left '^'
213 %left '&'
214 %left EQUAL NOTEQUAL
215 %left '<' '>' LEQ GEQ
216 %left LSH RSH
217 %left '@'
218 %left '+' '-'
219 %left '*' '/' '%'
220 %right UNARY INCREMENT DECREMENT
221 %right ARROW '.' '[' '('
222 %token <ssym> BLOCKNAME
223 %token <bval> FILENAME
224 %type <bval> block
225 %left COLONCOLON
226
227 \f
228 %%
229
230 start : exp1
231 | type_exp
232 ;
233
234 type_exp: type
235 { write_exp_elt_opcode(OP_TYPE);
236 write_exp_elt_type($1);
237 write_exp_elt_opcode(OP_TYPE);}
238 ;
239
240 /* Expressions, including the comma operator. */
241 exp1 : exp
242 | exp1 ',' exp
243 { write_exp_elt_opcode (BINOP_COMMA); }
244 ;
245
246 /* Expressions, not including the comma operator. */
247 exp : '*' exp %prec UNARY
248 { write_exp_elt_opcode (UNOP_IND); }
249 ;
250
251 exp : '&' exp %prec UNARY
252 { write_exp_elt_opcode (UNOP_ADDR); }
253 ;
254
255 exp : '-' exp %prec UNARY
256 { write_exp_elt_opcode (UNOP_NEG); }
257 ;
258
259 exp : '!' exp %prec UNARY
260 { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
261 ;
262
263 exp : '~' exp %prec UNARY
264 { write_exp_elt_opcode (UNOP_COMPLEMENT); }
265 ;
266
267 exp : INCREMENT exp %prec UNARY
268 { write_exp_elt_opcode (UNOP_PREINCREMENT); }
269 ;
270
271 exp : DECREMENT exp %prec UNARY
272 { write_exp_elt_opcode (UNOP_PREDECREMENT); }
273 ;
274
275 exp : exp INCREMENT %prec UNARY
276 { write_exp_elt_opcode (UNOP_POSTINCREMENT); }
277 ;
278
279 exp : exp DECREMENT %prec UNARY
280 { write_exp_elt_opcode (UNOP_POSTDECREMENT); }
281 ;
282
283 exp : SIZEOF exp %prec UNARY
284 { write_exp_elt_opcode (UNOP_SIZEOF); }
285 ;
286
287 exp : exp ARROW name
288 { write_exp_elt_opcode (STRUCTOP_PTR);
289 write_exp_string ($3);
290 write_exp_elt_opcode (STRUCTOP_PTR); }
291 ;
292
293 exp : exp ARROW qualified_name
294 { /* exp->type::name becomes exp->*(&type::name) */
295 /* Note: this doesn't work if name is a
296 static member! FIXME */
297 write_exp_elt_opcode (UNOP_ADDR);
298 write_exp_elt_opcode (STRUCTOP_MPTR); }
299 ;
300
301 exp : exp ARROW '*' exp
302 { write_exp_elt_opcode (STRUCTOP_MPTR); }
303 ;
304
305 exp : exp '.' name
306 { write_exp_elt_opcode (STRUCTOP_STRUCT);
307 write_exp_string ($3);
308 write_exp_elt_opcode (STRUCTOP_STRUCT); }
309 ;
310
311 exp : exp '.' qualified_name
312 { /* exp.type::name becomes exp.*(&type::name) */
313 /* Note: this doesn't work if name is a
314 static member! FIXME */
315 write_exp_elt_opcode (UNOP_ADDR);
316 write_exp_elt_opcode (STRUCTOP_MEMBER); }
317 ;
318
319 exp : exp '.' '*' exp
320 { write_exp_elt_opcode (STRUCTOP_MEMBER); }
321 ;
322
323 exp : exp '[' exp1 ']'
324 { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
325 ;
326
327 exp : exp '('
328 /* This is to save the value of arglist_len
329 being accumulated by an outer function call. */
330 { start_arglist (); }
331 arglist ')' %prec ARROW
332 { write_exp_elt_opcode (OP_FUNCALL);
333 write_exp_elt_longcst ((LONGEST) end_arglist ());
334 write_exp_elt_opcode (OP_FUNCALL); }
335 ;
336
337 lcurly : '{'
338 { start_arglist (); }
339 ;
340
341 arglist :
342 ;
343
344 arglist : exp
345 { arglist_len = 1; }
346 ;
347
348 arglist : arglist ',' exp %prec ABOVE_COMMA
349 { arglist_len++; }
350 ;
351
352 rcurly : '}'
353 { $$ = end_arglist () - 1; }
354 ;
355 exp : lcurly arglist rcurly %prec ARROW
356 { write_exp_elt_opcode (OP_ARRAY);
357 write_exp_elt_longcst ((LONGEST) 0);
358 write_exp_elt_longcst ((LONGEST) $3);
359 write_exp_elt_opcode (OP_ARRAY); }
360 ;
361
362 exp : lcurly type rcurly exp %prec UNARY
363 { write_exp_elt_opcode (UNOP_MEMVAL);
364 write_exp_elt_type ($2);
365 write_exp_elt_opcode (UNOP_MEMVAL); }
366 ;
367
368 exp : '(' type ')' exp %prec UNARY
369 { write_exp_elt_opcode (UNOP_CAST);
370 write_exp_elt_type ($2);
371 write_exp_elt_opcode (UNOP_CAST); }
372 ;
373
374 exp : '(' exp1 ')'
375 { }
376 ;
377
378 /* Binary operators in order of decreasing precedence. */
379
380 exp : exp '@' exp
381 { write_exp_elt_opcode (BINOP_REPEAT); }
382 ;
383
384 exp : exp '*' exp
385 { write_exp_elt_opcode (BINOP_MUL); }
386 ;
387
388 exp : exp '/' exp
389 { write_exp_elt_opcode (BINOP_DIV); }
390 ;
391
392 exp : exp '%' exp
393 { write_exp_elt_opcode (BINOP_REM); }
394 ;
395
396 exp : exp '+' exp
397 { write_exp_elt_opcode (BINOP_ADD); }
398 ;
399
400 exp : exp '-' exp
401 { write_exp_elt_opcode (BINOP_SUB); }
402 ;
403
404 exp : exp LSH exp
405 { write_exp_elt_opcode (BINOP_LSH); }
406 ;
407
408 exp : exp RSH exp
409 { write_exp_elt_opcode (BINOP_RSH); }
410 ;
411
412 exp : exp EQUAL exp
413 { write_exp_elt_opcode (BINOP_EQUAL); }
414 ;
415
416 exp : exp NOTEQUAL exp
417 { write_exp_elt_opcode (BINOP_NOTEQUAL); }
418 ;
419
420 exp : exp LEQ exp
421 { write_exp_elt_opcode (BINOP_LEQ); }
422 ;
423
424 exp : exp GEQ exp
425 { write_exp_elt_opcode (BINOP_GEQ); }
426 ;
427
428 exp : exp '<' exp
429 { write_exp_elt_opcode (BINOP_LESS); }
430 ;
431
432 exp : exp '>' exp
433 { write_exp_elt_opcode (BINOP_GTR); }
434 ;
435
436 exp : exp '&' exp
437 { write_exp_elt_opcode (BINOP_BITWISE_AND); }
438 ;
439
440 exp : exp '^' exp
441 { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
442 ;
443
444 exp : exp '|' exp
445 { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
446 ;
447
448 exp : exp ANDAND exp
449 { write_exp_elt_opcode (BINOP_LOGICAL_AND); }
450 ;
451
452 exp : exp OROR exp
453 { write_exp_elt_opcode (BINOP_LOGICAL_OR); }
454 ;
455
456 exp : exp '?' exp ':' exp %prec '?'
457 { write_exp_elt_opcode (TERNOP_COND); }
458 ;
459
460 exp : exp '=' exp
461 { write_exp_elt_opcode (BINOP_ASSIGN); }
462 ;
463
464 exp : exp ASSIGN_MODIFY exp
465 { write_exp_elt_opcode (BINOP_ASSIGN_MODIFY);
466 write_exp_elt_opcode ($2);
467 write_exp_elt_opcode (BINOP_ASSIGN_MODIFY); }
468 ;
469
470 exp : INT
471 { write_exp_elt_opcode (OP_LONG);
472 write_exp_elt_type ($1.type);
473 write_exp_elt_longcst ((LONGEST)($1.val));
474 write_exp_elt_opcode (OP_LONG); }
475 ;
476
477 exp : NAME_OR_INT
478 { YYSTYPE val;
479 parse_number ($1.stoken.ptr, $1.stoken.length, 0, &val);
480 write_exp_elt_opcode (OP_LONG);
481 write_exp_elt_type (val.typed_val_int.type);
482 write_exp_elt_longcst ((LONGEST)val.typed_val_int.val);
483 write_exp_elt_opcode (OP_LONG);
484 }
485 ;
486
487
488 exp : FLOAT
489 { write_exp_elt_opcode (OP_DOUBLE);
490 write_exp_elt_type ($1.type);
491 write_exp_elt_dblcst ($1.dval);
492 write_exp_elt_opcode (OP_DOUBLE); }
493 ;
494
495 exp : variable
496 ;
497
498 exp : VARIABLE
499 /* Already written by write_dollar_variable. */
500 ;
501
502 exp : SIZEOF '(' type ')' %prec UNARY
503 { write_exp_elt_opcode (OP_LONG);
504 write_exp_elt_type (builtin_type (current_gdbarch)->builtin_int);
505 CHECK_TYPEDEF ($3);
506 write_exp_elt_longcst ((LONGEST) TYPE_LENGTH ($3));
507 write_exp_elt_opcode (OP_LONG); }
508 ;
509
510 exp : STRING
511 { /* C strings are converted into array constants with
512 an explicit null byte added at the end. Thus
513 the array upper bound is the string length.
514 There is no such thing in C as a completely empty
515 string. */
516 char *sp = $1.ptr; int count = $1.length;
517 while (count-- > 0)
518 {
519 write_exp_elt_opcode (OP_LONG);
520 write_exp_elt_type (builtin_type (current_gdbarch)->builtin_char);
521 write_exp_elt_longcst ((LONGEST)(*sp++));
522 write_exp_elt_opcode (OP_LONG);
523 }
524 write_exp_elt_opcode (OP_LONG);
525 write_exp_elt_type (builtin_type (current_gdbarch)->builtin_char);
526 write_exp_elt_longcst ((LONGEST)'\0');
527 write_exp_elt_opcode (OP_LONG);
528 write_exp_elt_opcode (OP_ARRAY);
529 write_exp_elt_longcst ((LONGEST) 0);
530 write_exp_elt_longcst ((LONGEST) ($1.length));
531 write_exp_elt_opcode (OP_ARRAY); }
532 ;
533
534 /* C++. */
535 exp : TRUEKEYWORD
536 { write_exp_elt_opcode (OP_LONG);
537 write_exp_elt_type (builtin_type (current_gdbarch)->builtin_bool);
538 write_exp_elt_longcst ((LONGEST) 1);
539 write_exp_elt_opcode (OP_LONG); }
540 ;
541
542 exp : FALSEKEYWORD
543 { write_exp_elt_opcode (OP_LONG);
544 write_exp_elt_type (builtin_type (current_gdbarch)->builtin_bool);
545 write_exp_elt_longcst ((LONGEST) 0);
546 write_exp_elt_opcode (OP_LONG); }
547 ;
548
549 /* end of C++. */
550
551 block : BLOCKNAME
552 {
553 if ($1.sym)
554 $$ = SYMBOL_BLOCK_VALUE ($1.sym);
555 else
556 error ("No file or function \"%s\".",
557 copy_name ($1.stoken));
558 }
559 | FILENAME
560 {
561 $$ = $1;
562 }
563 ;
564
565 block : block COLONCOLON name
566 { struct symbol *tem
567 = lookup_symbol (copy_name ($3), $1,
568 VAR_DOMAIN, (int *) NULL,
569 (struct symtab **) NULL);
570 if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
571 error ("No function \"%s\" in specified context.",
572 copy_name ($3));
573 $$ = SYMBOL_BLOCK_VALUE (tem); }
574 ;
575
576 variable: block COLONCOLON name
577 { struct symbol *sym;
578 sym = lookup_symbol (copy_name ($3), $1,
579 VAR_DOMAIN, (int *) NULL,
580 (struct symtab **) NULL);
581 if (sym == 0)
582 error ("No symbol \"%s\" in specified context.",
583 copy_name ($3));
584
585 write_exp_elt_opcode (OP_VAR_VALUE);
586 /* block_found is set by lookup_symbol. */
587 write_exp_elt_block (block_found);
588 write_exp_elt_sym (sym);
589 write_exp_elt_opcode (OP_VAR_VALUE); }
590 ;
591
592 qualified_name: typebase COLONCOLON name
593 {
594 struct type *type = $1;
595 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
596 && TYPE_CODE (type) != TYPE_CODE_UNION
597 && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
598 error ("`%s' is not defined as an aggregate type.",
599 TYPE_NAME (type));
600
601 write_exp_elt_opcode (OP_SCOPE);
602 write_exp_elt_type (type);
603 write_exp_string ($3);
604 write_exp_elt_opcode (OP_SCOPE);
605 }
606 | typebase COLONCOLON '~' name
607 {
608 struct type *type = $1;
609 struct stoken tmp_token;
610 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
611 && TYPE_CODE (type) != TYPE_CODE_UNION
612 && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
613 error ("`%s' is not defined as an aggregate type.",
614 TYPE_NAME (type));
615
616 tmp_token.ptr = (char*) alloca ($4.length + 2);
617 tmp_token.length = $4.length + 1;
618 tmp_token.ptr[0] = '~';
619 memcpy (tmp_token.ptr+1, $4.ptr, $4.length);
620 tmp_token.ptr[tmp_token.length] = 0;
621
622 /* Check for valid destructor name. */
623 destructor_name_p (tmp_token.ptr, type);
624 write_exp_elt_opcode (OP_SCOPE);
625 write_exp_elt_type (type);
626 write_exp_string (tmp_token);
627 write_exp_elt_opcode (OP_SCOPE);
628 }
629 ;
630
631 variable: qualified_name
632 | COLONCOLON name
633 {
634 char *name = copy_name ($2);
635 struct symbol *sym;
636 struct minimal_symbol *msymbol;
637
638 sym =
639 lookup_symbol (name, (const struct block *) NULL,
640 VAR_DOMAIN, (int *) NULL,
641 (struct symtab **) NULL);
642 if (sym)
643 {
644 write_exp_elt_opcode (OP_VAR_VALUE);
645 write_exp_elt_block (NULL);
646 write_exp_elt_sym (sym);
647 write_exp_elt_opcode (OP_VAR_VALUE);
648 break;
649 }
650
651 msymbol = lookup_minimal_symbol (name, NULL, NULL);
652 if (msymbol != NULL)
653 {
654 write_exp_msymbol (msymbol,
655 lookup_function_type (builtin_type (current_gdbarch)->builtin_int),
656 builtin_type (current_gdbarch)->builtin_int);
657 }
658 else
659 if (!have_full_symbols () && !have_partial_symbols ())
660 error ("No symbol table is loaded. Use the \"file\" command.");
661 else
662 error ("No symbol \"%s\" in current context.", name);
663 }
664 ;
665
666 variable: name_not_typename
667 { struct symbol *sym = $1.sym;
668
669 if (sym)
670 {
671 if (symbol_read_needs_frame (sym))
672 {
673 if (innermost_block == 0 ||
674 contained_in (block_found,
675 innermost_block))
676 innermost_block = block_found;
677 }
678
679 write_exp_elt_opcode (OP_VAR_VALUE);
680 /* We want to use the selected frame, not
681 another more inner frame which happens to
682 be in the same block. */
683 write_exp_elt_block (NULL);
684 write_exp_elt_sym (sym);
685 write_exp_elt_opcode (OP_VAR_VALUE);
686 }
687 else if ($1.is_a_field_of_this)
688 {
689 /* C++: it hangs off of `this'. Must
690 not inadvertently convert from a method call
691 to data ref. */
692 if (innermost_block == 0 ||
693 contained_in (block_found, innermost_block))
694 innermost_block = block_found;
695 write_exp_elt_opcode (OP_THIS);
696 write_exp_elt_opcode (OP_THIS);
697 write_exp_elt_opcode (STRUCTOP_PTR);
698 write_exp_string ($1.stoken);
699 write_exp_elt_opcode (STRUCTOP_PTR);
700 }
701 else
702 {
703 struct minimal_symbol *msymbol;
704 char *arg = copy_name ($1.stoken);
705
706 msymbol =
707 lookup_minimal_symbol (arg, NULL, NULL);
708 if (msymbol != NULL)
709 {
710 write_exp_msymbol (msymbol,
711 lookup_function_type (builtin_type (current_gdbarch)->builtin_int),
712 builtin_type (current_gdbarch)->builtin_int);
713 }
714 else if (!have_full_symbols () && !have_partial_symbols ())
715 error ("No symbol table is loaded. Use the \"file\" command.");
716 else
717 error ("No symbol \"%s\" in current context.",
718 copy_name ($1.stoken));
719 }
720 }
721 ;
722
723 space_identifier : '@' NAME
724 { push_type_address_space (copy_name ($2.stoken));
725 push_type (tp_space_identifier);
726 }
727 ;
728
729 const_or_volatile: const_or_volatile_noopt
730 |
731 ;
732
733 cv_with_space_id : const_or_volatile space_identifier const_or_volatile
734 ;
735
736 const_or_volatile_or_space_identifier_noopt: cv_with_space_id
737 | const_or_volatile_noopt
738 ;
739
740 const_or_volatile_or_space_identifier:
741 const_or_volatile_or_space_identifier_noopt
742 |
743 ;
744
745 abs_decl: '*'
746 { push_type (tp_pointer); $$ = 0; }
747 | '*' abs_decl
748 { push_type (tp_pointer); $$ = $2; }
749 | '&'
750 { push_type (tp_reference); $$ = 0; }
751 | '&' abs_decl
752 { push_type (tp_reference); $$ = $2; }
753 | direct_abs_decl
754 ;
755
756 direct_abs_decl: '(' abs_decl ')'
757 { $$ = $2; }
758 | direct_abs_decl array_mod
759 {
760 push_type_int ($2);
761 push_type (tp_array);
762 }
763 | array_mod
764 {
765 push_type_int ($1);
766 push_type (tp_array);
767 $$ = 0;
768 }
769
770 | direct_abs_decl func_mod
771 { push_type (tp_function); }
772 | func_mod
773 { push_type (tp_function); }
774 ;
775
776 array_mod: '[' ']'
777 { $$ = -1; }
778 | '[' INT ']'
779 { $$ = $2.val; }
780 ;
781
782 func_mod: '(' ')'
783 { $$ = 0; }
784 | '(' nonempty_typelist ')'
785 { free ($2); $$ = 0; }
786 ;
787
788 /* We used to try to recognize more pointer to member types here, but
789 that didn't work (shift/reduce conflicts meant that these rules never
790 got executed). The problem is that
791 int (foo::bar::baz::bizzle)
792 is a function type but
793 int (foo::bar::baz::bizzle::*)
794 is a pointer to member type. Stroustrup loses again! */
795
796 type : ptype
797 | typebase COLONCOLON '*'
798 { $$ = lookup_member_type (builtin_type (current_gdbarch)->builtin_int, $1); }
799 ;
800
801 typebase /* Implements (approximately): (type-qualifier)* type-specifier */
802 : TYPENAME
803 { $$ = $1.type; }
804 | INT_KEYWORD
805 { $$ = builtin_type (current_gdbarch)->builtin_int; }
806 | LONG
807 { $$ = builtin_type (current_gdbarch)->builtin_long; }
808 | SHORT
809 { $$ = builtin_type (current_gdbarch)->builtin_short; }
810 | LONG INT_KEYWORD
811 { $$ = builtin_type (current_gdbarch)->builtin_long; }
812 | LONG SIGNED_KEYWORD INT_KEYWORD
813 { $$ = builtin_type (current_gdbarch)->builtin_long; }
814 | LONG SIGNED_KEYWORD
815 { $$ = builtin_type (current_gdbarch)->builtin_long; }
816 | SIGNED_KEYWORD LONG INT_KEYWORD
817 { $$ = builtin_type (current_gdbarch)->builtin_long; }
818 | UNSIGNED LONG INT_KEYWORD
819 { $$ = builtin_type (current_gdbarch)->builtin_unsigned_long; }
820 | LONG UNSIGNED INT_KEYWORD
821 { $$ = builtin_type (current_gdbarch)->builtin_unsigned_long; }
822 | LONG UNSIGNED
823 { $$ = builtin_type (current_gdbarch)->builtin_unsigned_long; }
824 | LONG LONG
825 { $$ = builtin_type (current_gdbarch)->builtin_long_long; }
826 | LONG LONG INT_KEYWORD
827 { $$ = builtin_type (current_gdbarch)->builtin_long_long; }
828 | LONG LONG SIGNED_KEYWORD INT_KEYWORD
829 { $$ = builtin_type (current_gdbarch)->builtin_long_long; }
830 | LONG LONG SIGNED_KEYWORD
831 { $$ = builtin_type (current_gdbarch)->builtin_long_long; }
832 | SIGNED_KEYWORD LONG LONG
833 { $$ = builtin_type (current_gdbarch)->builtin_long_long; }
834 | SIGNED_KEYWORD LONG LONG INT_KEYWORD
835 { $$ = builtin_type (current_gdbarch)->builtin_long_long; }
836 | UNSIGNED LONG LONG
837 { $$ = builtin_type (current_gdbarch)->builtin_unsigned_long_long; }
838 | UNSIGNED LONG LONG INT_KEYWORD
839 { $$ = builtin_type (current_gdbarch)->builtin_unsigned_long_long; }
840 | LONG LONG UNSIGNED
841 { $$ = builtin_type (current_gdbarch)->builtin_unsigned_long_long; }
842 | LONG LONG UNSIGNED INT_KEYWORD
843 { $$ = builtin_type (current_gdbarch)->builtin_unsigned_long_long; }
844 | SHORT INT_KEYWORD
845 { $$ = builtin_type (current_gdbarch)->builtin_short; }
846 | SHORT SIGNED_KEYWORD INT_KEYWORD
847 { $$ = builtin_type (current_gdbarch)->builtin_short; }
848 | SHORT SIGNED_KEYWORD
849 { $$ = builtin_type (current_gdbarch)->builtin_short; }
850 | UNSIGNED SHORT INT_KEYWORD
851 { $$ = builtin_type (current_gdbarch)->builtin_unsigned_short; }
852 | SHORT UNSIGNED
853 { $$ = builtin_type (current_gdbarch)->builtin_unsigned_short; }
854 | SHORT UNSIGNED INT_KEYWORD
855 { $$ = builtin_type (current_gdbarch)->builtin_unsigned_short; }
856 | DOUBLE_KEYWORD
857 { $$ = builtin_type (current_gdbarch)->builtin_double; }
858 | LONG DOUBLE_KEYWORD
859 { $$ = builtin_type (current_gdbarch)->builtin_long_double; }
860 | STRUCT name
861 { $$ = lookup_struct (copy_name ($2),
862 expression_context_block); }
863 | CLASS name
864 { $$ = lookup_struct (copy_name ($2),
865 expression_context_block); }
866 | UNION name
867 { $$ = lookup_union (copy_name ($2),
868 expression_context_block); }
869 | ENUM name
870 { $$ = lookup_enum (copy_name ($2),
871 expression_context_block); }
872 | UNSIGNED typename
873 { $$ = lookup_unsigned_typename (TYPE_NAME($2.type)); }
874 | UNSIGNED
875 { $$ = builtin_type (current_gdbarch)->builtin_unsigned_int; }
876 | SIGNED_KEYWORD typename
877 { $$ = lookup_signed_typename (TYPE_NAME($2.type)); }
878 | SIGNED_KEYWORD
879 { $$ = builtin_type (current_gdbarch)->builtin_int; }
880 /* It appears that this rule for templates is never
881 reduced; template recognition happens by lookahead
882 in the token processing code in yylex. */
883 | TEMPLATE name '<' type '>'
884 { $$ = lookup_template_type(copy_name($2), $4,
885 expression_context_block);
886 }
887 | const_or_volatile_or_space_identifier_noopt typebase
888 { $$ = follow_types ($2); }
889 | typebase const_or_volatile_or_space_identifier_noopt
890 { $$ = follow_types ($1); }
891 | qualified_type
892 ;
893
894 /* FIXME: carlton/2003-09-25: This next bit leads to lots of
895 reduce-reduce conflicts, because the parser doesn't know whether or
896 not to use qualified_name or qualified_type: the rules are
897 identical. If the parser is parsing 'A::B::x', then, when it sees
898 the second '::', it knows that the expression to the left of it has
899 to be a type, so it uses qualified_type. But if it is parsing just
900 'A::B', then it doesn't have any way of knowing which rule to use,
901 so there's a reduce-reduce conflict; it picks qualified_name, since
902 that occurs earlier in this file than qualified_type.
903
904 There's no good way to fix this with the grammar as it stands; as
905 far as I can tell, some of the problems arise from ambiguities that
906 GDB introduces ('start' can be either an expression or a type), but
907 some of it is inherent to the nature of C++ (you want to treat the
908 input "(FOO)" fairly differently depending on whether FOO is an
909 expression or a type, and if FOO is a complex expression, this can
910 be hard to determine at the right time). Fortunately, it works
911 pretty well in most cases. For example, if you do 'ptype A::B',
912 where A::B is a nested type, then the parser will mistakenly
913 misidentify it as an expression; but evaluate_subexp will get
914 called with 'noside' set to EVAL_AVOID_SIDE_EFFECTS, and everything
915 will work out anyways. But there are situations where the parser
916 will get confused: the most common one that I've run into is when
917 you want to do
918
919 print *((A::B *) x)"
920
921 where the parser doesn't realize that A::B has to be a type until
922 it hits the first right paren, at which point it's too late. (The
923 workaround is to type "print *(('A::B' *) x)" instead.) (And
924 another solution is to fix our symbol-handling code so that the
925 user never wants to type something like that in the first place,
926 because we get all the types right without the user's help!)
927
928 Perhaps we could fix this by making the lexer smarter. Some of
929 this functionality used to be in the lexer, but in a way that
930 worked even less well than the current solution: that attempt
931 involved having the parser sometimes handle '::' and having the
932 lexer sometimes handle it, and without a clear division of
933 responsibility, it quickly degenerated into a big mess. Probably
934 the eventual correct solution will give more of a role to the lexer
935 (ideally via code that is shared between the lexer and
936 decode_line_1), but I'm not holding my breath waiting for somebody
937 to get around to cleaning this up... */
938
939 qualified_type: typebase COLONCOLON name
940 {
941 struct type *type = $1;
942 struct type *new_type;
943 char *ncopy = alloca ($3.length + 1);
944
945 memcpy (ncopy, $3.ptr, $3.length);
946 ncopy[$3.length] = '\0';
947
948 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
949 && TYPE_CODE (type) != TYPE_CODE_UNION
950 && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
951 error ("`%s' is not defined as an aggregate type.",
952 TYPE_NAME (type));
953
954 new_type = cp_lookup_nested_type (type, ncopy,
955 expression_context_block);
956 if (new_type == NULL)
957 error ("No type \"%s\" within class or namespace \"%s\".",
958 ncopy, TYPE_NAME (type));
959
960 $$ = new_type;
961 }
962 ;
963
964 typename: TYPENAME
965 | INT_KEYWORD
966 {
967 $$.stoken.ptr = "int";
968 $$.stoken.length = 3;
969 $$.type = builtin_type (current_gdbarch)->builtin_int;
970 }
971 | LONG
972 {
973 $$.stoken.ptr = "long";
974 $$.stoken.length = 4;
975 $$.type = builtin_type (current_gdbarch)->builtin_long;
976 }
977 | SHORT
978 {
979 $$.stoken.ptr = "short";
980 $$.stoken.length = 5;
981 $$.type = builtin_type (current_gdbarch)->builtin_short;
982 }
983 ;
984
985 nonempty_typelist
986 : type
987 { $$ = (struct type **) malloc (sizeof (struct type *) * 2);
988 $<ivec>$[0] = 1; /* Number of types in vector */
989 $$[1] = $1;
990 }
991 | nonempty_typelist ',' type
992 { int len = sizeof (struct type *) * (++($<ivec>1[0]) + 1);
993 $$ = (struct type **) realloc ((char *) $1, len);
994 $$[$<ivec>$[0]] = $3;
995 }
996 ;
997
998 ptype : typebase
999 | ptype const_or_volatile_or_space_identifier abs_decl const_or_volatile_or_space_identifier
1000 { $$ = follow_types ($1); }
1001 ;
1002
1003 const_and_volatile: CONST_KEYWORD VOLATILE_KEYWORD
1004 | VOLATILE_KEYWORD CONST_KEYWORD
1005 ;
1006
1007 const_or_volatile_noopt: const_and_volatile
1008 { push_type (tp_const);
1009 push_type (tp_volatile);
1010 }
1011 | CONST_KEYWORD
1012 { push_type (tp_const); }
1013 | VOLATILE_KEYWORD
1014 { push_type (tp_volatile); }
1015 ;
1016
1017 name : NAME { $$ = $1.stoken; }
1018 | BLOCKNAME { $$ = $1.stoken; }
1019 | TYPENAME { $$ = $1.stoken; }
1020 | NAME_OR_INT { $$ = $1.stoken; }
1021 ;
1022
1023 name_not_typename : NAME
1024 | BLOCKNAME
1025 /* These would be useful if name_not_typename was useful, but it is just
1026 a fake for "variable", so these cause reduce/reduce conflicts because
1027 the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
1028 =exp) or just an exp. If name_not_typename was ever used in an lvalue
1029 context where only a name could occur, this might be useful.
1030 | NAME_OR_INT
1031 */
1032 ;
1033
1034 %%
1035
1036 /* Take care of parsing a number (anything that starts with a digit).
1037 Set yylval and return the token type; update lexptr.
1038 LEN is the number of characters in it. */
1039
1040 /*** Needs some error checking for the float case ***/
1041
1042 static int
1043 parse_number (p, len, parsed_float, putithere)
1044 char *p;
1045 int len;
1046 int parsed_float;
1047 YYSTYPE *putithere;
1048 {
1049 /* FIXME: Shouldn't these be unsigned? We don't deal with negative values
1050 here, and we do kind of silly things like cast to unsigned. */
1051 LONGEST n = 0;
1052 LONGEST prevn = 0;
1053 ULONGEST un;
1054
1055 int i = 0;
1056 int c;
1057 int base = input_radix;
1058 int unsigned_p = 0;
1059
1060 /* Number of "L" suffixes encountered. */
1061 int long_p = 0;
1062
1063 /* We have found a "L" or "U" suffix. */
1064 int found_suffix = 0;
1065
1066 ULONGEST high_bit;
1067 struct type *signed_type;
1068 struct type *unsigned_type;
1069
1070 if (parsed_float)
1071 {
1072 /* It's a float since it contains a point or an exponent. */
1073 char c;
1074 int num = 0; /* number of tokens scanned by scanf */
1075 char saved_char = p[len];
1076
1077 p[len] = 0; /* null-terminate the token */
1078 if (sizeof (putithere->typed_val_float.dval) <= sizeof (float))
1079 num = sscanf (p, "%g%c", (float *) &putithere->typed_val_float.dval,&c);
1080 else if (sizeof (putithere->typed_val_float.dval) <= sizeof (double))
1081 num = sscanf (p, "%lg%c", (double *) &putithere->typed_val_float.dval,&c);
1082 else
1083 {
1084 #ifdef SCANF_HAS_LONG_DOUBLE
1085 num = sscanf (p, "%Lg%c", &putithere->typed_val_float.dval,&c);
1086 #else
1087 /* Scan it into a double, then assign it to the long double.
1088 This at least wins with values representable in the range
1089 of doubles. */
1090 double temp;
1091 num = sscanf (p, "%lg%c", &temp,&c);
1092 putithere->typed_val_float.dval = temp;
1093 #endif
1094 }
1095 p[len] = saved_char; /* restore the input stream */
1096 if (num != 1) /* check scanf found ONLY a float ... */
1097 return ERROR;
1098 /* See if it has `f' or `l' suffix (float or long double). */
1099
1100 c = tolower (p[len - 1]);
1101
1102 if (c == 'f')
1103 putithere->typed_val_float.type = builtin_type (current_gdbarch)->builtin_float;
1104 else if (c == 'l')
1105 putithere->typed_val_float.type = builtin_type (current_gdbarch)->builtin_long_double;
1106 else if (isdigit (c) || c == '.')
1107 putithere->typed_val_float.type = builtin_type (current_gdbarch)->builtin_double;
1108 else
1109 return ERROR;
1110
1111 return FLOAT;
1112 }
1113
1114 /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
1115 if (p[0] == '0')
1116 switch (p[1])
1117 {
1118 case 'x':
1119 case 'X':
1120 if (len >= 3)
1121 {
1122 p += 2;
1123 base = 16;
1124 len -= 2;
1125 }
1126 break;
1127
1128 case 't':
1129 case 'T':
1130 case 'd':
1131 case 'D':
1132 if (len >= 3)
1133 {
1134 p += 2;
1135 base = 10;
1136 len -= 2;
1137 }
1138 break;
1139
1140 default:
1141 base = 8;
1142 break;
1143 }
1144
1145 while (len-- > 0)
1146 {
1147 c = *p++;
1148 if (c >= 'A' && c <= 'Z')
1149 c += 'a' - 'A';
1150 if (c != 'l' && c != 'u')
1151 n *= base;
1152 if (c >= '0' && c <= '9')
1153 {
1154 if (found_suffix)
1155 return ERROR;
1156 n += i = c - '0';
1157 }
1158 else
1159 {
1160 if (base > 10 && c >= 'a' && c <= 'f')
1161 {
1162 if (found_suffix)
1163 return ERROR;
1164 n += i = c - 'a' + 10;
1165 }
1166 else if (c == 'l')
1167 {
1168 ++long_p;
1169 found_suffix = 1;
1170 }
1171 else if (c == 'u')
1172 {
1173 unsigned_p = 1;
1174 found_suffix = 1;
1175 }
1176 else
1177 return ERROR; /* Char not a digit */
1178 }
1179 if (i >= base)
1180 return ERROR; /* Invalid digit in this base */
1181
1182 /* Portably test for overflow (only works for nonzero values, so make
1183 a second check for zero). FIXME: Can't we just make n and prevn
1184 unsigned and avoid this? */
1185 if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
1186 unsigned_p = 1; /* Try something unsigned */
1187
1188 /* Portably test for unsigned overflow.
1189 FIXME: This check is wrong; for example it doesn't find overflow
1190 on 0x123456789 when LONGEST is 32 bits. */
1191 if (c != 'l' && c != 'u' && n != 0)
1192 {
1193 if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n))
1194 error ("Numeric constant too large.");
1195 }
1196 prevn = n;
1197 }
1198
1199 /* An integer constant is an int, a long, or a long long. An L
1200 suffix forces it to be long; an LL suffix forces it to be long
1201 long. If not forced to a larger size, it gets the first type of
1202 the above that it fits in. To figure out whether it fits, we
1203 shift it right and see whether anything remains. Note that we
1204 can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
1205 operation, because many compilers will warn about such a shift
1206 (which always produces a zero result). Sometimes TARGET_INT_BIT
1207 or TARGET_LONG_BIT will be that big, sometimes not. To deal with
1208 the case where it is we just always shift the value more than
1209 once, with fewer bits each time. */
1210
1211 un = (ULONGEST)n >> 2;
1212 if (long_p == 0
1213 && (un >> (TARGET_INT_BIT - 2)) == 0)
1214 {
1215 high_bit = ((ULONGEST)1) << (TARGET_INT_BIT-1);
1216
1217 /* A large decimal (not hex or octal) constant (between INT_MAX
1218 and UINT_MAX) is a long or unsigned long, according to ANSI,
1219 never an unsigned int, but this code treats it as unsigned
1220 int. This probably should be fixed. GCC gives a warning on
1221 such constants. */
1222
1223 unsigned_type = builtin_type (current_gdbarch)->builtin_unsigned_int;
1224 signed_type = builtin_type (current_gdbarch)->builtin_int;
1225 }
1226 else if (long_p <= 1
1227 && (un >> (TARGET_LONG_BIT - 2)) == 0)
1228 {
1229 high_bit = ((ULONGEST)1) << (TARGET_LONG_BIT-1);
1230 unsigned_type = builtin_type (current_gdbarch)->builtin_unsigned_long;
1231 signed_type = builtin_type (current_gdbarch)->builtin_long;
1232 }
1233 else
1234 {
1235 int shift;
1236 if (sizeof (ULONGEST) * HOST_CHAR_BIT < TARGET_LONG_LONG_BIT)
1237 /* A long long does not fit in a LONGEST. */
1238 shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1);
1239 else
1240 shift = (TARGET_LONG_LONG_BIT - 1);
1241 high_bit = (ULONGEST) 1 << shift;
1242 unsigned_type = builtin_type (current_gdbarch)->builtin_unsigned_long_long;
1243 signed_type = builtin_type (current_gdbarch)->builtin_long_long;
1244 }
1245
1246 putithere->typed_val_int.val = n;
1247
1248 /* If the high bit of the worked out type is set then this number
1249 has to be unsigned. */
1250
1251 if (unsigned_p || (n & high_bit))
1252 {
1253 putithere->typed_val_int.type = unsigned_type;
1254 }
1255 else
1256 {
1257 putithere->typed_val_int.type = signed_type;
1258 }
1259
1260 return INT;
1261 }
1262
1263 struct token
1264 {
1265 char *operator;
1266 int token;
1267 enum exp_opcode opcode;
1268 };
1269
1270 static const struct token tokentab3[] =
1271 {
1272 {">>=", ASSIGN_MODIFY, BINOP_RSH},
1273 {"<<=", ASSIGN_MODIFY, BINOP_LSH}
1274 };
1275
1276 static const struct token tokentab2[] =
1277 {
1278 {"+=", ASSIGN_MODIFY, BINOP_ADD},
1279 {"-=", ASSIGN_MODIFY, BINOP_SUB},
1280 {"*=", ASSIGN_MODIFY, BINOP_MUL},
1281 {"/=", ASSIGN_MODIFY, BINOP_DIV},
1282 {"%=", ASSIGN_MODIFY, BINOP_REM},
1283 {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR},
1284 {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND},
1285 {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR},
1286 {"++", INCREMENT, BINOP_END},
1287 {"--", DECREMENT, BINOP_END},
1288 {"->", ARROW, BINOP_END},
1289 {"&&", ANDAND, BINOP_END},
1290 {"||", OROR, BINOP_END},
1291 {"::", COLONCOLON, BINOP_END},
1292 {"<<", LSH, BINOP_END},
1293 {">>", RSH, BINOP_END},
1294 {"==", EQUAL, BINOP_END},
1295 {"!=", NOTEQUAL, BINOP_END},
1296 {"<=", LEQ, BINOP_END},
1297 {">=", GEQ, BINOP_END}
1298 };
1299
1300 /* Read one token, getting characters through lexptr. */
1301
1302 static int
1303 yylex ()
1304 {
1305 int c;
1306 int namelen;
1307 unsigned int i;
1308 char *tokstart;
1309 char *tokptr;
1310 int tempbufindex;
1311 static char *tempbuf;
1312 static int tempbufsize;
1313 struct symbol * sym_class = NULL;
1314 char * token_string = NULL;
1315 int class_prefix = 0;
1316 int unquoted_expr;
1317
1318 retry:
1319
1320 /* Check if this is a macro invocation that we need to expand. */
1321 if (! scanning_macro_expansion ())
1322 {
1323 char *expanded = macro_expand_next (&lexptr,
1324 expression_macro_lookup_func,
1325 expression_macro_lookup_baton);
1326
1327 if (expanded)
1328 scan_macro_expansion (expanded);
1329 }
1330
1331 prev_lexptr = lexptr;
1332 unquoted_expr = 1;
1333
1334 tokstart = lexptr;
1335 /* See if it is a special token of length 3. */
1336 for (i = 0; i < sizeof tokentab3 / sizeof tokentab3[0]; i++)
1337 if (strncmp (tokstart, tokentab3[i].operator, 3) == 0)
1338 {
1339 lexptr += 3;
1340 yylval.opcode = tokentab3[i].opcode;
1341 return tokentab3[i].token;
1342 }
1343
1344 /* See if it is a special token of length 2. */
1345 for (i = 0; i < sizeof tokentab2 / sizeof tokentab2[0]; i++)
1346 if (strncmp (tokstart, tokentab2[i].operator, 2) == 0)
1347 {
1348 lexptr += 2;
1349 yylval.opcode = tokentab2[i].opcode;
1350 return tokentab2[i].token;
1351 }
1352
1353 switch (c = *tokstart)
1354 {
1355 case 0:
1356 /* If we were just scanning the result of a macro expansion,
1357 then we need to resume scanning the original text.
1358 Otherwise, we were already scanning the original text, and
1359 we're really done. */
1360 if (scanning_macro_expansion ())
1361 {
1362 finished_macro_expansion ();
1363 goto retry;
1364 }
1365 else
1366 return 0;
1367
1368 case ' ':
1369 case '\t':
1370 case '\n':
1371 lexptr++;
1372 goto retry;
1373
1374 case '\'':
1375 /* We either have a character constant ('0' or '\177' for example)
1376 or we have a quoted symbol reference ('foo(int,int)' in C++
1377 for example). */
1378 lexptr++;
1379 c = *lexptr++;
1380 if (c == '\\')
1381 c = parse_escape (&lexptr);
1382 else if (c == '\'')
1383 error ("Empty character constant.");
1384 else if (! host_char_to_target (c, &c))
1385 {
1386 int toklen = lexptr - tokstart + 1;
1387 char *tok = alloca (toklen + 1);
1388 memcpy (tok, tokstart, toklen);
1389 tok[toklen] = '\0';
1390 error ("There is no character corresponding to %s in the target "
1391 "character set `%s'.", tok, target_charset ());
1392 }
1393
1394 yylval.typed_val_int.val = c;
1395 yylval.typed_val_int.type = builtin_type (current_gdbarch)->builtin_char;
1396
1397 c = *lexptr++;
1398 if (c != '\'')
1399 {
1400 namelen = skip_quoted (tokstart) - tokstart;
1401 if (namelen > 2)
1402 {
1403 lexptr = tokstart + namelen;
1404 unquoted_expr = 0;
1405 if (lexptr[-1] != '\'')
1406 error ("Unmatched single quote.");
1407 namelen -= 2;
1408 tokstart++;
1409 goto tryname;
1410 }
1411 error ("Invalid character constant.");
1412 }
1413 return INT;
1414
1415 case '(':
1416 paren_depth++;
1417 lexptr++;
1418 return c;
1419
1420 case ')':
1421 if (paren_depth == 0)
1422 return 0;
1423 paren_depth--;
1424 lexptr++;
1425 return c;
1426
1427 case ',':
1428 if (comma_terminates
1429 && paren_depth == 0
1430 && ! scanning_macro_expansion ())
1431 return 0;
1432 lexptr++;
1433 return c;
1434
1435 case '.':
1436 /* Might be a floating point number. */
1437 if (lexptr[1] < '0' || lexptr[1] > '9')
1438 goto symbol; /* Nope, must be a symbol. */
1439 /* FALL THRU into number case. */
1440
1441 case '0':
1442 case '1':
1443 case '2':
1444 case '3':
1445 case '4':
1446 case '5':
1447 case '6':
1448 case '7':
1449 case '8':
1450 case '9':
1451 {
1452 /* It's a number. */
1453 int got_dot = 0, got_e = 0, toktype;
1454 char *p = tokstart;
1455 int hex = input_radix > 10;
1456
1457 if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
1458 {
1459 p += 2;
1460 hex = 1;
1461 }
1462 else if (c == '0' && (p[1]=='t' || p[1]=='T' || p[1]=='d' || p[1]=='D'))
1463 {
1464 p += 2;
1465 hex = 0;
1466 }
1467
1468 for (;; ++p)
1469 {
1470 /* This test includes !hex because 'e' is a valid hex digit
1471 and thus does not indicate a floating point number when
1472 the radix is hex. */
1473 if (!hex && !got_e && (*p == 'e' || *p == 'E'))
1474 got_dot = got_e = 1;
1475 /* This test does not include !hex, because a '.' always indicates
1476 a decimal floating point number regardless of the radix. */
1477 else if (!got_dot && *p == '.')
1478 got_dot = 1;
1479 else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
1480 && (*p == '-' || *p == '+'))
1481 /* This is the sign of the exponent, not the end of the
1482 number. */
1483 continue;
1484 /* We will take any letters or digits. parse_number will
1485 complain if past the radix, or if L or U are not final. */
1486 else if ((*p < '0' || *p > '9')
1487 && ((*p < 'a' || *p > 'z')
1488 && (*p < 'A' || *p > 'Z')))
1489 break;
1490 }
1491 toktype = parse_number (tokstart, p - tokstart, got_dot|got_e, &yylval);
1492 if (toktype == ERROR)
1493 {
1494 char *err_copy = (char *) alloca (p - tokstart + 1);
1495
1496 memcpy (err_copy, tokstart, p - tokstart);
1497 err_copy[p - tokstart] = 0;
1498 error ("Invalid number \"%s\".", err_copy);
1499 }
1500 lexptr = p;
1501 return toktype;
1502 }
1503
1504 case '+':
1505 case '-':
1506 case '*':
1507 case '/':
1508 case '%':
1509 case '|':
1510 case '&':
1511 case '^':
1512 case '~':
1513 case '!':
1514 case '@':
1515 case '<':
1516 case '>':
1517 case '[':
1518 case ']':
1519 case '?':
1520 case ':':
1521 case '=':
1522 case '{':
1523 case '}':
1524 symbol:
1525 lexptr++;
1526 return c;
1527
1528 case '"':
1529
1530 /* Build the gdb internal form of the input string in tempbuf,
1531 translating any standard C escape forms seen. Note that the
1532 buffer is null byte terminated *only* for the convenience of
1533 debugging gdb itself and printing the buffer contents when
1534 the buffer contains no embedded nulls. Gdb does not depend
1535 upon the buffer being null byte terminated, it uses the length
1536 string instead. This allows gdb to handle C strings (as well
1537 as strings in other languages) with embedded null bytes */
1538
1539 tokptr = ++tokstart;
1540 tempbufindex = 0;
1541
1542 do {
1543 char *char_start_pos = tokptr;
1544
1545 /* Grow the static temp buffer if necessary, including allocating
1546 the first one on demand. */
1547 if (tempbufindex + 1 >= tempbufsize)
1548 {
1549 tempbuf = (char *) realloc (tempbuf, tempbufsize += 64);
1550 }
1551 switch (*tokptr)
1552 {
1553 case '\0':
1554 case '"':
1555 /* Do nothing, loop will terminate. */
1556 break;
1557 case '\\':
1558 tokptr++;
1559 c = parse_escape (&tokptr);
1560 if (c == -1)
1561 {
1562 continue;
1563 }
1564 tempbuf[tempbufindex++] = c;
1565 break;
1566 default:
1567 c = *tokptr++;
1568 if (! host_char_to_target (c, &c))
1569 {
1570 int len = tokptr - char_start_pos;
1571 char *copy = alloca (len + 1);
1572 memcpy (copy, char_start_pos, len);
1573 copy[len] = '\0';
1574
1575 error ("There is no character corresponding to `%s' "
1576 "in the target character set `%s'.",
1577 copy, target_charset ());
1578 }
1579 tempbuf[tempbufindex++] = c;
1580 break;
1581 }
1582 } while ((*tokptr != '"') && (*tokptr != '\0'));
1583 if (*tokptr++ != '"')
1584 {
1585 error ("Unterminated string in expression.");
1586 }
1587 tempbuf[tempbufindex] = '\0'; /* See note above */
1588 yylval.sval.ptr = tempbuf;
1589 yylval.sval.length = tempbufindex;
1590 lexptr = tokptr;
1591 return (STRING);
1592 }
1593
1594 if (!(c == '_' || c == '$'
1595 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
1596 /* We must have come across a bad character (e.g. ';'). */
1597 error ("Invalid character '%c' in expression.", c);
1598
1599 /* It's a name. See how long it is. */
1600 namelen = 0;
1601 for (c = tokstart[namelen];
1602 (c == '_' || c == '$' || (c >= '0' && c <= '9')
1603 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '<');)
1604 {
1605 /* Template parameter lists are part of the name.
1606 FIXME: This mishandles `print $a<4&&$a>3'. */
1607
1608 if (c == '<')
1609 {
1610 /* Scan ahead to get rest of the template specification. Note
1611 that we look ahead only when the '<' adjoins non-whitespace
1612 characters; for comparison expressions, e.g. "a < b > c",
1613 there must be spaces before the '<', etc. */
1614
1615 char * p = find_template_name_end (tokstart + namelen);
1616 if (p)
1617 namelen = p - tokstart;
1618 break;
1619 }
1620 c = tokstart[++namelen];
1621 }
1622
1623 /* The token "if" terminates the expression and is NOT removed from
1624 the input stream. It doesn't count if it appears in the
1625 expansion of a macro. */
1626 if (namelen == 2
1627 && tokstart[0] == 'i'
1628 && tokstart[1] == 'f'
1629 && ! scanning_macro_expansion ())
1630 {
1631 return 0;
1632 }
1633
1634 lexptr += namelen;
1635
1636 tryname:
1637
1638 /* Catch specific keywords. Should be done with a data structure. */
1639 switch (namelen)
1640 {
1641 case 8:
1642 if (strncmp (tokstart, "unsigned", 8) == 0)
1643 return UNSIGNED;
1644 if (current_language->la_language == language_cplus
1645 && strncmp (tokstart, "template", 8) == 0)
1646 return TEMPLATE;
1647 if (strncmp (tokstart, "volatile", 8) == 0)
1648 return VOLATILE_KEYWORD;
1649 break;
1650 case 6:
1651 if (strncmp (tokstart, "struct", 6) == 0)
1652 return STRUCT;
1653 if (strncmp (tokstart, "signed", 6) == 0)
1654 return SIGNED_KEYWORD;
1655 if (strncmp (tokstart, "sizeof", 6) == 0)
1656 return SIZEOF;
1657 if (strncmp (tokstart, "double", 6) == 0)
1658 return DOUBLE_KEYWORD;
1659 break;
1660 case 5:
1661 if (current_language->la_language == language_cplus)
1662 {
1663 if (strncmp (tokstart, "false", 5) == 0)
1664 return FALSEKEYWORD;
1665 if (strncmp (tokstart, "class", 5) == 0)
1666 return CLASS;
1667 }
1668 if (strncmp (tokstart, "union", 5) == 0)
1669 return UNION;
1670 if (strncmp (tokstart, "short", 5) == 0)
1671 return SHORT;
1672 if (strncmp (tokstart, "const", 5) == 0)
1673 return CONST_KEYWORD;
1674 break;
1675 case 4:
1676 if (strncmp (tokstart, "enum", 4) == 0)
1677 return ENUM;
1678 if (strncmp (tokstart, "long", 4) == 0)
1679 return LONG;
1680 if (current_language->la_language == language_cplus)
1681 {
1682 if (strncmp (tokstart, "true", 4) == 0)
1683 return TRUEKEYWORD;
1684 }
1685 break;
1686 case 3:
1687 if (strncmp (tokstart, "int", 3) == 0)
1688 return INT_KEYWORD;
1689 break;
1690 default:
1691 break;
1692 }
1693
1694 yylval.sval.ptr = tokstart;
1695 yylval.sval.length = namelen;
1696
1697 if (*tokstart == '$')
1698 {
1699 write_dollar_variable (yylval.sval);
1700 return VARIABLE;
1701 }
1702
1703 /* Look ahead and see if we can consume more of the input
1704 string to get a reasonable class/namespace spec or a
1705 fully-qualified name. This is a kludge to get around the
1706 HP aCC compiler's generation of symbol names with embedded
1707 colons for namespace and nested classes. */
1708
1709 /* NOTE: carlton/2003-09-24: I don't entirely understand the
1710 HP-specific code, either here or in linespec. Having said that,
1711 I suspect that we're actually moving towards their model: we want
1712 symbols whose names are fully qualified, which matches the
1713 description above. */
1714 if (unquoted_expr)
1715 {
1716 /* Only do it if not inside single quotes */
1717 sym_class = parse_nested_classes_for_hpacc (yylval.sval.ptr, yylval.sval.length,
1718 &token_string, &class_prefix, &lexptr);
1719 if (sym_class)
1720 {
1721 /* Replace the current token with the bigger one we found */
1722 yylval.sval.ptr = token_string;
1723 yylval.sval.length = strlen (token_string);
1724 }
1725 }
1726
1727 /* Use token-type BLOCKNAME for symbols that happen to be defined as
1728 functions or symtabs. If this is not so, then ...
1729 Use token-type TYPENAME for symbols that happen to be defined
1730 currently as names of types; NAME for other symbols.
1731 The caller is not constrained to care about the distinction. */
1732 {
1733 char *tmp = copy_name (yylval.sval);
1734 struct symbol *sym;
1735 int is_a_field_of_this = 0;
1736 int hextype;
1737
1738 sym = lookup_symbol (tmp, expression_context_block,
1739 VAR_DOMAIN,
1740 current_language->la_language == language_cplus
1741 ? &is_a_field_of_this : (int *) NULL,
1742 (struct symtab **) NULL);
1743 /* Call lookup_symtab, not lookup_partial_symtab, in case there are
1744 no psymtabs (coff, xcoff, or some future change to blow away the
1745 psymtabs once once symbols are read). */
1746 if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
1747 {
1748 yylval.ssym.sym = sym;
1749 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1750 return BLOCKNAME;
1751 }
1752 else if (!sym)
1753 { /* See if it's a file name. */
1754 struct symtab *symtab;
1755
1756 symtab = lookup_symtab (tmp);
1757
1758 if (symtab)
1759 {
1760 yylval.bval = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK);
1761 return FILENAME;
1762 }
1763 }
1764
1765 if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
1766 {
1767 /* NOTE: carlton/2003-09-25: There used to be code here to
1768 handle nested types. It didn't work very well. See the
1769 comment before qualified_type for more info. */
1770 yylval.tsym.type = SYMBOL_TYPE (sym);
1771 return TYPENAME;
1772 }
1773 yylval.tsym.type
1774 = language_lookup_primitive_type_by_name (current_language,
1775 current_gdbarch, tmp);
1776 if (yylval.tsym.type != NULL)
1777 return TYPENAME;
1778
1779 /* Input names that aren't symbols but ARE valid hex numbers,
1780 when the input radix permits them, can be names or numbers
1781 depending on the parse. Note we support radixes > 16 here. */
1782 if (!sym &&
1783 ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10) ||
1784 (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10)))
1785 {
1786 YYSTYPE newlval; /* Its value is ignored. */
1787 hextype = parse_number (tokstart, namelen, 0, &newlval);
1788 if (hextype == INT)
1789 {
1790 yylval.ssym.sym = sym;
1791 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1792 return NAME_OR_INT;
1793 }
1794 }
1795
1796 /* Any other kind of symbol */
1797 yylval.ssym.sym = sym;
1798 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1799 return NAME;
1800 }
1801 }
1802
1803 void
1804 yyerror (msg)
1805 char *msg;
1806 {
1807 if (prev_lexptr)
1808 lexptr = prev_lexptr;
1809
1810 error ("A %s in expression, near `%s'.", (msg ? msg : "error"), lexptr);
1811 }
This page took 0.082114 seconds and 4 git commands to generate.