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