X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FVMCore%2FFunction.cpp;h=47a85395a3f70a91b88479895ea297f99ced83a8;hb=d70684f7585a85c4248c1c224059478108741c70;hp=3d4a3547b0d7448bf4c53ac7457373982bcad8fc;hpb=a3d3c2b64545c00f70453642e5d84b028dfce671;p=oota-llvm.git diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp index 3d4a3547b0d..47a85395a3f 100644 --- a/lib/VMCore/Function.cpp +++ b/lib/VMCore/Function.cpp @@ -1,6 +1,7 @@ //===-- Method.cpp - Implement the Method class ------------------*- C++ -*--=// // -// This file implements the Method class for the VMCore library. +// This file implements the Method & GlobalVariable classes for the VMCore +// library. // //===----------------------------------------------------------------------===// @@ -9,9 +10,15 @@ #include "llvm/SymbolTable.h" #include "llvm/Module.h" #include "llvm/Method.h" +#include "llvm/GlobalVariable.h" #include "llvm/BasicBlock.h" #include "llvm/iOther.h" +//===----------------------------------------------------------------------===// +// Method Implementation +//===----------------------------------------------------------------------===// + + // Instantiate Templates - This ugliness is the price we have to pay // for having a ValueHolderImpl.h file seperate from ValueHolder.h! :( // @@ -39,8 +46,10 @@ Method::~Method() { } // Specialize setName to take care of symbol table majik -void Method::setName(const string &name) { +void Method::setName(const string &name, SymbolTable *ST) { Module *P; + assert((ST == 0 || (!getParent() || ST == getParent()->getSymbolTable())) && + "Invalid symtab argument!"); if ((P = getParent()) && hasName()) P->getSymbolTable()->remove(this); Value::setName(name); if (P && getName() != "") P->getSymbolTableSure()->insert(this); @@ -57,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 @@ -72,3 +77,31 @@ const MethodType *Method::getMethodType() const { void Method::dropAllReferences() { for_each(begin(), end(), std::mem_fun(&BasicBlock::dropAllReferences)); } + +//===----------------------------------------------------------------------===// +// GlobalVariable Implementation +//===----------------------------------------------------------------------===// + +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 +void GlobalVariable::setName(const string &name, SymbolTable *ST) { + Module *P; + assert((ST == 0 || (!getParent() || ST == getParent()->getSymbolTable())) && + "Invalid symtab argument!"); + if ((P = getParent()) && hasName()) P->getSymbolTable()->remove(this); + Value::setName(name); + if (P && getName() != "") P->getSymbolTableSure()->insert(this); +}