Skip to content

[Request Evaluator] Begin Formalizing Zones #26892

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Aug 28, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions include/swift/AST/ASTTypeIDs.h
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,8 @@ class Type;
struct TypePair;
enum class AncestryFlags : uint8_t;

#define SWIFT_AST_TYPEID_ZONE 1

// Define the AST type zone (zone 1)
#define SWIFT_TYPEID_ZONE SWIFT_AST_TYPEID_ZONE
#define SWIFT_TYPEID_ZONE AST
#define SWIFT_TYPEID_HEADER "swift/AST/ASTTypeIDZone.def"
#include "swift/Basic/DefineTypeIDZone.h"

Expand Down
9 changes: 3 additions & 6 deletions include/swift/AST/AccessRequests.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,24 +97,21 @@ class DefaultAndMaxAccessLevelRequest :
void cacheResult(DefaultAndMax value) const;
};

/// The zone number for access-control requests.
#define SWIFT_ACCESS_REQUESTS_TYPEID_ZONE 11

#define SWIFT_TYPEID_ZONE SWIFT_ACCESS_REQUESTS_TYPEID_ZONE
#define SWIFT_TYPEID_ZONE AccessControl
#define SWIFT_TYPEID_HEADER "swift/AST/AccessTypeIDZone.def"
#include "swift/Basic/DefineTypeIDZone.h"
#undef SWIFT_TYPEID_ZONE
#undef SWIFT_TYPEID_HEADER

// Set up reporting of evaluated requests.
#define SWIFT_TYPEID(RequestType) \
#define SWIFT_REQUEST(Zone, RequestType) \
template<> \
inline void reportEvaluatedRequest(UnifiedStatsReporter &stats, \
const RequestType &request) { \
++stats.getFrontendCounters().RequestType; \
}
#include "swift/AST/AccessTypeIDZone.def"
#undef SWIFT_TYPEID
#undef SWIFT_REQUEST

} // end namespace swift

Expand Down
6 changes: 3 additions & 3 deletions include/swift/AST/AccessTypeIDZone.def
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@
// TypeID zone, for use with the TypeID template.
//
//===----------------------------------------------------------------------===//
SWIFT_TYPEID(AccessLevelRequest)
SWIFT_TYPEID(SetterAccessLevelRequest)
SWIFT_TYPEID(DefaultAndMaxAccessLevelRequest)
SWIFT_REQUEST(AccessControl, AccessLevelRequest)
SWIFT_REQUEST(AccessControl, SetterAccessLevelRequest)
SWIFT_REQUEST(AccessControl, DefaultAndMaxAccessLevelRequest)
2 changes: 1 addition & 1 deletion include/swift/AST/Evaluator.h
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ class Evaluator {
///
/// These functions will be called to evaluate any requests within that
/// zone.
void registerRequestFunctions(uint8_t zoneID,
void registerRequestFunctions(Zone zone,
ArrayRef<AbstractRequestFunction *> functions);

/// Evaluate the given request and produce its result,
Expand Down
9 changes: 3 additions & 6 deletions include/swift/AST/NameLookupRequests.h
Original file line number Diff line number Diff line change
Expand Up @@ -254,10 +254,7 @@ class GetDestructorRequest :
void cacheResult(DestructorDecl *value) const;
};

/// The zone number for name-lookup requests.
#define SWIFT_NAME_LOOKUP_REQUESTS_TYPEID_ZONE 9

#define SWIFT_TYPEID_ZONE SWIFT_NAME_LOOKUP_REQUESTS_TYPEID_ZONE
#define SWIFT_TYPEID_ZONE NameLookup
#define SWIFT_TYPEID_HEADER "swift/AST/NameLookupTypeIDZone.def"
#include "swift/Basic/DefineTypeIDZone.h"
#undef SWIFT_TYPEID_ZONE
Expand All @@ -268,14 +265,14 @@ template<typename Request>
void reportEvaluatedRequest(UnifiedStatsReporter &stats,
const Request &request);

#define SWIFT_TYPEID(RequestType) \
#define SWIFT_REQUEST(Zone, RequestType) \
template<> \
inline void reportEvaluatedRequest(UnifiedStatsReporter &stats, \
const RequestType &request) { \
++stats.getFrontendCounters().RequestType; \
}
#include "swift/AST/NameLookupTypeIDZone.def"
#undef SWIFT_TYPEID
#undef SWIFT_REQUEST

} // end namespace swift

