nitvm: Factorize the loading of superclasses
authorJean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Thu, 18 May 2017 04:33:20 +0000 (00:33 -0400)
committerJean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>
Thu, 18 May 2017 04:33:20 +0000 (00:33 -0400)
Signed-off-by: Jean-Christophe Beaupré <jcbrinfo@users.noreply.github.com>

src/vm/virtual_machine.nit

index 7de400a..07ad951 100644 (file)
@@ -199,8 +199,7 @@ class VirtualMachine super NaiveInterpreter
        do
                if mclass.loaded then return
 
-               # Recursively load superclasses
-               for parent in mclass.in_hierarchy(mainmodule).direct_greaters do load_class_indirect(parent)
+               load_supers(mclass)
 
                if mclass.abstract_loaded then
                        mclass.allocate_vtable(self)
@@ -209,6 +208,14 @@ class VirtualMachine super NaiveInterpreter
                end
        end
 
+       # Recursively load superclasses.
+       private fun load_supers(mclass: MClass)
+       do
+               for parent in mclass.in_hierarchy(mainmodule).direct_greaters do
+                       load_class_indirect(parent)
+               end
+       end
+
        # This method is called to handle an implicitly loaded class,
        # i.e. a superclass of an explicitly loaded class
        # A class loaded implicitly will not be fully allocated
@@ -217,7 +224,7 @@ class VirtualMachine super NaiveInterpreter
                # It the class was already implicitly loaded
                if mclass.abstract_loaded then return
 
-               for parent in mclass.in_hierarchy(mainmodule).direct_greaters do load_class_indirect(parent)
+               load_supers(mclass)
 
                mclass.make_vt(self, false)
        end