1 /* YACC parser for Pascal expressions, for GDB.
2 Copyright (C) 2000-2023 Free Software Foundation, Inc.
4 This file is part of GDB.
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>. */
19 /* This file is derived from c-exp.y */
21 /* Parse a Pascal expression from text in a string,
22 and return the result as a struct expression pointer.
23 That structure contains arithmetic operations in reverse polish,
24 with constants represented by operations that are followed by special data.
25 See expression.h for the details of the format.
26 What is important here is that it can be built up sequentially
27 during the process of parsing; the lower levels of the tree always
28 come first in the result.
30 Note that malloc's and realloc's in this file are transformed to
31 xmalloc and xrealloc respectively by the same sed command in the
32 makefile that remaps any other malloc/realloc inserted by the parser
33 generator. Doing this with #defines and trying to control the interaction
34 with include files (<malloc.h> and <stdlib.h> for example) just became
35 too messy, particularly when such includes can be inserted at random
36 times by the parser generator. */
38 /* Known bugs or limitations:
39 - pascal string operations are not supported at all.
40 - there are some problems with boolean types.
41 - Pascal type hexadecimal constants are not supported
42 because they conflict with the internal variables format.
43 Probably also lots of other problems, less well defined PM. */
48 #include "expression.h"
50 #include "parser-defs.h"
56 #define parse_type(ps) builtin_type (ps->gdbarch ())
58 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror,
60 #define GDB_YY_REMAP_PREFIX pascal_
63 /* The state of the parser, used internally when we are parsing the
66 static struct parser_state
*pstate
= NULL
;
68 /* Depth of parentheses. */
69 static int paren_depth
;
73 static int yylex (void);
75 static void yyerror (const char *);
77 static char *uptok
(const char *, int);
82 /* Although the yacc "value" of an expression is not used,
83 since the result is stored in the structure being created,
84 other node types do have values. */
101 struct symtoken ssym
;
103 const struct block
*bval
;
104 enum exp_opcode opcode
;
105 struct internalvar
*ivar
;
112 /* YYSTYPE gets defined by %union */
113 static int parse_number
(struct parser_state
*,
114 const char *, int, int, YYSTYPE *);
116 static struct type
*current_type
;
117 static int leftdiv_is_integer
;
118 static void push_current_type
(void);
119 static void pop_current_type
(void);
120 static int search_field
;
123 %type
<voidval
> exp exp1 type_exp start normal_start variable qualified_name
124 %type
<tval
> type typebase
125 /* %type <bval> block */
127 /* Fancy type parsing. */
130 %token
<typed_val_int
> INT
131 %token
<typed_val_float
> FLOAT
133 /* Both NAME and TYPENAME tokens represent symbols in the input,
134 and both convey their data as strings.
135 But a TYPENAME is a string that happens to be defined as a typedef
136 or builtin type name (such as int or char)
137 and a NAME is any other symbol.
138 Contexts where this distinction is not important can use the
139 nonterminal "name", which matches either NAME or TYPENAME. */
142 %token
<sval
> FIELDNAME
143 %token
<voidval
> COMPLETE
144 %token
<ssym
> NAME
/* BLOCKNAME defined below to give it higher precedence. */
145 %token
<tsym
> TYPENAME
147 %type
<ssym
> name_not_typename
149 /* A NAME_OR_INT is a symbol which is not known in the symbol table,
150 but which would parse as a valid number in the current input radix.
151 E.g. "c" when input_radix==16. Depending on the parse, it will be
152 turned into a name or into a number. */
154 %token
<ssym
> NAME_OR_INT
156 %token STRUCT CLASS SIZEOF COLONCOLON
159 /* Special type cases, put in to allow the parser to distinguish different
162 %token
<sval
> DOLLAR_VARIABLE
167 %token
<lval
> TRUEKEYWORD FALSEKEYWORD
177 %left
'<' '>' LEQ GEQ
178 %left LSH RSH DIV MOD
182 %right UNARY INCREMENT DECREMENT
183 %right ARROW
'.' '[' '('
185 %token
<ssym
> BLOCKNAME
192 start
: { current_type
= NULL
;
194 leftdiv_is_integer
= 0;
206 pstate
->push_new
<type_operation
> ($1);
207 current_type
= $1; } ;
209 /* Expressions, including the comma operator. */
212 { pstate
->wrap2
<comma_operation
> (); }
215 /* Expressions, not including the comma operator. */
216 exp
: exp
'^' %prec UNARY
217 { pstate
->wrap
<unop_ind_operation
> ();
219 current_type
= current_type
->target_type
(); }
222 exp
: '@' exp %prec UNARY
223 { pstate
->wrap
<unop_addr_operation
> ();
225 current_type
= TYPE_POINTER_TYPE
(current_type
); }
228 exp
: '-' exp %prec UNARY
229 { pstate
->wrap
<unary_neg_operation
> (); }
232 exp
: NOT exp %prec UNARY
233 { pstate
->wrap
<unary_logical_not_operation
> (); }
236 exp
: INCREMENT
'(' exp
')' %prec UNARY
237 { pstate
->wrap
<preinc_operation
> (); }
240 exp
: DECREMENT
'(' exp
')' %prec UNARY
241 { pstate
->wrap
<predec_operation
> (); }
245 field_exp
: exp
'.' %prec UNARY
246 { search_field
= 1; }
249 exp
: field_exp FIELDNAME
251 pstate
->push_new
<structop_operation
>
252 (pstate
->pop
(), copy_name
($2));
256 while
(current_type
->code
()
259 current_type
->target_type
();
260 current_type
= lookup_struct_elt_type
(
261 current_type
, $2.ptr
, 0);
269 pstate
->push_new
<structop_operation
>
270 (pstate
->pop
(), copy_name
($2));
274 while
(current_type
->code
()
277 current_type
->target_type
();
278 current_type
= lookup_struct_elt_type
(
279 current_type
, $2.ptr
, 0);
283 exp
: field_exp name COMPLETE
285 structop_base_operation
*op
286 = new structop_ptr_operation
(pstate
->pop
(),
288 pstate
->mark_struct_expression
(op
);
289 pstate
->push
(operation_up
(op
));
292 exp
: field_exp COMPLETE
294 structop_base_operation
*op
295 = new structop_ptr_operation
(pstate
->pop
(), "");
296 pstate
->mark_struct_expression
(op
);
297 pstate
->push
(operation_up
(op
));
302 /* We need to save the current_type value. */
303 { const char *arrayname
;
305 = pascal_is_string_type
(current_type
, NULL
, NULL
,
306 NULL
, NULL
, &arrayname
);
311 ->field
(arrayfieldindex
- 1).type
());
312 pstate
->push_new
<structop_operation
>
313 (pstate
->pop
(), arrayname
);
315 push_current_type
(); }
317 { pop_current_type
();
318 pstate
->wrap2
<subscript_operation
> ();
320 current_type
= current_type
->target_type
(); }
324 /* This is to save the value of arglist_len
325 being accumulated by an outer function call. */
326 { push_current_type
();
327 pstate
->start_arglist
(); }
328 arglist
')' %prec ARROW
330 std
::vector
<operation_up
> args
331 = pstate
->pop_vector
(pstate
->end_arglist
());
332 pstate
->push_new
<funcall_operation
>
333 (pstate
->pop
(), std
::move
(args
));
336 current_type
= current_type
->target_type
();
342 { pstate
->arglist_len
= 1; }
343 | arglist
',' exp %prec ABOVE_COMMA
344 { pstate
->arglist_len
++; }
347 exp
: type
'(' exp
')' %prec UNARY
350 /* Allow automatic dereference of classes. */
351 if
((current_type
->code
() == TYPE_CODE_PTR
)
352 && (current_type
->target_type
()->code
() == TYPE_CODE_STRUCT
)
353 && (($1)->code
() == TYPE_CODE_STRUCT
))
354 pstate
->wrap
<unop_ind_operation
> ();
356 pstate
->push_new
<unop_cast_operation
>
357 (pstate
->pop
(), $1);
365 /* Binary operators in order of decreasing precedence. */
368 { pstate
->wrap2
<mul_operation
> (); }
372 if
(current_type
&& is_integral_type
(current_type
))
373 leftdiv_is_integer
= 1;
377 if
(leftdiv_is_integer
&& current_type
378 && is_integral_type
(current_type
))
380 pstate
->push_new
<unop_cast_operation
>
382 parse_type
(pstate
)->builtin_long_double
);
384 = parse_type
(pstate
)->builtin_long_double
;
385 leftdiv_is_integer
= 0;
388 pstate
->wrap2
<div_operation
> ();
393 { pstate
->wrap2
<intdiv_operation
> (); }
397 { pstate
->wrap2
<rem_operation
> (); }
401 { pstate
->wrap2
<add_operation
> (); }
405 { pstate
->wrap2
<sub_operation
> (); }
409 { pstate
->wrap2
<lsh_operation
> (); }
413 { pstate
->wrap2
<rsh_operation
> (); }
418 pstate
->wrap2
<equal_operation
> ();
419 current_type
= parse_type
(pstate
)->builtin_bool
;
423 exp
: exp NOTEQUAL exp
425 pstate
->wrap2
<notequal_operation
> ();
426 current_type
= parse_type
(pstate
)->builtin_bool
;
432 pstate
->wrap2
<leq_operation
> ();
433 current_type
= parse_type
(pstate
)->builtin_bool
;
439 pstate
->wrap2
<geq_operation
> ();
440 current_type
= parse_type
(pstate
)->builtin_bool
;
446 pstate
->wrap2
<less_operation
> ();
447 current_type
= parse_type
(pstate
)->builtin_bool
;
453 pstate
->wrap2
<gtr_operation
> ();
454 current_type
= parse_type
(pstate
)->builtin_bool
;
459 { pstate
->wrap2
<bitwise_and_operation
> (); }
463 { pstate
->wrap2
<bitwise_xor_operation
> (); }
467 { pstate
->wrap2
<bitwise_ior_operation
> (); }
471 { pstate
->wrap2
<assign_operation
> (); }
476 pstate
->push_new
<bool_operation
> ($1);
477 current_type
= parse_type
(pstate
)->builtin_bool
;
483 pstate
->push_new
<bool_operation
> ($1);
484 current_type
= parse_type
(pstate
)->builtin_bool
;
490 pstate
->push_new
<long_const_operation
>
492 current_type
= $1.type
;
498 parse_number
(pstate
, $1.stoken.ptr
,
499 $1.stoken.length
, 0, &val
);
500 pstate
->push_new
<long_const_operation
>
501 (val.typed_val_int.type
,
502 val.typed_val_int.val
);
503 current_type
= val.typed_val_int.type
;
511 std
::copy
(std
::begin
($1.val
), std
::end
($1.val
),
513 pstate
->push_new
<float_const_operation
> ($1.type
, data
);
520 exp
: DOLLAR_VARIABLE
522 pstate
->push_dollar
($1);
524 /* $ is the normal prefix for pascal
525 hexadecimal values but this conflicts
526 with the GDB use for debugger variables
527 so in expression to enter hexadecimal
528 values we still need to use C syntax with
530 std
::string tmp
($1.ptr
, $1.length
);
531 /* Handle current_type. */
532 struct internalvar
*intvar
533 = lookup_only_internalvar
(tmp.c_str
() + 1);
534 if
(intvar
!= nullptr
)
536 scoped_value_mark mark
;
539 = value_of_internalvar
(pstate
->gdbarch
(),
541 current_type
= val
->type
();
546 exp
: SIZEOF
'(' type
')' %prec UNARY
548 current_type
= parse_type
(pstate
)->builtin_int
;
549 $3 = check_typedef
($3);
550 pstate
->push_new
<long_const_operation
>
551 (parse_type
(pstate
)->builtin_int
,
555 exp
: SIZEOF
'(' exp
')' %prec UNARY
556 { pstate
->wrap
<unop_sizeof_operation
> ();
557 current_type
= parse_type
(pstate
)->builtin_int
; }
560 { /* C strings are converted into array constants with
561 an explicit null byte added at the end. Thus
562 the array upper bound is the string length.
563 There is no such thing in C as a completely empty
565 const char *sp
= $1.ptr
; int count
= $1.length
;
567 std
::vector
<operation_up
> args
(count
+ 1);
568 for
(int i
= 0; i
< count
; ++i
)
569 args
[i
] = (make_operation
<long_const_operation
>
570 (parse_type
(pstate
)->builtin_char
,
572 args
[count
] = (make_operation
<long_const_operation
>
573 (parse_type
(pstate
)->builtin_char
,
575 pstate
->push_new
<array_operation
>
576 (0, $1.length
, std
::move
(args
));
583 struct value
* this_val
;
584 struct type
* this_type
;
585 pstate
->push_new
<op_this_operation
> ();
586 /* We need type of this. */
588 = value_of_this_silent
(pstate
->language
());
590 this_type
= this_val
->type
();
595 if
(this_type
->code
() == TYPE_CODE_PTR
)
597 this_type
= this_type
->target_type
();
598 pstate
->wrap
<unop_ind_operation
> ();
602 current_type
= this_type
;
606 /* end of object pascal. */
610 if
($1.sym.symbol
!= 0)
611 $$
= $1.sym.symbol
->value_block
();
614 std
::string copy
= copy_name
($1.stoken
);
616 lookup_symtab
(copy.c_str
());
618 $$
= (tem
->compunit
()->blockvector
()
621 error (_
("No file or function \"%s\"."),
627 block
: block COLONCOLON name
629 std
::string copy
= copy_name
($3);
631 = lookup_symbol
(copy.c_str
(), $1,
632 VAR_DOMAIN
, NULL
).symbol
;
634 if
(!tem || tem
->aclass
() != LOC_BLOCK
)
635 error (_
("No function \"%s\" in specified context."),
637 $$
= tem
->value_block
(); }
640 variable: block COLONCOLON name
641 { struct block_symbol sym
;
643 std
::string copy
= copy_name
($3);
644 sym
= lookup_symbol
(copy.c_str
(), $1,
647 error (_
("No symbol \"%s\" in specified context."),
650 pstate
->push_new
<var_value_operation
> (sym
);
654 qualified_name: typebase COLONCOLON name
656 struct type
*type
= $1;
658 if
(type
->code
() != TYPE_CODE_STRUCT
659 && type
->code
() != TYPE_CODE_UNION
)
660 error (_
("`%s' is not defined as an aggregate type."),
663 pstate
->push_new
<scope_operation
>
664 (type
, copy_name
($3));
668 variable: qualified_name
671 std
::string name
= copy_name
($2);
673 struct block_symbol sym
674 = lookup_symbol
(name.c_str
(), nullptr
,
675 VAR_DOMAIN
, nullptr
);
676 pstate
->push_symbol
(name.c_str
(), sym
);
680 variable: name_not_typename
681 { struct block_symbol sym
= $1.sym
;
685 if
(symbol_read_needs_frame
(sym.symbol
))
686 pstate
->block_tracker
->update
(sym
);
688 pstate
->push_new
<var_value_operation
> (sym
);
689 current_type
= sym.symbol
->type
(); }
690 else if
($1.is_a_field_of_this
)
692 struct value
* this_val
;
693 struct type
* this_type
;
694 /* Object pascal: it hangs off of `this'. Must
695 not inadvertently convert from a method call
697 pstate
->block_tracker
->update
(sym
);
699 = make_operation
<op_this_operation
> ();
700 pstate
->push_new
<structop_operation
>
701 (std
::move
(thisop
), copy_name
($1.stoken
));
702 /* We need type of this. */
704 = value_of_this_silent
(pstate
->language
());
706 this_type
= this_val
->type
();
710 current_type
= lookup_struct_elt_type
(
712 copy_name
($1.stoken
).c_str
(), 0);
718 struct bound_minimal_symbol msymbol
;
719 std
::string arg
= copy_name
($1.stoken
);
722 lookup_bound_minimal_symbol
(arg.c_str
());
723 if
(msymbol.minsym
!= NULL
)
724 pstate
->push_new
<var_msym_value_operation
>
726 else if
(!have_full_symbols
()
727 && !have_partial_symbols
())
728 error (_
("No symbol table is loaded. "
729 "Use the \"file\" command."));
731 error (_
("No symbol \"%s\" in current context."),
741 /* We used to try to recognize more pointer to member types here, but
742 that didn't work (shift/reduce conflicts meant that these rules never
743 got executed). The problem is that
744 int (foo::bar::baz::bizzle)
745 is a function type but
746 int (foo::bar::baz::bizzle::*)
747 is a pointer to member type. Stroustrup loses again! */
752 typebase
/* Implements (approximately): (type-qualifier)* type-specifier */
754 { $$
= lookup_pointer_type
($2); }
759 = lookup_struct
(copy_name
($2).c_str
(),
760 pstate
->expression_context_block
);
764 = lookup_struct
(copy_name
($2).c_str
(),
765 pstate
->expression_context_block
);
767 /* "const" and "volatile" are curently ignored. A type qualifier
768 after the type is handled in the ptype rule. I think these could
772 name
: NAME
{ $$
= $1.stoken
; }
773 | BLOCKNAME
{ $$
= $1.stoken
; }
774 | TYPENAME
{ $$
= $1.stoken
; }
775 | NAME_OR_INT
{ $$
= $1.stoken
; }
778 name_not_typename
: NAME
780 /* These would be useful if name_not_typename was useful, but it is just
781 a fake for "variable", so these cause reduce/reduce conflicts because
782 the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
783 =exp) or just an exp. If name_not_typename was ever used in an lvalue
784 context where only a name could occur, this might be useful.
791 /* Take care of parsing a number (anything that starts with a digit).
792 Set yylval and return the token type; update lexptr.
793 LEN is the number of characters in it. */
795 /*** Needs some error checking for the float case ***/
798 parse_number
(struct parser_state
*par_state
,
799 const char *p
, int len
, int parsed_float
, YYSTYPE *putithere
)
806 int base
= input_radix
;
809 /* Number of "L" suffixes encountered. */
812 /* We have found a "L" or "U" suffix. */
813 int found_suffix
= 0;
817 /* Handle suffixes: 'f' for float, 'l' for long double.
818 FIXME: This appears to be an extension -- do we want this? */
819 if
(len
>= 1 && tolower
(p
[len
- 1]) == 'f')
821 putithere
->typed_val_float.type
822 = parse_type
(par_state
)->builtin_float
;
825 else if
(len
>= 1 && tolower
(p
[len
- 1]) == 'l')
827 putithere
->typed_val_float.type
828 = parse_type
(par_state
)->builtin_long_double
;
831 /* Default type for floating-point literals is double. */
834 putithere
->typed_val_float.type
835 = parse_type
(par_state
)->builtin_double
;
838 if
(!parse_float
(p
, len
,
839 putithere
->typed_val_float.type
,
840 putithere
->typed_val_float.val
))
845 /* Handle base-switching prefixes 0x, 0t, 0d, 0. */
846 if
(p
[0] == '0' && len
> 1)
879 if
(c
>= 'A' && c
<= 'Z')
881 if
(c
!= 'l' && c
!= 'u')
883 if
(c
>= '0' && c
<= '9')
891 if
(base
> 10 && c
>= 'a' && c
<= 'f')
895 n
+= i
= c
- 'a' + 10;
908 return ERROR
; /* Char not a digit */
911 return ERROR
; /* Invalid digit in this base. */
913 if
(c
!= 'l' && c
!= 'u')
915 /* Test for overflow. */
916 if
(prevn
== 0 && n
== 0)
919 error (_
("Numeric constant too large."));
924 /* An integer constant is an int, a long, or a long long. An L
925 suffix forces it to be long; an LL suffix forces it to be long
926 long. If not forced to a larger size, it gets the first type of
927 the above that it fits in. To figure out whether it fits, we
928 shift it right and see whether anything remains. Note that we
929 can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
930 operation, because many compilers will warn about such a shift
931 (which always produces a zero result). Sometimes gdbarch_int_bit
932 or gdbarch_long_bit will be that big, sometimes not. To deal with
933 the case where it is we just always shift the value more than
934 once, with fewer bits each time. */
936 int int_bits
= gdbarch_int_bit
(par_state
->gdbarch
());
937 int long_bits
= gdbarch_long_bit
(par_state
->gdbarch
());
938 int long_long_bits
= gdbarch_long_long_bit
(par_state
->gdbarch
());
939 bool have_signed
= !unsigned_p
;
940 bool have_int
= long_p
== 0;
941 bool have_long
= long_p
<= 1;
942 if
(have_int
&& have_signed
&& fits_in_type
(1, n
, int_bits
, true
))
943 putithere
->typed_val_int.type
= parse_type
(par_state
)->builtin_int
;
944 else if
(have_int
&& fits_in_type
(1, n
, int_bits
, false
))
945 putithere
->typed_val_int.type
946 = parse_type
(par_state
)->builtin_unsigned_int
;
947 else if
(have_long
&& have_signed
&& fits_in_type
(1, n
, long_bits
, true
))
948 putithere
->typed_val_int.type
= parse_type
(par_state
)->builtin_long
;
949 else if
(have_long
&& fits_in_type
(1, n
, long_bits
, false
))
950 putithere
->typed_val_int.type
951 = parse_type
(par_state
)->builtin_unsigned_long
;
952 else if
(have_signed
&& fits_in_type
(1, n
, long_long_bits
, true
))
953 putithere
->typed_val_int.type
954 = parse_type
(par_state
)->builtin_long_long
;
955 else if
(fits_in_type
(1, n
, long_long_bits
, false
))
956 putithere
->typed_val_int.type
957 = parse_type
(par_state
)->builtin_unsigned_long_long
;
959 error (_
("Numeric constant too large."));
960 putithere
->typed_val_int.val
= n
;
969 struct type_push
*next
;
972 static struct type_push
*tp_top
= NULL
;
975 push_current_type
(void)
977 struct type_push
*tpnew
;
978 tpnew
= (struct type_push
*) malloc
(sizeof
(struct type_push
));
979 tpnew
->next
= tp_top
;
980 tpnew
->stored
= current_type
;
986 pop_current_type
(void)
988 struct type_push
*tp
= tp_top
;
991 current_type
= tp
->stored
;
1001 enum exp_opcode opcode
;
1004 static const struct p_token tokentab3
[] =
1006 {"shr", RSH
, OP_NULL
},
1007 {"shl", LSH
, OP_NULL
},
1008 {"and", ANDAND
, OP_NULL
},
1009 {"div", DIV
, OP_NULL
},
1010 {"not", NOT
, OP_NULL
},
1011 {"mod", MOD
, OP_NULL
},
1012 {"inc", INCREMENT
, OP_NULL
},
1013 {"dec", DECREMENT
, OP_NULL
},
1014 {"xor", XOR
, OP_NULL
}
1017 static const struct p_token tokentab2
[] =
1019 {"or", OR
, OP_NULL
},
1020 {"<>", NOTEQUAL
, OP_NULL
},
1021 {"<=", LEQ
, OP_NULL
},
1022 {">=", GEQ
, OP_NULL
},
1023 {":=", ASSIGN
, OP_NULL
},
1024 {"::", COLONCOLON
, OP_NULL
} };
1026 /* Allocate uppercased var: */
1027 /* make an uppercased copy of tokstart. */
1029 uptok
(const char *tokstart
, int namelen
)
1032 char *uptokstart
= (char *)malloc
(namelen
+1);
1033 for
(i
= 0;i
<= namelen
;i
++)
1035 if
((tokstart
[i
]>='a' && tokstart
[i
]<='z'))
1036 uptokstart
[i
] = tokstart
[i
]-('a'-'A');
1038 uptokstart
[i
] = tokstart
[i
];
1040 uptokstart
[namelen
]='\0';
1044 /* Read one token, getting characters through lexptr. */
1051 const char *tokstart
;
1054 int explen
, tempbufindex
;
1055 static char *tempbuf
;
1056 static int tempbufsize
;
1060 pstate
->prev_lexptr
= pstate
->lexptr
;
1062 tokstart
= pstate
->lexptr
;
1063 explen
= strlen
(pstate
->lexptr
);
1065 /* See if it is a special token of length 3. */
1067 for
(const auto
&token
: tokentab3
)
1068 if
(strncasecmp
(tokstart
, token.oper
, 3) == 0
1069 && (!isalpha
(token.oper
[0]) || explen
== 3
1070 ||
(!isalpha
(tokstart
[3])
1071 && !isdigit
(tokstart
[3]) && tokstart
[3] != '_')))
1073 pstate
->lexptr
+= 3;
1074 yylval.opcode
= token.opcode
;
1078 /* See if it is a special token of length 2. */
1080 for
(const auto
&token
: tokentab2
)
1081 if
(strncasecmp
(tokstart
, token.oper
, 2) == 0
1082 && (!isalpha
(token.oper
[0]) || explen
== 2
1083 ||
(!isalpha
(tokstart
[2])
1084 && !isdigit
(tokstart
[2]) && tokstart
[2] != '_')))
1086 pstate
->lexptr
+= 2;
1087 yylval.opcode
= token.opcode
;
1091 switch
(c
= *tokstart
)
1094 if
(search_field
&& pstate
->parse_completion
)
1106 /* We either have a character constant ('0' or '\177' for example)
1107 or we have a quoted symbol reference ('foo(int,int)' in object pascal
1110 c
= *pstate
->lexptr
++;
1112 c
= parse_escape
(pstate
->gdbarch
(), &pstate
->lexptr
);
1114 error (_
("Empty character constant."));
1116 yylval.typed_val_int.val
= c
;
1117 yylval.typed_val_int.type
= parse_type
(pstate
)->builtin_char
;
1119 c
= *pstate
->lexptr
++;
1122 namelen
= skip_quoted
(tokstart
) - tokstart
;
1125 pstate
->lexptr
= tokstart
+ namelen
;
1126 if
(pstate
->lexptr
[-1] != '\'')
1127 error (_
("Unmatched single quote."));
1130 uptokstart
= uptok
(tokstart
,namelen
);
1133 error (_
("Invalid character constant."));
1143 if
(paren_depth
== 0)
1150 if
(pstate
->comma_terminates
&& paren_depth
== 0)
1156 /* Might be a floating point number. */
1157 if
(pstate
->lexptr
[1] < '0' || pstate
->lexptr
[1] > '9')
1159 goto symbol
; /* Nope, must be a symbol. */
1175 /* It's a number. */
1176 int got_dot
= 0, got_e
= 0, toktype
;
1177 const char *p
= tokstart
;
1178 int hex
= input_radix
> 10;
1180 if
(c
== '0' && (p
[1] == 'x' || p
[1] == 'X'))
1185 else if
(c
== '0' && (p
[1]=='t' || p
[1]=='T'
1186 || p
[1]=='d' || p
[1]=='D'))
1194 /* This test includes !hex because 'e' is a valid hex digit
1195 and thus does not indicate a floating point number when
1196 the radix is hex. */
1197 if
(!hex
&& !got_e
&& (*p
== 'e' ||
*p
== 'E'))
1198 got_dot
= got_e
= 1;
1199 /* This test does not include !hex, because a '.' always indicates
1200 a decimal floating point number regardless of the radix. */
1201 else if
(!got_dot
&& *p
== '.')
1203 else if
(got_e
&& (p
[-1] == 'e' || p
[-1] == 'E')
1204 && (*p
== '-' ||
*p
== '+'))
1205 /* This is the sign of the exponent, not the end of the
1208 /* We will take any letters or digits. parse_number will
1209 complain if past the radix, or if L or U are not final. */
1210 else if
((*p
< '0' ||
*p
> '9')
1211 && ((*p
< 'a' ||
*p
> 'z')
1212 && (*p
< 'A' ||
*p
> 'Z')))
1215 toktype
= parse_number
(pstate
, tokstart
,
1216 p
- tokstart
, got_dot | got_e
, &yylval);
1217 if
(toktype
== ERROR
)
1219 char *err_copy
= (char *) alloca
(p
- tokstart
+ 1);
1221 memcpy
(err_copy
, tokstart
, p
- tokstart
);
1222 err_copy
[p
- tokstart
] = 0;
1223 error (_
("Invalid number \"%s\"."), err_copy
);
1254 /* Build the gdb internal form of the input string in tempbuf,
1255 translating any standard C escape forms seen. Note that the
1256 buffer is null byte terminated *only* for the convenience of
1257 debugging gdb itself and printing the buffer contents when
1258 the buffer contains no embedded nulls. Gdb does not depend
1259 upon the buffer being null byte terminated, it uses the length
1260 string instead. This allows gdb to handle C strings (as well
1261 as strings in other languages) with embedded null bytes. */
1263 tokptr
= ++tokstart
;
1267 /* Grow the static temp buffer if necessary, including allocating
1268 the first one on demand. */
1269 if
(tempbufindex
+ 1 >= tempbufsize
)
1271 tempbuf
= (char *) realloc
(tempbuf
, tempbufsize
+= 64);
1278 /* Do nothing, loop will terminate. */
1282 c
= parse_escape
(pstate
->gdbarch
(), &tokptr
);
1287 tempbuf
[tempbufindex
++] = c
;
1290 tempbuf
[tempbufindex
++] = *tokptr
++;
1293 } while
((*tokptr
!= '"') && (*tokptr
!= '\0'));
1294 if
(*tokptr
++ != '"')
1296 error (_
("Unterminated string in expression."));
1298 tempbuf
[tempbufindex
] = '\0'; /* See note above. */
1299 yylval.sval.ptr
= tempbuf
;
1300 yylval.sval.length
= tempbufindex
;
1301 pstate
->lexptr
= tokptr
;
1305 if
(!(c
== '_' || c
== '$'
1306 ||
(c
>= 'a' && c
<= 'z') ||
(c
>= 'A' && c
<= 'Z')))
1307 /* We must have come across a bad character (e.g. ';'). */
1308 error (_
("Invalid character '%c' in expression."), c
);
1310 /* It's a name. See how long it is. */
1312 for
(c
= tokstart
[namelen
];
1313 (c
== '_' || c
== '$' ||
(c
>= '0' && c
<= '9')
1314 ||
(c
>= 'a' && c
<= 'z') ||
(c
>= 'A' && c
<= 'Z') || c
== '<');)
1316 /* Template parameter lists are part of the name.
1317 FIXME: This mishandles `print $a<4&&$a>3'. */
1321 int nesting_level
= 1;
1322 while
(tokstart
[++i
])
1324 if
(tokstart
[i
] == '<')
1326 else if
(tokstart
[i
] == '>')
1328 if
(--nesting_level
== 0)
1332 if
(tokstart
[i
] == '>')
1338 /* do NOT uppercase internals because of registers !!! */
1339 c
= tokstart
[++namelen
];
1342 uptokstart
= uptok
(tokstart
,namelen
);
1344 /* The token "if" terminates the expression and is NOT
1345 removed from the input stream. */
1346 if
(namelen
== 2 && uptokstart
[0] == 'I' && uptokstart
[1] == 'F')
1352 pstate
->lexptr
+= namelen
;
1356 /* Catch specific keywords. Should be done with a data structure. */
1360 if
(strcmp
(uptokstart
, "OBJECT") == 0)
1365 if
(strcmp
(uptokstart
, "RECORD") == 0)
1370 if
(strcmp
(uptokstart
, "SIZEOF") == 0)
1377 if
(strcmp
(uptokstart
, "CLASS") == 0)
1382 if
(strcmp
(uptokstart
, "FALSE") == 0)
1386 return FALSEKEYWORD
;
1390 if
(strcmp
(uptokstart
, "TRUE") == 0)
1396 if
(strcmp
(uptokstart
, "SELF") == 0)
1398 /* Here we search for 'this' like
1399 inserted in FPC stabs debug info. */
1400 static const char this_name
[] = "this";
1402 if
(lookup_symbol
(this_name
, pstate
->expression_context_block
,
1403 VAR_DOMAIN
, NULL
).symbol
)
1414 yylval.sval.ptr
= tokstart
;
1415 yylval.sval.length
= namelen
;
1417 if
(*tokstart
== '$')
1420 return DOLLAR_VARIABLE
;
1423 /* Use token-type BLOCKNAME for symbols that happen to be defined as
1424 functions or symtabs. If this is not so, then ...
1425 Use token-type TYPENAME for symbols that happen to be defined
1426 currently as names of types; NAME for other symbols.
1427 The caller is not constrained to care about the distinction. */
1429 std
::string tmp
= copy_name
(yylval.sval
);
1431 struct field_of_this_result is_a_field_of_this
;
1435 is_a_field_of_this.type
= NULL
;
1436 if
(search_field
&& current_type
)
1437 is_a_field
= (lookup_struct_elt_type
(current_type
,
1438 tmp.c_str
(), 1) != NULL
);
1442 sym
= lookup_symbol
(tmp.c_str
(), pstate
->expression_context_block
,
1443 VAR_DOMAIN
, &is_a_field_of_this
).symbol
;
1444 /* second chance uppercased (as Free Pascal does). */
1445 if
(!sym
&& is_a_field_of_this.type
== NULL
&& !is_a_field
)
1447 for
(int i
= 0; i
<= namelen
; i
++)
1449 if
((tmp
[i
] >= 'a' && tmp
[i
] <= 'z'))
1450 tmp
[i
] -= ('a'-'A');
1452 if
(search_field
&& current_type
)
1453 is_a_field
= (lookup_struct_elt_type
(current_type
,
1454 tmp.c_str
(), 1) != NULL
);
1458 sym
= lookup_symbol
(tmp.c_str
(), pstate
->expression_context_block
,
1459 VAR_DOMAIN
, &is_a_field_of_this
).symbol
;
1461 /* Third chance Capitalized (as GPC does). */
1462 if
(!sym
&& is_a_field_of_this.type
== NULL
&& !is_a_field
)
1464 for
(int i
= 0; i
<= namelen
; i
++)
1468 if
((tmp
[i
] >= 'a' && tmp
[i
] <= 'z'))
1469 tmp
[i
] -= ('a'-'A');
1472 if
((tmp
[i
] >= 'A' && tmp
[i
] <= 'Z'))
1473 tmp
[i
] -= ('A'-'a');
1475 if
(search_field
&& current_type
)
1476 is_a_field
= (lookup_struct_elt_type
(current_type
,
1477 tmp.c_str
(), 1) != NULL
);
1481 sym
= lookup_symbol
(tmp.c_str
(), pstate
->expression_context_block
,
1482 VAR_DOMAIN
, &is_a_field_of_this
).symbol
;
1485 if
(is_a_field ||
(is_a_field_of_this.type
!= NULL
))
1487 tempbuf
= (char *) realloc
(tempbuf
, namelen
+ 1);
1488 strncpy
(tempbuf
, tmp.c_str
(), namelen
);
1489 tempbuf
[namelen
] = 0;
1490 yylval.sval.ptr
= tempbuf
;
1491 yylval.sval.length
= namelen
;
1492 yylval.ssym.sym.symbol
= NULL
;
1493 yylval.ssym.sym.block
= NULL
;
1495 yylval.ssym.is_a_field_of_this
= is_a_field_of_this.type
!= NULL
;
1501 /* Call lookup_symtab, not lookup_partial_symtab, in case there are
1502 no psymtabs (coff, xcoff, or some future change to blow away the
1503 psymtabs once once symbols are read). */
1504 if
((sym
&& sym
->aclass
() == LOC_BLOCK
)
1505 || lookup_symtab
(tmp.c_str
()))
1507 yylval.ssym.sym.symbol
= sym
;
1508 yylval.ssym.sym.block
= NULL
;
1509 yylval.ssym.is_a_field_of_this
= is_a_field_of_this.type
!= NULL
;
1513 if
(sym
&& sym
->aclass
() == LOC_TYPEDEF
)
1516 /* Despite the following flaw, we need to keep this code enabled.
1517 Because we can get called from check_stub_method, if we don't
1518 handle nested types then it screws many operations in any
1519 program which uses nested types. */
1520 /* In "A::x", if x is a member function of A and there happens
1521 to be a type (nested or not, since the stabs don't make that
1522 distinction) named x, then this code incorrectly thinks we
1523 are dealing with nested types rather than a member function. */
1526 const char *namestart
;
1527 struct symbol
*best_sym
;
1529 /* Look ahead to detect nested types. This probably should be
1530 done in the grammar, but trying seemed to introduce a lot
1531 of shift/reduce and reduce/reduce conflicts. It's possible
1532 that it could be done, though. Or perhaps a non-grammar, but
1533 less ad hoc, approach would work well. */
1535 /* Since we do not currently have any way of distinguishing
1536 a nested type from a non-nested one (the stabs don't tell
1537 us whether a type is nested), we just ignore the
1544 /* Skip whitespace. */
1545 while
(*p
== ' ' ||
*p
== '\t' ||
*p
== '\n')
1547 if
(*p
== ':' && p
[1] == ':')
1549 /* Skip the `::'. */
1551 /* Skip whitespace. */
1552 while
(*p
== ' ' ||
*p
== '\t' ||
*p
== '\n')
1555 while
(*p
== '_' ||
*p
== '$' ||
(*p
>= '0' && *p
<= '9')
1556 ||
(*p
>= 'a' && *p
<= 'z')
1557 ||
(*p
>= 'A' && *p
<= 'Z'))
1561 struct symbol
*cur_sym
;
1562 /* As big as the whole rest of the expression, which is
1563 at least big enough. */
1565 = (char *) alloca
(tmp.size
() + strlen
(namestart
)
1570 memcpy
(tmp1
, tmp.c_str
(), tmp.size
());
1571 tmp1
+= tmp.size
();
1572 memcpy
(tmp1
, "::", 2);
1574 memcpy
(tmp1
, namestart
, p
- namestart
);
1575 tmp1
[p
- namestart
] = '\0';
1577 = lookup_symbol
(ncopy
,
1578 pstate
->expression_context_block
,
1579 VAR_DOMAIN
, NULL
).symbol
;
1582 if
(cur_sym
->aclass
() == LOC_TYPEDEF
)
1600 yylval.tsym.type
= best_sym
->type
();
1602 yylval.tsym.type
= sym
->type
();
1608 = language_lookup_primitive_type
(pstate
->language
(),
1609 pstate
->gdbarch
(), tmp.c_str
());
1610 if
(yylval.tsym.type
!= NULL
)
1616 /* Input names that aren't symbols but ARE valid hex numbers,
1617 when the input radix permits them, can be names or numbers
1618 depending on the parse. Note we support radixes > 16 here. */
1620 && ((tokstart
[0] >= 'a' && tokstart
[0] < 'a' + input_radix
- 10)
1621 ||
(tokstart
[0] >= 'A' && tokstart
[0] < 'A' + input_radix
- 10)))
1623 YYSTYPE newlval
; /* Its value is ignored. */
1624 hextype
= parse_number
(pstate
, tokstart
, namelen
, 0, &newlval
);
1627 yylval.ssym.sym.symbol
= sym
;
1628 yylval.ssym.sym.block
= NULL
;
1629 yylval.ssym.is_a_field_of_this
= is_a_field_of_this.type
!= NULL
;
1636 /* Any other kind of symbol. */
1637 yylval.ssym.sym.symbol
= sym
;
1638 yylval.ssym.sym.block
= NULL
;
1643 /* See language.h. */
1646 pascal_language::parser
(struct parser_state
*par_state
) const
1648 /* Setting up the parser state. */
1649 scoped_restore pstate_restore
= make_scoped_restore
(&pstate
);
1650 gdb_assert
(par_state
!= NULL
);
1654 int result
= yyparse ();
1656 pstate
->set_operation
(pstate
->pop
());
1661 yyerror (const char *msg
)
1663 if
(pstate
->prev_lexptr
)
1664 pstate
->lexptr
= pstate
->prev_lexptr
;
1666 error (_
("A %s in expression, near `%s'."), msg
, pstate
->lexptr
);