1 /* YACC parser for C expressions, for GDB.
3 Copyright 1986, 1989, 1990, 1991, 1993, 1994, 2002 Free Software
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.
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.
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. */
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.
29 Note that malloc's and realloc's in this file are transformed to
30 xmalloc and xrealloc respectively by the same sed command in the
31 makefile that remaps any other malloc/realloc inserted by the
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. */
40 #include "gdb_string.h"
42 #include "expression.h"
44 #include "objc-lang.h" /* For objc language constructs. */
47 #include "parser-defs.h"
50 #include "bfd.h" /* Required by objfiles.h. */
51 #include "symfile.h" /* Required by objfiles.h. */
52 #include "objfiles.h" /* For have_full_symbols and have_partial_symbols. */
54 #include "completer.h" /* For skip_quoted(). */
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. */
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
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
84 #define yy_yys objc_yys
85 #define yystate objc_state
86 #define yytmp objc_tmp
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
106 #define YYDEBUG 0 /* Default to no yydebug support. */
110 yyparse PARAMS ((void));
113 yylex PARAMS ((void));
116 yyerror PARAMS ((char *));
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. */
139 struct symtoken ssym;
142 enum exp_opcode opcode;
143 struct internalvar *ivar;
144 struct objc_class_str class;
151 /* YYSTYPE gets defined by %union. */
153 parse_number PARAMS ((char *, int, int, YYSTYPE *));
156 %type <voidval> exp exp1 type_exp start variable qualified_name lcurly
158 %type <tval> type typebase
159 %type <tvec> nonempty_typelist
160 /* %type <bval> block */
162 /* Fancy type parsing. */
163 %type <voidval> func_mod direct_abs_decl abs_decl
165 %type <lval> array_mod
167 %token <typed_val_int> INT
168 %token <typed_val_float> FLOAT
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. */
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 */
184 %type <ssym> name_not_typename
185 %type <tsym> typename
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. */
192 %token <ssym> NAME_OR_INT
194 %token STRUCT CLASS UNION ENUM SIZEOF UNSIGNED COLONCOLON
198 /* Special type cases, put in to allow the parser to distinguish
199 different legal basetypes. */
200 %token SIGNED_KEYWORD LONG SHORT INT_KEYWORD CONST_KEYWORD VOLATILE_KEYWORD DOUBLE_KEYWORD
202 %token <voidval> VARIABLE
204 %token <opcode> ASSIGN_MODIFY
208 %right '=' ASSIGN_MODIFY
216 %left '<' '>' LEQ GEQ
221 %right UNARY INCREMENT DECREMENT
222 %right ARROW '.' '[' '('
223 %token <ssym> BLOCKNAME
235 { write_exp_elt_opcode(OP_TYPE);
236 write_exp_elt_type($1);
237 write_exp_elt_opcode(OP_TYPE);}
240 /* Expressions, including the comma operator. */
243 { write_exp_elt_opcode (BINOP_COMMA); }
246 /* Expressions, not including the comma operator. */
247 exp : '*' exp %prec UNARY
248 { write_exp_elt_opcode (UNOP_IND); }
250 exp : '&' exp %prec UNARY
251 { write_exp_elt_opcode (UNOP_ADDR); }
253 exp : '-' exp %prec UNARY
254 { write_exp_elt_opcode (UNOP_NEG); }
257 exp : '!' exp %prec UNARY
258 { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
261 exp : '~' exp %prec UNARY
262 { write_exp_elt_opcode (UNOP_COMPLEMENT); }
265 exp : INCREMENT exp %prec UNARY
266 { write_exp_elt_opcode (UNOP_PREINCREMENT); }
269 exp : DECREMENT exp %prec UNARY
270 { write_exp_elt_opcode (UNOP_PREDECREMENT); }
273 exp : exp INCREMENT %prec UNARY
274 { write_exp_elt_opcode (UNOP_POSTINCREMENT); }
277 exp : exp DECREMENT %prec UNARY
278 { write_exp_elt_opcode (UNOP_POSTDECREMENT); }
281 exp : SIZEOF exp %prec UNARY
282 { write_exp_elt_opcode (UNOP_SIZEOF); }
286 { write_exp_elt_opcode (STRUCTOP_PTR);
287 write_exp_string ($3);
288 write_exp_elt_opcode (STRUCTOP_PTR); }
291 exp : 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); }
298 exp : exp ARROW '*' exp
299 { write_exp_elt_opcode (STRUCTOP_MPTR); }
303 { write_exp_elt_opcode (STRUCTOP_STRUCT);
304 write_exp_string ($3);
305 write_exp_elt_opcode (STRUCTOP_STRUCT); }
309 exp : 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); }
317 exp : exp '.' '*' exp
318 { write_exp_elt_opcode (STRUCTOP_MEMBER); }
321 exp : exp '[' exp1 ']'
322 { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
325 * The rules below parse ObjC message calls of the form:
326 * '[' target selector {':' argument}* ']'
333 class = lookup_objc_class (copy_name ($2.stoken));
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);
344 { write_exp_elt_opcode (OP_MSGCALL);
346 write_exp_elt_opcode (OP_MSGCALL);
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);
359 { write_exp_elt_opcode (OP_MSGCALL);
361 write_exp_elt_opcode (OP_MSGCALL);
368 { write_exp_elt_opcode (OP_MSGCALL);
370 write_exp_elt_opcode (OP_MSGCALL);
375 { add_msglist(&$1, 0); }
383 msgarg : name ':' exp
384 { add_msglist(&$1, 1); }
385 | ':' exp /* Unnamed arg. */
386 { add_msglist(0, 1); }
387 | ',' exp /* Variable number of args. */
388 { add_msglist(0, 0); }
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); }
402 { start_arglist (); }
412 arglist : arglist ',' exp %prec ABOVE_COMMA
417 { $$ = end_arglist () - 1; }
419 exp : 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); }
426 exp : 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); }
432 exp : '(' type ')' exp %prec UNARY
433 { write_exp_elt_opcode (UNOP_CAST);
434 write_exp_elt_type ($2);
435 write_exp_elt_opcode (UNOP_CAST); }
442 /* Binary operators in order of decreasing precedence. */
445 { write_exp_elt_opcode (BINOP_REPEAT); }
449 { write_exp_elt_opcode (BINOP_MUL); }
453 { write_exp_elt_opcode (BINOP_DIV); }
457 { write_exp_elt_opcode (BINOP_REM); }
461 { write_exp_elt_opcode (BINOP_ADD); }
465 { write_exp_elt_opcode (BINOP_SUB); }
469 { write_exp_elt_opcode (BINOP_LSH); }
473 { write_exp_elt_opcode (BINOP_RSH); }
477 { write_exp_elt_opcode (BINOP_EQUAL); }
480 exp : exp NOTEQUAL exp
481 { write_exp_elt_opcode (BINOP_NOTEQUAL); }
485 { write_exp_elt_opcode (BINOP_LEQ); }
489 { write_exp_elt_opcode (BINOP_GEQ); }
493 { write_exp_elt_opcode (BINOP_LESS); }
497 { write_exp_elt_opcode (BINOP_GTR); }
501 { write_exp_elt_opcode (BINOP_BITWISE_AND); }
505 { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
509 { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
513 { write_exp_elt_opcode (BINOP_LOGICAL_AND); }
517 { write_exp_elt_opcode (BINOP_LOGICAL_OR); }
520 exp : exp '?' exp ':' exp %prec '?'
521 { write_exp_elt_opcode (TERNOP_COND); }
525 { write_exp_elt_opcode (BINOP_ASSIGN); }
528 exp : 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); }
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); }
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);
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); }
563 /* Already written by write_dollar_variable. */
568 write_exp_elt_opcode (OP_SELECTOR);
569 write_exp_string ($1);
570 write_exp_elt_opcode (OP_SELECTOR); }
572 exp : SIZEOF '(' type ')' %prec UNARY
573 { write_exp_elt_opcode (OP_LONG);
574 write_exp_elt_type (builtin_type_int);
576 write_exp_elt_longcst ((LONGEST) TYPE_LENGTH ($3));
577 write_exp_elt_opcode (OP_LONG); }
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
587 char *sp = $1.ptr; int count = $1.length;
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);
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); }
605 exp : NSSTRING /* ObjC NextStep NSString constant
606 * of the form '@' '"' string '"'.
608 { write_exp_elt_opcode (OP_NSSTRING);
609 write_exp_string ($1);
610 write_exp_elt_opcode (OP_NSSTRING); }
616 $$ = SYMBOL_BLOCK_VALUE ($1.sym);
620 lookup_symtab (copy_name ($1.stoken));
622 $$ = BLOCKVECTOR_BLOCK (BLOCKVECTOR (tem), STATIC_BLOCK);
624 error ("No file or function \"%s\".",
625 copy_name ($1.stoken));
630 block : block COLONCOLON name
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.",
638 $$ = SYMBOL_BLOCK_VALUE (tem); }
641 variable: block COLONCOLON name
642 { struct symbol *sym;
643 sym = lookup_symbol (copy_name ($3), $1,
644 VAR_NAMESPACE, (int *) NULL,
645 (struct symtab **) NULL);
647 error ("No symbol \"%s\" in specified context.",
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); }
657 qualified_name: typebase COLONCOLON name
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.",
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);
670 | typebase COLONCOLON '~' name
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.",
679 if (!STREQ (type_name_no_tag (type), $4.ptr))
680 error ("invalid destructor `%s::~%s'",
681 type_name_no_tag (type), $4.ptr);
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);
695 variable: qualified_name
698 char *name = copy_name ($2);
700 struct minimal_symbol *msymbol;
703 lookup_symbol (name, (const struct block *) NULL,
704 VAR_NAMESPACE, (int *) NULL,
705 (struct symtab **) NULL);
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);
715 msymbol = lookup_minimal_symbol (name, NULL, NULL);
718 write_exp_msymbol (msymbol,
719 lookup_function_type (builtin_type_int),
723 if (!have_full_symbols () && !have_partial_symbols ())
724 error ("No symbol table is loaded. Use the \"file\" command.");
726 error ("No symbol \"%s\" in current context.", name);
730 variable: name_not_typename
731 { struct symbol *sym = $1.sym;
735 if (symbol_read_needs_frame (sym))
737 if (innermost_block == 0 ||
738 contained_in (block_found,
740 innermost_block = block_found;
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);
751 else if ($1.is_a_field_of_this)
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;
759 write_exp_elt_opcode (OP_SELF);
760 write_exp_elt_opcode (OP_SELF);
761 write_exp_elt_opcode (STRUCTOP_PTR);
762 write_exp_string ($1.stoken);
763 write_exp_elt_opcode (STRUCTOP_PTR);
767 struct minimal_symbol *msymbol;
768 register char *arg = copy_name ($1.stoken);
771 lookup_minimal_symbol (arg, NULL, NULL);
774 write_exp_msymbol (msymbol,
775 lookup_function_type (builtin_type_int),
778 else if (!have_full_symbols () &&
779 !have_partial_symbols ())
780 error ("No symbol table is loaded. Use the \"file\" command.");
782 error ("No symbol \"%s\" in current context.",
783 copy_name ($1.stoken));
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. */
795 | typebase CONST_KEYWORD
796 | typebase VOLATILE_KEYWORD
798 { $$ = follow_types ($1); }
799 | typebase CONST_KEYWORD abs_decl
800 { $$ = follow_types ($1); }
801 | typebase VOLATILE_KEYWORD abs_decl
802 { $$ = follow_types ($1); }
806 { push_type (tp_pointer); $$ = 0; }
808 { push_type (tp_pointer); $$ = $2; }
810 { push_type (tp_reference); $$ = 0; }
812 { push_type (tp_reference); $$ = $2; }
816 direct_abs_decl: '(' abs_decl ')'
818 | direct_abs_decl array_mod
821 push_type (tp_array);
826 push_type (tp_array);
830 | direct_abs_decl func_mod
831 { push_type (tp_function); }
833 { push_type (tp_function); }
844 | '(' nonempty_typelist ')'
845 { free ((PTR)$2); $$ = 0; }
848 /* We used to try to recognize more pointer to member types here, but
849 that didn't work (shift/reduce conflicts meant that these rules
850 never got executed). The problem is that
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! */
857 | typebase COLONCOLON '*'
858 { $$ = lookup_member_type (builtin_type_int, $1); }
861 typebase /* Implements (approximately): (type-qualifier)* type-specifier. */
867 error ("No symbol \"%s\" in current context.",
868 copy_name($1.stoken));
873 { $$ = builtin_type_int; }
875 { $$ = builtin_type_long; }
877 { $$ = builtin_type_short; }
879 { $$ = builtin_type_long; }
880 | UNSIGNED LONG INT_KEYWORD
881 { $$ = builtin_type_unsigned_long; }
883 { $$ = builtin_type_long_long; }
884 | LONG LONG INT_KEYWORD
885 { $$ = builtin_type_long_long; }
887 { $$ = builtin_type_unsigned_long_long; }
888 | UNSIGNED LONG LONG INT_KEYWORD
889 { $$ = builtin_type_unsigned_long_long; }
891 { $$ = builtin_type_short; }
892 | UNSIGNED SHORT INT_KEYWORD
893 { $$ = builtin_type_unsigned_short; }
895 { $$ = builtin_type_double; }
896 | LONG DOUBLE_KEYWORD
897 { $$ = builtin_type_long_double; }
899 { $$ = lookup_struct (copy_name ($2),
900 expression_context_block); }
902 { $$ = lookup_struct (copy_name ($2),
903 expression_context_block); }
905 { $$ = lookup_union (copy_name ($2),
906 expression_context_block); }
908 { $$ = lookup_enum (copy_name ($2),
909 expression_context_block); }
911 { $$ = lookup_unsigned_typename (TYPE_NAME($2.type)); }
913 { $$ = builtin_type_unsigned_int; }
914 | SIGNED_KEYWORD typename
915 { $$ = lookup_signed_typename (TYPE_NAME($2.type)); }
917 { $$ = builtin_type_int; }
918 | TEMPLATE name '<' type '>'
919 { $$ = lookup_template_type(copy_name($2), $4,
920 expression_context_block);
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. */
925 | CONST_KEYWORD typebase { $$ = $2; }
926 | VOLATILE_KEYWORD typebase { $$ = $2; }
932 $$.stoken.ptr = "int";
933 $$.stoken.length = 3;
934 $$.type = builtin_type_int;
938 $$.stoken.ptr = "long";
939 $$.stoken.length = 4;
940 $$.type = builtin_type_long;
944 $$.stoken.ptr = "short";
945 $$.stoken.length = 5;
946 $$.type = builtin_type_short;
952 { $$ = (struct type **) malloc (sizeof (struct type *) * 2);
953 $<ivec>$[0] = 1; /* Number of types in vector. */
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;
963 name : NAME { $$ = $1.stoken; }
964 | BLOCKNAME { $$ = $1.stoken; }
965 | TYPENAME { $$ = $1.stoken; }
966 | CLASSNAME { $$ = $1.stoken; }
967 | NAME_OR_INT { $$ = $1.stoken; }
970 name_not_typename : NAME
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. */
983 /* Take care of parsing a number (anything that starts with a digit).
984 Set yylval and return the token type; update lexptr. LEN is the
985 number of characters in it. */
987 /*** Needs some error checking for the float case. ***/
990 parse_number (p, len, parsed_float, putithere)
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
999 register LONGEST n = 0;
1000 register LONGEST prevn = 0;
1001 unsigned LONGEST un;
1005 register int base = input_radix;
1008 /* Number of "L" suffixes encountered. */
1011 /* We have found a "L" or "U" suffix. */
1012 int found_suffix = 0;
1014 unsigned LONGEST high_bit;
1015 struct type *signed_type;
1016 struct type *unsigned_type;
1022 /* It's a float since it contains a point or an exponent. */
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);
1030 #ifdef PRINTF_HAS_LONG_DOUBLE
1031 sscanf (p, "%Lg", &putithere->typed_val_float.dval);
1033 /* Scan it into a double, then assign it to the long double.
1034 This at least wins with values representable in the range
1037 sscanf (p, "%lg", &temp);
1038 putithere->typed_val_float.dval = temp;
1042 /* See if it has `f' or `l' suffix (float or long double). */
1044 c = tolower (p[len - 1]);
1047 putithere->typed_val_float.type = builtin_type_float;
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;
1058 /* Handle base-switching prefixes 0x, 0t, 0d, and 0. */
1092 if (c >= 'A' && c <= 'Z')
1094 if (c != 'l' && c != 'u')
1096 if (c >= '0' && c <= '9')
1104 if (base > 10 && c >= 'a' && c <= 'f')
1108 n += i = c - 'a' + 10;
1121 return ERROR; /* Char not a digit. */
1124 return ERROR; /* Invalid digit in this base. */
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? */
1129 if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
1130 unsigned_p = 1; /* Try something unsigned. */
1132 /* Portably test for unsigned overflow.
1133 FIXME: This check is wrong; for example it doesn't find
1134 overflow on 0x123456789 when LONGEST is 32 bits. */
1135 if (c != 'l' && c != 'u' && n != 0)
1137 if ((unsigned_p && (unsigned LONGEST) prevn >= (unsigned LONGEST) n))
1138 error ("Numeric constant too large.");
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. */
1155 un = (unsigned LONGEST)n >> 2;
1157 && (un >> (TARGET_INT_BIT - 2)) == 0)
1159 high_bit = ((unsigned LONGEST)1) << (TARGET_INT_BIT-1);
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
1167 unsigned_type = builtin_type_unsigned_int;
1168 signed_type = builtin_type_int;
1170 else if (long_p <= 1
1171 && (un >> (TARGET_LONG_BIT - 2)) == 0)
1173 high_bit = ((unsigned LONGEST)1) << (TARGET_LONG_BIT-1);
1174 unsigned_type = builtin_type_unsigned_long;
1175 signed_type = builtin_type_long;
1179 high_bit = (((unsigned LONGEST)1)
1180 << (TARGET_LONG_LONG_BIT - 32 - 1)
1184 /* A long long does not fit in a LONGEST. */
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;
1191 putithere->typed_val_int.val = n;
1193 /* If the high bit of the worked out type is set then this number
1194 has to be unsigned. */
1196 if (unsigned_p || (n & high_bit))
1198 putithere->typed_val_int.type = unsigned_type;
1202 putithere->typed_val_int.type = signed_type;
1212 enum exp_opcode opcode;
1215 static const struct token tokentab3[] =
1217 {">>=", ASSIGN_MODIFY, BINOP_RSH},
1218 {"<<=", ASSIGN_MODIFY, BINOP_LSH}
1221 static const struct token tokentab2[] =
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}
1245 /* Read one token, getting characters through lexptr. */
1256 static char *tempbuf;
1257 static int tempbufsize;
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))
1267 yylval.opcode = tokentab3[i].opcode;
1268 return tokentab3[i].token;
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))
1276 yylval.opcode = tokentab2[i].opcode;
1277 return tokentab2[i].token;
1280 switch (tokchr = *tokstart)
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). */
1298 c = parse_escape (&lexptr);
1300 error ("Empty character constant.");
1302 yylval.typed_val_int.val = c;
1303 yylval.typed_val_int.type = builtin_type_char;
1308 namelen = skip_quoted (tokstart,
1309 get_gdb_completer_word_break_characters())
1313 lexptr = tokstart + namelen;
1314 if (lexptr[-1] != '\'')
1315 error ("Unmatched single quote.");
1320 error ("Invalid character constant.");
1330 if (paren_depth == 0)
1337 if (comma_terminates && paren_depth == 0)
1343 /* Might be a floating point number. */
1344 if (lexptr[1] < '0' || lexptr[1] > '9')
1345 goto symbol; /* Nope, must be a symbol. */
1346 /* FALL THRU into number case. */
1359 /* It's a number. */
1360 int got_dot = 0, got_e = 0, toktype = FLOAT;
1361 /* Initialize toktype to anything other than ERROR. */
1362 register char *p = tokstart;
1363 int hex = input_radix > 10;
1364 int local_radix = input_radix;
1365 if (tokchr == '0' && (p[1] == 'x' || p[1] == 'X'))
1371 else if (tokchr == '0' && (p[1]=='t' || p[1]=='T' || p[1]=='d' || p[1]=='D'))
1380 /* This test includes !hex because 'e' is a valid hex digit
1381 and thus does not indicate a floating point number when
1382 the radix is hex. */
1384 if (!hex && (*p == 'e' || *p == 'E'))
1386 toktype = ERROR; /* Only one 'e' in a float. */
1389 /* This test does not include !hex, because a '.' always
1390 indicates a decimal floating point number regardless of
1394 toktype = ERROR; /* Only one '.' in a float. */
1397 else if (got_e && (p[-1] == 'e' || p[-1] == 'E') &&
1398 (*p == '-' || *p == '+'))
1399 /* This is the sign of the exponent, not the end of the
1402 /* Always take decimal digits; parse_number handles radix
1404 else if (*p >= '0' && *p <= '9')
1406 /* We will take letters only if hex is true, and only up
1407 to what the input radix would permit. FSF was content
1408 to rely on parse_number to validate; but it leaks. */
1409 else if (*p >= 'a' && *p <= 'z')
1411 if (!hex || *p >= ('a' + local_radix - 10))
1414 else if (*p >= 'A' && *p <= 'Z')
1416 if (!hex || *p >= ('A' + local_radix - 10))
1421 if (toktype != ERROR)
1422 toktype = parse_number (tokstart, p - tokstart,
1423 got_dot | got_e, &yylval);
1424 if (toktype == ERROR)
1426 char *err_copy = (char *) alloca (p - tokstart + 1);
1428 memcpy (err_copy, tokstart, p - tokstart);
1429 err_copy[p - tokstart] = 0;
1430 error ("Invalid number \"%s\".", err_copy);
1447 case '@': /* Moved out below. */
1463 if (strncmp(tokstart, "@selector", 9) == 0)
1465 tokptr = strchr(tokstart, '(');
1468 error ("Missing '(' in @selector(...)");
1471 tokptr++; /* Skip the '('. */
1473 /* Grow the static temp buffer if necessary, including
1474 allocating the first one on demand. */
1475 if (tempbufindex + 1 >= tempbufsize)
1477 tempbuf = (char *) realloc (tempbuf, tempbufsize += 64);
1479 tempbuf[tempbufindex++] = *tokptr++;
1480 } while ((*tokptr != ')') && (*tokptr != '\0'));
1481 if (*tokptr++ != ')')
1483 error ("Missing ')' in @selector(...)");
1485 tempbuf[tempbufindex] = '\0';
1486 yylval.sval.ptr = tempbuf;
1487 yylval.sval.length = tempbufindex;
1491 if (tokstart[1] != '"')
1496 /* ObjC NextStep NSString constant: fall thru and parse like
1502 /* Build the gdb internal form of the input string in tempbuf,
1503 translating any standard C escape forms seen. Note that the
1504 buffer is null byte terminated *only* for the convenience of
1505 debugging gdb itself and printing the buffer contents when
1506 the buffer contains no embedded nulls. Gdb does not depend
1507 upon the buffer being null byte terminated, it uses the
1508 length string instead. This allows gdb to handle C strings
1509 (as well as strings in other languages) with embedded null
1512 tokptr = ++tokstart;
1516 /* Grow the static temp buffer if necessary, including
1517 allocating the first one on demand. */
1518 if (tempbufindex + 1 >= tempbufsize)
1520 tempbuf = (char *) realloc (tempbuf, tempbufsize += 64);
1526 /* Do nothing, loop will terminate. */
1530 c = parse_escape (&tokptr);
1535 tempbuf[tempbufindex++] = c;
1538 tempbuf[tempbufindex++] = *tokptr++;
1541 } while ((*tokptr != '"') && (*tokptr != '\0'));
1542 if (*tokptr++ != '"')
1544 error ("Unterminated string in expression.");
1546 tempbuf[tempbufindex] = '\0'; /* See note above. */
1547 yylval.sval.ptr = tempbuf;
1548 yylval.sval.length = tempbufindex;
1550 return (tokchr == '@' ? NSSTRING : STRING);
1553 if (!(tokchr == '_' || tokchr == '$' ||
1554 (tokchr >= 'a' && tokchr <= 'z') || (tokchr >= 'A' && tokchr <= 'Z')))
1555 /* We must have come across a bad character (e.g. ';'). */
1556 error ("Invalid character '%c' in expression.", c);
1558 /* It's a name. See how long it is. */
1560 for (c = tokstart[namelen];
1561 (c == '_' || c == '$' || (c >= '0' && c <= '9')
1562 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '<');)
1567 while (tokstart[++i] && tokstart[i] != '>');
1568 if (tokstart[i] == '>')
1571 c = tokstart[++namelen];
1574 /* The token "if" terminates the expression and is NOT
1575 removed from the input stream. */
1576 if (namelen == 2 && tokstart[0] == 'i' && tokstart[1] == 'f')
1585 /* Catch specific keywords. Should be done with a data structure. */
1589 if (STREQN (tokstart, "unsigned", 8))
1591 if (current_language->la_language == language_cplus
1592 && STREQN (tokstart, "template", 8))
1594 if (STREQN (tokstart, "volatile", 8))
1595 return VOLATILE_KEYWORD;
1598 if (STREQN (tokstart, "struct", 6))
1600 if (STREQN (tokstart, "signed", 6))
1601 return SIGNED_KEYWORD;
1602 if (STREQN (tokstart, "sizeof", 6))
1604 if (STREQN (tokstart, "double", 6))
1605 return DOUBLE_KEYWORD;
1608 if ((current_language->la_language == language_cplus)
1609 && STREQN (tokstart, "class", 5))
1611 if (STREQN (tokstart, "union", 5))
1613 if (STREQN (tokstart, "short", 5))
1615 if (STREQN (tokstart, "const", 5))
1616 return CONST_KEYWORD;
1619 if (STREQN (tokstart, "enum", 4))
1621 if (STREQN (tokstart, "long", 4))
1625 if (STREQN (tokstart, "int", 3))
1632 yylval.sval.ptr = tokstart;
1633 yylval.sval.length = namelen;
1635 if (*tokstart == '$')
1637 write_dollar_variable (yylval.sval);
1641 /* Use token-type BLOCKNAME for symbols that happen to be defined as
1642 functions or symtabs. If this is not so, then ...
1643 Use token-type TYPENAME for symbols that happen to be defined
1644 currently as names of types; NAME for other symbols.
1645 The caller is not constrained to care about the distinction. */
1647 char *tmp = copy_name (yylval.sval);
1649 int is_a_field_of_this = 0, *need_this;
1652 if (current_language->la_language == language_cplus ||
1653 current_language->la_language == language_objc)
1654 need_this = &is_a_field_of_this;
1656 need_this = (int *) NULL;
1658 sym = lookup_symbol (tmp, expression_context_block,
1661 (struct symtab **) NULL);
1662 /* Call lookup_symtab, not lookup_partial_symtab, in case there
1663 are no psymtabs (coff, xcoff, or some future change to blow
1664 away the psymtabs once symbols are read). */
1665 if ((sym && SYMBOL_CLASS (sym) == LOC_BLOCK) ||
1666 lookup_symtab (tmp))
1668 yylval.ssym.sym = sym;
1669 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1672 if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
1675 /* Despite the following flaw, we need to keep this code
1676 enabled. Because we can get called from
1677 check_stub_method, if we don't handle nested types then
1678 it screws many operations in any program which uses
1680 /* In "A::x", if x is a member function of A and there
1681 happens to be a type (nested or not, since the stabs
1682 don't make that distinction) named x, then this code
1683 incorrectly thinks we are dealing with nested types
1684 rather than a member function. */
1688 struct symbol *best_sym;
1690 /* Look ahead to detect nested types. This probably should
1691 be done in the grammar, but trying seemed to introduce a
1692 lot of shift/reduce and reduce/reduce conflicts. It's
1693 possible that it could be done, though. Or perhaps a
1694 non-grammar, but less ad hoc, approach would work well. */
1696 /* Since we do not currently have any way of distinguishing
1697 a nested type from a non-nested one (the stabs don't tell
1698 us whether a type is nested), we just ignore the
1705 /* Skip whitespace. */
1706 while (*p == ' ' || *p == '\t' || *p == '\n')
1708 if (*p == ':' && p[1] == ':')
1710 /* Skip the `::'. */
1712 /* Skip whitespace. */
1713 while (*p == ' ' || *p == '\t' || *p == '\n')
1716 while (*p == '_' || *p == '$' || (*p >= '0' && *p <= '9')
1717 || (*p >= 'a' && *p <= 'z')
1718 || (*p >= 'A' && *p <= 'Z'))
1722 struct symbol *cur_sym;
1723 /* As big as the whole rest of the expression,
1724 which is at least big enough. */
1725 char *ncopy = alloca (strlen (tmp) +
1726 strlen (namestart) + 3);
1730 memcpy (tmp1, tmp, strlen (tmp));
1731 tmp1 += strlen (tmp);
1732 memcpy (tmp1, "::", 2);
1734 memcpy (tmp1, namestart, p - namestart);
1735 tmp1[p - namestart] = '\0';
1736 cur_sym = lookup_symbol (ncopy,
1737 expression_context_block,
1738 VAR_NAMESPACE, (int *) NULL,
1739 (struct symtab **) NULL);
1742 if (SYMBOL_CLASS (cur_sym) == LOC_TYPEDEF)
1760 yylval.tsym.type = SYMBOL_TYPE (best_sym);
1762 yylval.tsym.type = SYMBOL_TYPE (sym);
1766 if ((yylval.tsym.type = lookup_primitive_typename (tmp)) != 0)
1769 /* See if it's an ObjC classname. */
1772 CORE_ADDR Class = lookup_objc_class(tmp);
1775 extern struct symbol *lookup_struct_typedef();
1776 yylval.class.class = Class;
1777 if ((sym = lookup_struct_typedef (tmp,
1778 expression_context_block,
1780 yylval.class.type = SYMBOL_TYPE (sym);
1785 /* Input names that aren't symbols but ARE valid hex numbers,
1786 when the input radix permits them, can be names or numbers
1787 depending on the parse. Note we support radixes > 16 here. */
1789 ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10) ||
1790 (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10)))
1792 YYSTYPE newlval; /* Its value is ignored. */
1793 hextype = parse_number (tokstart, namelen, 0, &newlval);
1796 yylval.ssym.sym = sym;
1797 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1802 /* Any other kind of symbol. */
1803 yylval.ssym.sym = sym;
1804 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1813 if (*lexptr == '\0')
1814 error("A %s near end of expression.", (msg ? msg : "error"));
1816 error ("A %s in expression, near `%s'.", (msg ? msg : "error"),