Split out some Ada type resolution code

This splits some Ada type resolution code out of resolve_subexp into
new functions that can be reused.

gdb/ChangeLog
2021-03-08  Tom Tromey  <tom@tromey.com>

	* ada-lang.h (ada_find_operator_symbol, ada_resolve_funcall)
	(ada_resolve_variable): Declare.
	* ada-lang.c (ada_find_operator_symbol, ada_resolve_funcall)
	(ada_resolve_variable): New functions.
	(resolve_subexp): Update.
This commit is contained in:
Tom Tromey
2021-03-08 07:27:57 -07:00
parent cf12b17fd0
commit cd9a314824
3 changed files with 190 additions and 99 deletions

View File

@@ -379,4 +379,42 @@ extern void print_ada_task_info (struct ui_out *uiout,
const char *taskno_str,
struct inferior *inf);
/* Look for a symbol for an overloaded operator for the operation OP.
PARSE_COMPLETION is nonzero if currently parsing for completion.
NARGS and ARGVEC describe the arguments to the call. Returns a
"null" block_symbol if no such operator is found. */
extern block_symbol ada_find_operator_symbol (enum exp_opcode op,
int parse_completion,
int nargs, value *argvec[]);
/* Resolve a function call, selecting among possible function symbols.
SYM and BLOCK are passed to ada_lookup_symbol_list. CONTEXT_TYPE
describes the calling context. PARSE_COMPLETION is nonzero if
currently parsing for completion. NARGS and ARGVEC describe the
arguments to the call. This returns the chosen symbol and will
update TRACKER accordingly. */
extern block_symbol ada_resolve_funcall (struct symbol *sym,
const struct block *block,
struct type *context_type,
int parse_completion,
int nargs, value *argvec[],
innermost_block_tracker *tracker);
/* Resolve a symbol reference, selecting among possible values. SYM
and BLOCK are passed to ada_lookup_symbol_list. CONTEXT_TYPE
describes the calling context. PARSE_COMPLETION is nonzero if
currently parsing for completion. If DEPROCEDURE_P is nonzero,
then a symbol that names a zero-argument function will be passed
through ada_resolve_function. This returns the chosen symbol and
will update TRACKER accordingly. */
extern block_symbol ada_resolve_variable (struct symbol *sym,
const struct block *block,
struct type *context_type,
int parse_completion,
int deprocedure_p,
innermost_block_tracker *tracker);
#endif