bfd/
[deliverable/binutils-gdb.git] / gdb / c-exp.y
CommitLineData
c906108c 1/* YACC parser for C expressions, for GDB.
0b302171
JB
2 Copyright (C) 1986, 1989-2000, 2003-2004, 2006-2012 Free Software
3 Foundation, Inc.
c906108c 4
5b1ba0e5 5 This file is part of GDB.
c906108c 6
5b1ba0e5
NS
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
c906108c 11
5b1ba0e5
NS
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
c906108c 16
5b1ba0e5
NS
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
c906108c
SS
19
20/* Parse a C expression from text in a string,
21 and return the result as a struct expression pointer.
22 That structure contains arithmetic operations in reverse polish,
23 with constants represented by operations that are followed by special data.
24 See expression.h for the details of the format.
25 What is important here is that it can be built up sequentially
26 during the process of parsing; the lower levels of the tree always
27 come first in the result.
28
29 Note that malloc's and realloc's in this file are transformed to
30 xmalloc and xrealloc respectively by the same sed command in the
31 makefile that remaps any other malloc/realloc inserted by the parser
32 generator. Doing this with #defines and trying to control the interaction
33 with include files (<malloc.h> and <stdlib.h> for example) just became
34 too messy, particularly when such includes can be inserted at random
35 times by the parser generator. */
36
37%{
38
39#include "defs.h"
40#include "gdb_string.h"
41#include <ctype.h>
42#include "expression.h"
43#include "value.h"
44#include "parser-defs.h"
45#include "language.h"
46#include "c-lang.h"
47#include "bfd.h" /* Required by objfiles.h. */
48#include "symfile.h" /* Required by objfiles.h. */
49#include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
234b45d4 50#include "charset.h"
fe898f56 51#include "block.h"
79c2c32d 52#include "cp-support.h"
27bc4d80 53#include "dfp.h"
7c8adf68
TT
54#include "gdb_assert.h"
55#include "macroscope.h"
c906108c 56
3e79cecf
UW
57#define parse_type builtin_type (parse_gdbarch)
58
c906108c
SS
59/* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
60 as well as gratuitiously global symbol names, so we can have multiple
61 yacc generated parsers in gdb. Note that these are only the variables
62 produced by yacc. If other parser generators (bison, byacc, etc) produce
63 additional global names that conflict at link time, then those parser
64 generators need to be fixed instead of adding those names to this list. */
65
66#define yymaxdepth c_maxdepth
65d12d83 67#define yyparse c_parse_internal
c906108c
SS
68#define yylex c_lex
69#define yyerror c_error
70#define yylval c_lval
71#define yychar c_char
72#define yydebug c_debug
73#define yypact c_pact
74#define yyr1 c_r1
75#define yyr2 c_r2
76#define yydef c_def
77#define yychk c_chk
78#define yypgo c_pgo
79#define yyact c_act
80#define yyexca c_exca
81#define yyerrflag c_errflag
82#define yynerrs c_nerrs
83#define yyps c_ps
84#define yypv c_pv
85#define yys c_s
86#define yy_yys c_yys
87#define yystate c_state
88#define yytmp c_tmp
89#define yyv c_v
90#define yy_yyv c_yyv
91#define yyval c_val
92#define yylloc c_lloc
93#define yyreds c_reds /* With YYDEBUG defined */
94#define yytoks c_toks /* With YYDEBUG defined */
06891d83
JT
95#define yyname c_name /* With YYDEBUG defined */
96#define yyrule c_rule /* With YYDEBUG defined */
c906108c
SS
97#define yylhs c_yylhs
98#define yylen c_yylen
99#define yydefred c_yydefred
100#define yydgoto c_yydgoto
101#define yysindex c_yysindex
102#define yyrindex c_yyrindex
103#define yygindex c_yygindex
104#define yytable c_yytable
105#define yycheck c_yycheck
106
107#ifndef YYDEBUG
f461f5cf 108#define YYDEBUG 1 /* Default to yydebug support */
c906108c
SS
109#endif
110
f461f5cf
PM
111#define YYFPRINTF parser_fprintf
112
a14ed312 113int yyparse (void);
c906108c 114
a14ed312 115static int yylex (void);
c906108c 116
a14ed312 117void yyerror (char *);
c906108c
SS
118
119%}
120
121/* Although the yacc "value" of an expression is not used,
122 since the result is stored in the structure being created,
123 other node types do have values. */
124
125%union
126 {
127 LONGEST lval;
128 struct {
129 LONGEST val;
130 struct type *type;
131 } typed_val_int;
132 struct {
133 DOUBLEST dval;
134 struct type *type;
135 } typed_val_float;
27bc4d80
TJB
136 struct {
137 gdb_byte val[16];
138 struct type *type;
139 } typed_val_decfloat;
c906108c
SS
140 struct symbol *sym;
141 struct type *tval;
142 struct stoken sval;
6c7a06a3 143 struct typed_stoken tsval;
c906108c
SS
144 struct ttype tsym;
145 struct symtoken ssym;
146 int voidval;
147 struct block *bval;
148 enum exp_opcode opcode;
149 struct internalvar *ivar;
150
6c7a06a3 151 struct stoken_vector svec;
c906108c
SS
152 struct type **tvec;
153 int *ivec;
154 }
155
156%{
157/* YYSTYPE gets defined by %union */
a14ed312 158static int parse_number (char *, int, int, YYSTYPE *);
66c53f2b 159static struct stoken operator_stoken (const char *);
c906108c
SS
160%}
161
162%type <voidval> exp exp1 type_exp start variable qualified_name lcurly
163%type <lval> rcurly
48e32051 164%type <tval> type typebase
c906108c
SS
165%type <tvec> nonempty_typelist
166/* %type <bval> block */
167
168/* Fancy type parsing. */
169%type <voidval> func_mod direct_abs_decl abs_decl
170%type <tval> ptype
171%type <lval> array_mod
172
173%token <typed_val_int> INT
174%token <typed_val_float> FLOAT
27bc4d80 175%token <typed_val_decfloat> DECFLOAT
c906108c
SS
176
177/* Both NAME and TYPENAME tokens represent symbols in the input,
178 and both convey their data as strings.
179 But a TYPENAME is a string that happens to be defined as a typedef
180 or builtin type name (such as int or char)
181 and a NAME is any other symbol.
182 Contexts where this distinction is not important can use the
183 nonterminal "name", which matches either NAME or TYPENAME. */
184
6c7a06a3
TT
185%token <tsval> STRING
186%token <tsval> CHAR
c906108c 187%token <ssym> NAME /* BLOCKNAME defined below to give it higher precedence. */
7322dca9 188%token <ssym> UNKNOWN_CPP_NAME
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
4e8f195d 209%token REINTERPRET_CAST DYNAMIC_CAST STATIC_CAST CONST_CAST
941b2081 210%token ENTRY
c906108c
SS
211
212/* Special type cases, put in to allow the parser to distinguish different
213 legal basetypes. */
214%token SIGNED_KEYWORD LONG SHORT INT_KEYWORD CONST_KEYWORD VOLATILE_KEYWORD DOUBLE_KEYWORD
215
48e32051 216%token <sval> VARIABLE
c906108c
SS
217
218%token <opcode> ASSIGN_MODIFY
219
220/* C++ */
c906108c
SS
221%token TRUEKEYWORD
222%token FALSEKEYWORD
223
224
225%left ','
226%left ABOVE_COMMA
227%right '=' ASSIGN_MODIFY
228%right '?'
229%left OROR
230%left ANDAND
231%left '|'
232%left '^'
233%left '&'
234%left EQUAL NOTEQUAL
235%left '<' '>' LEQ GEQ
236%left LSH RSH
237%left '@'
238%left '+' '-'
239%left '*' '/' '%'
240%right UNARY INCREMENT DECREMENT
c1af96a0 241%right ARROW ARROW_STAR '.' DOT_STAR '[' '('
c906108c
SS
242%token <ssym> BLOCKNAME
243%token <bval> FILENAME
244%type <bval> block
245%left COLONCOLON
246
247\f
248%%
249
250start : exp1
251 | type_exp
252 ;
253
254type_exp: type
255 { write_exp_elt_opcode(OP_TYPE);
256 write_exp_elt_type($1);
257 write_exp_elt_opcode(OP_TYPE);}
258 ;
259
260/* Expressions, including the comma operator. */
261exp1 : exp
262 | exp1 ',' exp
263 { write_exp_elt_opcode (BINOP_COMMA); }
264 ;
265
266/* Expressions, not including the comma operator. */
267exp : '*' exp %prec UNARY
268 { write_exp_elt_opcode (UNOP_IND); }
ef944135 269 ;
c906108c
SS
270
271exp : '&' exp %prec UNARY
272 { write_exp_elt_opcode (UNOP_ADDR); }
ef944135 273 ;
c906108c
SS
274
275exp : '-' exp %prec UNARY
276 { write_exp_elt_opcode (UNOP_NEG); }
277 ;
278
36e9969c
NS
279exp : '+' exp %prec UNARY
280 { write_exp_elt_opcode (UNOP_PLUS); }
281 ;
282
c906108c
SS
283exp : '!' exp %prec UNARY
284 { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
285 ;
286
287exp : '~' exp %prec UNARY
288 { write_exp_elt_opcode (UNOP_COMPLEMENT); }
289 ;
290
291exp : INCREMENT exp %prec UNARY
292 { write_exp_elt_opcode (UNOP_PREINCREMENT); }
293 ;
294
295exp : DECREMENT exp %prec UNARY
296 { write_exp_elt_opcode (UNOP_PREDECREMENT); }
297 ;
298
299exp : exp INCREMENT %prec UNARY
300 { write_exp_elt_opcode (UNOP_POSTINCREMENT); }
301 ;
302
303exp : exp DECREMENT %prec UNARY
304 { write_exp_elt_opcode (UNOP_POSTDECREMENT); }
305 ;
306
307exp : SIZEOF exp %prec UNARY
308 { write_exp_elt_opcode (UNOP_SIZEOF); }
309 ;
310
311exp : exp ARROW name
312 { write_exp_elt_opcode (STRUCTOP_PTR);
313 write_exp_string ($3);
314 write_exp_elt_opcode (STRUCTOP_PTR); }
315 ;
316
65d12d83
TT
317exp : exp ARROW name COMPLETE
318 { mark_struct_expression ();
319 write_exp_elt_opcode (STRUCTOP_PTR);
320 write_exp_string ($3);
321 write_exp_elt_opcode (STRUCTOP_PTR); }
322 ;
323
324exp : exp ARROW COMPLETE
325 { struct stoken s;
326 mark_struct_expression ();
327 write_exp_elt_opcode (STRUCTOP_PTR);
328 s.ptr = "";
329 s.length = 0;
330 write_exp_string (s);
331 write_exp_elt_opcode (STRUCTOP_PTR); }
332 ;
333
c906108c
SS
334exp : exp ARROW qualified_name
335 { /* exp->type::name becomes exp->*(&type::name) */
336 /* Note: this doesn't work if name is a
337 static member! FIXME */
338 write_exp_elt_opcode (UNOP_ADDR);
339 write_exp_elt_opcode (STRUCTOP_MPTR); }
340 ;
341
c1af96a0 342exp : exp ARROW_STAR exp
c906108c
SS
343 { write_exp_elt_opcode (STRUCTOP_MPTR); }
344 ;
345
346exp : exp '.' name
347 { write_exp_elt_opcode (STRUCTOP_STRUCT);
348 write_exp_string ($3);
349 write_exp_elt_opcode (STRUCTOP_STRUCT); }
350 ;
351
65d12d83
TT
352exp : exp '.' name COMPLETE
353 { mark_struct_expression ();
354 write_exp_elt_opcode (STRUCTOP_STRUCT);
355 write_exp_string ($3);
356 write_exp_elt_opcode (STRUCTOP_STRUCT); }
357 ;
358
359exp : exp '.' COMPLETE
360 { struct stoken s;
361 mark_struct_expression ();
362 write_exp_elt_opcode (STRUCTOP_STRUCT);
363 s.ptr = "";
364 s.length = 0;
365 write_exp_string (s);
366 write_exp_elt_opcode (STRUCTOP_STRUCT); }
367 ;
368
c906108c
SS
369exp : exp '.' qualified_name
370 { /* exp.type::name becomes exp.*(&type::name) */
371 /* Note: this doesn't work if name is a
372 static member! FIXME */
373 write_exp_elt_opcode (UNOP_ADDR);
374 write_exp_elt_opcode (STRUCTOP_MEMBER); }
375 ;
376
c1af96a0 377exp : exp DOT_STAR exp
c906108c
SS
378 { write_exp_elt_opcode (STRUCTOP_MEMBER); }
379 ;
380
381exp : exp '[' exp1 ']'
382 { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
383 ;
384
385exp : exp '('
386 /* This is to save the value of arglist_len
387 being accumulated by an outer function call. */
388 { start_arglist (); }
389 arglist ')' %prec ARROW
390 { write_exp_elt_opcode (OP_FUNCALL);
391 write_exp_elt_longcst ((LONGEST) end_arglist ());
392 write_exp_elt_opcode (OP_FUNCALL); }
393 ;
394
941b2081 395exp : UNKNOWN_CPP_NAME '('
7322dca9
SW
396 {
397 /* This could potentially be a an argument defined
398 lookup function (Koenig). */
399 write_exp_elt_opcode (OP_ADL_FUNC);
400 write_exp_elt_block (expression_context_block);
401 write_exp_elt_sym (NULL); /* Placeholder. */
402 write_exp_string ($1.stoken);
403 write_exp_elt_opcode (OP_ADL_FUNC);
404
405 /* This is to save the value of arglist_len
406 being accumulated by an outer function call. */
407
408 start_arglist ();
409 }
410 arglist ')' %prec ARROW
411 {
412 write_exp_elt_opcode (OP_FUNCALL);
413 write_exp_elt_longcst ((LONGEST) end_arglist ());
414 write_exp_elt_opcode (OP_FUNCALL);
415 }
416 ;
417
c906108c
SS
418lcurly : '{'
419 { start_arglist (); }
420 ;
421
422arglist :
423 ;
424
425arglist : exp
426 { arglist_len = 1; }
427 ;
428
429arglist : arglist ',' exp %prec ABOVE_COMMA
430 { arglist_len++; }
431 ;
432
072bba3b
KS
433exp : exp '(' nonempty_typelist ')' const_or_volatile
434 { int i;
435 write_exp_elt_opcode (TYPE_INSTANCE);
436 write_exp_elt_longcst ((LONGEST) $<ivec>3[0]);
437 for (i = 0; i < $<ivec>3[0]; ++i)
438 write_exp_elt_type ($<tvec>3[i + 1]);
439 write_exp_elt_longcst((LONGEST) $<ivec>3[0]);
440 write_exp_elt_opcode (TYPE_INSTANCE);
441 free ($3);
442 }
443 ;
444
c906108c
SS
445rcurly : '}'
446 { $$ = end_arglist () - 1; }
447 ;
448exp : lcurly arglist rcurly %prec ARROW
449 { write_exp_elt_opcode (OP_ARRAY);
450 write_exp_elt_longcst ((LONGEST) 0);
451 write_exp_elt_longcst ((LONGEST) $3);
452 write_exp_elt_opcode (OP_ARRAY); }
453 ;
454
455exp : lcurly type rcurly exp %prec UNARY
456 { write_exp_elt_opcode (UNOP_MEMVAL);
457 write_exp_elt_type ($2);
458 write_exp_elt_opcode (UNOP_MEMVAL); }
459 ;
460
461exp : '(' type ')' exp %prec UNARY
462 { write_exp_elt_opcode (UNOP_CAST);
463 write_exp_elt_type ($2);
464 write_exp_elt_opcode (UNOP_CAST); }
465 ;
466
467exp : '(' exp1 ')'
468 { }
469 ;
470
471/* Binary operators in order of decreasing precedence. */
472
473exp : exp '@' exp
474 { write_exp_elt_opcode (BINOP_REPEAT); }
475 ;
476
477exp : exp '*' exp
478 { write_exp_elt_opcode (BINOP_MUL); }
479 ;
480
481exp : exp '/' exp
482 { write_exp_elt_opcode (BINOP_DIV); }
483 ;
484
485exp : exp '%' exp
486 { write_exp_elt_opcode (BINOP_REM); }
487 ;
488
489exp : exp '+' exp
490 { write_exp_elt_opcode (BINOP_ADD); }
491 ;
492
493exp : exp '-' exp
494 { write_exp_elt_opcode (BINOP_SUB); }
495 ;
496
497exp : exp LSH exp
498 { write_exp_elt_opcode (BINOP_LSH); }
499 ;
500
501exp : exp RSH exp
502 { write_exp_elt_opcode (BINOP_RSH); }
503 ;
504
505exp : exp EQUAL exp
506 { write_exp_elt_opcode (BINOP_EQUAL); }
507 ;
508
509exp : exp NOTEQUAL exp
510 { write_exp_elt_opcode (BINOP_NOTEQUAL); }
511 ;
512
513exp : exp LEQ exp
514 { write_exp_elt_opcode (BINOP_LEQ); }
515 ;
516
517exp : exp GEQ exp
518 { write_exp_elt_opcode (BINOP_GEQ); }
519 ;
520
521exp : exp '<' exp
522 { write_exp_elt_opcode (BINOP_LESS); }
523 ;
524
525exp : exp '>' exp
526 { write_exp_elt_opcode (BINOP_GTR); }
527 ;
528
529exp : exp '&' exp
530 { write_exp_elt_opcode (BINOP_BITWISE_AND); }
531 ;
532
533exp : exp '^' exp
534 { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
535 ;
536
537exp : exp '|' exp
538 { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
539 ;
540
541exp : exp ANDAND exp
542 { write_exp_elt_opcode (BINOP_LOGICAL_AND); }
543 ;
544
545exp : exp OROR exp
546 { write_exp_elt_opcode (BINOP_LOGICAL_OR); }
547 ;
548
549exp : exp '?' exp ':' exp %prec '?'
550 { write_exp_elt_opcode (TERNOP_COND); }
551 ;
552
553exp : exp '=' exp
554 { write_exp_elt_opcode (BINOP_ASSIGN); }
555 ;
556
557exp : exp ASSIGN_MODIFY exp
558 { write_exp_elt_opcode (BINOP_ASSIGN_MODIFY);
559 write_exp_elt_opcode ($2);
560 write_exp_elt_opcode (BINOP_ASSIGN_MODIFY); }
561 ;
562
563exp : INT
564 { write_exp_elt_opcode (OP_LONG);
565 write_exp_elt_type ($1.type);
566 write_exp_elt_longcst ((LONGEST)($1.val));
567 write_exp_elt_opcode (OP_LONG); }
568 ;
569
6c7a06a3
TT
570exp : CHAR
571 {
572 struct stoken_vector vec;
573 vec.len = 1;
574 vec.tokens = &$1;
575 write_exp_string_vector ($1.type, &vec);
576 }
577 ;
578
c906108c
SS
579exp : NAME_OR_INT
580 { YYSTYPE val;
581 parse_number ($1.stoken.ptr, $1.stoken.length, 0, &val);
582 write_exp_elt_opcode (OP_LONG);
583 write_exp_elt_type (val.typed_val_int.type);
584 write_exp_elt_longcst ((LONGEST)val.typed_val_int.val);
585 write_exp_elt_opcode (OP_LONG);
586 }
587 ;
588
589
590exp : FLOAT
591 { write_exp_elt_opcode (OP_DOUBLE);
592 write_exp_elt_type ($1.type);
593 write_exp_elt_dblcst ($1.dval);
594 write_exp_elt_opcode (OP_DOUBLE); }
595 ;
596
27bc4d80
TJB
597exp : DECFLOAT
598 { write_exp_elt_opcode (OP_DECFLOAT);
599 write_exp_elt_type ($1.type);
600 write_exp_elt_decfloatcst ($1.val);
601 write_exp_elt_opcode (OP_DECFLOAT); }
602 ;
603
c906108c
SS
604exp : variable
605 ;
606
607exp : VARIABLE
48e32051
TT
608 {
609 write_dollar_variable ($1);
610 }
c906108c
SS
611 ;
612
613exp : SIZEOF '(' type ')' %prec UNARY
614 { write_exp_elt_opcode (OP_LONG);
f4b8a18d
KW
615 write_exp_elt_type (lookup_signed_typename
616 (parse_language, parse_gdbarch,
617 "int"));
c906108c
SS
618 CHECK_TYPEDEF ($3);
619 write_exp_elt_longcst ((LONGEST) TYPE_LENGTH ($3));
620 write_exp_elt_opcode (OP_LONG); }
621 ;
622
4e8f195d
TT
623exp : REINTERPRET_CAST '<' type '>' '(' exp ')' %prec UNARY
624 { write_exp_elt_opcode (UNOP_REINTERPRET_CAST);
625 write_exp_elt_type ($3);
626 write_exp_elt_opcode (UNOP_REINTERPRET_CAST); }
627 ;
628
629exp : STATIC_CAST '<' type '>' '(' exp ')' %prec UNARY
630 { write_exp_elt_opcode (UNOP_CAST);
631 write_exp_elt_type ($3);
632 write_exp_elt_opcode (UNOP_CAST); }
633 ;
634
635exp : DYNAMIC_CAST '<' type '>' '(' exp ')' %prec UNARY
636 { write_exp_elt_opcode (UNOP_DYNAMIC_CAST);
637 write_exp_elt_type ($3);
638 write_exp_elt_opcode (UNOP_DYNAMIC_CAST); }
639 ;
640
641exp : CONST_CAST '<' type '>' '(' exp ')' %prec UNARY
642 { /* We could do more error checking here, but
643 it doesn't seem worthwhile. */
644 write_exp_elt_opcode (UNOP_CAST);
645 write_exp_elt_type ($3);
646 write_exp_elt_opcode (UNOP_CAST); }
647 ;
648
c209f847
TT
649string_exp:
650 STRING
651 {
652 /* We copy the string here, and not in the
653 lexer, to guarantee that we do not leak a
654 string. Note that we follow the
655 NUL-termination convention of the
656 lexer. */
6c7a06a3
TT
657 struct typed_stoken *vec = XNEW (struct typed_stoken);
658 $$.len = 1;
659 $$.tokens = vec;
660
661 vec->type = $1.type;
662 vec->length = $1.length;
663 vec->ptr = malloc ($1.length + 1);
664 memcpy (vec->ptr, $1.ptr, $1.length + 1);
c209f847
TT
665 }
666
667 | string_exp STRING
668 {
669 /* Note that we NUL-terminate here, but just
670 for convenience. */
6c7a06a3
TT
671 char *p;
672 ++$$.len;
673 $$.tokens = realloc ($$.tokens,
674 $$.len * sizeof (struct typed_stoken));
675
676 p = malloc ($2.length + 1);
677 memcpy (p, $2.ptr, $2.length + 1);
678
679 $$.tokens[$$.len - 1].type = $2.type;
680 $$.tokens[$$.len - 1].length = $2.length;
681 $$.tokens[$$.len - 1].ptr = p;
c209f847
TT
682 }
683 ;
684
685exp : string_exp
6c7a06a3
TT
686 {
687 int i;
688 enum c_string_type type = C_STRING;
689
690 for (i = 0; i < $1.len; ++i)
c906108c 691 {
6c7a06a3
TT
692 switch ($1.tokens[i].type)
693 {
694 case C_STRING:
695 break;
696 case C_WIDE_STRING:
697 case C_STRING_16:
698 case C_STRING_32:
699 if (type != C_STRING
700 && type != $1.tokens[i].type)
001083c6 701 error (_("Undefined string concatenation."));
6c7a06a3
TT
702 type = $1.tokens[i].type;
703 break;
704 default:
705 /* internal error */
706 internal_error (__FILE__, __LINE__,
707 "unrecognized type in string concatenation");
708 }
c906108c 709 }
6c7a06a3
TT
710
711 write_exp_string_vector (type, &$1);
712 for (i = 0; i < $1.len; ++i)
713 free ($1.tokens[i].ptr);
714 free ($1.tokens);
c209f847 715 }
c906108c
SS
716 ;
717
718/* C++. */
c906108c
SS
719exp : TRUEKEYWORD
720 { write_exp_elt_opcode (OP_LONG);
3e79cecf 721 write_exp_elt_type (parse_type->builtin_bool);
c906108c
SS
722 write_exp_elt_longcst ((LONGEST) 1);
723 write_exp_elt_opcode (OP_LONG); }
724 ;
725
726exp : FALSEKEYWORD
727 { write_exp_elt_opcode (OP_LONG);
3e79cecf 728 write_exp_elt_type (parse_type->builtin_bool);
c906108c
SS
729 write_exp_elt_longcst ((LONGEST) 0);
730 write_exp_elt_opcode (OP_LONG); }
731 ;
732
733/* end of C++. */
734
735block : BLOCKNAME
736 {
737 if ($1.sym)
738 $$ = SYMBOL_BLOCK_VALUE ($1.sym);
739 else
001083c6 740 error (_("No file or function \"%s\"."),
c906108c
SS
741 copy_name ($1.stoken));
742 }
743 | FILENAME
744 {
745 $$ = $1;
746 }
747 ;
748
749block : block COLONCOLON name
750 { struct symbol *tem
751 = lookup_symbol (copy_name ($3), $1,
2570f2b7 752 VAR_DOMAIN, (int *) NULL);
c906108c 753 if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
001083c6 754 error (_("No function \"%s\" in specified context."),
c906108c
SS
755 copy_name ($3));
756 $$ = SYMBOL_BLOCK_VALUE (tem); }
757 ;
758
941b2081 759variable: name_not_typename ENTRY
36b11add
JK
760 { struct symbol *sym = $1.sym;
761
762 if (sym == NULL || !SYMBOL_IS_ARGUMENT (sym)
763 || !symbol_read_needs_frame (sym))
764 error (_("@entry can be used only for function "
765 "parameters, not for \"%s\""),
766 copy_name ($1.stoken));
767
768 write_exp_elt_opcode (OP_VAR_ENTRY_VALUE);
769 write_exp_elt_sym (sym);
770 write_exp_elt_opcode (OP_VAR_ENTRY_VALUE);
771 }
772 ;
773
c906108c
SS
774variable: block COLONCOLON name
775 { struct symbol *sym;
776 sym = lookup_symbol (copy_name ($3), $1,
2570f2b7 777 VAR_DOMAIN, (int *) NULL);
c906108c 778 if (sym == 0)
001083c6 779 error (_("No symbol \"%s\" in specified context."),
c906108c
SS
780 copy_name ($3));
781
782 write_exp_elt_opcode (OP_VAR_VALUE);
783 /* block_found is set by lookup_symbol. */
784 write_exp_elt_block (block_found);
785 write_exp_elt_sym (sym);
786 write_exp_elt_opcode (OP_VAR_VALUE); }
787 ;
788
48e32051 789qualified_name: TYPENAME COLONCOLON name
c906108c 790 {
48e32051 791 struct type *type = $1.type;
e8269d5f 792 CHECK_TYPEDEF (type);
c906108c 793 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
79c2c32d
DC
794 && TYPE_CODE (type) != TYPE_CODE_UNION
795 && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
001083c6 796 error (_("`%s' is not defined as an aggregate type."),
c906108c
SS
797 TYPE_NAME (type));
798
799 write_exp_elt_opcode (OP_SCOPE);
800 write_exp_elt_type (type);
801 write_exp_string ($3);
802 write_exp_elt_opcode (OP_SCOPE);
803 }
48e32051 804 | TYPENAME COLONCOLON '~' name
c906108c 805 {
48e32051 806 struct type *type = $1.type;
c906108c 807 struct stoken tmp_token;
e8269d5f 808 CHECK_TYPEDEF (type);
c906108c 809 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
79c2c32d
DC
810 && TYPE_CODE (type) != TYPE_CODE_UNION
811 && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
001083c6 812 error (_("`%s' is not defined as an aggregate type."),
c906108c
SS
813 TYPE_NAME (type));
814
815 tmp_token.ptr = (char*) alloca ($4.length + 2);
816 tmp_token.length = $4.length + 1;
817 tmp_token.ptr[0] = '~';
818 memcpy (tmp_token.ptr+1, $4.ptr, $4.length);
819 tmp_token.ptr[tmp_token.length] = 0;
820
821 /* Check for valid destructor name. */
d8228535 822 destructor_name_p (tmp_token.ptr, $1.type);
c906108c
SS
823 write_exp_elt_opcode (OP_SCOPE);
824 write_exp_elt_type (type);
825 write_exp_string (tmp_token);
826 write_exp_elt_opcode (OP_SCOPE);
827 }
48e32051
TT
828 | TYPENAME COLONCOLON name COLONCOLON name
829 {
830 char *copy = copy_name ($3);
831 error (_("No type \"%s\" within class "
832 "or namespace \"%s\"."),
833 copy, TYPE_NAME ($1.type));
834 }
c906108c
SS
835 ;
836
837variable: qualified_name
48e32051 838 | COLONCOLON name_not_typename
c906108c 839 {
48e32051 840 char *name = copy_name ($2.stoken);
c906108c
SS
841 struct symbol *sym;
842 struct minimal_symbol *msymbol;
843
844 sym =
845 lookup_symbol (name, (const struct block *) NULL,
2570f2b7 846 VAR_DOMAIN, (int *) NULL);
c906108c
SS
847 if (sym)
848 {
849 write_exp_elt_opcode (OP_VAR_VALUE);
850 write_exp_elt_block (NULL);
851 write_exp_elt_sym (sym);
852 write_exp_elt_opcode (OP_VAR_VALUE);
853 break;
854 }
855
856 msymbol = lookup_minimal_symbol (name, NULL, NULL);
857 if (msymbol != NULL)
c841afd5
UW
858 write_exp_msymbol (msymbol);
859 else if (!have_full_symbols () && !have_partial_symbols ())
001083c6 860 error (_("No symbol table is loaded. Use the \"file\" command."));
c906108c 861 else
001083c6 862 error (_("No symbol \"%s\" in current context."), name);
c906108c
SS
863 }
864 ;
865
866variable: name_not_typename
867 { struct symbol *sym = $1.sym;
868
869 if (sym)
870 {
871 if (symbol_read_needs_frame (sym))
872 {
5aafa1cc
PM
873 if (innermost_block == 0
874 || contained_in (block_found,
875 innermost_block))
c906108c
SS
876 innermost_block = block_found;
877 }
878
879 write_exp_elt_opcode (OP_VAR_VALUE);
880 /* We want to use the selected frame, not
881 another more inner frame which happens to
882 be in the same block. */
883 write_exp_elt_block (NULL);
884 write_exp_elt_sym (sym);
885 write_exp_elt_opcode (OP_VAR_VALUE);
886 }
887 else if ($1.is_a_field_of_this)
888 {
889 /* C++: it hangs off of `this'. Must
890 not inadvertently convert from a method call
891 to data ref. */
5aafa1cc
PM
892 if (innermost_block == 0
893 || contained_in (block_found,
894 innermost_block))
c906108c
SS
895 innermost_block = block_found;
896 write_exp_elt_opcode (OP_THIS);
897 write_exp_elt_opcode (OP_THIS);
898 write_exp_elt_opcode (STRUCTOP_PTR);
899 write_exp_string ($1.stoken);
900 write_exp_elt_opcode (STRUCTOP_PTR);
901 }
902 else
903 {
904 struct minimal_symbol *msymbol;
710122da 905 char *arg = copy_name ($1.stoken);
c906108c
SS
906
907 msymbol =
908 lookup_minimal_symbol (arg, NULL, NULL);
909 if (msymbol != NULL)
c841afd5 910 write_exp_msymbol (msymbol);
c906108c 911 else if (!have_full_symbols () && !have_partial_symbols ())
001083c6 912 error (_("No symbol table is loaded. Use the \"file\" command."));
c906108c 913 else
001083c6 914 error (_("No symbol \"%s\" in current context."),
c906108c
SS
915 copy_name ($1.stoken));
916 }
917 }
918 ;
919
47663de5
MS
920space_identifier : '@' NAME
921 { push_type_address_space (copy_name ($2.stoken));
922 push_type (tp_space_identifier);
923 }
924 ;
c906108c 925
47663de5
MS
926const_or_volatile: const_or_volatile_noopt
927 |
c906108c 928 ;
47663de5
MS
929
930cv_with_space_id : const_or_volatile space_identifier const_or_volatile
56e2d25a 931 ;
47663de5
MS
932
933const_or_volatile_or_space_identifier_noopt: cv_with_space_id
934 | const_or_volatile_noopt
56e2d25a 935 ;
47663de5
MS
936
937const_or_volatile_or_space_identifier:
938 const_or_volatile_or_space_identifier_noopt
939 |
56e2d25a 940 ;
47663de5 941
c906108c
SS
942abs_decl: '*'
943 { push_type (tp_pointer); $$ = 0; }
944 | '*' abs_decl
945 { push_type (tp_pointer); $$ = $2; }
946 | '&'
947 { push_type (tp_reference); $$ = 0; }
948 | '&' abs_decl
949 { push_type (tp_reference); $$ = $2; }
950 | direct_abs_decl
951 ;
952
953direct_abs_decl: '(' abs_decl ')'
954 { $$ = $2; }
955 | direct_abs_decl array_mod
956 {
957 push_type_int ($2);
958 push_type (tp_array);
959 }
960 | array_mod
961 {
962 push_type_int ($1);
963 push_type (tp_array);
964 $$ = 0;
965 }
966
967 | direct_abs_decl func_mod
968 { push_type (tp_function); }
969 | func_mod
970 { push_type (tp_function); }
971 ;
972
973array_mod: '[' ']'
974 { $$ = -1; }
975 | '[' INT ']'
976 { $$ = $2.val; }
977 ;
978
979func_mod: '(' ')'
980 { $$ = 0; }
981 | '(' nonempty_typelist ')'
8dbb1c65 982 { free ($2); $$ = 0; }
c906108c
SS
983 ;
984
a22229c4 985/* We used to try to recognize pointer to member types here, but
c906108c
SS
986 that didn't work (shift/reduce conflicts meant that these rules never
987 got executed). The problem is that
988 int (foo::bar::baz::bizzle)
989 is a function type but
990 int (foo::bar::baz::bizzle::*)
991 is a pointer to member type. Stroustrup loses again! */
992
993type : ptype
c906108c
SS
994 ;
995
996typebase /* Implements (approximately): (type-qualifier)* type-specifier */
997 : TYPENAME
998 { $$ = $1.type; }
999 | INT_KEYWORD
f4b8a18d
KW
1000 { $$ = lookup_signed_typename (parse_language,
1001 parse_gdbarch,
1002 "int"); }
c906108c 1003 | LONG
f4b8a18d
KW
1004 { $$ = lookup_signed_typename (parse_language,
1005 parse_gdbarch,
1006 "long"); }
c906108c 1007 | SHORT
f4b8a18d
KW
1008 { $$ = lookup_signed_typename (parse_language,
1009 parse_gdbarch,
1010 "short"); }
c906108c 1011 | LONG INT_KEYWORD
f4b8a18d
KW
1012 { $$ = lookup_signed_typename (parse_language,
1013 parse_gdbarch,
1014 "long"); }
b2c4da81 1015 | LONG SIGNED_KEYWORD INT_KEYWORD
f4b8a18d
KW
1016 { $$ = lookup_signed_typename (parse_language,
1017 parse_gdbarch,
1018 "long"); }
b2c4da81 1019 | LONG SIGNED_KEYWORD
f4b8a18d
KW
1020 { $$ = lookup_signed_typename (parse_language,
1021 parse_gdbarch,
1022 "long"); }
b2c4da81 1023 | SIGNED_KEYWORD LONG INT_KEYWORD
f4b8a18d
KW
1024 { $$ = lookup_signed_typename (parse_language,
1025 parse_gdbarch,
1026 "long"); }
c906108c 1027 | UNSIGNED LONG INT_KEYWORD
f4b8a18d
KW
1028 { $$ = lookup_unsigned_typename (parse_language,
1029 parse_gdbarch,
1030 "long"); }
b2c4da81 1031 | LONG UNSIGNED INT_KEYWORD
f4b8a18d
KW
1032 { $$ = lookup_unsigned_typename (parse_language,
1033 parse_gdbarch,
1034 "long"); }
b2c4da81 1035 | LONG UNSIGNED
f4b8a18d
KW
1036 { $$ = lookup_unsigned_typename (parse_language,
1037 parse_gdbarch,
1038 "long"); }
c906108c 1039 | LONG LONG
f4b8a18d
KW
1040 { $$ = lookup_signed_typename (parse_language,
1041 parse_gdbarch,
1042 "long long"); }
c906108c 1043 | LONG LONG INT_KEYWORD
f4b8a18d
KW
1044 { $$ = lookup_signed_typename (parse_language,
1045 parse_gdbarch,
1046 "long long"); }
b2c4da81 1047 | LONG LONG SIGNED_KEYWORD INT_KEYWORD
f4b8a18d
KW
1048 { $$ = lookup_signed_typename (parse_language,
1049 parse_gdbarch,
1050 "long long"); }
b2c4da81 1051 | LONG LONG SIGNED_KEYWORD
f4b8a18d
KW
1052 { $$ = lookup_signed_typename (parse_language,
1053 parse_gdbarch,
1054 "long long"); }
b2c4da81 1055 | SIGNED_KEYWORD LONG LONG
f4b8a18d
KW
1056 { $$ = lookup_signed_typename (parse_language,
1057 parse_gdbarch,
1058 "long long"); }
55baeb84 1059 | SIGNED_KEYWORD LONG LONG INT_KEYWORD
f4b8a18d
KW
1060 { $$ = lookup_signed_typename (parse_language,
1061 parse_gdbarch,
1062 "long long"); }
c906108c 1063 | UNSIGNED LONG LONG
f4b8a18d
KW
1064 { $$ = lookup_unsigned_typename (parse_language,
1065 parse_gdbarch,
1066 "long long"); }
c906108c 1067 | UNSIGNED LONG LONG INT_KEYWORD
f4b8a18d
KW
1068 { $$ = lookup_unsigned_typename (parse_language,
1069 parse_gdbarch,
1070 "long long"); }
b2c4da81 1071 | LONG LONG UNSIGNED
f4b8a18d
KW
1072 { $$ = lookup_unsigned_typename (parse_language,
1073 parse_gdbarch,
1074 "long long"); }
b2c4da81 1075 | LONG LONG UNSIGNED INT_KEYWORD
f4b8a18d
KW
1076 { $$ = lookup_unsigned_typename (parse_language,
1077 parse_gdbarch,
1078 "long long"); }
c906108c 1079 | SHORT INT_KEYWORD
f4b8a18d
KW
1080 { $$ = lookup_signed_typename (parse_language,
1081 parse_gdbarch,
1082 "short"); }
b2c4da81 1083 | SHORT SIGNED_KEYWORD INT_KEYWORD
f4b8a18d
KW
1084 { $$ = lookup_signed_typename (parse_language,
1085 parse_gdbarch,
1086 "short"); }
b2c4da81 1087 | SHORT SIGNED_KEYWORD
f4b8a18d
KW
1088 { $$ = lookup_signed_typename (parse_language,
1089 parse_gdbarch,
1090 "short"); }
c906108c 1091 | UNSIGNED SHORT INT_KEYWORD
f4b8a18d
KW
1092 { $$ = lookup_unsigned_typename (parse_language,
1093 parse_gdbarch,
1094 "short"); }
b2c4da81 1095 | SHORT UNSIGNED
f4b8a18d
KW
1096 { $$ = lookup_unsigned_typename (parse_language,
1097 parse_gdbarch,
1098 "short"); }
b2c4da81 1099 | SHORT UNSIGNED INT_KEYWORD
f4b8a18d
KW
1100 { $$ = lookup_unsigned_typename (parse_language,
1101 parse_gdbarch,
1102 "short"); }
c906108c 1103 | DOUBLE_KEYWORD
f4b8a18d
KW
1104 { $$ = lookup_typename (parse_language, parse_gdbarch,
1105 "double", (struct block *) NULL,
1106 0); }
c906108c 1107 | LONG DOUBLE_KEYWORD
f4b8a18d
KW
1108 { $$ = lookup_typename (parse_language, parse_gdbarch,
1109 "long double",
1110 (struct block *) NULL, 0); }
c906108c
SS
1111 | STRUCT name
1112 { $$ = lookup_struct (copy_name ($2),
1113 expression_context_block); }
1114 | CLASS name
1115 { $$ = lookup_struct (copy_name ($2),
1116 expression_context_block); }
1117 | UNION name
1118 { $$ = lookup_union (copy_name ($2),
1119 expression_context_block); }
1120 | ENUM name
1121 { $$ = lookup_enum (copy_name ($2),
1122 expression_context_block); }
1123 | UNSIGNED typename
e6c014f2
UW
1124 { $$ = lookup_unsigned_typename (parse_language,
1125 parse_gdbarch,
1126 TYPE_NAME($2.type)); }
c906108c 1127 | UNSIGNED
f4b8a18d
KW
1128 { $$ = lookup_unsigned_typename (parse_language,
1129 parse_gdbarch,
1130 "int"); }
c906108c 1131 | SIGNED_KEYWORD typename
e6c014f2
UW
1132 { $$ = lookup_signed_typename (parse_language,
1133 parse_gdbarch,
1134 TYPE_NAME($2.type)); }
c906108c 1135 | SIGNED_KEYWORD
f4b8a18d
KW
1136 { $$ = lookup_signed_typename (parse_language,
1137 parse_gdbarch,
1138 "int"); }
c906108c
SS
1139 /* It appears that this rule for templates is never
1140 reduced; template recognition happens by lookahead
1141 in the token processing code in yylex. */
1142 | TEMPLATE name '<' type '>'
1143 { $$ = lookup_template_type(copy_name($2), $4,
1144 expression_context_block);
1145 }
47663de5
MS
1146 | const_or_volatile_or_space_identifier_noopt typebase
1147 { $$ = follow_types ($2); }
1148 | typebase const_or_volatile_or_space_identifier_noopt
1149 { $$ = follow_types ($1); }
c906108c
SS
1150 ;
1151
1152typename: TYPENAME
1153 | INT_KEYWORD
1154 {
1155 $$.stoken.ptr = "int";
1156 $$.stoken.length = 3;
f4b8a18d
KW
1157 $$.type = lookup_signed_typename (parse_language,
1158 parse_gdbarch,
1159 "int");
c906108c
SS
1160 }
1161 | LONG
1162 {
1163 $$.stoken.ptr = "long";
1164 $$.stoken.length = 4;
f4b8a18d
KW
1165 $$.type = lookup_signed_typename (parse_language,
1166 parse_gdbarch,
1167 "long");
c906108c
SS
1168 }
1169 | SHORT
1170 {
1171 $$.stoken.ptr = "short";
1172 $$.stoken.length = 5;
f4b8a18d
KW
1173 $$.type = lookup_signed_typename (parse_language,
1174 parse_gdbarch,
1175 "short");
c906108c
SS
1176 }
1177 ;
1178
1179nonempty_typelist
1180 : type
1181 { $$ = (struct type **) malloc (sizeof (struct type *) * 2);
1182 $<ivec>$[0] = 1; /* Number of types in vector */
1183 $$[1] = $1;
1184 }
1185 | nonempty_typelist ',' type
1186 { int len = sizeof (struct type *) * (++($<ivec>1[0]) + 1);
1187 $$ = (struct type **) realloc ((char *) $1, len);
1188 $$[$<ivec>$[0]] = $3;
1189 }
1190 ;
1191
47663de5
MS
1192ptype : typebase
1193 | ptype const_or_volatile_or_space_identifier abs_decl const_or_volatile_or_space_identifier
1194 { $$ = follow_types ($1); }
1195 ;
1196
1197const_and_volatile: CONST_KEYWORD VOLATILE_KEYWORD
1198 | VOLATILE_KEYWORD CONST_KEYWORD
1199 ;
1200
1201const_or_volatile_noopt: const_and_volatile
1202 { push_type (tp_const);
1203 push_type (tp_volatile);
1204 }
1205 | CONST_KEYWORD
1206 { push_type (tp_const); }
1207 | VOLATILE_KEYWORD
1208 { push_type (tp_volatile); }
1209 ;
1210
66c53f2b
KS
1211operator: OPERATOR NEW
1212 { $$ = operator_stoken (" new"); }
1213 | OPERATOR DELETE
9934703b 1214 { $$ = operator_stoken (" delete "); }
66c53f2b
KS
1215 | OPERATOR NEW '[' ']'
1216 { $$ = operator_stoken (" new[]"); }
1217 | OPERATOR DELETE '[' ']'
9934703b 1218 { $$ = operator_stoken (" delete[] "); }
66c53f2b
KS
1219 | OPERATOR '+'
1220 { $$ = operator_stoken ("+"); }
1221 | OPERATOR '-'
1222 { $$ = operator_stoken ("-"); }
1223 | OPERATOR '*'
1224 { $$ = operator_stoken ("*"); }
1225 | OPERATOR '/'
1226 { $$ = operator_stoken ("/"); }
1227 | OPERATOR '%'
1228 { $$ = operator_stoken ("%"); }
1229 | OPERATOR '^'
1230 { $$ = operator_stoken ("^"); }
1231 | OPERATOR '&'
1232 { $$ = operator_stoken ("&"); }
1233 | OPERATOR '|'
1234 { $$ = operator_stoken ("|"); }
1235 | OPERATOR '~'
1236 { $$ = operator_stoken ("~"); }
1237 | OPERATOR '!'
1238 { $$ = operator_stoken ("!"); }
1239 | OPERATOR '='
1240 { $$ = operator_stoken ("="); }
1241 | OPERATOR '<'
1242 { $$ = operator_stoken ("<"); }
1243 | OPERATOR '>'
1244 { $$ = operator_stoken (">"); }
1245 | OPERATOR ASSIGN_MODIFY
1246 { const char *op = "unknown";
1247 switch ($2)
1248 {
1249 case BINOP_RSH:
1250 op = ">>=";
1251 break;
1252 case BINOP_LSH:
1253 op = "<<=";
1254 break;
1255 case BINOP_ADD:
1256 op = "+=";
1257 break;
1258 case BINOP_SUB:
1259 op = "-=";
1260 break;
1261 case BINOP_MUL:
1262 op = "*=";
1263 break;
1264 case BINOP_DIV:
1265 op = "/=";
1266 break;
1267 case BINOP_REM:
1268 op = "%=";
1269 break;
1270 case BINOP_BITWISE_IOR:
1271 op = "|=";
1272 break;
1273 case BINOP_BITWISE_AND:
1274 op = "&=";
1275 break;
1276 case BINOP_BITWISE_XOR:
1277 op = "^=";
1278 break;
1279 default:
1280 break;
1281 }
1282
1283 $$ = operator_stoken (op);
1284 }
1285 | OPERATOR LSH
1286 { $$ = operator_stoken ("<<"); }
1287 | OPERATOR RSH
1288 { $$ = operator_stoken (">>"); }
1289 | OPERATOR EQUAL
1290 { $$ = operator_stoken ("=="); }
1291 | OPERATOR NOTEQUAL
1292 { $$ = operator_stoken ("!="); }
1293 | OPERATOR LEQ
1294 { $$ = operator_stoken ("<="); }
1295 | OPERATOR GEQ
1296 { $$ = operator_stoken (">="); }
1297 | OPERATOR ANDAND
1298 { $$ = operator_stoken ("&&"); }
1299 | OPERATOR OROR
1300 { $$ = operator_stoken ("||"); }
1301 | OPERATOR INCREMENT
1302 { $$ = operator_stoken ("++"); }
1303 | OPERATOR DECREMENT
1304 { $$ = operator_stoken ("--"); }
1305 | OPERATOR ','
1306 { $$ = operator_stoken (","); }
1307 | OPERATOR ARROW_STAR
1308 { $$ = operator_stoken ("->*"); }
1309 | OPERATOR ARROW
1310 { $$ = operator_stoken ("->"); }
1311 | OPERATOR '(' ')'
1312 { $$ = operator_stoken ("()"); }
1313 | OPERATOR '[' ']'
1314 { $$ = operator_stoken ("[]"); }
1315 | OPERATOR ptype
1316 { char *name;
1317 long length;
1318 struct ui_file *buf = mem_fileopen ();
1319
1320 c_print_type ($2, NULL, buf, -1, 0);
1321 name = ui_file_xstrdup (buf, &length);
1322 ui_file_delete (buf);
1323 $$ = operator_stoken (name);
1324 free (name);
1325 }
1326 ;
1327
1328
1329
c906108c
SS
1330name : NAME { $$ = $1.stoken; }
1331 | BLOCKNAME { $$ = $1.stoken; }
1332 | TYPENAME { $$ = $1.stoken; }
1333 | NAME_OR_INT { $$ = $1.stoken; }
7322dca9 1334 | UNKNOWN_CPP_NAME { $$ = $1.stoken; }
66c53f2b 1335 | operator { $$ = $1; }
c906108c
SS
1336 ;
1337
1338name_not_typename : NAME
1339 | BLOCKNAME
1340/* These would be useful if name_not_typename was useful, but it is just
1341 a fake for "variable", so these cause reduce/reduce conflicts because
1342 the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
1343 =exp) or just an exp. If name_not_typename was ever used in an lvalue
1344 context where only a name could occur, this might be useful.
1345 | NAME_OR_INT
1346 */
6e31430b
TT
1347 | operator
1348 {
1349 $$.stoken = $1;
1350 $$.sym = lookup_symbol ($1.ptr,
1351 expression_context_block,
1352 VAR_DOMAIN,
1353 &$$.is_a_field_of_this);
1354 }
7322dca9 1355 | UNKNOWN_CPP_NAME
c906108c
SS
1356 ;
1357
1358%%
1359
66c53f2b
KS
1360/* Returns a stoken of the operator name given by OP (which does not
1361 include the string "operator"). */
1362static struct stoken
1363operator_stoken (const char *op)
1364{
1365 static const char *operator_string = "operator";
1366 struct stoken st = { NULL, 0 };
1367 st.length = strlen (operator_string) + strlen (op);
1368 st.ptr = malloc (st.length + 1);
1369 strcpy (st.ptr, operator_string);
1370 strcat (st.ptr, op);
1371
1372 /* The toplevel (c_parse) will free the memory allocated here. */
1373 make_cleanup (free, st.ptr);
1374 return st;
1375};
1376
c906108c
SS
1377/* Take care of parsing a number (anything that starts with a digit).
1378 Set yylval and return the token type; update lexptr.
1379 LEN is the number of characters in it. */
1380
1381/*** Needs some error checking for the float case ***/
1382
1383static int
68c1b02d 1384parse_number (char *p, int len, int parsed_float, YYSTYPE *putithere)
c906108c
SS
1385{
1386 /* FIXME: Shouldn't these be unsigned? We don't deal with negative values
1387 here, and we do kind of silly things like cast to unsigned. */
710122da
DC
1388 LONGEST n = 0;
1389 LONGEST prevn = 0;
c906108c
SS
1390 ULONGEST un;
1391
710122da
DC
1392 int i = 0;
1393 int c;
1394 int base = input_radix;
c906108c
SS
1395 int unsigned_p = 0;
1396
1397 /* Number of "L" suffixes encountered. */
1398 int long_p = 0;
1399
1400 /* We have found a "L" or "U" suffix. */
1401 int found_suffix = 0;
1402
1403 ULONGEST high_bit;
1404 struct type *signed_type;
1405 struct type *unsigned_type;
1406
1407 if (parsed_float)
1408 {
d30f5e1f
DE
1409 const char *suffix;
1410 int suffix_len;
27bc4d80
TJB
1411
1412 /* If it ends at "df", "dd" or "dl", take it as type of decimal floating
1413 point. Return DECFLOAT. */
1414
fe9441f6 1415 if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'f')
27bc4d80
TJB
1416 {
1417 p[len - 2] = '\0';
1418 putithere->typed_val_decfloat.type
3e79cecf 1419 = parse_type->builtin_decfloat;
e17a4113
UW
1420 decimal_from_string (putithere->typed_val_decfloat.val, 4,
1421 gdbarch_byte_order (parse_gdbarch), p);
fe9441f6
JK
1422 p[len - 2] = 'd';
1423 return DECFLOAT;
27bc4d80
TJB
1424 }
1425
fe9441f6 1426 if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'd')
27bc4d80
TJB
1427 {
1428 p[len - 2] = '\0';
1429 putithere->typed_val_decfloat.type
3e79cecf 1430 = parse_type->builtin_decdouble;
e17a4113
UW
1431 decimal_from_string (putithere->typed_val_decfloat.val, 8,
1432 gdbarch_byte_order (parse_gdbarch), p);
fe9441f6
JK
1433 p[len - 2] = 'd';
1434 return DECFLOAT;
27bc4d80
TJB
1435 }
1436
fe9441f6 1437 if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'l')
27bc4d80
TJB
1438 {
1439 p[len - 2] = '\0';
1440 putithere->typed_val_decfloat.type
3e79cecf 1441 = parse_type->builtin_declong;
e17a4113
UW
1442 decimal_from_string (putithere->typed_val_decfloat.val, 16,
1443 gdbarch_byte_order (parse_gdbarch), p);
fe9441f6
JK
1444 p[len - 2] = 'd';
1445 return DECFLOAT;
27bc4d80
TJB
1446 }
1447
d30f5e1f
DE
1448 if (! parse_c_float (parse_gdbarch, p, len,
1449 &putithere->typed_val_float.dval,
1450 &putithere->typed_val_float.type))
1451 return ERROR;
c906108c
SS
1452 return FLOAT;
1453 }
1454
1455 /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
1456 if (p[0] == '0')
1457 switch (p[1])
1458 {
1459 case 'x':
1460 case 'X':
1461 if (len >= 3)
1462 {
1463 p += 2;
1464 base = 16;
1465 len -= 2;
1466 }
1467 break;
1468
b5cfddf5
JK
1469 case 'b':
1470 case 'B':
1471 if (len >= 3)
1472 {
1473 p += 2;
1474 base = 2;
1475 len -= 2;
1476 }
1477 break;
1478
c906108c
SS
1479 case 't':
1480 case 'T':
1481 case 'd':
1482 case 'D':
1483 if (len >= 3)
1484 {
1485 p += 2;
1486 base = 10;
1487 len -= 2;
1488 }
1489 break;
1490
1491 default:
1492 base = 8;
1493 break;
1494 }
1495
1496 while (len-- > 0)
1497 {
1498 c = *p++;
1499 if (c >= 'A' && c <= 'Z')
1500 c += 'a' - 'A';
1501 if (c != 'l' && c != 'u')
1502 n *= base;
1503 if (c >= '0' && c <= '9')
1504 {
1505 if (found_suffix)
1506 return ERROR;
1507 n += i = c - '0';
1508 }
1509 else
1510 {
1511 if (base > 10 && c >= 'a' && c <= 'f')
1512 {
1513 if (found_suffix)
1514 return ERROR;
1515 n += i = c - 'a' + 10;
1516 }
1517 else if (c == 'l')
1518 {
1519 ++long_p;
1520 found_suffix = 1;
1521 }
1522 else if (c == 'u')
1523 {
1524 unsigned_p = 1;
1525 found_suffix = 1;
1526 }
1527 else
1528 return ERROR; /* Char not a digit */
1529 }
1530 if (i >= base)
1531 return ERROR; /* Invalid digit in this base */
1532
1533 /* Portably test for overflow (only works for nonzero values, so make
1534 a second check for zero). FIXME: Can't we just make n and prevn
1535 unsigned and avoid this? */
1536 if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
1537 unsigned_p = 1; /* Try something unsigned */
1538
1539 /* Portably test for unsigned overflow.
1540 FIXME: This check is wrong; for example it doesn't find overflow
1541 on 0x123456789 when LONGEST is 32 bits. */
1542 if (c != 'l' && c != 'u' && n != 0)
1543 {
1544 if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n))
001083c6 1545 error (_("Numeric constant too large."));
c906108c
SS
1546 }
1547 prevn = n;
1548 }
1549
1550 /* An integer constant is an int, a long, or a long long. An L
1551 suffix forces it to be long; an LL suffix forces it to be long
1552 long. If not forced to a larger size, it gets the first type of
1553 the above that it fits in. To figure out whether it fits, we
1554 shift it right and see whether anything remains. Note that we
1555 can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
1556 operation, because many compilers will warn about such a shift
9a76efb6
UW
1557 (which always produces a zero result). Sometimes gdbarch_int_bit
1558 or gdbarch_long_bit will be that big, sometimes not. To deal with
c906108c
SS
1559 the case where it is we just always shift the value more than
1560 once, with fewer bits each time. */
1561
1562 un = (ULONGEST)n >> 2;
1563 if (long_p == 0
3e79cecf 1564 && (un >> (gdbarch_int_bit (parse_gdbarch) - 2)) == 0)
c906108c 1565 {
3e79cecf 1566 high_bit = ((ULONGEST)1) << (gdbarch_int_bit (parse_gdbarch) - 1);
c906108c
SS
1567
1568 /* A large decimal (not hex or octal) constant (between INT_MAX
1569 and UINT_MAX) is a long or unsigned long, according to ANSI,
1570 never an unsigned int, but this code treats it as unsigned
1571 int. This probably should be fixed. GCC gives a warning on
1572 such constants. */
1573
3e79cecf
UW
1574 unsigned_type = parse_type->builtin_unsigned_int;
1575 signed_type = parse_type->builtin_int;
c906108c
SS
1576 }
1577 else if (long_p <= 1
3e79cecf 1578 && (un >> (gdbarch_long_bit (parse_gdbarch) - 2)) == 0)
c906108c 1579 {
3e79cecf
UW
1580 high_bit = ((ULONGEST)1) << (gdbarch_long_bit (parse_gdbarch) - 1);
1581 unsigned_type = parse_type->builtin_unsigned_long;
1582 signed_type = parse_type->builtin_long;
c906108c
SS
1583 }
1584 else
1585 {
1586 int shift;
9a76efb6 1587 if (sizeof (ULONGEST) * HOST_CHAR_BIT
3e79cecf 1588 < gdbarch_long_long_bit (parse_gdbarch))
c906108c
SS
1589 /* A long long does not fit in a LONGEST. */
1590 shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1);
1591 else
3e79cecf 1592 shift = (gdbarch_long_long_bit (parse_gdbarch) - 1);
c906108c 1593 high_bit = (ULONGEST) 1 << shift;
3e79cecf
UW
1594 unsigned_type = parse_type->builtin_unsigned_long_long;
1595 signed_type = parse_type->builtin_long_long;
c906108c
SS
1596 }
1597
1598 putithere->typed_val_int.val = n;
1599
1600 /* If the high bit of the worked out type is set then this number
1601 has to be unsigned. */
1602
1603 if (unsigned_p || (n & high_bit))
1604 {
1605 putithere->typed_val_int.type = unsigned_type;
1606 }
1607 else
1608 {
1609 putithere->typed_val_int.type = signed_type;
1610 }
1611
1612 return INT;
1613}
1614
6c7a06a3
TT
1615/* Temporary obstack used for holding strings. */
1616static struct obstack tempbuf;
1617static int tempbuf_init;
1618
1619/* Parse a C escape sequence. The initial backslash of the sequence
1620 is at (*PTR)[-1]. *PTR will be updated to point to just after the
1621 last character of the sequence. If OUTPUT is not NULL, the
1622 translated form of the escape sequence will be written there. If
1623 OUTPUT is NULL, no output is written and the call will only affect
1624 *PTR. If an escape sequence is expressed in target bytes, then the
1625 entire sequence will simply be copied to OUTPUT. Return 1 if any
1626 character was emitted, 0 otherwise. */
1627
1628int
1629c_parse_escape (char **ptr, struct obstack *output)
1630{
1631 char *tokptr = *ptr;
1632 int result = 1;
1633
1634 /* Some escape sequences undergo character set conversion. Those we
1635 translate here. */
1636 switch (*tokptr)
1637 {
1638 /* Hex escapes do not undergo character set conversion, so keep
1639 the escape sequence for later. */
1640 case 'x':
1641 if (output)
1642 obstack_grow_str (output, "\\x");
1643 ++tokptr;
1644 if (!isxdigit (*tokptr))
1645 error (_("\\x escape without a following hex digit"));
1646 while (isxdigit (*tokptr))
1647 {
1648 if (output)
1649 obstack_1grow (output, *tokptr);
1650 ++tokptr;
1651 }
1652 break;
1653
1654 /* Octal escapes do not undergo character set conversion, so
1655 keep the escape sequence for later. */
1656 case '0':
1657 case '1':
1658 case '2':
1659 case '3':
1660 case '4':
1661 case '5':
1662 case '6':
1663 case '7':
30b66ecc
TT
1664 {
1665 int i;
1666 if (output)
1667 obstack_grow_str (output, "\\");
1668 for (i = 0;
1669 i < 3 && isdigit (*tokptr) && *tokptr != '8' && *tokptr != '9';
1670 ++i)
1671 {
1672 if (output)
1673 obstack_1grow (output, *tokptr);
1674 ++tokptr;
1675 }
1676 }
6c7a06a3
TT
1677 break;
1678
1679 /* We handle UCNs later. We could handle them here, but that
1680 would mean a spurious error in the case where the UCN could
1681 be converted to the target charset but not the host
1682 charset. */
1683 case 'u':
1684 case 'U':
1685 {
1686 char c = *tokptr;
1687 int i, len = c == 'U' ? 8 : 4;
1688 if (output)
1689 {
1690 obstack_1grow (output, '\\');
1691 obstack_1grow (output, *tokptr);
1692 }
1693 ++tokptr;
1694 if (!isxdigit (*tokptr))
1695 error (_("\\%c escape without a following hex digit"), c);
1696 for (i = 0; i < len && isxdigit (*tokptr); ++i)
1697 {
1698 if (output)
1699 obstack_1grow (output, *tokptr);
1700 ++tokptr;
1701 }
1702 }
1703 break;
1704
1705 /* We must pass backslash through so that it does not
1706 cause quoting during the second expansion. */
1707 case '\\':
1708 if (output)
1709 obstack_grow_str (output, "\\\\");
1710 ++tokptr;
1711 break;
1712
1713 /* Escapes which undergo conversion. */
1714 case 'a':
1715 if (output)
1716 obstack_1grow (output, '\a');
1717 ++tokptr;
1718 break;
1719 case 'b':
1720 if (output)
1721 obstack_1grow (output, '\b');
1722 ++tokptr;
1723 break;
1724 case 'f':
1725 if (output)
1726 obstack_1grow (output, '\f');
1727 ++tokptr;
1728 break;
1729 case 'n':
1730 if (output)
1731 obstack_1grow (output, '\n');
1732 ++tokptr;
1733 break;
1734 case 'r':
1735 if (output)
1736 obstack_1grow (output, '\r');
1737 ++tokptr;
1738 break;
1739 case 't':
1740 if (output)
1741 obstack_1grow (output, '\t');
1742 ++tokptr;
1743 break;
1744 case 'v':
1745 if (output)
1746 obstack_1grow (output, '\v');
1747 ++tokptr;
1748 break;
1749
1750 /* GCC extension. */
1751 case 'e':
1752 if (output)
1753 obstack_1grow (output, HOST_ESCAPE_CHAR);
1754 ++tokptr;
1755 break;
1756
1757 /* Backslash-newline expands to nothing at all. */
1758 case '\n':
1759 ++tokptr;
1760 result = 0;
1761 break;
1762
1763 /* A few escapes just expand to the character itself. */
1764 case '\'':
1765 case '\"':
1766 case '?':
1767 /* GCC extensions. */
1768 case '(':
1769 case '{':
1770 case '[':
1771 case '%':
1772 /* Unrecognized escapes turn into the character itself. */
1773 default:
1774 if (output)
1775 obstack_1grow (output, *tokptr);
1776 ++tokptr;
1777 break;
1778 }
1779 *ptr = tokptr;
1780 return result;
1781}
1782
1783/* Parse a string or character literal from TOKPTR. The string or
1784 character may be wide or unicode. *OUTPTR is set to just after the
1785 end of the literal in the input string. The resulting token is
1786 stored in VALUE. This returns a token value, either STRING or
1787 CHAR, depending on what was parsed. *HOST_CHARS is set to the
1788 number of host characters in the literal. */
1789static int
1790parse_string_or_char (char *tokptr, char **outptr, struct typed_stoken *value,
1791 int *host_chars)
1792{
8c5630cb 1793 int quote;
6c7a06a3
TT
1794 enum c_string_type type;
1795
1796 /* Build the gdb internal form of the input string in tempbuf. Note
1797 that the buffer is null byte terminated *only* for the
1798 convenience of debugging gdb itself and printing the buffer
1799 contents when the buffer contains no embedded nulls. Gdb does
1800 not depend upon the buffer being null byte terminated, it uses
1801 the length string instead. This allows gdb to handle C strings
1802 (as well as strings in other languages) with embedded null
1803 bytes */
1804
1805 if (!tempbuf_init)
1806 tempbuf_init = 1;
1807 else
1808 obstack_free (&tempbuf, NULL);
1809 obstack_init (&tempbuf);
1810
1811 /* Record the string type. */
1812 if (*tokptr == 'L')
1813 {
1814 type = C_WIDE_STRING;
1815 ++tokptr;
1816 }
1817 else if (*tokptr == 'u')
1818 {
1819 type = C_STRING_16;
1820 ++tokptr;
1821 }
1822 else if (*tokptr == 'U')
1823 {
1824 type = C_STRING_32;
1825 ++tokptr;
1826 }
1827 else
1828 type = C_STRING;
1829
1830 /* Skip the quote. */
1831 quote = *tokptr;
1832 if (quote == '\'')
1833 type |= C_CHAR;
1834 ++tokptr;
1835
1836 *host_chars = 0;
1837
1838 while (*tokptr)
1839 {
1840 char c = *tokptr;
1841 if (c == '\\')
1842 {
1843 ++tokptr;
1844 *host_chars += c_parse_escape (&tokptr, &tempbuf);
1845 }
1846 else if (c == quote)
1847 break;
1848 else
1849 {
1850 obstack_1grow (&tempbuf, c);
1851 ++tokptr;
1852 /* FIXME: this does the wrong thing with multi-byte host
1853 characters. We could use mbrlen here, but that would
1854 make "set host-charset" a bit less useful. */
1855 ++*host_chars;
1856 }
1857 }
1858
1859 if (*tokptr != quote)
1860 {
1861 if (quote == '"')
001083c6 1862 error (_("Unterminated string in expression."));
6c7a06a3 1863 else
001083c6 1864 error (_("Unmatched single quote."));
6c7a06a3
TT
1865 }
1866 ++tokptr;
1867
1868 value->type = type;
1869 value->ptr = obstack_base (&tempbuf);
1870 value->length = obstack_object_size (&tempbuf);
1871
1872 *outptr = tokptr;
1873
1874 return quote == '"' ? STRING : CHAR;
1875}
1876
c906108c
SS
1877struct token
1878{
1879 char *operator;
1880 int token;
1881 enum exp_opcode opcode;
ba163c7e 1882 int cxx_only;
c906108c
SS
1883};
1884
1885static const struct token tokentab3[] =
1886 {
ba163c7e 1887 {">>=", ASSIGN_MODIFY, BINOP_RSH, 0},
c1af96a0
KS
1888 {"<<=", ASSIGN_MODIFY, BINOP_LSH, 0},
1889 {"->*", ARROW_STAR, BINOP_END, 1}
c906108c
SS
1890 };
1891
1892static const struct token tokentab2[] =
1893 {
ba163c7e
TT
1894 {"+=", ASSIGN_MODIFY, BINOP_ADD, 0},
1895 {"-=", ASSIGN_MODIFY, BINOP_SUB, 0},
1896 {"*=", ASSIGN_MODIFY, BINOP_MUL, 0},
1897 {"/=", ASSIGN_MODIFY, BINOP_DIV, 0},
1898 {"%=", ASSIGN_MODIFY, BINOP_REM, 0},
1899 {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR, 0},
1900 {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND, 0},
1901 {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR, 0},
1902 {"++", INCREMENT, BINOP_END, 0},
1903 {"--", DECREMENT, BINOP_END, 0},
1904 {"->", ARROW, BINOP_END, 0},
1905 {"&&", ANDAND, BINOP_END, 0},
1906 {"||", OROR, BINOP_END, 0},
ec7f2efe
KS
1907 /* "::" is *not* only C++: gdb overrides its meaning in several
1908 different ways, e.g., 'filename'::func, function::variable. */
ba163c7e
TT
1909 {"::", COLONCOLON, BINOP_END, 0},
1910 {"<<", LSH, BINOP_END, 0},
1911 {">>", RSH, BINOP_END, 0},
1912 {"==", EQUAL, BINOP_END, 0},
1913 {"!=", NOTEQUAL, BINOP_END, 0},
1914 {"<=", LEQ, BINOP_END, 0},
c1af96a0 1915 {">=", GEQ, BINOP_END, 0},
ec7f2efe 1916 {".*", DOT_STAR, BINOP_END, 1}
ba163c7e
TT
1917 };
1918
1919/* Identifier-like tokens. */
1920static const struct token ident_tokens[] =
1921 {
1922 {"unsigned", UNSIGNED, OP_NULL, 0},
1923 {"template", TEMPLATE, OP_NULL, 1},
1924 {"volatile", VOLATILE_KEYWORD, OP_NULL, 0},
1925 {"struct", STRUCT, OP_NULL, 0},
1926 {"signed", SIGNED_KEYWORD, OP_NULL, 0},
1927 {"sizeof", SIZEOF, OP_NULL, 0},
1928 {"double", DOUBLE_KEYWORD, OP_NULL, 0},
1929 {"false", FALSEKEYWORD, OP_NULL, 1},
1930 {"class", CLASS, OP_NULL, 1},
1931 {"union", UNION, OP_NULL, 0},
1932 {"short", SHORT, OP_NULL, 0},
1933 {"const", CONST_KEYWORD, OP_NULL, 0},
1934 {"enum", ENUM, OP_NULL, 0},
1935 {"long", LONG, OP_NULL, 0},
1936 {"true", TRUEKEYWORD, OP_NULL, 1},
1937 {"int", INT_KEYWORD, OP_NULL, 0},
66c53f2b
KS
1938 {"new", NEW, OP_NULL, 1},
1939 {"delete", DELETE, OP_NULL, 1},
1940 {"operator", OPERATOR, OP_NULL, 1},
ba163c7e
TT
1941
1942 {"and", ANDAND, BINOP_END, 1},
1943 {"and_eq", ASSIGN_MODIFY, BINOP_BITWISE_AND, 1},
1944 {"bitand", '&', OP_NULL, 1},
1945 {"bitor", '|', OP_NULL, 1},
1946 {"compl", '~', OP_NULL, 1},
1947 {"not", '!', OP_NULL, 1},
1948 {"not_eq", NOTEQUAL, BINOP_END, 1},
1949 {"or", OROR, BINOP_END, 1},
1950 {"or_eq", ASSIGN_MODIFY, BINOP_BITWISE_IOR, 1},
1951 {"xor", '^', OP_NULL, 1},
4e8f195d
TT
1952 {"xor_eq", ASSIGN_MODIFY, BINOP_BITWISE_XOR, 1},
1953
1954 {"const_cast", CONST_CAST, OP_NULL, 1 },
1955 {"dynamic_cast", DYNAMIC_CAST, OP_NULL, 1 },
1956 {"static_cast", STATIC_CAST, OP_NULL, 1 },
1957 {"reinterpret_cast", REINTERPRET_CAST, OP_NULL, 1 }
c906108c
SS
1958 };
1959
7c8adf68
TT
1960/* When we find that lexptr (the global var defined in parse.c) is
1961 pointing at a macro invocation, we expand the invocation, and call
1962 scan_macro_expansion to save the old lexptr here and point lexptr
1963 into the expanded text. When we reach the end of that, we call
1964 end_macro_expansion to pop back to the value we saved here. The
1965 macro expansion code promises to return only fully-expanded text,
1966 so we don't need to "push" more than one level.
1967
1968 This is disgusting, of course. It would be cleaner to do all macro
1969 expansion beforehand, and then hand that to lexptr. But we don't
1970 really know where the expression ends. Remember, in a command like
1971
1972 (gdb) break *ADDRESS if CONDITION
1973
1974 we evaluate ADDRESS in the scope of the current frame, but we
1975 evaluate CONDITION in the scope of the breakpoint's location. So
1976 it's simply wrong to try to macro-expand the whole thing at once. */
1977static char *macro_original_text;
1978
1979/* We save all intermediate macro expansions on this obstack for the
1980 duration of a single parse. The expansion text may sometimes have
1981 to live past the end of the expansion, due to yacc lookahead.
1982 Rather than try to be clever about saving the data for a single
1983 token, we simply keep it all and delete it after parsing has
1984 completed. */
1985static struct obstack expansion_obstack;
1986
1987static void
1988scan_macro_expansion (char *expansion)
1989{
1990 char *copy;
1991
1992 /* We'd better not be trying to push the stack twice. */
1993 gdb_assert (! macro_original_text);
1994
1995 /* Copy to the obstack, and then free the intermediate
1996 expansion. */
1997 copy = obstack_copy0 (&expansion_obstack, expansion, strlen (expansion));
1998 xfree (expansion);
1999
2000 /* Save the old lexptr value, so we can return to it when we're done
2001 parsing the expanded text. */
2002 macro_original_text = lexptr;
2003 lexptr = copy;
2004}
2005
2006
2007static int
2008scanning_macro_expansion (void)
2009{
2010 return macro_original_text != 0;
2011}
2012
2013
2014static void
2015finished_macro_expansion (void)
2016{
2017 /* There'd better be something to pop back to. */
2018 gdb_assert (macro_original_text);
2019
2020 /* Pop back to the original text. */
2021 lexptr = macro_original_text;
2022 macro_original_text = 0;
2023}
2024
2025
2026static void
2027scan_macro_cleanup (void *dummy)
2028{
2029 if (macro_original_text)
2030 finished_macro_expansion ();
2031
2032 obstack_free (&expansion_obstack, NULL);
2033}
2034
4e8f195d
TT
2035/* Return true iff the token represents a C++ cast operator. */
2036
2037static int
2038is_cast_operator (const char *token, int len)
2039{
2040 return (! strncmp (token, "dynamic_cast", len)
2041 || ! strncmp (token, "static_cast", len)
2042 || ! strncmp (token, "reinterpret_cast", len)
2043 || ! strncmp (token, "const_cast", len));
2044}
7c8adf68
TT
2045
2046/* The scope used for macro expansion. */
2047static struct macro_scope *expression_macro_scope;
2048
65d12d83
TT
2049/* This is set if a NAME token appeared at the very end of the input
2050 string, with no whitespace separating the name from the EOF. This
2051 is used only when parsing to do field name completion. */
2052static int saw_name_at_eof;
2053
2054/* This is set if the previously-returned token was a structure
2055 operator -- either '.' or ARROW. This is used only when parsing to
2056 do field name completion. */
2057static int last_was_structop;
2058
c906108c
SS
2059/* Read one token, getting characters through lexptr. */
2060
2061static int
48e32051 2062lex_one_token (void)
c906108c
SS
2063{
2064 int c;
2065 int namelen;
2066 unsigned int i;
2067 char *tokstart;
65d12d83 2068 int saw_structop = last_was_structop;
ba163c7e 2069 char *copy;
65d12d83
TT
2070
2071 last_was_structop = 0;
2072
c906108c
SS
2073 retry:
2074
84f0252a
JB
2075 /* Check if this is a macro invocation that we need to expand. */
2076 if (! scanning_macro_expansion ())
2077 {
2078 char *expanded = macro_expand_next (&lexptr,
7c8adf68
TT
2079 standard_macro_lookup,
2080 expression_macro_scope);
84f0252a
JB
2081
2082 if (expanded)
2083 scan_macro_expansion (expanded);
2084 }
2085
665132f9 2086 prev_lexptr = lexptr;
c906108c
SS
2087
2088 tokstart = lexptr;
2089 /* See if it is a special token of length 3. */
2090 for (i = 0; i < sizeof tokentab3 / sizeof tokentab3[0]; i++)
bf896cb0 2091 if (strncmp (tokstart, tokentab3[i].operator, 3) == 0)
c906108c 2092 {
ec7f2efe
KS
2093 if (tokentab3[i].cxx_only
2094 && parse_language->la_language != language_cplus)
2095 break;
2096
c906108c
SS
2097 lexptr += 3;
2098 yylval.opcode = tokentab3[i].opcode;
2099 return tokentab3[i].token;
2100 }
2101
2102 /* See if it is a special token of length 2. */
2103 for (i = 0; i < sizeof tokentab2 / sizeof tokentab2[0]; i++)
bf896cb0 2104 if (strncmp (tokstart, tokentab2[i].operator, 2) == 0)
c906108c 2105 {
ec7f2efe
KS
2106 if (tokentab2[i].cxx_only
2107 && parse_language->la_language != language_cplus)
2108 break;
2109
c906108c
SS
2110 lexptr += 2;
2111 yylval.opcode = tokentab2[i].opcode;
37cd5d19 2112 if (in_parse_field && tokentab2[i].token == ARROW)
65d12d83 2113 last_was_structop = 1;
c906108c
SS
2114 return tokentab2[i].token;
2115 }
2116
2117 switch (c = *tokstart)
2118 {
2119 case 0:
84f0252a
JB
2120 /* If we were just scanning the result of a macro expansion,
2121 then we need to resume scanning the original text.
65d12d83
TT
2122 If we're parsing for field name completion, and the previous
2123 token allows such completion, return a COMPLETE token.
84f0252a
JB
2124 Otherwise, we were already scanning the original text, and
2125 we're really done. */
2126 if (scanning_macro_expansion ())
2127 {
2128 finished_macro_expansion ();
2129 goto retry;
2130 }
65d12d83
TT
2131 else if (saw_name_at_eof)
2132 {
2133 saw_name_at_eof = 0;
2134 return COMPLETE;
2135 }
2136 else if (saw_structop)
2137 return COMPLETE;
84f0252a
JB
2138 else
2139 return 0;
c906108c
SS
2140
2141 case ' ':
2142 case '\t':
2143 case '\n':
2144 lexptr++;
2145 goto retry;
2146
379a77b5 2147 case '[':
c906108c
SS
2148 case '(':
2149 paren_depth++;
2150 lexptr++;
2151 return c;
2152
379a77b5 2153 case ']':
c906108c
SS
2154 case ')':
2155 if (paren_depth == 0)
2156 return 0;
2157 paren_depth--;
2158 lexptr++;
2159 return c;
2160
2161 case ',':
84f0252a
JB
2162 if (comma_terminates
2163 && paren_depth == 0
2164 && ! scanning_macro_expansion ())
c906108c
SS
2165 return 0;
2166 lexptr++;
2167 return c;
2168
2169 case '.':
2170 /* Might be a floating point number. */
2171 if (lexptr[1] < '0' || lexptr[1] > '9')
65d12d83
TT
2172 {
2173 if (in_parse_field)
2174 last_was_structop = 1;
2175 goto symbol; /* Nope, must be a symbol. */
2176 }
c906108c
SS
2177 /* FALL THRU into number case. */
2178
2179 case '0':
2180 case '1':
2181 case '2':
2182 case '3':
2183 case '4':
2184 case '5':
2185 case '6':
2186 case '7':
2187 case '8':
2188 case '9':
2189 {
2190 /* It's a number. */
2191 int got_dot = 0, got_e = 0, toktype;
710122da 2192 char *p = tokstart;
c906108c
SS
2193 int hex = input_radix > 10;
2194
2195 if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
2196 {
2197 p += 2;
2198 hex = 1;
2199 }
2200 else if (c == '0' && (p[1]=='t' || p[1]=='T' || p[1]=='d' || p[1]=='D'))
2201 {
2202 p += 2;
2203 hex = 0;
2204 }
2205
2206 for (;; ++p)
2207 {
2208 /* This test includes !hex because 'e' is a valid hex digit
2209 and thus does not indicate a floating point number when
2210 the radix is hex. */
2211 if (!hex && !got_e && (*p == 'e' || *p == 'E'))
2212 got_dot = got_e = 1;
2213 /* This test does not include !hex, because a '.' always indicates
2214 a decimal floating point number regardless of the radix. */
2215 else if (!got_dot && *p == '.')
2216 got_dot = 1;
2217 else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
2218 && (*p == '-' || *p == '+'))
2219 /* This is the sign of the exponent, not the end of the
2220 number. */
2221 continue;
2222 /* We will take any letters or digits. parse_number will
2223 complain if past the radix, or if L or U are not final. */
2224 else if ((*p < '0' || *p > '9')
2225 && ((*p < 'a' || *p > 'z')
2226 && (*p < 'A' || *p > 'Z')))
2227 break;
2228 }
2229 toktype = parse_number (tokstart, p - tokstart, got_dot|got_e, &yylval);
2230 if (toktype == ERROR)
2231 {
2232 char *err_copy = (char *) alloca (p - tokstart + 1);
2233
2234 memcpy (err_copy, tokstart, p - tokstart);
2235 err_copy[p - tokstart] = 0;
001083c6 2236 error (_("Invalid number \"%s\"."), err_copy);
c906108c
SS
2237 }
2238 lexptr = p;
2239 return toktype;
2240 }
2241
941b2081
JK
2242 case '@':
2243 {
2244 char *p = &tokstart[1];
2245 size_t len = strlen ("entry");
2246
2247 while (isspace (*p))
2248 p++;
2249 if (strncmp (p, "entry", len) == 0 && !isalnum (p[len])
2250 && p[len] != '_')
2251 {
2252 lexptr = &p[len];
2253 return ENTRY;
2254 }
2255 }
2256 /* FALLTHRU */
c906108c
SS
2257 case '+':
2258 case '-':
2259 case '*':
2260 case '/':
2261 case '%':
2262 case '|':
2263 case '&':
2264 case '^':
2265 case '~':
2266 case '!':
c906108c
SS
2267 case '<':
2268 case '>':
c906108c
SS
2269 case '?':
2270 case ':':
2271 case '=':
2272 case '{':
2273 case '}':
2274 symbol:
2275 lexptr++;
2276 return c;
2277
6c7a06a3
TT
2278 case 'L':
2279 case 'u':
2280 case 'U':
2281 if (tokstart[1] != '"' && tokstart[1] != '\'')
2282 break;
2283 /* Fall through. */
2284 case '\'':
c906108c 2285 case '"':
6c7a06a3
TT
2286 {
2287 int host_len;
2288 int result = parse_string_or_char (tokstart, &lexptr, &yylval.tsval,
2289 &host_len);
2290 if (result == CHAR)
c906108c 2291 {
6c7a06a3 2292 if (host_len == 0)
001083c6 2293 error (_("Empty character constant."));
6c7a06a3 2294 else if (host_len > 2 && c == '\'')
c906108c 2295 {
6c7a06a3
TT
2296 ++tokstart;
2297 namelen = lexptr - tokstart - 1;
2298 goto tryname;
c906108c 2299 }
6c7a06a3 2300 else if (host_len > 1)
001083c6 2301 error (_("Invalid character constant."));
c906108c 2302 }
6c7a06a3
TT
2303 return result;
2304 }
c906108c
SS
2305 }
2306
2307 if (!(c == '_' || c == '$'
2308 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
2309 /* We must have come across a bad character (e.g. ';'). */
001083c6 2310 error (_("Invalid character '%c' in expression."), c);
c906108c
SS
2311
2312 /* It's a name. See how long it is. */
2313 namelen = 0;
2314 for (c = tokstart[namelen];
2315 (c == '_' || c == '$' || (c >= '0' && c <= '9')
2316 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '<');)
2317 {
2318 /* Template parameter lists are part of the name.
2319 FIXME: This mishandles `print $a<4&&$a>3'. */
2320
2321 if (c == '<')
4e8f195d
TT
2322 {
2323 if (! is_cast_operator (tokstart, namelen))
2324 {
2325 /* Scan ahead to get rest of the template specification. Note
2326 that we look ahead only when the '<' adjoins non-whitespace
2327 characters; for comparison expressions, e.g. "a < b > c",
2328 there must be spaces before the '<', etc. */
c906108c 2329
4e8f195d
TT
2330 char * p = find_template_name_end (tokstart + namelen);
2331 if (p)
2332 namelen = p - tokstart;
2333 }
2334 break;
c906108c
SS
2335 }
2336 c = tokstart[++namelen];
2337 }
2338
84f0252a
JB
2339 /* The token "if" terminates the expression and is NOT removed from
2340 the input stream. It doesn't count if it appears in the
2341 expansion of a macro. */
2342 if (namelen == 2
2343 && tokstart[0] == 'i'
2344 && tokstart[1] == 'f'
2345 && ! scanning_macro_expansion ())
c906108c
SS
2346 {
2347 return 0;
2348 }
2349
b6199126
DJ
2350 /* For the same reason (breakpoint conditions), "thread N"
2351 terminates the expression. "thread" could be an identifier, but
2352 an identifier is never followed by a number without intervening
2353 punctuation. "task" is similar. Handle abbreviations of these,
2354 similarly to breakpoint.c:find_condition_and_thread. */
2355 if (namelen >= 1
2356 && (strncmp (tokstart, "thread", namelen) == 0
2357 || strncmp (tokstart, "task", namelen) == 0)
2358 && (tokstart[namelen] == ' ' || tokstart[namelen] == '\t')
2359 && ! scanning_macro_expansion ())
2360 {
2361 char *p = tokstart + namelen + 1;
2362 while (*p == ' ' || *p == '\t')
2363 p++;
2364 if (*p >= '0' && *p <= '9')
2365 return 0;
2366 }
2367
c906108c
SS
2368 lexptr += namelen;
2369
2370 tryname:
2371
c906108c
SS
2372 yylval.sval.ptr = tokstart;
2373 yylval.sval.length = namelen;
2374
ba163c7e
TT
2375 /* Catch specific keywords. */
2376 copy = copy_name (yylval.sval);
2377 for (i = 0; i < sizeof ident_tokens / sizeof ident_tokens[0]; i++)
2378 if (strcmp (copy, ident_tokens[i].operator) == 0)
2379 {
2380 if (ident_tokens[i].cxx_only
2381 && parse_language->la_language != language_cplus)
2382 break;
2383
2384 /* It is ok to always set this, even though we don't always
2385 strictly need to. */
2386 yylval.opcode = ident_tokens[i].opcode;
2387 return ident_tokens[i].token;
2388 }
2389
c906108c 2390 if (*tokstart == '$')
48e32051
TT
2391 return VARIABLE;
2392
2393 if (in_parse_field && *lexptr == '\0')
2394 saw_name_at_eof = 1;
2395 return NAME;
2396}
2397
2398/* An object of this type is pushed on a FIFO by the "outer" lexer. */
2399typedef struct
2400{
2401 int token;
e707a91d 2402 YYSTYPE value;
48e32051
TT
2403} token_and_value;
2404
2405DEF_VEC_O (token_and_value);
2406
2407/* A FIFO of tokens that have been read but not yet returned to the
2408 parser. */
2409static VEC (token_and_value) *token_fifo;
2410
2411/* Non-zero if the lexer should return tokens from the FIFO. */
2412static int popping;
2413
2414/* Temporary storage for c_lex; this holds symbol names as they are
2415 built up. */
2416static struct obstack name_obstack;
2417
2418/* Classify a NAME token. The contents of the token are in `yylval'.
2419 Updates yylval and returns the new token type. BLOCK is the block
2420 in which lookups start; this can be NULL to mean the global
2421 scope. */
2422static int
2423classify_name (struct block *block)
2424{
2425 struct symbol *sym;
2426 char *copy;
2427 int is_a_field_of_this = 0;
2428
2429 copy = copy_name (yylval.sval);
2430
2431 sym = lookup_symbol (copy, block, VAR_DOMAIN,
2432 parse_language->la_language == language_cplus
2433 ? &is_a_field_of_this : (int *) NULL);
2434
2435 if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
c906108c 2436 {
48e32051
TT
2437 yylval.ssym.sym = sym;
2438 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
2439 return BLOCKNAME;
c906108c 2440 }
48e32051
TT
2441 else if (!sym)
2442 {
2443 /* See if it's a file name. */
2444 struct symtab *symtab;
c906108c 2445
48e32051
TT
2446 symtab = lookup_symtab (copy);
2447 if (symtab)
2448 {
2449 yylval.bval = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK);
2450 return FILENAME;
2451 }
2452 }
c906108c 2453
48e32051
TT
2454 if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2455 {
2456 yylval.tsym.type = SYMBOL_TYPE (sym);
47663de5 2457 return TYPENAME;
48e32051 2458 }
c906108c 2459
48e32051
TT
2460 yylval.tsym.type
2461 = language_lookup_primitive_type_by_name (parse_language,
2462 parse_gdbarch, copy);
2463 if (yylval.tsym.type != NULL)
2464 return TYPENAME;
2465
2466 /* Input names that aren't symbols but ARE valid hex numbers, when
2467 the input radix permits them, can be names or numbers depending
2468 on the parse. Note we support radixes > 16 here. */
2469 if (!sym
2470 && ((copy[0] >= 'a' && copy[0] < 'a' + input_radix - 10)
2471 || (copy[0] >= 'A' && copy[0] < 'A' + input_radix - 10)))
2472 {
2473 YYSTYPE newlval; /* Its value is ignored. */
2474 int hextype = parse_number (copy, yylval.sval.length, 0, &newlval);
2475 if (hextype == INT)
2476 {
2477 yylval.ssym.sym = sym;
2478 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
2479 return NAME_OR_INT;
2480 }
2481 }
2482
2483 /* Any other kind of symbol */
2484 yylval.ssym.sym = sym;
2485 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
7322dca9
SW
2486
2487 if (sym == NULL
2488 && parse_language->la_language == language_cplus
450ca57c 2489 && !is_a_field_of_this
7322dca9
SW
2490 && !lookup_minimal_symbol (copy, NULL, NULL))
2491 return UNKNOWN_CPP_NAME;
2492
48e32051
TT
2493 return NAME;
2494}
c906108c 2495
48e32051
TT
2496/* Like classify_name, but used by the inner loop of the lexer, when a
2497 name might have already been seen. FIRST_NAME is true if the token
2498 in `yylval' is the first component of a name, false otherwise. If
2499 this function returns NAME, it might not have updated `yylval'.
2500 This is ok because the caller only cares about TYPENAME. */
2501static int
2502classify_inner_name (struct block *block, int first_name)
2503{
2504 struct type *type, *new_type;
2505 char *copy;
2506
2507 if (first_name)
2508 return classify_name (block);
2509
2510 type = check_typedef (yylval.tsym.type);
2511 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
2512 && TYPE_CODE (type) != TYPE_CODE_UNION
2513 && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
2514 /* We know the caller won't expect us to update yylval. */
c906108c 2515 return NAME;
48e32051
TT
2516
2517 copy = copy_name (yylval.tsym.stoken);
d8228535 2518 new_type = cp_lookup_nested_type (yylval.tsym.type, copy, block);
48e32051
TT
2519
2520 if (new_type == NULL)
2521 /* We know the caller won't expect us to update yylval. */
2522 return NAME;
2523
2524 yylval.tsym.type = new_type;
2525 return TYPENAME;
2526}
2527
2528/* The outer level of a two-level lexer. This calls the inner lexer
2529 to return tokens. It then either returns these tokens, or
2530 aggregates them into a larger token. This lets us work around a
2531 problem in our parsing approach, where the parser could not
2532 distinguish between qualified names and qualified types at the
2533 right point.
2534
2535 This approach is still not ideal, because it mishandles template
2536 types. See the comment in lex_one_token for an example. However,
2537 this is still an improvement over the earlier approach, and will
2538 suffice until we move to better parsing technology. */
2539static int
2540yylex (void)
2541{
2542 token_and_value current;
48e32051
TT
2543 int first_was_coloncolon, last_was_coloncolon, first_iter;
2544
2545 if (popping && !VEC_empty (token_and_value, token_fifo))
2546 {
2547 token_and_value tv = *VEC_index (token_and_value, token_fifo, 0);
2548 VEC_ordered_remove (token_and_value, token_fifo, 0);
2549 yylval = tv.value;
2550 return tv.token;
2551 }
2552 popping = 0;
2553
2554 current.token = lex_one_token ();
2555 if (current.token == NAME)
2556 current.token = classify_name (expression_context_block);
2557 if (parse_language->la_language != language_cplus
2558 || (current.token != TYPENAME && current.token != COLONCOLON))
2559 return current.token;
2560
2561 first_was_coloncolon = current.token == COLONCOLON;
2562 last_was_coloncolon = first_was_coloncolon;
2563 obstack_free (&name_obstack, obstack_base (&name_obstack));
2564 if (!last_was_coloncolon)
2565 obstack_grow (&name_obstack, yylval.sval.ptr, yylval.sval.length);
2566 current.value = yylval;
2567 first_iter = 1;
2568 while (1)
2569 {
2570 token_and_value next;
2571
2572 next.token = lex_one_token ();
2573 next.value = yylval;
2574
2575 if (next.token == NAME && last_was_coloncolon)
2576 {
2577 int classification;
2578
2579 classification = classify_inner_name (first_was_coloncolon
2580 ? NULL
2581 : expression_context_block,
2582 first_iter);
2583 /* We keep going until we either run out of names, or until
2584 we have a qualified name which is not a type. */
2585 if (classification != TYPENAME)
2586 {
2587 /* Push the final component and leave the loop. */
2588 VEC_safe_push (token_and_value, token_fifo, &next);
2589 break;
2590 }
2591
2592 /* Update the partial name we are constructing. */
2593 if (!first_iter)
2594 {
2595 /* We don't want to put a leading "::" into the name. */
2596 obstack_grow_str (&name_obstack, "::");
2597 }
2598 obstack_grow (&name_obstack, next.value.sval.ptr,
2599 next.value.sval.length);
2600
2601 yylval.sval.ptr = obstack_base (&name_obstack);
2602 yylval.sval.length = obstack_object_size (&name_obstack);
2603 current.value = yylval;
2604 current.token = classification;
2605
2606 last_was_coloncolon = 0;
2607 }
2608 else if (next.token == COLONCOLON && !last_was_coloncolon)
2609 last_was_coloncolon = 1;
2610 else
2611 {
2612 /* We've reached the end of the name. */
2613 VEC_safe_push (token_and_value, token_fifo, &next);
2614 break;
2615 }
2616
2617 first_iter = 0;
2618 }
2619
2620 popping = 1;
2621
2622 /* If we ended with a "::", insert it too. */
2623 if (last_was_coloncolon)
2624 {
2625 token_and_value cc;
2626 memset (&cc, 0, sizeof (token_and_value));
af53d231 2627 if (first_was_coloncolon && first_iter)
48e32051
TT
2628 {
2629 yylval = cc.value;
2630 return COLONCOLON;
2631 }
2632 cc.token = COLONCOLON;
2633 VEC_safe_insert (token_and_value, token_fifo, 0, &cc);
2634 }
2635
2636 yylval = current.value;
2637 yylval.sval.ptr = obstack_copy0 (&expansion_obstack,
2638 yylval.sval.ptr,
2639 yylval.sval.length);
2640 return current.token;
c906108c
SS
2641}
2642
65d12d83
TT
2643int
2644c_parse (void)
2645{
7c8adf68
TT
2646 int result;
2647 struct cleanup *back_to = make_cleanup (free_current_contents,
2648 &expression_macro_scope);
2649
2650 /* Set up the scope for macro expansion. */
2651 expression_macro_scope = NULL;
2652
2653 if (expression_context_block)
2654 expression_macro_scope
2655 = sal_macro_scope (find_pc_line (expression_context_pc, 0));
2656 else
2657 expression_macro_scope = default_macro_scope ();
2658 if (! expression_macro_scope)
2659 expression_macro_scope = user_macro_scope ();
2660
2661 /* Initialize macro expansion code. */
2662 obstack_init (&expansion_obstack);
2663 gdb_assert (! macro_original_text);
2664 make_cleanup (scan_macro_cleanup, 0);
2665
92981e24
TT
2666 make_cleanup_restore_integer (&yydebug);
2667 yydebug = parser_debug;
2668
7c8adf68 2669 /* Initialize some state used by the lexer. */
65d12d83
TT
2670 last_was_structop = 0;
2671 saw_name_at_eof = 0;
7c8adf68 2672
48e32051
TT
2673 VEC_free (token_and_value, token_fifo);
2674 popping = 0;
2675 obstack_init (&name_obstack);
2676 make_cleanup_obstack_free (&name_obstack);
2677
7c8adf68
TT
2678 result = yyparse ();
2679 do_cleanups (back_to);
2680 return result;
65d12d83
TT
2681}
2682
7c8adf68 2683
c906108c 2684void
68c1b02d 2685yyerror (char *msg)
c906108c 2686{
665132f9
MS
2687 if (prev_lexptr)
2688 lexptr = prev_lexptr;
2689
001083c6 2690 error (_("A %s in expression, near `%s'."), (msg ? msg : "error"), lexptr);
c906108c 2691}
This page took 1.495345 seconds and 4 git commands to generate.