Add support for global constants, and for initializers for constants
[oota-llvm.git] / lib / VMCore / Function.cpp
index 0ec64113230441f0e8ea9fe219db52ef7eeaae79..47a85395a3f70a91b88479895ea297f99ced83a8 100644 (file)
@@ -66,10 +66,6 @@ const Type *Method::getReturnType() const {
   return ((const MethodType *)getType())->getReturnType(); 
 }
 
-const MethodType *Method::getMethodType() const { 
-  return (const MethodType *)getType();
-}
-
 // dropAllReferences() - This function causes all the subinstructions to "let
 // go" of all references that they are maintaining.  This allows one to
 // 'delete' a whole class at a time, even though there may be circular
@@ -86,12 +82,18 @@ void Method::dropAllReferences() {
 // GlobalVariable Implementation
 //===----------------------------------------------------------------------===//
 
-GlobalVariable::GlobalVariable(const Type *Ty, const string &Name = "")
-  : Value(Ty, Value::GlobalVal, Name), Parent(0) {
-  assert(Ty->isPointerType() && 
-        (!Ty->isPointerType()->isArrayType() || // No unsized array pointers
-         Ty->isPointerType()->isArrayType()->isSized()) &&
+GlobalVariable::GlobalVariable(const Type *Ty, bool isConstant,
+                              ConstPoolVal *Initializer = 0, 
+                              const string &Name = "")
+  : User(Ty, Value::GlobalVal, Name), Parent(0), Constant(isConstant) {
+  assert(Ty->isPointerType() &&                   // No unsized array pointers
+        (!Ty->castPointerType()->isArrayType() ||
+         Ty->castPointerType()->castArrayType()->isSized()) &&
         "Global Variables must be pointers to a sized type!");
+  if (Initializer) Operands.push_back(Use((Value*)Initializer, this));
+
+  assert(!isConstant || hasInitializer() &&
+        "Globals Constants must have an initializer!"); 
 }
 
 // Specialize setName to take care of symbol table majik