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>
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 */
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).
-/***************** Die Datenstrukturen fuer das Laufzeitsystem ***************/
+/***************** Die Datenstrukturen fuer das Laufzeitsystem ****************/
/********* 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)
#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 */
- /** 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;
} 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 */
} 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 !!!! */
-/************** 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:
-/************************* Referenzen auf die wichtigen Systemklassen ********************/
+/********************** references to some system classes ********************/
extern classinfo *class_java_lang_Object;
extern classinfo *class_java_lang_String;
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;
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;
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:
+ */