[vmkit-commits] [vmkit] r105623 - in /vmkit/trunk/lib/J3/VMCore: JavaClass.cpp JavaClass.h Jnjvm.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Tue Jun 8 10:57:59 PDT 2010
Author: geoffray
Date: Tue Jun 8 12:57:59 2010
New Revision: 105623
URL: http://llvm.org/viewvc/llvm-project?rev=105623&view=rev
Log:
Rename InitField to InitStaticField, as it should only be used for static fields.
Modified:
vmkit/trunk/lib/J3/VMCore/JavaClass.cpp
vmkit/trunk/lib/J3/VMCore/JavaClass.h
vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp
Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.cpp?rev=105623&r1=105622&r2=105623&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaClass.cpp Tue Jun 8 12:57:59 2010
@@ -545,16 +545,43 @@
return false;
}
-void JavaField::InitField(void* obj, uint64 val) {
+void JavaField::InitNullStaticField() {
Typedef* type = getSignature();
+ void* obj = classDef->getStaticInstance();
if (!type->isPrimitive()) {
- ((JavaObject**)((uint64)obj + ptrOffset))[0] = (JavaObject*)val;
+ ((JavaObject**)((uint64)obj + ptrOffset))[0] = NULL;
return;
}
PrimitiveTypedef* prim = (PrimitiveTypedef*)type;
if (prim->isLong()) {
+ ((sint64*)((uint64)obj + ptrOffset))[0] = 0;
+ } else if (prim->isInt()) {
+ ((sint32*)((uint64)obj + ptrOffset))[0] = 0;
+ } else if (prim->isChar()) {
+ ((uint16*)((uint64)obj + ptrOffset))[0] = 0;
+ } else if (prim->isShort()) {
+ ((sint16*)((uint64)obj + ptrOffset))[0] = 0;
+ } else if (prim->isByte()) {
+ ((sint8*)((uint64)obj + ptrOffset))[0] = 0;
+ } else if (prim->isBool()) {
+ ((uint8*)((uint64)obj + ptrOffset))[0] = 0;
+ } else if (prim->isDouble()) {
+ ((double*)((uint64)obj + ptrOffset))[0] = 0.0;
+ } else if (prim->isFloat()) {
+ ((float*)((uint64)obj + ptrOffset))[0] = 0.0;
+ } else {
+ abort();
+ }
+}
+
+void JavaField::InitStaticField(uint64 val) {
+ Typedef* type = getSignature();
+ void* obj = classDef->getStaticInstance();
+ assert(type->isPrimitive() && "Non primitive field");
+ PrimitiveTypedef* prim = (PrimitiveTypedef*)type;
+ if (prim->isLong()) {
((sint64*)((uint64)obj + ptrOffset))[0] = val;
} else if (prim->isInt()) {
((sint32*)((uint64)obj + ptrOffset))[0] = (sint32)val;
@@ -567,29 +594,33 @@
} else if (prim->isBool()) {
((uint8*)((uint64)obj + ptrOffset))[0] = (uint8)val;
} else {
- // 0 value for everything else
- ((sint32*)((uint64)obj + ptrOffset))[0] = (sint32)val;
+ // Should never be here.
+ abort();
}
}
-void JavaField::InitField(void* obj, JavaObject* val) {
+void JavaField::InitStaticField(JavaObject* val) {
+ llvm_gcroot(val, 0);
+ void* obj = classDef->getStaticInstance();
((JavaObject**)((uint64)obj + ptrOffset))[0] = val;
}
-void JavaField::InitField(void* obj, double val) {
+void JavaField::InitStaticField(double val) {
+ void* obj = classDef->getStaticInstance();
((double*)((uint64)obj + ptrOffset))[0] = val;
}
-void JavaField::InitField(void* obj, float val) {
+void JavaField::InitStaticField(float val) {
+ void* obj = classDef->getStaticInstance();
((float*)((uint64)obj + ptrOffset))[0] = val;
}
-void JavaField::initField(void* obj, Jnjvm* vm) {
+void JavaField::InitStaticField(Jnjvm* vm) {
const Typedef* type = getSignature();
Attribut* attribut = lookupAttribut(Attribut::constantAttribut);
if (!attribut) {
- InitField(obj);
+ InitNullStaticField();
} else {
Reader reader(attribut, &(classDef->bytes));
JavaConstantPool * ctpInfo = classDef->ctpInfo;
@@ -597,17 +628,17 @@
if (type->isPrimitive()) {
UserCommonClass* cl = type->assocClass(vm->bootstrapLoader);
if (cl == vm->upcalls->OfLong) {
- InitField(obj, (uint64)ctpInfo->LongAt(idx));
+ InitStaticField((uint64)ctpInfo->LongAt(idx));
} else if (cl == vm->upcalls->OfDouble) {
- InitField(obj, ctpInfo->DoubleAt(idx));
+ InitStaticField(ctpInfo->DoubleAt(idx));
} else if (cl == vm->upcalls->OfFloat) {
- InitField(obj, ctpInfo->FloatAt(idx));
+ InitStaticField(ctpInfo->FloatAt(idx));
} else {
- InitField(obj, (uint64)ctpInfo->IntegerAt(idx));
+ InitStaticField((uint64)ctpInfo->IntegerAt(idx));
}
} else if (type->isReference()){
const UTF8* utf8 = ctpInfo->UTF8At(ctpInfo->ctpDef[idx]);
- InitField(obj, (JavaObject*)ctpInfo->resolveString(utf8, idx));
+ InitStaticField((JavaObject*)ctpInfo->resolveString(utf8, idx));
} else {
fprintf(stderr, "I haven't verified your class file and it's malformed:"
" unknown constant %s!\n",
Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.h?rev=105623&r1=105622&r2=105623&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaClass.h Tue Jun 8 12:57:59 2010
@@ -1270,12 +1270,13 @@
///
Typedef* _signature;
- /// InitField - Set an initial value to the field of an object.
+ /// InitField - Set an initial value to the field.
///
- void InitField(void* obj, uint64 val = 0);
- void InitField(void* obj, JavaObject* val);
- void InitField(void* obj, double val);
- void InitField(void* obj, float val);
+ void InitStaticField(uint64 val);
+ void InitStaticField(JavaObject* val);
+ void InitStaticField(double val);
+ void InitStaticField(float val);
+ void InitNullStaticField();
public:
@@ -1329,10 +1330,10 @@
return _signature;
}
- /// initField - Init the value of the field in the given object. This is
+ /// InitStaticField - Init the value of the field in the given object. This is
/// used for static fields which have a default value.
///
- void initField(void* obj, Jnjvm* vm);
+ void InitStaticField(Jnjvm* vm);
/// lookupAttribut - Look up the attribut in the field's list of attributs.
///
Modified: vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp?rev=105623&r1=105622&r2=105623&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/Jnjvm.cpp Tue Jun 8 12:57:59 2010
@@ -182,7 +182,7 @@
JavaField* fields = cl->getStaticFields();
void* val = cl->getStaticInstance();
for (uint32 i = 0; i < cl->nbStaticFields; ++i) {
- fields[i].initField(val, vm);
+ fields[i].InitStaticField(vm);
}
}
More information about the vmkit-commits
mailing list