]> gcc.gnu.org Git - gcc.git/commitdiff
decl.c (current_local_enum): Remove static.
authorJody Goldberg <jodyg@idt.net>
Mon, 8 Sep 1997 09:37:29 +0000 (09:37 +0000)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 8 Sep 1997 09:37:29 +0000 (05:37 -0400)
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

gcc/cp/ChangeLog
gcc/cp/decl.c
gcc/cp/pt.c

index 213ac3980d34fd8694348b6f76b39642b595cd58..0bd033ff4789ebc6f2a7a071f1809c6a0fe5ba9d 100644 (file)
@@ -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>
 
        * pt.c (begin_member_template_processing): Take a function as
index 1e5a56f40dea4f9386770114a573b47aa803da23..3543ddd331c3f1978a9e7a776bc599416fde8383 100644 (file)
@@ -10797,7 +10797,7 @@ xref_basetypes (code_type_node, name, ref, binfo)
 }
   
 \f
-static tree current_local_enum = NULL_TREE;
+tree current_local_enum = NULL_TREE;
 
 /* Begin compiling the definition of an enumeration type.
    NAME is its name (or null if anonymous).
index 0c24ec4eeb945a4955d5d1f0b98cde0e2d072dc5..88af38bdc0ea51365b7f6ee432b8085b90bbd08a 100644 (file)
@@ -76,7 +76,7 @@ static int comp_template_args PROTO((tree, tree));
 static int list_eq PROTO((tree, tree));
 static tree get_class_bindings 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));
 
 /* Restore the template parameter context. */
@@ -1450,9 +1450,8 @@ instantiate_class_template (type)
       if (TREE_CODE (tag) == ENUMERAL_TYPE)
        {
          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)
            {
              DECL_FIELD_CONTEXT (*field_chain) = type;
@@ -2840,7 +2839,7 @@ tsubst_expr (t, args, nargs, in_decl)
       lineno = TREE_COMPLEXITY (t);
       t = TREE_TYPE (t);
       if (TREE_CODE (t) == ENUMERAL_TYPE)
-       tsubst_enum (t, args, nargs);
+       tsubst_enum (t, args, nargs, NULL);
       break;
 
     default:
@@ -4053,10 +4052,14 @@ add_maybe_template (d, fns)
    tsubst_expr.  */
 
 static tree
-tsubst_enum (tag, args, nargs)
+tsubst_enum (tag, args, nargs, field_chain)
      tree tag, args;
      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 e, values = NULL_TREE;
 
@@ -4071,5 +4074,10 @@ tsubst_enum (tag, args, nargs)
 
   finish_enum (newtag, values);
 
+  if (NULL != field_chain)
+    *field_chain = grok_enum_decls (newtag, NULL_TREE);
+
+  current_local_enum = prev_local_enum;
+
   return newtag;
 }
This page took 0.092643 seconds and 5 git commands to generate.