Skip to content

Commit 1611f82

Browse files
committed
[AST] Stop using side-table for local discriminators
1 parent d222804 commit 1611f82

File tree

4 files changed

+13
-24
lines changed

4 files changed

+13
-24
lines changed

include/swift/AST/Decl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2150,6 +2150,7 @@ class ValueDecl : public Decl {
21502150
DeclName Name;
21512151
SourceLoc NameLoc;
21522152
llvm::PointerIntPair<Type, 3, OptionalEnum<AccessLevel>> TypeAndAccess;
2153+
unsigned LocalDiscriminator = 0;
21532154

21542155
private:
21552156
bool isUsableFromInline() const;

lib/AST/ASTContext.cpp

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -223,10 +223,6 @@ FOR_KNOWN_FOUNDATION_TYPES(CACHE_FOUNDATION_DECL)
223223
/// \brief Map from Swift declarations to brief comments.
224224
llvm::DenseMap<const Decl *, StringRef> BriefComments;
225225

226-
/// \brief Map from local declarations to their discriminators.
227-
/// Missing entries implicitly have value 0.
228-
llvm::DenseMap<const ValueDecl *, unsigned> LocalDiscriminators;
229-
230226
/// \brief Map from declarations to foreign error conventions.
231227
/// This applies to both actual imported functions and to @objc functions.
232228
llvm::DenseMap<const AbstractFunctionDecl *,
@@ -1769,24 +1765,6 @@ void ASTContext::setBriefComment(const Decl *D, StringRef Comment) {
17691765
Impl.BriefComments[D] = Comment;
17701766
}
17711767

1772-
unsigned ValueDecl::getLocalDiscriminator() const {
1773-
assert(getDeclContext()->isLocalContext());
1774-
auto &discriminators = getASTContext().Impl.LocalDiscriminators;
1775-
auto it = discriminators.find(this);
1776-
if (it == discriminators.end())
1777-
return 0;
1778-
return it->second;
1779-
}
1780-
1781-
void ValueDecl::setLocalDiscriminator(unsigned index) {
1782-
assert(getDeclContext()->isLocalContext());
1783-
if (!index) {
1784-
assert(!getASTContext().Impl.LocalDiscriminators.count(this));
1785-
return;
1786-
}
1787-
getASTContext().Impl.LocalDiscriminators.insert({this, index});
1788-
}
1789-
17901768
NormalProtocolConformance *
17911769
ASTContext::getBehaviorConformance(Type conformingType,
17921770
ProtocolDecl *protocol,
@@ -2031,7 +2009,6 @@ size_t ASTContext::getTotalMemory() const {
20312009
llvm::capacity_in_bytes(Impl.ModuleLoaders) +
20322010
llvm::capacity_in_bytes(Impl.RawComments) +
20332011
llvm::capacity_in_bytes(Impl.BriefComments) +
2034-
llvm::capacity_in_bytes(Impl.LocalDiscriminators) +
20352012
llvm::capacity_in_bytes(Impl.ModuleTypes) +
20362013
llvm::capacity_in_bytes(Impl.GenericParamTypes) +
20372014
// Impl.GenericFunctionTypes ?

lib/AST/Decl.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1680,6 +1680,16 @@ bool ValueDecl::needsCapture() const {
16801680
return !isa<TypeDecl>(this);
16811681
}
16821682

1683+
unsigned ValueDecl::getLocalDiscriminator() const {
1684+
return LocalDiscriminator;
1685+
}
1686+
1687+
void ValueDecl::setLocalDiscriminator(unsigned index) {
1688+
assert(getDeclContext()->isLocalContext());
1689+
assert(LocalDiscriminator == 0 && "LocalDiscriminator is set multiple times");
1690+
LocalDiscriminator = index;
1691+
}
1692+
16831693
ValueDecl *ValueDecl::getOverriddenDecl() const {
16841694
if (auto fd = dyn_cast<FuncDecl>(this))
16851695
return fd->getOverriddenDecl();

lib/Serialization/ModuleFile.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2018,7 +2018,8 @@ ModuleFile::getLocalTypeDecls(SmallVectorImpl<TypeDecl *> &results) {
20182018
for (auto entry : LocalTypeDecls->data()) {
20192019
auto DeclID = entry.first;
20202020
auto TD = cast<TypeDecl>(getDecl(DeclID));
2021-
TD->setLocalDiscriminator(entry.second);
2021+
assert(entry.second == TD->getLocalDiscriminator());
2022+
// TD->setLocalDiscriminator(entry.second);
20222023
results.push_back(TD);
20232024
}
20242025
}

0 commit comments

Comments
 (0)