[vmkit-commits] [vmkit] r180440 - Adding some llvm_gcroot
Peter Senna Tschudin
peter.senna at gmail.com
Thu Apr 25 10:11:25 PDT 2013
Author: peter.senna
Date: Thu Apr 25 12:09:52 2013
New Revision: 180440
URL: http://llvm.org/viewvc/llvm-project?rev=180440&view=rev
Log:
Adding some llvm_gcroot
(cherry picked from commit e766cefadcb45b28e1a0f6f0a9537737611b6458)
Modified:
vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
Modified: vmkit/trunk/lib/j3/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaClass.cpp?rev=180440&r1=180439&r2=180440&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaClass.cpp Thu Apr 25 12:09:52 2013
@@ -1913,6 +1913,7 @@ JavaObject* AnnotationReader::createElem
}
void AnnotationReader::fillArray(JavaObject* res, int numValues, UserClassArray* classArray) {
+ llvm_gcroot(res, 0);
JavaString* str = 0;
JavaObject* clazzObject = 0;
JavaObject* field = 0;
@@ -1920,7 +1921,17 @@ void AnnotationReader::fillArray(JavaObj
JavaObject* myEnum = 0;
JavaObject* annotationClass = 0;
JavaObject* newHashMap = 0;
- llvm_gcroot(res, 0);
+
+ // for cast
+ ArraySInt8* aSInt8 = 0;
+ ArrayUInt8* aUInt8 = 0;
+ ArraySInt16* aSInt16 = 0;
+ ArraySInt32* aSInt32 = 0;
+ ArrayLong* aSLong = 0;
+ ArrayDouble* aDouble = 0;
+ ArrayFloat* aFloat = 0;
+ ArrayObject* aObject = 0;
+
llvm_gcroot(str, 0);
llvm_gcroot(clazzObject, 0);
llvm_gcroot(clazzLoaded, 0);
@@ -1928,8 +1939,14 @@ void AnnotationReader::fillArray(JavaObj
llvm_gcroot(myEnum, 0);
llvm_gcroot(annotationClass, 0);
llvm_gcroot(newHashMap, 0);
-
- // FIXME : Do something with all casts
+ llvm_gcroot(aSInt8, 0);
+ llvm_gcroot(aUInt8, 0);
+ llvm_gcroot(aSInt16, 0);
+ llvm_gcroot(aSInt32, 0);
+ llvm_gcroot(aSLong, 0);
+ llvm_gcroot(aDouble, 0);
+ llvm_gcroot(aFloat, 0);
+ llvm_gcroot(aObject, 0);
sint32 valS;
uint32 valU;
@@ -1939,8 +1956,6 @@ void AnnotationReader::fillArray(JavaObj
const UTF8* s = 0, *n = 0, * m = 0;
JnjvmClassLoader* JCL;
UserCommonClass* clLoaded;
- UserCommonClass* uss;
- UserClassArray* arrayClass;
UserCommonClass* aaa;
UserClassArray* array = 0;
@@ -1951,40 +1966,49 @@ void AnnotationReader::fillArray(JavaObj
switch (tag) {
case 'B':
valS = cl->ctpInfo->IntegerAt(reader.readU2());
- ArraySInt8::setElement((ArraySInt8*)res, valS, i);
+ aSInt8 = (ArraySInt8*)res;
+ ArraySInt8::setElement(aSInt8, valS, i);
break;
case 'C':
valS = cl->ctpInfo->IntegerAt(reader.readU2());
- ArraySInt16::setElement((ArraySInt16*)res, valS, i);
+ aSInt16 = (ArraySInt16*)res;
+ ArraySInt16::setElement(aSInt16, valS, i);
break;
case 'D':
valD = cl->ctpInfo->DoubleAt(reader.readU2());
- ArrayDouble::setElement((ArrayDouble*)res, valD, i);
+ aDouble = (ArrayDouble*)res;
+ ArrayDouble::setElement(aDouble, valD, i);
break;
case 'F':
valF = cl->ctpInfo->FloatAt(reader.readU2());
- ArrayFloat::setElement((ArrayFloat*)res, valF, i);
+ aFloat = (ArrayFloat*)res;
+ ArrayFloat::setElement(aFloat, valF, i);
break;
case 'J':
val64S = cl->ctpInfo->LongAt(reader.readU2());
- ArrayLong::setElement((ArrayLong*)res, val64S, i);
+ aSLong = (ArrayLong*)res;
+ ArrayLong::setElement(aSLong, val64S, i);
break;
case 'S':
valS = cl->ctpInfo->IntegerAt(reader.readU2());
- ArraySInt16::setElement((ArraySInt16*)res, valS, i);
+ aSInt16 = (ArraySInt16*)res;
+ ArraySInt16::setElement(aSInt16, valS, i);
break;
case 'I':
valS = cl->ctpInfo->IntegerAt(reader.readU2());
- ArraySInt32::setElement((ArraySInt32*)res, valS,i);
+ aSInt32 = (ArraySInt32*)res;
+ ArraySInt32::setElement(aSInt32, valS,i);
break;
case 'Z':
valU = cl->ctpInfo->IntegerAt(reader.readU2());
- ArrayUInt8::setElement((ArrayUInt8*)res, valU, i);
+ aUInt8 = (ArrayUInt8*)res;
+ ArrayUInt8::setElement(aUInt8, valU, i);
break;
case 's':
s = cl->ctpInfo->UTF8At(reader.readU2());
str = JavaString::internalToJava(s, JavaThread::get()->getJVM());
- ArrayObject::setElement((ArrayObject *)res, str, i);
+ aObject = (ArrayObject *)res;
+ ArrayObject::setElement(aObject, str, i);
break;
case 'e':
n = cl->ctpInfo->UTF8At(reader.readU2());
@@ -2003,7 +2027,8 @@ void AnnotationReader::fillArray(JavaObj
assert(field && "Field not found");
JavaObject* obj = 0;
myEnum = upcalls->getInField->invokeJavaObjectVirtual(vm, upcalls->newField, field, &obj);
- ArrayObject::setElement((ArrayObject *)res, str, i);
+ aObject = (ArrayObject *)res;
+ ArrayObject::setElement(aObject, str, i);
} else {
str = JavaString::internalToJava(n, vm);
vm->classNotFoundException(str);
@@ -2022,7 +2047,8 @@ void AnnotationReader::fillArray(JavaObj
str = JavaString::internalToJava(s, vm);
vm->classNotFoundException(str);
}
- ArrayObject::setElement((ArrayObject *)res, clazzObject, i);
+ aObject = (ArrayObject *)res;
+ ArrayObject::setElement(aObject, clazzObject, i);
break;
case '@':
reader.readU2();
@@ -2030,8 +2056,8 @@ void AnnotationReader::fillArray(JavaObj
annotationClass = aaa->getDelegatee();
newHashMap = createAnnotationMapValues(annotationClass);
clazzObject = upcalls->createAnnotation->invokeJavaObjectStatic(vm, upcalls->newAnnotationHandler, &annotationClass, &newHashMap);
-
- ArrayObject::setElement((ArrayObject *)res, clazzObject, i);
+ aObject = (ArrayObject *)res;
+ ArrayObject::setElement(aObject, clazzObject, i);
break;
default:
fprintf(stderr, "Wrong class file\n");
More information about the vmkit-commits
mailing list