* Module's are no longer Value's
authorChris Lattner <sabre@nondot.org>
Sun, 28 Apr 2002 04:45:48 +0000 (04:45 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 28 Apr 2002 04:45:48 +0000 (04:45 +0000)
* Incorporate SymTabValue contents into the Module class

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2345 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Module.h

index cd151786b6c0887a3dd248afdd82e9b887fb59d4..a87b48380aabbfaa19a6d215ffcbf49da5fd40f7 100644 (file)
 #define LLVM_MODULE_H
 
 #include "llvm/Value.h"
-#include "llvm/SymTabValue.h"
 #include "llvm/ValueHolder.h"
 class GlobalVariable;
 class GlobalValueRefMap;   // Used by ConstantVals.cpp
 class ConstantPointerRef;
 class FunctionType;
+class SymbolTable;
 
-class Module : public Value, public SymTabValue {
+class Module : public Annotable {
 public:
   typedef ValueHolder<GlobalVariable, Module, Module> GlobalListType;
   typedef ValueHolder<Function, Module, Module> FunctionListType;
@@ -43,6 +43,8 @@ private:
 
   GlobalValueRefMap *GVRefMap;
 
+  SymbolTable *SymTab;
+
   // Accessor for the underlying GlobalValRefMap... only through the
   // ConstantPointerRef class...
   friend class ConstantPointerRef;
@@ -80,6 +82,28 @@ public:
   inline const FunctionListType &getFunctionList() const { return FunctionList;}
   inline       FunctionListType &getFunctionList()       { return FunctionList;}
 
+
+  //===--------------------------------------------------------------------===//
+  // Symbol table support functions...
+  
+  // hasSymbolTable() - Returns true if there is a symbol table allocated to
+  // this object AND if there is at least one name in it!
+  //
+  bool hasSymbolTable() const;
+
+  // CAUTION: The current symbol table may be null if there are no names (ie, 
+  // the symbol table is empty) 
+  //
+  inline       SymbolTable *getSymbolTable()       { return SymTab; }
+  inline const SymbolTable *getSymbolTable() const { return SymTab; }
+
+  // getSymbolTableSure is guaranteed to not return a null pointer, because if
+  // the method does not already have a symtab, one is created.  Use this if
+  // you intend to put something into the symbol table for the method.
+  //
+  SymbolTable *getSymbolTableSure();
+
+
   //===--------------------------------------------------------------------===//
   // Module iterator forwarding functions
   //
@@ -119,13 +143,7 @@ public:
   inline const Function          *back() const { return FunctionList.back(); }
   inline       Function          *back()       { return FunctionList.back(); }
 
-  // Methods for support type inquiry through isa, cast, and dyn_cast:
-  static inline bool classof(const Module *T) { return true; }
-  static inline bool classof(const Value *V) {
-    return V->getValueType() == Value::ModuleVal;
-  }
-
-  virtual void print(std::ostream &OS) const;
+  void print(std::ostream &OS) const;
 
   // dropAllReferences() - This function causes all the subinstructions to "let
   // go" of all references that they are maintaining.  This allows one to