[vmkit-commits] [vmkit] r71551 - in /vmkit/trunk/lib/JnJVM/VMCore: JavaArray.h JavaClass.cpp JavaClass.h JavaObject.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Tue May 12 05:49:15 PDT 2009


Author: geoffray
Date: Tue May 12 07:49:06 2009
New Revision: 71551

URL: http://llvm.org/viewvc/llvm-project?rev=71551&view=rev
Log:
Don't create UTF8s when comparing type names.


Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h?rev=71551&r1=71550&r2=71551&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaArray.h Tue May 12 07:49:06 2009
@@ -157,12 +157,18 @@
     return UTF8ToAsciiz();
   }
 
-  /// equals - Are the two UTF8s equals?
+  /// equals - Are the two UTF8s equal?
   bool equals(const UTF8* other) const {
     if (other == this) return true;
     else if (size != other->size) return false;
     else return !memcmp(elements, other->elements, size * sizeof(uint16));
   }
+  
+  /// equals - Does the UTF8 equal to the buffer? 
+  bool equals(const uint16* buf, sint32 len) const {
+    if (size != len) return false;
+    else return !memcmp(elements, buf, size * sizeof(uint16));
+  }
 
   /// lessThan - strcmp-like function for UTF8s, used by hash tables.
   bool lessThan(const UTF8* other) const {

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp?rev=71551&r1=71550&r2=71551&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Tue May 12 07:49:06 2009
@@ -525,23 +525,23 @@
   return res;
 }
 
-bool UserCommonClass::inheritName(const UTF8* Tname) {
-  if (getName()->equals(Tname)) {
+bool UserCommonClass::inheritName(const uint16* buf, uint32 len) {
+  if (getName()->equals(buf, len)) {
     return true;
   } else  if (isPrimitive()) {
     return false;
   } else if (super) {
-    if (getSuper()->inheritName(Tname)) return true;
+    if (getSuper()->inheritName(buf, len)) return true;
   }
   
   for (uint32 i = 0; i < nbInterfaces; ++i) {
-    if (interfaces[i]->inheritName(Tname)) return true;
+    if (interfaces[i]->inheritName(buf, len)) return true;
   }
   return false;
 }
 
-bool UserCommonClass::isOfTypeName(Jnjvm* vm, const UTF8* Tname) {
-  if (inheritName(Tname)) {
+bool UserCommonClass::isOfTypeName(const UTF8* Tname) {
+  if (inheritName(Tname->elements, Tname->size)) {
     return true;
   } else if (isArray()) {
     UserCommonClass* curS = this;
@@ -558,7 +558,7 @@
     }
     
     return (Tname->elements[prof] == I_REF) &&  
-      (res && curS->inheritName(Tname->extract(vm, prof + 1, len - 1)));
+      (res && curS->inheritName(&(Tname->elements[prof + 1]), len - 1));
   } else {
     return false;
   }

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=71551&r1=71550&r2=71551&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Tue May 12 07:49:06 2009
@@ -440,12 +440,12 @@
   /// the given name? Equality is on the name. This function does not take
   /// into account array classes.
   ///
-  bool inheritName(const UTF8* Tname);
+  bool inheritName(const uint16* buf, uint32 len);
 
   /// isOfTypeName - Does this class inherits the given name? Equality is on
   /// the name. This function takes into account array classes.
   ///
-  bool isOfTypeName(Jnjvm* vm, const UTF8* Tname);
+  bool isOfTypeName(const UTF8* Tname);
 
   /// isAssignableFrom - Is this class assignable from the given class? The
   /// classes may be of any type.

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp?rev=71551&r1=71550&r2=71551&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp Tue May 12 07:49:06 2009
@@ -158,7 +158,7 @@
 
   JavaObject* obj = this;
   if (!signature->isPrimitive()) {
-    if (obj && !(obj->getClass()->isOfTypeName(vm, signature->getName()))) {
+    if (obj && !(obj->getClass()->isOfTypeName(signature->getName()))) {
       vm->illegalArgumentException("wrong type argument");
     }
     ((JavaObject**)buf)[0] = obj;





More information about the vmkit-commits mailing list