diff options
author | Chris Lattner <sabre@nondot.org> | 2001-09-10 07:58:01 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2001-09-10 07:58:01 +0000 |
commit | 70cc3397f84c2e1fd69c059a0ef89e398e847b00 (patch) | |
tree | ca2156daf75e4abf788d92925bdce4063da36e58 /lib/VMCore/Function.cpp | |
parent | 7720c8e1a7a252e983e3f3e7f841d7901dfea80c (diff) |
Implement global variable support
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@530 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/VMCore/Function.cpp')
-rw-r--r-- | lib/VMCore/Function.cpp | 31 |
1 files changed, 30 insertions, 1 deletions
diff --git a/lib/VMCore/Function.cpp b/lib/VMCore/Function.cpp index bd342a2473..0ec6411323 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! :( // @@ -74,3 +81,25 @@ const MethodType *Method::getMethodType() const { void Method::dropAllReferences() { for_each(begin(), end(), std::mem_fun(&BasicBlock::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()) && + "Global Variables must be pointers to a sized type!"); +} + +// 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); +} |