Expand Down
16 changes: 8 additions & 8 deletions include/swift/AST/NameLookupTypeIDZone.def
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@
// TypeID zone, for use with the TypeID template.
//
//===----------------------------------------------------------------------===//
SWIFT_TYPEID(InheritedDeclsReferencedRequest)
SWIFT_TYPEID(UnderlyingTypeDeclsReferencedRequest)
SWIFT_TYPEID(SuperclassDeclRequest)
SWIFT_TYPEID(ExtendedNominalRequest)
SWIFT_TYPEID(SelfBoundsFromWhereClauseRequest)
SWIFT_TYPEID(TypeDeclsFromWhereClauseRequest)
SWIFT_TYPEID(CustomAttrNominalRequest)
SWIFT_TYPEID(GetDestructorRequest)
SWIFT_REQUEST(NameLookup, InheritedDeclsReferencedRequest)
SWIFT_REQUEST(NameLookup, UnderlyingTypeDeclsReferencedRequest)
SWIFT_REQUEST(NameLookup, SuperclassDeclRequest)
SWIFT_REQUEST(NameLookup, ExtendedNominalRequest)
SWIFT_REQUEST(NameLookup, SelfBoundsFromWhereClauseRequest)
SWIFT_REQUEST(NameLookup, TypeDeclsFromWhereClauseRequest)
SWIFT_REQUEST(NameLookup, CustomAttrNominalRequest)
SWIFT_REQUEST(NameLookup, GetDestructorRequest)
9 changes: 3 additions & 6 deletions include/swift/AST/TypeCheckRequests.h
Original file line number Diff line number Diff line change
Expand Up @@ -1150,24 +1150,21 @@ inline bool AnyValue::Holder<Type>::equals(const HolderBase &other) const {

void simple_display(llvm::raw_ostream &out, Type value);

/// The zone number for the type checker.
#define SWIFT_TYPE_CHECKER_REQUESTS_TYPEID_ZONE 10

#define SWIFT_TYPEID_ZONE SWIFT_TYPE_CHECKER_REQUESTS_TYPEID_ZONE
#define SWIFT_TYPEID_ZONE TypeChecker
#define SWIFT_TYPEID_HEADER "swift/AST/TypeCheckerTypeIDZone.def"
#include "swift/Basic/DefineTypeIDZone.h"
#undef SWIFT_TYPEID_ZONE
#undef SWIFT_TYPEID_HEADER

// Set up reporting of evaluated requests.
#define SWIFT_TYPEID(RequestType) \
#define SWIFT_REQUEST(Zone, RequestType) \
template<> \
inline void reportEvaluatedRequest(UnifiedStatsReporter &stats, \
const RequestType &request) { \
++stats.getFrontendCounters().RequestType; \
}
#include "swift/AST/TypeCheckerTypeIDZone.def"
#undef SWIFT_TYPEID
#undef SWIFT_REQUEST

} // end namespace swift

Expand Down
93 changes: 47 additions & 46 deletions include/swift/AST/TypeCheckerTypeIDZone.def
Original file line number Diff line number Diff line change
Expand Up @@ -14,49 +14,50 @@
// TypeID zone, for use with the TypeID template.
//
//===----------------------------------------------------------------------===//
SWIFT_TYPEID(InheritedTypeRequest)
SWIFT_TYPEID(SuperclassTypeRequest)
SWIFT_TYPEID(EnumRawTypeRequest)
SWIFT_TYPEID(OverriddenDeclsRequest)
SWIFT_TYPEID(IsObjCRequest)
SWIFT_TYPEID(InitKindRequest)
SWIFT_TYPEID(ProtocolRequiresClassRequest)
SWIFT_TYPEID(ExistentialConformsToSelfRequest)
SWIFT_TYPEID(ExistentialTypeSupportedRequest)
SWIFT_TYPEID(IsFinalRequest)
SWIFT_TYPEID(IsDynamicRequest)
SWIFT_TYPEID(RequirementRequest)
SWIFT_TYPEID(RequirementSignatureRequest)
SWIFT_TYPEID(DefaultDefinitionTypeRequest)
SWIFT_TYPEID(USRGenerationRequest)
SWIFT_TYPEID(StructuralTypeRequest)
SWIFT_TYPEID(ResilienceExpansionRequest)
SWIFT_TYPEID(DefaultTypeRequest)
SWIFT_TYPEID(MangleLocalTypeDeclRequest)
SWIFT_TYPEID(PropertyWrapperTypeInfoRequest)
SWIFT_TYPEID(PropertyWrapperMutabilityRequest)
SWIFT_TYPEID(AttachedPropertyWrappersRequest)
SWIFT_TYPEID(AttachedPropertyWrapperTypeRequest)
SWIFT_TYPEID(PropertyWrapperBackingPropertyTypeRequest)
SWIFT_TYPEID(PropertyWrapperBackingPropertyInfoRequest)
SWIFT_TYPEID(AttachedFunctionBuilderRequest)
SWIFT_TYPEID(FunctionBuilderTypeRequest)
SWIFT_TYPEID(SelfAccessKindRequest)
SWIFT_TYPEID(IsGetterMutatingRequest)
SWIFT_TYPEID(IsSetterMutatingRequest)
SWIFT_TYPEID(OpaqueReadOwnershipRequest)
SWIFT_TYPEID(LazyStoragePropertyRequest)
SWIFT_TYPEID(TypeCheckFunctionBodyUntilRequest)
SWIFT_TYPEID(StoredPropertiesRequest)
SWIFT_TYPEID(StoredPropertiesAndMissingMembersRequest)
SWIFT_TYPEID(StorageImplInfoRequest)
SWIFT_TYPEID(RequiresOpaqueAccessorsRequest)
SWIFT_TYPEID(RequiresOpaqueModifyCoroutineRequest)
SWIFT_TYPEID(IsAccessorTransparentRequest)
SWIFT_TYPEID(SynthesizeAccessorRequest)
SWIFT_TYPEID(EmittedMembersRequest)
SWIFT_TYPEID(IsImplicitlyUnwrappedOptionalRequest)
SWIFT_TYPEID(ClassAncestryFlagsRequest)
SWIFT_TYPEID(AbstractGenericSignatureRequest)
SWIFT_TYPEID(ExtendedTypeRequest)
SWIFT_TYPEID(FunctionOperatorRequest)

