OSDN Git Service

* name-lookup.c (set_inherited_value_binding_p): Add class_type
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 15 Jul 2004 16:02:07 +0000 (16:02 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 15 Jul 2004 16:02:07 +0000 (16:02 +0000)
parameter.
(get_class_binding): Adjust.
(push_class_level_binding): Don't use set_inherited_value_binding_p.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@84757 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/name-lookup.c

index 75ae59c..e5c87a6 100644 (file)
@@ -1,3 +1,10 @@
+2004-07-15  Mark Mitchell  <mark@codesourcery.com>
+
+       * name-lookup.c (set_inherited_value_binding_p): Add class_type 
+       parameter.
+       (get_class_binding): Adjust.
+       (push_class_level_binding): Don't use set_inherited_value_binding_p.
+
 2004-07-15  Nathan Sidwell  <nathan@codesourcery.com>
 
        * class.c(finish_struct_bits): Don't set TYPE_HAS_CONVERSION here.
@@ -11,9 +18,6 @@
 2004-07-14  Mark Mitchell  <mark@codesourcery.com>
 
        * lex.c (cxx_make_type): Remove call to get_pointer_type.
-       (set_inherited_value_binding_p): Add class_type parameter.
-       (get_class_binding): Adjust.
-       (push_class_level_binding): Don't use set_inherited_value_binding_p.
 
        * cp-tree.h (IDENTIFIER_VALUE): Remove.
        (BINFO_PUSHDECLS_MARKED): Likewise.
index 0aff14b..fd3776f 100644 (file)
@@ -2640,10 +2640,11 @@ poplevel_class (void)
 
 /* Set INHERITED_VALUE_BINDING_P on BINDING to true or false, as
    appropriate.  DECL is the value to which a name has just been
-   bound.  */
+   bound.  CLASS_TYPE is the class in which the lookup occurred.  */
 
 static void
-set_inherited_value_binding_p (cxx_binding *binding, tree decl)
+set_inherited_value_binding_p (cxx_binding *binding, tree decl,
+                              tree class_type)
 {
   if (binding->value == decl && TREE_CODE (decl) != TREE_LIST)
     {
@@ -2657,7 +2658,7 @@ set_inherited_value_binding_p (cxx_binding *binding, tree decl)
          context = context_for_name_lookup (decl);
        }
 
-      if (is_properly_derived_from (current_class_type, context))
+      if (is_properly_derived_from (class_type, context))
        INHERITED_VALUE_BINDING_P (binding) = 1;
       else
        INHERITED_VALUE_BINDING_P (binding) = 0;
@@ -2766,7 +2767,7 @@ get_class_binding (tree name, cxx_scope *scope)
                                   scope);
       /* This is a class-scope binding, not a block-scope binding.  */
       LOCAL_BINDING_P (binding) = 0;
-      set_inherited_value_binding_p (binding, value_binding);
+      set_inherited_value_binding_p (binding, value_binding, class_type);
     }
   else
     binding = NULL;
@@ -2888,13 +2889,8 @@ push_class_level_binding (tree name, tree x)
        {
          binding->value = x;
          /* It is always safe to clear INHERITED_VALUE_BINDING_P
-            here.  That flag is only set when setup_class_bindings
-            inserts a binding from a base class, and
-            setup_class_bindings only inserts a binding once for
-            every name declared in the class and its base classes.
-            So, if we see a second binding for this name, it must be
-            coming from a definition in the body of the class
-            itself.  */
+            here.  This function is only used to register bindings
+            from with the class definition itself.  */
          INHERITED_VALUE_BINDING_P (binding) = 0;
          POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, true);
        }
@@ -2918,10 +2914,6 @@ push_class_level_binding (tree name, tree x)
       ok = true;
     }
 
-  /* Determine whether or not this binding is from a base class.  */
-  binding = IDENTIFIER_BINDING (name);
-  set_inherited_value_binding_p (binding, decl);
-
   POP_TIMEVAR_AND_RETURN (TV_NAME_LOOKUP, ok);
 }