1 /* YACC parser for C expressions, for GDB.
2 Copyright (C) 1986, 1989-2000, 2003-2004, 2006-2012 Free Software
5 This file is part of GDB.
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>. */
20 /* Parse a C expression from text in a string,
21 and return the result as a struct expression pointer.
22 That structure contains arithmetic operations in reverse polish,
23 with constants represented by operations that are followed by special data.
24 See expression.h for the details of the format.
25 What is important here is that it can be built up sequentially
26 during the process of parsing; the lower levels of the tree always
27 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 parser
32 generator. Doing this with #defines and trying to control the interaction
33 with include files (<malloc.h> and <stdlib.h> for example) just became
34 too messy, particularly when such includes can be inserted at random
35 times by the parser generator. */
40 #include "gdb_string.h"
42 #include "expression.h"
44 #include "parser-defs.h"
47 #include "bfd.h" /* Required by objfiles.h. */
48 #include "symfile.h" /* Required by objfiles.h. */
49 #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
52 #include "cp-support.h"
54 #include "gdb_assert.h"
55 #include "macroscope.h"
56 #include "objc-lang.h"
57 #include "typeprint.h"
59 #define parse_type builtin_type (parse_gdbarch)
61 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
62 as well as gratuitiously global symbol names, so we can have multiple
63 yacc generated parsers in gdb. Note that these are only the variables
64 produced by yacc. If other parser generators (bison, byacc, etc) produce
65 additional global names that conflict at link time, then those parser
66 generators need to be fixed instead of adding those names to this list. */
68 #define yymaxdepth c_maxdepth
69 #define yyparse c_parse_internal
71 #define yyerror c_error
74 #define yydebug c_debug
83 #define yyerrflag c_errflag
84 #define yynerrs c_nerrs
89 #define yystate c_state
95 #define yyreds c_reds /* With YYDEBUG defined */
96 #define yytoks c_toks /* With YYDEBUG defined */
97 #define yyname c_name /* With YYDEBUG defined */
98 #define yyrule c_rule /* With YYDEBUG defined */
100 #define yylen c_yylen
101 #define yydefred c_yydefred
102 #define yydgoto c_yydgoto
103 #define yysindex c_yysindex
104 #define yyrindex c_yyrindex
105 #define yygindex c_yygindex
106 #define yytable c_yytable
107 #define yycheck c_yycheck
109 #define yysslim c_yysslim
110 #define yyssp c_yyssp
111 #define yystacksize c_yystacksize
113 #define yyvsp c_yyvsp
116 #define YYDEBUG 1 /* Default to yydebug support */
119 #define YYFPRINTF parser_fprintf
123 static int yylex (void);
125 void yyerror (char *);
129 /* Although the yacc "value" of an expression is not used,
130 since the result is stored in the structure being created,
131 other node types do have values. */
147 } typed_val_decfloat;
151 struct typed_stoken tsval;
153 struct symtoken ssym;
156 enum exp_opcode opcode;
157 struct internalvar *ivar;
159 struct stoken_vector svec;
160 VEC (type_ptr) *tvec;
163 struct type_stack *type_stack;
165 struct objc_class_str class;
169 /* YYSTYPE gets defined by %union */
170 static int parse_number (char *, int, int, YYSTYPE *);
171 static struct stoken operator_stoken (const char *);
172 static void check_parameter_typelist (VEC (type_ptr) *);
175 %type <voidval> exp exp1 type_exp start variable qualified_name lcurly
177 %type <tval> type typebase
178 %type <tvec> nonempty_typelist func_mod parameter_typelist
179 /* %type <bval> block */
181 /* Fancy type parsing. */
183 %type <lval> array_mod
184 %type <tval> conversion_type_id
186 %type <type_stack> ptr_operator_ts abs_decl direct_abs_decl
188 %token <typed_val_int> INT
189 %token <typed_val_float> FLOAT
190 %token <typed_val_decfloat> DECFLOAT
192 /* Both NAME and TYPENAME tokens represent symbols in the input,
193 and both convey their data as strings.
194 But a TYPENAME is a string that happens to be defined as a typedef
195 or builtin type name (such as int or char)
196 and a NAME is any other symbol.
197 Contexts where this distinction is not important can use the
198 nonterminal "name", which matches either NAME or TYPENAME. */
200 %token <tsval> STRING
201 %token <sval> NSSTRING /* ObjC Foundation "NSString" literal */
202 %token SELECTOR /* ObjC "@selector" pseudo-operator */
204 %token <ssym> NAME /* BLOCKNAME defined below to give it higher precedence. */
205 %token <ssym> UNKNOWN_CPP_NAME
206 %token <voidval> COMPLETE
207 %token <tsym> TYPENAME
208 %token <class> CLASSNAME /* ObjC Class name */
210 %type <svec> string_exp
211 %type <ssym> name_not_typename
212 %type <tsym> typename
214 /* This is like a '[' token, but is only generated when parsing
215 Objective C. This lets us reuse the same parser without
216 erroneously parsing ObjC-specific expressions in C. */
219 /* A NAME_OR_INT is a symbol which is not known in the symbol table,
220 but which would parse as a valid number in the current input radix.
221 E.g. "c" when input_radix==16. Depending on the parse, it will be
222 turned into a name or into a number. */
224 %token <ssym> NAME_OR_INT
227 %token STRUCT CLASS UNION ENUM SIZEOF UNSIGNED COLONCOLON
231 %type <sval> operator
232 %token REINTERPRET_CAST DYNAMIC_CAST STATIC_CAST CONST_CAST
237 /* Special type cases, put in to allow the parser to distinguish different
239 %token SIGNED_KEYWORD LONG SHORT INT_KEYWORD CONST_KEYWORD VOLATILE_KEYWORD DOUBLE_KEYWORD
241 %token <sval> VARIABLE
243 %token <opcode> ASSIGN_MODIFY
252 %right '=' ASSIGN_MODIFY
260 %left '<' '>' LEQ GEQ
265 %right UNARY INCREMENT DECREMENT
266 %right ARROW ARROW_STAR '.' DOT_STAR '[' OBJC_LBRAC '('
267 %token <ssym> BLOCKNAME
268 %token <bval> FILENAME
282 { write_exp_elt_opcode(OP_TYPE);
283 write_exp_elt_type($1);
284 write_exp_elt_opcode(OP_TYPE);}
287 write_exp_elt_opcode (OP_TYPEOF);
289 | TYPEOF '(' type ')'
291 write_exp_elt_opcode (OP_TYPE);
292 write_exp_elt_type ($3);
293 write_exp_elt_opcode (OP_TYPE);
295 | DECLTYPE '(' exp ')'
297 write_exp_elt_opcode (OP_DECLTYPE);
301 /* Expressions, including the comma operator. */
304 { write_exp_elt_opcode (BINOP_COMMA); }
307 /* Expressions, not including the comma operator. */
308 exp : '*' exp %prec UNARY
309 { write_exp_elt_opcode (UNOP_IND); }
312 exp : '&' exp %prec UNARY
313 { write_exp_elt_opcode (UNOP_ADDR); }
316 exp : '-' exp %prec UNARY
317 { write_exp_elt_opcode (UNOP_NEG); }
320 exp : '+' exp %prec UNARY
321 { write_exp_elt_opcode (UNOP_PLUS); }
324 exp : '!' exp %prec UNARY
325 { write_exp_elt_opcode (UNOP_LOGICAL_NOT); }
328 exp : '~' exp %prec UNARY
329 { write_exp_elt_opcode (UNOP_COMPLEMENT); }
332 exp : INCREMENT exp %prec UNARY
333 { write_exp_elt_opcode (UNOP_PREINCREMENT); }
336 exp : DECREMENT exp %prec UNARY
337 { write_exp_elt_opcode (UNOP_PREDECREMENT); }
340 exp : exp INCREMENT %prec UNARY
341 { write_exp_elt_opcode (UNOP_POSTINCREMENT); }
344 exp : exp DECREMENT %prec UNARY
345 { write_exp_elt_opcode (UNOP_POSTDECREMENT); }
348 exp : SIZEOF exp %prec UNARY
349 { write_exp_elt_opcode (UNOP_SIZEOF); }
353 { write_exp_elt_opcode (STRUCTOP_PTR);
354 write_exp_string ($3);
355 write_exp_elt_opcode (STRUCTOP_PTR); }
358 exp : exp ARROW name COMPLETE
359 { mark_struct_expression ();
360 write_exp_elt_opcode (STRUCTOP_PTR);
361 write_exp_string ($3);
362 write_exp_elt_opcode (STRUCTOP_PTR); }
365 exp : exp ARROW COMPLETE
367 mark_struct_expression ();
368 write_exp_elt_opcode (STRUCTOP_PTR);
371 write_exp_string (s);
372 write_exp_elt_opcode (STRUCTOP_PTR); }
375 exp : exp ARROW qualified_name
376 { /* exp->type::name becomes exp->*(&type::name) */
377 /* Note: this doesn't work if name is a
378 static member! FIXME */
379 write_exp_elt_opcode (UNOP_ADDR);
380 write_exp_elt_opcode (STRUCTOP_MPTR); }
383 exp : exp ARROW_STAR exp
384 { write_exp_elt_opcode (STRUCTOP_MPTR); }
388 { write_exp_elt_opcode (STRUCTOP_STRUCT);
389 write_exp_string ($3);
390 write_exp_elt_opcode (STRUCTOP_STRUCT); }
393 exp : exp '.' name COMPLETE
394 { mark_struct_expression ();
395 write_exp_elt_opcode (STRUCTOP_STRUCT);
396 write_exp_string ($3);
397 write_exp_elt_opcode (STRUCTOP_STRUCT); }
400 exp : exp '.' COMPLETE
402 mark_struct_expression ();
403 write_exp_elt_opcode (STRUCTOP_STRUCT);
406 write_exp_string (s);
407 write_exp_elt_opcode (STRUCTOP_STRUCT); }
410 exp : exp '.' qualified_name
411 { /* exp.type::name becomes exp.*(&type::name) */
412 /* Note: this doesn't work if name is a
413 static member! FIXME */
414 write_exp_elt_opcode (UNOP_ADDR);
415 write_exp_elt_opcode (STRUCTOP_MEMBER); }
418 exp : exp DOT_STAR exp
419 { write_exp_elt_opcode (STRUCTOP_MEMBER); }
422 exp : exp '[' exp1 ']'
423 { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
426 exp : exp OBJC_LBRAC exp1 ']'
427 { write_exp_elt_opcode (BINOP_SUBSCRIPT); }
431 * The rules below parse ObjC message calls of the form:
432 * '[' target selector {':' argument}* ']'
435 exp : OBJC_LBRAC TYPENAME
439 class = lookup_objc_class (parse_gdbarch,
440 copy_name ($2.stoken));
442 error (_("%s is not an ObjC Class"),
443 copy_name ($2.stoken));
444 write_exp_elt_opcode (OP_LONG);
445 write_exp_elt_type (parse_type->builtin_int);
446 write_exp_elt_longcst ((LONGEST) class);
447 write_exp_elt_opcode (OP_LONG);
451 { write_exp_elt_opcode (OP_OBJC_MSGCALL);
453 write_exp_elt_opcode (OP_OBJC_MSGCALL);
457 exp : OBJC_LBRAC CLASSNAME
459 write_exp_elt_opcode (OP_LONG);
460 write_exp_elt_type (parse_type->builtin_int);
461 write_exp_elt_longcst ((LONGEST) $2.class);
462 write_exp_elt_opcode (OP_LONG);
466 { write_exp_elt_opcode (OP_OBJC_MSGCALL);
468 write_exp_elt_opcode (OP_OBJC_MSGCALL);
475 { write_exp_elt_opcode (OP_OBJC_MSGCALL);
477 write_exp_elt_opcode (OP_OBJC_MSGCALL);
482 { add_msglist(&$1, 0); }
490 msgarg : name ':' exp
491 { add_msglist(&$1, 1); }
492 | ':' exp /* Unnamed arg. */
493 { add_msglist(0, 1); }
494 | ',' exp /* Variable number of args. */
495 { add_msglist(0, 0); }
499 /* This is to save the value of arglist_len
500 being accumulated by an outer function call. */
501 { start_arglist (); }
502 arglist ')' %prec ARROW
503 { write_exp_elt_opcode (OP_FUNCALL);
504 write_exp_elt_longcst ((LONGEST) end_arglist ());
505 write_exp_elt_opcode (OP_FUNCALL); }
508 exp : UNKNOWN_CPP_NAME '('
510 /* This could potentially be a an argument defined
511 lookup function (Koenig). */
512 write_exp_elt_opcode (OP_ADL_FUNC);
513 write_exp_elt_block (expression_context_block);
514 write_exp_elt_sym (NULL); /* Placeholder. */
515 write_exp_string ($1.stoken);
516 write_exp_elt_opcode (OP_ADL_FUNC);
518 /* This is to save the value of arglist_len
519 being accumulated by an outer function call. */
523 arglist ')' %prec ARROW
525 write_exp_elt_opcode (OP_FUNCALL);
526 write_exp_elt_longcst ((LONGEST) end_arglist ());
527 write_exp_elt_opcode (OP_FUNCALL);
532 { start_arglist (); }
542 arglist : arglist ',' exp %prec ABOVE_COMMA
546 exp : exp '(' parameter_typelist ')' const_or_volatile
548 VEC (type_ptr) *type_list = $3;
549 struct type *type_elt;
550 LONGEST len = VEC_length (type_ptr, type_list);
552 write_exp_elt_opcode (TYPE_INSTANCE);
553 write_exp_elt_longcst (len);
555 VEC_iterate (type_ptr, type_list, i, type_elt);
557 write_exp_elt_type (type_elt);
558 write_exp_elt_longcst(len);
559 write_exp_elt_opcode (TYPE_INSTANCE);
560 VEC_free (type_ptr, type_list);
565 { $$ = end_arglist () - 1; }
567 exp : lcurly arglist rcurly %prec ARROW
568 { write_exp_elt_opcode (OP_ARRAY);
569 write_exp_elt_longcst ((LONGEST) 0);
570 write_exp_elt_longcst ((LONGEST) $3);
571 write_exp_elt_opcode (OP_ARRAY); }
574 exp : lcurly type_exp rcurly exp %prec UNARY
575 { write_exp_elt_opcode (UNOP_MEMVAL_TYPE); }
578 exp : '(' type_exp ')' exp %prec UNARY
579 { write_exp_elt_opcode (UNOP_CAST_TYPE); }
586 /* Binary operators in order of decreasing precedence. */
589 { write_exp_elt_opcode (BINOP_REPEAT); }
593 { write_exp_elt_opcode (BINOP_MUL); }
597 { write_exp_elt_opcode (BINOP_DIV); }
601 { write_exp_elt_opcode (BINOP_REM); }
605 { write_exp_elt_opcode (BINOP_ADD); }
609 { write_exp_elt_opcode (BINOP_SUB); }
613 { write_exp_elt_opcode (BINOP_LSH); }
617 { write_exp_elt_opcode (BINOP_RSH); }
621 { write_exp_elt_opcode (BINOP_EQUAL); }
624 exp : exp NOTEQUAL exp
625 { write_exp_elt_opcode (BINOP_NOTEQUAL); }
629 { write_exp_elt_opcode (BINOP_LEQ); }
633 { write_exp_elt_opcode (BINOP_GEQ); }
637 { write_exp_elt_opcode (BINOP_LESS); }
641 { write_exp_elt_opcode (BINOP_GTR); }
645 { write_exp_elt_opcode (BINOP_BITWISE_AND); }
649 { write_exp_elt_opcode (BINOP_BITWISE_XOR); }
653 { write_exp_elt_opcode (BINOP_BITWISE_IOR); }
657 { write_exp_elt_opcode (BINOP_LOGICAL_AND); }
661 { write_exp_elt_opcode (BINOP_LOGICAL_OR); }
664 exp : exp '?' exp ':' exp %prec '?'
665 { write_exp_elt_opcode (TERNOP_COND); }
669 { write_exp_elt_opcode (BINOP_ASSIGN); }
672 exp : exp ASSIGN_MODIFY exp
673 { write_exp_elt_opcode (BINOP_ASSIGN_MODIFY);
674 write_exp_elt_opcode ($2);
675 write_exp_elt_opcode (BINOP_ASSIGN_MODIFY); }
679 { write_exp_elt_opcode (OP_LONG);
680 write_exp_elt_type ($1.type);
681 write_exp_elt_longcst ((LONGEST)($1.val));
682 write_exp_elt_opcode (OP_LONG); }
687 struct stoken_vector vec;
690 write_exp_string_vector ($1.type, &vec);
696 parse_number ($1.stoken.ptr, $1.stoken.length, 0, &val);
697 write_exp_elt_opcode (OP_LONG);
698 write_exp_elt_type (val.typed_val_int.type);
699 write_exp_elt_longcst ((LONGEST)val.typed_val_int.val);
700 write_exp_elt_opcode (OP_LONG);
706 { write_exp_elt_opcode (OP_DOUBLE);
707 write_exp_elt_type ($1.type);
708 write_exp_elt_dblcst ($1.dval);
709 write_exp_elt_opcode (OP_DOUBLE); }
713 { write_exp_elt_opcode (OP_DECFLOAT);
714 write_exp_elt_type ($1.type);
715 write_exp_elt_decfloatcst ($1.val);
716 write_exp_elt_opcode (OP_DECFLOAT); }
724 write_dollar_variable ($1);
728 exp : SELECTOR '(' name ')'
730 write_exp_elt_opcode (OP_OBJC_SELECTOR);
731 write_exp_string ($3);
732 write_exp_elt_opcode (OP_OBJC_SELECTOR); }
735 exp : SIZEOF '(' type ')' %prec UNARY
736 { write_exp_elt_opcode (OP_LONG);
737 write_exp_elt_type (lookup_signed_typename
738 (parse_language, parse_gdbarch,
741 write_exp_elt_longcst ((LONGEST) TYPE_LENGTH ($3));
742 write_exp_elt_opcode (OP_LONG); }
745 exp : REINTERPRET_CAST '<' type_exp '>' '(' exp ')' %prec UNARY
746 { write_exp_elt_opcode (UNOP_REINTERPRET_CAST); }
749 exp : STATIC_CAST '<' type_exp '>' '(' exp ')' %prec UNARY
750 { write_exp_elt_opcode (UNOP_CAST_TYPE); }
753 exp : DYNAMIC_CAST '<' type_exp '>' '(' exp ')' %prec UNARY
754 { write_exp_elt_opcode (UNOP_DYNAMIC_CAST); }
757 exp : CONST_CAST '<' type_exp '>' '(' exp ')' %prec UNARY
758 { /* We could do more error checking here, but
759 it doesn't seem worthwhile. */
760 write_exp_elt_opcode (UNOP_CAST_TYPE); }
766 /* We copy the string here, and not in the
767 lexer, to guarantee that we do not leak a
768 string. Note that we follow the
769 NUL-termination convention of the
771 struct typed_stoken *vec = XNEW (struct typed_stoken);
776 vec->length = $1.length;
777 vec->ptr = malloc ($1.length + 1);
778 memcpy (vec->ptr, $1.ptr, $1.length + 1);
783 /* Note that we NUL-terminate here, but just
787 $$.tokens = realloc ($$.tokens,
788 $$.len * sizeof (struct typed_stoken));
790 p = malloc ($2.length + 1);
791 memcpy (p, $2.ptr, $2.length + 1);
793 $$.tokens[$$.len - 1].type = $2.type;
794 $$.tokens[$$.len - 1].length = $2.length;
795 $$.tokens[$$.len - 1].ptr = p;
802 enum c_string_type type = C_STRING;
804 for (i = 0; i < $1.len; ++i)
806 switch ($1.tokens[i].type)
814 && type != $1.tokens[i].type)
815 error (_("Undefined string concatenation."));
816 type = $1.tokens[i].type;
820 internal_error (__FILE__, __LINE__,
821 "unrecognized type in string concatenation");
825 write_exp_string_vector (type, &$1);
826 for (i = 0; i < $1.len; ++i)
827 free ($1.tokens[i].ptr);
832 exp : NSSTRING /* ObjC NextStep NSString constant
833 * of the form '@' '"' string '"'.
835 { write_exp_elt_opcode (OP_OBJC_NSSTRING);
836 write_exp_string ($1);
837 write_exp_elt_opcode (OP_OBJC_NSSTRING); }
842 { write_exp_elt_opcode (OP_LONG);
843 write_exp_elt_type (parse_type->builtin_bool);
844 write_exp_elt_longcst ((LONGEST) 1);
845 write_exp_elt_opcode (OP_LONG); }
849 { write_exp_elt_opcode (OP_LONG);
850 write_exp_elt_type (parse_type->builtin_bool);
851 write_exp_elt_longcst ((LONGEST) 0);
852 write_exp_elt_opcode (OP_LONG); }
860 $$ = SYMBOL_BLOCK_VALUE ($1.sym);
862 error (_("No file or function \"%s\"."),
863 copy_name ($1.stoken));
871 block : block COLONCOLON name
873 = lookup_symbol (copy_name ($3), $1,
874 VAR_DOMAIN, (int *) NULL);
875 if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK)
876 error (_("No function \"%s\" in specified context."),
878 $$ = SYMBOL_BLOCK_VALUE (tem); }
881 variable: name_not_typename ENTRY
882 { struct symbol *sym = $1.sym;
884 if (sym == NULL || !SYMBOL_IS_ARGUMENT (sym)
885 || !symbol_read_needs_frame (sym))
886 error (_("@entry can be used only for function "
887 "parameters, not for \"%s\""),
888 copy_name ($1.stoken));
890 write_exp_elt_opcode (OP_VAR_ENTRY_VALUE);
891 write_exp_elt_sym (sym);
892 write_exp_elt_opcode (OP_VAR_ENTRY_VALUE);
896 variable: block COLONCOLON name
897 { struct symbol *sym;
898 sym = lookup_symbol (copy_name ($3), $1,
899 VAR_DOMAIN, (int *) NULL);
901 error (_("No symbol \"%s\" in specified context."),
903 if (symbol_read_needs_frame (sym))
905 if (innermost_block == 0
906 || contained_in (block_found,
908 innermost_block = block_found;
911 write_exp_elt_opcode (OP_VAR_VALUE);
912 /* block_found is set by lookup_symbol. */
913 write_exp_elt_block (block_found);
914 write_exp_elt_sym (sym);
915 write_exp_elt_opcode (OP_VAR_VALUE); }
918 qualified_name: TYPENAME COLONCOLON name
920 struct type *type = $1.type;
921 CHECK_TYPEDEF (type);
922 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
923 && TYPE_CODE (type) != TYPE_CODE_UNION
924 && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
925 error (_("`%s' is not defined as an aggregate type."),
928 write_exp_elt_opcode (OP_SCOPE);
929 write_exp_elt_type (type);
930 write_exp_string ($3);
931 write_exp_elt_opcode (OP_SCOPE);
933 | TYPENAME COLONCOLON '~' name
935 struct type *type = $1.type;
936 struct stoken tmp_token;
937 CHECK_TYPEDEF (type);
938 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
939 && TYPE_CODE (type) != TYPE_CODE_UNION
940 && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
941 error (_("`%s' is not defined as an aggregate type."),
944 tmp_token.ptr = (char*) alloca ($4.length + 2);
945 tmp_token.length = $4.length + 1;
946 tmp_token.ptr[0] = '~';
947 memcpy (tmp_token.ptr+1, $4.ptr, $4.length);
948 tmp_token.ptr[tmp_token.length] = 0;
950 /* Check for valid destructor name. */
951 destructor_name_p (tmp_token.ptr, $1.type);
952 write_exp_elt_opcode (OP_SCOPE);
953 write_exp_elt_type (type);
954 write_exp_string (tmp_token);
955 write_exp_elt_opcode (OP_SCOPE);
957 | TYPENAME COLONCOLON name COLONCOLON name
959 char *copy = copy_name ($3);
960 error (_("No type \"%s\" within class "
961 "or namespace \"%s\"."),
962 copy, TYPE_NAME ($1.type));
966 variable: qualified_name
967 | COLONCOLON name_not_typename
969 char *name = copy_name ($2.stoken);
971 struct minimal_symbol *msymbol;
974 lookup_symbol (name, (const struct block *) NULL,
975 VAR_DOMAIN, (int *) NULL);
978 write_exp_elt_opcode (OP_VAR_VALUE);
979 write_exp_elt_block (NULL);
980 write_exp_elt_sym (sym);
981 write_exp_elt_opcode (OP_VAR_VALUE);
985 msymbol = lookup_minimal_symbol (name, NULL, NULL);
987 write_exp_msymbol (msymbol);
988 else if (!have_full_symbols () && !have_partial_symbols ())
989 error (_("No symbol table is loaded. Use the \"file\" command."));
991 error (_("No symbol \"%s\" in current context."), name);
995 variable: name_not_typename
996 { struct symbol *sym = $1.sym;
1000 if (symbol_read_needs_frame (sym))
1002 if (innermost_block == 0
1003 || contained_in (block_found,
1005 innermost_block = block_found;
1008 write_exp_elt_opcode (OP_VAR_VALUE);
1009 /* We want to use the selected frame, not
1010 another more inner frame which happens to
1011 be in the same block. */
1012 write_exp_elt_block (NULL);
1013 write_exp_elt_sym (sym);
1014 write_exp_elt_opcode (OP_VAR_VALUE);
1016 else if ($1.is_a_field_of_this)
1018 /* C++: it hangs off of `this'. Must
1019 not inadvertently convert from a method call
1021 if (innermost_block == 0
1022 || contained_in (block_found,
1024 innermost_block = block_found;
1025 write_exp_elt_opcode (OP_THIS);
1026 write_exp_elt_opcode (OP_THIS);
1027 write_exp_elt_opcode (STRUCTOP_PTR);
1028 write_exp_string ($1.stoken);
1029 write_exp_elt_opcode (STRUCTOP_PTR);
1033 struct minimal_symbol *msymbol;
1034 char *arg = copy_name ($1.stoken);
1037 lookup_minimal_symbol (arg, NULL, NULL);
1038 if (msymbol != NULL)
1039 write_exp_msymbol (msymbol);
1040 else if (!have_full_symbols () && !have_partial_symbols ())
1041 error (_("No symbol table is loaded. Use the \"file\" command."));
1043 error (_("No symbol \"%s\" in current context."),
1044 copy_name ($1.stoken));
1049 space_identifier : '@' NAME
1050 { insert_type_address_space (copy_name ($2.stoken)); }
1053 const_or_volatile: const_or_volatile_noopt
1057 cv_with_space_id : const_or_volatile space_identifier const_or_volatile
1060 const_or_volatile_or_space_identifier_noopt: cv_with_space_id
1061 | const_or_volatile_noopt
1064 const_or_volatile_or_space_identifier:
1065 const_or_volatile_or_space_identifier_noopt
1071 { insert_type (tp_pointer); }
1072 const_or_volatile_or_space_identifier
1074 { insert_type (tp_pointer); }
1075 const_or_volatile_or_space_identifier
1077 { insert_type (tp_reference); }
1079 { insert_type (tp_reference); }
1082 ptr_operator_ts: ptr_operator
1084 $$ = get_type_stack ();
1085 /* This cleanup is eventually run by
1087 make_cleanup (type_stack_cleanup, $$);
1091 abs_decl: ptr_operator_ts direct_abs_decl
1092 { $$ = append_type_stack ($2, $1); }
1097 direct_abs_decl: '(' abs_decl ')'
1099 | direct_abs_decl array_mod
1101 push_type_stack ($1);
1103 push_type (tp_array);
1104 $$ = get_type_stack ();
1109 push_type (tp_array);
1110 $$ = get_type_stack ();
1113 | direct_abs_decl func_mod
1115 push_type_stack ($1);
1117 $$ = get_type_stack ();
1122 $$ = get_type_stack ();
1132 | OBJC_LBRAC INT ']'
1138 | '(' parameter_typelist ')'
1142 /* We used to try to recognize pointer to member types here, but
1143 that didn't work (shift/reduce conflicts meant that these rules never
1144 got executed). The problem is that
1145 int (foo::bar::baz::bizzle)
1146 is a function type but
1147 int (foo::bar::baz::bizzle::*)
1148 is a pointer to member type. Stroustrup loses again! */
1153 typebase /* Implements (approximately): (type-qualifier)* type-specifier */
1157 { $$ = lookup_signed_typename (parse_language,
1161 { $$ = lookup_signed_typename (parse_language,
1165 { $$ = lookup_signed_typename (parse_language,
1169 { $$ = lookup_signed_typename (parse_language,
1172 | LONG SIGNED_KEYWORD INT_KEYWORD
1173 { $$ = lookup_signed_typename (parse_language,
1176 | LONG SIGNED_KEYWORD
1177 { $$ = lookup_signed_typename (parse_language,
1180 | SIGNED_KEYWORD LONG INT_KEYWORD
1181 { $$ = lookup_signed_typename (parse_language,
1184 | UNSIGNED LONG INT_KEYWORD
1185 { $$ = lookup_unsigned_typename (parse_language,
1188 | LONG UNSIGNED INT_KEYWORD
1189 { $$ = lookup_unsigned_typename (parse_language,
1193 { $$ = lookup_unsigned_typename (parse_language,
1197 { $$ = lookup_signed_typename (parse_language,
1200 | LONG LONG INT_KEYWORD
1201 { $$ = lookup_signed_typename (parse_language,
1204 | LONG LONG SIGNED_KEYWORD INT_KEYWORD
1205 { $$ = lookup_signed_typename (parse_language,
1208 | LONG LONG SIGNED_KEYWORD
1209 { $$ = lookup_signed_typename (parse_language,
1212 | SIGNED_KEYWORD LONG LONG
1213 { $$ = lookup_signed_typename (parse_language,
1216 | SIGNED_KEYWORD LONG LONG INT_KEYWORD
1217 { $$ = lookup_signed_typename (parse_language,
1220 | UNSIGNED LONG LONG
1221 { $$ = lookup_unsigned_typename (parse_language,
1224 | UNSIGNED LONG LONG INT_KEYWORD
1225 { $$ = lookup_unsigned_typename (parse_language,
1228 | LONG LONG UNSIGNED
1229 { $$ = lookup_unsigned_typename (parse_language,
1232 | LONG LONG UNSIGNED INT_KEYWORD
1233 { $$ = lookup_unsigned_typename (parse_language,
1237 { $$ = lookup_signed_typename (parse_language,
1240 | SHORT SIGNED_KEYWORD INT_KEYWORD
1241 { $$ = lookup_signed_typename (parse_language,
1244 | SHORT SIGNED_KEYWORD
1245 { $$ = lookup_signed_typename (parse_language,
1248 | UNSIGNED SHORT INT_KEYWORD
1249 { $$ = lookup_unsigned_typename (parse_language,
1253 { $$ = lookup_unsigned_typename (parse_language,
1256 | SHORT UNSIGNED INT_KEYWORD
1257 { $$ = lookup_unsigned_typename (parse_language,
1261 { $$ = lookup_typename (parse_language, parse_gdbarch,
1262 "double", (struct block *) NULL,
1264 | LONG DOUBLE_KEYWORD
1265 { $$ = lookup_typename (parse_language, parse_gdbarch,
1267 (struct block *) NULL, 0); }
1269 { $$ = lookup_struct (copy_name ($2),
1270 expression_context_block); }
1272 { $$ = lookup_struct (copy_name ($2),
1273 expression_context_block); }
1275 { $$ = lookup_union (copy_name ($2),
1276 expression_context_block); }
1278 { $$ = lookup_enum (copy_name ($2),
1279 expression_context_block); }
1281 { $$ = lookup_unsigned_typename (parse_language,
1283 TYPE_NAME($2.type)); }
1285 { $$ = lookup_unsigned_typename (parse_language,
1288 | SIGNED_KEYWORD typename
1289 { $$ = lookup_signed_typename (parse_language,
1291 TYPE_NAME($2.type)); }
1293 { $$ = lookup_signed_typename (parse_language,
1296 /* It appears that this rule for templates is never
1297 reduced; template recognition happens by lookahead
1298 in the token processing code in yylex. */
1299 | TEMPLATE name '<' type '>'
1300 { $$ = lookup_template_type(copy_name($2), $4,
1301 expression_context_block);
1303 | const_or_volatile_or_space_identifier_noopt typebase
1304 { $$ = follow_types ($2); }
1305 | typebase const_or_volatile_or_space_identifier_noopt
1306 { $$ = follow_types ($1); }
1312 $$.stoken.ptr = "int";
1313 $$.stoken.length = 3;
1314 $$.type = lookup_signed_typename (parse_language,
1320 $$.stoken.ptr = "long";
1321 $$.stoken.length = 4;
1322 $$.type = lookup_signed_typename (parse_language,
1328 $$.stoken.ptr = "short";
1329 $$.stoken.length = 5;
1330 $$.type = lookup_signed_typename (parse_language,
1338 { check_parameter_typelist ($1); }
1339 | nonempty_typelist ',' DOTDOTDOT
1341 VEC_safe_push (type_ptr, $1, NULL);
1342 check_parameter_typelist ($1);
1350 VEC (type_ptr) *typelist = NULL;
1351 VEC_safe_push (type_ptr, typelist, $1);
1354 | nonempty_typelist ',' type
1356 VEC_safe_push (type_ptr, $1, $3);
1364 push_type_stack ($2);
1365 $$ = follow_types ($1);
1369 conversion_type_id: typebase conversion_declarator
1370 { $$ = follow_types ($1); }
1373 conversion_declarator: /* Nothing. */
1374 | ptr_operator conversion_declarator
1377 const_and_volatile: CONST_KEYWORD VOLATILE_KEYWORD
1378 | VOLATILE_KEYWORD CONST_KEYWORD
1381 const_or_volatile_noopt: const_and_volatile
1382 { insert_type (tp_const);
1383 insert_type (tp_volatile);
1386 { insert_type (tp_const); }
1388 { insert_type (tp_volatile); }
1391 operator: OPERATOR NEW
1392 { $$ = operator_stoken (" new"); }
1394 { $$ = operator_stoken (" delete"); }
1395 | OPERATOR NEW '[' ']'
1396 { $$ = operator_stoken (" new[]"); }
1397 | OPERATOR DELETE '[' ']'
1398 { $$ = operator_stoken (" delete[]"); }
1399 | OPERATOR NEW OBJC_LBRAC ']'
1400 { $$ = operator_stoken (" new[]"); }
1401 | OPERATOR DELETE OBJC_LBRAC ']'
1402 { $$ = operator_stoken (" delete[]"); }
1404 { $$ = operator_stoken ("+"); }
1406 { $$ = operator_stoken ("-"); }
1408 { $$ = operator_stoken ("*"); }
1410 { $$ = operator_stoken ("/"); }
1412 { $$ = operator_stoken ("%"); }
1414 { $$ = operator_stoken ("^"); }
1416 { $$ = operator_stoken ("&"); }
1418 { $$ = operator_stoken ("|"); }
1420 { $$ = operator_stoken ("~"); }
1422 { $$ = operator_stoken ("!"); }
1424 { $$ = operator_stoken ("="); }
1426 { $$ = operator_stoken ("<"); }
1428 { $$ = operator_stoken (">"); }
1429 | OPERATOR ASSIGN_MODIFY
1430 { const char *op = "unknown";
1454 case BINOP_BITWISE_IOR:
1457 case BINOP_BITWISE_AND:
1460 case BINOP_BITWISE_XOR:
1467 $$ = operator_stoken (op);
1470 { $$ = operator_stoken ("<<"); }
1472 { $$ = operator_stoken (">>"); }
1474 { $$ = operator_stoken ("=="); }
1476 { $$ = operator_stoken ("!="); }
1478 { $$ = operator_stoken ("<="); }
1480 { $$ = operator_stoken (">="); }
1482 { $$ = operator_stoken ("&&"); }
1484 { $$ = operator_stoken ("||"); }
1485 | OPERATOR INCREMENT
1486 { $$ = operator_stoken ("++"); }
1487 | OPERATOR DECREMENT
1488 { $$ = operator_stoken ("--"); }
1490 { $$ = operator_stoken (","); }
1491 | OPERATOR ARROW_STAR
1492 { $$ = operator_stoken ("->*"); }
1494 { $$ = operator_stoken ("->"); }
1496 { $$ = operator_stoken ("()"); }
1498 { $$ = operator_stoken ("[]"); }
1499 | OPERATOR OBJC_LBRAC ']'
1500 { $$ = operator_stoken ("[]"); }
1501 | OPERATOR conversion_type_id
1504 struct ui_file *buf = mem_fileopen ();
1506 c_print_type ($2, NULL, buf, -1, 0,
1507 &type_print_raw_options);
1508 name = ui_file_xstrdup (buf, &length);
1509 ui_file_delete (buf);
1510 $$ = operator_stoken (name);
1517 name : NAME { $$ = $1.stoken; }
1518 | BLOCKNAME { $$ = $1.stoken; }
1519 | TYPENAME { $$ = $1.stoken; }
1520 | NAME_OR_INT { $$ = $1.stoken; }
1521 | UNKNOWN_CPP_NAME { $$ = $1.stoken; }
1522 | operator { $$ = $1; }
1525 name_not_typename : NAME
1527 /* These would be useful if name_not_typename was useful, but it is just
1528 a fake for "variable", so these cause reduce/reduce conflicts because
1529 the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
1530 =exp) or just an exp. If name_not_typename was ever used in an lvalue
1531 context where only a name could occur, this might be useful.
1537 $$.sym = lookup_symbol ($1.ptr,
1538 expression_context_block,
1540 &$$.is_a_field_of_this);
1547 /* Returns a stoken of the operator name given by OP (which does not
1548 include the string "operator"). */
1549 static struct stoken
1550 operator_stoken (const char *op)
1552 static const char *operator_string = "operator";
1553 struct stoken st = { NULL, 0 };
1554 st.length = strlen (operator_string) + strlen (op);
1555 st.ptr = malloc (st.length + 1);
1556 strcpy (st.ptr, operator_string);
1557 strcat (st.ptr, op);
1559 /* The toplevel (c_parse) will free the memory allocated here. */
1560 make_cleanup (free, st.ptr);
1564 /* Validate a parameter typelist. */
1567 check_parameter_typelist (VEC (type_ptr) *params)
1572 for (ix = 0; VEC_iterate (type_ptr, params, ix, type); ++ix)
1574 if (type != NULL && TYPE_CODE (check_typedef (type)) == TYPE_CODE_VOID)
1578 if (VEC_length (type_ptr, params) == 1)
1583 VEC_free (type_ptr, params);
1584 error (_("parameter types following 'void'"));
1588 VEC_free (type_ptr, params);
1589 error (_("'void' invalid as parameter type"));
1595 /* Take care of parsing a number (anything that starts with a digit).
1596 Set yylval and return the token type; update lexptr.
1597 LEN is the number of characters in it. */
1599 /*** Needs some error checking for the float case ***/
1602 parse_number (char *p, int len, int parsed_float, YYSTYPE *putithere)
1604 /* FIXME: Shouldn't these be unsigned? We don't deal with negative values
1605 here, and we do kind of silly things like cast to unsigned. */
1612 int base = input_radix;
1615 /* Number of "L" suffixes encountered. */
1618 /* We have found a "L" or "U" suffix. */
1619 int found_suffix = 0;
1622 struct type *signed_type;
1623 struct type *unsigned_type;
1627 /* If it ends at "df", "dd" or "dl", take it as type of decimal floating
1628 point. Return DECFLOAT. */
1630 if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'f')
1633 putithere->typed_val_decfloat.type
1634 = parse_type->builtin_decfloat;
1635 decimal_from_string (putithere->typed_val_decfloat.val, 4,
1636 gdbarch_byte_order (parse_gdbarch), p);
1641 if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'd')
1644 putithere->typed_val_decfloat.type
1645 = parse_type->builtin_decdouble;
1646 decimal_from_string (putithere->typed_val_decfloat.val, 8,
1647 gdbarch_byte_order (parse_gdbarch), p);
1652 if (len >= 2 && p[len - 2] == 'd' && p[len - 1] == 'l')
1655 putithere->typed_val_decfloat.type
1656 = parse_type->builtin_declong;
1657 decimal_from_string (putithere->typed_val_decfloat.val, 16,
1658 gdbarch_byte_order (parse_gdbarch), p);
1663 if (! parse_c_float (parse_gdbarch, p, len,
1664 &putithere->typed_val_float.dval,
1665 &putithere->typed_val_float.type))
1670 /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
1714 if (c >= 'A' && c <= 'Z')
1716 if (c != 'l' && c != 'u')
1718 if (c >= '0' && c <= '9')
1726 if (base > 10 && c >= 'a' && c <= 'f')
1730 n += i = c - 'a' + 10;
1743 return ERROR; /* Char not a digit */
1746 return ERROR; /* Invalid digit in this base */
1748 /* Portably test for overflow (only works for nonzero values, so make
1749 a second check for zero). FIXME: Can't we just make n and prevn
1750 unsigned and avoid this? */
1751 if (c != 'l' && c != 'u' && (prevn >= n) && n != 0)
1752 unsigned_p = 1; /* Try something unsigned */
1754 /* Portably test for unsigned overflow.
1755 FIXME: This check is wrong; for example it doesn't find overflow
1756 on 0x123456789 when LONGEST is 32 bits. */
1757 if (c != 'l' && c != 'u' && n != 0)
1759 if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n))
1760 error (_("Numeric constant too large."));
1765 /* An integer constant is an int, a long, or a long long. An L
1766 suffix forces it to be long; an LL suffix forces it to be long
1767 long. If not forced to a larger size, it gets the first type of
1768 the above that it fits in. To figure out whether it fits, we
1769 shift it right and see whether anything remains. Note that we
1770 can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
1771 operation, because many compilers will warn about such a shift
1772 (which always produces a zero result). Sometimes gdbarch_int_bit
1773 or gdbarch_long_bit will be that big, sometimes not. To deal with
1774 the case where it is we just always shift the value more than
1775 once, with fewer bits each time. */
1777 un = (ULONGEST)n >> 2;
1779 && (un >> (gdbarch_int_bit (parse_gdbarch) - 2)) == 0)
1781 high_bit = ((ULONGEST)1) << (gdbarch_int_bit (parse_gdbarch) - 1);
1783 /* A large decimal (not hex or octal) constant (between INT_MAX
1784 and UINT_MAX) is a long or unsigned long, according to ANSI,
1785 never an unsigned int, but this code treats it as unsigned
1786 int. This probably should be fixed. GCC gives a warning on
1789 unsigned_type = parse_type->builtin_unsigned_int;
1790 signed_type = parse_type->builtin_int;
1792 else if (long_p <= 1
1793 && (un >> (gdbarch_long_bit (parse_gdbarch) - 2)) == 0)
1795 high_bit = ((ULONGEST)1) << (gdbarch_long_bit (parse_gdbarch) - 1);
1796 unsigned_type = parse_type->builtin_unsigned_long;
1797 signed_type = parse_type->builtin_long;
1802 if (sizeof (ULONGEST) * HOST_CHAR_BIT
1803 < gdbarch_long_long_bit (parse_gdbarch))
1804 /* A long long does not fit in a LONGEST. */
1805 shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1);
1807 shift = (gdbarch_long_long_bit (parse_gdbarch) - 1);
1808 high_bit = (ULONGEST) 1 << shift;
1809 unsigned_type = parse_type->builtin_unsigned_long_long;
1810 signed_type = parse_type->builtin_long_long;
1813 putithere->typed_val_int.val = n;
1815 /* If the high bit of the worked out type is set then this number
1816 has to be unsigned. */
1818 if (unsigned_p || (n & high_bit))
1820 putithere->typed_val_int.type = unsigned_type;
1824 putithere->typed_val_int.type = signed_type;
1830 /* Temporary obstack used for holding strings. */
1831 static struct obstack tempbuf;
1832 static int tempbuf_init;
1834 /* Parse a C escape sequence. The initial backslash of the sequence
1835 is at (*PTR)[-1]. *PTR will be updated to point to just after the
1836 last character of the sequence. If OUTPUT is not NULL, the
1837 translated form of the escape sequence will be written there. If
1838 OUTPUT is NULL, no output is written and the call will only affect
1839 *PTR. If an escape sequence is expressed in target bytes, then the
1840 entire sequence will simply be copied to OUTPUT. Return 1 if any
1841 character was emitted, 0 otherwise. */
1844 c_parse_escape (char **ptr, struct obstack *output)
1846 char *tokptr = *ptr;
1849 /* Some escape sequences undergo character set conversion. Those we
1853 /* Hex escapes do not undergo character set conversion, so keep
1854 the escape sequence for later. */
1857 obstack_grow_str (output, "\\x");
1859 if (!isxdigit (*tokptr))
1860 error (_("\\x escape without a following hex digit"));
1861 while (isxdigit (*tokptr))
1864 obstack_1grow (output, *tokptr);
1869 /* Octal escapes do not undergo character set conversion, so
1870 keep the escape sequence for later. */
1882 obstack_grow_str (output, "\\");
1884 i < 3 && isdigit (*tokptr) && *tokptr != '8' && *tokptr != '9';
1888 obstack_1grow (output, *tokptr);
1894 /* We handle UCNs later. We could handle them here, but that
1895 would mean a spurious error in the case where the UCN could
1896 be converted to the target charset but not the host
1902 int i, len = c == 'U' ? 8 : 4;
1905 obstack_1grow (output, '\\');
1906 obstack_1grow (output, *tokptr);
1909 if (!isxdigit (*tokptr))
1910 error (_("\\%c escape without a following hex digit"), c);
1911 for (i = 0; i < len && isxdigit (*tokptr); ++i)
1914 obstack_1grow (output, *tokptr);
1920 /* We must pass backslash through so that it does not
1921 cause quoting during the second expansion. */
1924 obstack_grow_str (output, "\\\\");
1928 /* Escapes which undergo conversion. */
1931 obstack_1grow (output, '\a');
1936 obstack_1grow (output, '\b');
1941 obstack_1grow (output, '\f');
1946 obstack_1grow (output, '\n');
1951 obstack_1grow (output, '\r');
1956 obstack_1grow (output, '\t');
1961 obstack_1grow (output, '\v');
1965 /* GCC extension. */
1968 obstack_1grow (output, HOST_ESCAPE_CHAR);
1972 /* Backslash-newline expands to nothing at all. */
1978 /* A few escapes just expand to the character itself. */
1982 /* GCC extensions. */
1987 /* Unrecognized escapes turn into the character itself. */
1990 obstack_1grow (output, *tokptr);
1998 /* Parse a string or character literal from TOKPTR. The string or
1999 character may be wide or unicode. *OUTPTR is set to just after the
2000 end of the literal in the input string. The resulting token is
2001 stored in VALUE. This returns a token value, either STRING or
2002 CHAR, depending on what was parsed. *HOST_CHARS is set to the
2003 number of host characters in the literal. */
2005 parse_string_or_char (char *tokptr, char **outptr, struct typed_stoken *value,
2009 enum c_string_type type;
2012 /* Build the gdb internal form of the input string in tempbuf. Note
2013 that the buffer is null byte terminated *only* for the
2014 convenience of debugging gdb itself and printing the buffer
2015 contents when the buffer contains no embedded nulls. Gdb does
2016 not depend upon the buffer being null byte terminated, it uses
2017 the length string instead. This allows gdb to handle C strings
2018 (as well as strings in other languages) with embedded null
2024 obstack_free (&tempbuf, NULL);
2025 obstack_init (&tempbuf);
2027 /* Record the string type. */
2030 type = C_WIDE_STRING;
2033 else if (*tokptr == 'u')
2038 else if (*tokptr == 'U')
2043 else if (*tokptr == '@')
2045 /* An Objective C string. */
2053 /* Skip the quote. */
2067 *host_chars += c_parse_escape (&tokptr, &tempbuf);
2069 else if (c == quote)
2073 obstack_1grow (&tempbuf, c);
2075 /* FIXME: this does the wrong thing with multi-byte host
2076 characters. We could use mbrlen here, but that would
2077 make "set host-charset" a bit less useful. */
2082 if (*tokptr != quote)
2085 error (_("Unterminated string in expression."));
2087 error (_("Unmatched single quote."));
2092 value->ptr = obstack_base (&tempbuf);
2093 value->length = obstack_object_size (&tempbuf);
2097 return quote == '"' ? (is_objc ? NSSTRING : STRING) : CHAR;
2100 /* This is used to associate some attributes with a token. */
2104 /* If this bit is set, the token is C++-only. */
2108 /* If this bit is set, the token is conditional: if there is a
2109 symbol of the same name, then the token is a symbol; otherwise,
2110 the token is a keyword. */
2119 enum exp_opcode opcode;
2120 enum token_flags flags;
2123 static const struct token tokentab3[] =
2125 {">>=", ASSIGN_MODIFY, BINOP_RSH, 0},
2126 {"<<=", ASSIGN_MODIFY, BINOP_LSH, 0},
2127 {"->*", ARROW_STAR, BINOP_END, FLAG_CXX},
2128 {"...", DOTDOTDOT, BINOP_END, 0}
2131 static const struct token tokentab2[] =
2133 {"+=", ASSIGN_MODIFY, BINOP_ADD, 0},
2134 {"-=", ASSIGN_MODIFY, BINOP_SUB, 0},
2135 {"*=", ASSIGN_MODIFY, BINOP_MUL, 0},
2136 {"/=", ASSIGN_MODIFY, BINOP_DIV, 0},
2137 {"%=", ASSIGN_MODIFY, BINOP_REM, 0},
2138 {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR, 0},
2139 {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND, 0},
2140 {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR, 0},
2141 {"++", INCREMENT, BINOP_END, 0},
2142 {"--", DECREMENT, BINOP_END, 0},
2143 {"->", ARROW, BINOP_END, 0},
2144 {"&&", ANDAND, BINOP_END, 0},
2145 {"||", OROR, BINOP_END, 0},
2146 /* "::" is *not* only C++: gdb overrides its meaning in several
2147 different ways, e.g., 'filename'::func, function::variable. */
2148 {"::", COLONCOLON, BINOP_END, 0},
2149 {"<<", LSH, BINOP_END, 0},
2150 {">>", RSH, BINOP_END, 0},
2151 {"==", EQUAL, BINOP_END, 0},
2152 {"!=", NOTEQUAL, BINOP_END, 0},
2153 {"<=", LEQ, BINOP_END, 0},
2154 {">=", GEQ, BINOP_END, 0},
2155 {".*", DOT_STAR, BINOP_END, FLAG_CXX}
2158 /* Identifier-like tokens. */
2159 static const struct token ident_tokens[] =
2161 {"unsigned", UNSIGNED, OP_NULL, 0},
2162 {"template", TEMPLATE, OP_NULL, FLAG_CXX},
2163 {"volatile", VOLATILE_KEYWORD, OP_NULL, 0},
2164 {"struct", STRUCT, OP_NULL, 0},
2165 {"signed", SIGNED_KEYWORD, OP_NULL, 0},
2166 {"sizeof", SIZEOF, OP_NULL, 0},
2167 {"double", DOUBLE_KEYWORD, OP_NULL, 0},
2168 {"false", FALSEKEYWORD, OP_NULL, FLAG_CXX},
2169 {"class", CLASS, OP_NULL, FLAG_CXX},
2170 {"union", UNION, OP_NULL, 0},
2171 {"short", SHORT, OP_NULL, 0},
2172 {"const", CONST_KEYWORD, OP_NULL, 0},
2173 {"enum", ENUM, OP_NULL, 0},
2174 {"long", LONG, OP_NULL, 0},
2175 {"true", TRUEKEYWORD, OP_NULL, FLAG_CXX},
2176 {"int", INT_KEYWORD, OP_NULL, 0},
2177 {"new", NEW, OP_NULL, FLAG_CXX},
2178 {"delete", DELETE, OP_NULL, FLAG_CXX},
2179 {"operator", OPERATOR, OP_NULL, FLAG_CXX},
2181 {"and", ANDAND, BINOP_END, FLAG_CXX},
2182 {"and_eq", ASSIGN_MODIFY, BINOP_BITWISE_AND, FLAG_CXX},
2183 {"bitand", '&', OP_NULL, FLAG_CXX},
2184 {"bitor", '|', OP_NULL, FLAG_CXX},
2185 {"compl", '~', OP_NULL, FLAG_CXX},
2186 {"not", '!', OP_NULL, FLAG_CXX},
2187 {"not_eq", NOTEQUAL, BINOP_END, FLAG_CXX},
2188 {"or", OROR, BINOP_END, FLAG_CXX},
2189 {"or_eq", ASSIGN_MODIFY, BINOP_BITWISE_IOR, FLAG_CXX},
2190 {"xor", '^', OP_NULL, FLAG_CXX},
2191 {"xor_eq", ASSIGN_MODIFY, BINOP_BITWISE_XOR, FLAG_CXX},
2193 {"const_cast", CONST_CAST, OP_NULL, FLAG_CXX },
2194 {"dynamic_cast", DYNAMIC_CAST, OP_NULL, FLAG_CXX },
2195 {"static_cast", STATIC_CAST, OP_NULL, FLAG_CXX },
2196 {"reinterpret_cast", REINTERPRET_CAST, OP_NULL, FLAG_CXX },
2198 {"__typeof__", TYPEOF, OP_TYPEOF, 0 },
2199 {"__typeof", TYPEOF, OP_TYPEOF, 0 },
2200 {"typeof", TYPEOF, OP_TYPEOF, FLAG_SHADOW },
2201 {"__decltype", DECLTYPE, OP_DECLTYPE, FLAG_CXX },
2202 {"decltype", DECLTYPE, OP_DECLTYPE, FLAG_CXX | FLAG_SHADOW }
2205 /* When we find that lexptr (the global var defined in parse.c) is
2206 pointing at a macro invocation, we expand the invocation, and call
2207 scan_macro_expansion to save the old lexptr here and point lexptr
2208 into the expanded text. When we reach the end of that, we call
2209 end_macro_expansion to pop back to the value we saved here. The
2210 macro expansion code promises to return only fully-expanded text,
2211 so we don't need to "push" more than one level.
2213 This is disgusting, of course. It would be cleaner to do all macro
2214 expansion beforehand, and then hand that to lexptr. But we don't
2215 really know where the expression ends. Remember, in a command like
2217 (gdb) break *ADDRESS if CONDITION
2219 we evaluate ADDRESS in the scope of the current frame, but we
2220 evaluate CONDITION in the scope of the breakpoint's location. So
2221 it's simply wrong to try to macro-expand the whole thing at once. */
2222 static char *macro_original_text;
2224 /* We save all intermediate macro expansions on this obstack for the
2225 duration of a single parse. The expansion text may sometimes have
2226 to live past the end of the expansion, due to yacc lookahead.
2227 Rather than try to be clever about saving the data for a single
2228 token, we simply keep it all and delete it after parsing has
2230 static struct obstack expansion_obstack;
2233 scan_macro_expansion (char *expansion)
2237 /* We'd better not be trying to push the stack twice. */
2238 gdb_assert (! macro_original_text);
2240 /* Copy to the obstack, and then free the intermediate
2242 copy = obstack_copy0 (&expansion_obstack, expansion, strlen (expansion));
2245 /* Save the old lexptr value, so we can return to it when we're done
2246 parsing the expanded text. */
2247 macro_original_text = lexptr;
2253 scanning_macro_expansion (void)
2255 return macro_original_text != 0;
2260 finished_macro_expansion (void)
2262 /* There'd better be something to pop back to. */
2263 gdb_assert (macro_original_text);
2265 /* Pop back to the original text. */
2266 lexptr = macro_original_text;
2267 macro_original_text = 0;
2272 scan_macro_cleanup (void *dummy)
2274 if (macro_original_text)
2275 finished_macro_expansion ();
2277 obstack_free (&expansion_obstack, NULL);
2280 /* Return true iff the token represents a C++ cast operator. */
2283 is_cast_operator (const char *token, int len)
2285 return (! strncmp (token, "dynamic_cast", len)
2286 || ! strncmp (token, "static_cast", len)
2287 || ! strncmp (token, "reinterpret_cast", len)
2288 || ! strncmp (token, "const_cast", len));
2291 /* The scope used for macro expansion. */
2292 static struct macro_scope *expression_macro_scope;
2294 /* This is set if a NAME token appeared at the very end of the input
2295 string, with no whitespace separating the name from the EOF. This
2296 is used only when parsing to do field name completion. */
2297 static int saw_name_at_eof;
2299 /* This is set if the previously-returned token was a structure
2300 operator -- either '.' or ARROW. This is used only when parsing to
2301 do field name completion. */
2302 static int last_was_structop;
2304 /* Read one token, getting characters through lexptr. */
2307 lex_one_token (void)
2313 int saw_structop = last_was_structop;
2316 last_was_structop = 0;
2320 /* Check if this is a macro invocation that we need to expand. */
2321 if (! scanning_macro_expansion ())
2323 char *expanded = macro_expand_next (&lexptr,
2324 standard_macro_lookup,
2325 expression_macro_scope);
2328 scan_macro_expansion (expanded);
2331 prev_lexptr = lexptr;
2334 /* See if it is a special token of length 3. */
2335 for (i = 0; i < sizeof tokentab3 / sizeof tokentab3[0]; i++)
2336 if (strncmp (tokstart, tokentab3[i].operator, 3) == 0)
2338 if ((tokentab3[i].flags & FLAG_CXX) != 0
2339 && parse_language->la_language != language_cplus)
2343 yylval.opcode = tokentab3[i].opcode;
2344 return tokentab3[i].token;
2347 /* See if it is a special token of length 2. */
2348 for (i = 0; i < sizeof tokentab2 / sizeof tokentab2[0]; i++)
2349 if (strncmp (tokstart, tokentab2[i].operator, 2) == 0)
2351 if ((tokentab2[i].flags & FLAG_CXX) != 0
2352 && parse_language->la_language != language_cplus)
2356 yylval.opcode = tokentab2[i].opcode;
2357 if (in_parse_field && tokentab2[i].token == ARROW)
2358 last_was_structop = 1;
2359 return tokentab2[i].token;
2362 switch (c = *tokstart)
2365 /* If we were just scanning the result of a macro expansion,
2366 then we need to resume scanning the original text.
2367 If we're parsing for field name completion, and the previous
2368 token allows such completion, return a COMPLETE token.
2369 Otherwise, we were already scanning the original text, and
2370 we're really done. */
2371 if (scanning_macro_expansion ())
2373 finished_macro_expansion ();
2376 else if (saw_name_at_eof)
2378 saw_name_at_eof = 0;
2381 else if (saw_structop)
2396 if (parse_language->la_language == language_objc && c == '[')
2402 if (paren_depth == 0)
2409 if (comma_terminates
2411 && ! scanning_macro_expansion ())
2417 /* Might be a floating point number. */
2418 if (lexptr[1] < '0' || lexptr[1] > '9')
2421 last_was_structop = 1;
2422 goto symbol; /* Nope, must be a symbol. */
2424 /* FALL THRU into number case. */
2437 /* It's a number. */
2438 int got_dot = 0, got_e = 0, toktype;
2440 int hex = input_radix > 10;
2442 if (c == '0' && (p[1] == 'x' || p[1] == 'X'))
2447 else if (c == '0' && (p[1]=='t' || p[1]=='T' || p[1]=='d' || p[1]=='D'))
2455 /* This test includes !hex because 'e' is a valid hex digit
2456 and thus does not indicate a floating point number when
2457 the radix is hex. */
2458 if (!hex && !got_e && (*p == 'e' || *p == 'E'))
2459 got_dot = got_e = 1;
2460 /* This test does not include !hex, because a '.' always indicates
2461 a decimal floating point number regardless of the radix. */
2462 else if (!got_dot && *p == '.')
2464 else if (got_e && (p[-1] == 'e' || p[-1] == 'E')
2465 && (*p == '-' || *p == '+'))
2466 /* This is the sign of the exponent, not the end of the
2469 /* We will take any letters or digits. parse_number will
2470 complain if past the radix, or if L or U are not final. */
2471 else if ((*p < '0' || *p > '9')
2472 && ((*p < 'a' || *p > 'z')
2473 && (*p < 'A' || *p > 'Z')))
2476 toktype = parse_number (tokstart, p - tokstart, got_dot|got_e, &yylval);
2477 if (toktype == ERROR)
2479 char *err_copy = (char *) alloca (p - tokstart + 1);
2481 memcpy (err_copy, tokstart, p - tokstart);
2482 err_copy[p - tokstart] = 0;
2483 error (_("Invalid number \"%s\"."), err_copy);
2491 char *p = &tokstart[1];
2492 size_t len = strlen ("entry");
2494 if (parse_language->la_language == language_objc)
2496 size_t len = strlen ("selector");
2498 if (strncmp (p, "selector", len) == 0
2499 && (p[len] == '\0' || isspace (p[len])))
2508 while (isspace (*p))
2510 if (strncmp (p, "entry", len) == 0 && !isalnum (p[len])
2542 if (tokstart[1] != '"' && tokstart[1] != '\'')
2551 int result = parse_string_or_char (tokstart, &lexptr, &yylval.tsval,
2556 error (_("Empty character constant."));
2557 else if (host_len > 2 && c == '\'')
2560 namelen = lexptr - tokstart - 1;
2563 else if (host_len > 1)
2564 error (_("Invalid character constant."));
2570 if (!(c == '_' || c == '$'
2571 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')))
2572 /* We must have come across a bad character (e.g. ';'). */
2573 error (_("Invalid character '%c' in expression."), c);
2575 /* It's a name. See how long it is. */
2577 for (c = tokstart[namelen];
2578 (c == '_' || c == '$' || (c >= '0' && c <= '9')
2579 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '<');)
2581 /* Template parameter lists are part of the name.
2582 FIXME: This mishandles `print $a<4&&$a>3'. */
2586 if (! is_cast_operator (tokstart, namelen))
2588 /* Scan ahead to get rest of the template specification. Note
2589 that we look ahead only when the '<' adjoins non-whitespace
2590 characters; for comparison expressions, e.g. "a < b > c",
2591 there must be spaces before the '<', etc. */
2593 char * p = find_template_name_end (tokstart + namelen);
2595 namelen = p - tokstart;
2599 c = tokstart[++namelen];
2602 /* The token "if" terminates the expression and is NOT removed from
2603 the input stream. It doesn't count if it appears in the
2604 expansion of a macro. */
2606 && tokstart[0] == 'i'
2607 && tokstart[1] == 'f'
2608 && ! scanning_macro_expansion ())
2613 /* For the same reason (breakpoint conditions), "thread N"
2614 terminates the expression. "thread" could be an identifier, but
2615 an identifier is never followed by a number without intervening
2616 punctuation. "task" is similar. Handle abbreviations of these,
2617 similarly to breakpoint.c:find_condition_and_thread. */
2619 && (strncmp (tokstart, "thread", namelen) == 0
2620 || strncmp (tokstart, "task", namelen) == 0)
2621 && (tokstart[namelen] == ' ' || tokstart[namelen] == '\t')
2622 && ! scanning_macro_expansion ())
2624 char *p = tokstart + namelen + 1;
2625 while (*p == ' ' || *p == '\t')
2627 if (*p >= '0' && *p <= '9')
2635 yylval.sval.ptr = tokstart;
2636 yylval.sval.length = namelen;
2638 /* Catch specific keywords. */
2639 copy = copy_name (yylval.sval);
2640 for (i = 0; i < sizeof ident_tokens / sizeof ident_tokens[0]; i++)
2641 if (strcmp (copy, ident_tokens[i].operator) == 0)
2643 if ((ident_tokens[i].flags & FLAG_CXX) != 0
2644 && parse_language->la_language != language_cplus)
2647 if ((ident_tokens[i].flags & FLAG_SHADOW) != 0)
2649 int is_a_field_of_this = 0;
2651 if (lookup_symbol (copy, expression_context_block,
2653 (parse_language->la_language == language_cplus
2654 ? &is_a_field_of_this
2658 /* The keyword is shadowed. */
2663 /* It is ok to always set this, even though we don't always
2664 strictly need to. */
2665 yylval.opcode = ident_tokens[i].opcode;
2666 return ident_tokens[i].token;
2669 if (*tokstart == '$')
2672 if (in_parse_field && *lexptr == '\0')
2673 saw_name_at_eof = 1;
2677 /* An object of this type is pushed on a FIFO by the "outer" lexer. */
2684 DEF_VEC_O (token_and_value);
2686 /* A FIFO of tokens that have been read but not yet returned to the
2688 static VEC (token_and_value) *token_fifo;
2690 /* Non-zero if the lexer should return tokens from the FIFO. */
2693 /* Temporary storage for c_lex; this holds symbol names as they are
2695 static struct obstack name_obstack;
2697 /* Classify a NAME token. The contents of the token are in `yylval'.
2698 Updates yylval and returns the new token type. BLOCK is the block
2699 in which lookups start; this can be NULL to mean the global
2702 classify_name (const struct block *block)
2706 int is_a_field_of_this = 0;
2708 copy = copy_name (yylval.sval);
2710 sym = lookup_symbol (copy, block, VAR_DOMAIN,
2711 parse_language->la_name_of_this
2712 ? &is_a_field_of_this : (int *) NULL);
2714 if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK)
2716 yylval.ssym.sym = sym;
2717 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
2722 /* See if it's a file name. */
2723 struct symtab *symtab;
2725 symtab = lookup_symtab (copy);
2728 yylval.bval = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK);
2733 if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF)
2735 yylval.tsym.type = SYMBOL_TYPE (sym);
2740 = language_lookup_primitive_type_by_name (parse_language,
2741 parse_gdbarch, copy);
2742 if (yylval.tsym.type != NULL)
2745 /* See if it's an ObjC classname. */
2746 if (parse_language->la_language == language_objc && !sym)
2748 CORE_ADDR Class = lookup_objc_class (parse_gdbarch, copy);
2751 yylval.class.class = Class;
2752 sym = lookup_struct_typedef (copy, expression_context_block, 1);
2754 yylval.class.type = SYMBOL_TYPE (sym);
2759 /* Input names that aren't symbols but ARE valid hex numbers, when
2760 the input radix permits them, can be names or numbers depending
2761 on the parse. Note we support radixes > 16 here. */
2763 && ((copy[0] >= 'a' && copy[0] < 'a' + input_radix - 10)
2764 || (copy[0] >= 'A' && copy[0] < 'A' + input_radix - 10)))
2766 YYSTYPE newlval; /* Its value is ignored. */
2767 int hextype = parse_number (copy, yylval.sval.length, 0, &newlval);
2770 yylval.ssym.sym = sym;
2771 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
2776 /* Any other kind of symbol */
2777 yylval.ssym.sym = sym;
2778 yylval.ssym.is_a_field_of_this = is_a_field_of_this;
2781 && parse_language->la_language == language_cplus
2782 && !is_a_field_of_this
2783 && !lookup_minimal_symbol (copy, NULL, NULL))
2784 return UNKNOWN_CPP_NAME;
2789 /* Like classify_name, but used by the inner loop of the lexer, when a
2790 name might have already been seen. FIRST_NAME is true if the token
2791 in `yylval' is the first component of a name, false otherwise. */
2794 classify_inner_name (const struct block *block, int first_name)
2796 struct type *type, *new_type;
2800 return classify_name (block);
2802 type = check_typedef (yylval.tsym.type);
2803 if (TYPE_CODE (type) != TYPE_CODE_STRUCT
2804 && TYPE_CODE (type) != TYPE_CODE_UNION
2805 && TYPE_CODE (type) != TYPE_CODE_NAMESPACE)
2808 copy = copy_name (yylval.tsym.stoken);
2809 yylval.ssym.sym = cp_lookup_nested_symbol (yylval.tsym.type, copy, block);
2810 if (yylval.ssym.sym == NULL)
2813 switch (SYMBOL_CLASS (yylval.ssym.sym))
2820 yylval.tsym.type = SYMBOL_TYPE (yylval.ssym.sym);;
2824 yylval.ssym.is_a_field_of_this = 0;
2827 internal_error (__FILE__, __LINE__, _("not reached"));
2830 /* The outer level of a two-level lexer. This calls the inner lexer
2831 to return tokens. It then either returns these tokens, or
2832 aggregates them into a larger token. This lets us work around a
2833 problem in our parsing approach, where the parser could not
2834 distinguish between qualified names and qualified types at the
2837 This approach is still not ideal, because it mishandles template
2838 types. See the comment in lex_one_token for an example. However,
2839 this is still an improvement over the earlier approach, and will
2840 suffice until we move to better parsing technology. */
2844 token_and_value current;
2845 int first_was_coloncolon, last_was_coloncolon, first_iter;
2847 if (popping && !VEC_empty (token_and_value, token_fifo))
2849 token_and_value tv = *VEC_index (token_and_value, token_fifo, 0);
2850 VEC_ordered_remove (token_and_value, token_fifo, 0);
2856 current.token = lex_one_token ();
2857 if (current.token == NAME)
2858 current.token = classify_name (expression_context_block);
2859 if (parse_language->la_language != language_cplus
2860 || (current.token != TYPENAME && current.token != COLONCOLON))
2861 return current.token;
2863 first_was_coloncolon = current.token == COLONCOLON;
2864 last_was_coloncolon = first_was_coloncolon;
2865 obstack_free (&name_obstack, obstack_base (&name_obstack));
2866 if (!last_was_coloncolon)
2867 obstack_grow (&name_obstack, yylval.sval.ptr, yylval.sval.length);
2868 current.value = yylval;
2872 token_and_value next;
2874 next.token = lex_one_token ();
2875 next.value = yylval;
2877 if (next.token == NAME && last_was_coloncolon)
2881 classification = classify_inner_name (first_was_coloncolon
2883 : expression_context_block,
2885 /* We keep going until we either run out of names, or until
2886 we have a qualified name which is not a type. */
2887 if (classification != TYPENAME && classification != NAME)
2889 /* Push the final component and leave the loop. */
2890 VEC_safe_push (token_and_value, token_fifo, &next);
2894 /* Update the partial name we are constructing. */
2897 /* We don't want to put a leading "::" into the name. */
2898 obstack_grow_str (&name_obstack, "::");
2900 obstack_grow (&name_obstack, next.value.sval.ptr,
2901 next.value.sval.length);
2903 yylval.sval.ptr = obstack_base (&name_obstack);
2904 yylval.sval.length = obstack_object_size (&name_obstack);
2905 current.value = yylval;
2906 current.token = classification;
2908 last_was_coloncolon = 0;
2910 else if (next.token == COLONCOLON && !last_was_coloncolon)
2911 last_was_coloncolon = 1;
2914 /* We've reached the end of the name. */
2915 VEC_safe_push (token_and_value, token_fifo, &next);
2924 /* If we ended with a "::", insert it too. */
2925 if (last_was_coloncolon)
2928 memset (&cc, 0, sizeof (token_and_value));
2929 if (first_was_coloncolon && first_iter)
2934 cc.token = COLONCOLON;
2935 VEC_safe_insert (token_and_value, token_fifo, 0, &cc);
2938 yylval = current.value;
2939 yylval.sval.ptr = obstack_copy0 (&expansion_obstack,
2941 yylval.sval.length);
2942 return current.token;
2949 struct cleanup *back_to = make_cleanup (free_current_contents,
2950 &expression_macro_scope);
2952 /* Set up the scope for macro expansion. */
2953 expression_macro_scope = NULL;
2955 if (expression_context_block)
2956 expression_macro_scope
2957 = sal_macro_scope (find_pc_line (expression_context_pc, 0));
2959 expression_macro_scope = default_macro_scope ();
2960 if (! expression_macro_scope)
2961 expression_macro_scope = user_macro_scope ();
2963 /* Initialize macro expansion code. */
2964 obstack_init (&expansion_obstack);
2965 gdb_assert (! macro_original_text);
2966 make_cleanup (scan_macro_cleanup, 0);
2968 make_cleanup_restore_integer (&yydebug);
2969 yydebug = parser_debug;
2971 /* Initialize some state used by the lexer. */
2972 last_was_structop = 0;
2973 saw_name_at_eof = 0;
2975 VEC_free (token_and_value, token_fifo);
2977 obstack_init (&name_obstack);
2978 make_cleanup_obstack_free (&name_obstack);
2980 result = yyparse ();
2981 do_cleanups (back_to);
2990 lexptr = prev_lexptr;
2992 error (_("A %s in expression, near `%s'."), (msg ? msg : "error"), lexptr);