mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
Implement an isBytecodeArchive method to determine if an archive contains
bytecode file members or not. Patch Contributed By Adam Treat git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20338 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7ffc07dcf7
commit
eaa06bb979
@ -414,6 +414,15 @@ class Archive {
|
||||
std::set<std::string>& symbols, ///< Symbols to be sought
|
||||
std::set<ModuleProvider*>& modules ///< The modules matching \p symbols
|
||||
);
|
||||
|
||||
/// This method determines whether the archive is a properly formed llvm
|
||||
/// bytecode archive. It first makes sure the symbol table has been loaded
|
||||
/// and has a non-zero size. If it does, then it is an archive. If not,
|
||||
/// then it tries to load all the bytecode modules of the archive. Finally,
|
||||
/// it returns whether it was successfull.
|
||||
/// @returns true if the archive is a proper llvm bytecode archive
|
||||
/// @brief Determine whether the archive is a proper llvm bytecode archive.
|
||||
bool isBytecodeArchive();
|
||||
|
||||
/// @}
|
||||
/// @name Mutators
|
||||
|
@ -503,3 +503,32 @@ Archive::findModulesDefiningSymbols(std::set<std::string>& symbols,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
Archive::isBytecodeArchive()
|
||||
{
|
||||
//Make sure the symTab has been loaded...
|
||||
//in most cases this should have been done
|
||||
//when the archive was constructed, but still,
|
||||
//this is just in case.
|
||||
if ( !symTab.size() )
|
||||
loadSymbolTable();
|
||||
|
||||
//Now that we know it's been loaded, return true
|
||||
//if it has a size
|
||||
if ( symTab.size() ) return true;
|
||||
|
||||
//We still can't be sure it isn't a bytecode archive
|
||||
loadArchive();
|
||||
|
||||
std::vector<Module *> Modules;
|
||||
std::string ErrorMessage;
|
||||
|
||||
//If getAllModules gives an error then this isn't a proper
|
||||
//bytecode archive
|
||||
if ( getAllModules( Modules, &ErrorMessage ) ) return false;
|
||||
|
||||
//Finally, if we find any bytecode modules then this is a proper
|
||||
//bytecode archive
|
||||
return Modules.size();
|
||||
}
|
||||
|
@ -503,3 +503,32 @@ Archive::findModulesDefiningSymbols(std::set<std::string>& symbols,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
Archive::isBytecodeArchive()
|
||||
{
|
||||
//Make sure the symTab has been loaded...
|
||||
//in most cases this should have been done
|
||||
//when the archive was constructed, but still,
|
||||
//this is just in case.
|
||||
if ( !symTab.size() )
|
||||
loadSymbolTable();
|
||||
|
||||
//Now that we know it's been loaded, return true
|
||||
//if it has a size
|
||||
if ( symTab.size() ) return true;
|
||||
|
||||
//We still can't be sure it isn't a bytecode archive
|
||||
loadArchive();
|
||||
|
||||
std::vector<Module *> Modules;
|
||||
std::string ErrorMessage;
|
||||
|
||||
//If getAllModules gives an error then this isn't a proper
|
||||
//bytecode archive
|
||||
if ( getAllModules( Modules, &ErrorMessage ) ) return false;
|
||||
|
||||
//Finally, if we find any bytecode modules then this is a proper
|
||||
//bytecode archive
|
||||
return Modules.size();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user