//===-- Module.cpp - Implement the Module class ---------------------------===//
-//
+//
// The LLVM Compiler Infrastructure
//
// This file was developed by the LLVM research group and is distributed under
// the University of Illinois Open Source License. See LICENSE.TXT for details.
-//
+//
//===----------------------------------------------------------------------===//
//
// This file implements the Module class for the VMCore library.
}
// Explicit instantiations of SymbolTableListTraits since some of the methods
-// are not in the public header file...
+// are not in the public header file.
template class SymbolTableListTraits<GlobalVariable, Module, Module>;
template class SymbolTableListTraits<Function, Module, Module>;
if (Function *F = getFunction("main", FunctionType::get(Type::IntTy,
Params, false)))
return F;
-
+
// void main(int argc, char **argv)...
if (Function *F = getFunction("main", FunctionType::get(Type::VoidTy,
Params, false)))
//
/// getGlobalVariable - Look up the specified global variable in the module
-/// symbol table. If it does not exist, return null. Note that this only
-/// returns a global variable if it does not have internal linkage. The type
-/// argument should be the underlying type of the global, ie, it should not
-/// have the top-level PointerType, which represents the address of the
-/// global.
+/// symbol table. If it does not exist, return null. The type argument
+/// should be the underlying type of the global, i.e., it should not have
+/// the top-level PointerType, which represents the address of the global.
+/// If AllowInternal is set to true, this function will return types that
+/// have InternalLinkage. By default, these types are not returned.
///
-GlobalVariable *Module::getGlobalVariable(const std::string &Name,
- const Type *Ty) {
+GlobalVariable *Module::getGlobalVariable(const std::string &Name,
+ const Type *Ty, bool AllowInternal) {
if (Value *V = getSymbolTable().lookup(PointerType::get(Ty), Name)) {
GlobalVariable *Result = cast<GlobalVariable>(V);
- if (!Result->hasInternalLinkage())
+ if (AllowInternal || !Result->hasInternalLinkage())
return Result;
}
return 0;
SymbolTable &ST = getSymbolTable();
if (ST.lookupType(Name)) return true; // Already in symtab...
-
+
// Not in symbol table? Set the name with the Symtab as an argument so the
// type knows what to update...
ST.insert(Name, Ty);