Merge from subtype.
[cacao.git] / src / vm / linker.cpp
index a29ffaa86bdaa1704985bbba61c339c41c2a11dd..50639b736310468fe801800ded6d5af43b443748 100644 (file)
@@ -531,7 +531,7 @@ static bool linker_overwrite_method(methodinfo *mg,
 
 *******************************************************************************/
 
-static void build_display(classinfo *c)
+static classinfo *build_display(classinfo *c)
 {
        int depth, i;
        int depth_fixed;
@@ -558,7 +558,8 @@ static void build_display(classinfo *c)
                super = c->super;
        } while (false);
        if (super) {
-               build_display(super);
+               if (!link_class(super))
+                       return NULL;
                depth = super->vftbl->subtype_depth + 1;
        } else
                /* java.lang.Object doesn't have a super class. */
@@ -586,6 +587,8 @@ static void build_display(classinfo *c)
                c->vftbl->subtype_display[i] = NULL;
        c->vftbl->subtype_offset = OFFSET(vftbl_t, subtype_display[0]) + sizeof(vftbl_t*) * depth_fixed;
        c->vftbl->subtype_depth = depth;
+
+       return c;
 }
 #endif
 
@@ -995,7 +998,8 @@ static classinfo *link_class_intern(classinfo *c)
        RT_TIMING_GET_TIME(time_subclasses);
 
 #if USES_NEW_SUBTYPE
-       build_display(c);
+       if (!build_display(c))
+               return NULL;
 #endif
 
        /* revert the linking state and class is linked */