natClass.cc (_Jv_IsAssignableFrom): Checking the ancestors array is invalid for inter...
authorPer Bothner <per@bothner.com>
Sat, 24 Mar 2001 00:21:24 +0000 (16:21 -0800)
committerPer Bothner <bothner@gcc.gnu.org>
Sat, 24 Mar 2001 00:21:24 +0000 (16:21 -0800)
* java/lang/natClass.cc (_Jv_IsAssignableFrom):  Checking the
ancestors array is invalid for interfaces, so do that *after*
check that the target type is not an interface.

From-SVN: r40797

libjava/ChangeLog
libjava/java/lang/natClass.cc

index 5c24dd98221f2f1121c4062f13f2694b35b93aff..e8d5d614cccd6efde2d6466283ed4b756a4507d5 100644 (file)
@@ -1,3 +1,9 @@
+2001-03-23  Per Bothner  <per@bothner.com>
+
+       * java/lang/natClass.cc (_Jv_IsAssignableFrom):  Checking the
+       ancestors array is invalid for interfaces, so do that *after*
+       check that the target type is not an interface.
+
 2000-03-23  Jeff Sturm  <jsturm@one-point.com>
 
        * prims.cc (_Jv_FindClassFromSignature): Check return of
index b934ae76389af4b8abad233d92bd87cd053f1678..5d7497109af4670cbfbd4a3d6f0da37480799c77 100644 (file)
@@ -909,11 +909,8 @@ _Jv_LookupInterfaceMethodIdx (jclass klass, jclass iface, int method_idx)
 jboolean
 _Jv_IsAssignableFrom (jclass target, jclass source)
 {
-  if (source == target
-      || (target == &ObjectClass && !source->isPrimitive())
-      || (source->ancestors != NULL 
-          && source->ancestors[source->depth - target->depth] == target))
-     return true;
+  if (source == target)
+    return true;
      
   // If target is array, so must source be.  
   if (target->isArray ())
@@ -945,9 +942,15 @@ _Jv_IsAssignableFrom (jclass target, jclass source)
              && cl_idt->cls.itable[offset] == target)
            return true;
        }
+      return false;
     }
-    
-  return false;
+     
+  if ((target == &ObjectClass && !source->isPrimitive())
+      || (source->ancestors != NULL 
+         && source->ancestors[source->depth - target->depth] == target))
+    return true;
+      
+ return false;
 }
 
 // Interface type checking, the slow way. Returns TRUE if IFACE is a