1 /* YACC parser for C expressions, for GDB.
2 Copyright (C) 1986, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
3 1998, 1999, 2000, 2003, 2004, 2006
4 Free Software Foundation, Inc.
6 This file is part of GDB.
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 Boston, MA 02110-1301, USA. */
23 /* Parse a C expression from text in a string,
24 and return the result as a struct expression pointer.
25 That structure contains arithmetic operations in reverse polish,
26 with constants represented by operations that are followed by special data.
27 See expression.h for the details of the format.
28 What is important here is that it can be built up sequentially
29 during the process of parsing; the lower levels of the tree always
30 come first in the result.
32 Note that malloc's and realloc's in this file are transformed to
33 xmalloc and xrealloc respectively by the same sed command in the
34 makefile that remaps any other malloc/realloc inserted by the parser
35 generator. Doing this with #defines and trying to control the interaction
36 with include files (<malloc.h> and <stdlib.h> for example) just became
37 too messy, particularly when such includes can be inserted at random
38 times by the parser generator. */
43 #include "gdb_string.h"
45 #include "expression.h"
47 #include "parser-defs.h"
50 #include "bfd.h" /* Required by objfiles.h. */
51 #include "symfile.h" /* Required by objfiles.h. */
52 #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */
55 #include "cp-support.h"
57 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc),
58 as well as gratuitiously global symbol names, so we can have multiple
59 yacc generated parsers in gdb. Note that these are only the variables
60 produced by yacc. If other parser generators (bison, byacc, etc) produce
61 additional global names that conflict at link time, then those parser
62 generators need to be fixed instead of adding those names to this list. */
64 #define yymaxdepth c_maxdepth
65 #define yyparse c_parse
67 #define yyerror c_error
70 #define yydebug c_debug
79 #define yyerrflag c_errflag
80 #define yynerrs c_nerrs
85 #define yystate c_state
91 #define yyreds c_reds /* With YYDEBUG defined */
92 #define yytoks c_toks /* With YYDEBUG defined */
93 #define yyname c_name /* With YYDEBUG defined */
94 #define yyrule c_rule /* With YYDEBUG defined */
97 #define yydefred c_yydefred
98 #define yydgoto c_yydgoto
99 #define yysindex c_yysindex
100 #define yyrindex c_yyrindex
101 #define yygindex c_yygindex
102 #define yytable c_yytable
103 #define yycheck c_yycheck
106 #define YYDEBUG 1 /* Default to yydebug support */
109 #define YYFPRINTF parser_fprintf
113 static int yylex (void);
115 void yyerror (char *);
119 /* Although the yacc "value" of an expression is not used,
120 since the result is stored in the structure being created,
121 other node types do have values. */
138 struct symtoken ssym
;
141 enum exp_opcode opcode
;
142 struct internalvar
*ivar
;
149 /* YYSTYPE gets defined by %union */
150 static int parse_number
(char *, int, int, YYSTYPE *);
153 %type
<voidval
> exp exp1 type_exp start variable qualified_name lcurly
155 %type
<tval
> type typebase qualified_type
156 %type
<tvec
> nonempty_typelist
157 /* %type <bval> block */
159 /* Fancy type parsing. */
160 %type
<voidval
> func_mod direct_abs_decl abs_decl
162 %type
<lval
> array_mod
164 %token
<typed_val_int
> INT
165 %token
<typed_val_float
> FLOAT
167 /* Both NAME and TYPENAME tokens represent symbols in the input,
168 and both convey their data as strings.
169 But a TYPENAME is a string that happens to be defined as a typedef
170 or builtin type name (such as int or char)
171 and a NAME is any other symbol.
172 Contexts where this distinction is not important can use the
173 nonterminal "name", which matches either NAME or TYPENAME. */
176 %token
<ssym
> NAME
/* BLOCKNAME defined below to give it higher precedence. */
177 %token
<tsym
> TYPENAME
179 %type
<ssym
> name_not_typename
180 %type
<tsym
> typename
182 /* A NAME_OR_INT is a symbol which is not known in the symbol table,
183 but which would parse as a valid number in the current input radix.
184 E.g. "c" when input_radix==16. Depending on the parse, it will be
185 turned into a name or into a number. */
187 %token
<ssym
> NAME_OR_INT
189 %token STRUCT CLASS UNION ENUM SIZEOF UNSIGNED COLONCOLON
193 /* Special type cases, put in to allow the parser to distinguish different
195 %token SIGNED_KEYWORD LONG SHORT INT_KEYWORD CONST_KEYWORD VOLATILE_KEYWORD DOUBLE_KEYWORD
197 %token
<voidval
> VARIABLE
199 %token
<opcode
> ASSIGN_MODIFY
208 %right
'=' ASSIGN_MODIFY
216 %left
'<' '>' LEQ GEQ
221 %right UNARY INCREMENT DECREMENT
222 %right ARROW
'.' '[' '('
223 %token
<ssym
> BLOCKNAME
224 %token
<bval
> FILENAME
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_PLUS
); }
264 exp
: '!' exp %prec UNARY
265 { write_exp_elt_opcode
(UNOP_LOGICAL_NOT
); }
268 exp
: '~' exp %prec UNARY
269 { write_exp_elt_opcode
(UNOP_COMPLEMENT
); }
272 exp
: INCREMENT exp %prec UNARY
273 { write_exp_elt_opcode
(UNOP_PREINCREMENT
); }
276 exp
: DECREMENT exp %prec UNARY
277 { write_exp_elt_opcode
(UNOP_PREDECREMENT
); }
280 exp
: exp INCREMENT %prec UNARY
281 { write_exp_elt_opcode
(UNOP_POSTINCREMENT
); }
284 exp
: exp DECREMENT %prec UNARY
285 { write_exp_elt_opcode
(UNOP_POSTDECREMENT
); }
288 exp
: SIZEOF exp %prec UNARY
289 { write_exp_elt_opcode
(UNOP_SIZEOF
); }
293 { write_exp_elt_opcode
(STRUCTOP_PTR
);
294 write_exp_string
($3);
295 write_exp_elt_opcode
(STRUCTOP_PTR
); }
298 exp
: exp ARROW qualified_name
299 { /* exp->type::name becomes exp->*(&type::name) */
300 /* Note: this doesn't work if name is a
301 static member! FIXME */
302 write_exp_elt_opcode
(UNOP_ADDR
);
303 write_exp_elt_opcode
(STRUCTOP_MPTR
); }
306 exp
: exp ARROW
'*' exp
307 { write_exp_elt_opcode
(STRUCTOP_MPTR
); }
311 { write_exp_elt_opcode
(STRUCTOP_STRUCT
);
312 write_exp_string
($3);
313 write_exp_elt_opcode
(STRUCTOP_STRUCT
); }
316 exp
: exp
'.' qualified_name
317 { /* exp.type::name becomes exp.*(&type::name) */
318 /* Note: this doesn't work if name is a
319 static member! FIXME */
320 write_exp_elt_opcode
(UNOP_ADDR
);
321 write_exp_elt_opcode
(STRUCTOP_MEMBER
); }
324 exp
: exp
'.' '*' exp
325 { write_exp_elt_opcode
(STRUCTOP_MEMBER
); }
328 exp
: exp
'[' exp1
']'
329 { write_exp_elt_opcode
(BINOP_SUBSCRIPT
); }
333 /* This is to save the value of arglist_len
334 being accumulated by an outer function call. */
335 { start_arglist
(); }
336 arglist
')' %prec ARROW
337 { write_exp_elt_opcode
(OP_FUNCALL
);
338 write_exp_elt_longcst
((LONGEST
) end_arglist
());
339 write_exp_elt_opcode
(OP_FUNCALL
); }
343 { start_arglist
(); }
353 arglist
: arglist
',' exp %prec ABOVE_COMMA
358 { $$
= end_arglist
() - 1; }
360 exp
: lcurly arglist rcurly %prec ARROW
361 { write_exp_elt_opcode
(OP_ARRAY
);
362 write_exp_elt_longcst
((LONGEST
) 0);
363 write_exp_elt_longcst
((LONGEST
) $3);
364 write_exp_elt_opcode
(OP_ARRAY
); }
367 exp
: lcurly type rcurly exp %prec UNARY
368 { write_exp_elt_opcode
(UNOP_MEMVAL
);
369 write_exp_elt_type
($2);
370 write_exp_elt_opcode
(UNOP_MEMVAL
); }
373 exp
: '(' type
')' exp %prec UNARY
374 { write_exp_elt_opcode
(UNOP_CAST
);
375 write_exp_elt_type
($2);
376 write_exp_elt_opcode
(UNOP_CAST
); }
383 /* Binary operators in order of decreasing precedence. */
386 { write_exp_elt_opcode
(BINOP_REPEAT
); }
390 { write_exp_elt_opcode
(BINOP_MUL
); }
394 { write_exp_elt_opcode
(BINOP_DIV
); }
398 { write_exp_elt_opcode
(BINOP_REM
); }
402 { write_exp_elt_opcode
(BINOP_ADD
); }
406 { write_exp_elt_opcode
(BINOP_SUB
); }
410 { write_exp_elt_opcode
(BINOP_LSH
); }
414 { write_exp_elt_opcode
(BINOP_RSH
); }
418 { write_exp_elt_opcode
(BINOP_EQUAL
); }
421 exp
: exp NOTEQUAL exp
422 { write_exp_elt_opcode
(BINOP_NOTEQUAL
); }
426 { write_exp_elt_opcode
(BINOP_LEQ
); }
430 { write_exp_elt_opcode
(BINOP_GEQ
); }
434 { write_exp_elt_opcode
(BINOP_LESS
); }
438 { write_exp_elt_opcode
(BINOP_GTR
); }
442 { write_exp_elt_opcode
(BINOP_BITWISE_AND
); }
446 { write_exp_elt_opcode
(BINOP_BITWISE_XOR
); }
450 { write_exp_elt_opcode
(BINOP_BITWISE_IOR
); }
454 { write_exp_elt_opcode
(BINOP_LOGICAL_AND
); }
458 { write_exp_elt_opcode
(BINOP_LOGICAL_OR
); }
461 exp
: exp
'?' exp
':' exp %prec
'?'
462 { write_exp_elt_opcode
(TERNOP_COND
); }
466 { write_exp_elt_opcode
(BINOP_ASSIGN
); }
469 exp
: exp ASSIGN_MODIFY exp
470 { write_exp_elt_opcode
(BINOP_ASSIGN_MODIFY
);
471 write_exp_elt_opcode
($2);
472 write_exp_elt_opcode
(BINOP_ASSIGN_MODIFY
); }
476 { write_exp_elt_opcode
(OP_LONG
);
477 write_exp_elt_type
($1.type
);
478 write_exp_elt_longcst
((LONGEST
)($1.val
));
479 write_exp_elt_opcode
(OP_LONG
); }
484 parse_number
($1.stoken.ptr
, $1.stoken.length
, 0, &val
);
485 write_exp_elt_opcode
(OP_LONG
);
486 write_exp_elt_type
(val.typed_val_int.type
);
487 write_exp_elt_longcst
((LONGEST
)val.typed_val_int.val
);
488 write_exp_elt_opcode
(OP_LONG
);
494 { write_exp_elt_opcode
(OP_DOUBLE
);
495 write_exp_elt_type
($1.type
);
496 write_exp_elt_dblcst
($1.dval
);
497 write_exp_elt_opcode
(OP_DOUBLE
); }
504 /* Already written by write_dollar_variable. */
507 exp
: SIZEOF
'(' type
')' %prec UNARY
508 { write_exp_elt_opcode
(OP_LONG
);
509 write_exp_elt_type
(builtin_type
(current_gdbarch
)->builtin_int
);
511 write_exp_elt_longcst
((LONGEST
) TYPE_LENGTH
($3));
512 write_exp_elt_opcode
(OP_LONG
); }
516 { /* C strings are converted into array constants with
517 an explicit null byte added at the end. Thus
518 the array upper bound is the string length.
519 There is no such thing in C as a completely empty
521 char *sp
= $1.ptr
; int count
= $1.length
;
524 write_exp_elt_opcode
(OP_LONG
);
525 write_exp_elt_type
(builtin_type
(current_gdbarch
)->builtin_char
);
526 write_exp_elt_longcst
((LONGEST
)(*sp
++));
527 write_exp_elt_opcode
(OP_LONG
);
529 write_exp_elt_opcode
(OP_LONG
);
530 write_exp_elt_type
(builtin_type
(current_gdbarch
)->builtin_char
);
531 write_exp_elt_longcst
((LONGEST
)'\0');
532 write_exp_elt_opcode
(OP_LONG
);
533 write_exp_elt_opcode
(OP_ARRAY
);
534 write_exp_elt_longcst
((LONGEST
) 0);
535 write_exp_elt_longcst
((LONGEST
) ($1.length
));
536 write_exp_elt_opcode
(OP_ARRAY
); }
541 { write_exp_elt_opcode
(OP_LONG
);
542 write_exp_elt_type
(builtin_type
(current_gdbarch
)->builtin_bool
);
543 write_exp_elt_longcst
((LONGEST
) 1);
544 write_exp_elt_opcode
(OP_LONG
); }
548 { write_exp_elt_opcode
(OP_LONG
);
549 write_exp_elt_type
(builtin_type
(current_gdbarch
)->builtin_bool
);
550 write_exp_elt_longcst
((LONGEST
) 0);
551 write_exp_elt_opcode
(OP_LONG
); }
559 $$
= SYMBOL_BLOCK_VALUE
($1.sym
);
561 error ("No file or function \"%s\".",
562 copy_name
($1.stoken
));
570 block
: block COLONCOLON name
572 = lookup_symbol
(copy_name
($3), $1,
573 VAR_DOMAIN
, (int *) NULL
,
574 (struct symtab
**) NULL
);
575 if
(!tem || SYMBOL_CLASS
(tem
) != LOC_BLOCK
)
576 error ("No function \"%s\" in specified context.",
578 $$
= SYMBOL_BLOCK_VALUE
(tem
); }
581 variable: block COLONCOLON name
582 { struct symbol
*sym
;
583 sym
= lookup_symbol
(copy_name
($3), $1,
584 VAR_DOMAIN
, (int *) NULL
,
585 (struct symtab
**) NULL
);
587 error ("No symbol \"%s\" in specified context.",
590 write_exp_elt_opcode
(OP_VAR_VALUE
);
591 /* block_found is set by lookup_symbol. */
592 write_exp_elt_block
(block_found
);
593 write_exp_elt_sym
(sym
);
594 write_exp_elt_opcode
(OP_VAR_VALUE
); }
597 qualified_name: typebase COLONCOLON name
599 struct type
*type
= $1;
600 if
(TYPE_CODE
(type
) != TYPE_CODE_STRUCT
601 && TYPE_CODE
(type
) != TYPE_CODE_UNION
602 && TYPE_CODE
(type
) != TYPE_CODE_NAMESPACE
)
603 error ("`%s' is not defined as an aggregate type.",
606 write_exp_elt_opcode
(OP_SCOPE
);
607 write_exp_elt_type
(type
);
608 write_exp_string
($3);
609 write_exp_elt_opcode
(OP_SCOPE
);
611 | typebase COLONCOLON
'~' name
613 struct type
*type
= $1;
614 struct stoken tmp_token
;
615 if
(TYPE_CODE
(type
) != TYPE_CODE_STRUCT
616 && TYPE_CODE
(type
) != TYPE_CODE_UNION
617 && TYPE_CODE
(type
) != TYPE_CODE_NAMESPACE
)
618 error ("`%s' is not defined as an aggregate type.",
621 tmp_token.ptr
= (char*) alloca
($4.length
+ 2);
622 tmp_token.length
= $4.length
+ 1;
623 tmp_token.ptr
[0] = '~';
624 memcpy
(tmp_token.ptr
+1, $4.ptr
, $4.length
);
625 tmp_token.ptr
[tmp_token.length
] = 0;
627 /* Check for valid destructor name. */
628 destructor_name_p
(tmp_token.ptr
, type
);
629 write_exp_elt_opcode
(OP_SCOPE
);
630 write_exp_elt_type
(type
);
631 write_exp_string
(tmp_token
);
632 write_exp_elt_opcode
(OP_SCOPE
);
636 variable: qualified_name
639 char *name
= copy_name
($2);
641 struct minimal_symbol
*msymbol
;
644 lookup_symbol
(name
, (const struct block
*) NULL
,
645 VAR_DOMAIN
, (int *) NULL
,
646 (struct symtab
**) NULL
);
649 write_exp_elt_opcode
(OP_VAR_VALUE
);
650 write_exp_elt_block
(NULL
);
651 write_exp_elt_sym
(sym
);
652 write_exp_elt_opcode
(OP_VAR_VALUE
);
656 msymbol
= lookup_minimal_symbol
(name
, NULL
, NULL
);
659 write_exp_msymbol
(msymbol
,
660 lookup_function_type
(builtin_type
(current_gdbarch
)->builtin_int
),
661 builtin_type
(current_gdbarch
)->builtin_int
);
664 if
(!have_full_symbols
() && !have_partial_symbols
())
665 error ("No symbol table is loaded. Use the \"file\" command.");
667 error ("No symbol \"%s\" in current context.", name
);
671 variable: name_not_typename
672 { struct symbol
*sym
= $1.sym
;
676 if
(symbol_read_needs_frame
(sym
))
678 if
(innermost_block
== 0 ||
679 contained_in
(block_found
,
681 innermost_block
= block_found
;
684 write_exp_elt_opcode
(OP_VAR_VALUE
);
685 /* We want to use the selected frame, not
686 another more inner frame which happens to
687 be in the same block. */
688 write_exp_elt_block
(NULL
);
689 write_exp_elt_sym
(sym
);
690 write_exp_elt_opcode
(OP_VAR_VALUE
);
692 else if
($1.is_a_field_of_this
)
694 /* C++: it hangs off of `this'. Must
695 not inadvertently convert from a method call
697 if
(innermost_block
== 0 ||
698 contained_in
(block_found
, innermost_block
))
699 innermost_block
= block_found
;
700 write_exp_elt_opcode
(OP_THIS
);
701 write_exp_elt_opcode
(OP_THIS
);
702 write_exp_elt_opcode
(STRUCTOP_PTR
);
703 write_exp_string
($1.stoken
);
704 write_exp_elt_opcode
(STRUCTOP_PTR
);
708 struct minimal_symbol
*msymbol
;
709 char *arg
= copy_name
($1.stoken
);
712 lookup_minimal_symbol
(arg
, NULL
, NULL
);
715 write_exp_msymbol
(msymbol
,
716 lookup_function_type
(builtin_type
(current_gdbarch
)->builtin_int
),
717 builtin_type
(current_gdbarch
)->builtin_int
);
719 else if
(!have_full_symbols
() && !have_partial_symbols
())
720 error ("No symbol table is loaded. Use the \"file\" command.");
722 error ("No symbol \"%s\" in current context.",
723 copy_name
($1.stoken
));
728 space_identifier
: '@' NAME
729 { push_type_address_space
(copy_name
($2.stoken
));
730 push_type
(tp_space_identifier
);
734 const_or_volatile: const_or_volatile_noopt
738 cv_with_space_id
: const_or_volatile space_identifier const_or_volatile
741 const_or_volatile_or_space_identifier_noopt: cv_with_space_id
742 | const_or_volatile_noopt
745 const_or_volatile_or_space_identifier:
746 const_or_volatile_or_space_identifier_noopt
751 { push_type
(tp_pointer
); $$
= 0; }
753 { push_type
(tp_pointer
); $$
= $2; }
755 { push_type
(tp_reference
); $$
= 0; }
757 { push_type
(tp_reference
); $$
= $2; }
761 direct_abs_decl: '(' abs_decl
')'
763 | direct_abs_decl array_mod
766 push_type
(tp_array
);
771 push_type
(tp_array
);
775 | direct_abs_decl func_mod
776 { push_type
(tp_function
); }
778 { push_type
(tp_function
); }
789 |
'(' nonempty_typelist
')'
790 { free
($2); $$
= 0; }
793 /* We used to try to recognize more pointer to member types here, but
794 that didn't work (shift/reduce conflicts meant that these rules never
795 got executed). The problem is that
796 int (foo::bar::baz::bizzle)
797 is a function type but
798 int (foo::bar::baz::bizzle::*)
799 is a pointer to member type. Stroustrup loses again! */
802 | typebase COLONCOLON
'*'
803 { $$
= lookup_member_type
(builtin_type
(current_gdbarch
)->builtin_int
, $1); }
806 typebase
/* Implements (approximately): (type-qualifier)* type-specifier */
810 { $$
= builtin_type
(current_gdbarch
)->builtin_int
; }
812 { $$
= builtin_type
(current_gdbarch
)->builtin_long
; }
814 { $$
= builtin_type
(current_gdbarch
)->builtin_short
; }
816 { $$
= builtin_type
(current_gdbarch
)->builtin_long
; }
817 | LONG SIGNED_KEYWORD INT_KEYWORD
818 { $$
= builtin_type
(current_gdbarch
)->builtin_long
; }
819 | LONG SIGNED_KEYWORD
820 { $$
= builtin_type
(current_gdbarch
)->builtin_long
; }
821 | SIGNED_KEYWORD LONG INT_KEYWORD
822 { $$
= builtin_type
(current_gdbarch
)->builtin_long
; }
823 | UNSIGNED LONG INT_KEYWORD
824 { $$
= builtin_type
(current_gdbarch
)->builtin_unsigned_long
; }
825 | LONG UNSIGNED INT_KEYWORD
826 { $$
= builtin_type
(current_gdbarch
)->builtin_unsigned_long
; }
828 { $$
= builtin_type
(current_gdbarch
)->builtin_unsigned_long
; }
830 { $$
= builtin_type
(current_gdbarch
)->builtin_long_long
; }
831 | LONG LONG INT_KEYWORD
832 { $$
= builtin_type
(current_gdbarch
)->builtin_long_long
; }
833 | LONG LONG SIGNED_KEYWORD INT_KEYWORD
834 { $$
= builtin_type
(current_gdbarch
)->builtin_long_long
; }
835 | LONG LONG SIGNED_KEYWORD
836 { $$
= builtin_type
(current_gdbarch
)->builtin_long_long
; }
837 | SIGNED_KEYWORD LONG LONG
838 { $$
= builtin_type
(current_gdbarch
)->builtin_long_long
; }
839 | SIGNED_KEYWORD LONG LONG INT_KEYWORD
840 { $$
= builtin_type
(current_gdbarch
)->builtin_long_long
; }
842 { $$
= builtin_type
(current_gdbarch
)->builtin_unsigned_long_long
; }
843 | UNSIGNED LONG LONG INT_KEYWORD
844 { $$
= builtin_type
(current_gdbarch
)->builtin_unsigned_long_long
; }
846 { $$
= builtin_type
(current_gdbarch
)->builtin_unsigned_long_long
; }
847 | LONG LONG UNSIGNED INT_KEYWORD
848 { $$
= builtin_type
(current_gdbarch
)->builtin_unsigned_long_long
; }
850 { $$
= builtin_type
(current_gdbarch
)->builtin_short
; }
851 | SHORT SIGNED_KEYWORD INT_KEYWORD
852 { $$
= builtin_type
(current_gdbarch
)->builtin_short
; }
853 | SHORT SIGNED_KEYWORD
854 { $$
= builtin_type
(current_gdbarch
)->builtin_short
; }
855 | UNSIGNED SHORT INT_KEYWORD
856 { $$
= builtin_type
(current_gdbarch
)->builtin_unsigned_short
; }
858 { $$
= builtin_type
(current_gdbarch
)->builtin_unsigned_short
; }
859 | SHORT UNSIGNED INT_KEYWORD
860 { $$
= builtin_type
(current_gdbarch
)->builtin_unsigned_short
; }
862 { $$
= builtin_type
(current_gdbarch
)->builtin_double
; }
863 | LONG DOUBLE_KEYWORD
864 { $$
= builtin_type
(current_gdbarch
)->builtin_long_double
; }
866 { $$
= lookup_struct
(copy_name
($2),
867 expression_context_block
); }
869 { $$
= lookup_struct
(copy_name
($2),
870 expression_context_block
); }
872 { $$
= lookup_union
(copy_name
($2),
873 expression_context_block
); }
875 { $$
= lookup_enum
(copy_name
($2),
876 expression_context_block
); }
878 { $$
= lookup_unsigned_typename
(TYPE_NAME
($2.type
)); }
880 { $$
= builtin_type
(current_gdbarch
)->builtin_unsigned_int
; }
881 | SIGNED_KEYWORD typename
882 { $$
= lookup_signed_typename
(TYPE_NAME
($2.type
)); }
884 { $$
= builtin_type
(current_gdbarch
)->builtin_int
; }
885 /* It appears that this rule for templates is never
886 reduced; template recognition happens by lookahead
887 in the token processing code in yylex. */
888 | TEMPLATE name
'<' type
'>'
889 { $$
= lookup_template_type
(copy_name
($2), $4,
890 expression_context_block
);
892 | const_or_volatile_or_space_identifier_noopt typebase
893 { $$
= follow_types
($2); }
894 | typebase const_or_volatile_or_space_identifier_noopt
895 { $$
= follow_types
($1); }
899 /* FIXME: carlton/2003-09-25: This next bit leads to lots of
900 reduce-reduce conflicts, because the parser doesn't know whether or
901 not to use qualified_name or qualified_type: the rules are
902 identical. If the parser is parsing 'A::B::x', then, when it sees
903 the second '::', it knows that the expression to the left of it has
904 to be a type, so it uses qualified_type. But if it is parsing just
905 'A::B', then it doesn't have any way of knowing which rule to use,
906 so there's a reduce-reduce conflict; it picks qualified_name, since
907 that occurs earlier in this file than qualified_type.
909 There's no good way to fix this with the grammar as it stands; as
910 far as I can tell, some of the problems arise from ambiguities that
911 GDB introduces ('start' can be either an expression or a type), but
912 some of it is inherent to the nature of C++ (you want to treat the
913 input "(FOO)" fairly differently depending on whether FOO is an
914 expression or a type, and if FOO is a complex expression, this can
915 be hard to determine at the right time). Fortunately, it works
916 pretty well in most cases. For example, if you do 'ptype A::B',
917 where A::B is a nested type, then the parser will mistakenly
918 misidentify it as an expression; but evaluate_subexp will get
919 called with 'noside' set to EVAL_AVOID_SIDE_EFFECTS, and everything
920 will work out anyways. But there are situations where the parser
921 will get confused: the most common one that I've run into is when
926 where the parser doesn't realize that A::B has to be a type until
927 it hits the first right paren, at which point it's too late. (The
928 workaround is to type "print *(('A::B' *) x)" instead.) (And
929 another solution is to fix our symbol-handling code so that the
930 user never wants to type something like that in the first place,
931 because we get all the types right without the user's help!)
933 Perhaps we could fix this by making the lexer smarter. Some of
934 this functionality used to be in the lexer, but in a way that
935 worked even less well than the current solution: that attempt
936 involved having the parser sometimes handle '::' and having the
937 lexer sometimes handle it, and without a clear division of
938 responsibility, it quickly degenerated into a big mess. Probably
939 the eventual correct solution will give more of a role to the lexer
940 (ideally via code that is shared between the lexer and
941 decode_line_1), but I'm not holding my breath waiting for somebody
942 to get around to cleaning this up... */
944 qualified_type: typebase COLONCOLON name
946 struct type
*type
= $1;
947 struct type
*new_type
;
948 char *ncopy
= alloca
($3.length
+ 1);
950 memcpy
(ncopy
, $3.ptr
, $3.length
);
951 ncopy
[$3.length
] = '\0';
953 if
(TYPE_CODE
(type
) != TYPE_CODE_STRUCT
954 && TYPE_CODE
(type
) != TYPE_CODE_UNION
955 && TYPE_CODE
(type
) != TYPE_CODE_NAMESPACE
)
956 error ("`%s' is not defined as an aggregate type.",
959 new_type
= cp_lookup_nested_type
(type
, ncopy
,
960 expression_context_block
);
961 if
(new_type
== NULL
)
962 error ("No type \"%s\" within class or namespace \"%s\".",
963 ncopy
, TYPE_NAME
(type
));
972 $$.stoken.ptr
= "int";
973 $$.stoken.length
= 3;
974 $$.type
= builtin_type
(current_gdbarch
)->builtin_int
;
978 $$.stoken.ptr
= "long";
979 $$.stoken.length
= 4;
980 $$.type
= builtin_type
(current_gdbarch
)->builtin_long
;
984 $$.stoken.ptr
= "short";
985 $$.stoken.length
= 5;
986 $$.type
= builtin_type
(current_gdbarch
)->builtin_short
;
992 { $$
= (struct type
**) malloc
(sizeof
(struct type
*) * 2);
993 $
<ivec
>$
[0] = 1; /* Number of types in vector */
996 | nonempty_typelist
',' type
997 { int len
= sizeof
(struct type
*) * (++($
<ivec
>1[0]) + 1);
998 $$
= (struct type
**) realloc
((char *) $1, len
);
999 $$
[$
<ivec
>$
[0]] = $3;
1004 | ptype const_or_volatile_or_space_identifier abs_decl const_or_volatile_or_space_identifier
1005 { $$
= follow_types
($1); }
1008 const_and_volatile: CONST_KEYWORD VOLATILE_KEYWORD
1009 | VOLATILE_KEYWORD CONST_KEYWORD
1012 const_or_volatile_noopt: const_and_volatile
1013 { push_type
(tp_const
);
1014 push_type
(tp_volatile
);
1017 { push_type
(tp_const
); }
1019 { push_type
(tp_volatile
); }
1022 name
: NAME
{ $$
= $1.stoken
; }
1023 | BLOCKNAME
{ $$
= $1.stoken
; }
1024 | TYPENAME
{ $$
= $1.stoken
; }
1025 | NAME_OR_INT
{ $$
= $1.stoken
; }
1028 name_not_typename
: NAME
1030 /* These would be useful if name_not_typename was useful, but it is just
1031 a fake for "variable", so these cause reduce/reduce conflicts because
1032 the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
1033 =exp) or just an exp. If name_not_typename was ever used in an lvalue
1034 context where only a name could occur, this might be useful.
1041 /* Take care of parsing a number (anything that starts with a digit).
1042 Set yylval and return the token type; update lexptr.
1043 LEN is the number of characters in it. */
1045 /*** Needs some error checking for the float case ***/
1048 parse_number
(p
, len
, parsed_float
, putithere
)
1054 /* FIXME: Shouldn't these be unsigned? We don't deal with negative values
1055 here, and we do kind of silly things like cast to unsigned. */
1062 int base
= input_radix
;
1065 /* Number of "L" suffixes encountered. */
1068 /* We have found a "L" or "U" suffix. */
1069 int found_suffix
= 0;
1072 struct type
*signed_type
;
1073 struct type
*unsigned_type
;
1077 /* It's a float since it contains a point or an exponent. */
1078 char *s
= malloc
(len
);
1079 int num
= 0; /* number of tokens scanned by scanf */
1080 char saved_char
= p
[len
];
1082 p
[len
] = 0; /* null-terminate the token */
1083 num
= sscanf
(p
, DOUBLEST_SCAN_FORMAT
"%s",
1084 &putithere
->typed_val_float.dval
, s
);
1085 p
[len
] = saved_char
; /* restore the input stream */
1088 putithere
->typed_val_float.type
=
1089 builtin_type
(current_gdbarch
)->builtin_double
;
1093 /* See if it has any float suffix: 'f' for float, 'l' for long
1095 if
(!strcasecmp
(s
, "f"))
1096 putithere
->typed_val_float.type
=
1097 builtin_type
(current_gdbarch
)->builtin_float
;
1098 else if
(!strcasecmp
(s
, "l"))
1099 putithere
->typed_val_float.type
=
1100 builtin_type
(current_gdbarch
)->builtin_long_double
;
1108 /* Handle base-switching prefixes 0x, 0t, 0d, 0 */
1142 if
(c
>= 'A' && c
<= 'Z')
1144 if
(c
!= 'l' && c
!= 'u')
1146 if
(c
>= '0' && c
<= '9')
1154 if
(base
> 10 && c
>= 'a' && c
<= 'f')
1158 n
+= i
= c
- 'a' + 10;
1171 return ERROR
; /* Char not a digit */
1174 return ERROR
; /* Invalid digit in this base */
1176 /* Portably test for overflow (only works for nonzero values, so make
1177 a second check for zero). FIXME: Can't we just make n and prevn
1178 unsigned and avoid this? */
1179 if
(c
!= 'l' && c
!= 'u' && (prevn
>= n
) && n
!= 0)
1180 unsigned_p
= 1; /* Try something unsigned */
1182 /* Portably test for unsigned overflow.
1183 FIXME: This check is wrong; for example it doesn't find overflow
1184 on 0x123456789 when LONGEST is 32 bits. */
1185 if
(c
!= 'l' && c
!= 'u' && n
!= 0)
1187 if
((unsigned_p
&& (ULONGEST
) prevn
>= (ULONGEST
) n
))
1188 error ("Numeric constant too large.");
1193 /* An integer constant is an int, a long, or a long long. An L
1194 suffix forces it to be long; an LL suffix forces it to be long
1195 long. If not forced to a larger size, it gets the first type of
1196 the above that it fits in. To figure out whether it fits, we
1197 shift it right and see whether anything remains. Note that we
1198 can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
1199 operation, because many compilers will warn about such a shift
1200 (which always produces a zero result). Sometimes TARGET_INT_BIT
1201 or TARGET_LONG_BIT will be that big, sometimes not. To deal with
1202 the case where it is we just always shift the value more than
1203 once, with fewer bits each time. */
1205 un
= (ULONGEST
)n
>> 2;
1207 && (un
>> (TARGET_INT_BIT
- 2)) == 0)
1209 high_bit
= ((ULONGEST
)1) << (TARGET_INT_BIT
-1);
1211 /* A large decimal (not hex or octal) constant (between INT_MAX
1212 and UINT_MAX) is a long or unsigned long, according to ANSI,
1213 never an unsigned int, but this code treats it as unsigned
1214 int. This probably should be fixed. GCC gives a warning on
1217 unsigned_type
= builtin_type
(current_gdbarch
)->builtin_unsigned_int
;
1218 signed_type
= builtin_type
(current_gdbarch
)->builtin_int
;
1220 else if
(long_p
<= 1
1221 && (un
>> (TARGET_LONG_BIT
- 2)) == 0)
1223 high_bit
= ((ULONGEST
)1) << (TARGET_LONG_BIT
-1);
1224 unsigned_type
= builtin_type
(current_gdbarch
)->builtin_unsigned_long
;
1225 signed_type
= builtin_type
(current_gdbarch
)->builtin_long
;
1230 if
(sizeof
(ULONGEST
) * HOST_CHAR_BIT
< TARGET_LONG_LONG_BIT
)
1231 /* A long long does not fit in a LONGEST. */
1232 shift
= (sizeof
(ULONGEST
) * HOST_CHAR_BIT
- 1);
1234 shift
= (TARGET_LONG_LONG_BIT
- 1);
1235 high_bit
= (ULONGEST
) 1 << shift
;
1236 unsigned_type
= builtin_type
(current_gdbarch
)->builtin_unsigned_long_long
;
1237 signed_type
= builtin_type
(current_gdbarch
)->builtin_long_long
;
1240 putithere
->typed_val_int.val
= n
;
1242 /* If the high bit of the worked out type is set then this number
1243 has to be unsigned. */
1245 if
(unsigned_p ||
(n
& high_bit
))
1247 putithere
->typed_val_int.type
= unsigned_type
;
1251 putithere
->typed_val_int.type
= signed_type
;
1261 enum exp_opcode opcode
;
1264 static const struct token tokentab3
[] =
1266 {">>=", ASSIGN_MODIFY
, BINOP_RSH
},
1267 {"<<=", ASSIGN_MODIFY
, BINOP_LSH
}
1270 static const struct token tokentab2
[] =
1272 {"+=", ASSIGN_MODIFY
, BINOP_ADD
},
1273 {"-=", ASSIGN_MODIFY
, BINOP_SUB
},
1274 {"*=", ASSIGN_MODIFY
, BINOP_MUL
},
1275 {"/=", ASSIGN_MODIFY
, BINOP_DIV
},
1276 {"%=", ASSIGN_MODIFY
, BINOP_REM
},
1277 {"|=", ASSIGN_MODIFY
, BINOP_BITWISE_IOR
},
1278 {"&=", ASSIGN_MODIFY
, BINOP_BITWISE_AND
},
1279 {"^=", ASSIGN_MODIFY
, BINOP_BITWISE_XOR
},
1280 {"++", INCREMENT
, BINOP_END
},
1281 {"--", DECREMENT
, BINOP_END
},
1282 {"->", ARROW
, BINOP_END
},
1283 {"&&", ANDAND
, BINOP_END
},
1284 {"||", OROR
, BINOP_END
},
1285 {"::", COLONCOLON
, BINOP_END
},
1286 {"<<", LSH
, BINOP_END
},
1287 {">>", RSH
, BINOP_END
},
1288 {"==", EQUAL
, BINOP_END
},
1289 {"!=", NOTEQUAL
, BINOP_END
},
1290 {"<=", LEQ
, BINOP_END
},
1291 {">=", GEQ
, BINOP_END
}
1294 /* Read one token, getting characters through lexptr. */
1305 static char *tempbuf
;
1306 static int tempbufsize
;
1307 struct symbol
* sym_class
= NULL
;
1308 char * token_string
= NULL
;
1309 int class_prefix
= 0;
1314 /* Check if this is a macro invocation that we need to expand. */
1315 if
(! scanning_macro_expansion
())
1317 char *expanded
= macro_expand_next
(&lexptr
,
1318 expression_macro_lookup_func
,
1319 expression_macro_lookup_baton
);
1322 scan_macro_expansion
(expanded
);
1325 prev_lexptr
= lexptr
;
1329 /* See if it is a special token of length 3. */
1330 for
(i
= 0; i
< sizeof tokentab3
/ sizeof tokentab3
[0]; i
++)
1331 if
(strncmp
(tokstart
, tokentab3
[i
].operator
, 3) == 0)
1334 yylval.opcode
= tokentab3
[i
].opcode
;
1335 return tokentab3
[i
].token
;
1338 /* See if it is a special token of length 2. */
1339 for
(i
= 0; i
< sizeof tokentab2
/ sizeof tokentab2
[0]; i
++)
1340 if
(strncmp
(tokstart
, tokentab2
[i
].operator
, 2) == 0)
1343 yylval.opcode
= tokentab2
[i
].opcode
;
1344 return tokentab2
[i
].token
;
1347 switch
(c
= *tokstart
)
1350 /* If we were just scanning the result of a macro expansion,
1351 then we need to resume scanning the original text.
1352 Otherwise, we were already scanning the original text, and
1353 we're really done. */
1354 if
(scanning_macro_expansion
())
1356 finished_macro_expansion
();
1369 /* We either have a character constant ('0' or '\177' for example)
1370 or we have a quoted symbol reference ('foo(int,int)' in C++
1375 c
= parse_escape
(&lexptr
);
1377 error ("Empty character constant.");
1378 else if
(! host_char_to_target
(c
, &c
))
1380 int toklen
= lexptr
- tokstart
+ 1;
1381 char *tok
= alloca
(toklen
+ 1);
1382 memcpy
(tok
, tokstart
, toklen
);
1384 error ("There is no character corresponding to %s in the target "
1385 "character set `%s'.", tok
, target_charset
());
1388 yylval.typed_val_int.val
= c
;
1389 yylval.typed_val_int.type
= builtin_type
(current_gdbarch
)->builtin_char
;
1394 namelen
= skip_quoted
(tokstart
) - tokstart
;
1397 lexptr
= tokstart
+ namelen
;
1399 if
(lexptr
[-1] != '\'')
1400 error ("Unmatched single quote.");
1405 error ("Invalid character constant.");
1415 if
(paren_depth
== 0)
1422 if
(comma_terminates
1424 && ! scanning_macro_expansion
())
1430 /* Might be a floating point number. */
1431 if
(lexptr
[1] < '0' || lexptr
[1] > '9')
1432 goto symbol
; /* Nope, must be a symbol. */
1433 /* FALL THRU into number case. */
1446 /* It's a number. */
1447 int got_dot
= 0, got_e
= 0, toktype
;
1449 int hex
= input_radix
> 10;
1451 if
(c
== '0' && (p
[1] == 'x' || p
[1] == 'X'))
1456 else if
(c
== '0' && (p
[1]=='t' || p
[1]=='T' || p
[1]=='d' || p
[1]=='D'))
1464 /* This test includes !hex because 'e' is a valid hex digit
1465 and thus does not indicate a floating point number when
1466 the radix is hex. */
1467 if
(!hex
&& !got_e
&& (*p
== 'e' ||
*p
== 'E'))
1468 got_dot
= got_e
= 1;
1469 /* This test does not include !hex, because a '.' always indicates
1470 a decimal floating point number regardless of the radix. */
1471 else if
(!got_dot
&& *p
== '.')
1473 else if
(got_e
&& (p
[-1] == 'e' || p
[-1] == 'E')
1474 && (*p
== '-' ||
*p
== '+'))
1475 /* This is the sign of the exponent, not the end of the
1478 /* We will take any letters or digits. parse_number will
1479 complain if past the radix, or if L or U are not final. */
1480 else if
((*p
< '0' ||
*p
> '9')
1481 && ((*p
< 'a' ||
*p
> 'z')
1482 && (*p
< 'A' ||
*p
> 'Z')))
1485 toktype
= parse_number
(tokstart
, p
- tokstart
, got_dot|got_e
, &yylval);
1486 if
(toktype
== ERROR
)
1488 char *err_copy
= (char *) alloca
(p
- tokstart
+ 1);
1490 memcpy
(err_copy
, tokstart
, p
- tokstart
);
1491 err_copy
[p
- tokstart
] = 0;
1492 error ("Invalid number \"%s\".", err_copy
);
1524 /* Build the gdb internal form of the input string in tempbuf,
1525 translating any standard C escape forms seen. Note that the
1526 buffer is null byte terminated *only* for the convenience of
1527 debugging gdb itself and printing the buffer contents when
1528 the buffer contains no embedded nulls. Gdb does not depend
1529 upon the buffer being null byte terminated, it uses the length
1530 string instead. This allows gdb to handle C strings (as well
1531 as strings in other languages) with embedded null bytes */
1533 tokptr
= ++tokstart
;
1537 char *char_start_pos
= tokptr
;
1539 /* Grow the static temp buffer if necessary, including allocating
1540 the first one on demand. */
1541 if
(tempbufindex
+ 1 >= tempbufsize
)
1543 tempbuf
= (char *) realloc
(tempbuf
, tempbufsize
+= 64);
1549 /* Do nothing, loop will terminate. */
1553 c
= parse_escape
(&tokptr
);
1558 tempbuf
[tempbufindex
++] = c
;
1562 if
(! host_char_to_target
(c
, &c
))
1564 int len
= tokptr
- char_start_pos
;
1565 char *copy
= alloca
(len
+ 1);
1566 memcpy
(copy
, char_start_pos
, len
);
1569 error ("There is no character corresponding to `%s' "
1570 "in the target character set `%s'.",
1571 copy
, target_charset
());
1573 tempbuf
[tempbufindex
++] = c
;
1576 } while
((*tokptr
!= '"') && (*tokptr
!= '\0'));
1577 if
(*tokptr
++ != '"')
1579 error ("Unterminated string in expression.");
1581 tempbuf
[tempbufindex
] = '\0'; /* See note above */
1582 yylval.sval.ptr
= tempbuf
;
1583 yylval.sval.length
= tempbufindex
;
1588 if
(!(c
== '_' || c
== '$'
1589 ||
(c
>= 'a' && c
<= 'z') ||
(c
>= 'A' && c
<= 'Z')))
1590 /* We must have come across a bad character (e.g. ';'). */
1591 error ("Invalid character '%c' in expression.", c
);
1593 /* It's a name. See how long it is. */
1595 for
(c
= tokstart
[namelen
];
1596 (c
== '_' || c
== '$' ||
(c
>= '0' && c
<= '9')
1597 ||
(c
>= 'a' && c
<= 'z') ||
(c
>= 'A' && c
<= 'Z') || c
== '<');)
1599 /* Template parameter lists are part of the name.
1600 FIXME: This mishandles `print $a<4&&$a>3'. */
1604 /* Scan ahead to get rest of the template specification. Note
1605 that we look ahead only when the '<' adjoins non-whitespace
1606 characters; for comparison expressions, e.g. "a < b > c",
1607 there must be spaces before the '<', etc. */
1609 char * p
= find_template_name_end
(tokstart
+ namelen
);
1611 namelen
= p
- tokstart
;
1614 c
= tokstart
[++namelen
];
1617 /* The token "if" terminates the expression and is NOT removed from
1618 the input stream. It doesn't count if it appears in the
1619 expansion of a macro. */
1621 && tokstart
[0] == 'i'
1622 && tokstart
[1] == 'f'
1623 && ! scanning_macro_expansion
())
1632 /* Catch specific keywords. Should be done with a data structure. */
1636 if
(strncmp
(tokstart
, "unsigned", 8) == 0)
1638 if
(current_language
->la_language
== language_cplus
1639 && strncmp
(tokstart
, "template", 8) == 0)
1641 if
(strncmp
(tokstart
, "volatile", 8) == 0)
1642 return VOLATILE_KEYWORD
;
1645 if
(strncmp
(tokstart
, "struct", 6) == 0)
1647 if
(strncmp
(tokstart
, "signed", 6) == 0)
1648 return SIGNED_KEYWORD
;
1649 if
(strncmp
(tokstart
, "sizeof", 6) == 0)
1651 if
(strncmp
(tokstart
, "double", 6) == 0)
1652 return DOUBLE_KEYWORD
;
1655 if
(current_language
->la_language
== language_cplus
)
1657 if
(strncmp
(tokstart
, "false", 5) == 0)
1658 return FALSEKEYWORD
;
1659 if
(strncmp
(tokstart
, "class", 5) == 0)
1662 if
(strncmp
(tokstart
, "union", 5) == 0)
1664 if
(strncmp
(tokstart
, "short", 5) == 0)
1666 if
(strncmp
(tokstart
, "const", 5) == 0)
1667 return CONST_KEYWORD
;
1670 if
(strncmp
(tokstart
, "enum", 4) == 0)
1672 if
(strncmp
(tokstart
, "long", 4) == 0)
1674 if
(current_language
->la_language
== language_cplus
)
1676 if
(strncmp
(tokstart
, "true", 4) == 0)
1681 if
(strncmp
(tokstart
, "int", 3) == 0)
1688 yylval.sval.ptr
= tokstart
;
1689 yylval.sval.length
= namelen
;
1691 if
(*tokstart
== '$')
1693 write_dollar_variable
(yylval.sval
);
1697 /* Look ahead and see if we can consume more of the input
1698 string to get a reasonable class/namespace spec or a
1699 fully-qualified name. This is a kludge to get around the
1700 HP aCC compiler's generation of symbol names with embedded
1701 colons for namespace and nested classes. */
1703 /* NOTE: carlton/2003-09-24: I don't entirely understand the
1704 HP-specific code, either here or in linespec. Having said that,
1705 I suspect that we're actually moving towards their model: we want
1706 symbols whose names are fully qualified, which matches the
1707 description above. */
1710 /* Only do it if not inside single quotes */
1711 sym_class
= parse_nested_classes_for_hpacc
(yylval.sval.ptr
, yylval.sval.length
,
1712 &token_string
, &class_prefix
, &lexptr
);
1715 /* Replace the current token with the bigger one we found */
1716 yylval.sval.ptr
= token_string
;
1717 yylval.sval.length
= strlen
(token_string
);
1721 /* Use token-type BLOCKNAME for symbols that happen to be defined as
1722 functions or symtabs. If this is not so, then ...
1723 Use token-type TYPENAME for symbols that happen to be defined
1724 currently as names of types; NAME for other symbols.
1725 The caller is not constrained to care about the distinction. */
1727 char *tmp
= copy_name
(yylval.sval
);
1729 int is_a_field_of_this
= 0;
1732 sym
= lookup_symbol
(tmp
, expression_context_block
,
1734 current_language
->la_language
== language_cplus
1735 ?
&is_a_field_of_this
: (int *) NULL
,
1736 (struct symtab
**) NULL
);
1737 /* Call lookup_symtab, not lookup_partial_symtab, in case there are
1738 no psymtabs (coff, xcoff, or some future change to blow away the
1739 psymtabs once once symbols are read). */
1740 if
(sym
&& SYMBOL_CLASS
(sym
) == LOC_BLOCK
)
1742 yylval.ssym.sym
= sym
;
1743 yylval.ssym.is_a_field_of_this
= is_a_field_of_this
;
1747 { /* See if it's a file name. */
1748 struct symtab
*symtab
;
1750 symtab
= lookup_symtab
(tmp
);
1754 yylval.bval
= BLOCKVECTOR_BLOCK
(BLOCKVECTOR
(symtab
), STATIC_BLOCK
);
1759 if
(sym
&& SYMBOL_CLASS
(sym
) == LOC_TYPEDEF
)
1761 /* NOTE: carlton/2003-09-25: There used to be code here to
1762 handle nested types. It didn't work very well. See the
1763 comment before qualified_type for more info. */
1764 yylval.tsym.type
= SYMBOL_TYPE
(sym
);
1768 = language_lookup_primitive_type_by_name
(current_language
,
1769 current_gdbarch
, tmp
);
1770 if
(yylval.tsym.type
!= NULL
)
1773 /* Input names that aren't symbols but ARE valid hex numbers,
1774 when the input radix permits them, can be names or numbers
1775 depending on the parse. Note we support radixes > 16 here. */
1777 ((tokstart
[0] >= 'a' && tokstart
[0] < 'a' + input_radix
- 10) ||
1778 (tokstart
[0] >= 'A' && tokstart
[0] < 'A' + input_radix
- 10)))
1780 YYSTYPE newlval
; /* Its value is ignored. */
1781 hextype
= parse_number
(tokstart
, namelen
, 0, &newlval
);
1784 yylval.ssym.sym
= sym
;
1785 yylval.ssym.is_a_field_of_this
= is_a_field_of_this
;
1790 /* Any other kind of symbol */
1791 yylval.ssym.sym
= sym
;
1792 yylval.ssym.is_a_field_of_this
= is_a_field_of_this
;
1802 lexptr
= prev_lexptr
;
1804 error ("A %s in expression, near `%s'.", (msg ? msg
: "error"), lexptr
);