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

Alkis Evlogimenos alkis at cs.uiuc.edu
Sat Apr 2 01:14:37 PST 2005



Changes in directory llvm-java/lib/Compiler:

Resolver.h updated: 1.13 -> 1.14
Resolver.cpp updated: 1.16 -> 1.17
Compiler.cpp updated: 1.277 -> 1.278
---
Log message:

Add the name of the class in the typeinfo struct inside the class
record.


---
Diffs of the changes:  (+28 -1)

 Compiler.cpp |    2 ++
 Resolver.cpp |   25 +++++++++++++++++++++++++
 Resolver.h   |    2 +-
 3 files changed, 28 insertions(+), 1 deletion(-)


Index: llvm-java/lib/Compiler/Resolver.h
diff -u llvm-java/lib/Compiler/Resolver.h:1.13 llvm-java/lib/Compiler/Resolver.h:1.14
--- llvm-java/lib/Compiler/Resolver.h:1.13	Sat Apr  2 02:18:20 2005
+++ llvm-java/lib/Compiler/Resolver.h	Sat Apr  2 03:14:25 2005
@@ -87,7 +87,7 @@
 
     unsigned getNextInterfaceIndex() { return nextInterfaceIndex_++; }
     Module* getModule() { return module_; }
-
+    void emitClassRecordsArray() const;
   };
 
 } } // namespace llvm::Java


Index: llvm-java/lib/Compiler/Resolver.cpp
diff -u llvm-java/lib/Compiler/Resolver.cpp:1.16 llvm-java/lib/Compiler/Resolver.cpp:1.17
--- llvm-java/lib/Compiler/Resolver.cpp:1.16	Sat Apr  2 02:18:20 2005
+++ llvm-java/lib/Compiler/Resolver.cpp	Sat Apr  2 03:14:25 2005
@@ -15,6 +15,7 @@
 
 #include "Resolver.h"
 #include <llvm/Java/ClassFile.h>
+#include <llvm/Constants.h>
 #include <llvm/DerivedTypes.h>
 #include <llvm/Support/Debug.h>
 
@@ -209,3 +210,27 @@
   else
     return type;
 }
+
+void Resolver::emitClassRecordsArray() const
+{
+  std::vector<llvm::Constant*> init;
+  init.reserve(classMap_.size() + 1);
+
+  for (ClassMap::const_iterator i = classMap_.begin(), e = classMap_.end();
+       i != e; ++i)
+    init.push_back(ConstantExpr::getCast(i->second.getClassRecord(),
+                                         classRecordPtrType_));
+
+  // Null terminate the array.
+  init.push_back(llvm::Constant::getNullValue(classRecordPtrType_));
+
+  const ArrayType* arrayType = ArrayType::get(classRecordPtrType_, init.size());
+
+  new GlobalVariable(
+    arrayType,
+    true,
+    GlobalVariable::ExternalLinkage,
+    ConstantArray::get(arrayType, init),
+    "llvm_java_class_records",
+    module_);                       
+}


Index: llvm-java/lib/Compiler/Compiler.cpp
diff -u llvm-java/lib/Compiler/Compiler.cpp:1.277 llvm-java/lib/Compiler/Compiler.cpp:1.278
--- llvm-java/lib/Compiler/Compiler.cpp:1.277	Sat Apr  2 02:18:20 2005
+++ llvm-java/lib/Compiler/Compiler.cpp	Sat Apr  2 03:14:25 2005
@@ -517,6 +517,8 @@
                          "llvm_java_class_initializers",
                          module_);
 
+      // Emit the array of all class records.
+      resolver_->emitClassRecordsArray();
 
       return method;
     }






More information about the llvm-commits mailing list