* 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

@ -837,6 +837,11 @@ operator_length_standard (struct expression *expr, int endpos,
args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);
break;
case TYPE_INSTANCE:
oplen = 4 + longest_to_int (expr->elts[endpos - 2].longconst);
args = 1;
break;
case OP_OBJC_MSGCALL: /* Objective C message (method) call */
oplen = 4;
args = 1 + longest_to_int (expr->elts[endpos - 2].longconst);