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