Commit dac65501 by Kriang Lerdsuwanakij Committed by Kriang Lerdsuwanakij

cp-tree.h (copy_template_template_parm): Rename to ...

	* cp-tree.h (copy_template_template_parm): Rename to ...
	(bind_template_template_parm): ... here.
	* tree.c (copy_template_template_parm): Rename to ...
	(bind_template_template_parm): ... here.  Remove the case when
	NEWARGS is NULL_TREE.
	(copy_tree_r): Don't copy TEMPLATE_TEMPLATE_PARM and
	BOUND_TEMPLATE_TEMPLATE_PARM.
	* pt.c (lookup_template_class): Adjust.

From-SVN: r43800
parent af418b8c
2001-07-05 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
* cp-tree.h (copy_template_template_parm): Rename to ...
(bind_template_template_parm): ... here.
* tree.c (copy_template_template_parm): Rename to ...
(bind_template_template_parm): ... here. Remove the case when
NEWARGS is NULL_TREE.
(copy_tree_r): Don't copy TEMPLATE_TEMPLATE_PARM and
BOUND_TEMPLATE_TEMPLATE_PARM.
* pt.c (lookup_template_class): Adjust.
2001-07-05 Jason Merrill <jason_merrill@redhat.com> 2001-07-05 Jason Merrill <jason_merrill@redhat.com>
* cvt.c (convert_lvalue): New fn. * cvt.c (convert_lvalue): New fn.
......
...@@ -4355,7 +4355,7 @@ extern int promotes_to_aggr_type PARAMS ((tree, enum tree_code)); ...@@ -4355,7 +4355,7 @@ extern int promotes_to_aggr_type PARAMS ((tree, enum tree_code));
extern int is_aggr_type_2 PARAMS ((tree, tree)); extern int is_aggr_type_2 PARAMS ((tree, tree));
extern const char *lang_printable_name PARAMS ((tree, int)); extern const char *lang_printable_name PARAMS ((tree, int));
extern tree build_exception_variant PARAMS ((tree, tree)); extern tree build_exception_variant PARAMS ((tree, tree));
extern tree copy_template_template_parm PARAMS ((tree, tree)); extern tree bind_template_template_parm PARAMS ((tree, tree));
extern tree array_type_nelts_total PARAMS ((tree)); extern tree array_type_nelts_total PARAMS ((tree));
extern tree array_type_nelts_top PARAMS ((tree)); extern tree array_type_nelts_top PARAMS ((tree));
extern tree break_out_target_exprs PARAMS ((tree)); extern tree break_out_target_exprs PARAMS ((tree));
......
...@@ -3912,8 +3912,7 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope, complain) ...@@ -3912,8 +3912,7 @@ lookup_template_class (d1, arglist, in_decl, context, entering_scope, complain)
if (arglist2 == error_mark_node) if (arglist2 == error_mark_node)
return error_mark_node; return error_mark_node;
parm = copy_template_template_parm (TREE_TYPE (template), arglist2); parm = bind_template_template_parm (TREE_TYPE (template), arglist2);
TYPE_SIZE (parm) = 0;
return parm; return parm;
} }
else else
......
...@@ -1112,47 +1112,33 @@ build_exception_variant (type, raises) ...@@ -1112,47 +1112,33 @@ build_exception_variant (type, raises)
return v; return v;
} }
/* Given a TEMPLATE_TEMPLATE_PARM or BOUND_TEMPLATE_TEMPLATE_PARM /* Given a TEMPLATE_TEMPLATE_PARM node T, create a new
node T, create a new one together with its BOUND_TEMPLATE_TEMPLATE_PARM bound with NEWARGS as its template
lang_specific field and its corresponding *_DECL node.
If NEWARGS is not NULL_TREE, this parameter is bound with new set of
arguments. */ arguments. */
tree tree
copy_template_template_parm (t, newargs) bind_template_template_parm (t, newargs)
tree t; tree t;
tree newargs; tree newargs;
{ {
tree decl = TYPE_NAME (t); tree decl = TYPE_NAME (t);
tree t2; tree t2;
if (newargs == NULL_TREE) t2 = make_aggr_type (BOUND_TEMPLATE_TEMPLATE_PARM);
{ decl = build_decl (TYPE_DECL, DECL_NAME (decl), NULL_TREE);
t2 = make_aggr_type (TREE_CODE (t));
decl = copy_decl (decl);
/* No need to copy these. */ /* These nodes have to be created to reflect new TYPE_DECL and template
TEMPLATE_TYPE_PARM_INDEX (t2) = TEMPLATE_TYPE_PARM_INDEX (t); arguments. */
TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2) TEMPLATE_TYPE_PARM_INDEX (t2) = copy_node (TEMPLATE_TYPE_PARM_INDEX (t));
= TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t); TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (t2)) = decl;
} TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
else = tree_cons (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t),
{ newargs, NULL_TREE);
t2 = make_aggr_type (BOUND_TEMPLATE_TEMPLATE_PARM);
decl = build_decl (TYPE_DECL, DECL_NAME (decl), NULL_TREE);
/* These nodes have to be created to reflect new TYPE_DECL and template
arguments. */
TEMPLATE_TYPE_PARM_INDEX (t2) = copy_node (TEMPLATE_TYPE_PARM_INDEX (t));
TEMPLATE_PARM_DECL (TEMPLATE_TYPE_PARM_INDEX (t2)) = decl;
TEMPLATE_TEMPLATE_PARM_TEMPLATE_INFO (t2)
= tree_cons (TEMPLATE_TEMPLATE_PARM_TEMPLATE_DECL (t),
newargs, NULL_TREE);
}
TREE_TYPE (decl) = t2; TREE_TYPE (decl) = t2;
TYPE_NAME (t2) = decl; TYPE_NAME (t2) = decl;
TYPE_STUB_DECL (t2) = decl; TYPE_STUB_DECL (t2) = decl;
TYPE_SIZE (t2) = 0;
return t2; return t2;
} }
...@@ -1564,10 +1550,6 @@ copy_tree_r (tp, walk_subtrees, data) ...@@ -1564,10 +1550,6 @@ copy_tree_r (tp, walk_subtrees, data)
if (TREE_CODE (*tp) == SCOPE_STMT) if (TREE_CODE (*tp) == SCOPE_STMT)
SCOPE_STMT_BLOCK (*tp) = NULL_TREE; SCOPE_STMT_BLOCK (*tp) = NULL_TREE;
} }
else if (code == TEMPLATE_TEMPLATE_PARM
|| code == BOUND_TEMPLATE_TEMPLATE_PARM)
/* These must be copied specially. */
*tp = copy_template_template_parm (*tp, NULL_TREE);
else if (TREE_CODE_CLASS (code) == 't') else if (TREE_CODE_CLASS (code) == 't')
/* There's no need to copy types, or anything beneath them. */ /* There's no need to copy types, or anything beneath them. */
*walk_subtrees = 0; *walk_subtrees = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment