1 /* YACC parser for C expressions, for GDB.
3 Copyright (C) 1986, 1989, 1990, 1991, 1993, 1994, 2002, 2006, 2007, 2008,
4 2009, 2010, 2011 Free Software Foundation, Inc.
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.
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, see <http://www.gnu.org/licenses/>. */
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.
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. */
38 #include "gdb_string.h"
40 #include "expression.h"
42 #include "objc-lang.h" /* For objc language constructs. */
45 #include "parser-defs.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. */
52 #include "completer.h" /* For skip_quoted(). */
55 #define parse_type builtin_type (parse_gdbarch)
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. */
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
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
85 #define yy_yys objc_yys
86 #define yystate objc_state
87 #define yytmp objc_tmp
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
107 #define YYDEBUG 0 /* Default to no yydebug support. */
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. */
140 struct symtoken ssym;
143 enum exp_opcode opcode;
144 struct internalvar *ivar;
145 struct objc_class_str class;
152 /* YYSTYPE gets defined by %union. */
154 parse_number (char *, int, int, YYSTYPE *);
157 %type <voidval> exp exp1 type_exp start variable qualified_name lcurly
159 %type <tval> type typebase
160 %type <tvec> nonempty_typelist
161 /* %type <bval> block */
163 /* Fancy type parsing. */
164 %type <voidval> func_mod direct_abs_decl abs_decl
166 %type <lval> array_mod
168 %token <typed_val_int> INT
169 %token <typed_val_float> FLOAT
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. */
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 */
185 %type <ssym> name_not_typename
186 %type <tsym> typename
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. */
193 %token <ssym> NAME_OR_INT
195 %token STRUCT CLASS UNION ENUM SIZEOF UNSIGNED COLONCOLON
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
203 %token <voidval> VARIABLE
205 %token <opcode> ASSIGN_MODIFY
209 %right '=' ASSIGN_MODIFY
217 %left '<' '>' LEQ GEQ
222 %right UNARY INCREMENT DECREMENT
223 %right ARROW '.' '[' '('
224 %token <ssym> BLOCKNAME
236 { write_exp_elt_opcode(OP_TYPE);
237 write_exp_elt_type($1);
238 write_exp_elt_opcode(OP_TYPE);}
241 /* Expressions, including the comma operator. */
244 { write_exp_elt_opcode (BINOP_COMMA); }
247 /* Expressions, not including the comma operator. */
248 exp : '*' exp %prec UNARY
249 { write_exp_elt_opcode (UNOP_IND); }
252 exp : '&' exp %prec UNARY
253 { write_exp_elt_opcode (UNOP_ADDR); }
256 exp : '-' exp %prec UNARY
257 { write_exp_elt_opcode (UNOP_NEG); }
260 exp : '!' exp %prec UNARY
261 { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
264 exp : '~' exp %prec UNARY
265 { write_exp_elt_opcode (UNOP_COMPLEMENT); }
268 exp : INCREMENT exp %prec UNARY
269 { write_exp_elt_opcode (UNOP_PREINCREMENT); }
272 exp : DECREMENT exp %prec UNARY
273 { write_exp_elt_opcode (UNOP_PREDECREMENT); }
276 exp : exp INCREMENT %prec UNARY
277 { write_exp_elt_opcode (UNOP_POSTINCREMENT); }
280 exp : exp DECREMENT %prec UNARY
281 { write_exp_elt_opcode (UNOP_POSTDECREMENT); }
284 exp : SIZEOF exp %prec UNARY
285 { write_exp_elt_opcode (UNOP_SIZEOF); }
289 { write_exp_elt_opcode (STRUCTOP_PTR);
290 write_exp_string ($3);
291 write_exp_elt_opcode (STRUCTOP_PTR); }
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); }
301 exp : exp ARROW '*' exp
302 { write_exp_elt_opcode (STRUCTOP_MPTR); }
306 { write_exp_elt_opcode (STRUCTOP_STRUCT);
307 write_exp_string ($3);
308 write_exp_elt_opcode (STRUCTOP_STRUCT); }
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); }
320 exp : exp '.' '*' exp
321 { write_exp_elt_opcode (STRUCTOP_MEMBER); }
324 exp : exp '[' exp1 ']'
325 { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
328 * The rules below parse ObjC message calls of the form:
329 * '[' target selector {':' argument}* ']'
336 class = lookup_objc_class (parse_gdbarch,
337 copy_name ($2.stoken));
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);
348 { write_exp_elt_opcode (OP_OBJC_MSGCALL);
350 write_exp_elt_opcode (OP_OBJC_MSGCALL);
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);
363 { write_exp_elt_opcode (OP_OBJC_MSGCALL);
365 write_exp_elt_opcode (OP_OBJC_MSGCALL);
372 { write_exp_elt_opcode (OP_OBJC_MSGCALL);
374 write_exp_elt_opcode (OP_OBJC_MSGCALL);
379 { add_msglist(&$1, 0); }
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); }
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); }
406 { start_arglist (); }
416 arglist : arglist ',' exp %prec ABOVE_COMMA
421 { $$ = end_arglist () - 1; }
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); }
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); }
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); }
446 /* Binary operators in order of decreasing precedence. */
449 { write_exp_elt_opcode (BINOP_REPEAT); }
453 { write_exp_elt_opcode (BINOP_MUL); }
457 { write_exp_elt_opcode (BINOP_DIV); }
461 { write_exp_elt_opcode (BINOP_REM); }
465 { write_exp_elt_opcode (BINOP_ADD); }
469 { write_exp_elt_opcode (BINOP_SUB); }
473 { write_exp_elt_opcode (BINOP_LSH); }
477 { write_exp_elt_opcode (BINOP_RSH); }
481 { write_exp_elt_opcode (BINOP_EQUAL); }
484 exp : exp NOTEQUAL exp
485 { write_exp_elt_opcode (BINOP_NOTEQUAL); }
489 { write_exp_elt_opcode (BINOP_LEQ); }
493 { write_exp_elt_opcode (BINOP_GEQ); }
497 { write_exp_elt_opcode (BINOP_LESS); }
501 { write_exp_elt_opcode (BINOP_GTR); }
505 { write_exp_elt_opcode (BINOP_BITWISE_AND); }
509 { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
513 { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
517 { write_exp_elt_opcode (BINOP_LOGICAL_AND); }
521 { write_exp_elt_opcode (BINOP_LOGICAL_OR); }
524 exp : exp '?' exp ':' exp %prec '?'
525 { write_exp_elt_opcode (TERNOP_COND); }
529 { write_exp_elt_opcode (BINOP_ASSIGN); }
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); }
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); }
547 parse_number ($1.stoken.ptr,
548 $1.stoken.length, 0, &val);
549 write_exp_elt_opcode (OP_LONG);
550 write_exp_elt_type (val.typed_val_int.type);
551 write_exp_elt_longcst ((LONGEST)
552 val.typed_val_int.val);
553 write_exp_elt_opcode (OP_LONG);
559 { write_exp_elt_opcode (OP_DOUBLE);
560 write_exp_elt_type ($1.type);
561 write_exp_elt_dblcst ($1.dval);
562 write_exp_elt_opcode (OP_DOUBLE); }
569 /* Already written by write_dollar_variable. */
574 write_exp_elt_opcode (OP_OBJC_SELECTOR);
575 write_exp_string ($1);
576 write_exp_elt_opcode (OP_OBJC_SELECTOR); }
579 exp : SIZEOF '(' type ')' %prec UNARY
580 { write_exp_elt_opcode (OP_LONG);
581 write_exp_elt_type (parse_type->builtin_int);
583 write_exp_elt_longcst ((LONGEST) TYPE_LENGTH ($3));
584 write_exp_elt_opcode (OP_LONG); }
588 { /* C strings are converted into array
589 constants with an explicit null byte
590 added at the end. Thus the array upper
591 bound is the string length. There is no
592 such thing in C as a completely empty
594 char *sp = $1.ptr; int count = $1.length;
597 write_exp_elt_opcode (OP_LONG);
598 write_exp_elt_type (parse_type->builtin_char);
599 write_exp_elt_longcst ((LONGEST)(*sp++));
600 write_exp_elt_opcode (OP_LONG);
602 write_exp_elt_opcode (OP_LONG);
603 write_exp_elt_type (parse_type->builtin_char);
604 write_exp_elt_longcst ((LONGEST)'\0');
605 write_exp_elt_opcode (OP_LONG);
606 write_exp_elt_opcode (OP_ARRAY);
607 write_exp_elt_longcst ((LONGEST) 0);
608 write_exp_elt_longcst ((LONGEST) ($1.length));
609 write_exp_elt_opcode (OP_ARRAY); }
612 exp : NSSTRING /* ObjC NextStep NSString constant
613 * of the form '@' '"' string '"'.
615 { write_exp_elt_opcode (OP_OBJC_NSSTRING);
616 write_exp_string ($1);
617 write_exp_elt_opcode (OP_OBJC_NSSTRING); }
623 $$ = SYMBOL_BLOCK_VALUE ($1.sym);
627 lookup_symtab (copy_name ($1.stoken));
629 $$ = BLOCKVECTOR_BLOCK (BLOCKVECTOR (tem),
632 error ("No file or function \"%s\".",
633 copy_name ($1.stoken));
638 block : block COLONCOLON name
640 = lookup_symbol (copy_name ($3), $1,
641 VAR_DOMAIN, (int *) NULL);
642 if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
643 error ("No function \"%s\" in specified context.",
645 $$ = SYMBOL_BLOCK_VALUE (tem); }
648 variable: block COLONCOLON name
649 { struct symbol *sym;
650 sym = lookup_symbol (copy_name ($3), $1,
651 VAR_DOMAIN, (int *) NULL);
653 error ("No symbol \"%s\" in specified context.",
656 write_exp_elt_opcode (OP_VAR_VALUE);
657 /* block_found is set by lookup_symbol. */
658 write_exp_elt_block (block_found);
659 write_exp_elt_sym (sym);
660 write_exp_elt_opcode (OP_VAR_VALUE); }
663 qualified_name: typebase COLONCOLON name
665 struct type *type = $1;
666 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
667 && TYPE_CODE (type) != TYPE_CODE_UNION)
668 error ("`%s' is not defined as an aggregate type.",
671 write_exp_elt_opcode (OP_SCOPE);
672 write_exp_elt_type (type);
673 write_exp_string ($3);
674 write_exp_elt_opcode (OP_SCOPE);
676 | typebase COLONCOLON '~' name
678 struct type *type = $1;
679 struct stoken tmp_token;
680 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
681 && TYPE_CODE (type) != TYPE_CODE_UNION)
682 error ("`%s' is not defined as an aggregate type.",
685 if (strcmp (type_name_no_tag (type), $4.ptr) != 0)
686 error ("invalid destructor `%s::~%s'",
687 type_name_no_tag (type), $4.ptr);
689 tmp_token.ptr = (char*) alloca ($4.length + 2);
690 tmp_token.length = $4.length + 1;
691 tmp_token.ptr[0] = '~';
692 memcpy (tmp_token.ptr+1, $4.ptr, $4.length);
693 tmp_token.ptr[tmp_token.length] = 0;
694 write_exp_elt_opcode (OP_SCOPE);
695 write_exp_elt_type (type);
696 write_exp_string (tmp_token);
697 write_exp_elt_opcode (OP_SCOPE);
701 variable: qualified_name
704 char *name = copy_name ($2);
706 struct minimal_symbol *msymbol;
709 lookup_symbol (name, (const struct block *) NULL,
710 VAR_DOMAIN, (int *) NULL);
713 write_exp_elt_opcode (OP_VAR_VALUE);
714 write_exp_elt_block (NULL);
715 write_exp_elt_sym (sym);
716 write_exp_elt_opcode (OP_VAR_VALUE);
720 msymbol = lookup_minimal_symbol (name, NULL, NULL);
722 write_exp_msymbol (msymbol);
723 else if (!have_full_symbols ()
724 && !have_partial_symbols ())
725 error ("No symbol table is loaded. "
726 "Use the \"file\" command.");
728 error ("No symbol \"%s\" in current context.",
733 variable: name_not_typename
734 { struct symbol *sym = $1.sym;
738 if (symbol_read_needs_frame (sym))
740 if (innermost_block == 0 ||
741 contained_in (block_found,
743 innermost_block = block_found;
746 write_exp_elt_opcode (OP_VAR_VALUE);
747 /* We want to use the selected frame, not
748 another more inner frame which happens to
749 be in the same block. */
750 write_exp_elt_block (NULL);
751 write_exp_elt_sym (sym);
752 write_exp_elt_opcode (OP_VAR_VALUE);
754 else if ($1.is_a_field_of_this)
756 /* C++/ObjC: it hangs off of `this'/'self'.
757 Must not inadvertently convert from a
758 method call to data ref. */
759 if (innermost_block == 0 ||
760 contained_in (block_found, innermost_block))
761 innermost_block = block_found;
762 write_exp_elt_opcode (OP_OBJC_SELF);
763 write_exp_elt_opcode (OP_OBJC_SELF);
764 write_exp_elt_opcode (STRUCTOP_PTR);
765 write_exp_string ($1.stoken);
766 write_exp_elt_opcode (STRUCTOP_PTR);
770 struct minimal_symbol *msymbol;
771 char *arg = copy_name ($1.stoken);
774 lookup_minimal_symbol (arg, NULL, NULL);
776 write_exp_msymbol (msymbol);
777 else if (!have_full_symbols () &&
778 !have_partial_symbols ())
779 error ("No symbol table is loaded. "
780 "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 ($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! */
859 typebase /* Implements (approximately): (type-qualifier)* type-specifier. */
865 error ("No symbol \"%s\" in current context.",
866 copy_name($1.stoken));
871 { $$ = parse_type->builtin_int; }
873 { $$ = parse_type->builtin_long; }
875 { $$ = parse_type->builtin_short; }
877 { $$ = parse_type->builtin_long; }
878 | UNSIGNED LONG INT_KEYWORD
879 { $$ = parse_type->builtin_unsigned_long; }
881 { $$ = parse_type->builtin_long_long; }
882 | LONG LONG INT_KEYWORD
883 { $$ = parse_type->builtin_long_long; }
885 { $$ = parse_type->builtin_unsigned_long_long; }
886 | UNSIGNED LONG LONG INT_KEYWORD
887 { $$ = parse_type->builtin_unsigned_long_long; }
889 { $$ = parse_type->builtin_short; }
890 | UNSIGNED SHORT INT_KEYWORD
891 { $$ = parse_type->builtin_unsigned_short; }
893 { $$ = parse_type->builtin_double; }
894 | LONG DOUBLE_KEYWORD
895 { $$ = parse_type->builtin_long_double; }
897 { $$ = lookup_struct (copy_name ($2),
898 expression_context_block); }
900 { $$ = lookup_struct (copy_name ($2),
901 expression_context_block); }
903 { $$ = lookup_union (copy_name ($2),
904 expression_context_block); }
906 { $$ = lookup_enum (copy_name ($2),
907 expression_context_block); }
909 { $$ = lookup_unsigned_typename (parse_language,
911 TYPE_NAME($2.type)); }
913 { $$ = parse_type->builtin_unsigned_int; }
914 | SIGNED_KEYWORD typename
915 { $$ = lookup_signed_typename (parse_language,
917 TYPE_NAME($2.type)); }
919 { $$ = parse_type->builtin_int; }
920 | TEMPLATE name '<' type '>'
921 { $$ = lookup_template_type(copy_name($2), $4,
922 expression_context_block);
924 /* "const" and "volatile" are curently ignored. A type
925 qualifier after the type is handled in the ptype rule. I
926 think these could be too. */
927 | CONST_KEYWORD typebase { $$ = $2; }
928 | VOLATILE_KEYWORD typebase { $$ = $2; }
934 $$.stoken.ptr = "int";
935 $$.stoken.length = 3;
936 $$.type = parse_type->builtin_int;
940 $$.stoken.ptr = "long";
941 $$.stoken.length = 4;
942 $$.type = parse_type->builtin_long;
946 $$.stoken.ptr = "short";
947 $$.stoken.length = 5;
948 $$.type = parse_type->builtin_short;
954 { $$ = (struct type **) malloc (sizeof (struct type *) * 2);
955 $<ivec>$[0] = 1; /* Number of types in vector. */
958 | nonempty_typelist ',' type
959 { int len = sizeof (struct type *) * (++($<ivec>1[0]) + 1);
960 $$ = (struct type **) realloc ((char *) $1, len);
961 $$[$<ivec>$[0]] = $3;
965 name : NAME { $$ = $1.stoken; }
966 | BLOCKNAME { $$ = $1.stoken; }
967 | TYPENAME { $$ = $1.stoken; }
968 | CLASSNAME { $$ = $1.stoken; }
969 | NAME_OR_INT { $$ = $1.stoken; }
972 name_not_typename : NAME
974 /* These would be useful if name_not_typename was useful, but it is
975 just a fake for "variable", so these cause reduce/reduce conflicts
976 because the parser can't tell whether NAME_OR_INT is a
977 name_not_typename (=variable, =exp) or just an exp. If
978 name_not_typename was ever used in an lvalue context where only a
979 name could occur, this might be useful. */
985 /* Take care of parsing a number (anything that starts with a digit).
986 Set yylval and return the token type; update lexptr. LEN is the
987 number of characters in it. */
989 /*** Needs some error checking for the float case. ***/
992 parse_number (p, len, parsed_float, putithere)
998 /* FIXME: Shouldn't these be unsigned? We don't deal with negative
999 values here, and we do kind of silly things like cast to
1003 unsigned LONGEST un;
1007 int base = input_radix;
1010 /* Number of "L" suffixes encountered. */
1013 /* We have found a "L" or "U" suffix. */
1014 int found_suffix = 0;
1016 unsigned LONGEST high_bit;
1017 struct type *signed_type;
1018 struct type *unsigned_type;
1022 if (! parse_c_float (parse_gdbarch, p, len,
1023 &putithere->typed_val_float.dval,
1024 &putithere->typed_val_float.type))
1029 /* Handle base-switching prefixes 0x, 0t, 0d, and 0. */
1063 if (c >= 'A' && c <= 'Z')
1065 if (c != 'l' && c != 'u')
1067 if (c >= '0' && c <= '9')
1075 if (base > 10 && c >= 'a' && c <= 'f')
1079 n += i = c - 'a' + 10;
1092 return ERROR; /* Char not a digit. */
1095 return ERROR; /* Invalid digit in this base. */
1097 /* Portably test for overflow (only works for nonzero values, so
1098 make a second check for zero). FIXME: Can't we just make n
1099 and prevn unsigned and avoid this? */
1100 if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
1101 unsigned_p = 1; /* Try something unsigned. */
1103 /* Portably test for unsigned overflow.
1104 FIXME: This check is wrong; for example it doesn't find
1105 overflow on 0x123456789 when LONGEST is 32 bits. */
1106 if (c != 'l' && c != 'u' && n != 0)
1108 if ((unsigned_p && (unsigned LONGEST) prevn >= (unsigned LONGEST) n))
1109 error ("Numeric constant too large.");
1114 /* An integer constant is an int, a long, or a long long. An L
1115 suffix forces it to be long; an LL suffix forces it to be long
1116 long. If not forced to a larger size, it gets the first type of
1117 the above that it fits in. To figure out whether it fits, we
1118 shift it right and see whether anything remains. Note that we
1119 can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
1120 operation, because many compilers will warn about such a shift
1121 (which always produces a zero result). Sometimes gdbarch_int_bit
1122 or gdbarch_long_int will be that big, sometimes not. To deal with
1123 the case where it is we just always shift the value more than
1124 once, with fewer bits each time. */
1126 un = (unsigned LONGEST)n >> 2;
1128 && (un >> (gdbarch_int_bit (parse_gdbarch) - 2)) == 0)
1131 = ((unsigned LONGEST)1) << (gdbarch_int_bit (parse_gdbarch) - 1);
1133 /* A large decimal (not hex or octal) constant (between INT_MAX
1134 and UINT_MAX) is a long or unsigned long, according to ANSI,
1135 never an unsigned int, but this code treats it as unsigned
1136 int. This probably should be fixed. GCC gives a warning on
1139 unsigned_type = parse_type->builtin_unsigned_int;
1140 signed_type = parse_type->builtin_int;
1142 else if (long_p <= 1
1143 && (un >> (gdbarch_long_bit (parse_gdbarch) - 2)) == 0)
1146 = ((unsigned LONGEST)1) << (gdbarch_long_bit (parse_gdbarch) - 1);
1147 unsigned_type = parse_type->builtin_unsigned_long;
1148 signed_type = parse_type->builtin_long;
1152 high_bit = (((unsigned LONGEST)1)
1153 << (gdbarch_long_long_bit (parse_gdbarch) - 32 - 1)
1157 /* A long long does not fit in a LONGEST. */
1159 (unsigned LONGEST)1 << (sizeof (LONGEST) * HOST_CHAR_BIT - 1);
1160 unsigned_type = parse_type->builtin_unsigned_long_long;
1161 signed_type = parse_type->builtin_long_long;
1164 putithere->typed_val_int.val = n;
1166 /* If the high bit of the worked out type is set then this number
1167 has to be unsigned. */
1169 if (unsigned_p || (n & high_bit))
1171 putithere->typed_val_int.type = unsigned_type;
1175 putithere->typed_val_int.type = signed_type;
1185 enum exp_opcode opcode;
1188 static const struct token tokentab3[] =
1190 {">>=", ASSIGN_MODIFY, BINOP_RSH},
1191 {"<<=", ASSIGN_MODIFY, BINOP_LSH}
1194 static const struct token tokentab2[] =
1196 {"+=", ASSIGN_MODIFY, BINOP_ADD},
1197 {"-=", ASSIGN_MODIFY, BINOP_SUB},
1198 {"*=", ASSIGN_MODIFY, BINOP_MUL},
1199 {"/=", ASSIGN_MODIFY, BINOP_DIV},
1200 {"%=", ASSIGN_MODIFY, BINOP_REM},
1201 {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR},
1202 {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND},
1203 {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR},
1204 {"++", INCREMENT, BINOP_END},
1205 {"--", DECREMENT, BINOP_END},
1206 {"->", ARROW, BINOP_END},
1207 {"&&", ANDAND, BINOP_END},
1208 {"||", OROR, BINOP_END},
1209 {"::", COLONCOLON, BINOP_END},
1210 {"<<", LSH, BINOP_END},
1211 {">>", RSH, BINOP_END},
1212 {"==", EQUAL, BINOP_END},
1213 {"!=", NOTEQUAL, BINOP_END},
1214 {"<=", LEQ, BINOP_END},
1215 {">=", GEQ, BINOP_END}
1218 /* Read one token, getting characters through lexptr. */
1229 static char *tempbuf;
1230 static int tempbufsize;
1235 /* See if it is a special token of length 3. */
1236 for (i = 0; i < sizeof tokentab3 / sizeof tokentab3[0]; i++)
1237 if (strncmp (tokstart, tokentab3[i].operator, 3) == 0)
1240 yylval.opcode = tokentab3[i].opcode;
1241 return tokentab3[i].token;
1244 /* See if it is a special token of length 2. */
1245 for (i = 0; i < sizeof tokentab2 / sizeof tokentab2[0]; i++)
1246 if (strncmp (tokstart, tokentab2[i].operator, 2) == 0)
1249 yylval.opcode = tokentab2[i].opcode;
1250 return tokentab2[i].token;
1254 switch (tokchr = *tokstart)
1266 /* We either have a character constant ('0' or '\177' for
1267 example) or we have a quoted symbol reference ('foo(int,int)'
1268 in C++ for example). */
1272 c = parse_escape (parse_gdbarch, &lexptr);
1274 error ("Empty character constant.");
1276 yylval.typed_val_int.val = c;
1277 yylval.typed_val_int.type = parse_type->builtin_char;
1282 namelen = skip_quoted (tokstart) - tokstart;
1285 lexptr = tokstart + namelen;
1286 if (lexptr[-1] != '\'')
1287 error ("Unmatched single quote.");
1292 error ("Invalid character constant.");
1302 if (paren_depth == 0)
1309 if (comma_terminates && paren_depth == 0)
1315 /* Might be a floating point number. */
1316 if (lexptr[1] < '0' || lexptr[1] > '9')
1317 goto symbol; /* Nope, must be a symbol. */
1318 /* FALL THRU into number case. */
1331 /* It's a number. */
1332 int got_dot = 0, got_e = 0, toktype = FLOAT;
1333 /* Initialize toktype to anything other than ERROR. */
1335 int hex = input_radix > 10;
1336 int local_radix = input_radix;
1337 if (tokchr == '0' && (p[1] == 'x' || p[1] == 'X'))
1343 else if (tokchr == '0' && (p[1]=='t' || p[1]=='T'
1344 || p[1]=='d' || p[1]=='D'))
1353 /* This test includes !hex because 'e' is a valid hex digit
1354 and thus does not indicate a floating point number when
1355 the radix is hex. */
1357 if (!hex && (*p == 'e' || *p == 'E'))
1359 toktype = ERROR; /* Only one 'e' in a float. */
1362 /* This test does not include !hex, because a '.' always
1363 indicates a decimal floating point number regardless of
1367 toktype = ERROR; /* Only one '.' in a float. */
1370 else if (got_e && (p[-1] == 'e' || p[-1] == 'E') &&
1371 (*p == '-' || *p == '+'))
1372 /* This is the sign of the exponent, not the end of the
1375 /* Always take decimal digits; parse_number handles radix
1377 else if (*p >= '0' && *p <= '9')
1379 /* We will take letters only if hex is true, and only up
1380 to what the input radix would permit. FSF was content
1381 to rely on parse_number to validate; but it leaks. */
1382 else if (*p >= 'a' && *p <= 'z')
1384 if (!hex || *p >= ('a' + local_radix - 10))
1387 else if (*p >= 'A' && *p <= 'Z')
1389 if (!hex || *p >= ('A' + local_radix - 10))
1394 if (toktype != ERROR)
1395 toktype = parse_number (tokstart, p - tokstart,
1396 got_dot | got_e, &yylval);
1397 if (toktype == ERROR)
1399 char *err_copy = (char *) alloca (p - tokstart + 1);
1401 memcpy (err_copy, tokstart, p - tokstart);
1402 err_copy[p - tokstart] = 0;
1403 error ("Invalid number \"%s\".", err_copy);
1420 case '@': /* Moved out below. */
1436 if (strncmp(tokstart, "@selector", 9) == 0)
1438 tokptr = strchr(tokstart, '(');
1441 error ("Missing '(' in @selector(...)");
1444 tokptr++; /* Skip the '('. */
1446 /* Grow the static temp buffer if necessary, including
1447 allocating the first one on demand. */
1448 if (tempbufindex + 1 >= tempbufsize)
1450 tempbuf = (char *) realloc (tempbuf, tempbufsize += 64);
1452 tempbuf[tempbufindex++] = *tokptr++;
1453 } while ((*tokptr != ')') && (*tokptr != '\0'));
1454 if (*tokptr++ != ')')
1456 error ("Missing ')' in @selector(...)");
1458 tempbuf[tempbufindex] = '\0';
1459 yylval.sval.ptr = tempbuf;
1460 yylval.sval.length = tempbufindex;
1464 if (tokstart[1] != '"')
1469 /* ObjC NextStep NSString constant: fall thru and parse like
1475 /* Build the gdb internal form of the input string in tempbuf,
1476 translating any standard C escape forms seen. Note that the
1477 buffer is null byte terminated *only* for the convenience of
1478 debugging gdb itself and printing the buffer contents when
1479 the buffer contains no embedded nulls. Gdb does not depend
1480 upon the buffer being null byte terminated, it uses the
1481 length string instead. This allows gdb to handle C strings
1482 (as well as strings in other languages) with embedded null
1485 tokptr = ++tokstart;
1489 /* Grow the static temp buffer if necessary, including
1490 allocating the first one on demand. */
1491 if (tempbufindex + 1 >= tempbufsize)
1493 tempbuf = (char *) realloc (tempbuf, tempbufsize += 64);
1499 /* Do nothing, loop will terminate. */
1503 c = parse_escape (parse_gdbarch, &tokptr);
1508 tempbuf[tempbufindex++] = c;
1511 tempbuf[tempbufindex++] = *tokptr++;
1514 } while ((*tokptr != '"') && (*tokptr != '\0'));
1515 if (*tokptr++ != '"')
1517 error ("Unterminated string in expression.");
1519 tempbuf[tempbufindex] = '\0'; /* See note above. */
1520 yylval.sval.ptr = tempbuf;
1521 yylval.sval.length = tempbufindex;
1523 return (tokchr == '@' ? NSSTRING : STRING);
1526 if (!(tokchr == '_' || tokchr == '$' ||
1527 (tokchr >= 'a' && tokchr <= 'z') || (tokchr >= 'A' && tokchr <= 'Z')))
1528 /* We must have come across a bad character (e.g. ';'). */
1529 error ("Invalid character '%c' in expression.", c);
1531 /* It's a name. See how long it is. */
1533 for (c = tokstart[namelen];
1534 (c == '_' || c == '$' || (c >= '0' && c <= '9')
1535 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '<');)
1540 while (tokstart[++i] && tokstart[i] != '>');
1541 if (tokstart[i] == '>')
1544 c = tokstart[++namelen];
1547 /* The token "if" terminates the expression and is NOT
1548 removed from the input stream. */
1549 if (namelen == 2 && tokstart[0] == 'i' && tokstart[1] == 'f')
1558 /* Catch specific keywords. Should be done with a data structure. */
1562 if (strncmp (tokstart, "unsigned", 8) == 0)
1564 if (parse_language->la_language == language_cplus
1565 && strncmp (tokstart, "template", 8) == 0)
1567 if (strncmp (tokstart, "volatile", 8) == 0)
1568 return VOLATILE_KEYWORD;
1571 if (strncmp (tokstart, "struct", 6) == 0)
1573 if (strncmp (tokstart, "signed", 6) == 0)
1574 return SIGNED_KEYWORD;
1575 if (strncmp (tokstart, "sizeof", 6) == 0)
1577 if (strncmp (tokstart, "double", 6) == 0)
1578 return DOUBLE_KEYWORD;
1581 if ((parse_language->la_language == language_cplus)
1582 && strncmp (tokstart, "class", 5) == 0)
1584 if (strncmp (tokstart, "union", 5) == 0)
1586 if (strncmp (tokstart, "short", 5) == 0)
1588 if (strncmp (tokstart, "const", 5) == 0)
1589 return CONST_KEYWORD;
1592 if (strncmp (tokstart, "enum", 4) == 0)
1594 if (strncmp (tokstart, "long", 4) == 0)
1598 if (strncmp (tokstart, "int", 3) == 0)
1605 yylval.sval.ptr = tokstart;
1606 yylval.sval.length = namelen;
1608 if (*tokstart == '$')
1610 write_dollar_variable (yylval.sval);
1614 /* Use token-type BLOCKNAME for symbols that happen to be defined as
1615 functions or symtabs. If this is not so, then ...
1616 Use token-type TYPENAME for symbols that happen to be defined
1617 currently as names of types; NAME for other symbols.
1618 The caller is not constrained to care about the distinction. */
1620 char *tmp = copy_name (yylval.sval);
1622 int is_a_field_of_this = 0, *need_this;
1625 if (parse_language->la_language == language_cplus ||
1626 parse_language->la_language == language_objc)
1627 need_this = &is_a_field_of_this;
1629 need_this = (int *) NULL;
1631 sym = lookup_symbol (tmp, expression_context_block,
1634 /* Call lookup_symtab, not lookup_partial_symtab, in case there
1635 are no psymtabs (coff, xcoff, or some future change to blow
1636 away the psymtabs once symbols are read). */
1637 if ((sym && SYMBOL_CLASS (sym) == LOC_BLOCK) ||
1638 lookup_symtab (tmp))
1640 yylval.ssym.sym = sym;
1641 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1644 if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
1647 /* Despite the following flaw, we need to keep this code
1648 enabled. Because we can get called from
1649 check_stub_method, if we don't handle nested types then
1650 it screws many operations in any program which uses
1652 /* In "A::x", if x is a member function of A and there
1653 happens to be a type (nested or not, since the stabs
1654 don't make that distinction) named x, then this code
1655 incorrectly thinks we are dealing with nested types
1656 rather than a member function. */
1660 struct symbol *best_sym;
1662 /* Look ahead to detect nested types. This probably should
1663 be done in the grammar, but trying seemed to introduce a
1664 lot of shift/reduce and reduce/reduce conflicts. It's
1665 possible that it could be done, though. Or perhaps a
1666 non-grammar, but less ad hoc, approach would work well. */
1668 /* Since we do not currently have any way of distinguishing
1669 a nested type from a non-nested one (the stabs don't tell
1670 us whether a type is nested), we just ignore the
1677 /* Skip whitespace. */
1678 while (*p == ' ' || *p == '\t' || *p == '\n')
1680 if (*p == ':' && p[1] == ':')
1682 /* Skip the `::'. */
1684 /* Skip whitespace. */
1685 while (*p == ' ' || *p == '\t' || *p == '\n')
1688 while (*p == '_' || *p == '$' || (*p >= '0' && *p <= '9')
1689 || (*p >= 'a' && *p <= 'z')
1690 || (*p >= 'A' && *p <= 'Z'))
1694 struct symbol *cur_sym;
1695 /* As big as the whole rest of the expression,
1696 which is at least big enough. */
1697 char *ncopy = alloca (strlen (tmp) +
1698 strlen (namestart) + 3);
1702 memcpy (tmp1, tmp, strlen (tmp));
1703 tmp1 += strlen (tmp);
1704 memcpy (tmp1, "::", 2);
1706 memcpy (tmp1, namestart, p - namestart);
1707 tmp1[p - namestart] = '\0';
1708 cur_sym = lookup_symbol (ncopy,
1709 expression_context_block,
1710 VAR_DOMAIN, (int *) NULL);
1713 if (SYMBOL_CLASS (cur_sym) == LOC_TYPEDEF)
1731 yylval.tsym.type = SYMBOL_TYPE (best_sym);
1733 yylval.tsym.type = SYMBOL_TYPE (sym);
1738 = language_lookup_primitive_type_by_name (parse_language,
1739 parse_gdbarch, tmp);
1740 if (yylval.tsym.type != NULL)
1743 /* See if it's an ObjC classname. */
1746 CORE_ADDR Class = lookup_objc_class (parse_gdbarch, tmp);
1749 yylval.class.class = Class;
1750 if ((sym = lookup_struct_typedef (tmp,
1751 expression_context_block,
1753 yylval.class.type = SYMBOL_TYPE (sym);
1758 /* Input names that aren't symbols but ARE valid hex numbers,
1759 when the input radix permits them, can be names or numbers
1760 depending on the parse. Note we support radixes > 16 here. */
1762 ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10) ||
1763 (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10)))
1765 YYSTYPE newlval; /* Its value is ignored. */
1766 hextype = parse_number (tokstart, namelen, 0, &newlval);
1769 yylval.ssym.sym = sym;
1770 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1775 /* Any other kind of symbol. */
1776 yylval.ssym.sym = sym;
1777 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
1786 if (*lexptr == '\0')
1787 error("A %s near end of expression.", (msg ? msg : "error"));
1789 error ("A %s in expression, near `%s'.", (msg ? msg : "error"),