Looks good, just a couple of tweaks:
On 04/06/2011 07:22 PM, Rodrigo Rivas wrote:
+ error ("range-based %<for%> expression must have complete type");
+ error ("range-based %<for%> expression has an %<end%> member "
+ "but not a %<begin%>");
Let's give the type of the range initializer in these error messages.
+static tree
+cp_parser_range_for_member_function (tree range, tree identifier)
+{
+ tree member, instance, fn;
+
+ member = finish_class_member_access_expr (range, identifier,
+ false, tf_warning_or_error);
+ if (member == error_mark_node)
+ return error_mark_node;
+
+ if (TREE_CODE (member) == COMPONENT_REF)
+ {
+ instance = TREE_OPERAND (member, 0);
+ fn = TREE_OPERAND (member, 1);
+ }
+ else
+ fn = NULL_TREE;
+
+ if (fn && BASELINK_P (fn))
+ return build_new_method_call (instance, fn,
+ NULL, NULL, LOOKUP_NORMAL,
+ NULL, tf_warning_or_error);
+ else
+ {
+ tree res;
+ VEC(tree,gc) *vec;
+
+ vec = make_tree_vector ();
+ res = finish_call_expr (member, &vec,
+ /*disallow_virtual=*/false,
+ /*koenig_p=*/false,
+ tf_warning_or_error);
+ release_tree_vector (vec);
+ return res;
+ }
+}
Instead of handling this difference here, let's teach finish_call_expr
to handle a COMPONENT_REF around a BASELINK.
Jason