* Removed all Id tags.
[cacao.git] / src / vm / global.h
index 6e6afd80b7f0f7f44cbbb200d6a3441d38d62f33..f3938b91abef16984c2d98c573f305848b272ea8 100644 (file)
@@ -22,8 +22,6 @@
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   $Id: global.h 7930 2007-05-21 14:40:32Z twisti $
-
 */
 
 
@@ -73,13 +71,16 @@ typedef union {
 
 /* alignment macros ***********************************************************/
 
-#define ALIGN_2(a)    do { if ((a) & 0x1) (a)++; } while (0)
+#define ALIGN_EVEN(a)                   ((a) = (((a) + 1) & ~1))
+#define ALIGN_ODD(a)                    ((a) =   (a) | 1       )
+
+#define ALIGN_2(a)                      ALIGN_EVEN(a)
 
 
 /* forward typedefs ***********************************************************/
 
-typedef struct java_objectheader java_objectheader
-typedef struct java_objectarray java_objectarray;
+typedef struct java_object_t java_object_t
+typedef struct java_objectarray_t java_objectarray_t;
 
 
 #define MAX_ALIGN 8             /* most generic alignment for JavaVM values   */
@@ -115,29 +116,6 @@ typedef struct java_objectarray java_objectarray;
 #define IS_VOID_TYPE(a)         ((a) == TYPE_VOID)
 
 
-/* primitive data types *******************************************************/
-
-/* These values are used in parsed descriptors and in some other
-   places were the different types handled internally as TYPE_INT have
-   to be distinguished. */
-
-#define PRIMITIVETYPE_COUNT  11  /* number of primitive types (+ dummies)     */
-
-/* CAUTION: Don't change the numerical values! These constants are
-   used as indices into the primitive type table. */
-
-#define PRIMITIVETYPE_INT     TYPE_INT
-#define PRIMITIVETYPE_LONG    TYPE_LNG
-#define PRIMITIVETYPE_FLOAT   TYPE_FLT
-#define PRIMITIVETYPE_DOUBLE  TYPE_DBL
-#define PRIMITIVETYPE_DUMMY1  TYPE_ADR     /* not used! */
-#define PRIMITIVETYPE_BYTE    5
-#define PRIMITIVETYPE_CHAR    6
-#define PRIMITIVETYPE_SHORT   7
-#define PRIMITIVETYPE_BOOLEAN 8
-#define PRIMITIVETYPE_DUMMY2  9            /* not used! */
-#define PRIMITIVETYPE_VOID    TYPE_VOID
-
 /* some Java related defines **************************************************/
 
 #define JAVA_VERSION    "1.5.0"         /* this version is supported by CACAO */
@@ -197,22 +175,28 @@ typedef struct java_objectarray java_objectarray;
 
 #define ACC_CLASS_REFLECT_MASK      0x0000ffff/* flags reported by reflection */
 
-#define ACC_CLASS_PRIMITIVE         0x00010000/* class is a primitive class   */
-#define ACC_CLASS_HAS_POINTERS      0x00020000/* instance contains pointers   */
-#define ACC_CLASS_SOFT_REFERENCE    0x00040000
-#define ACC_CLASS_WEAK_REFERENCE    0x00080000
-#define ACC_CLASS_PHANTOM_REFERENCE 0x00100000
+#define ACC_CLASS_PRIMITIVE         0x00010000
+#define ACC_CLASS_MEMBER            0x00020000
+#define ACC_CLASS_ANONYMOUS         0x00040000
+
+#define ACC_CLASS_HAS_POINTERS      0x00080000/* instance contains pointers   */
+
+#define ACC_CLASS_REFERENCE_MASK    0x00700000
+#define ACC_CLASS_REFERENCE_SOFT    0x00100000
+#define ACC_CLASS_REFERENCE_WEAK    0x00200000
+#define ACC_CLASS_REFERENCE_PHANTOM 0x00400000
 
 
 /* special flags used in methodinfo *******************************************/
 
-#define ACC_METHOD_IMPLEMENTED 0x00010000     /* there is an implementation   */
-#define ACC_METHOD_MONOMORPHIC 0x00020000     /* currently monomorphic method */
+#define ACC_METHOD_BUILTIN     0x00010000     /* use for descriptor parsing   */
+#define ACC_METHOD_IMPLEMENTED 0x00020000     /* there is an implementation   */
+#define ACC_METHOD_MONOMORPHIC 0x00040000     /* currently monomorphic method */
 
 
 /* data structures of the runtime system **************************************/
 
-/* java_objectheader ***********************************************************
+/* java_object_t ***************************************************************
 
    All objects (and arrays) which resides on the heap need the
    following header at the beginning of the data structure.
@@ -223,7 +207,7 @@ typedef struct java_objectarray java_objectarray;
 
 #define HDRFLAG_FLC 0x01
 
-struct java_objectheader {             /* header for all objects              */
+struct java_object_t {                 /* header for all objects              */
        struct _vftbl            *vftbl;   /* pointer to virtual function table   */
 #if defined(ENABLE_THREADS)
        struct lock_record_t *monitorPtr;
@@ -242,24 +226,10 @@ struct java_objectheader {             /* header for all objects              */
        which is referenced by the vftbl.
 */
 
-/* CAUTION: Don't change the numerical values! These constants (with
- * the exception of ARRAYTYPE_OBJECT) are used as indices in the
- * primitive type table.
- */
-#define ARRAYTYPE_INT      PRIMITIVETYPE_INT
-#define ARRAYTYPE_LONG     PRIMITIVETYPE_LONG
-#define ARRAYTYPE_FLOAT    PRIMITIVETYPE_FLOAT
-#define ARRAYTYPE_DOUBLE   PRIMITIVETYPE_DOUBLE
-#define ARRAYTYPE_BYTE     PRIMITIVETYPE_BYTE
-#define ARRAYTYPE_CHAR     PRIMITIVETYPE_CHAR
-#define ARRAYTYPE_SHORT    PRIMITIVETYPE_SHORT
-#define ARRAYTYPE_BOOLEAN  PRIMITIVETYPE_BOOLEAN
-#define ARRAYTYPE_OBJECT   PRIMITIVETYPE_VOID     /* don't use as index! */
-
-typedef struct java_arrayheader {       /* header for all arrays              */
-       java_objectheader objheader;        /* object header                      */
+typedef struct java_array_t {           /* header for all arrays              */
+       java_object_t objheader;            /* object header                      */
        s4 size;                            /* array size                         */
-} java_arrayheader;
+} java_array_t;
 
 
 
@@ -268,55 +238,84 @@ typedef struct java_arrayheader {       /* header for all arrays              */
 /*  booleanarray and bytearray need identical memory layout (access methods
     use the same machine code */
 
-typedef struct java_booleanarray {
-       java_arrayheader header;
+typedef struct java_booleanarray_t {
+       java_array_t header;
        u1 data[1];
-} java_booleanarray;
+} java_booleanarray_t;
 
-typedef struct java_bytearray {
-       java_arrayheader header;
+typedef struct java_bytearray_t {
+       java_array_t header;
        s1 data[1];
-} java_bytearray;
+} java_bytearray_t;
 
-typedef struct java_chararray {
-       java_arrayheader header;
+typedef struct java_chararray_t {
+       java_array_t header;
        u2 data[1];
-} java_chararray;
+} java_chararray_t;
 
-typedef struct java_shortarray {
-       java_arrayheader header;
+typedef struct java_shortarray_t {
+       java_array_t header;
        s2 data[1];
-} java_shortarray;
+} java_shortarray_t;
 
-typedef struct java_intarray {
-       java_arrayheader header;
+typedef struct java_intarray_t {
+       java_array_t header;
        s4 data[1];
-} java_intarray;
+} java_intarray_t;
 
-typedef struct java_longarray {
-       java_arrayheader header;
+typedef struct java_longarray_t {
+       java_array_t header;
        s8 data[1];
-} java_longarray;
+} java_longarray_t;
 
-typedef struct java_floatarray {
-       java_arrayheader header;
+typedef struct java_floatarray_t {
+       java_array_t header;
        float data[1];
-} java_floatarray;
+} java_floatarray_t;
 
-typedef struct java_doublearray {
-       java_arrayheader header;
+typedef struct java_doublearray_t {
+       java_array_t header;
        double data[1];
-} java_doublearray;
+} java_doublearray_t;
 
 /*  objectarray and arrayarray need identical memory layout (access methods
     use the same machine code */
 
-struct java_objectarray {
-       java_arrayheader   header;
-       java_objectheader *data[1];
+struct java_objectarray_t {
+       java_array_t   header;
+       java_object_t *data[1];
 };
 
 
+/* java_handle_t ***************************************************************
+
+   TODO: document me!
+
+*******************************************************************************/
+
+#if 0
+typedef struct java_handle_t {
+       java_object_t *heap_object;
+} java_handle_t;
+#elseif 0
+typedef union {
+       java_object_t    object;
+       java_array_t     array;
+} java_handle_t;
+#else
+typedef java_object_t       java_handle_t;
+typedef java_objectarray_t  java_handle_objectarray_t;
+typedef java_booleanarray_t java_handle_booleanarray_t;
+typedef java_bytearray_t    java_handle_bytearray_t;
+typedef java_chararray_t    java_handle_chararray_t;
+typedef java_shortarray_t   java_handle_shortarray_t;
+typedef java_intarray_t     java_handle_intarray_t;
+typedef java_longarray_t    java_handle_longarray_t;
+typedef java_floatarray_t   java_handle_floatarray_t;
+typedef java_doublearray_t  java_handle_doublearray_t;
+#endif
+
+
 /* global constants related to the verifier ***********************************/
 
 /* The verifier needs additional variables in the variable array. Since these */