correct version of heap.old.c reestablished
[cacao.git] / global.h
index e92f7f1164e62e6343d1ac78a25d420017962c36..8b7995c56eb034d7f2feaeb37527c88e5f34ddcc 100644 (file)
--- a/global.h
+++ b/global.h
@@ -8,10 +8,11 @@
        some files and contains global used macros.
 
        Authors: Reinhard Grafl      EMAIL: cacao@complang.tuwien.ac.at
-       Chages:  Andreas  Krall      EMAIL: cacao@complang.tuwien.ac.at
+       Changes: Andreas  Krall      EMAIL: cacao@complang.tuwien.ac.at
                 Mark Probst         EMAIL: cacao@complang.tuwien.ac.at
+                        Philipp Tomsich     EMAIL: cacao@complang.tuwien.ac.at
 
-       Last Change: 1997/10/28
+       Last Change: 1998/10/30
 
 *******************************************************************************/
 
 
 #define STATISTICS                         /* andi   */
 
+/* JIT_MARKER_SUPPORT is the define used to toggle Just-in-time generated
+   marker functions on and off. */
+#undef JIT_MARKER_SUPPORT                  /* phil   */
+
 /***************************** standard includes ******************************/
 
 #include <stdio.h>
@@ -122,13 +127,13 @@ struct unicode {
        int        length;   /* L"ange des Textes */           
        u2        *text;     /* Zeiger auf den Text (jeder Buchstabe 16 Bit) */
        classinfo *class;    /* gegebenenfalls Referenz auf die Klasse dieses 
-                               Namens (oder NULL, wenn es keine solche gibt)  */
+                                                       Namens (oder NULL, wenn es keine solche gibt)  */
        struct java_objectheader *string;
-                            /* gegebenenfalls Referenz auf einen konstanten
-                               String mit dem entsprechenden Wert */ 
-       };
+       /* gegebenenfalls Referenz auf einen konstanten
+          String mit dem entsprechenden Wert */ 
+};
 
-       /* Alle Unicode-Symbole werden in einer einzigen globalen Tabelle 
+/* Alle Unicode-Symbole werden in einer einzigen globalen Tabelle 
           (Hashtabelle) verwaltet, jedes Symbol wird nur einmal angelegt.
           -> Speicherersparnis, und "Uberpr"ufung auf Gleichheit durch einfachen
           Zeigervergleich */
@@ -141,39 +146,39 @@ typedef struct {
        classinfo *class;
        unicode   *name;
        unicode   *descriptor;
-       } constant_FMIref;
+} constant_FMIref;
 
 
 typedef struct {
        s4 value;
-       } constant_integer;
+} constant_integer;
        
 typedef struct {
        float value;
-       } constant_float;
+} constant_float;
 
 typedef struct {
        s8 value;
-       } constant_long;
+} constant_long;
        
 typedef struct {
        double value;
-       } constant_double;
+} constant_double;
 
 
 typedef struct {
        unicode *name;
        unicode *descriptor;
-       } constant_nameandtype;
+} constant_nameandtype;
 
 
 typedef struct constant_arraydescriptor {
        int arraytype;
        classinfo *objectclass;
        struct constant_arraydescriptor *elementdescriptor;
-       } constant_arraydescriptor;
+} constant_arraydescriptor;
 
-       /* Mit einem Arraydescriptor kann ein Array-Typ dargestellt werden.
+/* Mit einem Arraydescriptor kann ein Array-Typ dargestellt werden.
           Bei normalen Arrays (z.B. Array von Bytes,...) gen"ugt dazu,
        dass das Feld arraytype die entsprechende Kennzahl enth"alt
        (z.B. ARRAYTYPE_BYTE).
@@ -218,7 +223,7 @@ typedef struct constant_arraydescriptor {
 
 
 
-/***************** Die Datenstrukturen fuer das Laufzeitsystem ***************/
+/***************** Die Datenstrukturen fuer das Laufzeitsystem ****************/
 
 
        /********* Objekte **********
@@ -234,7 +239,7 @@ typedef struct java_objectheader {    /* Der Header f"ur alle Objekte */
 
 
 
-       /********* Arrays ***********
+/********* Arrays ***********
        
        Alle Arrays in Java sind auch gleichzeitig Objekte (d.h. sie haben auch
        den obligatorischen Object-Header und darin einen Verweis auf eine Klasse)
@@ -255,7 +260,7 @@ typedef struct java_objectheader {    /* Der Header f"ur alle Objekte */
 #define ARRAYTYPE_ARRAY    9
 
 
