1 /* YACC parser for Ada expressions, for GDB.
2 Copyright (C) 1986-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 /* Parse an Ada expression from text in a string,
20 and return the result as a struct expression pointer.
21 That structure contains arithmetic operations in reverse polish,
22 with constants represented by operations that are followed by special data.
23 See expression.h for the details of the format.
24 What is important here is that it can be built up sequentially
25 during the process of parsing; the lower levels of the tree always
26 come first in the result.
28 malloc's and realloc's in this file are transformed to
29 xmalloc and xrealloc respectively by the same sed command in the
30 makefile that remaps any other malloc/realloc inserted by the parser
31 generator. Doing this with #defines and trying to control the interaction
32 with include files (<malloc.h> and <stdlib.h> for example) just became
33 too messy, particularly when such includes can be inserted at random
34 times by the parser generator. */
40 #include "expression.h"
42 #include "parser-defs.h"
49 #define parse_type(ps) builtin_type (ps->gdbarch ())
51 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror,
53 #define GDB_YY_REMAP_PREFIX ada_
58 struct minimal_symbol
*msym
;
59 const struct block
*block
;
63 /* The state of the parser, used internally when we are parsing the
66 static struct parser_state
*pstate
= NULL
;
68 /* The original expression string. */
69 static const char *original_expr
;
71 /* We don't have a good way to manage non-POD data in Yacc, so store
72 values here. The storage here is only valid for the duration of
74 static std
::vector
<std
::unique_ptr
<gdb_mpz
>> int_storage
;
78 static int yylex (void);
80 static void yyerror (const char *);
82 static void write_int
(struct parser_state
*, LONGEST
, struct type
*);
84 static void write_object_renaming
(struct parser_state
*,
85 const struct block
*, const char *, int,
88 static struct type
* write_var_or_type
(struct parser_state
*,
89 const struct block
*, struct stoken
);
90 static struct type
*write_var_or_type_completion
(struct parser_state
*,
94 static void write_name_assoc
(struct parser_state
*, struct stoken
);
96 static const struct block
*block_lookup
(const struct block
*, const char *);
98 static void write_ambiguous_var
(struct parser_state
*,
99 const struct block
*, const char *, int);
101 static struct type
*type_for_char
(struct parser_state
*, ULONGEST
);
103 static struct type
*type_system_address
(struct parser_state
*);
105 static std
::string find_completion_bounds
(struct parser_state
*);
107 using namespace expr
;
109 /* Handle Ada type resolution for OP. DEPROCEDURE_P and CONTEXT_TYPE
110 are passed to the resolve method, if called. */
112 resolve
(operation_up
&&op
, bool deprocedure_p
, struct type
*context_type
)
114 operation_up result
= std
::move
(op
);
115 ada_resolvable
*res
= dynamic_cast
<ada_resolvable
*> (result.get
());
117 return res
->replace
(std
::move
(result
),
118 pstate
->expout.get
(),
120 pstate
->parse_completion
,
121 pstate
->block_tracker
,
126 /* Like parser_state::pop, but handles Ada type resolution.
127 DEPROCEDURE_P and CONTEXT_TYPE are passed to the resolve method, if
130 ada_pop
(bool deprocedure_p
= true
, struct type
*context_type
= nullptr
)
132 /* Of course it's ok to call parser_state::pop here... */
133 return resolve
(pstate
->pop
(), deprocedure_p
, context_type
);
136 /* Like parser_state::wrap, but use ada_pop to pop the value. */
141 operation_up arg
= ada_pop
();
142 pstate
->push_new
<T
> (std
::move
(arg
));
145 /* Create and push an address-of operation, as appropriate for Ada.
146 If TYPE is not NULL, the resulting operation will be wrapped in a
149 ada_addrof
(struct type
*type
= nullptr
)
151 operation_up arg
= ada_pop
(false
);
152 operation_up addr
= make_operation
<unop_addr_operation
> (std
::move
(arg
));
154 = make_operation
<ada_wrapped_operation
> (std
::move
(addr
));
156 wrapped
= make_operation
<unop_cast_operation
> (std
::move
(wrapped
), type
);
157 pstate
->push
(std
::move
(wrapped
));
160 /* Handle operator overloading. Either returns a function all
161 operation wrapping the arguments, or it returns null, leaving the
162 caller to construct the appropriate operation. If RHS is null, a
163 unary operator is assumed. */
165 maybe_overload
(enum exp_opcode op
, operation_up
&lhs
, operation_up
&rhs
)
167 struct value
*args
[2];
170 args
[0] = lhs
->evaluate
(nullptr
, pstate
->expout.get
(),
171 EVAL_AVOID_SIDE_EFFECTS
);
176 args
[1] = rhs
->evaluate
(nullptr
, pstate
->expout.get
(),
177 EVAL_AVOID_SIDE_EFFECTS
);
181 block_symbol fn
= ada_find_operator_symbol
(op
, pstate
->parse_completion
,
183 if
(fn.symbol
== nullptr
)
186 if
(symbol_read_needs_frame
(fn.symbol
))
187 pstate
->block_tracker
->update
(fn.block
, INNERMOST_BLOCK_FOR_SYMBOLS
);
188 operation_up callee
= make_operation
<ada_var_value_operation
> (fn
);
190 std
::vector
<operation_up
> argvec
;
191 argvec.push_back
(std
::move
(lhs
));
193 argvec.push_back
(std
::move
(rhs
));
194 return make_operation
<ada_funcall_operation
> (std
::move
(callee
),
198 /* Like parser_state::wrap, but use ada_pop to pop the value, and
199 handle unary overloading. */
202 ada_wrap_overload
(enum exp_opcode op
)
204 operation_up arg
= ada_pop
();
207 operation_up call
= maybe_overload
(op
, arg
, empty
);
209 call
= make_operation
<T
> (std
::move
(arg
));
210 pstate
->push
(std
::move
(call
));
213 /* A variant of parser_state::wrap2 that uses ada_pop to pop both
214 operands, and then pushes a new Ada-wrapped operation of the
218 ada_un_wrap2
(enum exp_opcode op
)
220 operation_up rhs
= ada_pop
();
221 operation_up lhs
= ada_pop
();
223 operation_up wrapped
= maybe_overload
(op
, lhs
, rhs
);
224 if
(wrapped
== nullptr
)
226 wrapped
= make_operation
<T
> (std
::move
(lhs
), std
::move
(rhs
));
227 wrapped
= make_operation
<ada_wrapped_operation
> (std
::move
(wrapped
));
229 pstate
->push
(std
::move
(wrapped
));
232 /* A variant of parser_state::wrap2 that uses ada_pop to pop both
233 operands. Unlike ada_un_wrap2, ada_wrapped_operation is not
237 ada_wrap2
(enum exp_opcode op
)
239 operation_up rhs
= ada_pop
();
240 operation_up lhs
= ada_pop
();
241 operation_up call
= maybe_overload
(op
, lhs
, rhs
);
243 call
= make_operation
<T
> (std
::move
(lhs
), std
::move
(rhs
));
244 pstate
->push
(std
::move
(call
));
247 /* A variant of parser_state::wrap2 that uses ada_pop to pop both
248 operands. OP is also passed to the constructor of the new binary
252 ada_wrap_op
(enum exp_opcode op
)
254 operation_up rhs
= ada_pop
();
255 operation_up lhs
= ada_pop
();
256 operation_up call
= maybe_overload
(op
, lhs
, rhs
);
258 call
= make_operation
<T
> (op
, std
::move
(lhs
), std
::move
(rhs
));
259 pstate
->push
(std
::move
(call
));
262 /* Pop three operands using ada_pop, then construct a new ternary
263 operation of type T and push it. */
268 operation_up rhs
= ada_pop
();
269 operation_up mid
= ada_pop
();
270 operation_up lhs
= ada_pop
();
271 pstate
->push_new
<T
> (std
::move
(lhs
), std
::move
(mid
), std
::move
(rhs
));
274 /* Pop NARGS operands, then a callee operand, and use these to
275 construct and push a new Ada function call operation. */
277 ada_funcall
(int nargs
)
279 /* We use the ordinary pop here, because we're going to do
280 resolution in a separate step, in order to handle array
282 std
::vector
<operation_up
> args
= pstate
->pop_vector
(nargs
);
283 /* Call parser_state::pop here, because we don't want to
284 function-convert the callee slot of a call we're already
286 operation_up callee
= pstate
->pop
();
288 ada_var_value_operation
*vvo
289 = dynamic_cast
<ada_var_value_operation
*> (callee.get
());
291 struct type
*callee_t
= nullptr
;
293 || vvo
->get_symbol
()->domain
() != UNDEF_DOMAIN
)
295 struct value
*callee_v
= callee
->evaluate
(nullptr
,
296 pstate
->expout.get
(),
297 EVAL_AVOID_SIDE_EFFECTS
);
298 callee_t
= ada_check_typedef
(callee_v
->type
());
299 array_arity
= ada_array_arity
(callee_t
);
302 for
(int i
= 0; i
< nargs
; ++i
)
304 struct type
*subtype
= nullptr
;
306 subtype
= ada_index_type
(callee_t
, i
+ 1, "array type");
307 args
[i
] = resolve
(std
::move
(args
[i
]), true
, subtype
);
310 std
::unique_ptr
<ada_funcall_operation
> funcall
311 (new ada_funcall_operation
(std
::move
(callee
), std
::move
(args
)));
312 funcall
->resolve
(pstate
->expout.get
(), true
, pstate
->parse_completion
,
313 pstate
->block_tracker
, nullptr
);
314 pstate
->push
(std
::move
(funcall
));
317 /* The components being constructed during this parse. */
318 static std
::vector
<ada_component_up
> components
;
320 /* Create a new ada_component_up of the indicated type and arguments,
321 and push it on the global 'components' vector. */
322 template
<typename T
, typename... Arg
>
324 push_component
(Arg... args
)
326 components.emplace_back
(new T
(std
::forward
<Arg
> (args
)...
));
329 /* Examine the final element of the 'components' vector, and return it
330 as a pointer to an ada_choices_component. The caller is
331 responsible for ensuring that the final element is in fact an
332 ada_choices_component. */
333 static ada_choices_component
*
336 ada_component
*last
= components.back
().get
();
337 return gdb
::checked_static_cast
<ada_choices_component
*> (last
);
340 /* Pop the most recent component from the global stack, and return
342 static ada_component_up
345 ada_component_up result
= std
::move
(components.back
());
346 components.pop_back
();
350 /* Pop the N most recent components from the global stack, and return
352 static std
::vector
<ada_component_up
>
353 pop_components
(int n
)
355 std
::vector
<ada_component_up
> result
(n
);
356 for
(int i
= 1; i
<= n
; ++i
)
357 result
[n
- i
] = pop_component
();
361 /* The associations being constructed during this parse. */
362 static std
::vector
<ada_association_up
> associations
;
364 /* Create a new ada_association_up of the indicated type and
365 arguments, and push it on the global 'associations' vector. */
366 template
<typename T
, typename... Arg
>
368 push_association
(Arg... args
)
370 associations.emplace_back
(new T
(std
::forward
<Arg
> (args
)...
));
373 /* Pop the most recent association from the global stack, and return
375 static ada_association_up
378 ada_association_up result
= std
::move
(associations.back
());
379 associations.pop_back
();
383 /* Pop the N most recent associations from the global stack, and
384 return them in a vector. */
385 static std
::vector
<ada_association_up
>
386 pop_associations
(int n
)
388 std
::vector
<ada_association_up
> result
(n
);
389 for
(int i
= 1; i
<= n
; ++i
)
390 result
[n
- i
] = pop_association
();
394 /* Expression completer for attributes. */
395 struct ada_tick_completer
: public expr_completion_base
397 explicit ada_tick_completer
(std
::string &&name
)
398 : m_name
(std
::move
(name
))
402 bool complete
(struct expression
*exp
,
403 completion_tracker
&tracker
) override
;
410 /* Make a new ada_tick_completer and wrap it in a unique pointer. */
411 static std
::unique_ptr
<expr_completion_base
>
412 make_tick_completer
(struct stoken tok
)
414 return
(std
::unique_ptr
<expr_completion_base
>
415 (new ada_tick_completer
(std
::string (tok.ptr
, tok.length
))));
418 /* A convenience typedef. */
419 typedef std
::unique_ptr
<ada_assign_operation
> ada_assign_up
;
421 /* The stack of currently active assignment expressions. This is used
422 to implement '@', the target name symbol. */
423 static std
::vector
<ada_assign_up
> assignments
;
444 const struct block
*bval
;
445 struct internalvar
*ivar
;
448 %type
<lval
> positional_list component_groups component_associations
449 %type
<lval
> aggregate_component_list
450 %type
<tval
> var_or_type type_prefix opt_type_prefix
452 %token
<typed_val
> INT NULL_PTR
453 %token
<typed_char
> CHARLIT
454 %token
<typed_val_float
> FLOAT
455 %token TRUEKEYWORD FALSEKEYWORD
457 %token
<sval
> STRING NAME DOT_ID TICK_COMPLETE DOT_COMPLETE NAME_COMPLETE
459 %type
<lval
> arglist tick_arglist
461 /* Special type cases, put in to allow the parser to distinguish different
463 %token
<sval
> DOLLAR_VARIABLE
466 %left _AND_ OR XOR THEN ELSE
467 %left
'=' NOTEQUAL
'<' '>' LEQ GEQ IN DOTDOT
471 %left
'*' '/' MOD REM
472 %right STARSTAR ABS NOT
474 /* Artificial token to give NAME => ... and NAME | priority over reducing
475 NAME to <primary> and to give <primary>' priority over reducing <primary>
481 %right TICK_ACCESS TICK_ADDRESS TICK_FIRST TICK_LAST TICK_LENGTH
482 %right TICK_MAX TICK_MIN TICK_MODULUS
483 %right TICK_POS TICK_RANGE TICK_SIZE TICK_TAG TICK_VAL
484 %right TICK_COMPLETE TICK_ENUM_REP TICK_ENUM_VAL
485 /* The following are right-associative only so that reductions at this
486 precedence have lower precedence than '.' and '('. The syntax still
487 forces a.b.c, e.g., to be LEFT-associated. */
488 %right
'.' '(' '[' DOT_ID DOT_COMPLETE
498 /* Expressions, including the sequencing operator. */
501 { ada_wrap2
<comma_operation
> (BINOP_COMMA
); }
504 assignments.emplace_back
505 (new ada_assign_operation
(ada_pop
(), nullptr
));
507 exp
/* Extension for convenience */
510 = std
::move
(assignments.back
());
511 assignments.pop_back
();
512 value
*lhs_val
= (assign
->eval_for_resolution
513 (pstate
->expout.get
()));
515 operation_up rhs
= pstate
->pop
();
516 rhs
= resolve
(std
::move
(rhs
), true
,
519 assign
->set_rhs
(std
::move
(rhs
));
520 pstate
->push
(std
::move
(assign
));
524 /* Expressions, not including the sequencing operator. */
526 primary
: primary DOT_ID
528 if
(strcmp
($2.ptr
, "all") == 0)
529 ada_wrap
<ada_unop_ind_operation
> ();
532 operation_up arg
= ada_pop
();
533 pstate
->push_new
<ada_structop_operation
>
534 (std
::move
(arg
), copy_name
($2));
539 primary
: primary DOT_COMPLETE
541 /* This is done even for ".all", because
542 that might be a prefix. */
543 operation_up arg
= ada_pop
();
544 ada_structop_operation
*str_op
545 = (new ada_structop_operation
546 (std
::move
(arg
), copy_name
($2)));
547 str_op
->set_prefix
(find_completion_bounds
(pstate
));
548 pstate
->push
(operation_up
(str_op
));
549 pstate
->mark_struct_expression
(str_op
);
553 primary
: primary
'(' arglist
')'
554 { ada_funcall
($3); }
555 | var_or_type
'(' arglist
')'
560 error (_
("Invalid conversion"));
561 operation_up arg
= ada_pop
();
562 pstate
->push_new
<unop_cast_operation
>
563 (std
::move
(arg
), $1);
570 primary
: var_or_type
'\'' '(' exp
')'
573 error (_
("Type required for qualification"));
574 operation_up arg
= ada_pop
(true
,
576 pstate
->push_new
<ada_qual_operation
>
577 (std
::move
(arg
), $1);
582 primary
'(' simple_exp DOTDOT simple_exp
')'
583 { ada_wrap3
<ada_ternop_slice_operation
> (); }
584 | var_or_type
'(' simple_exp DOTDOT simple_exp
')'
586 ada_wrap3
<ada_ternop_slice_operation
> ();
588 error (_
("Cannot slice a type"));
592 primary
: '(' exp1
')' { }
595 /* The following rule causes a conflict with the type conversion
597 To get around it, we give '(' higher priority and add bridge rules for
598 var_or_type (exp, exp, ...)
599 var_or_type (exp .. exp)
600 We also have the action for var_or_type(exp) generate a function call
601 when the first symbol does not denote a type. */
603 primary
: var_or_type %prec VAR
605 pstate
->push_new
<type_operation
> ($1);
609 primary
: DOLLAR_VARIABLE
/* Various GDB extensions */
610 { pstate
->push_dollar
($1); }
615 pstate
->push_new
<ada_aggregate_operation
>
622 if
(assignments.empty
())
623 error (_
("the target name symbol ('@') may only "
624 "appear in an assignment context"));
625 ada_assign_operation
*current
626 = assignments.back
().get
();
627 pstate
->push_new
<ada_target_operation
> (current
);
634 simple_exp
: '-' simple_exp %prec UNARY
635 { ada_wrap_overload
<ada_neg_operation
> (UNOP_NEG
); }
638 simple_exp
: '+' simple_exp %prec UNARY
640 operation_up arg
= ada_pop
();
643 /* If an overloaded operator was found, use
644 it. Otherwise, unary + has no effect and
645 the argument can be pushed instead. */
646 operation_up call
= maybe_overload
(UNOP_PLUS
, arg
,
649 arg
= std
::move
(call
);
650 pstate
->push
(std
::move
(arg
));
654 simple_exp
: NOT simple_exp %prec UNARY
656 ada_wrap_overload
<unary_logical_not_operation
>
661 simple_exp
: ABS simple_exp %prec UNARY
662 { ada_wrap_overload
<ada_abs_operation
> (UNOP_ABS
); }
665 arglist
: { $$
= 0; }
674 | arglist
',' NAME ARROW exp
678 primary
: '{' var_or_type
'}' primary %prec
'.'
682 error (_
("Type required within braces in coercion"));
683 operation_up arg
= ada_pop
();
684 pstate
->push_new
<unop_memval_operation
>
685 (std
::move
(arg
), $2);
689 /* Binary operators in order of decreasing precedence. */
691 simple_exp
: simple_exp STARSTAR simple_exp
692 { ada_wrap2
<ada_binop_exp_operation
> (BINOP_EXP
); }
695 simple_exp
: simple_exp
'*' simple_exp
696 { ada_wrap2
<ada_binop_mul_operation
> (BINOP_MUL
); }
699 simple_exp
: simple_exp
'/' simple_exp
700 { ada_wrap2
<ada_binop_div_operation
> (BINOP_DIV
); }
703 simple_exp
: simple_exp REM simple_exp
/* May need to be fixed to give correct Ada REM */
704 { ada_wrap2
<ada_binop_rem_operation
> (BINOP_REM
); }
707 simple_exp
: simple_exp MOD simple_exp
708 { ada_wrap2
<ada_binop_mod_operation
> (BINOP_MOD
); }
711 simple_exp
: simple_exp
'@' simple_exp
/* GDB extension */
712 { ada_wrap2
<repeat_operation
> (BINOP_REPEAT
); }
715 simple_exp
: simple_exp
'+' simple_exp
716 { ada_wrap_op
<ada_binop_addsub_operation
> (BINOP_ADD
); }
719 simple_exp
: simple_exp
'&' simple_exp
720 { ada_wrap2
<ada_concat_operation
> (BINOP_CONCAT
); }
723 simple_exp
: simple_exp
'-' simple_exp
724 { ada_wrap_op
<ada_binop_addsub_operation
> (BINOP_SUB
); }
727 relation
: simple_exp
730 relation
: simple_exp
'=' simple_exp
731 { ada_wrap_op
<ada_binop_equal_operation
> (BINOP_EQUAL
); }
734 relation
: simple_exp NOTEQUAL simple_exp
735 { ada_wrap_op
<ada_binop_equal_operation
> (BINOP_NOTEQUAL
); }
738 relation
: simple_exp LEQ simple_exp
739 { ada_un_wrap2
<leq_operation
> (BINOP_LEQ
); }
742 relation
: simple_exp IN simple_exp DOTDOT simple_exp
743 { ada_wrap3
<ada_ternop_range_operation
> (); }
744 | simple_exp IN primary TICK_RANGE tick_arglist
746 operation_up rhs
= ada_pop
();
747 operation_up lhs
= ada_pop
();
748 pstate
->push_new
<ada_binop_in_bounds_operation
>
749 (std
::move
(lhs
), std
::move
(rhs
), $5);
751 | simple_exp IN var_or_type %prec TICK_ACCESS
754 error (_
("Right operand of 'in' must be type"));
755 operation_up arg
= ada_pop
();
756 pstate
->push_new
<ada_unop_range_operation
>
757 (std
::move
(arg
), $3);
759 | simple_exp NOT IN simple_exp DOTDOT simple_exp
760 { ada_wrap3
<ada_ternop_range_operation
> ();
761 ada_wrap
<unary_logical_not_operation
> (); }
762 | simple_exp NOT IN primary TICK_RANGE tick_arglist
764 operation_up rhs
= ada_pop
();
765 operation_up lhs
= ada_pop
();
766 pstate
->push_new
<ada_binop_in_bounds_operation
>
767 (std
::move
(lhs
), std
::move
(rhs
), $6);
768 ada_wrap
<unary_logical_not_operation
> ();
770 | simple_exp NOT IN var_or_type %prec TICK_ACCESS
773 error (_
("Right operand of 'in' must be type"));
774 operation_up arg
= ada_pop
();
775 pstate
->push_new
<ada_unop_range_operation
>
776 (std
::move
(arg
), $4);
777 ada_wrap
<unary_logical_not_operation
> ();
781 relation
: simple_exp GEQ simple_exp
782 { ada_un_wrap2
<geq_operation
> (BINOP_GEQ
); }
785 relation
: simple_exp
'<' simple_exp
786 { ada_un_wrap2
<less_operation
> (BINOP_LESS
); }
789 relation
: simple_exp
'>' simple_exp
790 { ada_un_wrap2
<gtr_operation
> (BINOP_GTR
); }
802 relation _AND_ relation
803 { ada_wrap2
<ada_bitwise_and_operation
>
804 (BINOP_BITWISE_AND
); }
805 | and_exp _AND_ relation
806 { ada_wrap2
<ada_bitwise_and_operation
>
807 (BINOP_BITWISE_AND
); }
811 relation _AND_ THEN relation
812 { ada_wrap2
<logical_and_operation
>
813 (BINOP_LOGICAL_AND
); }
814 | and_then_exp _AND_ THEN relation
815 { ada_wrap2
<logical_and_operation
>
816 (BINOP_LOGICAL_AND
); }
821 { ada_wrap2
<ada_bitwise_ior_operation
>
822 (BINOP_BITWISE_IOR
); }
824 { ada_wrap2
<ada_bitwise_ior_operation
>
825 (BINOP_BITWISE_IOR
); }
829 relation OR ELSE relation
830 { ada_wrap2
<logical_or_operation
> (BINOP_LOGICAL_OR
); }
831 | or_else_exp OR ELSE relation
832 { ada_wrap2
<logical_or_operation
> (BINOP_LOGICAL_OR
); }
835 xor_exp
: relation XOR relation
836 { ada_wrap2
<ada_bitwise_xor_operation
>
837 (BINOP_BITWISE_XOR
); }
838 | xor_exp XOR relation
839 { ada_wrap2
<ada_bitwise_xor_operation
>
840 (BINOP_BITWISE_XOR
); }
843 /* Primaries can denote types (OP_TYPE). In cases such as
844 primary TICK_ADDRESS, where a type would be invalid, it will be
845 caught when evaluate_subexp in ada-lang.c tries to evaluate the
846 primary, expecting a value. Precedence rules resolve the ambiguity
847 in NAME TICK_ACCESS in favor of shifting to form a var_or_type. A
848 construct such as aType'access'access will again cause an error when
849 aType'access evaluates to a type that evaluate_subexp attempts to
851 primary
: primary TICK_ACCESS
853 | primary TICK_ADDRESS
854 { ada_addrof
(type_system_address
(pstate
)); }
855 | primary TICK_COMPLETE
857 pstate
->mark_completion
(make_tick_completer
($2));
859 | primary TICK_FIRST tick_arglist
861 operation_up arg
= ada_pop
();
862 pstate
->push_new
<ada_unop_atr_operation
>
863 (std
::move
(arg
), OP_ATR_FIRST
, $3);
865 | primary TICK_LAST tick_arglist
867 operation_up arg
= ada_pop
();
868 pstate
->push_new
<ada_unop_atr_operation
>
869 (std
::move
(arg
), OP_ATR_LAST
, $3);
871 | primary TICK_LENGTH tick_arglist
873 operation_up arg
= ada_pop
();
874 pstate
->push_new
<ada_unop_atr_operation
>
875 (std
::move
(arg
), OP_ATR_LENGTH
, $3);
878 { ada_wrap
<ada_atr_size_operation
> (); }
880 { ada_wrap
<ada_atr_tag_operation
> (); }
881 | opt_type_prefix TICK_MIN
'(' exp
',' exp
')'
882 { ada_wrap2
<ada_binop_min_operation
> (BINOP_MIN
); }
883 | opt_type_prefix TICK_MAX
'(' exp
',' exp
')'
884 { ada_wrap2
<ada_binop_max_operation
> (BINOP_MAX
); }
885 | opt_type_prefix TICK_POS
'(' exp
')'
886 { ada_wrap
<ada_pos_operation
> (); }
887 | type_prefix TICK_VAL
'(' exp
')'
889 operation_up arg
= ada_pop
();
890 pstate
->push_new
<ada_atr_val_operation
>
891 ($1, std
::move
(arg
));
893 | type_prefix TICK_ENUM_REP
'(' exp
')'
895 operation_up arg
= ada_pop
(true
, $1);
896 pstate
->push_new
<ada_atr_enum_rep_operation
>
897 ($1, std
::move
(arg
));
899 | type_prefix TICK_ENUM_VAL
'(' exp
')'
901 operation_up arg
= ada_pop
(true
, $1);
902 pstate
->push_new
<ada_atr_enum_val_operation
>
903 ($1, std
::move
(arg
));
905 | type_prefix TICK_MODULUS
907 struct type
*type_arg
= check_typedef
($1);
908 if
(!ada_is_modular_type
(type_arg
))
909 error (_
("'modulus must be applied to modular type"));
910 write_int
(pstate
, ada_modulus
(type_arg
),
911 type_arg
->target_type
());
915 tick_arglist
: %prec
'('
918 { $$
= $2.val
->as_integer
<LONGEST
> (); }
925 error (_
("Prefix must be type"));
934 { $$
= parse_type
(pstate
)->builtin_void
; }
940 pstate
->push_new
<long_const_operation
> ($1.type
, *$1.val
);
941 ada_wrap
<ada_wrapped_operation
> ();
947 pstate
->push_new
<ada_char_operation
> ($1.type
, $1.val
);
954 std
::copy
(std
::begin
($1.val
), std
::end
($1.val
),
956 pstate
->push_new
<float_const_operation
>
958 ada_wrap
<ada_wrapped_operation
> ();
964 struct type
*null_ptr_type
965 = lookup_pointer_type
(parse_type
(pstate
)->builtin_int0
);
966 write_int
(pstate
, 0, null_ptr_type
);
972 pstate
->push_new
<ada_string_operation
>
977 primary
: TRUEKEYWORD
979 write_int
(pstate
, 1,
980 parse_type
(pstate
)->builtin_bool
);
984 write_int
(pstate
, 0,
985 parse_type
(pstate
)->builtin_bool
);
990 { error (_
("NEW not implemented.")); }
993 var_or_type: NAME %prec VAR
994 { $$
= write_var_or_type
(pstate
, NULL
, $1); }
995 | NAME_COMPLETE %prec VAR
997 $$
= write_var_or_type_completion
(pstate
,
1001 | block NAME %prec VAR
1002 { $$
= write_var_or_type
(pstate
, $1, $2); }
1003 | block NAME_COMPLETE %prec VAR
1005 $$
= write_var_or_type_completion
(pstate
,
1011 $$
= write_var_or_type
(pstate
, NULL
, $1);
1015 $$
= lookup_pointer_type
($$
);
1017 | block NAME TICK_ACCESS
1019 $$
= write_var_or_type
(pstate
, $1, $2);
1023 $$
= lookup_pointer_type
($$
);
1028 block
: NAME COLONCOLON
1029 { $$
= block_lookup
(NULL
, $1.ptr
); }
1030 | block NAME COLONCOLON
1031 { $$
= block_lookup
($1, $2.ptr
); }
1035 '(' aggregate_component_list
')'
1037 std
::vector
<ada_component_up
> components
1038 = pop_components
($2);
1040 push_component
<ada_aggregate_component
>
1041 (std
::move
(components
));
1045 aggregate_component_list
:
1046 component_groups
{ $$
= $1; }
1047 | positional_list exp
1049 push_component
<ada_positional_component
>
1053 | positional_list component_groups
1060 push_component
<ada_positional_component
>
1064 | positional_list exp
','
1066 push_component
<ada_positional_component
>
1074 | component_group
{ $$
= 1; }
1075 | component_group
',' component_groups
1079 others
: OTHERS ARROW exp
1081 push_component
<ada_others_component
> (ada_pop
());
1086 component_associations
1088 ada_choices_component
*choices
= choice_component
();
1089 choices
->set_associations
(pop_associations
($1));
1093 /* We use this somewhat obscure definition in order to handle NAME => and
1094 NAME | differently from exp => and exp |. ARROW and '|' have a precedence
1095 above that of the reduction of NAME to var_or_type. By delaying
1096 decisions until after the => or '|', we convert the ambiguity to a
1097 resolved shift/reduce conflict. */
1098 component_associations
:
1101 push_component
<ada_choices_component
> (ada_pop
());
1102 write_name_assoc
(pstate
, $1);
1105 | simple_exp ARROW exp
1107 push_component
<ada_choices_component
> (ada_pop
());
1108 push_association
<ada_name_association
> (ada_pop
());
1111 | simple_exp DOTDOT simple_exp ARROW exp
1113 push_component
<ada_choices_component
> (ada_pop
());
1114 operation_up rhs
= ada_pop
();
1115 operation_up lhs
= ada_pop
();
1116 push_association
<ada_discrete_range_association
>
1117 (std
::move
(lhs
), std
::move
(rhs
));
1120 | NAME
'|' component_associations
1122 write_name_assoc
(pstate
, $1);
1125 | simple_exp
'|' component_associations
1127 push_association
<ada_name_association
> (ada_pop
());
1130 | simple_exp DOTDOT simple_exp
'|' component_associations
1133 operation_up rhs
= ada_pop
();
1134 operation_up lhs
= ada_pop
();
1135 push_association
<ada_discrete_range_association
>
1136 (std
::move
(lhs
), std
::move
(rhs
));
1141 /* Some extensions borrowed from C, for the benefit of those who find they
1142 can't get used to Ada notation in GDB. */
1144 primary
: '*' primary %prec
'.'
1145 { ada_wrap
<ada_unop_ind_operation
> (); }
1146 |
'&' primary %prec
'.'
1148 | primary
'[' exp
']'
1150 ada_wrap2
<subscript_operation
> (BINOP_SUBSCRIPT
);
1151 ada_wrap
<ada_wrapped_operation
> ();
1157 /* yylex defined in ada-lex.c: Reads one token, getting characters */
1158 /* through lexptr. */
1160 /* Remap normal flex interface names (yylex) as well as gratuitiously */
1161 /* global symbol names, so we can have multiple flex-generated parsers */
1164 /* (See note above on previous definitions for YACC.) */
1166 #define yy_create_buffer ada_yy_create_buffer
1167 #define yy_delete_buffer ada_yy_delete_buffer
1168 #define yy_init_buffer ada_yy_init_buffer
1169 #define yy_load_buffer_state ada_yy_load_buffer_state
1170 #define yy_switch_to_buffer ada_yy_switch_to_buffer
1171 #define yyrestart ada_yyrestart
1172 #define yytext ada_yytext
1174 static struct obstack temp_parse_space
;
1176 /* The following kludge was found necessary to prevent conflicts between */
1177 /* defs.h and non-standard stdlib.h files. */
1178 #define qsort __qsort__dummy
1179 #include "ada-lex.c"
1182 ada_parse
(struct parser_state
*par_state
)
1184 /* Setting up the parser state. */
1185 scoped_restore pstate_restore
= make_scoped_restore
(&pstate
);
1186 gdb_assert
(par_state
!= NULL
);
1188 original_expr
= par_state
->lexptr
;
1190 scoped_restore restore_yydebug
= make_scoped_restore
(&yydebug,
1193 lexer_init
(yyin
); /* (Re-)initialize lexer. */
1194 obstack_free
(&temp_parse_space
, NULL
);
1195 obstack_init
(&temp_parse_space
);
1196 components.clear
();
1197 associations.clear
();
1198 int_storage.clear
();
1199 assignments.clear
();
1201 int result
= yyparse ();
1204 struct type
*context_type
= nullptr
;
1205 if
(par_state
->void_context_p
)
1206 context_type
= parse_type
(par_state
)->builtin_void
;
1207 pstate
->set_operation
(ada_pop
(true
, context_type
));
1213 yyerror (const char *msg
)
1215 error (_
("Error in expression, near `%s'."), pstate
->lexptr
);
1218 /* Emit expression to access an instance of SYM, in block BLOCK (if
1222 write_var_from_sym
(struct parser_state
*par_state
, block_symbol sym
)
1224 if
(symbol_read_needs_frame
(sym.symbol
))
1225 par_state
->block_tracker
->update
(sym.block
, INNERMOST_BLOCK_FOR_SYMBOLS
);
1227 par_state
->push_new
<ada_var_value_operation
> (sym
);
1230 /* Write integer or boolean constant ARG of type TYPE. */
1233 write_int
(struct parser_state
*par_state
, LONGEST arg
, struct type
*type
)
1235 pstate
->push_new
<long_const_operation
> (type
, arg
);
1236 ada_wrap
<ada_wrapped_operation
> ();
1239 /* Emit expression corresponding to the renamed object named
1240 designated by RENAMED_ENTITY[0 .. RENAMED_ENTITY_LEN-1] in the
1241 context of ORIG_LEFT_CONTEXT, to which is applied the operations
1242 encoded by RENAMING_EXPR. MAX_DEPTH is the maximum number of
1243 cascaded renamings to allow. If ORIG_LEFT_CONTEXT is null, it
1244 defaults to the currently selected block. ORIG_SYMBOL is the
1245 symbol that originally encoded the renaming. It is needed only
1246 because its prefix also qualifies any index variables used to index
1247 or slice an array. It should not be necessary once we go to the
1248 new encoding entirely (FIXME pnh 7/20/2007). */
1251 write_object_renaming
(struct parser_state
*par_state
,
1252 const struct block
*orig_left_context
,
1253 const char *renamed_entity
, int renamed_entity_len
,
1254 const char *renaming_expr
, int max_depth
)
1257 enum { SIMPLE_INDEX
, LOWER_BOUND
, UPPER_BOUND
} slice_state
;
1258 struct block_symbol sym_info
;
1261 error (_
("Could not find renamed symbol"));
1263 if
(orig_left_context
== NULL
)
1264 orig_left_context
= get_selected_block
(NULL
);
1266 name
= obstack_strndup
(&temp_parse_space
, renamed_entity
,
1267 renamed_entity_len
);
1268 ada_lookup_encoded_symbol
(name
, orig_left_context
, VAR_DOMAIN
, &sym_info
);
1269 if
(sym_info.symbol
== NULL
)
1270 error (_
("Could not find renamed variable: %s"), ada_decode
(name
).c_str
());
1271 else if
(sym_info.symbol
->aclass
() == LOC_TYPEDEF
)
1272 /* We have a renaming of an old-style renaming symbol. Don't
1273 trust the block information. */
1274 sym_info.block
= orig_left_context
;
1277 const char *inner_renamed_entity
;
1278 int inner_renamed_entity_len
;
1279 const char *inner_renaming_expr
;
1281 switch
(ada_parse_renaming
(sym_info.symbol
, &inner_renamed_entity
,
1282 &inner_renamed_entity_len
,
1283 &inner_renaming_expr
))
1285 case ADA_NOT_RENAMING
:
1286 write_var_from_sym
(par_state
, sym_info
);
1288 case ADA_OBJECT_RENAMING
:
1289 write_object_renaming
(par_state
, sym_info.block
,
1290 inner_renamed_entity
, inner_renamed_entity_len
,
1291 inner_renaming_expr
, max_depth
- 1);
1298 slice_state
= SIMPLE_INDEX
;
1299 while
(*renaming_expr
== 'X')
1303 switch
(*renaming_expr
) {
1306 ada_wrap
<ada_unop_ind_operation
> ();
1309 slice_state
= LOWER_BOUND
;
1313 if
(isdigit
(*renaming_expr
))
1316 long val
= strtol
(renaming_expr
, &next
, 10);
1317 if
(next
== renaming_expr
)
1319 renaming_expr
= next
;
1320 write_int
(par_state
, val
, parse_type
(par_state
)->builtin_int
);
1326 struct block_symbol index_sym_info
;
1328 end
= strchr
(renaming_expr
, 'X');
1330 end
= renaming_expr
+ strlen
(renaming_expr
);
1332 index_name
= obstack_strndup
(&temp_parse_space
, renaming_expr
,
1333 end
- renaming_expr
);
1334 renaming_expr
= end
;
1336 ada_lookup_encoded_symbol
(index_name
, orig_left_context
,
1337 VAR_DOMAIN
, &index_sym_info
);
1338 if
(index_sym_info.symbol
== NULL
)
1339 error (_
("Could not find %s"), index_name
);
1340 else if
(index_sym_info.symbol
->aclass
() == LOC_TYPEDEF
)
1341 /* Index is an old-style renaming symbol. */
1342 index_sym_info.block
= orig_left_context
;
1343 write_var_from_sym
(par_state
, index_sym_info
);
1345 if
(slice_state
== SIMPLE_INDEX
)
1347 else if
(slice_state
== LOWER_BOUND
)
1348 slice_state
= UPPER_BOUND
;
1349 else if
(slice_state
== UPPER_BOUND
)
1351 ada_wrap3
<ada_ternop_slice_operation
> ();
1352 slice_state
= SIMPLE_INDEX
;
1362 if
(slice_state
!= SIMPLE_INDEX
)
1364 end
= strchr
(renaming_expr
, 'X');
1366 end
= renaming_expr
+ strlen
(renaming_expr
);
1368 operation_up arg
= ada_pop
();
1369 pstate
->push_new
<ada_structop_operation
>
1370 (std
::move
(arg
), std
::string (renaming_expr
,
1371 end
- renaming_expr
));
1372 renaming_expr
= end
;
1380 if
(slice_state
== SIMPLE_INDEX
)
1384 error (_
("Internal error in encoding of renaming declaration"));
1387 static const struct block
*
1388 block_lookup
(const struct block
*context
, const char *raw_name
)
1391 struct symtab
*symtab
;
1392 const struct block
*result
= NULL
;
1394 std
::string name_storage
;
1395 if
(raw_name
[0] == '\'')
1402 name_storage
= ada_encode
(raw_name
);
1403 name
= name_storage.c_str
();
1406 std
::vector
<struct block_symbol
> syms
1407 = ada_lookup_symbol_list
(name
, context
, VAR_DOMAIN
);
1410 && (syms.empty
() || syms
[0].symbol
->aclass
() != LOC_BLOCK
))
1411 symtab
= lookup_symtab
(name
);
1416 result
= symtab
->compunit
()->blockvector
()->static_block
();
1417 else if
(syms.empty
() || syms
[0].symbol
->aclass
() != LOC_BLOCK
)
1419 if
(context
== NULL
)
1420 error (_
("No file or function \"%s\"."), raw_name
);
1422 error (_
("No function \"%s\" in specified context."), raw_name
);
1426 if
(syms.size
() > 1)
1427 warning
(_
("Function name \"%s\" ambiguous here"), raw_name
);
1428 result
= syms
[0].symbol
->value_block
();
1434 static struct symbol
*
1435 select_possible_type_sym
(const std
::vector
<struct block_symbol
> &syms
)
1438 int preferred_index
;
1439 struct type
*preferred_type
;
1441 preferred_index
= -1; preferred_type
= NULL
;
1442 for
(i
= 0; i
< syms.size
(); i
+= 1)
1443 switch
(syms
[i
].symbol
->aclass
())
1446 if
(ada_prefer_type
(syms
[i
].symbol
->type
(), preferred_type
))
1448 preferred_index
= i
;
1449 preferred_type
= syms
[i
].symbol
->type
();
1455 case LOC_REGPARM_ADDR
:
1462 if
(preferred_type
== NULL
)
1464 return syms
[preferred_index
].symbol
;
1468 find_primitive_type
(struct parser_state
*par_state
, const char *name
)
1471 type
= language_lookup_primitive_type
(par_state
->language
(),
1472 par_state
->gdbarch
(),
1474 if
(type
== NULL
&& strcmp
("system__address", name
) == 0)
1475 type
= type_system_address
(par_state
);
1479 /* Check to see if we have a regular definition of this
1480 type that just didn't happen to have been read yet. */
1482 char *expanded_name
=
1483 (char *) alloca
(strlen
(name
) + sizeof
("standard__"));
1484 strcpy
(expanded_name
, "standard__");
1485 strcat
(expanded_name
, name
);
1486 sym
= ada_lookup_symbol
(expanded_name
, NULL
, VAR_DOMAIN
).symbol
;
1487 if
(sym
!= NULL
&& sym
->aclass
() == LOC_TYPEDEF
)
1488 type
= sym
->type
();
1495 chop_selector
(const char *name
, int end
)
1498 for
(i
= end
- 1; i
> 0; i
-= 1)
1499 if
(name
[i
] == '.' ||
(name
[i
] == '_' && name
[i
+1] == '_'))
1504 /* If NAME is a string beginning with a separator (either '__', or
1505 '.'), chop this separator and return the result; else, return
1509 chop_separator
(const char *name
)
1514 if
(name
[0] == '_' && name
[1] == '_')
1520 /* Given that SELS is a string of the form (<sep><identifier>)*, where
1521 <sep> is '__' or '.', write the indicated sequence of
1522 STRUCTOP_STRUCT expression operators. Returns a pointer to the
1523 last operation that was pushed. */
1524 static ada_structop_operation
*
1525 write_selectors
(struct parser_state
*par_state
, const char *sels
)
1527 ada_structop_operation
*result
= nullptr
;
1528 while
(*sels
!= '\0')
1530 const char *p
= chop_separator
(sels
);
1532 while
(*sels
!= '\0' && *sels
!= '.'
1533 && (sels
[0] != '_' || sels
[1] != '_'))
1535 operation_up arg
= ada_pop
();
1536 result
= new ada_structop_operation
(std
::move
(arg
),
1537 std
::string (p
, sels
- p
));
1538 pstate
->push
(operation_up
(result
));
1543 /* Write a variable access (OP_VAR_VALUE) to ambiguous encoded name
1544 NAME[0..LEN-1], in block context BLOCK, to be resolved later. Writes
1545 a temporary symbol that is valid until the next call to ada_parse.
1548 write_ambiguous_var
(struct parser_state
*par_state
,
1549 const struct block
*block
, const char *name
, int len
)
1551 struct symbol
*sym
= new
(&temp_parse_space
) symbol
();
1553 sym
->set_domain
(UNDEF_DOMAIN
);
1554 sym
->set_linkage_name
(obstack_strndup
(&temp_parse_space
, name
, len
));
1555 sym
->set_language
(language_ada
, nullptr
);
1557 block_symbol bsym
{ sym
, block
};
1558 par_state
->push_new
<ada_var_value_operation
> (bsym
);
1561 /* A convenient wrapper around ada_get_field_index that takes
1562 a non NUL-terminated FIELD_NAME0 and a FIELD_NAME_LEN instead
1563 of a NUL-terminated field name. */
1566 ada_nget_field_index
(const struct type
*type
, const char *field_name0
,
1567 int field_name_len
, int maybe_missing
)
1569 char *field_name
= (char *) alloca
((field_name_len
+ 1) * sizeof
(char));
1571 strncpy
(field_name
, field_name0
, field_name_len
);
1572 field_name
[field_name_len
] = '\0';
1573 return ada_get_field_index
(type
, field_name
, maybe_missing
);
1576 /* If encoded_field_name is the name of a field inside symbol SYM,
1577 then return the type of that field. Otherwise, return NULL.
1579 This function is actually recursive, so if ENCODED_FIELD_NAME
1580 doesn't match one of the fields of our symbol, then try to see
1581 if ENCODED_FIELD_NAME could not be a succession of field names
1582 (in other words, the user entered an expression of the form
1583 TYPE_NAME.FIELD1.FIELD2.FIELD3), in which case we evaluate
1584 each field name sequentially to obtain the desired field type.
1585 In case of failure, we return NULL. */
1587 static struct type
*
1588 get_symbol_field_type
(struct symbol
*sym
, const char *encoded_field_name
)
1590 const char *field_name
= encoded_field_name
;
1591 const char *subfield_name
;
1592 struct type
*type
= sym
->type
();
1595 if
(type
== NULL || field_name
== NULL
)
1597 type
= check_typedef
(type
);
1599 while
(field_name
[0] != '\0')
1601 field_name
= chop_separator
(field_name
);
1603 fieldno
= ada_get_field_index
(type
, field_name
, 1);
1605 return type
->field
(fieldno
).type
();
1607 subfield_name
= field_name
;
1608 while
(*subfield_name
!= '\0' && *subfield_name
!= '.'
1609 && (subfield_name
[0] != '_' || subfield_name
[1] != '_'))
1612 if
(subfield_name
[0] == '\0')
1615 fieldno
= ada_nget_field_index
(type
, field_name
,
1616 subfield_name
- field_name
, 1);
1620 type
= type
->field
(fieldno
).type
();
1621 field_name
= subfield_name
;
1627 /* Look up NAME0 (an unencoded identifier or dotted name) in BLOCK (or
1628 expression_block_context if NULL). If it denotes a type, return
1629 that type. Otherwise, write expression code to evaluate it as an
1630 object and return NULL. In this second case, NAME0 will, in general,
1631 have the form <name>(.<selector_name>)*, where <name> is an object
1632 or renaming encoded in the debugging data. Calls error if no
1633 prefix <name> matches a name in the debugging data (i.e., matches
1634 either a complete name or, as a wild-card match, the final
1638 write_var_or_type
(struct parser_state
*par_state
,
1639 const struct block
*block
, struct stoken name0
)
1646 block
= par_state
->expression_context_block
;
1648 std
::string name_storage
= ada_encode
(name0.ptr
);
1649 name_len
= name_storage.size
();
1650 encoded_name
= obstack_strndup
(&temp_parse_space
, name_storage.c_str
(),
1652 for
(depth
= 0; depth
< MAX_RENAMING_CHAIN_LENGTH
; depth
+= 1)
1656 tail_index
= name_len
;
1657 while
(tail_index
> 0)
1659 struct symbol
*type_sym
;
1660 struct symbol
*renaming_sym
;
1661 const char* renaming
;
1663 const char* renaming_expr
;
1664 int terminator
= encoded_name
[tail_index
];
1666 encoded_name
[tail_index
] = '\0';
1667 /* In order to avoid double-encoding, we want to only pass
1668 the decoded form to lookup functions. */
1669 std
::string decoded_name
= ada_decode
(encoded_name
);
1670 encoded_name
[tail_index
] = terminator
;
1672 std
::vector
<struct block_symbol
> syms
1673 = ada_lookup_symbol_list
(decoded_name.c_str
(), block
, VAR_DOMAIN
);
1675 type_sym
= select_possible_type_sym
(syms
);
1677 if
(type_sym
!= NULL
)
1678 renaming_sym
= type_sym
;
1679 else if
(syms.size
() == 1)
1680 renaming_sym
= syms
[0].symbol
;
1682 renaming_sym
= NULL
;
1684 switch
(ada_parse_renaming
(renaming_sym
, &renaming
,
1685 &renaming_len
, &renaming_expr
))
1687 case ADA_NOT_RENAMING
:
1689 case ADA_PACKAGE_RENAMING
:
1690 case ADA_EXCEPTION_RENAMING
:
1691 case ADA_SUBPROGRAM_RENAMING
:
1693 int alloc_len
= renaming_len
+ name_len
- tail_index
+ 1;
1695 = (char *) obstack_alloc
(&temp_parse_space
, alloc_len
);
1696 strncpy
(new_name
, renaming
, renaming_len
);
1697 strcpy
(new_name
+ renaming_len
, encoded_name
+ tail_index
);
1698 encoded_name
= new_name
;
1699 name_len
= renaming_len
+ name_len
- tail_index
;
1700 goto TryAfterRenaming
;
1702 case ADA_OBJECT_RENAMING
:
1703 write_object_renaming
(par_state
, block
, renaming
, renaming_len
,
1704 renaming_expr
, MAX_RENAMING_CHAIN_LENGTH
);
1705 write_selectors
(par_state
, encoded_name
+ tail_index
);
1708 internal_error
(_
("impossible value from ada_parse_renaming"));
1711 if
(type_sym
!= NULL
)
1713 struct type
*field_type
;
1715 if
(tail_index
== name_len
)
1716 return type_sym
->type
();
1718 /* We have some extraneous characters after the type name.
1719 If this is an expression "TYPE_NAME.FIELD0.[...].FIELDN",
1720 then try to get the type of FIELDN. */
1722 = get_symbol_field_type
(type_sym
, encoded_name
+ tail_index
);
1723 if
(field_type
!= NULL
)
1726 error (_
("Invalid attempt to select from type: \"%s\"."),
1729 else if
(tail_index
== name_len
&& syms.empty
())
1731 struct type
*type
= find_primitive_type
(par_state
,
1738 if
(syms.size
() == 1)
1740 write_var_from_sym
(par_state
, syms
[0]);
1741 write_selectors
(par_state
, encoded_name
+ tail_index
);
1744 else if
(syms.empty
())
1746 struct objfile
*objfile
= nullptr
;
1747 if
(block
!= nullptr
)
1748 objfile
= block
->objfile
();
1750 struct bound_minimal_symbol msym
1751 = ada_lookup_simple_minsym
(decoded_name.c_str
(), objfile
);
1752 if
(msym.minsym
!= NULL
)
1754 par_state
->push_new
<ada_var_msym_value_operation
> (msym
);
1755 /* Maybe cause error here rather than later? FIXME? */
1756 write_selectors
(par_state
, encoded_name
+ tail_index
);
1760 if
(tail_index
== name_len
1761 && strncmp
(encoded_name
, "standard__",
1762 sizeof
("standard__") - 1) == 0)
1763 error (_
("No definition of \"%s\" found."), name0.ptr
);
1765 tail_index
= chop_selector
(encoded_name
, tail_index
);
1769 write_ambiguous_var
(par_state
, block
, encoded_name
,
1771 write_selectors
(par_state
, encoded_name
+ tail_index
);
1776 if
(!have_full_symbols
() && !have_partial_symbols
() && block
== NULL
)
1777 error (_
("No symbol table is loaded. Use the \"file\" command."));
1778 if
(block
== par_state
->expression_context_block
)
1779 error (_
("No definition of \"%s\" in current context."), name0.ptr
);
1781 error (_
("No definition of \"%s\" in specified context."), name0.ptr
);
1786 error (_
("Could not find renamed symbol \"%s\""), name0.ptr
);
1790 /* Because ada_completer_word_break_characters does not contain '.' --
1791 and it cannot easily be added, this breaks other completions -- we
1792 have to recreate the completion word-splitting here, so that we can
1793 provide a prefix that is then used when completing field names.
1794 Without this, an attempt like "complete print abc.d" will give a
1795 result like "print def" rather than "print abc.def". */
1798 find_completion_bounds
(struct parser_state
*par_state
)
1800 const char *end
= pstate
->lexptr
;
1801 /* First the end of the prefix. Here we stop at the token start or
1803 for
(; end
> original_expr
&& end
[-1] != '.' && !isspace
(end
[-1]); --end
)
1807 /* Now find the start of the prefix. */
1808 const char *ptr
= end
;
1809 /* Here we allow '.'. */
1811 ptr
> original_expr
&& (ptr
[-1] == '.'
1813 ||
(ptr
[-1] >= 'a' && ptr
[-1] <= 'z')
1814 ||
(ptr
[-1] >= 'A' && ptr
[-1] <= 'Z')
1815 ||
(ptr
[-1] & 0xff) >= 0x80);
1820 /* ... except, skip leading spaces. */
1821 ptr
= skip_spaces
(ptr
);
1823 return std
::string (ptr
, end
);
1826 /* A wrapper for write_var_or_type that is used specifically when
1827 completion is requested for the last of a sequence of
1830 static struct type
*
1831 write_var_or_type_completion
(struct parser_state
*par_state
,
1832 const struct block
*block
, struct stoken name0
)
1834 int tail_index
= chop_selector
(name0.ptr
, name0.length
);
1835 /* If there's no separator, just defer to ordinary symbol
1837 if
(tail_index
== -1)
1838 return write_var_or_type
(par_state
, block
, name0
);
1840 std
::string copy
(name0.ptr
, tail_index
);
1841 struct type
*type
= write_var_or_type
(par_state
, block
,
1843 (int) copy.length
() });
1844 /* For completion purposes, it's enough that we return a type
1846 if
(type
!= nullptr
)
1849 ada_structop_operation
*op
= write_selectors
(par_state
,
1850 name0.ptr
+ tail_index
);
1851 op
->set_prefix
(find_completion_bounds
(par_state
));
1852 par_state
->mark_struct_expression
(op
);
1856 /* Write a left side of a component association (e.g., NAME in NAME =>
1857 exp). If NAME has the form of a selected component, write it as an
1858 ordinary expression. If it is a simple variable that unambiguously
1859 corresponds to exactly one symbol that does not denote a type or an
1860 object renaming, also write it normally as an OP_VAR_VALUE.
1861 Otherwise, write it as an OP_NAME.
1863 Unfortunately, we don't know at this point whether NAME is supposed
1864 to denote a record component name or the value of an array index.
1865 Therefore, it is not appropriate to disambiguate an ambiguous name
1866 as we normally would, nor to replace a renaming with its referent.
1867 As a result, in the (one hopes) rare case that one writes an
1868 aggregate such as (R => 42) where R renames an object or is an
1869 ambiguous name, one must write instead ((R) => 42). */
1872 write_name_assoc
(struct parser_state
*par_state
, struct stoken name
)
1874 if
(strchr
(name.ptr
, '.') == NULL
)
1876 std
::vector
<struct block_symbol
> syms
1877 = ada_lookup_symbol_list
(name.ptr
,
1878 par_state
->expression_context_block
,
1881 if
(syms.size
() != 1 || syms
[0].symbol
->aclass
() == LOC_TYPEDEF
)
1882 pstate
->push_new
<ada_string_operation
> (copy_name
(name
));
1884 write_var_from_sym
(par_state
, syms
[0]);
1887 if
(write_var_or_type
(par_state
, NULL
, name
) != NULL
)
1888 error (_
("Invalid use of type."));
1890 push_association
<ada_name_association
> (ada_pop
());
1893 static struct type
*
1894 type_for_char
(struct parser_state
*par_state
, ULONGEST value
)
1897 return language_string_char_type
(par_state
->language
(),
1898 par_state
->gdbarch
());
1899 else if
(value
<= 0xffff)
1900 return language_lookup_primitive_type
(par_state
->language
(),
1901 par_state
->gdbarch
(),
1903 return language_lookup_primitive_type
(par_state
->language
(),
1904 par_state
->gdbarch
(),
1905 "wide_wide_character");
1908 static struct type
*
1909 type_system_address
(struct parser_state
*par_state
)
1912 = language_lookup_primitive_type
(par_state
->language
(),
1913 par_state
->gdbarch
(),
1915 return type
!= NULL ? type
: parse_type
(par_state
)->builtin_data_ptr
;
1918 void _initialize_ada_exp
();
1920 _initialize_ada_exp
()
1922 obstack_init
(&temp_parse_space
);