SWIFT_REQUEST(TypeChecker, InheritedTypeRequest)
SWIFT_REQUEST(TypeChecker, SuperclassTypeRequest)
SWIFT_REQUEST(TypeChecker, EnumRawTypeRequest)
SWIFT_REQUEST(TypeChecker, OverriddenDeclsRequest)
SWIFT_REQUEST(TypeChecker, IsObjCRequest)
SWIFT_REQUEST(TypeChecker, InitKindRequest)
SWIFT_REQUEST(TypeChecker, ProtocolRequiresClassRequest)
SWIFT_REQUEST(TypeChecker, ExistentialConformsToSelfRequest)
SWIFT_REQUEST(TypeChecker, ExistentialTypeSupportedRequest)
SWIFT_REQUEST(TypeChecker, IsFinalRequest)
SWIFT_REQUEST(TypeChecker, IsDynamicRequest)
SWIFT_REQUEST(TypeChecker, RequirementRequest)
SWIFT_REQUEST(TypeChecker, RequirementSignatureRequest)
SWIFT_REQUEST(TypeChecker, DefaultDefinitionTypeRequest)
SWIFT_REQUEST(TypeChecker, USRGenerationRequest)
SWIFT_REQUEST(TypeChecker, StructuralTypeRequest)
SWIFT_REQUEST(TypeChecker, ResilienceExpansionRequest)
SWIFT_REQUEST(TypeChecker, DefaultTypeRequest)
SWIFT_REQUEST(TypeChecker, MangleLocalTypeDeclRequest)
SWIFT_REQUEST(TypeChecker, PropertyWrapperTypeInfoRequest)
SWIFT_REQUEST(TypeChecker, PropertyWrapperMutabilityRequest)
SWIFT_REQUEST(TypeChecker, AttachedPropertyWrappersRequest)
SWIFT_REQUEST(TypeChecker, AttachedPropertyWrapperTypeRequest)
SWIFT_REQUEST(TypeChecker, PropertyWrapperBackingPropertyTypeRequest)
SWIFT_REQUEST(TypeChecker, PropertyWrapperBackingPropertyInfoRequest)
SWIFT_REQUEST(TypeChecker, AttachedFunctionBuilderRequest)
SWIFT_REQUEST(TypeChecker, FunctionBuilderTypeRequest)
SWIFT_REQUEST(TypeChecker, SelfAccessKindRequest)
SWIFT_REQUEST(TypeChecker, IsGetterMutatingRequest)
SWIFT_REQUEST(TypeChecker, IsSetterMutatingRequest)
SWIFT_REQUEST(TypeChecker, OpaqueReadOwnershipRequest)
SWIFT_REQUEST(TypeChecker, LazyStoragePropertyRequest)
SWIFT_REQUEST(TypeChecker, TypeCheckFunctionBodyUntilRequest)
SWIFT_REQUEST(TypeChecker, StoredPropertiesRequest)
SWIFT_REQUEST(TypeChecker, StoredPropertiesAndMissingMembersRequest)
SWIFT_REQUEST(TypeChecker, StorageImplInfoRequest)
SWIFT_REQUEST(TypeChecker, RequiresOpaqueAccessorsRequest)
SWIFT_REQUEST(TypeChecker, RequiresOpaqueModifyCoroutineRequest)
SWIFT_REQUEST(TypeChecker, IsAccessorTransparentRequest)
SWIFT_REQUEST(TypeChecker, SynthesizeAccessorRequest)
SWIFT_REQUEST(TypeChecker, EmittedMembersRequest)
SWIFT_REQUEST(TypeChecker, IsImplicitlyUnwrappedOptionalRequest)
SWIFT_REQUEST(TypeChecker, ClassAncestryFlagsRequest)
SWIFT_REQUEST(TypeChecker, AbstractGenericSignatureRequest)
SWIFT_REQUEST(TypeChecker, ExtendedTypeRequest)
SWIFT_REQUEST(TypeChecker, FunctionOperatorRequest)
15 changes: 10 additions & 5 deletions include/swift/Basic/DefineTypeIDZone.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,10 @@

