diff options
author | Anton Korobeynikov <asl@math.spbu.ru> | 2007-04-25 16:42:39 +0000 |
---|---|---|
committer | Anton Korobeynikov <asl@math.spbu.ru> | 2007-04-25 16:42:39 +0000 |
commit | 7bc428fa6f182f5adf04ff62d72370091f64beeb (patch) | |
tree | 222f48cc1b280666c8f313317a3b3684bd910281 /include | |
parent | 305b8a5f62c9d027f3d8a870fc12fc2abf69aeea (diff) | |
download | external_llvm-7bc428fa6f182f5adf04ff62d72370091f64beeb.zip external_llvm-7bc428fa6f182f5adf04ff62d72370091f64beeb.tar.gz external_llvm-7bc428fa6f182f5adf04ff62d72370091f64beeb.tar.bz2 |
Add missed file
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36439 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/GlobalAlias.h | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/include/llvm/GlobalAlias.h b/include/llvm/GlobalAlias.h new file mode 100644 index 0000000..ec6ea77 --- /dev/null +++ b/include/llvm/GlobalAlias.h @@ -0,0 +1,83 @@ +//===______-- llvm/GlobalAlias.h - GlobalAlias class ------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by Anton Korobeynikov and is distributed under +// the University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file contains the declaration of the GlobalAlias class, which +// represents a single function or variable alias in the VM. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_GLOBAL_ALIAS_H +#define LLVM_GLOBAL_ALIAS_H + +#include "llvm/GlobalValue.h" + +namespace llvm { + +class Module; +class Constant; +class PointerType; +template<typename ValueSubClass, typename ItemParentClass> + class SymbolTableListTraits; + +class GlobalAlias : public GlobalValue { + friend class SymbolTableListTraits<GlobalAlias, Module>; + void operator=(const GlobalAlias &); // Do not implement + GlobalAlias(const GlobalAlias &); // Do not implement + + void setParent(Module *parent); + + GlobalAlias *Prev, *Next; + void setNext(GlobalAlias *N) { Next = N; } + void setPrev(GlobalAlias *N) { Prev = N; } + + const GlobalValue* Aliasee; + std::string Target; +public: + /// GlobalAlias ctor - If a parent module is specified, the alias is + /// automatically inserted into the end of the specified modules alias list. + GlobalAlias(const Type *Ty, LinkageTypes Linkage, const std::string &Name = "", + const GlobalValue* Aliasee = 0, Module *Parent = 0); + + /// isDeclaration - Is this global variable lacking an initializer? If so, + /// the global variable is defined in some other translation unit, and is thus + /// only a declaration here. + virtual bool isDeclaration() const; + + /// removeFromParent - This method unlinks 'this' from the containing module, + /// but does not delete it. + /// + virtual void removeFromParent(); + + /// eraseFromParent - This method unlinks 'this' from the containing module + /// and deletes it. + /// + virtual void eraseFromParent(); + + virtual void print(std::ostream &OS) const; + void print(std::ostream *OS) const { if (OS) print(*OS); } + + void setAliasee(const GlobalValue* GV); + const GlobalValue* getAliasee() const { return Aliasee; } + + // Methods for support type inquiry through isa, cast, and dyn_cast: + static inline bool classof(const GlobalAlias *) { return true; } + static inline bool classof(const Value *V) { + return V->getValueID() == Value::GlobalAliasVal; + } +private: + // getNext/Prev - Return the next or previous alias in the list. + GlobalAlias *getNext() { return Next; } + const GlobalAlias *getNext() const { return Next; } + GlobalAlias *getPrev() { return Prev; } + const GlobalAlias *getPrev() const { return Prev; } +}; + +} // End llvm namespace + +#endif |