[llvm-commits] CVS: llvm-java/lib/Compiler/Compiler.cpp

Alkis Evlogimenos alkis at cs.uiuc.edu
Mon Mar 21 12:01:14 PST 2005



Changes in directory llvm-java/lib/Compiler:

Compiler.cpp updated: 1.238 -> 1.239
---
Log message:

Add more classes so that we can compile java.lang.String.


---
Diffs of the changes:  (+32 -26)

 Compiler.cpp |   58 ++++++++++++++++++++++++++++++++--------------------------
 1 files changed, 32 insertions(+), 26 deletions(-)


Index: llvm-java/lib/Compiler/Compiler.cpp
diff -u llvm-java/lib/Compiler/Compiler.cpp:1.238 llvm-java/lib/Compiler/Compiler.cpp:1.239
--- llvm-java/lib/Compiler/Compiler.cpp:1.238	Mon Mar 21 04:03:52 2005
+++ llvm-java/lib/Compiler/Compiler.cpp	Mon Mar 21 14:01:03 2005
@@ -1355,26 +1355,32 @@
       assert (!method->isAbstract() && "Trying to compile an abstract method!");
 
       // HACK: skip most of the class libraries.
-      if (classMethodDesc.find("java/") == 0 &&
-          classMethodDesc.find("java/lang/Object") != 0 &&
-          (classMethodDesc.find("java/lang/Throwable") != 0 ||
-           classMethodDesc.find("java/lang/Throwable$StaticData/<cl") == 0) &&
-          classMethodDesc.find("java/lang/Exception") != 0 &&
-          classMethodDesc.find("java/lang/IllegalArgumentException") != 0 &&
-          classMethodDesc.find("java/lang/IllegalStateException") != 0 &&
-          classMethodDesc.find("java/lang/IndexOutOfBoundsException") != 0 &&
-          classMethodDesc.find("java/lang/RuntimeException") != 0 &&
-          classMethodDesc.find("java/lang/Math") != 0 &&
-          classMethodDesc.find("java/lang/Number") != 0 &&
-          classMethodDesc.find("java/lang/Byte") != 0 &&
-          classMethodDesc.find("java/lang/Float") != 0 &&
-          classMethodDesc.find("java/lang/Integer") != 0 &&
-          classMethodDesc.find("java/lang/Long") != 0 &&
-          classMethodDesc.find("java/lang/Short") != 0 &&
-          classMethodDesc.find("java/lang/StringBuffer") != 0 &&
-          classMethodDesc.find("java/lang/System") != 0 &&
-          classMethodDesc.find("java/lang/VMSystem") != 0 &&
-          classMethodDesc.find("java/util/") != 0) {
+      if ((classMethodDesc.find("java/") == 0 &&
+           classMethodDesc.find("java/lang/Object") != 0 &&
+           (classMethodDesc.find("java/lang/Throwable") != 0 ||
+            classMethodDesc.find("java/lang/Throwable$StaticData/<cl") == 0) &&
+           classMethodDesc.find("java/lang/Exception") != 0 &&
+           classMethodDesc.find("java/lang/IllegalArgumentException") != 0 &&
+           classMethodDesc.find("java/lang/IllegalStateException") != 0 &&
+           classMethodDesc.find("java/lang/IndexOutOfBoundsException") != 0 &&
+           classMethodDesc.find("java/lang/RuntimeException") != 0 &&
+           classMethodDesc.find("java/lang/Math") != 0 &&
+           classMethodDesc.find("java/lang/Number") != 0 &&
+           classMethodDesc.find("java/lang/Byte") != 0 &&
+           classMethodDesc.find("java/lang/Float") != 0 &&
+           classMethodDesc.find("java/lang/Integer") != 0 &&
+           classMethodDesc.find("java/lang/Long") != 0 &&
+           classMethodDesc.find("java/lang/Short") != 0 &&
+           (classMethodDesc.find("java/lang/String") != 0 ||
+            classMethodDesc.find("java/lang/String/<cl") == 0) &&
+           classMethodDesc.find("java/lang/StringBuffer") != 0 &&
+           classMethodDesc.find("java/lang/System") != 0 &&
+           classMethodDesc.find("java/lang/VMSystem") != 0 &&
+           (classMethodDesc.find("java/util/") != 0 ||
+            classMethodDesc.find("java/util/Locale/<cl") == 0 ||
+            classMethodDesc.find("java/util/ResourceBundle/<cl") == 0 ||
+            classMethodDesc.find("java/util/Calendar/<cl") == 0)) ||
+          (classMethodDesc.find("gnu/") == 0)) {
         DEBUG(std::cerr << "Skipping compilation of method: "
               << classMethodDesc << '\n');
         return function;
@@ -2345,14 +2351,14 @@
     void do_anewarray(unsigned index) {
       Value* count = pop(Type::UIntTy);
 
-      ConstantClass* classRef = cf_->getConstantClass(index);
-      const ClassFile* cf = ClassFile::get(classRef->getName()->str());
       const ClassInfo& ci = getObjectArrayInfo();
-      const ClassInfo& ei = getClassInfo(cf);
-      const VTableInfo& vi = getObjectArrayVTableInfo(cf);
+      // FIXME: Need to do handle different element types. This now
+      // assumes that all arrays of references are arrays of
+      // java/lang/Object's.
+      const VTableInfo& vi =
+        getObjectArrayVTableInfo(ClassFile::get("java/lang/Object"));
 
-      const Type* elementTy = PointerType::get(ei.getType());
-      push(allocateArray(ci, elementTy, vi, count, currentBB_));
+      push(allocateArray(ci, ObjectBaseRefTy, vi, count, currentBB_));
     }
 
     void do_arraylength() {






More information about the llvm-commits mailing list