// Define a TypeID where the type name and internal name are the same.
#define SWIFT_TYPEID(Type) SWIFT_TYPEID_NAMED(Type, Type)
#define SWIFT_REQUEST(Zone, Type) SWIFT_TYPEID_NAMED(Type, Type)

// First pass: put all of the names into an enum so we get values for them.
template<> struct TypeIDZoneTypes<SWIFT_TYPEID_ZONE> {
template<> struct TypeIDZoneTypes<Zone::SWIFT_TYPEID_ZONE> {
enum Types : uint8_t {
#define SWIFT_TYPEID_NAMED(Type, Name) Name,
#define SWIFT_TYPEID_TEMPLATE1_NAMED(Template, Name, Param1, Arg1) Name,
Expand All @@ -48,9 +49,10 @@ template<> struct TypeIDZoneTypes<SWIFT_TYPEID_ZONE> {
// Second pass: create specializations of TypeID for these types.
#define SWIFT_TYPEID_NAMED(Type, Name) \
template<> struct TypeID<Type> { \
static const uint8_t zoneID = SWIFT_TYPEID_ZONE; \
static const uint8_t zoneID = \
static_cast<uint8_t>(Zone::SWIFT_TYPEID_ZONE); \
static const uint8_t localID = \
TypeIDZoneTypes<SWIFT_TYPEID_ZONE>::Name; \
TypeIDZoneTypes<Zone::SWIFT_TYPEID_ZONE>::Name; \
\
static const uint64_t value = formTypeID(zoneID, localID); \
\
Expand All @@ -61,8 +63,8 @@ template<> struct TypeID<Type> { \
template<Param1> struct TypeID<Template<Arg1>> { \
private: \
static const uint64_t templateID = \
formTypeID(SWIFT_TYPEID_ZONE, \
TypeIDZoneTypes<SWIFT_TYPEID_ZONE>::Name); \
formTypeID(static_cast<uint8_t>(Zone::SWIFT_TYPEID_ZONE), \
TypeIDZoneTypes<Zone::SWIFT_TYPEID_ZONE>::Name); \
\
public: \
static const uint64_t value = \
Expand All @@ -76,6 +78,9 @@ public: \
template<Param1> const uint64_t TypeID<Template<Arg1>>::value;

#include SWIFT_TYPEID_HEADER

#undef SWIFT_REQUEST

#undef SWIFT_TYPEID_NAMED
#undef SWIFT_TYPEID_TEMPLATE1_NAMED

Expand Down
3 changes: 3 additions & 0 deletions include/swift/Basic/ImplementTypeIDZone.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
#endif

// Define a TypeID where the type name and internal name are the same.
#define SWIFT_REQUEST(Zone, Type) SWIFT_TYPEID_NAMED(Type, Type)
#define SWIFT_TYPEID(Type) SWIFT_TYPEID_NAMED(Type, Type)

// Out-of-line definitions.
Expand All @@ -43,6 +44,8 @@

#include SWIFT_TYPEID_HEADER

#undef SWIFT_REQUEST

#undef SWIFT_TYPEID_NAMED
#undef SWIFT_TYPEID_TEMPLATE1_NAMED

Expand Down
4 changes: 2 additions & 2 deletions include/swift/Basic/Statistics.def
Original file line number Diff line number Diff line change
Expand Up @@ -268,13 +268,13 @@ FRONTEND_STATISTIC(Sema, NumUnloadedLazyIterableDeclContexts)
/// Number of lookups into a module and its imports.

/// All type check requests go into the Sema area.
#define SWIFT_TYPEID(NAME) FRONTEND_STATISTIC(Sema, NAME)
#define SWIFT_REQUEST(ZONE, NAME) FRONTEND_STATISTIC(Sema, NAME)
#include "swift/AST/AccessTypeIDZone.def"
#include "swift/AST/NameLookupTypeIDZone.def"
#include "swift/AST/TypeCheckerTypeIDZone.def"
#include "swift/Sema/IDETypeCheckingRequestIDZone.def"
#include "swift/IDE/IDERequestIDZone.def"
#undef SWIFT_TYPEID
#undef SWIFT_REQUEST

/// The next 10 statistics count 5 kinds of SIL entities present
/// after the SILGen and SILOpt phases. The entities are functions,
Expand Down
20 changes: 18 additions & 2 deletions include/swift/Basic/TypeID.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,22 @@

namespace swift {

enum class Zone : uint8_t {
C = 0,
AST = 1,
AccessControl = 11,
IDETypes = 136,
IDE = 137,
IDETypeChecking = 97,
NameLookup = 9,
TypeChecker = 10,
// N.B. This is not a formal zone and exists solely to support the unit tests.
ArithmeticEvaluator = 255,
};

static_assert(std::is_same<std::underlying_type<Zone>::type, uint8_t>::value,
"underlying type is no longer uint8_t!");

/// Form a unique 64-bit integer value describing the type `T`.
///
/// This template needs to be specialized for every type that can
Expand All @@ -37,15 +53,15 @@ struct TypeID;

/// Template whose specializations provide the set of type IDs within a
/// given zone.
template<uint8_t Zone> struct TypeIDZoneTypes;
template<Zone Zone> struct TypeIDZoneTypes;

/// Form a type ID given a zone and type value.
constexpr uint64_t formTypeID(uint8_t zone, uint8_t type) {
return (uint64_t(zone) << 8) | uint64_t(type);
}

// Define the C type zone (zone 0).
#define SWIFT_TYPEID_ZONE 0
#define SWIFT_TYPEID_ZONE C
#define SWIFT_TYPEID_HEADER "swift/Basic/CTypeIDZone.def"
#include "swift/Basic/DefineTypeIDZone.h"

Expand Down
10 changes: 5 additions & 5 deletions include/swift/IDE/IDERequestIDZone.def
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
// TypeID zone, for use with the TypeID template.
//
//===----------------------------------------------------------------------===//
SWIFT_TYPEID(CursorInfoRequest)
SWIFT_TYPEID(RangeInfoRequest)
SWIFT_TYPEID(ProvideDefaultImplForRequest)
SWIFT_TYPEID(CollectOverriddenDeclsRequest)
SWIFT_TYPEID(ResolveProtocolNameRequest)
SWIFT_REQUEST(IDE, CursorInfoRequest)
SWIFT_REQUEST(IDE, RangeInfoRequest)
SWIFT_REQUEST(IDE, ProvideDefaultImplForRequest)
SWIFT_REQUEST(IDE, CollectOverriddenDeclsRequest)
SWIFT_REQUEST(IDE, ResolveProtocolNameRequest)
7 changes: 3 additions & 4 deletions include/swift/IDE/IDERequests.h
Original file line number Diff line number Diff line change
Expand Up @@ -282,22 +282,21 @@ class ResolveProtocolNameRequest:
};

/// The zone number for the IDE.
#define SWIFT_IDE_REQUESTS_TYPEID_ZONE 137
#define SWIFT_TYPEID_ZONE SWIFT_IDE_REQUESTS_TYPEID_ZONE
#define SWIFT_TYPEID_ZONE IDE
#define SWIFT_TYPEID_HEADER "swift/IDE/IDERequestIDZone.def"
#include "swift/Basic/DefineTypeIDZone.h"
#undef SWIFT_TYPEID_ZONE
#undef SWIFT_TYPEID_HEADER

// Set up reporting of evaluated requests.
#define SWIFT_TYPEID(RequestType) \
#define SWIFT_REQUEST(Zone, RequestType) \
template<> \
inline void reportEvaluatedRequest(UnifiedStatsReporter &stats, \
const RequestType &request) { \
++stats.getFrontendCounters().RequestType; \
}
#include "swift/IDE/IDERequestIDZone.def"
#undef SWIFT_TYPEID
#undef SWIFT_REQUEST

} // end namespace swift

Expand Down
Loading