[Serialization] Add extra counters and PrettyStackTraces.

And consolidate two slightly different subclasses of PrettyStackTrace
that mostly did the same thing.
This commit is contained in:
Jordan Rose
2017-06-29 16:35:26 -07:00
parent f2dbd65fec
commit 7e043cf7ce
3 changed files with 48 additions and 43 deletions

View File

@@ -27,7 +27,6 @@
#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/OnDiskHashTable.h"
#include "llvm/Support/PrettyStackTrace.h"
using namespace swift;
using namespace swift::serialization;
@@ -297,19 +296,6 @@ std::string ModuleFile::Dependency::getPrettyPrintedPath() const {
return output;
}
namespace {
class PrettyModuleFileDeserialization : public llvm::PrettyStackTraceEntry {
const ModuleFile &File;
public:
explicit PrettyModuleFileDeserialization(const ModuleFile &file)
: File(file) {}
void print(raw_ostream &os) const override {
os << "While reading from " << File.getModuleFilename() << "\n";
}
};
} // end anonymous namespace
/// Used to deserialize entries in the on-disk decl hash table.
class ModuleFile::DeclTableInfo {
public:
@@ -918,7 +904,7 @@ ModuleFile::ModuleFile(
assert(getStatus() == Status::Valid);
Bits.IsFramework = isFramework;
PrettyModuleFileDeserialization stackEntry(*this);
PrettyStackTraceModuleFile stackEntry(*this);
llvm::BitstreamCursor cursor{ModuleInputBuffer->getMemBufferRef()};
@@ -1188,7 +1174,7 @@ ModuleFile::ModuleFile(
Status ModuleFile::associateWithFileContext(FileUnit *file,
SourceLoc diagLoc) {
PrettyModuleFileDeserialization stackEntry(*this);
PrettyStackTraceModuleFile stackEntry(*this);
assert(getStatus() == Status::Valid && "invalid module file");
assert(!FileContext && "already associated with an AST module");
@@ -1303,7 +1289,7 @@ ModuleFile::~ModuleFile() { }
void ModuleFile::lookupValue(DeclName name,
SmallVectorImpl<ValueDecl*> &results) {
PrettyModuleFileDeserialization stackEntry(*this);
PrettyStackTraceModuleFile stackEntry(*this);
if (TopLevelDecls) {
// Find top-level declarations with the given name.
@@ -1347,7 +1333,7 @@ void ModuleFile::lookupValue(DeclName name,
}
TypeDecl *ModuleFile::lookupLocalType(StringRef MangledName) {
PrettyModuleFileDeserialization stackEntry(*this);
PrettyStackTraceModuleFile stackEntry(*this);
if (!LocalTypeDecls)
return nullptr;
@@ -1361,7 +1347,7 @@ TypeDecl *ModuleFile::lookupLocalType(StringRef MangledName) {
TypeDecl *ModuleFile::lookupNestedType(Identifier name,
const ValueDecl *parent) {
PrettyModuleFileDeserialization stackEntry(*this);
PrettyStackTraceModuleFile stackEntry(*this);
if (!NestedTypeDecls)
return nullptr;
@@ -1387,7 +1373,7 @@ TypeDecl *ModuleFile::lookupNestedType(Identifier name,
}
OperatorDecl *ModuleFile::lookupOperator(Identifier name, DeclKind fixity) {
PrettyModuleFileDeserialization stackEntry(*this);
PrettyStackTraceModuleFile stackEntry(*this);
if (!OperatorDecls)
return nullptr;
@@ -1407,7 +1393,7 @@ OperatorDecl *ModuleFile::lookupOperator(Identifier name, DeclKind fixity) {
}
PrecedenceGroupDecl *ModuleFile::lookupPrecedenceGroup(Identifier name) {
PrettyModuleFileDeserialization stackEntry(*this);
PrettyStackTraceModuleFile stackEntry(*this);
if (!PrecedenceGroupDecls)
return nullptr;
@@ -1424,7 +1410,7 @@ PrecedenceGroupDecl *ModuleFile::lookupPrecedenceGroup(Identifier name) {
void ModuleFile::getImportedModules(
SmallVectorImpl<ModuleDecl::ImportedModule> &results,
ModuleDecl::ImportFilter filter) {
PrettyModuleFileDeserialization stackEntry(*this);
PrettyStackTraceModuleFile stackEntry(*this);
for (auto &dep : Dependencies) {
if (filter != ModuleDecl::ImportFilter::All &&
@@ -1506,7 +1492,7 @@ void ModuleFile::getImportDecls(SmallVectorImpl<Decl *> &Results) {
void ModuleFile::lookupVisibleDecls(ModuleDecl::AccessPathTy accessPath,
VisibleDeclConsumer &consumer,
NLKind lookupKind) {
PrettyModuleFileDeserialization stackEntry(*this);
PrettyStackTraceModuleFile stackEntry(*this);
assert(accessPath.size() <= 1 && "can only refer to top-level decls");
if (!TopLevelDecls)
@@ -1542,7 +1528,7 @@ void ModuleFile::lookupVisibleDecls(ModuleDecl::AccessPathTy accessPath,
}
void ModuleFile::loadExtensions(NominalTypeDecl *nominal) {
PrettyModuleFileDeserialization stackEntry(*this);
PrettyStackTraceModuleFile stackEntry(*this);
if (!ExtensionDecls)
return;
@@ -1609,7 +1595,7 @@ void ModuleFile::loadObjCMethods(
void ModuleFile::lookupClassMember(ModuleDecl::AccessPathTy accessPath,
DeclName name,
SmallVectorImpl<ValueDecl*> &results) {
PrettyModuleFileDeserialization stackEntry(*this);
PrettyStackTraceModuleFile stackEntry(*this);
assert(accessPath.size() <= 1 && "can only refer to top-level decls");
if (!ClassMembersByName)
@@ -1658,7 +1644,7 @@ void ModuleFile::lookupClassMember(ModuleDecl::AccessPathTy accessPath,
void ModuleFile::lookupClassMembers(ModuleDecl::AccessPathTy accessPath,
VisibleDeclConsumer &consumer) {
PrettyModuleFileDeserialization stackEntry(*this);
PrettyStackTraceModuleFile stackEntry(*this);
assert(accessPath.size() <= 1 && "can only refer to top-level decls");
if (!ClassMembersByName)
@@ -1714,7 +1700,7 @@ ModuleFile::collectLinkLibraries(ModuleDecl::LinkLibraryCallback callback) const
}
void ModuleFile::getTopLevelDecls(SmallVectorImpl<Decl *> &results) {
PrettyModuleFileDeserialization stackEntry(*this);
PrettyStackTraceModuleFile stackEntry(*this);
if (PrecedenceGroupDecls) {
for (auto entry : PrecedenceGroupDecls->data()) {
for (auto item : entry)
@@ -1754,7 +1740,7 @@ void ModuleFile::getTopLevelDecls(SmallVectorImpl<Decl *> &results) {
void
ModuleFile::getLocalTypeDecls(SmallVectorImpl<TypeDecl *> &results) {
PrettyModuleFileDeserialization stackEntry(*this);
PrettyStackTraceModuleFile stackEntry(*this);
if (!LocalTypeDecls)
return;
@@ -1770,7 +1756,7 @@ void ModuleFile::getDisplayDecls(SmallVectorImpl<Decl *> &results) {
if (ShadowedModule)
ShadowedModule->getDisplayDecls(results);
PrettyModuleFileDeserialization stackEntry(*this);
PrettyStackTraceModuleFile stackEntry(*this);
getImportDecls(results);
getTopLevelDecls(results);
}