[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