-       /** Der Header f"ur ein Java-Array **/
+/** Der Header f"ur ein Java-Array **/
 
 typedef struct java_arrayheader {  /* Der Arrayheader f"ur alle Arrays */
        java_objectheader objheader;       /* Der Object-Header */
@@ -265,7 +270,7 @@ typedef struct java_arrayheader {  /* Der Arrayheader f"ur alle Arrays */
 
 
 
-       /** Die Unterschiedlichen Strukturen f"ur alle Typen von Arrays **/
+/** Die Unterschiedlichen Strukturen f"ur alle Typen von Arrays **/
 
 typedef struct java_chararray {
        java_arrayheader header;
@@ -283,7 +288,7 @@ typedef struct java_doublearray {
 } java_doublearray;
 
 
-   /* achtung: die beiden Stukturen booleanarray und bytearray m"ussen 
+/* achtung: die beiden Stukturen booleanarray und bytearray m"ussen 
       identisches memory-layout haben, weil mit den selben Funktionen 
       darauf zugegriffen wird */
 
@@ -313,7 +318,7 @@ typedef struct java_longarray {
 } java_longarray;
 
 
-       /* ACHTUNG: die beiden folgenden Strukturen m"ussen unbedingt gleiches
+/* ACHTUNG: die beiden folgenden Strukturen m"ussen unbedingt gleiches
           Memory-Layout haben, weil mit ein und der selben Funktion auf die
           data-Eintr"age beider Typen zugegriffen wird !!!! */
 
@@ -332,125 +337,124 @@ typedef struct java_arrayarray {
 
 
 
-/************** Strukturen f"ur Klassen, Felder & Methoden *****************/
+/******************** class, field and method structures **********************/
 
 
-    /*** Struktur: fieldinfo ***/
+/********************** structure: fieldinfo **********************************/
 
-typedef struct fieldinfo {   /* Struktur f"ur ein Feld einer Klasse */
-       s4       flags;              /* die ACC-Flags */
-       s4       type;               /* Grunddatentyp */
-       unicode *name;               /* Name des Felds */
-       unicode *descriptor;         /* Typedescriptor in JavaVM-Form */
+typedef struct fieldinfo {/* field of a class                                 */
+       s4       flags;       /* ACC flags                                        */
+       s4       type;        /* basic data type                                  */
+       unicode *name;        /* name of field                                    */
+       unicode *descriptor;  /* JavaVM descriptor string of field                */
        
-       s4       offset;             /* Offset vom Anfang des Objektes */
-                                    /* (bei Instanzvariablen) */
+       s4       offset;      /* offset from start of object (instance variables) */
 
-       union {                      /* Speicher f"ur den Wert */
-               s4 i;                    /* (bei Klassenvariablen) */    
+       union {               /* storage for static values (class variables)      */
+               s4 i; 
                s8 l;
                float f;
                double d;
                void *a; 
-               } value;
-               
-       } fieldinfo;
+       } value;
 
+} fieldinfo;
 
-    /*** Struktur: exceptiontable ***/
 
-typedef struct exceptiontable {  /* Exceptionhandler-Eintrag in einer Methode */ 
-       s4         startpc;            /* Anfang des G"ultigkeitsbereichs */
-       s4         endpc;              /* Ende des Bereichs (exklusive) */
-       s4         handlerpc;          /* JavaVM-Position des Handlers */
-       classinfo *catchtype;          /* Typ der behandelten Exceptions (oder 
-                                       NULL, wenn alle behandelt werden sollen) */
-       } exceptiontable;
+/********************** structure: exceptiontable *****************************/
 
+typedef struct exceptiontable { /* exceptiontable entry in a method           */ 
+       s4         startpc;         /* start pc of guarded area (inclusive)       */
+       s4         endpc;           /* end pc of guarded area (exklusive)         */
+       s4         handlerpc;       /* pc of exception handler                    */
+       classinfo *catchtype;       /* catchtype of exception (NULL == catchall)  */
+} exceptiontable;
 
 
-    /*** Struktur: methodinfo ***/
+/********************** structure: methodinfo *********************************/
 
-typedef struct methodinfo {  /* Struktur f"ur eine Methode einer Klasse */
-       s4             flags;            /* die ACC-Flags */
-       unicode   *name;             /* Name der Methode */
-       unicode   *descriptor;       /* der JavaVM-Descriptorstring f"ur Methoden */
-       s4        returntype;        /* only temporary valid, return type */
-       s4        paramcount;        /* only temporary valid, number of parameters */
-       u1        *paramtypes;       /* only temporary valid, parameter types */
-       classinfo *class;            /* Die Klasse, der die Methode geh"ort */
-       u4         vftblindex;       /* Index dieser Methode f"ur die Virtual
-                                       Function Table (wenn es keine statische
-                                       Methode ist) */
+typedef struct methodinfo {         /* method structure                       */
+       s4             flags;               /* ACC flags                              */
+       unicode   *name;                /* name of method                         */
+       unicode   *descriptor;          /* JavaVM descriptor string of method     */
+       s4         returntype;          /* only temporary valid, return type      */
+       s4         paramcount;          /* only temporary valid, parameter count  */
+       u1        *paramtypes;          /* only temporary valid, parameter types  */
+       classinfo *class;               /* class, the method belongs to           */
+       u4         vftblindex;          /* index of method in virtual function table
+                                          (if it is a virtual method)            */
+       s4         maxstack;            /* maximum stack depth of method          */
+       s4         maxlocals;           /* maximum number of local variables      */
+       u4         jcodelength;         /* length of JavaVM code                  */
+       u1        *jcode;               /* pointer to JavaVM code                 */
 
-       s4       maxstack;                  /* maximale Stacktiefe des JavaVM-Codes */
-       s4   maxlocals;                 /* maximale Anzahl der JavaVM-Variablen */
-       u4   jcodelength;               /* L"ange des JavaVM-Codes */
-       u1  *jcode;                     /* und Zeiger auf den JavaVM-Code */
+       s4         exceptiontablelength;/* exceptiontable length                  */
+       exceptiontable *exceptiontable; /* the exceptiontable                     */
 
-       s4   exceptiontablelength;      /* L"ange der Exceptintable */
-       exceptiontable *exceptiontable; /* Die Exceptiontable selber */
+       u1        *stubroutine;         /* stub for compiling or calling natives  */    
+       u4         mcodelength;         /* legth of generated machine code        */
+       u1        *mcode;               /* pointer to machine code                */
+       u1        *entrypoint;          /* entry point in machine code            */
 
-       u1  *stubroutine;               /* STUB-Routine for compiling or calling 
-                                          natives */   
-       u4   mcodelength;               /* L"ange des generierten Maschinencodes */
-       u1  *mcode;                     /* Zeiger auf den Maschinencode */
-       u1  *entrypoint;                /* Entrypoint to the Maschine-Code */
+} methodinfo;
 
-       
-       } methodinfo;
 
+/********************** structure: classinfo **********************************/
 
-    /*** Struktur: classinfo ***/
+struct classinfo {                /* class structure                          */
+       java_objectheader header;     /* classes are also objects                 */
 
-struct classinfo {           /* Datenstruktur f"ur eine Klasse */
-       java_objectheader header;     /* Weil auch Klassen als Objekte angesprochen 
-                                        werden */
+       s4          flags;            /* ACC flags                                */
+       unicode    *name;             /* class name                               */ 
 
-       s4 flags;                     /* Die ACC-Flags */
-       unicode *name;                /* Name der Klasse */ 
-       
-       s4       cpcount;             /* Anzahl der Eintr"age im Constant-Pool */
-       u1      *cptags;              /* Die TAGs f"ur den Constant-Pool */
-       voidptr *cpinfos;             /* Die Zeiger auf die Info-Strukturen */
-       
-       classinfo *super;             /* Zeiger auf die "ubergeordnete Klasse */
-       
-       s4          interfacescount;  /* Anzahl der Interfaces */
-       classinfo **interfaces;       /* Zeiger auf die Interfaces */
-       
-       s4          fieldscount;      /* Anzahl der Felder */
-       fieldinfo  *fields;           /* Die Tabelle der Felder */
-       
-       s4          methodscount;     /* Anzahl der Methoden */
-       methodinfo *methods;          /* Die Tabelle der Methoden */
-       
-       
-       listnode    listnode;         /* Verkettungsstruktur (f"ur Listen) */
+       s4          cpcount;          /* number of entries in constant pool       */
+       u1         *cptags;           /* constant pool tags                       */
+       voidptr    *cpinfos;          /* pointer to constant pool info structures */
 
-       bool        initialized;      /* true, wenn Klasse bereits Initialisiert */ 
-       bool        linked;           /* wird von `class_link` auf true gesetzt */
-       s4                      index;            /* Hierarchietiefe  (bei normalen Klassen)  
-                                        oder fortlaufende Nummer (bei Interfaces)*/ 
-       u4          instancesize;     /* Gr"osse eines Objektes dieser Klasse */
+       classinfo  *super;            /* super class pointer                      */
+       classinfo  *sub;              /* sub class pointer                        */
+       classinfo  *nextsub;          /* pointer to next class in sub class list  */
 
-       vftbl       *vftbl;
+       s4          interfacescount;  /* number of interfaces                     */
+       classinfo **interfaces;       /* pointer to interfaces                    */
 
-       methodinfo *finalizer;        /* Finalizer-Methode f"ur die Klasse */
-       };
+       s4          fieldscount;      /* number of fields                         */
+       fieldinfo  *fields;           /* field table                              */
+
+       s4          methodscount;     /* number of methods                        */
+       methodinfo *methods;          /* method table                             */
+
+       listnode    listnode;         /* linkage                                  */
+
+       bool        initialized;      /* true, if class already initialised       */ 
+       bool        linked;           /* true, if class already linked            */
+       s4                      index;            /* hierarchy depth (classes) or index
+                                        (interfaces)                             */ 
+       s4          instancesize;     /* size of an instance of this class        */
+
+       vftbl      *vftbl;            /* pointer to virtual function table        */
+
+       methodinfo *finalizer;        /* finalizer method                         */
+#ifdef JIT_MARKER_SUPPORT
+       methodinfo *marker; 
+#endif
+};
        
 
 struct vftbl {
-       classinfo  *class;            /* Class, the function table belongs to */
+       classinfo  *class;                /* Class, the function table belongs to */
+
+       s4          vftbllength;          /* virtual function table length        */
+       s4          interfacetablelength; /* interface table length               */   
 
-       s4          vftbllength;      /* L"aenge der Virtual Function Table */
+       s4          lowclassval;          /* low value for relative numbering     */   
+       s4          highclassval;         /* high value for relative numbering    */   
 
-       s4          interfacetablelength;   /* L"ange der Interfacetable */   
-       u4         *interfacevftbllength;   /* -> siehe unten */   
+       u4         *interfacevftbllength; /* see description below                */   
        methodptr **interfacevftbl;
        
        methodptr   table[1];
-       };
+};
 
 /*********** Anmerkungen zur Interfacetable: 
 
@@ -494,7 +498,7 @@ struct vftbl {
 
 
 
-/************************* Referenzen auf die wichtigen Systemklassen ********************/
+/********************** references to some system classes  ********************/
 
 extern classinfo *class_java_lang_Object;
 extern classinfo *class_java_lang_String;
@@ -505,12 +509,12 @@ extern classinfo *class_java_lang_NegativeArraySizeException;
 extern classinfo *class_java_lang_OutOfMemoryError;
 extern classinfo *class_java_lang_ArithmeticException;
 extern classinfo *class_java_lang_ArrayStoreException;
-extern classinfo *class_java_lang_ThreadDeath;              /* schani */
+extern classinfo *class_java_lang_ThreadDeath;
  
 extern classinfo *class_array;
 
 
-/********************** Vorgefertigte Instanzen einiger Systemklassen ********************/
+/********************** instances of some system classes **********************/
 
 extern java_objectheader *proto_java_lang_ClassCastException;
 extern java_objectheader *proto_java_lang_NullPointerException;
@@ -519,17 +523,17 @@ extern java_objectheader *proto_java_lang_NegativeArraySizeException;
 extern java_objectheader *proto_java_lang_OutOfMemoryError;
 extern java_objectheader *proto_java_lang_ArithmeticException;
 extern java_objectheader *proto_java_lang_ArrayStoreException;
-extern java_objectheader *proto_java_lang_ThreadDeath;      /* schani */
+extern java_objectheader *proto_java_lang_ThreadDeath;
 
 
-/********************** flag variables *********************/
+/******************************* flag variables *******************************/
 
 extern bool compileall;
 extern bool runverbose;         
 extern bool verbose;         
                                 
 
-/********************** trace variables ********************/
+/******************************* trace variables ******************************/
 
 extern int count_class_infos;
 extern int count_const_pool_len;
@@ -540,3 +544,17 @@ extern int count_vmcode_len;
 extern int count_extable_len;
 
 #endif
+
+
+/*
+ * These are local overrides for various environment variables in Emacs.
+ * Please do not remove this and leave it at the end of the file, where
+ * Emacs will automagically detect them.
+ * ---------------------------------------------------------------------
+ * Local variables:
+ * mode: c
+ * indent-tabs-mode: t
+ * c-basic-offset: 4
+ * tab-width: 4
+ * End:
+ */