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