decl.c (current_local_enum): Remove static.
Mon Sep 8 02:33:20 1997 Jody Goldberg <jodyg@idt.net> * decl.c (current_local_enum): Remove static. * pt.c (tsubst_enum): Save and restore value of current_local_enum in case template is expanded in enum decl. (instantiate_class_template) : Use new tsubst_enum signature. (tsubst_expr): Likewise. From-SVN: r15156
This commit is contained in:
parent
786b524596
commit
b3d5a58b51
@ -1,3 +1,11 @@
|
|||||||
|
Mon Sep 8 02:33:20 1997 Jody Goldberg <jodyg@idt.net>
|
||||||
|
|
||||||
|
* decl.c (current_local_enum): Remove static.
|
||||||
|
* pt.c (tsubst_enum): Save and restore value of current_local_enum
|
||||||
|
in case template is expanded in enum decl.
|
||||||
|
(instantiate_class_template) : Use new tsubst_enum signature.
|
||||||
|
(tsubst_expr): Likewise.
|
||||||
|
|
||||||
Mon Sep 8 01:21:43 1997 Mark Mitchell <mmitchell@usa.net>
|
Mon Sep 8 01:21:43 1997 Mark Mitchell <mmitchell@usa.net>
|
||||||
|
|
||||||
* pt.c (begin_member_template_processing): Take a function as
|
* pt.c (begin_member_template_processing): Take a function as
|
||||||
|
@ -10797,7 +10797,7 @@ xref_basetypes (code_type_node, name, ref, binfo)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static tree current_local_enum = NULL_TREE;
|
tree current_local_enum = NULL_TREE;
|
||||||
|
|
||||||
/* Begin compiling the definition of an enumeration type.
|
/* Begin compiling the definition of an enumeration type.
|
||||||
NAME is its name (or null if anonymous).
|
NAME is its name (or null if anonymous).
|
||||||
|
18
gcc/cp/pt.c
18
gcc/cp/pt.c
@ -76,7 +76,7 @@ static int comp_template_args PROTO((tree, tree));
|
|||||||
static int list_eq PROTO((tree, tree));
|
static int list_eq PROTO((tree, tree));
|
||||||
static tree get_class_bindings PROTO((tree, tree, tree));
|
static tree get_class_bindings PROTO((tree, tree, tree));
|
||||||
static tree coerce_template_parms PROTO((tree, tree, tree));
|
static tree coerce_template_parms PROTO((tree, tree, tree));
|
||||||
static tree tsubst_enum PROTO((tree, tree, int));
|
static tree tsubst_enum PROTO((tree, tree, int, tree *));
|
||||||
static tree add_to_template_args PROTO((tree, tree));
|
static tree add_to_template_args PROTO((tree, tree));
|
||||||
|
|
||||||
/* Restore the template parameter context. */
|
/* Restore the template parameter context. */
|
||||||
@ -1450,9 +1450,8 @@ instantiate_class_template (type)
|
|||||||
if (TREE_CODE (tag) == ENUMERAL_TYPE)
|
if (TREE_CODE (tag) == ENUMERAL_TYPE)
|
||||||
{
|
{
|
||||||
tree e, newtag = tsubst_enum (tag, args,
|
tree e, newtag = tsubst_enum (tag, args,
|
||||||
TREE_VEC_LENGTH (args));
|
TREE_VEC_LENGTH (args), field_chain);
|
||||||
|
|
||||||
*field_chain = grok_enum_decls (newtag, NULL_TREE);
|
|
||||||
while (*field_chain)
|
while (*field_chain)
|
||||||
{
|
{
|
||||||
DECL_FIELD_CONTEXT (*field_chain) = type;
|
DECL_FIELD_CONTEXT (*field_chain) = type;
|
||||||
@ -2840,7 +2839,7 @@ tsubst_expr (t, args, nargs, in_decl)
|
|||||||
lineno = TREE_COMPLEXITY (t);
|
lineno = TREE_COMPLEXITY (t);
|
||||||
t = TREE_TYPE (t);
|
t = TREE_TYPE (t);
|
||||||
if (TREE_CODE (t) == ENUMERAL_TYPE)
|
if (TREE_CODE (t) == ENUMERAL_TYPE)
|
||||||
tsubst_enum (t, args, nargs);
|
tsubst_enum (t, args, nargs, NULL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -4053,10 +4052,14 @@ add_maybe_template (d, fns)
|
|||||||
tsubst_expr. */
|
tsubst_expr. */
|
||||||
|
|
||||||
static tree
|
static tree
|
||||||
tsubst_enum (tag, args, nargs)
|
tsubst_enum (tag, args, nargs, field_chain)
|
||||||
tree tag, args;
|
tree tag, args;
|
||||||
int nargs;
|
int nargs;
|
||||||
|
tree * field_chain;
|
||||||
{
|
{
|
||||||
|
extern tree current_local_enum;
|
||||||
|
tree prev_local_enum = current_local_enum;
|
||||||
|
|
||||||
tree newtag = start_enum (TYPE_IDENTIFIER (tag));
|
tree newtag = start_enum (TYPE_IDENTIFIER (tag));
|
||||||
tree e, values = NULL_TREE;
|
tree e, values = NULL_TREE;
|
||||||
|
|
||||||
@ -4071,5 +4074,10 @@ tsubst_enum (tag, args, nargs)
|
|||||||
|
|
||||||
finish_enum (newtag, values);
|
finish_enum (newtag, values);
|
||||||
|
|
||||||
|
if (NULL != field_chain)
|
||||||
|
*field_chain = grok_enum_decls (newtag, NULL_TREE);
|
||||||
|
|
||||||
|
current_local_enum = prev_local_enum;
|
||||||
|
|
||||||
return newtag;
|
return newtag;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user