* c-exp.y (qualified_name): Call CHECK_TYPEDEF before deciding
[deliverable/binutils-gdb.git] / gdb / c-exp.y
1 /* YACC parser for C expressions, for GDB.
2 Copyright (C) 1986, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
3 1998, 1999, 2000, 2003, 2004, 2006, 2007, 2008, 2009
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 3 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, see <http://www.gnu.org/licenses/>. */
20
21 /* Parse a C 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 %{
39
40 #include "defs.h"
41 #include "gdb_string.h"
42 #include <ctype.h>
43 #include "expression.h"
44 #include "value.h"
45 #include "parser-defs.h"
46 #include "language.h"
47 #include "c-lang.h"
48 #include "bfd.h" /* Required by objfiles.h. */
49 #include "symfile.h" /* Required by objfiles.h. */
50 #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
51 #include "charset.h"
52 #include "block.h"
53 #include "cp-support.h"
54 #include "dfp.h"
55 #include "gdb_assert.h"
56 #include "macroscope.h"
57
58 #define parse_type builtin_type (parse_gdbarch)
59
60 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
61 as well as gratuitiously global symbol names, so we can have multiple
62 yacc generated parsers in gdb. Note that these are only the variables
63 produced by yacc. If other parser generators (bison, byacc, etc) produce
64 additional global names that conflict at link time, then those parser
65 generators need to be fixed instead of adding those names to this list. */
66
67 #define yymaxdepth c_maxdepth
68 #define yyparse c_parse_internal
69 #define yylex c_lex
70 #define yyerror c_error
71 #define yylval c_lval
72 #define yychar c_char
73 #define yydebug c_debug
74 #define yypact c_pact
75 #define yyr1 c_r1
76 #define yyr2 c_r2
77 #define yydef c_def
78 #define yychk c_chk
79 #define yypgo c_pgo
80 #define yyact c_act
81 #define yyexca c_exca
82 #define yyerrflag c_errflag
83 #define yynerrs c_nerrs
84 #define yyps c_ps
85 #define yypv c_pv
86 #define yys c_s
87 #define yy_yys c_yys
88 #define yystate c_state
89 #define yytmp c_tmp
90 #define yyv c_v
91 #define yy_yyv c_yyv
92 #define yyval c_val
93 #define yylloc c_lloc
94 #define yyreds c_reds /* With YYDEBUG defined */
95 #define yytoks c_toks /* With YYDEBUG defined */
96 #define yyname c_name /* With YYDEBUG defined */
97 #define yyrule c_rule /* With YYDEBUG defined */
98 #define yylhs c_yylhs
99 #define yylen c_yylen
100 #define yydefred c_yydefred
101 #define yydgoto c_yydgoto
102 #define yysindex c_yysindex
103 #define yyrindex c_yyrindex
104 #define yygindex c_yygindex
105 #define yytable c_yytable
106 #define yycheck c_yycheck
107
108 #ifndef YYDEBUG
109 #define YYDEBUG 1 /* Default to yydebug support */
110 #endif
111
112 #define YYFPRINTF parser_fprintf
113
114 int yyparse (void);
115
116 static int yylex (void);
117
118 void yyerror (char *);
119
120 %}
121
122 /* Although the yacc "value" of an expression is not used,
123 since the result is stored in the structure being created,
124 other node types do have values. */
125
126 %union
127 {
128 LONGEST lval;
129 struct {
130 LONGEST val;
131 struct type *type;
132 } typed_val_int;
133 struct {
134 DOUBLEST dval;
135 struct type *type;
136 } typed_val_float;
137 struct {
138 gdb_byte val[16];
139 struct type *type;
140 } typed_val_decfloat;
141 struct symbol *sym;
142 struct type *tval;
143 struct stoken sval;
144 struct typed_stoken tsval;
145 struct ttype tsym;
146 struct symtoken ssym;
147 int voidval;
148 struct block *bval;
149 enum exp_opcode opcode;
150 struct internalvar *ivar;
151
152 struct stoken_vector svec;
153 struct type **tvec;
154 int *ivec;
155 }
156
157 %{
158 /* YYSTYPE gets defined by %union */
159 static int parse_number (char *, int, int, YYSTYPE *);
160 %}
161
162 %type <voidval> exp exp1 type_exp start variable qualified_name lcurly
163 %type <lval> rcurly
164 %type <tval> type typebase qualified_type
165 %type <tvec> nonempty_typelist
166 /* %type <bval> block */
167
168 /* Fancy type parsing. */
169 %type <voidval> func_mod direct_abs_decl abs_decl
170 %type <tval> ptype
171 %type <lval> array_mod
172
173 %token <typed_val_int> INT
174 %token <typed_val_float> FLOAT
175 %token <typed_val_decfloat> DECFLOAT
176
177 /* Both NAME and TYPENAME tokens represent symbols in the input,
178 and both convey their data as strings.
179 But a TYPENAME is a string that happens to be defined as a typedef
180 or builtin type name (such as int or char)
181 and a NAME is any other symbol.
182 Contexts where this distinction is not important can use the
183 nonterminal "name", which matches either NAME or TYPENAME. */
184
185 %token <tsval> STRING
186 %token <tsval> CHAR
187 %token <ssym> NAME /* BLOCKNAME defined below to give it higher precedence. */
188 %token <voidval> COMPLETE
189 %token <tsym> TYPENAME
190 %type <sval> name
191 %type <svec> string_exp
192 %type <ssym> name_not_typename
193 %type <tsym> typename
194
195 /* A NAME_OR_INT is a symbol which is not known in the symbol table,
196 but which would parse as a valid number in the current input radix.
197 E.g. "c" when input_radix==16. Depending on the parse, it will be
198 turned into a name or into a number. */
199
200 %token <ssym> NAME_OR_INT
201
202 %token STRUCT CLASS UNION ENUM SIZEOF UNSIGNED COLONCOLON
203 %token TEMPLATE
204 %token ERROR
205
206 /* Special type cases, put in to allow the parser to distinguish different
207 legal basetypes. */
208 %token SIGNED_KEYWORD LONG SHORT INT_KEYWORD CONST_KEYWORD VOLATILE_KEYWORD DOUBLE_KEYWORD
209
210 %token <voidval> VARIABLE
211
212 %token <opcode> ASSIGN_MODIFY
213
214 /* C++ */
215 %token TRUEKEYWORD
216 %token FALSEKEYWORD
217
218
219 %left ','
220 %left ABOVE_COMMA
221 %right '=' ASSIGN_MODIFY
222 %right '?'
223 %left OROR
224 %left ANDAND
225 %left '|'
226 %left '^'
227 %left '&'
228 %left EQUAL NOTEQUAL
229 %left '<' '>' LEQ GEQ
230 %left LSH RSH
231 %left '@'
232 %left '+' '-'
233 %left '*' '/' '%'
234 %right UNARY INCREMENT DECREMENT
235 %right ARROW ARROW_STAR '.' DOT_STAR '[' '('
236 %token <ssym> BLOCKNAME
237 %token <bval> FILENAME
238 %type <bval> block
239 %left COLONCOLON
240
241 \f
242 %%
243
244 start : exp1
245 | type_exp
246 ;
247
248 type_exp: type
249 { write_exp_elt_opcode(OP_TYPE);
250 write_exp_elt_type($1);
251 write_exp_elt_opcode(OP_TYPE);}
252 ;
253
254 /* Expressions, including the comma operator. */
255 exp1 : exp
256 | exp1 ',' exp
257 { write_exp_elt_opcode (BINOP_COMMA); }
258 ;
259
260 /* Expressions, not including the comma operator. */
261 exp : '*' exp %prec UNARY
262 { write_exp_elt_opcode (UNOP_IND); }
263 ;
264
265 exp : '&' exp %prec UNARY
266 { write_exp_elt_opcode (UNOP_ADDR); }
267 ;
268
269 exp : '-' exp %prec UNARY
270 { write_exp_elt_opcode (UNOP_NEG); }
271 ;
272
273 exp : '+' exp %prec UNARY
274 { write_exp_elt_opcode (UNOP_PLUS); }
275 ;
276
277 exp : '!' exp %prec UNARY
278 { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
279 ;
280
281 exp : '~' exp %prec UNARY
282 { write_exp_elt_opcode (UNOP_COMPLEMENT); }
283 ;
284
285 exp : INCREMENT exp %prec UNARY
286 { write_exp_elt_opcode (UNOP_PREINCREMENT); }
287 ;
288
289 exp : DECREMENT exp %prec UNARY
290 { write_exp_elt_opcode (UNOP_PREDECREMENT); }
291 ;
292
293 exp : exp INCREMENT %prec UNARY
294 { write_exp_elt_opcode (UNOP_POSTINCREMENT); }
295 ;
296
297 exp : exp DECREMENT %prec UNARY
298 { write_exp_elt_opcode (UNOP_POSTDECREMENT); }
299 ;
300
301 exp : SIZEOF exp %prec UNARY
302 { write_exp_elt_opcode (UNOP_SIZEOF); }
303 ;
304
305 exp : exp ARROW name
306 { write_exp_elt_opcode (STRUCTOP_PTR);
307 write_exp_string ($3);
308 write_exp_elt_opcode (STRUCTOP_PTR); }
309 ;
310
311 exp : exp ARROW name COMPLETE
312 { mark_struct_expression ();
313 write_exp_elt_opcode (STRUCTOP_PTR);
314 write_exp_string ($3);
315 write_exp_elt_opcode (STRUCTOP_PTR); }
316 ;
317
318 exp : exp ARROW COMPLETE
319 { struct stoken s;
320 mark_struct_expression ();
321 write_exp_elt_opcode (STRUCTOP_PTR);
322 s.ptr = "";
323 s.length = 0;
324 write_exp_string (s);
325 write_exp_elt_opcode (STRUCTOP_PTR); }
326 ;
327
328 exp : exp ARROW qualified_name
329 { /* exp->type::name becomes exp->*(&type::name) */
330 /* Note: this doesn't work if name is a
331 static member! FIXME */
332 write_exp_elt_opcode (UNOP_ADDR);
333 write_exp_elt_opcode (STRUCTOP_MPTR); }
334 ;
335
336 exp : exp ARROW_STAR exp
337 { write_exp_elt_opcode (STRUCTOP_MPTR); }
338 ;
339
340 exp : exp '.' name
341 { write_exp_elt_opcode (STRUCTOP_STRUCT);
342 write_exp_string ($3);
343 write_exp_elt_opcode (STRUCTOP_STRUCT); }
344 ;
345
346 exp : exp '.' name COMPLETE
347 { mark_struct_expression ();
348 write_exp_elt_opcode (STRUCTOP_STRUCT);
349 write_exp_string ($3);
350 write_exp_elt_opcode (STRUCTOP_STRUCT); }
351 ;
352
353 exp : exp '.' COMPLETE
354 { struct stoken s;
355 mark_struct_expression ();
356 write_exp_elt_opcode (STRUCTOP_STRUCT);
357 s.ptr = "";
358 s.length = 0;
359 write_exp_string (s);
360 write_exp_elt_opcode (STRUCTOP_STRUCT); }
361 ;
362
363 exp : exp '.' qualified_name
364 { /* exp.type::name becomes exp.*(&type::name) */
365 /* Note: this doesn't work if name is a
366 static member! FIXME */
367 write_exp_elt_opcode (UNOP_ADDR);
368 write_exp_elt_opcode (STRUCTOP_MEMBER); }
369 ;
370
371 exp : exp DOT_STAR exp
372 { write_exp_elt_opcode (STRUCTOP_MEMBER); }
373 ;
374
375 exp : exp '[' exp1 ']'
376 { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
377 ;
378
379 exp : exp '('
380 /* This is to save the value of arglist_len
381 being accumulated by an outer function call. */
382 { start_arglist (); }
383 arglist ')' %prec ARROW
384 { write_exp_elt_opcode (OP_FUNCALL);
385 write_exp_elt_longcst ((LONGEST) end_arglist ());
386 write_exp_elt_opcode (OP_FUNCALL); }
387 ;
388
389 lcurly : '{'
390 { start_arglist (); }
391 ;
392
393 arglist :
394 ;
395
396 arglist : exp
397 { arglist_len = 1; }
398 ;
399
400 arglist : arglist ',' exp %prec ABOVE_COMMA
401 { arglist_len++; }
402 ;
403
404 rcurly : '}'
405 { $$ = end_arglist () - 1; }
406 ;
407 exp : lcurly arglist rcurly %prec ARROW
408 { write_exp_elt_opcode (OP_ARRAY);
409 write_exp_elt_longcst ((LONGEST) 0);
410 write_exp_elt_longcst ((LONGEST) $3);
411 write_exp_elt_opcode (OP_ARRAY); }
412 ;
413
414 exp : lcurly type rcurly exp %prec UNARY
415 { write_exp_elt_opcode (UNOP_MEMVAL);
416 write_exp_elt_type ($2);
417 write_exp_elt_opcode (UNOP_MEMVAL); }
418 ;
419
420 exp : '(' type ')' exp %prec UNARY
421 { write_exp_elt_opcode (UNOP_CAST);
422 write_exp_elt_type ($2);
423 write_exp_elt_opcode (UNOP_CAST); }
424 ;
425
426 exp : '(' exp1 ')'
427 { }
428 ;
429
430 /* Binary operators in order of decreasing precedence. */
431
432 exp : exp '@' exp
433 { write_exp_elt_opcode (BINOP_REPEAT); }
434 ;
435
436 exp : exp '*' exp
437 { write_exp_elt_opcode (BINOP_MUL); }
438 ;
439
440 exp : exp '/' exp
441 { write_exp_elt_opcode (BINOP_DIV); }
442 ;
443
444 exp : exp '%' exp
445 { write_exp_elt_opcode (BINOP_REM); }
446 ;
447
448 exp : exp '+' exp
449 { write_exp_elt_opcode (BINOP_ADD); }
450 ;
451
452 exp : exp '-' exp
453 { write_exp_elt_opcode (BINOP_SUB); }
454 ;
455
456 exp : exp LSH exp
457 { write_exp_elt_opcode (BINOP_LSH); }
458 ;
459
460 exp : exp RSH exp
461 { write_exp_elt_opcode (BINOP_RSH); }
462 ;
463
464 exp : exp EQUAL exp
465 { write_exp_elt_opcode (BINOP_EQUAL); }
466 ;
467
468 exp : exp NOTEQUAL exp
469 { write_exp_elt_opcode (BINOP_NOTEQUAL); }
470 ;
471
472 exp : exp LEQ exp
473 { write_exp_elt_opcode (BINOP_LEQ); }
474 ;
475
476 exp : exp GEQ exp
477 { write_exp_elt_opcode (BINOP_GEQ); }
478 ;
479
480 exp : exp '<' exp
481 { write_exp_elt_opcode (BINOP_LESS); }
482 ;
483
484 exp : exp '>' exp
485 { write_exp_elt_opcode (BINOP_GTR); }
486 ;
487
488 exp : exp '&' exp
489 { write_exp_elt_opcode (BINOP_BITWISE_AND); }
490 ;
491
492 exp : exp '^' exp
493 { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
494 ;
495
496 exp : exp '|' exp
497 { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
498 ;
499
500 exp : exp ANDAND exp
501 { write_exp_elt_opcode (BINOP_LOGICAL_AND); }
502 ;
503
504 exp : exp OROR exp
505 { write_exp_elt_opcode (BINOP_LOGICAL_OR); }
506 ;
507
508 exp : exp '?' exp ':' exp %prec '?'
509 { write_exp_elt_opcode (TERNOP_COND); }
510 ;
511
512 exp : exp '=' exp
513 { write_exp_elt_opcode (BINOP_ASSIGN); }
514 ;
515
516 exp : exp ASSIGN_MODIFY exp
517 { write_exp_elt_opcode (BINOP_ASSIGN_MODIFY);
518 write_exp_elt_opcode ($2);
519 write_exp_elt_opcode (BINOP_ASSIGN_MODIFY); }
520 ;
521
522 exp : INT
523 { write_exp_elt_opcode (OP_LONG);
524 write_exp_elt_type ($1.type);
525 write_exp_elt_longcst ((LONGEST)($1.val));
526 write_exp_elt_opcode (OP_LONG); }
527 ;
528
529 exp : CHAR
530 {
531 struct stoken_vector vec;
532 vec.len = 1;
533 vec.tokens = &$1;
534 write_exp_string_vector ($1.type, &vec);
535 }
536 ;
537
538 exp : NAME_OR_INT
539 { YYSTYPE val;
540 parse_number ($1.stoken.ptr, $1.stoken.length, 0, &val);
541 write_exp_elt_opcode (OP_LONG);
542 write_exp_elt_type (val.typed_val_int.type);
543 write_exp_elt_longcst ((LONGEST)val.typed_val_int.val);
544 write_exp_elt_opcode (OP_LONG);
545 }
546 ;
547
548
549 exp : FLOAT
550 { write_exp_elt_opcode (OP_DOUBLE);
551 write_exp_elt_type ($1.type);
552 write_exp_elt_dblcst ($1.dval);
553 write_exp_elt_opcode (OP_DOUBLE); }
554 ;
555
556 exp : DECFLOAT
557 { write_exp_elt_opcode (OP_DECFLOAT);
558 write_exp_elt_type ($1.type);
559 write_exp_elt_decfloatcst ($1.val);
560 write_exp_elt_opcode (OP_DECFLOAT); }
561 ;
562
563 exp : variable
564 ;
565
566 exp : VARIABLE
567 /* Already written by write_dollar_variable. */
568 ;
569
570 exp : SIZEOF '(' type ')' %prec UNARY
571 { write_exp_elt_opcode (OP_LONG);
572 write_exp_elt_type (parse_type->builtin_int);
573 CHECK_TYPEDEF ($3);
574 write_exp_elt_longcst ((LONGEST) TYPE_LENGTH ($3));
575 write_exp_elt_opcode (OP_LONG); }
576 ;
577
578 string_exp:
579 STRING
580 {
581 /* We copy the string here, and not in the
582 lexer, to guarantee that we do not leak a
583 string. Note that we follow the
584 NUL-termination convention of the
585 lexer. */
586 struct typed_stoken *vec = XNEW (struct typed_stoken);
587 $$.len = 1;
588 $$.tokens = vec;
589
590 vec->type = $1.type;
591 vec->length = $1.length;
592 vec->ptr = malloc ($1.length + 1);
593 memcpy (vec->ptr, $1.ptr, $1.length + 1);
594 }
595
596 | string_exp STRING
597 {
598 /* Note that we NUL-terminate here, but just
599 for convenience. */
600 char *p;
601 ++$$.len;
602 $$.tokens = realloc ($$.tokens,
603 $$.len * sizeof (struct typed_stoken));
604
605 p = malloc ($2.length + 1);
606 memcpy (p, $2.ptr, $2.length + 1);
607
608 $$.tokens[$$.len - 1].type = $2.type;
609 $$.tokens[$$.len - 1].length = $2.length;
610 $$.tokens[$$.len - 1].ptr = p;
611 }
612 ;
613
614 exp : string_exp
615 {
616 int i;
617 enum c_string_type type = C_STRING;
618
619 for (i = 0; i < $1.len; ++i)
620 {
621 switch ($1.tokens[i].type)
622 {
623 case C_STRING:
624 break;
625 case C_WIDE_STRING:
626 case C_STRING_16:
627 case C_STRING_32:
628 if (type != C_STRING
629 && type != $1.tokens[i].type)
630 error ("Undefined string concatenation.");
631 type = $1.tokens[i].type;
632 break;
633 default:
634 /* internal error */
635 internal_error (__FILE__, __LINE__,
636 "unrecognized type in string concatenation");
637 }
638 }
639
640 write_exp_string_vector (type, &$1);
641 for (i = 0; i < $1.len; ++i)
642 free ($1.tokens[i].ptr);
643 free ($1.tokens);
644 }
645 ;
646
647 /* C++. */
648 exp : TRUEKEYWORD
649 { write_exp_elt_opcode (OP_LONG);
650 write_exp_elt_type (parse_type->builtin_bool);
651 write_exp_elt_longcst ((LONGEST) 1);
652 write_exp_elt_opcode (OP_LONG); }
653 ;
654
655 exp : FALSEKEYWORD
656 { write_exp_elt_opcode (OP_LONG);
657 write_exp_elt_type (parse_type->builtin_bool);
658 write_exp_elt_longcst ((LONGEST) 0);
659 write_exp_elt_opcode (OP_LONG); }
660 ;
661
662 /* end of C++. */
663
664 block : BLOCKNAME
665 {
666 if ($1.sym)
667 $$ = SYMBOL_BLOCK_VALUE ($1.sym);
668 else
669 error ("No file or function \"%s\".",
670 copy_name ($1.stoken));
671 }
672 | FILENAME
673 {
674 $$ = $1;
675 }
676 ;
677
678 block : block COLONCOLON name
679 { struct symbol *tem
680 = lookup_symbol (copy_name ($3), $1,
681 VAR_DOMAIN, (int *) NULL);
682 if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
683 error ("No function \"%s\" in specified context.",
684 copy_name ($3));
685 $$ = SYMBOL_BLOCK_VALUE (tem); }
686 ;
687
688 variable: block COLONCOLON name
689 { struct symbol *sym;
690 sym = lookup_symbol (copy_name ($3), $1,
691 VAR_DOMAIN, (int *) NULL);
692 if (sym == 0)
693 error ("No symbol \"%s\" in specified context.",
694 copy_name ($3));
695
696 write_exp_elt_opcode (OP_VAR_VALUE);
697 /* block_found is set by lookup_symbol. */
698 write_exp_elt_block (block_found);
699 write_exp_elt_sym (sym);
700 write_exp_elt_opcode (OP_VAR_VALUE); }
701 ;
702
703 qualified_name: typebase COLONCOLON name
704 {
705 struct type *type = $1;
706 CHECK_TYPEDEF (type);
707 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
708 && TYPE_CODE (type) != TYPE_CODE_UNION
709 && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
710 error ("`%s' is not defined as an aggregate type.",
711 TYPE_NAME (type));
712
713 write_exp_elt_opcode (OP_SCOPE);
714 write_exp_elt_type (type);
715 write_exp_string ($3);
716 write_exp_elt_opcode (OP_SCOPE);
717 }
718 | typebase COLONCOLON '~' name
719 {
720 struct type *type = $1;
721 struct stoken tmp_token;
722 CHECK_TYPEDEF (type);
723 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
724 && TYPE_CODE (type) != TYPE_CODE_UNION
725 && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
726 error ("`%s' is not defined as an aggregate type.",
727 TYPE_NAME (type));
728
729 tmp_token.ptr = (char*) alloca ($4.length + 2);
730 tmp_token.length = $4.length + 1;
731 tmp_token.ptr[0] = '~';
732 memcpy (tmp_token.ptr+1, $4.ptr, $4.length);
733 tmp_token.ptr[tmp_token.length] = 0;
734
735 /* Check for valid destructor name. */
736 destructor_name_p (tmp_token.ptr, type);
737 write_exp_elt_opcode (OP_SCOPE);
738 write_exp_elt_type (type);
739 write_exp_string (tmp_token);
740 write_exp_elt_opcode (OP_SCOPE);
741 }
742 ;
743
744 variable: qualified_name
745 | COLONCOLON name
746 {
747 char *name = copy_name ($2);
748 struct symbol *sym;
749 struct minimal_symbol *msymbol;
750
751 sym =
752 lookup_symbol (name, (const struct block *) NULL,
753 VAR_DOMAIN, (int *) NULL);
754 if (sym)
755 {
756 write_exp_elt_opcode (OP_VAR_VALUE);
757 write_exp_elt_block (NULL);
758 write_exp_elt_sym (sym);
759 write_exp_elt_opcode (OP_VAR_VALUE);
760 break;
761 }
762
763 msymbol = lookup_minimal_symbol (name, NULL, NULL);
764 if (msymbol != NULL)
765 write_exp_msymbol (msymbol);
766 else if (!have_full_symbols () && !have_partial_symbols ())
767 error ("No symbol table is loaded. Use the \"file\" command.");
768 else
769 error ("No symbol \"%s\" in current context.", name);
770 }
771 ;
772
773 variable: name_not_typename
774 { struct symbol *sym = $1.sym;
775
776 if (sym)
777 {
778 if (symbol_read_needs_frame (sym))
779 {
780 if (innermost_block == 0 ||
781 contained_in (block_found,
782 innermost_block))
783 innermost_block = block_found;
784 }
785
786 write_exp_elt_opcode (OP_VAR_VALUE);
787 /* We want to use the selected frame, not
788 another more inner frame which happens to
789 be in the same block. */
790 write_exp_elt_block (NULL);
791 write_exp_elt_sym (sym);
792 write_exp_elt_opcode (OP_VAR_VALUE);
793 }
794 else if ($1.is_a_field_of_this)
795 {
796 /* C++: it hangs off of `this'. Must
797 not inadvertently convert from a method call
798 to data ref. */
799 if (innermost_block == 0 ||
800 contained_in (block_found, innermost_block))
801 innermost_block = block_found;
802 write_exp_elt_opcode (OP_THIS);
803 write_exp_elt_opcode (OP_THIS);
804 write_exp_elt_opcode (STRUCTOP_PTR);
805 write_exp_string ($1.stoken);
806 write_exp_elt_opcode (STRUCTOP_PTR);
807 }
808 else
809 {
810 struct minimal_symbol *msymbol;
811 char *arg = copy_name ($1.stoken);
812
813 msymbol =
814 lookup_minimal_symbol (arg, NULL, NULL);
815 if (msymbol != NULL)
816 write_exp_msymbol (msymbol);
817 else if (!have_full_symbols () && !have_partial_symbols ())
818 error ("No symbol table is loaded. Use the \"file\" command.");
819 else
820 error ("No symbol \"%s\" in current context.",
821 copy_name ($1.stoken));
822 }
823 }
824 ;
825
826 space_identifier : '@' NAME
827 { push_type_address_space (copy_name ($2.stoken));
828 push_type (tp_space_identifier);
829 }
830 ;
831
832 const_or_volatile: const_or_volatile_noopt
833 |
834 ;
835
836 cv_with_space_id : const_or_volatile space_identifier const_or_volatile
837 ;
838
839 const_or_volatile_or_space_identifier_noopt: cv_with_space_id
840 | const_or_volatile_noopt
841 ;
842
843 const_or_volatile_or_space_identifier:
844 const_or_volatile_or_space_identifier_noopt
845 |
846 ;
847
848 abs_decl: '*'
849 { push_type (tp_pointer); $$ = 0; }
850 | '*' abs_decl
851 { push_type (tp_pointer); $$ = $2; }
852 | '&'
853 { push_type (tp_reference); $$ = 0; }
854 | '&' abs_decl
855 { push_type (tp_reference); $$ = $2; }
856 | direct_abs_decl
857 ;
858
859 direct_abs_decl: '(' abs_decl ')'
860 { $$ = $2; }
861 | direct_abs_decl array_mod
862 {
863 push_type_int ($2);
864 push_type (tp_array);
865 }
866 | array_mod
867 {
868 push_type_int ($1);
869 push_type (tp_array);
870 $$ = 0;
871 }
872
873 | direct_abs_decl func_mod
874 { push_type (tp_function); }
875 | func_mod
876 { push_type (tp_function); }
877 ;
878
879 array_mod: '[' ']'
880 { $$ = -1; }
881 | '[' INT ']'
882 { $$ = $2.val; }
883 ;
884
885 func_mod: '(' ')'
886 { $$ = 0; }
887 | '(' nonempty_typelist ')'
888 { free ($2); $$ = 0; }
889 ;
890
891 /* We used to try to recognize pointer to member types here, but
892 that didn't work (shift/reduce conflicts meant that these rules never
893 got executed). The problem is that
894 int (foo::bar::baz::bizzle)
895 is a function type but
896 int (foo::bar::baz::bizzle::*)
897 is a pointer to member type. Stroustrup loses again! */
898
899 type : ptype
900 ;
901
902 typebase /* Implements (approximately): (type-qualifier)* type-specifier */
903 : TYPENAME
904 { $$ = $1.type; }
905 | INT_KEYWORD
906 { $$ = parse_type->builtin_int; }
907 | LONG
908 { $$ = parse_type->builtin_long; }
909 | SHORT
910 { $$ = parse_type->builtin_short; }
911 | LONG INT_KEYWORD
912 { $$ = parse_type->builtin_long; }
913 | LONG SIGNED_KEYWORD INT_KEYWORD
914 { $$ = parse_type->builtin_long; }
915 | LONG SIGNED_KEYWORD
916 { $$ = parse_type->builtin_long; }
917 | SIGNED_KEYWORD LONG INT_KEYWORD
918 { $$ = parse_type->builtin_long; }
919 | UNSIGNED LONG INT_KEYWORD
920 { $$ = parse_type->builtin_unsigned_long; }
921 | LONG UNSIGNED INT_KEYWORD
922 { $$ = parse_type->builtin_unsigned_long; }
923 | LONG UNSIGNED
924 { $$ = parse_type->builtin_unsigned_long; }
925 | LONG LONG
926 { $$ = parse_type->builtin_long_long; }
927 | LONG LONG INT_KEYWORD
928 { $$ = parse_type->builtin_long_long; }
929 | LONG LONG SIGNED_KEYWORD INT_KEYWORD
930 { $$ = parse_type->builtin_long_long; }
931 | LONG LONG SIGNED_KEYWORD
932 { $$ = parse_type->builtin_long_long; }
933 | SIGNED_KEYWORD LONG LONG
934 { $$ = parse_type->builtin_long_long; }
935 | SIGNED_KEYWORD LONG LONG INT_KEYWORD
936 { $$ = parse_type->builtin_long_long; }
937 | UNSIGNED LONG LONG
938 { $$ = parse_type->builtin_unsigned_long_long; }
939 | UNSIGNED LONG LONG INT_KEYWORD
940 { $$ = parse_type->builtin_unsigned_long_long; }
941 | LONG LONG UNSIGNED
942 { $$ = parse_type->builtin_unsigned_long_long; }
943 | LONG LONG UNSIGNED INT_KEYWORD
944 { $$ = parse_type->builtin_unsigned_long_long; }
945 | SHORT INT_KEYWORD
946 { $$ = parse_type->builtin_short; }
947 | SHORT SIGNED_KEYWORD INT_KEYWORD
948 { $$ = parse_type->builtin_short; }
949 | SHORT SIGNED_KEYWORD
950 { $$ = parse_type->builtin_short; }
951 | UNSIGNED SHORT INT_KEYWORD
952 { $$ = parse_type->builtin_unsigned_short; }
953 | SHORT UNSIGNED
954 { $$ = parse_type->builtin_unsigned_short; }
955 | SHORT UNSIGNED INT_KEYWORD
956 { $$ = parse_type->builtin_unsigned_short; }
957 | DOUBLE_KEYWORD
958 { $$ = parse_type->builtin_double; }
959 | LONG DOUBLE_KEYWORD
960 { $$ = parse_type->builtin_long_double; }
961 | STRUCT name
962 { $$ = lookup_struct (copy_name ($2),
963 expression_context_block); }
964 | CLASS name
965 { $$ = lookup_struct (copy_name ($2),
966 expression_context_block); }
967 | UNION name
968 { $$ = lookup_union (copy_name ($2),
969 expression_context_block); }
970 | ENUM name
971 { $$ = lookup_enum (copy_name ($2),
972 expression_context_block); }
973 | UNSIGNED typename
974 { $$ = lookup_unsigned_typename (parse_language,
975 parse_gdbarch,
976 TYPE_NAME($2.type)); }
977 | UNSIGNED
978 { $$ = parse_type->builtin_unsigned_int; }
979 | SIGNED_KEYWORD typename
980 { $$ = lookup_signed_typename (parse_language,
981 parse_gdbarch,
982 TYPE_NAME($2.type)); }
983 | SIGNED_KEYWORD
984 { $$ = parse_type->builtin_int; }
985 /* It appears that this rule for templates is never
986 reduced; template recognition happens by lookahead
987 in the token processing code in yylex. */
988 | TEMPLATE name '<' type '>'
989 { $$ = lookup_template_type(copy_name($2), $4,
990 expression_context_block);
991 }
992 | const_or_volatile_or_space_identifier_noopt typebase
993 { $$ = follow_types ($2); }
994 | typebase const_or_volatile_or_space_identifier_noopt
995 { $$ = follow_types ($1); }
996 | qualified_type
997 ;
998
999 /* FIXME: carlton/2003-09-25: This next bit leads to lots of
1000 reduce-reduce conflicts, because the parser doesn't know whether or
1001 not to use qualified_name or qualified_type: the rules are
1002 identical. If the parser is parsing 'A::B::x', then, when it sees
1003 the second '::', it knows that the expression to the left of it has
1004 to be a type, so it uses qualified_type. But if it is parsing just
1005 'A::B', then it doesn't have any way of knowing which rule to use,
1006 so there's a reduce-reduce conflict; it picks qualified_name, since
1007 that occurs earlier in this file than qualified_type.
1008
1009 There's no good way to fix this with the grammar as it stands; as
1010 far as I can tell, some of the problems arise from ambiguities that
1011 GDB introduces ('start' can be either an expression or a type), but
1012 some of it is inherent to the nature of C++ (you want to treat the
1013 input "(FOO)" fairly differently depending on whether FOO is an
1014 expression or a type, and if FOO is a complex expression, this can
1015 be hard to determine at the right time). Fortunately, it works
1016 pretty well in most cases. For example, if you do 'ptype A::B',
1017 where A::B is a nested type, then the parser will mistakenly
1018 misidentify it as an expression; but evaluate_subexp will get
1019 called with 'noside' set to EVAL_AVOID_SIDE_EFFECTS, and everything
1020 will work out anyways. But there are situations where the parser
1021 will get confused: the most common one that I've run into is when
1022 you want to do
1023
1024 print *((A::B *) x)"
1025
1026 where the parser doesn't realize that A::B has to be a type until
1027 it hits the first right paren, at which point it's too late. (The
1028 workaround is to type "print *(('A::B' *) x)" instead.) (And
1029 another solution is to fix our symbol-handling code so that the
1030 user never wants to type something like that in the first place,
1031 because we get all the types right without the user's help!)
1032
1033 Perhaps we could fix this by making the lexer smarter. Some of
1034 this functionality used to be in the lexer, but in a way that
1035 worked even less well than the current solution: that attempt
1036 involved having the parser sometimes handle '::' and having the
1037 lexer sometimes handle it, and without a clear division of
1038 responsibility, it quickly degenerated into a big mess. Probably
1039 the eventual correct solution will give more of a role to the lexer
1040 (ideally via code that is shared between the lexer and
1041 decode_line_1), but I'm not holding my breath waiting for somebody
1042 to get around to cleaning this up... */
1043
1044 qualified_type: typebase COLONCOLON name
1045 {
1046 struct type *type = $1;
1047 struct type *new_type;
1048 char *ncopy = alloca ($3.length + 1);
1049
1050 memcpy (ncopy, $3.ptr, $3.length);
1051 ncopy[$3.length] = '\0';
1052
1053 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
1054 && TYPE_CODE (type) != TYPE_CODE_UNION
1055 && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
1056 error ("`%s' is not defined as an aggregate type.",
1057 TYPE_NAME (type));
1058
1059 new_type = cp_lookup_nested_type (type, ncopy,
1060 expression_context_block);
1061 if (new_type == NULL)
1062 error ("No type \"%s\" within class or namespace \"%s\".",
1063 ncopy, TYPE_NAME (type));
1064
1065 $$ = new_type;
1066 }
1067 ;
1068
1069 typename: TYPENAME
1070 | INT_KEYWORD
1071 {
1072 $$.stoken.ptr = "int";
1073 $$.stoken.length = 3;
1074 $$.type = parse_type->builtin_int;
1075 }
1076 | LONG
1077 {
1078 $$.stoken.ptr = "long";
1079 $$.stoken.length = 4;
1080 $$.type = parse_type->builtin_long;
1081 }
1082 | SHORT
1083 {
1084 $$.stoken.ptr = "short";
1085 $$.stoken.length = 5;
1086 $$.type = parse_type->builtin_short;
1087 }
1088 ;
1089
1090 nonempty_typelist
1091 : type
1092 { $$ = (struct type **) malloc (sizeof (struct type *) * 2);
1093 $<ivec>$[0] = 1; /* Number of types in vector */
1094 $$[1] = $1;
1095 }
1096 | nonempty_typelist ',' type
1097 { int len = sizeof (struct type *) * (++($<ivec>1[0]) + 1);
1098 $$ = (struct type **) realloc ((char *) $1, len);
1099 $$[$<ivec>$[0]] = $3;
1100 }
1101 ;
1102
1103 ptype : typebase
1104 | ptype const_or_volatile_or_space_identifier abs_decl const_or_volatile_or_space_identifier
1105 { $$ = follow_types ($1); }
1106 ;
1107
1108 const_and_volatile: CONST_KEYWORD VOLATILE_KEYWORD
1109 | VOLATILE_KEYWORD CONST_KEYWORD
1110 ;
1111
1112 const_or_volatile_noopt: const_and_volatile
1113 { push_type (tp_const);
1114 push_type (tp_volatile);
1115 }
1116 | CONST_KEYWORD
1117 { push_type (tp_const); }
1118 | VOLATILE_KEYWORD
1119 { push_type (tp_volatile); }
1120 ;
1121
1122 name : NAME { $$ = $1.stoken; }
1123 | BLOCKNAME { $$ = $1.stoken; }
1124 | TYPENAME { $$ = $1.stoken; }
1125 | NAME_OR_INT { $$ = $1.stoken; }
1126 ;
1127
1128 name_not_typename : NAME
1129 | BLOCKNAME
1130 /* These would be useful if name_not_typename was useful, but it is just
1131 a fake for "variable", so these cause reduce/reduce conflicts because
1132 the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
1133 =exp) or just an exp. If name_not_typename was ever used in an lvalue
1134 context where only a name could occur, this might be useful.
1135 | NAME_OR_INT
1136 */
1137 ;
1138
1139 %%
1140
1141 /* Take care of parsing a number (anything that starts with a digit).
1142 Set yylval and return the token type; update lexptr.
1143 LEN is the number of characters in it. */
1144
1145 /*** Needs some error checking for the float case ***/
1146
1147 static int
1148 parse_number (char *p, int len, int parsed_float, YYSTYPE *putithere)
1149 {
1150 /* FIXME: Shouldn't these be unsigned? We don't deal with negative values
1151 here, and we do kind of silly things like cast to unsigned. */
1152 LONGEST n = 0;
1153 LONGEST prevn = 0;
1154 ULONGEST un;
1155
1156 int i = 0;
1157 int c;
1158 int base = input_radix;
1159 int unsigned_p = 0;
1160
1161 /* Number of "L" suffixes encountered. */
1162 int long_p = 0;
1163
1164 /* We have found a "L" or "U" suffix. */
1165 int found_suffix = 0;
1166
1167 ULONGEST high_bit;
1168 struct type *signed_type;
1169 struct type *unsigned_type;
1170
1171 if (parsed_float)
1172 {
1173 /* It's a float since it contains a point or an exponent. */
1174 char *s;
1175 int num; /* number of tokens scanned by scanf */
1176 char saved_char;
1177
1178 /* If it ends at "df", "dd" or "dl", take it as type of decimal floating
1179 point. Return DECFLOAT. */
1180
1181 if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'f')
1182 {
1183 p[len - 2] = '\0';
1184 putithere->typed_val_decfloat.type
1185 = parse_type->builtin_decfloat;
1186 decimal_from_string (putithere->typed_val_decfloat.val, 4,
1187 gdbarch_byte_order (parse_gdbarch), p);
1188 p[len - 2] = 'd';
1189 return DECFLOAT;
1190 }
1191
1192 if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'd')
1193 {
1194 p[len - 2] = '\0';
1195 putithere->typed_val_decfloat.type
1196 = parse_type->builtin_decdouble;
1197 decimal_from_string (putithere->typed_val_decfloat.val, 8,
1198 gdbarch_byte_order (parse_gdbarch), p);
1199 p[len - 2] = 'd';
1200 return DECFLOAT;
1201 }
1202
1203 if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'l')
1204 {
1205 p[len - 2] = '\0';
1206 putithere->typed_val_decfloat.type
1207 = parse_type->builtin_declong;
1208 decimal_from_string (putithere->typed_val_decfloat.val, 16,
1209 gdbarch_byte_order (parse_gdbarch), p);
1210 p[len - 2] = 'd';
1211 return DECFLOAT;
1212 }
1213
1214 s = malloc (len);
1215 saved_char = p[len];
1216 p[len] = 0; /* null-terminate the token */
1217 num = sscanf (p, "%" DOUBLEST_SCAN_FORMAT "%s",
1218 &putithere->typed_val_float.dval, s);
1219 p[len] = saved_char; /* restore the input stream */
1220
1221 if (num == 1)
1222 putithere->typed_val_float.type =
1223 parse_type->builtin_double;
1224
1225 if (num == 2 )
1226 {
1227 /* See if it has any float suffix: 'f' for float, 'l' for long
1228 double. */
1229 if (!strcasecmp (s, "f"))
1230 putithere->typed_val_float.type =
1231 parse_type->builtin_float;
1232 else if (!strcasecmp (s, "l"))
1233 putithere->typed_val_float.type =
1234 parse_type->builtin_long_double;
1235 else
1236 {
1237 free (s);
1238 return ERROR;
1239 }
1240 }
1241
1242 free (s);
1243 return FLOAT;
1244 }
1245
1246 /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
1247 if (p[0] == '0')
1248 switch (p[1])
1249 {
1250 case 'x':
1251 case 'X':
1252 if (len >= 3)
1253 {
1254 p += 2;
1255 base = 16;
1256 len -= 2;
1257 }
1258 break;
1259
1260 case 't':
1261 case 'T':
1262 case 'd':
1263 case 'D':
1264 if (len >= 3)
1265 {
1266 p += 2;
1267 base = 10;
1268 len -= 2;
1269 }
1270 break;
1271
1272 default:
1273 base = 8;
1274 break;
1275 }
1276
1277 while (len-- > 0)
1278 {
1279 c = *p++;
1280 if (c >= 'A' && c <= 'Z')
1281 c += 'a' - 'A';
1282 if (c != 'l' && c != 'u')
1283 n *= base;
1284 if (c >= '0' && c <= '9')
1285 {
1286 if (found_suffix)
1287 return ERROR;
1288 n += i = c - '0';
1289 }
1290 else
1291 {
1292 if (base > 10 && c >= 'a' && c <= 'f')
1293 {
1294 if (found_suffix)
1295 return ERROR;
1296 n += i = c - 'a' + 10;
1297 }
1298 else if (c == 'l')
1299 {
1300 ++long_p;
1301 found_suffix = 1;
1302 }
1303 else if (c == 'u')
1304 {
1305 unsigned_p = 1;
1306 found_suffix = 1;
1307 }
1308 else
1309 return ERROR; /* Char not a digit */
1310 }
1311 if (i >= base)
1312 return ERROR; /* Invalid digit in this base */
1313
1314 /* Portably test for overflow (only works for nonzero values, so make
1315 a second check for zero). FIXME: Can't we just make n and prevn
1316 unsigned and avoid this? */
1317 if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
1318 unsigned_p = 1; /* Try something unsigned */
1319
1320 /* Portably test for unsigned overflow.
1321 FIXME: This check is wrong; for example it doesn't find overflow
1322 on 0x123456789 when LONGEST is 32 bits. */
1323 if (c != 'l' && c != 'u' && n != 0)
1324 {
1325 if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n))
1326 error ("Numeric constant too large.");
1327 }
1328 prevn = n;
1329 }
1330
1331 /* An integer constant is an int, a long, or a long long. An L
1332 suffix forces it to be long; an LL suffix forces it to be long
1333 long. If not forced to a larger size, it gets the first type of
1334 the above that it fits in. To figure out whether it fits, we
1335 shift it right and see whether anything remains. Note that we
1336 can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
1337 operation, because many compilers will warn about such a shift
1338 (which always produces a zero result). Sometimes gdbarch_int_bit
1339 or gdbarch_long_bit will be that big, sometimes not. To deal with
1340 the case where it is we just always shift the value more than
1341 once, with fewer bits each time. */
1342
1343 un = (ULONGEST)n >> 2;
1344 if (long_p == 0
1345 && (un >> (gdbarch_int_bit (parse_gdbarch) - 2)) == 0)
1346 {
1347 high_bit = ((ULONGEST)1) << (gdbarch_int_bit (parse_gdbarch) - 1);
1348
1349 /* A large decimal (not hex or octal) constant (between INT_MAX
1350 and UINT_MAX) is a long or unsigned long, according to ANSI,
1351 never an unsigned int, but this code treats it as unsigned
1352 int. This probably should be fixed. GCC gives a warning on
1353 such constants. */
1354
1355 unsigned_type = parse_type->builtin_unsigned_int;
1356 signed_type = parse_type->builtin_int;
1357 }
1358 else if (long_p <= 1
1359 && (un >> (gdbarch_long_bit (parse_gdbarch) - 2)) == 0)
1360 {
1361 high_bit = ((ULONGEST)1) << (gdbarch_long_bit (parse_gdbarch) - 1);
1362 unsigned_type = parse_type->builtin_unsigned_long;
1363 signed_type = parse_type->builtin_long;
1364 }
1365 else
1366 {
1367 int shift;
1368 if (sizeof (ULONGEST) * HOST_CHAR_BIT
1369 < gdbarch_long_long_bit (parse_gdbarch))
1370 /* A long long does not fit in a LONGEST. */
1371 shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1);
1372 else
1373 shift = (gdbarch_long_long_bit (parse_gdbarch) - 1);
1374 high_bit = (ULONGEST) 1 << shift;
1375 unsigned_type = parse_type->builtin_unsigned_long_long;
1376 signed_type = parse_type->builtin_long_long;
1377 }
1378
1379 putithere->typed_val_int.val = n;
1380
1381 /* If the high bit of the worked out type is set then this number
1382 has to be unsigned. */
1383
1384 if (unsigned_p || (n & high_bit))
1385 {
1386 putithere->typed_val_int.type = unsigned_type;
1387 }
1388 else
1389 {
1390 putithere->typed_val_int.type = signed_type;
1391 }
1392
1393 return INT;
1394 }
1395
1396 /* Temporary obstack used for holding strings. */
1397 static struct obstack tempbuf;
1398 static int tempbuf_init;
1399
1400 /* Parse a C escape sequence. The initial backslash of the sequence
1401 is at (*PTR)[-1]. *PTR will be updated to point to just after the
1402 last character of the sequence. If OUTPUT is not NULL, the
1403 translated form of the escape sequence will be written there. If
1404 OUTPUT is NULL, no output is written and the call will only affect
1405 *PTR. If an escape sequence is expressed in target bytes, then the
1406 entire sequence will simply be copied to OUTPUT. Return 1 if any
1407 character was emitted, 0 otherwise. */
1408
1409 int
1410 c_parse_escape (char **ptr, struct obstack *output)
1411 {
1412 char *tokptr = *ptr;
1413 int result = 1;
1414
1415 /* Some escape sequences undergo character set conversion. Those we
1416 translate here. */
1417 switch (*tokptr)
1418 {
1419 /* Hex escapes do not undergo character set conversion, so keep
1420 the escape sequence for later. */
1421 case 'x':
1422 if (output)
1423 obstack_grow_str (output, "\\x");
1424 ++tokptr;
1425 if (!isxdigit (*tokptr))
1426 error (_("\\x escape without a following hex digit"));
1427 while (isxdigit (*tokptr))
1428 {
1429 if (output)
1430 obstack_1grow (output, *tokptr);
1431 ++tokptr;
1432 }
1433 break;
1434
1435 /* Octal escapes do not undergo character set conversion, so
1436 keep the escape sequence for later. */
1437 case '0':
1438 case '1':
1439 case '2':
1440 case '3':
1441 case '4':
1442 case '5':
1443 case '6':
1444 case '7':
1445 {
1446 int i;
1447 if (output)
1448 obstack_grow_str (output, "\\");
1449 for (i = 0;
1450 i < 3 && isdigit (*tokptr) && *tokptr != '8' && *tokptr != '9';
1451 ++i)
1452 {
1453 if (output)
1454 obstack_1grow (output, *tokptr);
1455 ++tokptr;
1456 }
1457 }
1458 break;
1459
1460 /* We handle UCNs later. We could handle them here, but that
1461 would mean a spurious error in the case where the UCN could
1462 be converted to the target charset but not the host
1463 charset. */
1464 case 'u':
1465 case 'U':
1466 {
1467 char c = *tokptr;
1468 int i, len = c == 'U' ? 8 : 4;
1469 if (output)
1470 {
1471 obstack_1grow (output, '\\');
1472 obstack_1grow (output, *tokptr);
1473 }
1474 ++tokptr;
1475 if (!isxdigit (*tokptr))
1476 error (_("\\%c escape without a following hex digit"), c);
1477 for (i = 0; i < len && isxdigit (*tokptr); ++i)
1478 {
1479 if (output)
1480 obstack_1grow (output, *tokptr);
1481 ++tokptr;
1482 }
1483 }
1484 break;
1485
1486 /* We must pass backslash through so that it does not
1487 cause quoting during the second expansion. */
1488 case '\\':
1489 if (output)
1490 obstack_grow_str (output, "\\\\");
1491 ++tokptr;
1492 break;
1493
1494 /* Escapes which undergo conversion. */
1495 case 'a':
1496 if (output)
1497 obstack_1grow (output, '\a');
1498 ++tokptr;
1499 break;
1500 case 'b':
1501 if (output)
1502 obstack_1grow (output, '\b');
1503 ++tokptr;
1504 break;
1505 case 'f':
1506 if (output)
1507 obstack_1grow (output, '\f');
1508 ++tokptr;
1509 break;
1510 case 'n':
1511 if (output)
1512 obstack_1grow (output, '\n');
1513 ++tokptr;
1514 break;
1515 case 'r':
1516 if (output)
1517 obstack_1grow (output, '\r');
1518 ++tokptr;
1519 break;
1520 case 't':
1521 if (output)
1522 obstack_1grow (output, '\t');
1523 ++tokptr;
1524 break;
1525 case 'v':
1526 if (output)
1527 obstack_1grow (output, '\v');
1528 ++tokptr;
1529 break;
1530
1531 /* GCC extension. */
1532 case 'e':
1533 if (output)
1534 obstack_1grow (output, HOST_ESCAPE_CHAR);
1535 ++tokptr;
1536 break;
1537
1538 /* Backslash-newline expands to nothing at all. */
1539 case '\n':
1540 ++tokptr;
1541 result = 0;
1542 break;
1543
1544 /* A few escapes just expand to the character itself. */
1545 case '\'':
1546 case '\"':
1547 case '?':
1548 /* GCC extensions. */
1549 case '(':
1550 case '{':
1551 case '[':
1552 case '%':
1553 /* Unrecognized escapes turn into the character itself. */
1554 default:
1555 if (output)
1556 obstack_1grow (output, *tokptr);
1557 ++tokptr;
1558 break;
1559 }
1560 *ptr = tokptr;
1561 return result;
1562 }
1563
1564 /* Parse a string or character literal from TOKPTR. The string or
1565 character may be wide or unicode. *OUTPTR is set to just after the
1566 end of the literal in the input string. The resulting token is
1567 stored in VALUE. This returns a token value, either STRING or
1568 CHAR, depending on what was parsed. *HOST_CHARS is set to the
1569 number of host characters in the literal. */
1570 static int
1571 parse_string_or_char (char *tokptr, char **outptr, struct typed_stoken *value,
1572 int *host_chars)
1573 {
1574 int quote, i;
1575 enum c_string_type type;
1576
1577 /* Build the gdb internal form of the input string in tempbuf. Note
1578 that the buffer is null byte terminated *only* for the
1579 convenience of debugging gdb itself and printing the buffer
1580 contents when the buffer contains no embedded nulls. Gdb does
1581 not depend upon the buffer being null byte terminated, it uses
1582 the length string instead. This allows gdb to handle C strings
1583 (as well as strings in other languages) with embedded null
1584 bytes */
1585
1586 if (!tempbuf_init)
1587 tempbuf_init = 1;
1588 else
1589 obstack_free (&tempbuf, NULL);
1590 obstack_init (&tempbuf);
1591
1592 /* Record the string type. */
1593 if (*tokptr == 'L')
1594 {
1595 type = C_WIDE_STRING;
1596 ++tokptr;
1597 }
1598 else if (*tokptr == 'u')
1599 {
1600 type = C_STRING_16;
1601 ++tokptr;
1602 }
1603 else if (*tokptr == 'U')
1604 {
1605 type = C_STRING_32;
1606 ++tokptr;
1607 }
1608 else
1609 type = C_STRING;
1610
1611 /* Skip the quote. */
1612 quote = *tokptr;
1613 if (quote == '\'')
1614 type |= C_CHAR;
1615 ++tokptr;
1616
1617 *host_chars = 0;
1618
1619 while (*tokptr)
1620 {
1621 char c = *tokptr;
1622 if (c == '\\')
1623 {
1624 ++tokptr;
1625 *host_chars += c_parse_escape (&tokptr, &tempbuf);
1626 }
1627 else if (c == quote)
1628 break;
1629 else
1630 {
1631 obstack_1grow (&tempbuf, c);
1632 ++tokptr;
1633 /* FIXME: this does the wrong thing with multi-byte host
1634 characters. We could use mbrlen here, but that would
1635 make "set host-charset" a bit less useful. */
1636 ++*host_chars;
1637 }
1638 }
1639
1640 if (*tokptr != quote)
1641 {
1642 if (quote == '"')
1643 error ("Unterminated string in expression.");
1644 else
1645 error ("Unmatched single quote.");
1646 }
1647 ++tokptr;
1648
1649 value->type = type;
1650 value->ptr = obstack_base (&tempbuf);
1651 value->length = obstack_object_size (&tempbuf);
1652
1653 *outptr = tokptr;
1654
1655 return quote == '"' ? STRING : CHAR;
1656 }
1657
1658 struct token
1659 {
1660 char *operator;
1661 int token;
1662 enum exp_opcode opcode;
1663 int cxx_only;
1664 };
1665
1666 static const struct token tokentab3[] =
1667 {
1668 {">>=", ASSIGN_MODIFY, BINOP_RSH, 0},
1669 {"<<=", ASSIGN_MODIFY, BINOP_LSH, 0},
1670 {"->*", ARROW_STAR, BINOP_END, 1}
1671 };
1672
1673 static const struct token tokentab2[] =
1674 {
1675 {"+=", ASSIGN_MODIFY, BINOP_ADD, 0},
1676 {"-=", ASSIGN_MODIFY, BINOP_SUB, 0},
1677 {"*=", ASSIGN_MODIFY, BINOP_MUL, 0},
1678 {"/=", ASSIGN_MODIFY, BINOP_DIV, 0},
1679 {"%=", ASSIGN_MODIFY, BINOP_REM, 0},
1680 {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR, 0},
1681 {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND, 0},
1682 {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR, 0},
1683 {"++", INCREMENT, BINOP_END, 0},
1684 {"--", DECREMENT, BINOP_END, 0},
1685 {"->", ARROW, BINOP_END, 0},
1686 {"&&", ANDAND, BINOP_END, 0},
1687 {"||", OROR, BINOP_END, 0},
1688 /* "::" is *not* only C++: gdb overrides its meaning in several
1689 different ways, e.g., 'filename'::func, function::variable. */
1690 {"::", COLONCOLON, BINOP_END, 0},
1691 {"<<", LSH, BINOP_END, 0},
1692 {">>", RSH, BINOP_END, 0},
1693 {"==", EQUAL, BINOP_END, 0},
1694 {"!=", NOTEQUAL, BINOP_END, 0},
1695 {"<=", LEQ, BINOP_END, 0},
1696 {">=", GEQ, BINOP_END, 0},
1697 {".*", DOT_STAR, BINOP_END, 1}
1698 };
1699
1700 /* Identifier-like tokens. */
1701 static const struct token ident_tokens[] =
1702 {
1703 {"unsigned", UNSIGNED, OP_NULL, 0},
1704 {"template", TEMPLATE, OP_NULL, 1},
1705 {"volatile", VOLATILE_KEYWORD, OP_NULL, 0},
1706 {"struct", STRUCT, OP_NULL, 0},
1707 {"signed", SIGNED_KEYWORD, OP_NULL, 0},
1708 {"sizeof", SIZEOF, OP_NULL, 0},
1709 {"double", DOUBLE_KEYWORD, OP_NULL, 0},
1710 {"false", FALSEKEYWORD, OP_NULL, 1},
1711 {"class", CLASS, OP_NULL, 1},
1712 {"union", UNION, OP_NULL, 0},
1713 {"short", SHORT, OP_NULL, 0},
1714 {"const", CONST_KEYWORD, OP_NULL, 0},
1715 {"enum", ENUM, OP_NULL, 0},
1716 {"long", LONG, OP_NULL, 0},
1717 {"true", TRUEKEYWORD, OP_NULL, 1},
1718 {"int", INT_KEYWORD, OP_NULL, 0},
1719
1720 {"and", ANDAND, BINOP_END, 1},
1721 {"and_eq", ASSIGN_MODIFY, BINOP_BITWISE_AND, 1},
1722 {"bitand", '&', OP_NULL, 1},
1723 {"bitor", '|', OP_NULL, 1},
1724 {"compl", '~', OP_NULL, 1},
1725 {"not", '!', OP_NULL, 1},
1726 {"not_eq", NOTEQUAL, BINOP_END, 1},
1727 {"or", OROR, BINOP_END, 1},
1728 {"or_eq", ASSIGN_MODIFY, BINOP_BITWISE_IOR, 1},
1729 {"xor", '^', OP_NULL, 1},
1730 {"xor_eq", ASSIGN_MODIFY, BINOP_BITWISE_XOR, 1}
1731 };
1732
1733 /* When we find that lexptr (the global var defined in parse.c) is
1734 pointing at a macro invocation, we expand the invocation, and call
1735 scan_macro_expansion to save the old lexptr here and point lexptr
1736 into the expanded text. When we reach the end of that, we call
1737 end_macro_expansion to pop back to the value we saved here. The
1738 macro expansion code promises to return only fully-expanded text,
1739 so we don't need to "push" more than one level.
1740
1741 This is disgusting, of course. It would be cleaner to do all macro
1742 expansion beforehand, and then hand that to lexptr. But we don't
1743 really know where the expression ends. Remember, in a command like
1744
1745 (gdb) break *ADDRESS if CONDITION
1746
1747 we evaluate ADDRESS in the scope of the current frame, but we
1748 evaluate CONDITION in the scope of the breakpoint's location. So
1749 it's simply wrong to try to macro-expand the whole thing at once. */
1750 static char *macro_original_text;
1751
1752 /* We save all intermediate macro expansions on this obstack for the
1753 duration of a single parse. The expansion text may sometimes have
1754 to live past the end of the expansion, due to yacc lookahead.
1755 Rather than try to be clever about saving the data for a single
1756 token, we simply keep it all and delete it after parsing has
1757 completed. */
1758 static struct obstack expansion_obstack;
1759
1760 static void
1761 scan_macro_expansion (char *expansion)
1762 {
1763 char *copy;
1764
1765 /* We'd better not be trying to push the stack twice. */
1766 gdb_assert (! macro_original_text);
1767
1768 /* Copy to the obstack, and then free the intermediate
1769 expansion. */
1770 copy = obstack_copy0 (&expansion_obstack, expansion, strlen (expansion));
1771 xfree (expansion);
1772
1773 /* Save the old lexptr value, so we can return to it when we're done
1774 parsing the expanded text. */
1775 macro_original_text = lexptr;
1776 lexptr = copy;
1777 }
1778
1779
1780 static int
1781 scanning_macro_expansion (void)
1782 {
1783 return macro_original_text != 0;
1784 }
1785
1786
1787 static void
1788 finished_macro_expansion (void)
1789 {
1790 /* There'd better be something to pop back to. */
1791 gdb_assert (macro_original_text);
1792
1793 /* Pop back to the original text. */
1794 lexptr = macro_original_text;
1795 macro_original_text = 0;
1796 }
1797
1798
1799 static void
1800 scan_macro_cleanup (void *dummy)
1801 {
1802 if (macro_original_text)
1803 finished_macro_expansion ();
1804
1805 obstack_free (&expansion_obstack, NULL);
1806 }
1807
1808
1809 /* The scope used for macro expansion. */
1810 static struct macro_scope *expression_macro_scope;
1811
1812 /* This is set if a NAME token appeared at the very end of the input
1813 string, with no whitespace separating the name from the EOF. This
1814 is used only when parsing to do field name completion. */
1815 static int saw_name_at_eof;
1816
1817 /* This is set if the previously-returned token was a structure
1818 operator -- either '.' or ARROW. This is used only when parsing to
1819 do field name completion. */
1820 static int last_was_structop;
1821
1822 /* Read one token, getting characters through lexptr. */
1823
1824 static int
1825 yylex (void)
1826 {
1827 int c;
1828 int namelen;
1829 unsigned int i;
1830 char *tokstart;
1831 int saw_structop = last_was_structop;
1832 char *copy;
1833
1834 last_was_structop = 0;
1835
1836 retry:
1837
1838 /* Check if this is a macro invocation that we need to expand. */
1839 if (! scanning_macro_expansion ())
1840 {
1841 char *expanded = macro_expand_next (&lexptr,
1842 standard_macro_lookup,
1843 expression_macro_scope);
1844
1845 if (expanded)
1846 scan_macro_expansion (expanded);
1847 }
1848
1849 prev_lexptr = lexptr;
1850
1851 tokstart = lexptr;
1852 /* See if it is a special token of length 3. */
1853 for (i = 0; i < sizeof tokentab3 / sizeof tokentab3[0]; i++)
1854 if (strncmp (tokstart, tokentab3[i].operator, 3) == 0)
1855 {
1856 if (tokentab3[i].cxx_only
1857 && parse_language->la_language != language_cplus)
1858 break;
1859
1860 lexptr += 3;
1861 yylval.opcode = tokentab3[i].opcode;
1862 return tokentab3[i].token;
1863 }
1864
1865 /* See if it is a special token of length 2. */
1866 for (i = 0; i < sizeof tokentab2 / sizeof tokentab2[0]; i++)
1867 if (strncmp (tokstart, tokentab2[i].operator, 2) == 0)
1868 {
1869 if (tokentab2[i].cxx_only
1870 && parse_language->la_language != language_cplus)
1871 break;
1872
1873 lexptr += 2;
1874 yylval.opcode = tokentab2[i].opcode;
1875 if (in_parse_field && tokentab2[i].token == ARROW)
1876 last_was_structop = 1;
1877 return tokentab2[i].token;
1878 }
1879
1880 switch (c = *tokstart)
1881 {
1882 case 0:
1883 /* If we were just scanning the result of a macro expansion,
1884 then we need to resume scanning the original text.
1885 If we're parsing for field name completion, and the previous
1886 token allows such completion, return a COMPLETE token.
1887 Otherwise, we were already scanning the original text, and
1888 we're really done. */
1889 if (scanning_macro_expansion ())
1890 {
1891 finished_macro_expansion ();
1892 goto retry;
1893 }
1894 else if (saw_name_at_eof)
1895 {
1896 saw_name_at_eof = 0;
1897 return COMPLETE;
1898 }
1899 else if (saw_structop)
1900 return COMPLETE;
1901 else
1902 return 0;
1903
1904 case ' ':
1905 case '\t':
1906 case '\n':
1907 lexptr++;
1908 goto retry;
1909
1910 case '[':
1911 case '(':
1912 paren_depth++;
1913 lexptr++;
1914 return c;
1915
1916 case ']':
1917 case ')':
1918 if (paren_depth == 0)
1919 return 0;
1920 paren_depth--;
1921 lexptr++;
1922 return c;
1923
1924 case ',':
1925 if (comma_terminates
1926 && paren_depth == 0
1927 && ! scanning_macro_expansion ())
1928 return 0;
1929 lexptr++;
1930 return c;
1931
1932 case '.':
1933 /* Might be a floating point number. */
1934 if (lexptr[1] < '0' || lexptr[1] > '9')
1935 {
1936 if (in_parse_field)
1937 last_was_structop = 1;
1938 goto symbol; /* Nope, must be a symbol. */
1939 }
1940 /* FALL THRU into number case. */
1941
1942 case '0':
1943 case '1':
1944 case '2':
1945 case '3':
1946 case '4':
1947 case '5':
1948 case '6':
1949 case '7':
1950 case '8':
1951 case '9':
1952 {
1953 /* It's a number. */
1954 int got_dot = 0, got_e = 0, toktype;
1955 char *p = tokstart;
1956 int hex = input_radix > 10;
1957
1958 if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
1959 {
1960 p += 2;
1961 hex = 1;
1962 }
1963 else if (c == '0' && (p[1]=='t' || p[1]=='T' || p[1]=='d' || p[1]=='D'))
1964 {
1965 p += 2;
1966 hex = 0;
1967 }
1968
1969 for (;; ++p)
1970 {
1971 /* This test includes !hex because 'e' is a valid hex digit
1972 and thus does not indicate a floating point number when
1973 the radix is hex. */
1974 if (!hex && !got_e && (*p == 'e' || *p == 'E'))
1975 got_dot = got_e = 1;
1976 /* This test does not include !hex, because a '.' always indicates
1977 a decimal floating point number regardless of the radix. */
1978 else if (!got_dot && *p == '.')
1979 got_dot = 1;
1980 else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
1981 && (*p == '-' || *p == '+'))
1982 /* This is the sign of the exponent, not the end of the
1983 number. */
1984 continue;
1985 /* We will take any letters or digits. parse_number will
1986 complain if past the radix, or if L or U are not final. */
1987 else if ((*p < '0' || *p > '9')
1988 && ((*p < 'a' || *p > 'z')
1989 && (*p < 'A' || *p > 'Z')))
1990 break;
1991 }
1992 toktype = parse_number (tokstart, p - tokstart, got_dot|got_e, &yylval);
1993 if (toktype == ERROR)
1994 {
1995 char *err_copy = (char *) alloca (p - tokstart + 1);
1996
1997 memcpy (err_copy, tokstart, p - tokstart);
1998 err_copy[p - tokstart] = 0;
1999 error ("Invalid number \"%s\".", err_copy);
2000 }
2001 lexptr = p;
2002 return toktype;
2003 }
2004
2005 case '+':
2006 case '-':
2007 case '*':
2008 case '/':
2009 case '%':
2010 case '|':
2011 case '&':
2012 case '^':
2013 case '~':
2014 case '!':
2015 case '@':
2016 case '<':
2017 case '>':
2018 case '?':
2019 case ':':
2020 case '=':
2021 case '{':
2022 case '}':
2023 symbol:
2024 lexptr++;
2025 return c;
2026
2027 case 'L':
2028 case 'u':
2029 case 'U':
2030 if (tokstart[1] != '"' && tokstart[1] != '\'')
2031 break;
2032 /* Fall through. */
2033 case '\'':
2034 case '"':
2035 {
2036 int host_len;
2037 int result = parse_string_or_char (tokstart, &lexptr, &yylval.tsval,
2038 &host_len);
2039 if (result == CHAR)
2040 {
2041 if (host_len == 0)
2042 error ("Empty character constant.");
2043 else if (host_len > 2 && c == '\'')
2044 {
2045 ++tokstart;
2046 namelen = lexptr - tokstart - 1;
2047 goto tryname;
2048 }
2049 else if (host_len > 1)
2050 error ("Invalid character constant.");
2051 }
2052 return result;
2053 }
2054 }
2055
2056 if (!(c == '_' || c == '$'
2057 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
2058 /* We must have come across a bad character (e.g. ';'). */
2059 error ("Invalid character '%c' in expression.", c);
2060
2061 /* It's a name. See how long it is. */
2062 namelen = 0;
2063 for (c = tokstart[namelen];
2064 (c == '_' || c == '$' || (c >= '0' && c <= '9')
2065 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '<');)
2066 {
2067 /* Template parameter lists are part of the name.
2068 FIXME: This mishandles `print $a<4&&$a>3'. */
2069
2070 if (c == '<')
2071 {
2072 /* Scan ahead to get rest of the template specification. Note
2073 that we look ahead only when the '<' adjoins non-whitespace
2074 characters; for comparison expressions, e.g. "a < b > c",
2075 there must be spaces before the '<', etc. */
2076
2077 char * p = find_template_name_end (tokstart + namelen);
2078 if (p)
2079 namelen = p - tokstart;
2080 break;
2081 }
2082 c = tokstart[++namelen];
2083 }
2084
2085 /* The token "if" terminates the expression and is NOT removed from
2086 the input stream. It doesn't count if it appears in the
2087 expansion of a macro. */
2088 if (namelen == 2
2089 && tokstart[0] == 'i'
2090 && tokstart[1] == 'f'
2091 && ! scanning_macro_expansion ())
2092 {
2093 return 0;
2094 }
2095
2096 lexptr += namelen;
2097
2098 tryname:
2099
2100 yylval.sval.ptr = tokstart;
2101 yylval.sval.length = namelen;
2102
2103 /* Catch specific keywords. */
2104 copy = copy_name (yylval.sval);
2105 for (i = 0; i < sizeof ident_tokens / sizeof ident_tokens[0]; i++)
2106 if (strcmp (copy, ident_tokens[i].operator) == 0)
2107 {
2108 if (ident_tokens[i].cxx_only
2109 && parse_language->la_language != language_cplus)
2110 break;
2111
2112 /* It is ok to always set this, even though we don't always
2113 strictly need to. */
2114 yylval.opcode = ident_tokens[i].opcode;
2115 return ident_tokens[i].token;
2116 }
2117
2118 if (*tokstart == '$')
2119 {
2120 write_dollar_variable (yylval.sval);
2121 return VARIABLE;
2122 }
2123
2124 /* Use token-type BLOCKNAME for symbols that happen to be defined as
2125 functions or symtabs. If this is not so, then ...
2126 Use token-type TYPENAME for symbols that happen to be defined
2127 currently as names of types; NAME for other symbols.
2128 The caller is not constrained to care about the distinction. */
2129 {
2130 struct symbol *sym;
2131 int is_a_field_of_this = 0;
2132 int hextype;
2133
2134 sym = lookup_symbol (copy, expression_context_block,
2135 VAR_DOMAIN,
2136 parse_language->la_language == language_cplus
2137 ? &is_a_field_of_this : (int *) NULL);
2138 /* Call lookup_symtab, not lookup_partial_symtab, in case there are
2139 no psymtabs (coff, xcoff, or some future change to blow away the
2140 psymtabs once once symbols are read). */
2141 if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
2142 {
2143 yylval.ssym.sym = sym;
2144 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
2145 return BLOCKNAME;
2146 }
2147 else if (!sym)
2148 { /* See if it's a file name. */
2149 struct symtab *symtab;
2150
2151 symtab = lookup_symtab (copy);
2152
2153 if (symtab)
2154 {
2155 yylval.bval = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK);
2156 return FILENAME;
2157 }
2158 }
2159
2160 if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2161 {
2162 /* NOTE: carlton/2003-09-25: There used to be code here to
2163 handle nested types. It didn't work very well. See the
2164 comment before qualified_type for more info. */
2165 yylval.tsym.type = SYMBOL_TYPE (sym);
2166 return TYPENAME;
2167 }
2168 yylval.tsym.type
2169 = language_lookup_primitive_type_by_name (parse_language,
2170 parse_gdbarch, copy);
2171 if (yylval.tsym.type != NULL)
2172 return TYPENAME;
2173
2174 /* Input names that aren't symbols but ARE valid hex numbers,
2175 when the input radix permits them, can be names or numbers
2176 depending on the parse. Note we support radixes > 16 here. */
2177 if (!sym &&
2178 ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10) ||
2179 (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10)))
2180 {
2181 YYSTYPE newlval; /* Its value is ignored. */
2182 hextype = parse_number (tokstart, namelen, 0, &newlval);
2183 if (hextype == INT)
2184 {
2185 yylval.ssym.sym = sym;
2186 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
2187 return NAME_OR_INT;
2188 }
2189 }
2190
2191 /* Any other kind of symbol */
2192 yylval.ssym.sym = sym;
2193 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
2194 if (in_parse_field && *lexptr == '\0')
2195 saw_name_at_eof = 1;
2196 return NAME;
2197 }
2198 }
2199
2200 int
2201 c_parse (void)
2202 {
2203 int result;
2204 struct cleanup *back_to = make_cleanup (free_current_contents,
2205 &expression_macro_scope);
2206
2207 /* Set up the scope for macro expansion. */
2208 expression_macro_scope = NULL;
2209
2210 if (expression_context_block)
2211 expression_macro_scope
2212 = sal_macro_scope (find_pc_line (expression_context_pc, 0));
2213 else
2214 expression_macro_scope = default_macro_scope ();
2215 if (! expression_macro_scope)
2216 expression_macro_scope = user_macro_scope ();
2217
2218 /* Initialize macro expansion code. */
2219 obstack_init (&expansion_obstack);
2220 gdb_assert (! macro_original_text);
2221 make_cleanup (scan_macro_cleanup, 0);
2222
2223 /* Initialize some state used by the lexer. */
2224 last_was_structop = 0;
2225 saw_name_at_eof = 0;
2226
2227 result = yyparse ();
2228 do_cleanups (back_to);
2229 return result;
2230 }
2231
2232
2233 void
2234 yyerror (char *msg)
2235 {
2236 if (prev_lexptr)
2237 lexptr = prev_lexptr;
2238
2239 error ("A %s in expression, near `%s'.", (msg ? msg : "error"), lexptr);
2240 }
This page took 0.074362 seconds and 5 git commands to generate.