* c-exp.y: Add new rule for resolving method overloads.

* eval.c (make_params): New function.
	(free_param_types): New function.
	(evaluate_subexp_standard): Pass expect_type to value_aggregate_elt.
	Handle case TYPE_INSTANCE.
	(evaluate_subexp_for_address): Pass expect_type to value_aggregate_elt.
	* expression.h (enum exp_opcode): Add TYPE_INSTANCE.
	(compare_parameters): Add declaration.
	* parse.c (operator_length_standard): Add TYPE_INSTANCE.
	* valops.c (value_aggregate_elt): Add new expect_type parameter.
	Pass expect_type to value_struct_elt_for_reference.
	(value_struct_elt_for_reference): Add expect_type parameter and use
	compare_parameters.
	Check for overload matches with and without artificial parameters.
	Skip artificial methods.
	(compare_parameters): New function.
	* value.h (value_aggregate_elt): Add new expect_type parameter.
This commit is contained in:
Keith Seitz
2009-11-10 22:17:58 +00:00
parent 85feb311d3
commit 072bba3b0f
7 changed files with 173 additions and 15 deletions

View File

@ -88,6 +88,13 @@ enum exp_opcode
when X is a pointer instead of an aggregate. */
STRUCTOP_MPTR,
/* TYPE_INSTANCE is used when the user specifies a specific
type instantiation for overloaded methods/functions.
The format is:
TYPE_INSTANCE num_types type0 ... typeN num_types TYPE_INSTANCE */
TYPE_INSTANCE,
/* end of C++. */
/* For Modula-2 integer division DIV */