Add missed file
authorAnton Korobeynikov <asl@math.spbu.ru>
Wed, 25 Apr 2007 16:42:39 +0000 (16:42 +0000)
committerAnton Korobeynikov <asl@math.spbu.ru>
Wed, 25 Apr 2007 16:42:39 +0000 (16:42 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36439 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/GlobalAlias.h [new file with mode: 0644]

diff --git a/include/llvm/GlobalAlias.h b/include/llvm/GlobalAlias.h
new file mode 100644 (file)
index 0000000..ec6ea77
--- /dev/null
@@ -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