blob: 8a88e852a0039f6b9460ed4ad5e6e6901529fd11 [file] [log] [blame]
//===------ ClasspathReflect.h - GNU classpath definitions of ----------------//
// java/lang/Class, java/lang/reflect/Field, java/lang/reflect/Method and ----//
// java/lang/reflect/Constructor as compiled by JnJVM. -----------------------//
//
// JnJVM
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef JNJVM_CLASSPATH_REFLECT_H
#define JNJVM_CLASSPATH_REFLECT_H
#include "MvmGC.h"
#include <JavaClass.h>
#include <JavaObject.h>
namespace jnjvm {
class JavaObjectClass : public JavaObject {
private:
JavaObject* signers;
JavaObject* pd;
UserCommonClass* vmdata;
JavaObject* constructor;
public:
UserCommonClass* getClass() {
return vmdata;
}
static void STATIC_TRACER(JavaObjectClass) {
obj->JavaObject::CALL_TRACER;
obj->pd->MARK_AND_TRACE;
obj->signers->MARK_AND_TRACE;
obj->constructor->MARK_AND_TRACE;
if (obj->vmdata) obj->vmdata->classLoader->MARK_AND_TRACE;
}
};
class JavaObjectField : public JavaObject {
private:
uint8 flag;
JavaObject* declaringClass;
JavaObject* name;
JavaField* slot;
public:
static void STATIC_TRACER(JavaObjectField) {
obj->JavaObject::CALL_TRACER;
obj->name->MARK_AND_TRACE;
obj->declaringClass->MARK_AND_TRACE;
// No need to see if classDef != NULL, it must be.
if (obj->slot) obj->slot->classDef->classLoader->MARK_AND_TRACE;
}
};
class JavaObjectMethod : public JavaObject {
private:
uint8 flag;
JavaObject* declaringClass;
JavaObject* name;
JavaMethod* slot;
public:
static void STATIC_TRACER(JavaObjectMethod) {
obj->JavaObject::CALL_TRACER;
obj->name->MARK_AND_TRACE;
obj->declaringClass->MARK_AND_TRACE;
if (obj->slot) obj->slot->classDef->classLoader->MARK_AND_TRACE;
}
};
class JavaObjectConstructor : public JavaObject {
private:
uint8 flag;
JavaObject* clazz;
JavaMethod* slot;
public:
static void STATIC_TRACER(JavaObjectConstructor) {
obj->JavaObject::CALL_TRACER;
obj->clazz->MARK_AND_TRACE;
if (obj->slot) obj->slot->classDef->classLoader->MARK_AND_TRACE;
}
};
}
#endif