[vmkit-commits] [vmkit] r71653 - in /vmkit/trunk: include/jnjvm/ lib/JnJVM/Classpath/ lib/JnJVM/Compiler/ lib/JnJVM/VMCore/
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Wed May 13 05:49:54 PDT 2009
Author: geoffray
Date: Wed May 13 07:49:51 2009
New Revision: 71653
URL: http://llvm.org/viewvc/llvm-project?rev=71653&view=rev
Log:
Code cleanup: make it explicit that Strings hold GC-objects and
not UTF8s. UTF8s are allocated by class loaders.
Modified:
vmkit/trunk/include/jnjvm/JnjvmModule.h
vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp
vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp
vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp
vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp
vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaArray.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h
vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp
vmkit/trunk/lib/JnJVM/VMCore/JavaString.h
vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h
Modified: vmkit/trunk/include/jnjvm/JnjvmModule.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/jnjvm/JnjvmModule.h?rev=71653&r1=71652&r2=71653&view=diff
==============================================================================
--- vmkit/trunk/include/jnjvm/JnjvmModule.h (original)
+++ vmkit/trunk/include/jnjvm/JnjvmModule.h Wed May 13 07:49:51 2009
@@ -33,6 +33,7 @@
namespace jnjvm {
+class ArrayUInt16;
class Attribut;
class CacheNode;
class CommonClass;
@@ -570,7 +571,6 @@
//--------------- Static compiler specific functions -----------------------//
llvm::Constant* CreateConstantFromVT(JavaVirtualTable* VT);
- llvm::Constant* CreateConstantFromUTF8(const UTF8* val);
llvm::Constant* CreateConstantFromEnveloppe(Enveloppe* val);
llvm::Constant* CreateConstantFromCacheNode(CacheNode* CN);
llvm::Constant* CreateConstantFromCommonClass(CommonClass* cl);
@@ -585,10 +585,10 @@
llvm::Constant* CreateConstantFromJavaClass(CommonClass* cl);
llvm::Constant* CreateConstantForBaseObject(CommonClass* cl);
llvm::Constant* CreateConstantFromJavaObject(JavaObject* obj);
- llvm::Constant* getUTF8(const UTF8* val);
+ llvm::Constant* getArrayUInt16(const ArrayUInt16* val);
template<typename T>
- llvm::Constant* CreateConstantFromArray(T* val, const llvm::Type* Ty);
+ llvm::Constant* CreateConstantFromArray(const T* val, const llvm::Type* Ty);
std::map<const CommonClass*, llvm::Constant*> nativeClasses;
std::map<const ClassArray*, llvm::GlobalVariable*> arrayClasses;
@@ -599,7 +599,7 @@
std::map<const JavaString*, llvm::Constant*> strings;
std::map<const Enveloppe*, llvm::Constant*> enveloppes;
std::map<const JavaMethod*, llvm::Constant*> nativeFunctions;
- std::map<const UTF8*, llvm::Constant*> utf8s;
+ std::map<const ArrayUInt16*, llvm::Constant*> utf8s;
std::map<const Class*, llvm::Constant*> virtualMethods;
std::map<const JavaObject*, llvm::Constant*> finalObjects;
@@ -636,7 +636,7 @@
typedef std::map<const JavaMethod*, llvm::Constant*>::iterator
native_function_iterator;
- typedef std::map<const UTF8*, llvm::Constant*>::iterator
+ typedef std::map<const ArrayUInt16*, llvm::Constant*>::iterator
utf8_iterator;
#ifdef SERVICE
Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp?rev=71653&r1=71652&r2=71653&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathConstructor.cpp Wed May 13 07:49:51 2009
@@ -185,7 +185,7 @@
verifyNull(Meth);
JavaMethod* meth = Meth->getInternalMethod();
Jnjvm* vm = JavaThread::get()->getJVM();
- result = (jobject)(vm->UTF8ToStr(meth->type));
+ result = (jobject)(vm->internalUTF8ToStr(meth->type));
END_NATIVE_EXCEPTION
Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp?rev=71653&r1=71652&r2=71653&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathMethod.cpp Wed May 13 07:49:51 2009
@@ -274,7 +274,7 @@
verifyNull(Meth);
JavaMethod* meth = Meth->getInternalMethod();
Jnjvm* vm = JavaThread::get()->getJVM();
- result = (jobject)(vm->UTF8ToStr(meth->type));
+ result = (jobject)(vm->internalUTF8ToStr(meth->type));
END_NATIVE_EXCEPTION
Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp?rev=71653&r1=71652&r2=71653&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMClassLoader.cpp Wed May 13 07:49:51 2009
@@ -130,8 +130,7 @@
JnjvmClassLoader::getJnjvmLoaderFromJavaObject((JavaObject*)loader, vm);
JavaString* str = (JavaString*)_str;
- const UTF8* name = str->value->javaToInternal(JCL->hashUTF8, str->offset,
- str->count);
+ const UTF8* name = str->javaToInternal(JCL->hashUTF8);
UserCommonClass* cl = JCL->lookupClass(name);
if (!cl) {
Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp?rev=71653&r1=71652&r2=71653&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMRuntime.cpp Wed May 13 07:49:51 2009
@@ -43,7 +43,7 @@
JavaString* strLib = (JavaString*)_strLib;
Jnjvm* vm = JavaThread::get()->getJVM();
- const UTF8* utf8Lib = strLib->value;
+ const ArrayUInt16* utf8Lib = strLib->value;
uint32 stLib = strLib->offset;
sint32 lgLib = strLib->count;
sint32 lgPre = vm->bootstrapLoader->prelib->size;
@@ -60,7 +60,7 @@
memmove(&(elements[lgPre + lgLib]), vm->bootstrapLoader->postlib->elements,
lgPost * sizeof(uint16));
- res = (jobject)(vm->UTF8ToStr((const UTF8*)array));
+ res = (jobject)(vm->constructString(array));
END_NATIVE_EXCEPTION
Modified: vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp?rev=71653&r1=71652&r2=71653&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Compiler/JavaAOTCompiler.cpp Wed May 13 07:49:51 2009
@@ -511,7 +511,7 @@
Elmts.push_back(CreateConstantForBaseObject(cl));
- Constant* Array = getUTF8(str->value);
+ Constant* Array = getArrayUInt16(str->value);
Constant* ObjGEPs[2] = { JnjvmModule::constantZero,
JnjvmModule::constantZero };
Array = ConstantExpr::getGetElementPtr(Array, ObjGEPs, 2);
@@ -551,8 +551,8 @@
Elmts.push_back(new GlobalVariable(CNTy, false,
GlobalValue::InternalLinkage,
firstCache, "", getLLVMModule()));
- Elmts.push_back(getUTF8(val->methodName));
- Elmts.push_back(getUTF8(val->methodSign));
+ Elmts.push_back(getArrayUInt16(val->methodName));
+ Elmts.push_back(getArrayUInt16(val->methodSign));
Elmts.push_back(Constant::getNullValue(Type::Int8Ty));
Elmts.push_back(getNativeClass(val->classDef));
@@ -570,7 +570,7 @@
std::vector<Constant*> Elmts;
// name
- Elmts.push_back(getUTF8(attribut.name));
+ Elmts.push_back(getArrayUInt16(attribut.name));
// start
Elmts.push_back(ConstantInt::get(Type::Int32Ty, attribut.start));
@@ -623,7 +623,7 @@
CommonClassElts.push_back(ConstantInt::get(Type::Int16Ty, cl->nbInterfaces));
// name
- CommonClassElts.push_back(getUTF8(cl->name));
+ CommonClassElts.push_back(getArrayUInt16(cl->name));
// super
if (cl->super) {
@@ -663,10 +663,10 @@
FieldElts.push_back(ConstantInt::get(Type::Int16Ty, field.access));
// name
- FieldElts.push_back(getUTF8(field.name));
+ FieldElts.push_back(getArrayUInt16(field.name));
// type
- FieldElts.push_back(getUTF8(field.type));
+ FieldElts.push_back(getArrayUInt16(field.type));
// attributs
if (field.nbAttributs) {
@@ -754,10 +754,10 @@
MethodElts.push_back(getNativeClass(method.classDef));
// name
- MethodElts.push_back(getUTF8(method.name));
+ MethodElts.push_back(getArrayUInt16(method.name));
// type
- MethodElts.push_back(getUTF8(method.type));
+ MethodElts.push_back(getArrayUInt16(method.type));
// canBeInlined
MethodElts.push_back(ConstantInt::get(Type::Int8Ty, method.canBeInlined));
@@ -1044,7 +1044,7 @@
}
template<typename T>
-Constant* JavaAOTCompiler::CreateConstantFromArray(T* val, const Type* Ty) {
+Constant* JavaAOTCompiler::CreateConstantFromArray(const T* val, const Type* Ty) {
std::vector<const Type*> Elemts;
const ArrayType* ATy = ArrayType::get(Ty, val->size);
Elemts.push_back(JnjvmModule::JavaObjectType->getContainedType(0));
@@ -1074,37 +1074,12 @@
return ConstantStruct::get(STy, Cts);
}
-Constant* JavaAOTCompiler::CreateConstantFromUTF8(const UTF8* val) {
- std::vector<const Type*> Elemts;
- const ArrayType* ATy = ArrayType::get(Type::Int16Ty, val->size);
- Elemts.push_back(JnjvmModule::JavaObjectType->getContainedType(0));
- Elemts.push_back(JnjvmModule::pointerSizeType);
-
- Elemts.push_back(ATy);
-
- const StructType* STy = StructType::get(Elemts);
-
- std::vector<Constant*> Cts;
- CommonClass* cl = JavaThread::get()->getJVM()->upcalls->ArrayOfChar;
- Cts.push_back(CreateConstantForBaseObject(cl));
- Cts.push_back(ConstantInt::get(JnjvmModule::pointerSizeType, val->size));
-
- std::vector<Constant*> Vals;
- for (sint32 i = 0; i < val->size; ++i) {
- Vals.push_back(ConstantInt::get(Type::Int16Ty, val->elements[i]));
- }
-
- Cts.push_back(ConstantArray::get(ATy, Vals));
-
- return ConstantStruct::get(STy, Cts);
-
-}
-
-Constant* JavaAOTCompiler::getUTF8(const UTF8* val) {
+Constant* JavaAOTCompiler::getArrayUInt16(const ArrayUInt16* val) {
utf8_iterator End = utf8s.end();
utf8_iterator I = utf8s.find(val);
if (I == End) {
- Constant* C = CreateConstantFromUTF8(val);
+ Constant* C = CreateConstantFromArray<ArrayUInt16>(val, Type::Int16Ty);
+
GlobalVariable* varGV = new GlobalVariable(C->getType(), true,
GlobalValue::InternalLinkage,
C, "", getLLVMModule());
@@ -1414,7 +1389,7 @@
e = arrayClasses.end(); i != e; ++i) {
Args[0] = loader;
Args[1] = i->second;
- Args[2] = getUTF8(i->first->name);
+ Args[2] = getArrayUInt16(i->first->name);
CallInst::Create(GetClassArray, Args, Args + 3, "", currentBlock);
}
@@ -1626,7 +1601,7 @@
// Also do not allow inling of some functions.
#define SET_INLINE(NAME) { \
- const UTF8* name = vm->asciizToUTF8(NAME); \
+ const UTF8* name = bootstrapLoader->asciizConstructUTF8(NAME); \
Class* cl = (Class*)bootstrapLoader->lookupClass(name); \
if (cl) M->setNoInline(cl); }
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaArray.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaArray.cpp?rev=71653&r1=71652&r2=71653&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaArray.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaArray.cpp Wed May 13 07:49:51 2009
@@ -44,19 +44,6 @@
return printUTF8(buf);
}
-const UTF8* UTF8::javaToInternal(UTF8Map* map, unsigned int start,
- unsigned int len) const {
- uint16* java = (uint16*)alloca(sizeof(uint16) * len);
-
- for (uint32 i = 0; i < len; ++i) {
- uint16 cur = elements[start + i];
- if (cur == '.') java[i] = '/';
- else java[i] = cur;
- }
-
- return map->lookupOrCreateReader(java, len);
-}
-
const UTF8* UTF8::extract(UTF8Map* map, uint32 start, uint32 end) const {
uint32 len = end - start;
uint16* buf = (uint16*)alloca(sizeof(uint16) * len);
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h?rev=71653&r1=71652&r2=71653&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h Wed May 13 07:49:51 2009
@@ -122,10 +122,6 @@
mvm::BumpPtrAllocator& allocator);
public:
-
- /// javaToInternal - Replaces all '/' into '.'.
- const UTF8* javaToInternal(UTF8Map* map, unsigned int start,
- unsigned int len) const;
/// extract - Similar, but creates it in the map.
const UTF8* extract(UTF8Map* map, uint32 start, uint32 len) const;
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp?rev=71653&r1=71652&r2=71653&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaString.cpp Wed May 13 07:49:51 2009
@@ -19,7 +19,7 @@
JavaVirtualTable* JavaString::internStringVT = 0;
-JavaString* JavaString::stringDup(const UTF8*& utf8, Jnjvm* vm) {
+JavaString* JavaString::stringDup(const ArrayUInt16*& array, Jnjvm* vm) {
UserClass* cl = vm->upcalls->newString;
JavaString* res = (JavaString*)cl->doNew(vm);
@@ -30,8 +30,8 @@
// No need to call the Java function: both the Java function and
// this function do the same thing.
- res->value = utf8;
- res->count = utf8->size;
+ res->value = array;
+ res->count = array->size;
res->offset = 0;
res->cachedHashCode = 0;
return res;
@@ -46,19 +46,19 @@
return buf->cString();
}
-const UTF8* JavaString::strToUTF8(Jnjvm* vm) {
- const UTF8* utf8 = this->value;
- assert(utf8 && "String without an UTF8?");
- if (offset || (count != utf8->size)) {
- UTF8* array = (UTF8*) vm->upcalls->ArrayOfChar->doNew(count, vm);
+const ArrayUInt16* JavaString::strToArray(Jnjvm* vm) {
+ assert(value && "String without an array?");
+ if (offset || (count != value->size)) {
+ ArrayUInt16* array =
+ (ArrayUInt16*)vm->upcalls->ArrayOfChar->doNew(count, vm);
uint16* buf = array->elements;
for (sint32 i = 0; i < count; i++) {
buf[i] = value->elements[i + offset];
}
- return (const UTF8*)array;
+ return array;
} else {
- return utf8;
+ return value;
}
}
@@ -69,7 +69,9 @@
}
JavaString* JavaString::internalToJava(const UTF8* name, Jnjvm* vm) {
- UTF8* array = (UTF8*)vm->upcalls->ArrayOfChar->doNew(name->size, vm);
+ ArrayUInt16* array =
+ (ArrayUInt16*)vm->upcalls->ArrayOfChar->doNew(name->size, vm);
+
uint16* java = array->elements;
for (sint32 i = 0; i < name->size; i++) {
uint16 cur = name->elements[i];
@@ -77,5 +79,17 @@
else java[i] = cur;
}
- return vm->UTF8ToStr(array);
+ return vm->constructString(array);
+}
+
+const UTF8* JavaString::javaToInternal(UTF8Map* map) const {
+ uint16* java = (uint16*)alloca(sizeof(uint16) * count);
+
+ for (sint32 i = 0; i < count; ++i) {
+ uint16 cur = value->elements[offset + i];
+ if (cur == '.') java[i] = '/';
+ else java[i] = cur;
+ }
+
+ return map->lookupOrCreateReader(java, count);
}
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaString.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaString.h?rev=71653&r1=71652&r2=71653&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaString.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaString.h Wed May 13 07:49:51 2009
@@ -16,18 +16,19 @@
namespace jnjvm {
+class ArrayUInt16;
class Jnjvm;
class JavaString : public JavaObject {
public:
// CLASSPATH FIELDS!!
- const UTF8* value;
+ const ArrayUInt16* value;
sint32 count;
sint32 cachedHashCode;
sint32 offset;
- static JavaString* stringDup(const UTF8*& utf8, Jnjvm* vm);
+ static JavaString* stringDup(const ArrayUInt16*& array, Jnjvm* vm);
/// internalToJava - Creates a copy of the UTF8 at its given offset and size
/// with all its '.' replaced by '/'. The JVM bytecode reference classes in
@@ -38,7 +39,10 @@
static void stringDestructor(JavaString*);
char* strToAsciiz();
- const UTF8* strToUTF8(Jnjvm* vm);
+ const ArrayUInt16* strToArray(Jnjvm* vm);
+
+ /// javaToInternal - Replaces all '/' into '.'.
+ const UTF8* javaToInternal(UTF8Map* map) const;
static JavaVirtualTable* internStringVT;
};
Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp?rev=71653&r1=71652&r2=71653&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaUpcalls.cpp Wed May 13 07:49:51 2009
@@ -250,8 +250,8 @@
extern "C" JavaString* nativeInternString(JavaString* obj) {
Jnjvm* vm = JavaThread::get()->getJVM();
- const UTF8* utf8 = obj->strToUTF8(vm);
- return vm->UTF8ToStr(utf8);
+ const ArrayUInt16* array = obj->strToArray(vm);
+ return vm->constructString(array);
}
extern "C" uint8 nativeIsArray(JavaObject* klass) {
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp?rev=71653&r1=71652&r2=71653&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Wed May 13 07:49:51 2009
@@ -473,27 +473,27 @@
JavaString* res = hashStr.lookup(utf8);
if (!res) {
uint32 size = utf8->size;
- UTF8* tmp = (UTF8*)upcalls->ArrayOfChar->doNew(size, this);
+ ArrayUInt16* tmp = (ArrayUInt16*)upcalls->ArrayOfChar->doNew(size, this);
uint16* buf = tmp->elements;
for (uint32 i = 0; i < size; i++) {
buf[i] = utf8->elements[i];
}
- const UTF8* newUTF8 = (const UTF8*)tmp;
- res = hashStr.lookupOrCreate(newUTF8, this, JavaString::stringDup);
+ res = hashStr.lookupOrCreate((const ArrayUInt16*&)tmp, this,
+ JavaString::stringDup);
}
return res;
}
-JavaString* Jnjvm::UTF8ToStr(const UTF8* utf8) {
- JavaString* res = hashStr.lookupOrCreate(utf8, this, JavaString::stringDup);
+JavaString* Jnjvm::constructString(const ArrayUInt16* array) {
+ JavaString* res = hashStr.lookupOrCreate(array, this, JavaString::stringDup);
return res;
}
JavaString* Jnjvm::asciizToStr(const char* asciiz) {
- const UTF8* var = asciizToUTF8(asciiz);
- return UTF8ToStr(var);
+ ArrayUInt16* var = asciizToArray(asciiz);
+ return constructString(var);
}
void Jnjvm::addProperty(char* key, char* value) {
@@ -1112,15 +1112,15 @@
}
-const UTF8* Jnjvm::asciizToUTF8(const char* asciiz) {
+ArrayUInt16* Jnjvm::asciizToArray(const char* asciiz) {
uint32 size = strlen(asciiz);
- UTF8* tmp = (UTF8*)upcalls->ArrayOfChar->doNew(size, this);
+ ArrayUInt16* tmp = (ArrayUInt16*)upcalls->ArrayOfChar->doNew(size, this);
uint16* buf = tmp->elements;
for (uint32 i = 0; i < size; i++) {
buf[i] = asciiz[i];
}
- return (const UTF8*)tmp;
+ return tmp;
}
void Jnjvm::removeMethodsInFunctionMap(JnjvmClassLoader* loader) {
Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h?rev=71653&r1=71652&r2=71653&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Wed May 13 07:49:51 2009
@@ -284,7 +284,7 @@
/// UTF8ToStr - Constructs a java/lang/String object from the given UTF8.
///
- JavaString* UTF8ToStr(const UTF8* utf8);
+ JavaString* constructString(const ArrayUInt16* array);
/// UTF8ToStr - Constructs a java/lang/String object from the given internal
/// UTF8, thus duplicating the UTF8.
@@ -298,7 +298,7 @@
/// asciizToUTF8 - Constructs an UTF8 out of the asciiz.
///
- const UTF8* asciizToUTF8(const char* asciiz);
+ ArrayUInt16* asciizToArray(const char* asciiz);
/// setBootstrapThread - Set the bootstrap thread of this VM.
///
Modified: vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp?rev=71653&r1=71652&r2=71653&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Wed May 13 07:49:51 2009
@@ -499,7 +499,16 @@
bool doThrow) {
const UTF8* name = hashUTF8->lookupAsciiz(asciiz);
if (!name) name = bootstrapLoader->hashUTF8->lookupAsciiz(asciiz);
- if (!name) name = isolate->asciizToUTF8(asciiz);
+ if (!name) {
+ uint32 size = strlen(asciiz);
+ UTF8* temp = (UTF8*)alloca(sizeof(UTF8) + size * sizeof(uint16));
+ if (!temp) return 0;
+
+ for (uint32 i = 0; i < size; ++i) {
+ temp->elements[i] = asciiz[i];
+ }
+ name = temp;
+ }
UserCommonClass* temp = lookupClass(name);
if (temp) return temp;
Modified: vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h?rev=71653&r1=71652&r2=71653&view=diff
==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h Wed May 13 07:49:51 2009
@@ -44,6 +44,14 @@
}
};
+struct ltarray16
+{
+ bool operator()(const ArrayUInt16* s1, const ArrayUInt16* s2) const
+ {
+ return ((UTF8*)s1)->lessThan((UTF8*)s2);
+ }
+};
+
template<class Key, class Container, class Compare, class Meta, class TLock>
class LockedMap : public mvm::PermanentObject {
public:
@@ -149,7 +157,8 @@
};
class StringMap :
- public LockedMap<const UTF8*, JavaString*, ltutf8, Jnjvm*, mvm::LockNormal> {
+ public LockedMap<const ArrayUInt16*, JavaString*, ltarray16, Jnjvm*,
+ mvm::LockNormal> {
public:
void insert(JavaString* str);
More information about the vmkit-commits
mailing list