tree.c (get_fns): Split out from get_first_fn.
* tree.c (get_fns): Split out from get_first_fn. * cp-tree.h: Declare it. * search.c (shared_member_p): Use it. * semantics.c (finish_qualified_id_expr): Simplify. (finish_id_expression): Simplify. From-SVN: r158810
This commit is contained in:
parent
2defb92647
commit
294e855f96
@ -1,4 +1,10 @@
|
|||||||
2010-04-27 Jason Merrill <jason@redhat.com>
|
2010-04-24 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
|
* tree.c (get_fns): Split out from get_first_fn.
|
||||||
|
* cp-tree.h: Declare it.
|
||||||
|
* search.c (shared_member_p): Use it.
|
||||||
|
* semantics.c (finish_qualified_id_expr): Simplify.
|
||||||
|
(finish_id_expression): Simplify.
|
||||||
|
|
||||||
* semantics.c (finish_non_static_data_member): Call maybe_dummy_object
|
* semantics.c (finish_non_static_data_member): Call maybe_dummy_object
|
||||||
whenever object is NULL_TREE. Don't do 'this' capture here.
|
whenever object is NULL_TREE. Don't do 'this' capture here.
|
||||||
|
@ -5259,6 +5259,7 @@ extern tree hash_tree_cons (tree, tree, tree);
|
|||||||
extern tree hash_tree_chain (tree, tree);
|
extern tree hash_tree_chain (tree, tree);
|
||||||
extern tree build_qualified_name (tree, tree, tree, bool);
|
extern tree build_qualified_name (tree, tree, tree, bool);
|
||||||
extern int is_overloaded_fn (tree);
|
extern int is_overloaded_fn (tree);
|
||||||
|
extern tree get_fns (tree);
|
||||||
extern tree get_first_fn (tree);
|
extern tree get_first_fn (tree);
|
||||||
extern tree ovl_cons (tree, tree);
|
extern tree ovl_cons (tree, tree);
|
||||||
extern tree build_overload (tree, tree);
|
extern tree build_overload (tree, tree);
|
||||||
|
@ -973,6 +973,7 @@ shared_member_p (tree t)
|
|||||||
return 1;
|
return 1;
|
||||||
if (is_overloaded_fn (t))
|
if (is_overloaded_fn (t))
|
||||||
{
|
{
|
||||||
|
t = get_fns (t);
|
||||||
for (; t; t = OVL_NEXT (t))
|
for (; t; t = OVL_NEXT (t))
|
||||||
{
|
{
|
||||||
tree fn = OVL_CURRENT (t);
|
tree fn = OVL_CURRENT (t);
|
||||||
|
@ -1662,15 +1662,11 @@ finish_qualified_id_expr (tree qualifying_class,
|
|||||||
}
|
}
|
||||||
else if (BASELINK_P (expr) && !processing_template_decl)
|
else if (BASELINK_P (expr) && !processing_template_decl)
|
||||||
{
|
{
|
||||||
tree fns;
|
|
||||||
tree ob;
|
tree ob;
|
||||||
|
|
||||||
/* See if any of the functions are non-static members. */
|
/* See if any of the functions are non-static members. */
|
||||||
fns = BASELINK_FUNCTIONS (expr);
|
|
||||||
if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
|
|
||||||
fns = TREE_OPERAND (fns, 0);
|
|
||||||
/* If so, the expression may be relative to 'this'. */
|
/* If so, the expression may be relative to 'this'. */
|
||||||
if (!shared_member_p (fns)
|
if (!shared_member_p (expr)
|
||||||
&& (ob = maybe_dummy_object (qualifying_class, NULL),
|
&& (ob = maybe_dummy_object (qualifying_class, NULL),
|
||||||
!is_dummy_object (ob)))
|
!is_dummy_object (ob)))
|
||||||
expr = (build_class_member_access_expr
|
expr = (build_class_member_access_expr
|
||||||
@ -3124,10 +3120,7 @@ finish_id_expression (tree id_expression,
|
|||||||
{
|
{
|
||||||
tree first_fn;
|
tree first_fn;
|
||||||
|
|
||||||
first_fn = decl;
|
first_fn = get_first_fn (decl);
|
||||||
if (TREE_CODE (first_fn) == TEMPLATE_ID_EXPR)
|
|
||||||
first_fn = TREE_OPERAND (first_fn, 0);
|
|
||||||
first_fn = get_first_fn (first_fn);
|
|
||||||
if (TREE_CODE (first_fn) == TEMPLATE_DECL)
|
if (TREE_CODE (first_fn) == TEMPLATE_DECL)
|
||||||
first_fn = DECL_TEMPLATE_RESULT (first_fn);
|
first_fn = DECL_TEMPLATE_RESULT (first_fn);
|
||||||
|
|
||||||
|
@ -1352,7 +1352,7 @@ really_overloaded_fn (tree x)
|
|||||||
}
|
}
|
||||||
|
|
||||||
tree
|
tree
|
||||||
get_first_fn (tree from)
|
get_fns (tree from)
|
||||||
{
|
{
|
||||||
gcc_assert (is_overloaded_fn (from));
|
gcc_assert (is_overloaded_fn (from));
|
||||||
/* A baselink is also considered an overloaded function. */
|
/* A baselink is also considered an overloaded function. */
|
||||||
@ -1363,7 +1363,13 @@ get_first_fn (tree from)
|
|||||||
from = BASELINK_FUNCTIONS (from);
|
from = BASELINK_FUNCTIONS (from);
|
||||||
if (TREE_CODE (from) == TEMPLATE_ID_EXPR)
|
if (TREE_CODE (from) == TEMPLATE_ID_EXPR)
|
||||||
from = TREE_OPERAND (from, 0);
|
from = TREE_OPERAND (from, 0);
|
||||||
return OVL_CURRENT (from);
|
return from;
|
||||||
|
}
|
||||||
|
|
||||||
|
tree
|
||||||
|
get_first_fn (tree from)
|
||||||
|
{
|
||||||
|
return OVL_CURRENT (get_fns (from));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Return a new OVL node, concatenating it with the old one. */
|
/* Return a new OVL node, concatenating it with the old one. */
|
||||||
|
Loading…
Reference in New Issue
Block a user