Some lazy loading/linking checks, i believe the are _many_ more!
authortwisti <none@none>
Sat, 19 Jun 2004 12:46:00 +0000 (12:46 +0000)
committertwisti <none@none>
Sat, 19 Jun 2004 12:46:00 +0000 (12:46 +0000)
src/vm/jit/verify/typeinfo.c
typeinfo.c

index bc3d87163ce09e4cdf46251af99c2bffc02f0d7a..9c244dd89402992ef811760d2b53482e7ad80f4a 100644 (file)
@@ -26,7 +26,7 @@
 
    Authors: Edwin Steiner
 
-   $Id: typeinfo.c 1067 2004-05-18 10:25:51Z stefan $
+   $Id: typeinfo.c 1191 2004-06-19 12:46:00Z twisti $
 
 */
 
@@ -370,6 +370,14 @@ static
 bool
 classinfo_implements_interface(classinfo *cls,classinfo *interf)
 {
+       if (!cls->loaded)
+               if (!class_load(cls))
+                       return false;
+
+       if (!cls->linked)
+               if (!class_link(cls))
+                       return false;
+
     if (cls->flags & ACC_INTERFACE) {
         /* cls is an interface */
         if (cls == interf)
@@ -1031,6 +1039,24 @@ typeinfo_merge_nonarrays(typeinfo *dest,
 #endif
     */ 
 
+       /* check clsx */
+       if (!clsx->loaded)
+               if (!class_load(clsx))
+                       return false;
+
+       if (!clsx->linked)
+               if (!class_link(clsx))
+                       return false;
+
+       /* check clsy */
+       if (!clsy->loaded)
+               if (!class_load(clsy))
+                       return false;
+
+       if (!clsy->linked)
+               if (!class_link(clsy))
+                       return false;
+
     /* Common case: clsx == clsy */
     /* (This case is very simple unless *both* x and y really represent
      *  merges of subclasses of clsx==clsy.)
index bc3d87163ce09e4cdf46251af99c2bffc02f0d7a..9c244dd89402992ef811760d2b53482e7ad80f4a 100644 (file)
@@ -26,7 +26,7 @@
 
    Authors: Edwin Steiner
 
-   $Id: typeinfo.c 1067 2004-05-18 10:25:51Z stefan $
+   $Id: typeinfo.c 1191 2004-06-19 12:46:00Z twisti $
 
 */
 
@@ -370,6 +370,14 @@ static
 bool
 classinfo_implements_interface(classinfo *cls,classinfo *interf)
 {
+       if (!cls->loaded)
+               if (!class_load(cls))
+                       return false;
+
+       if (!cls->linked)
+               if (!class_link(cls))
+                       return false;
+
     if (cls->flags & ACC_INTERFACE) {
         /* cls is an interface */
         if (cls == interf)
@@ -1031,6 +1039,24 @@ typeinfo_merge_nonarrays(typeinfo *dest,
 #endif
     */ 
 
+       /* check clsx */
+       if (!clsx->loaded)
+               if (!class_load(clsx))
+                       return false;
+
+       if (!clsx->linked)
+               if (!class_link(clsx))
+                       return false;
+
+       /* check clsy */
+       if (!clsy->loaded)
+               if (!class_load(clsy))
+                       return false;
+
+       if (!clsy->linked)
+               if (!class_link(clsy))
+                       return false;
+
     /* Common case: clsx == clsy */
     /* (This case is very simple unless *both* x and y really represent
      *  merges of subclasses of clsx==clsy.)