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