1 /* YACC parser for Pascal expressions, for GDB.
2 Copyright (C) 2000-2024 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. */
47 #include "expression.h"
49 #include "parser-defs.h"
55 #define parse_type(ps) builtin_type (ps->gdbarch ())
57 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror,
59 #define GDB_YY_REMAP_PREFIX pascal_
62 /* The state of the parser, used internally when we are parsing the
65 static struct parser_state
*pstate
= NULL
;
67 /* Depth of parentheses. */
68 static int paren_depth
;
72 static int yylex (void);
74 static void yyerror (const char *);
76 static char *uptok
(const char *, int);
78 static const char *pascal_skip_string
(const char *str
);
83 /* Although the yacc "value" of an expression is not used,
84 since the result is stored in the structure being created,
85 other node types do have values. */
102 struct symtoken ssym
;
104 const struct block
*bval
;
105 enum exp_opcode opcode
;
106 struct internalvar
*ivar
;
113 /* YYSTYPE gets defined by %union */
114 static int parse_number
(struct parser_state
*,
115 const char *, int, int, YYSTYPE *);
117 static struct type
*current_type
;
118 static int leftdiv_is_integer
;
119 static void push_current_type
(void);
120 static void pop_current_type
(void);
121 static int search_field
;
124 %type
<voidval
> exp exp1 type_exp start normal_start variable qualified_name
125 %type
<tval
> type typebase
126 /* %type <bval> block */
128 /* Fancy type parsing. */
131 %token
<typed_val_int
> INT
132 %token
<typed_val_float
> FLOAT
134 /* Both NAME and TYPENAME tokens represent symbols in the input,
135 and both convey their data as strings.
136 But a TYPENAME is a string that happens to be defined as a typedef
137 or builtin type name (such as int or char)
138 and a NAME is any other symbol.
139 Contexts where this distinction is not important can use the
140 nonterminal "name", which matches either NAME or TYPENAME. */
143 %token
<sval
> FIELDNAME
144 %token
<voidval
> COMPLETE
145 %token
<ssym
> NAME
/* BLOCKNAME defined below to give it higher precedence. */
146 %token
<tsym
> TYPENAME
148 %type
<ssym
> name_not_typename
150 /* A NAME_OR_INT is a symbol which is not known in the symbol table,
151 but which would parse as a valid number in the current input radix.
152 E.g. "c" when input_radix==16. Depending on the parse, it will be
153 turned into a name or into a number. */
155 %token
<ssym
> NAME_OR_INT
157 %token STRUCT CLASS SIZEOF COLONCOLON
160 /* Special type cases, put in to allow the parser to distinguish different
163 %token
<sval
> DOLLAR_VARIABLE
168 %token
<lval
> TRUEKEYWORD FALSEKEYWORD
178 %left
'<' '>' LEQ GEQ
179 %left LSH RSH DIV MOD
183 %right UNARY INCREMENT DECREMENT
184 %right ARROW
'.' '[' '('
186 %token
<ssym
> BLOCKNAME
193 start
: { current_type
= NULL
;
195 leftdiv_is_integer
= 0;
207 pstate
->push_new
<type_operation
> ($1);
208 current_type
= $1; } ;
210 /* Expressions, including the comma operator. */
213 { pstate
->wrap2
<comma_operation
> (); }
216 /* Expressions, not including the comma operator. */
217 exp
: exp
'^' %prec UNARY
218 { pstate
->wrap
<unop_ind_operation
> ();
220 current_type
= current_type
->target_type
(); }
223 exp
: '@' exp %prec UNARY
224 { pstate
->wrap
<unop_addr_operation
> ();
226 current_type
= TYPE_POINTER_TYPE
(current_type
); }
229 exp
: '-' exp %prec UNARY
230 { pstate
->wrap
<unary_neg_operation
> (); }
233 exp
: NOT exp %prec UNARY
234 { pstate
->wrap
<unary_logical_not_operation
> (); }
237 exp
: INCREMENT
'(' exp
')' %prec UNARY
238 { pstate
->wrap
<preinc_operation
> (); }
241 exp
: DECREMENT
'(' exp
')' %prec UNARY
242 { pstate
->wrap
<predec_operation
> (); }
246 field_exp
: exp
'.' %prec UNARY
247 { search_field
= 1; }
250 exp
: field_exp FIELDNAME
252 pstate
->push_new
<structop_operation
>
253 (pstate
->pop
(), copy_name
($2));
257 while
(current_type
->code
()
260 current_type
->target_type
();
261 current_type
= lookup_struct_elt_type
(
262 current_type
, $2.ptr
, 0);
270 pstate
->push_new
<structop_operation
>
271 (pstate
->pop
(), copy_name
($2));
275 while
(current_type
->code
()
278 current_type
->target_type
();
279 current_type
= lookup_struct_elt_type
(
280 current_type
, $2.ptr
, 0);
284 exp
: field_exp name COMPLETE
286 structop_base_operation
*op
287 = new structop_ptr_operation
(pstate
->pop
(),
289 pstate
->mark_struct_expression
(op
);
290 pstate
->push
(operation_up
(op
));
293 exp
: field_exp COMPLETE
295 structop_base_operation
*op
296 = new structop_ptr_operation
(pstate
->pop
(), "");
297 pstate
->mark_struct_expression
(op
);
298 pstate
->push
(operation_up
(op
));
303 /* We need to save the current_type value. */
304 { const char *arrayname
;
306 = pascal_is_string_type
(current_type
, NULL
, NULL
,
307 NULL
, NULL
, &arrayname
);
312 ->field
(arrayfieldindex
- 1).type
());
313 pstate
->push_new
<structop_operation
>
314 (pstate
->pop
(), arrayname
);
316 push_current_type
(); }
318 { pop_current_type
();
319 pstate
->wrap2
<subscript_operation
> ();
321 current_type
= current_type
->target_type
(); }
325 /* This is to save the value of arglist_len
326 being accumulated by an outer function call. */
327 { push_current_type
();
328 pstate
->start_arglist
(); }
329 arglist
')' %prec ARROW
331 std
::vector
<operation_up
> args
332 = pstate
->pop_vector
(pstate
->end_arglist
());
333 pstate
->push_new
<funcall_operation
>
334 (pstate
->pop
(), std
::move
(args
));
337 current_type
= current_type
->target_type
();
343 { pstate
->arglist_len
= 1; }
344 | arglist
',' exp %prec ABOVE_COMMA
345 { pstate
->arglist_len
++; }
348 exp
: type
'(' exp
')' %prec UNARY
351 /* Allow automatic dereference of classes. */
352 if
((current_type
->code
() == TYPE_CODE_PTR
)
353 && (current_type
->target_type
()->code
() == TYPE_CODE_STRUCT
)
354 && (($1)->code
() == TYPE_CODE_STRUCT
))
355 pstate
->wrap
<unop_ind_operation
> ();
357 pstate
->push_new
<unop_cast_operation
>
358 (pstate
->pop
(), $1);
366 /* Binary operators in order of decreasing precedence. */
369 { pstate
->wrap2
<mul_operation
> (); }
373 if
(current_type
&& is_integral_type
(current_type
))
374 leftdiv_is_integer
= 1;
378 if
(leftdiv_is_integer
&& current_type
379 && is_integral_type
(current_type
))
381 pstate
->push_new
<unop_cast_operation
>
383 parse_type
(pstate
)->builtin_long_double
);
385 = parse_type
(pstate
)->builtin_long_double
;
386 leftdiv_is_integer
= 0;
389 pstate
->wrap2
<div_operation
> ();
394 { pstate
->wrap2
<intdiv_operation
> (); }
398 { pstate
->wrap2
<rem_operation
> (); }
402 { pstate
->wrap2
<add_operation
> (); }
406 { pstate
->wrap2
<sub_operation
> (); }
410 { pstate
->wrap2
<lsh_operation
> (); }
414 { pstate
->wrap2
<rsh_operation
> (); }
419 pstate
->wrap2
<equal_operation
> ();
420 current_type
= parse_type
(pstate
)->builtin_bool
;
424 exp
: exp NOTEQUAL exp
426 pstate
->wrap2
<notequal_operation
> ();
427 current_type
= parse_type
(pstate
)->builtin_bool
;
433 pstate
->wrap2
<leq_operation
> ();
434 current_type
= parse_type
(pstate
)->builtin_bool
;
440 pstate
->wrap2
<geq_operation
> ();
441 current_type
= parse_type
(pstate
)->builtin_bool
;
447 pstate
->wrap2
<less_operation
> ();
448 current_type
= parse_type
(pstate
)->builtin_bool
;
454 pstate
->wrap2
<gtr_operation
> ();
455 current_type
= parse_type
(pstate
)->builtin_bool
;
460 { pstate
->wrap2
<bitwise_and_operation
> (); }
464 { pstate
->wrap2
<bitwise_xor_operation
> (); }
468 { pstate
->wrap2
<bitwise_ior_operation
> (); }
472 { pstate
->wrap2
<assign_operation
> (); }
477 pstate
->push_new
<bool_operation
> ($1);
478 current_type
= parse_type
(pstate
)->builtin_bool
;
484 pstate
->push_new
<bool_operation
> ($1);
485 current_type
= parse_type
(pstate
)->builtin_bool
;
491 pstate
->push_new
<long_const_operation
>
493 current_type
= $1.type
;
499 parse_number
(pstate
, $1.stoken.ptr
,
500 $1.stoken.length
, 0, &val
);
501 pstate
->push_new
<long_const_operation
>
502 (val.typed_val_int.type
,
503 val.typed_val_int.val
);
504 current_type
= val.typed_val_int.type
;
512 std
::copy
(std
::begin
($1.val
), std
::end
($1.val
),
514 pstate
->push_new
<float_const_operation
> ($1.type
, data
);
521 exp
: DOLLAR_VARIABLE
523 pstate
->push_dollar
($1);
525 /* $ is the normal prefix for pascal
526 hexadecimal values but this conflicts
527 with the GDB use for debugger variables
528 so in expression to enter hexadecimal
529 values we still need to use C syntax with
531 std
::string tmp
($1.ptr
, $1.length
);
532 /* Handle current_type. */
533 struct internalvar
*intvar
534 = lookup_only_internalvar
(tmp.c_str
() + 1);
535 if
(intvar
!= nullptr
)
537 scoped_value_mark mark
;
540 = value_of_internalvar
(pstate
->gdbarch
(),
542 current_type
= val
->type
();
547 exp
: SIZEOF
'(' type
')' %prec UNARY
549 current_type
= parse_type
(pstate
)->builtin_int
;
550 $3 = check_typedef
($3);
551 pstate
->push_new
<long_const_operation
>
552 (parse_type
(pstate
)->builtin_int
,
556 exp
: SIZEOF
'(' exp
')' %prec UNARY
557 { pstate
->wrap
<unop_sizeof_operation
> ();
558 current_type
= parse_type
(pstate
)->builtin_int
; }
561 { /* C strings are converted into array constants with
562 an explicit null byte added at the end. Thus
563 the array upper bound is the string length.
564 There is no such thing in C as a completely empty
566 const char *sp
= $1.ptr
; int count
= $1.length
;
568 std
::vector
<operation_up
> args
(count
+ 1);
569 for
(int i
= 0; i
< count
; ++i
)
570 args
[i
] = (make_operation
<long_const_operation
>
571 (parse_type
(pstate
)->builtin_char
,
573 args
[count
] = (make_operation
<long_const_operation
>
574 (parse_type
(pstate
)->builtin_char
,
576 pstate
->push_new
<array_operation
>
577 (0, $1.length
, std
::move
(args
));
584 struct value
* this_val
;
585 struct type
* this_type
;
586 pstate
->push_new
<op_this_operation
> ();
587 /* We need type of this. */
589 = value_of_this_silent
(pstate
->language
());
591 this_type
= this_val
->type
();
596 if
(this_type
->code
() == TYPE_CODE_PTR
)
598 this_type
= this_type
->target_type
();
599 pstate
->wrap
<unop_ind_operation
> ();
603 current_type
= this_type
;
607 /* end of object pascal. */
611 if
($1.sym.symbol
!= 0)
612 $$
= $1.sym.symbol
->value_block
();
615 std
::string copy
= copy_name
($1.stoken
);
617 lookup_symtab
(copy.c_str
());
619 $$
= (tem
->compunit
()->blockvector
()
622 error (_
("No file or function \"%s\"."),
628 block
: block COLONCOLON name
630 std
::string copy
= copy_name
($3);
632 = lookup_symbol
(copy.c_str
(), $1,
633 SEARCH_FUNCTION_DOMAIN
,
637 error (_
("No function \"%s\" in specified context."),
639 $$
= tem
->value_block
(); }
642 variable: block COLONCOLON name
643 { struct block_symbol sym
;
645 std
::string copy
= copy_name
($3);
646 sym
= lookup_symbol
(copy.c_str
(), $1,
649 error (_
("No symbol \"%s\" in specified context."),
652 pstate
->push_new
<var_value_operation
> (sym
);
656 qualified_name: typebase COLONCOLON name
658 struct type
*type
= $1;
660 if
(type
->code
() != TYPE_CODE_STRUCT
661 && type
->code
() != TYPE_CODE_UNION
)
662 error (_
("`%s' is not defined as an aggregate type."),
665 pstate
->push_new
<scope_operation
>
666 (type
, copy_name
($3));
670 variable: qualified_name
673 std
::string name
= copy_name
($2);
675 struct block_symbol sym
676 = lookup_symbol
(name.c_str
(), nullptr
,
677 SEARCH_VFT
, nullptr
);
678 pstate
->push_symbol
(name.c_str
(), sym
);
682 variable: name_not_typename
683 { struct block_symbol sym
= $1.sym
;
687 if
(symbol_read_needs_frame
(sym.symbol
))
688 pstate
->block_tracker
->update
(sym
);
690 pstate
->push_new
<var_value_operation
> (sym
);
691 current_type
= sym.symbol
->type
(); }
692 else if
($1.is_a_field_of_this
)
694 struct value
* this_val
;
695 struct type
* this_type
;
696 /* Object pascal: it hangs off of `this'. Must
697 not inadvertently convert from a method call
699 pstate
->block_tracker
->update
(sym
);
701 = make_operation
<op_this_operation
> ();
702 pstate
->push_new
<structop_operation
>
703 (std
::move
(thisop
), copy_name
($1.stoken
));
704 /* We need type of this. */
706 = value_of_this_silent
(pstate
->language
());
708 this_type
= this_val
->type
();
712 current_type
= lookup_struct_elt_type
(
714 copy_name
($1.stoken
).c_str
(), 0);
720 struct bound_minimal_symbol msymbol
;
721 std
::string arg
= copy_name
($1.stoken
);
724 lookup_bound_minimal_symbol
(arg.c_str
());
725 if
(msymbol.minsym
!= NULL
)
726 pstate
->push_new
<var_msym_value_operation
>
728 else if
(!have_full_symbols
(current_program_space
)
729 && !have_partial_symbols
(current_program_space
))
730 error (_
("No symbol table is loaded. "
731 "Use the \"file\" command."));
733 error (_
("No symbol \"%s\" in current context."),
743 /* We used to try to recognize more pointer to member types here, but
744 that didn't work (shift/reduce conflicts meant that these rules never
745 got executed). The problem is that
746 int (foo::bar::baz::bizzle)
747 is a function type but
748 int (foo::bar::baz::bizzle::*)
749 is a pointer to member type. Stroustrup loses again! */
754 typebase
/* Implements (approximately): (type-qualifier)* type-specifier */
756 { $$
= lookup_pointer_type
($2); }
761 = lookup_struct
(copy_name
($2).c_str
(),
762 pstate
->expression_context_block
);
766 = lookup_struct
(copy_name
($2).c_str
(),
767 pstate
->expression_context_block
);
769 /* "const" and "volatile" are curently ignored. A type qualifier
770 after the type is handled in the ptype rule. I think these could
774 name
: NAME
{ $$
= $1.stoken
; }
775 | BLOCKNAME
{ $$
= $1.stoken
; }
776 | TYPENAME
{ $$
= $1.stoken
; }
777 | NAME_OR_INT
{ $$
= $1.stoken
; }
780 name_not_typename
: NAME
782 /* These would be useful if name_not_typename was useful, but it is just
783 a fake for "variable", so these cause reduce/reduce conflicts because
784 the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable,
785 =exp) or just an exp. If name_not_typename was ever used in an lvalue
786 context where only a name could occur, this might be useful.
793 /* Take care of parsing a number (anything that starts with a digit).
794 Set yylval and return the token type; update lexptr.
795 LEN is the number of characters in it. */
797 /*** Needs some error checking for the float case ***/
800 parse_number
(struct parser_state
*par_state
,
801 const char *p
, int len
, int parsed_float
, YYSTYPE *putithere
)
808 int base
= input_radix
;
811 /* Number of "L" suffixes encountered. */
814 /* We have found a "L" or "U" suffix. */
815 int found_suffix
= 0;
819 /* Handle suffixes: 'f' for float, 'l' for long double.
820 FIXME: This appears to be an extension -- do we want this? */
821 if
(len
>= 1 && tolower
(p
[len
- 1]) == 'f')
823 putithere
->typed_val_float.type
824 = parse_type
(par_state
)->builtin_float
;
827 else if
(len
>= 1 && tolower
(p
[len
- 1]) == 'l')
829 putithere
->typed_val_float.type
830 = parse_type
(par_state
)->builtin_long_double
;
833 /* Default type for floating-point literals is double. */
836 putithere
->typed_val_float.type
837 = parse_type
(par_state
)->builtin_double
;
840 if
(!parse_float
(p
, len
,
841 putithere
->typed_val_float.type
,
842 putithere
->typed_val_float.val
))
847 /* Handle base-switching prefixes 0x, 0t, 0d, 0. */
848 if
(p
[0] == '0' && len
> 1)
881 if
(c
>= 'A' && c
<= 'Z')
883 if
(c
!= 'l' && c
!= 'u')
885 if
(c
>= '0' && c
<= '9')
893 if
(base
> 10 && c
>= 'a' && c
<= 'f')
897 n
+= i
= c
- 'a' + 10;
910 return ERROR
; /* Char not a digit */
913 return ERROR
; /* Invalid digit in this base. */
915 if
(c
!= 'l' && c
!= 'u')
917 /* Test for overflow. */
918 if
(prevn
== 0 && n
== 0)
921 error (_
("Numeric constant too large."));
926 /* An integer constant is an int, a long, or a long long. An L
927 suffix forces it to be long; an LL suffix forces it to be long
928 long. If not forced to a larger size, it gets the first type of
929 the above that it fits in. To figure out whether it fits, we
930 shift it right and see whether anything remains. Note that we
931 can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one
932 operation, because many compilers will warn about such a shift
933 (which always produces a zero result). Sometimes gdbarch_int_bit
934 or gdbarch_long_bit will be that big, sometimes not. To deal with
935 the case where it is we just always shift the value more than
936 once, with fewer bits each time. */
938 int int_bits
= gdbarch_int_bit
(par_state
->gdbarch
());
939 int long_bits
= gdbarch_long_bit
(par_state
->gdbarch
());
940 int long_long_bits
= gdbarch_long_long_bit
(par_state
->gdbarch
());
941 bool have_signed
= !unsigned_p
;
942 bool have_int
= long_p
== 0;
943 bool have_long
= long_p
<= 1;
944 if
(have_int
&& have_signed
&& fits_in_type
(1, n
, int_bits
, true
))
945 putithere
->typed_val_int.type
= parse_type
(par_state
)->builtin_int
;
946 else if
(have_int
&& fits_in_type
(1, n
, int_bits
, false
))
947 putithere
->typed_val_int.type
948 = parse_type
(par_state
)->builtin_unsigned_int
;
949 else if
(have_long
&& have_signed
&& fits_in_type
(1, n
, long_bits
, true
))
950 putithere
->typed_val_int.type
= parse_type
(par_state
)->builtin_long
;
951 else if
(have_long
&& fits_in_type
(1, n
, long_bits
, false
))
952 putithere
->typed_val_int.type
953 = parse_type
(par_state
)->builtin_unsigned_long
;
954 else if
(have_signed
&& fits_in_type
(1, n
, long_long_bits
, true
))
955 putithere
->typed_val_int.type
956 = parse_type
(par_state
)->builtin_long_long
;
957 else if
(fits_in_type
(1, n
, long_long_bits
, false
))
958 putithere
->typed_val_int.type
959 = parse_type
(par_state
)->builtin_unsigned_long_long
;
961 error (_
("Numeric constant too large."));
962 putithere
->typed_val_int.val
= n
;
971 struct type_push
*next
;
974 static struct type_push
*tp_top
= NULL
;
977 push_current_type
(void)
979 struct type_push
*tpnew
;
980 tpnew
= (struct type_push
*) malloc
(sizeof
(struct type_push
));
981 tpnew
->next
= tp_top
;
982 tpnew
->stored
= current_type
;
988 pop_current_type
(void)
990 struct type_push
*tp
= tp_top
;
993 current_type
= tp
->stored
;
1003 enum exp_opcode opcode
;
1006 static const struct p_token tokentab3
[] =
1008 {"shr", RSH
, OP_NULL
},
1009 {"shl", LSH
, OP_NULL
},
1010 {"and", ANDAND
, OP_NULL
},
1011 {"div", DIV
, OP_NULL
},
1012 {"not", NOT
, OP_NULL
},
1013 {"mod", MOD
, OP_NULL
},
1014 {"inc", INCREMENT
, OP_NULL
},
1015 {"dec", DECREMENT
, OP_NULL
},
1016 {"xor", XOR
, OP_NULL
}
1019 static const struct p_token tokentab2
[] =
1021 {"or", OR
, OP_NULL
},
1022 {"<>", NOTEQUAL
, OP_NULL
},
1023 {"<=", LEQ
, OP_NULL
},
1024 {">=", GEQ
, OP_NULL
},
1025 {":=", ASSIGN
, OP_NULL
},
1026 {"::", COLONCOLON
, OP_NULL
} };
1028 /* Allocate uppercased var: */
1029 /* make an uppercased copy of tokstart. */
1031 uptok
(const char *tokstart
, int namelen
)
1034 char *uptokstart
= (char *)malloc
(namelen
+1);
1035 for
(i
= 0;i
<= namelen
;i
++)
1037 if
((tokstart
[i
]>='a' && tokstart
[i
]<='z'))
1038 uptokstart
[i
] = tokstart
[i
]-('a'-'A');
1040 uptokstart
[i
] = tokstart
[i
];
1042 uptokstart
[namelen
]='\0';
1046 /* Skip over a Pascal string. STR must point to the opening single quote
1047 character. This function returns a pointer to the character after the
1048 closing single quote character.
1050 This function does not support embedded, escaped single quotes, which
1051 is done by placing two consecutive single quotes into a string.
1052 Support for this would be easy to add, but this function is only used
1053 from the Python expression parser, and if we did skip over escaped
1054 quotes then the rest of the expression parser wouldn't handle them
1057 pascal_skip_string
(const char *str
)
1059 gdb_assert
(*str
== '\'');
1063 while
(*str
!= '\0' && *str
!= '\'');
1068 /* Read one token, getting characters through lexptr. */
1075 const char *tokstart
;
1078 int explen
, tempbufindex
;
1079 static char *tempbuf
;
1080 static int tempbufsize
;
1084 pstate
->prev_lexptr
= pstate
->lexptr
;
1086 tokstart
= pstate
->lexptr
;
1087 explen
= strlen
(pstate
->lexptr
);
1089 /* See if it is a special token of length 3. */
1091 for
(const auto
&token
: tokentab3
)
1092 if
(strncasecmp
(tokstart
, token.oper
, 3) == 0
1093 && (!isalpha
(token.oper
[0]) || explen
== 3
1094 ||
(!isalpha
(tokstart
[3])
1095 && !isdigit
(tokstart
[3]) && tokstart
[3] != '_')))
1097 pstate
->lexptr
+= 3;
1098 yylval.opcode
= token.opcode
;
1102 /* See if it is a special token of length 2. */
1104 for
(const auto
&token
: tokentab2
)
1105 if
(strncasecmp
(tokstart
, token.oper
, 2) == 0
1106 && (!isalpha
(token.oper
[0]) || explen
== 2
1107 ||
(!isalpha
(tokstart
[2])
1108 && !isdigit
(tokstart
[2]) && tokstart
[2] != '_')))
1110 pstate
->lexptr
+= 2;
1111 yylval.opcode
= token.opcode
;
1115 switch
(c
= *tokstart
)
1118 if
(search_field
&& pstate
->parse_completion
)
1130 /* We either have a character constant ('0' or '\177' for example)
1131 or we have a quoted symbol reference ('foo(int,int)' in object pascal
1134 c
= *pstate
->lexptr
++;
1136 c
= parse_escape
(pstate
->gdbarch
(), &pstate
->lexptr
);
1138 error (_
("Empty character constant."));
1140 yylval.typed_val_int.val
= c
;
1141 yylval.typed_val_int.type
= parse_type
(pstate
)->builtin_char
;
1143 c
= *pstate
->lexptr
++;
1146 namelen
= pascal_skip_string
(tokstart
) - tokstart
;
1149 pstate
->lexptr
= tokstart
+ namelen
;
1150 if
(pstate
->lexptr
[-1] != '\'')
1151 error (_
("Unmatched single quote."));
1154 uptokstart
= uptok
(tokstart
,namelen
);
1157 error (_
("Invalid character constant."));
1167 if
(paren_depth
== 0)
1174 if
(pstate
->comma_terminates
&& paren_depth
== 0)
1180 /* Might be a floating point number. */
1181 if
(pstate
->lexptr
[1] < '0' || pstate
->lexptr
[1] > '9')
1183 goto symbol
; /* Nope, must be a symbol. */
1199 /* It's a number. */
1200 int got_dot
= 0, got_e
= 0, toktype
;
1201 const char *p
= tokstart
;
1202 int hex
= input_radix
> 10;
1204 if
(c
== '0' && (p
[1] == 'x' || p
[1] == 'X'))
1209 else if
(c
== '0' && (p
[1]=='t' || p
[1]=='T'
1210 || p
[1]=='d' || p
[1]=='D'))
1218 /* This test includes !hex because 'e' is a valid hex digit
1219 and thus does not indicate a floating point number when
1220 the radix is hex. */
1221 if
(!hex
&& !got_e
&& (*p
== 'e' ||
*p
== 'E'))
1222 got_dot
= got_e
= 1;
1223 /* This test does not include !hex, because a '.' always indicates
1224 a decimal floating point number regardless of the radix. */
1225 else if
(!got_dot
&& *p
== '.')
1227 else if
(got_e
&& (p
[-1] == 'e' || p
[-1] == 'E')
1228 && (*p
== '-' ||
*p
== '+'))
1229 /* This is the sign of the exponent, not the end of the
1232 /* We will take any letters or digits. parse_number will
1233 complain if past the radix, or if L or U are not final. */
1234 else if
((*p
< '0' ||
*p
> '9')
1235 && ((*p
< 'a' ||
*p
> 'z')
1236 && (*p
< 'A' ||
*p
> 'Z')))
1239 toktype
= parse_number
(pstate
, tokstart
,
1240 p
- tokstart
, got_dot | got_e
, &yylval);
1241 if
(toktype
== ERROR
)
1242 error (_
("Invalid number \"%.*s\"."), (int) (p
- tokstart
),
1273 /* Build the gdb internal form of the input string in tempbuf,
1274 translating any standard C escape forms seen. Note that the
1275 buffer is null byte terminated *only* for the convenience of
1276 debugging gdb itself and printing the buffer contents when
1277 the buffer contains no embedded nulls. Gdb does not depend
1278 upon the buffer being null byte terminated, it uses the length
1279 string instead. This allows gdb to handle C strings (as well
1280 as strings in other languages) with embedded null bytes. */
1282 tokptr
= ++tokstart
;
1286 /* Grow the static temp buffer if necessary, including allocating
1287 the first one on demand. */
1288 if
(tempbufindex
+ 1 >= tempbufsize
)
1290 tempbuf
= (char *) realloc
(tempbuf
, tempbufsize
+= 64);
1297 /* Do nothing, loop will terminate. */
1301 c
= parse_escape
(pstate
->gdbarch
(), &tokptr
);
1306 tempbuf
[tempbufindex
++] = c
;
1309 tempbuf
[tempbufindex
++] = *tokptr
++;
1312 } while
((*tokptr
!= '"') && (*tokptr
!= '\0'));
1313 if
(*tokptr
++ != '"')
1315 error (_
("Unterminated string in expression."));
1317 tempbuf
[tempbufindex
] = '\0'; /* See note above. */
1318 yylval.sval.ptr
= tempbuf
;
1319 yylval.sval.length
= tempbufindex
;
1320 pstate
->lexptr
= tokptr
;
1324 if
(!(c
== '_' || c
== '$'
1325 ||
(c
>= 'a' && c
<= 'z') ||
(c
>= 'A' && c
<= 'Z')))
1326 /* We must have come across a bad character (e.g. ';'). */
1327 error (_
("Invalid character '%c' in expression."), c
);
1329 /* It's a name. See how long it is. */
1331 for
(c
= tokstart
[namelen
];
1332 (c
== '_' || c
== '$' ||
(c
>= '0' && c
<= '9')
1333 ||
(c
>= 'a' && c
<= 'z') ||
(c
>= 'A' && c
<= 'Z') || c
== '<');)
1335 /* Template parameter lists are part of the name.
1336 FIXME: This mishandles `print $a<4&&$a>3'. */
1340 int nesting_level
= 1;
1341 while
(tokstart
[++i
])
1343 if
(tokstart
[i
] == '<')
1345 else if
(tokstart
[i
] == '>')
1347 if
(--nesting_level
== 0)
1351 if
(tokstart
[i
] == '>')
1357 /* do NOT uppercase internals because of registers !!! */
1358 c
= tokstart
[++namelen
];
1361 uptokstart
= uptok
(tokstart
,namelen
);
1363 /* The token "if" terminates the expression and is NOT
1364 removed from the input stream. */
1365 if
(namelen
== 2 && uptokstart
[0] == 'I' && uptokstart
[1] == 'F')
1371 pstate
->lexptr
+= namelen
;
1375 /* Catch specific keywords. Should be done with a data structure. */
1379 if
(strcmp
(uptokstart
, "OBJECT") == 0)
1384 if
(strcmp
(uptokstart
, "RECORD") == 0)
1389 if
(strcmp
(uptokstart
, "SIZEOF") == 0)
1396 if
(strcmp
(uptokstart
, "CLASS") == 0)
1401 if
(strcmp
(uptokstart
, "FALSE") == 0)
1405 return FALSEKEYWORD
;
1409 if
(strcmp
(uptokstart
, "TRUE") == 0)
1415 if
(strcmp
(uptokstart
, "SELF") == 0)
1417 /* Here we search for 'this' like
1418 inserted in FPC stabs debug info. */
1419 static const char this_name
[] = "this";
1421 if
(lookup_symbol
(this_name
, pstate
->expression_context_block
,
1422 SEARCH_VFT
, NULL
).symbol
)
1433 yylval.sval.ptr
= tokstart
;
1434 yylval.sval.length
= namelen
;
1436 if
(*tokstart
== '$')
1439 return DOLLAR_VARIABLE
;
1442 /* Use token-type BLOCKNAME for symbols that happen to be defined as
1443 functions or symtabs. If this is not so, then ...
1444 Use token-type TYPENAME for symbols that happen to be defined
1445 currently as names of types; NAME for other symbols.
1446 The caller is not constrained to care about the distinction. */
1448 std
::string tmp
= copy_name
(yylval.sval
);
1450 struct field_of_this_result is_a_field_of_this
;
1454 is_a_field_of_this.type
= NULL
;
1455 if
(search_field
&& current_type
)
1456 is_a_field
= (lookup_struct_elt_type
(current_type
,
1457 tmp.c_str
(), 1) != NULL
);
1461 sym
= lookup_symbol
(tmp.c_str
(), pstate
->expression_context_block
,
1462 SEARCH_VFT
, &is_a_field_of_this
).symbol
;
1463 /* second chance uppercased (as Free Pascal does). */
1464 if
(!sym
&& is_a_field_of_this.type
== NULL
&& !is_a_field
)
1466 for
(int i
= 0; i
<= namelen
; i
++)
1468 if
((tmp
[i
] >= 'a' && tmp
[i
] <= 'z'))
1469 tmp
[i
] -= ('a'-'A');
1471 if
(search_field
&& current_type
)
1472 is_a_field
= (lookup_struct_elt_type
(current_type
,
1473 tmp.c_str
(), 1) != NULL
);
1477 sym
= lookup_symbol
(tmp.c_str
(), pstate
->expression_context_block
,
1478 SEARCH_VFT
, &is_a_field_of_this
).symbol
;
1480 /* Third chance Capitalized (as GPC does). */
1481 if
(!sym
&& is_a_field_of_this.type
== NULL
&& !is_a_field
)
1483 for
(int i
= 0; i
<= namelen
; i
++)
1487 if
((tmp
[i
] >= 'a' && tmp
[i
] <= 'z'))
1488 tmp
[i
] -= ('a'-'A');
1491 if
((tmp
[i
] >= 'A' && tmp
[i
] <= 'Z'))
1492 tmp
[i
] -= ('A'-'a');
1494 if
(search_field
&& current_type
)
1495 is_a_field
= (lookup_struct_elt_type
(current_type
,
1496 tmp.c_str
(), 1) != NULL
);
1500 sym
= lookup_symbol
(tmp.c_str
(), pstate
->expression_context_block
,
1501 SEARCH_VFT
, &is_a_field_of_this
).symbol
;
1504 if
(is_a_field ||
(is_a_field_of_this.type
!= NULL
))
1506 tempbuf
= (char *) realloc
(tempbuf
, namelen
+ 1);
1507 strncpy
(tempbuf
, tmp.c_str
(), namelen
);
1508 tempbuf
[namelen
] = 0;
1509 yylval.sval.ptr
= tempbuf
;
1510 yylval.sval.length
= namelen
;
1511 yylval.ssym.sym.symbol
= NULL
;
1512 yylval.ssym.sym.block
= NULL
;
1514 yylval.ssym.is_a_field_of_this
= is_a_field_of_this.type
!= NULL
;
1520 /* Call lookup_symtab, not lookup_partial_symtab, in case there are
1521 no psymtabs (coff, xcoff, or some future change to blow away the
1522 psymtabs once once symbols are read). */
1523 if
((sym
&& sym
->aclass
() == LOC_BLOCK
)
1524 || lookup_symtab
(tmp.c_str
()))
1526 yylval.ssym.sym.symbol
= sym
;
1527 yylval.ssym.sym.block
= NULL
;
1528 yylval.ssym.is_a_field_of_this
= is_a_field_of_this.type
!= NULL
;
1532 if
(sym
&& sym
->aclass
() == LOC_TYPEDEF
)
1535 /* Despite the following flaw, we need to keep this code enabled.
1536 Because we can get called from check_stub_method, if we don't
1537 handle nested types then it screws many operations in any
1538 program which uses nested types. */
1539 /* In "A::x", if x is a member function of A and there happens
1540 to be a type (nested or not, since the stabs don't make that
1541 distinction) named x, then this code incorrectly thinks we
1542 are dealing with nested types rather than a member function. */
1545 const char *namestart
;
1546 struct symbol
*best_sym
;
1548 /* Look ahead to detect nested types. This probably should be
1549 done in the grammar, but trying seemed to introduce a lot
1550 of shift/reduce and reduce/reduce conflicts. It's possible
1551 that it could be done, though. Or perhaps a non-grammar, but
1552 less ad hoc, approach would work well. */
1554 /* Since we do not currently have any way of distinguishing
1555 a nested type from a non-nested one (the stabs don't tell
1556 us whether a type is nested), we just ignore the
1563 /* Skip whitespace. */
1564 while
(*p
== ' ' ||
*p
== '\t' ||
*p
== '\n')
1566 if
(*p
== ':' && p
[1] == ':')
1568 /* Skip the `::'. */
1570 /* Skip whitespace. */
1571 while
(*p
== ' ' ||
*p
== '\t' ||
*p
== '\n')
1574 while
(*p
== '_' ||
*p
== '$' ||
(*p
>= '0' && *p
<= '9')
1575 ||
(*p
>= 'a' && *p
<= 'z')
1576 ||
(*p
>= 'A' && *p
<= 'Z'))
1580 struct symbol
*cur_sym
;
1581 /* As big as the whole rest of the expression, which is
1582 at least big enough. */
1584 = (char *) alloca
(tmp.size
() + strlen
(namestart
)
1589 memcpy
(tmp1
, tmp.c_str
(), tmp.size
());
1590 tmp1
+= tmp.size
();
1591 memcpy
(tmp1
, "::", 2);
1593 memcpy
(tmp1
, namestart
, p
- namestart
);
1594 tmp1
[p
- namestart
] = '\0';
1596 = lookup_symbol
(ncopy
,
1597 pstate
->expression_context_block
,
1598 SEARCH_VFT
, NULL
).symbol
;
1601 if
(cur_sym
->aclass
() == LOC_TYPEDEF
)
1619 yylval.tsym.type
= best_sym
->type
();
1621 yylval.tsym.type
= sym
->type
();
1627 = language_lookup_primitive_type
(pstate
->language
(),
1628 pstate
->gdbarch
(), tmp.c_str
());
1629 if
(yylval.tsym.type
!= NULL
)
1635 /* Input names that aren't symbols but ARE valid hex numbers,
1636 when the input radix permits them, can be names or numbers
1637 depending on the parse. Note we support radixes > 16 here. */
1639 && ((tokstart
[0] >= 'a' && tokstart
[0] < 'a' + input_radix
- 10)
1640 ||
(tokstart
[0] >= 'A' && tokstart
[0] < 'A' + input_radix
- 10)))
1642 YYSTYPE newlval
; /* Its value is ignored. */
1643 hextype
= parse_number
(pstate
, tokstart
, namelen
, 0, &newlval
);
1646 yylval.ssym.sym.symbol
= sym
;
1647 yylval.ssym.sym.block
= NULL
;
1648 yylval.ssym.is_a_field_of_this
= is_a_field_of_this.type
!= NULL
;
1655 /* Any other kind of symbol. */
1656 yylval.ssym.sym.symbol
= sym
;
1657 yylval.ssym.sym.block
= NULL
;
1662 /* See language.h. */
1665 pascal_language::parser
(struct parser_state
*par_state
) const
1667 /* Setting up the parser state. */
1668 scoped_restore pstate_restore
= make_scoped_restore
(&pstate
);
1669 gdb_assert
(par_state
!= NULL
);
1673 int result
= yyparse ();
1675 pstate
->set_operation
(pstate
->pop
());
1680 yyerror (const char *msg
)
1682 pstate
->parse_error
(msg
);