From 7bc428fa6f182f5adf04ff62d72370091f64beeb Mon Sep 17 00:00:00 2001 From: Anton Korobeynikov Date: Wed, 25 Apr 2007 16:42:39 +0000 Subject: [PATCH] Add missed file git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36439 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/GlobalAlias.h | 83 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 include/llvm/GlobalAlias.h diff --git a/include/llvm/GlobalAlias.h b/include/llvm/GlobalAlias.h new file mode 100644 index 00000000000..ec6ea770605 --- /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 + class SymbolTableListTraits; + +class GlobalAlias : public GlobalValue { + friend class SymbolTableListTraits; + 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