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