#endif
#include "asmpart.h"
+#ifdef USE_BOEHM
+#include "toolbox/memory.h"
+#endif
+
#include "threads/thread.h"
#include <sys/stat.h>
#define skip_nbytes(len) classbuf_pos+=len;
-#define suck_u1() (*++classbuf_pos)
+inline u1 suck_u1()
+{
+ return *++classbuf_pos;
+}
+inline u2 suck_u2()
+{
+ u1 a=suck_u1(), b=suck_u1();
+ return ((u2)a<<8)+(u2)b;
+}
+inline u4 suck_u4()
+{
+ u1 a=suck_u1(), b=suck_u1(), c=suck_u1(), d=suck_u1();
+ return ((u4)a<<24)+((u4)b<<16)+((u4)c<<8)+(u4)d;
+}
#define suck_s8() (s8) suck_u8()
#define suck_s2() (s2) suck_u2()
#define suck_s4() (s4) suck_u4()
#define suck_s1() (s1) suck_u1()
-#define suck_u2() (u2) ((suck_u1()<<8)+suck_u1())
-#define suck_u4() (u4) ((((u4)suck_u1())<<24)+(((u4)suck_u1())<<16)+(((u4)suck_u1())<<8)+((u4)suck_u1()))
/* get u8 from classfile data */
/******************************************************************************/
-/******************** Functionen fuer Fields **********************************/
+/************************** Functions for fields ****************************/
/******************************************************************************/
/************************ Function: field_load *********************************
- l"adt alle Informationen f"ur eine Feld einer Methode aus dem ClassFile,
- und f"ullt mit diesen Infos eine schon existierende 'fieldinfo'-Struktur.
- Bei 'static'-Fields wird auch noch ein Platz auf dem Datensegment
- reserviert.
+ Load everything about a class field from the class file and fill a
+ 'fieldinfo' structure. For static fields, space in the data segment is
+ allocated.
*******************************************************************************/
}
-/************** Function: field_display (nur zu Debug-Zwecken) ****************/
+/**************** Function: field_display (debugging only) ********************/
static void field_display (fieldinfo *f)
{
if (c->innerclasscount)
MFREE (c->innerclass, innerclassinfo, c->innerclasscount);
+ if (c->classvftbl)
+ mem_free(c->header.vftbl, sizeof(vftbl) + sizeof(methodptr)*(c->vftbl->vftbllength-1));
+
FREE (c, classinfo);
}