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