/// @{
public:
- /// This method will strip the symbol table of its names
- /// @brief Strip the symbol table.
- bool strip();
-
/// Inserts a type into the symbol table with the specified name. There can be
/// a many-to-one mapping between names and types. This method allows a type
/// with an existing entry in the symbol table to get a new name.
/// @}
/// @name Mutators
/// @{
-public:
-
- /// This method will strip the symbol table of its names.
- /// @brief Strip the symbol table.
- bool strip();
-
private:
/// This method adds the provided value \p N to the symbol table. The Value
/// must have a name which is used to place the value in the symbol table.
}
}
+// Strip the symbol table of its names.
+//
+static void StripSymtab(ValueSymbolTable &ST) {
+ for (ValueSymbolTable::iterator VI = ST.begin(), VE = ST.end(); VI != VE; ) {
+ Value *V = VI->second;
+ ++VI;
+ if (!isa<GlobalValue>(V) || cast<GlobalValue>(V)->hasInternalLinkage()) {
+ // Set name to "", removing from symbol table!
+ V->setName("");
+ }
+ }
+}
+
+// Strip the symbol table of its names.
+static void StripTypeSymtab(TypeSymbolTable &ST) {
+ for (TypeSymbolTable::iterator TI = ST.begin(), E = ST.end(); TI != E; )
+ ST.remove(TI++);
+}
+
+
+
bool StripSymbols::runOnModule(Module &M) {
// If we're not just stripping debug info, strip all symbols from the
// functions and the names from any internal globals.
for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {
if (I->hasInternalLinkage())
I->setName(""); // Internal symbols can't participate in linkage
- I->getValueSymbolTable().strip();
+ StripSymtab(I->getValueSymbolTable());
}
// Remove all names from types.
- M.getTypeSymbolTable().strip();
+ StripTypeSymtab(M.getTypeSymbolTable());
}
// Strip debug info in the module if it exists. To do this, we remove
}
}
-// Strip the symbol table of its names.
-bool TypeSymbolTable::strip() {
- bool RemovedSymbol = false;
- for (iterator TI = tmap.begin(); TI != tmap.end(); ) {
- remove(TI++);
- RemovedSymbol = true;
- }
-
- return RemovedSymbol;
-}
-
// This function is called when one of the types in the type plane are refined
void TypeSymbolTable::refineAbstractType(const DerivedType *OldType,
const Type *NewType) {
return 0;
}
-// Strip the symbol table of its names.
-//
-bool ValueSymbolTable::strip() {
- bool RemovedSymbol = false;
- for (iterator VI = vmap.begin(), VE = vmap.end(); VI != VE; ) {
- Value *V = VI->second;
- ++VI;
- if (!isa<GlobalValue>(V) || cast<GlobalValue>(V)->hasInternalLinkage()) {
- // Set name to "", removing from symbol table!
- V->setName("");
- RemovedSymbol = true;
- }
- }
- return RemovedSymbol;
-}
-
// Insert a value into the symbol table with the specified name...
//
void ValueSymbolTable::insert(Value* V) {