* Removed all Id tags.
[cacao.git] / src / vm / global.h
index d738f0b6eb287046f08d219871642ce316ecc390..f3938b91abef16984c2d98c573f305848b272ea8 100644 (file)
@@ -1,6 +1,6 @@
 /* src/vm/global.h - global definitions
 
-   Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+   Copyright (C) 1996-2005, 2007, 2006 R. Grafl, A. Krall, C. Kruegel,
    C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
    E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
    J. Wenninger, Institut f. Computersprachen - TU Wien
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Contact: cacao@cacaojvm.org
-
-   Authors: Reinhard Grafl
-            Andreas Krall
-            Mark Probst
-            Philipp Tomsich
-            Edwin Steiner
-            Joseph Wenninger
-            Christian Thalinger
-
-   $Id: global.h 7387 2007-02-21 23:26:24Z twisti $
-
 */
 
 
@@ -81,10 +69,18 @@ typedef union {
 } imm_union;
 
 
+/* alignment macros ***********************************************************/
+
+#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   */
@@ -120,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 */
@@ -202,21 +175,28 @@ typedef struct java_objectarray java_objectarray;
 
 #define ACC_CLASS_REFLECT_MASK      0x0000ffff/* flags reported by reflection */
 
-#define ACC_CLASS_HAS_POINTERS      0x00010000/* instance contains pointers   */
-#define ACC_CLASS_SOFT_REFERENCE    0x00020000
-#define ACC_CLASS_WEAK_REFERENCE    0x00040000
-#define ACC_CLASS_PHANTOM_REFERENCE 0x00080000
+#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.
@@ -227,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;
@@ -246,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;
 
 
 
@@ -272,60 +238,81 @@ 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];
 };
 
 
-/* Synchronization ************************************************************/
+/* java_handle_t ***************************************************************
 
-#if defined(ENABLE_THREADS)
-void compiler_lock();
-void compiler_unlock();
+   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