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