Merged subtype and current trunk.
[cacao.git] / src / vm / linker.h
index b9dc1876ff4dda700a2553f243bd0cd9dbf113f7..4cc34ac06ce1114b256b93e25ed5953c55cbf132 100644 (file)
@@ -28,7 +28,6 @@
 
 /* forward typedefs ***********************************************************/
 
-typedef struct _vftbl vftbl_t;
 typedef struct arraydescriptor arraydescriptor;
 typedef struct primitivetypeinfo primitivetypeinfo;
 
@@ -40,86 +39,7 @@ typedef struct primitivetypeinfo primitivetypeinfo;
 
 #include "vm/class.h"
 #include "vm/references.h"
-
-
-/* virtual function table ******************************************************
-
-   The vtbl has a bidirectional layout with open ends at both sides.
-   interfacetablelength gives the number of entries of the interface
-   table at the start of the vftbl. The vftbl pointer points to
-   &interfacetable[0].  vftbllength gives the number of entries of
-   table at the end of the vftbl.
-
-   runtime type check (checkcast):
-
-   Different methods are used for runtime type check depending on the
-   argument of checkcast/instanceof.
-       
-   A check against a class is implemented via relative numbering on
-   the class hierachy tree. The tree is numbered in a depth first
-   traversal setting the base field and the diff field. The diff field
-   gets the result of (high - base) so that a range check can be
-   implemented by an unsigned compare. A sub type test is done by
-   checking the inclusion of base of the sub class in the range of the
-   superclass.
-
-   A check against an interface is implemented via the
-   interfacevftbl. If the interfacevftbl contains a nonnull value a
-   class is a subclass of this interface.
-
-   interfacetable:
-
-   Like standard virtual methods interface methods are called using
-   virtual function tables. All interfaces are numbered sequentially
-   (starting with zero). For each class there exist an interface table
-   of virtual function tables for each implemented interface. The
-   length of the interface table is determined by the highest number
-   of an implemented interface.
-
-   The following example assumes a class which implements interface 0 and 3:
-
-   interfacetablelength = 4
-
-                  | ...       |            +----------+
-                  +-----------+            | method 2 |---> method z
-                  | class     |            | method 1 |---> method y
-                  +-----------+            | method 0 |---> method x
-                  | ivftbl  0 |----------> +----------+
-    vftblptr ---> +-----------+
-                  | ivftbl -1 |--> NULL    +----------+
-                  | ivftbl -2 |--> NULL    | method 1 |---> method x
-                  | ivftbl -3 |-----+      | method 0 |---> method a
-                  +-----------+     +----> +----------+
-     
-                              +---------------+
-                              | length 3 = 2  |
-                              | length 2 = 0  |
-                              | length 1 = 0  |
-                              | length 0 = 3  |
-    interfacevftbllength ---> +---------------+
-
-*******************************************************************************/
-
-#define DISPLAY_SIZE 4
-
-struct _vftbl {
-       methodptr   *interfacetable[1];    /* interface table (access via macro)  */
-       classinfo   *clazz;                /* class, the vtbl belongs to          */
-       arraydescriptor *arraydesc;        /* for array classes, otherwise NULL   */
-       s4           vftbllength;          /* virtual function table length       */
-       s4           interfacetablelength; /* interface table length              */
-       s4           baseval;              /* base for runtime type check         */
-                                          /* (-index for interfaces)             */
-       s4           diffval;              /* high - base for runtime type check  */
-
-       s4 subtype_depth;
-       s4 subtype_offset;
-       struct _vftbl *subtype_display[DISPLAY_SIZE+1];  /* the last one is cache */
-       struct _vftbl **subtype_overflow;
-
-       s4          *interfacevftbllength; /* length of interface vftbls          */
-       methodptr    table[1];             /* class vftbl                         */
-};
+#include "vm/vftbl.hpp"
 
 
 /* arraydescriptor *************************************************************