mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Rename accessor kinds from IsGetter -> IsGet, etc.
Introduce some metaprogramming of accessors and generally prepare for storing less-structured accessor lists. NFC except for a change to the serialization format.
This commit is contained in:
@@ -473,9 +473,11 @@ static const Decl *getDeclForContext(const DeclContext *DC) {
|
||||
namespace {
|
||||
struct Accessors {
|
||||
StorageKind Kind;
|
||||
FuncDecl *Get = nullptr, *Set = nullptr, *MaterializeForSet = nullptr;
|
||||
FuncDecl *Address = nullptr, *MutableAddress = nullptr;
|
||||
FuncDecl *WillSet = nullptr, *DidSet = nullptr;
|
||||
SmallVector<AccessorDecl *, 8> Decls;
|
||||
|
||||
void add(AccessorDecl *accessor) {
|
||||
if (accessor) Decls.push_back(accessor);
|
||||
}
|
||||
};
|
||||
} // end anonymous namespace
|
||||
|
||||
@@ -506,8 +508,8 @@ static Accessors getAccessors(const AbstractStorageDecl *storage) {
|
||||
case AbstractStorageDecl::Addressed:
|
||||
case AbstractStorageDecl::AddressedWithTrivialAccessors:
|
||||
case AbstractStorageDecl::ComputedWithMutableAddress:
|
||||
accessors.Address = storage->getAddressor();
|
||||
accessors.MutableAddress = storage->getMutableAddressor();
|
||||
accessors.add(storage->getAddressor());
|
||||
accessors.add(storage->getMutableAddressor());
|
||||
if (storageKind == AbstractStorageDecl::Addressed)
|
||||
return accessors;
|
||||
goto getset;
|
||||
@@ -515,16 +517,16 @@ static Accessors getAccessors(const AbstractStorageDecl *storage) {
|
||||
case AbstractStorageDecl::StoredWithObservers:
|
||||
case AbstractStorageDecl::InheritedWithObservers:
|
||||
case AbstractStorageDecl::AddressedWithObservers:
|
||||
accessors.WillSet = storage->getWillSetFunc();
|
||||
accessors.DidSet = storage->getDidSetFunc();
|
||||
accessors.add(storage->getWillSetFunc());
|
||||
accessors.add(storage->getDidSetFunc());
|
||||
goto getset;
|
||||
|
||||
case AbstractStorageDecl::StoredWithTrivialAccessors:
|
||||
case AbstractStorageDecl::Computed:
|
||||
getset:
|
||||
accessors.Get = storage->getGetter();
|
||||
accessors.Set = storage->getSetter();
|
||||
accessors.MaterializeForSet = storage->getMaterializeForSetFunc();
|
||||
accessors.add(storage->getGetter());
|
||||
accessors.add(storage->getSetter());
|
||||
accessors.add(storage->getMaterializeForSetFunc());
|
||||
return accessors;
|
||||
}
|
||||
llvm_unreachable("bad storage kind");
|
||||
@@ -1820,16 +1822,9 @@ void Serializer::writeDefaultWitnessTable(const ProtocolDecl *proto,
|
||||
|
||||
static serialization::AccessorKind getStableAccessorKind(swift::AccessorKind K){
|
||||
switch (K) {
|
||||
#define CASE(NAME) \
|
||||
case swift::AccessorKind::Is##NAME: return serialization::NAME;
|
||||
CASE(Getter)
|
||||
CASE(Setter)
|
||||
CASE(WillSet)
|
||||
CASE(DidSet)
|
||||
CASE(MaterializeForSet)
|
||||
CASE(Addressor)
|
||||
CASE(MutableAddressor)
|
||||
#undef CASE
|
||||
#define ACCESSOR(ID) \
|
||||
case swift::AccessorKind::ID: return serialization::ID;
|
||||
#include "swift/AST/AccessorKinds.def"
|
||||
}
|
||||
|
||||
llvm_unreachable("Unhandled AccessorKind in switch.");
|
||||
@@ -3117,9 +3112,11 @@ void Serializer::writeDecl(const Decl *D) {
|
||||
getRawStableAccessLevel(var->getSetterFormalAccess());
|
||||
|
||||
Type ty = var->getInterfaceType();
|
||||
SmallVector<TypeID, 2> dependencies;
|
||||
SmallVector<TypeID, 2> accessorsAndDependencies;
|
||||
for (auto accessor : accessors.Decls)
|
||||
accessorsAndDependencies.push_back(addDeclRef(accessor));
|
||||
for (Type dependency : collectDependenciesFromType(ty->getCanonicalType()))
|
||||
dependencies.push_back(addTypeRef(dependency));
|
||||
accessorsAndDependencies.push_back(addTypeRef(dependency));
|
||||
|
||||
unsigned abbrCode = DeclTypeAbbrCodes[VarLayout::Code];
|
||||
VarLayout::emitRecord(Out, ScratchRecord, abbrCode,
|
||||
@@ -3133,17 +3130,11 @@ void Serializer::writeDecl(const Decl *D) {
|
||||
var->isGetterMutating(),
|
||||
var->isSetterMutating(),
|
||||
(unsigned) accessors.Kind,
|
||||
accessors.Decls.size(),
|
||||
addTypeRef(ty),
|
||||
addDeclRef(accessors.Get),
|
||||
addDeclRef(accessors.Set),
|
||||
addDeclRef(accessors.MaterializeForSet),
|
||||
addDeclRef(accessors.Address),
|
||||
addDeclRef(accessors.MutableAddress),
|
||||
addDeclRef(accessors.WillSet),
|
||||
addDeclRef(accessors.DidSet),
|
||||
addDeclRef(var->getOverriddenDecl()),
|
||||
rawAccessLevel, rawSetterAccessLevel,
|
||||
dependencies);
|
||||
accessorsAndDependencies);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -3336,15 +3327,19 @@ void Serializer::writeDecl(const Decl *D) {
|
||||
|
||||
auto contextID = addDeclContextRef(subscript->getDeclContext());
|
||||
|
||||
Accessors accessors = getAccessors(subscript);
|
||||
|
||||
SmallVector<IdentifierID, 4> nameComponentsAndDependencies;
|
||||
for (auto argName : subscript->getFullName().getArgumentNames())
|
||||
nameComponentsAndDependencies.push_back(addDeclBaseNameRef(argName));
|
||||
|
||||
for (auto accessor : accessors.Decls)
|
||||
nameComponentsAndDependencies.push_back(addDeclRef(accessor));
|
||||
|
||||
Type ty = subscript->getInterfaceType();
|
||||
for (Type dependency : collectDependenciesFromType(ty->getCanonicalType()))
|
||||
nameComponentsAndDependencies.push_back(addTypeRef(dependency));
|
||||
|
||||
Accessors accessors = getAccessors(subscript);
|
||||
uint8_t rawAccessLevel =
|
||||
getRawStableAccessLevel(subscript->getFormalAccess());
|
||||
uint8_t rawSetterAccessLevel = rawAccessLevel;
|
||||
@@ -3360,16 +3355,10 @@ void Serializer::writeDecl(const Decl *D) {
|
||||
subscript->isGetterMutating(),
|
||||
subscript->isSetterMutating(),
|
||||
(unsigned) accessors.Kind,
|
||||
accessors.Decls.size(),
|
||||
addGenericEnvironmentRef(
|
||||
subscript->getGenericEnvironment()),
|
||||
addTypeRef(ty),
|
||||
addDeclRef(accessors.Get),
|
||||
addDeclRef(accessors.Set),
|
||||
addDeclRef(accessors.MaterializeForSet),
|
||||
addDeclRef(accessors.Address),
|
||||
addDeclRef(accessors.MutableAddress),
|
||||
addDeclRef(accessors.WillSet),
|
||||
addDeclRef(accessors.DidSet),
|
||||
addDeclRef(subscript->getOverriddenDecl()),
|
||||
rawAccessLevel,
|
||||
rawSetterAccessLevel,
|
||||
|
||||
Reference in New Issue
Block a user