[vmkit-commits] [vmkit] r197893 - classAt is now able to find array classes

Gael Thomas gael.thomas at lip6.fr
Sun Dec 22 13:28:29 PST 2013


Author: gthomas
Date: Sun Dec 22 15:28:29 2013
New Revision: 197893

URL: http://llvm.org/viewvc/llvm-project?rev=197893&view=rev
Log:
classAt is now able to find array classes

Modified:
    vmkit/branches/mcjit/include/j3/j3class.h
    vmkit/branches/mcjit/lib/j3/vm/j3.cc
    vmkit/branches/mcjit/lib/j3/vm/j3class.cc
    vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc

Modified: vmkit/branches/mcjit/include/j3/j3class.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/include/j3/j3class.h?rev=197893&r1=197892&r2=197893&view=diff
==============================================================================
--- vmkit/branches/mcjit/include/j3/j3class.h (original)
+++ vmkit/branches/mcjit/include/j3/j3class.h Sun Dec 22 15:28:29 2013
@@ -243,7 +243,7 @@ namespace j3 {
 		uint32_t            integerAt(uint16_t idx);
 		uint64_t            longAt(uint16_t idx);
 		J3ObjectHandle*     stringAt(uint16_t idx);
-		J3Class*            classAt(uint16_t idx);
+		J3ObjectType*       classAt(uint16_t idx);
 		J3Method*           methodAt(uint16_t idx, uint16_t access);
 		J3Field*            fieldAt(uint16_t idx, uint16_t access);
 

Modified: vmkit/branches/mcjit/lib/j3/vm/j3.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3.cc?rev=197893&r1=197892&r2=197893&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3.cc Sun Dec 22 15:28:29 2013
@@ -100,15 +100,6 @@ void J3::start(int argc, char** argv) {
 	classVMData              = classClass->findVirtualField(hf.name(), hf.type());
 
 	initialClassLoader->method(J3Cst::ACC_STATIC, L"java/lang/System", L"initializeSystemClass", L"()V")->invokeStatic();
-
-#if 0
-	J3Method* m = initialClassLoader->method(J3Cst::ACC_STATIC,
-																					 L"java/lang/ClassLoader",
-																					 L"getSystemClassLoader",
-																					 L"()Ljava/lang/ClassLoader;");
-
-	m->invokeStatic();
-#endif
 }
 
 JNIEnv* J3::jniEnv() {

Modified: vmkit/branches/mcjit/lib/j3/vm/j3class.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3class.cc?rev=197893&r1=197892&r2=197893&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3class.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3class.cc Sun Dec 22 15:28:29 2013
@@ -448,20 +448,20 @@ void J3Class::readClassBytes(std::vector
 	
 	_access = reader.readU2();
 	
-	J3Class* self = classAt(reader.readU2());
+	J3ObjectType* self = classAt(reader.readU2());
 	
 	if(self != this)
 		J3::classFormatError(this, L"wrong class file (describes class %ls)", self->name()->cStr());
 	
 	uint16_t superIdx = reader.readU2();
 
-	_super = superIdx ? classAt(superIdx) : this;
+	_super = superIdx ? classAt(superIdx)->asClass() : this;
 
 	_nbInterfaces = reader.readU2();
 	_interfaces = (J3Class**)loader()->allocator()->allocate(nbInterfaces()*sizeof(J3Class*));
 	
 	for(size_t i=0; i<nbInterfaces(); i++) {
-		_interfaces[i] = classAt(reader.readU2());
+		_interfaces[i] = classAt(reader.readU2())->asClass();
 	}
 
 	size_t   n = nbHiddenFields + reader.readU2(), nbStaticFields = 0, nbVirtualFields = 0;
@@ -648,7 +648,7 @@ J3Method* J3Class::methodAt(uint16_t idx
 	}
 
 	uint16_t ntIdx = ctpValues[idx] & 0xffff;
-	J3Class* cl = classAt(ctpValues[idx] >> 16);
+	J3Class* cl = classAt(ctpValues[idx] >> 16)->asClass();
 
 	check(ntIdx, J3Cst::CONSTANT_NameAndType);
 	const vmkit::Name* name = nameAt(ctpValues[ntIdx] >> 16);
@@ -670,7 +670,7 @@ J3Field* J3Class::fieldAt(uint16_t idx,
 	}
 
 	uint16_t ntIdx = ctpValues[idx] & 0xffff;
-	J3Class* cl = classAt(ctpValues[idx] >> 16);
+	J3Class* cl = classAt(ctpValues[idx] >> 16)->asClass();
 
 	check(ntIdx, J3Cst::CONSTANT_NameAndType);
 	const vmkit::Name* name = nameAt(ctpValues[ntIdx] >> 16);
@@ -681,16 +681,16 @@ J3Field* J3Class::fieldAt(uint16_t idx,
 	return res;
 }
 
-J3Class* J3Class::classAt(uint16_t idx) {
+J3ObjectType* J3Class::classAt(uint16_t idx) {
 	check(idx, J3Cst::CONSTANT_Class);
-	J3Class* res = (J3Class*)ctpResolved[idx];
+	J3ObjectType* res = (J3ObjectType*)ctpResolved[idx];
 
 	if(res)
 		return res;
 	
 	const vmkit::Name* name = nameAt(ctpValues[idx]);
 	if(name->cStr()[0] == J3Cst::ID_Array)
-		J3::internalError(L"implement me: classAt with array");
+		res = loader()->getType(this, name)->asObjectType();
 	else
 		res = loader()->getClass(name);
 

Modified: vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc?rev=197893&r1=197892&r2=197893&view=diff
==============================================================================
--- vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc (original)
+++ vmkit/branches/mcjit/lib/j3/vm/j3codegen.cc Sun Dec 22 15:28:29 2013
@@ -1252,7 +1252,7 @@ void J3CodeGen::translate() {
 
 			case J3Cst::BC_invokeinterface: nyi();        /* 0xb9 */
 			case J3Cst::BC_new:                           /* 0xbb */
-				newObject(cl->classAt(codeReader->readU2()));
+				newObject(cl->classAt(codeReader->readU2())->asClass());
 				break;
 				
 			case J3Cst::BC_newarray:                      /* 0xbc */





More information about the vmkit-commits mailing list