mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
[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:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user