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