@@ -100,7 +100,7 @@ class AvailabilityDomain final {
100100 using InlineDomainPtr =
101101 llvm::PointerEmbeddedInt<uint32_t , InlineDomain::ReprBits>;
102102 using Storage =
103- llvm::PointerUnion<CustomAvailabilityDomain *, InlineDomainPtr>;
103+ llvm::PointerUnion<const CustomAvailabilityDomain *, InlineDomainPtr>;
104104 Storage storage;
105105
106106 AvailabilityDomain (Kind kind)
@@ -111,7 +111,8 @@ class AvailabilityDomain final {
111111 AvailabilityDomain (PlatformKind platform)
112112 : storage(InlineDomain(Kind::Platform, platform).asInteger()) {};
113113
114- AvailabilityDomain (CustomAvailabilityDomain *domain) : storage(domain) {};
114+ AvailabilityDomain (const CustomAvailabilityDomain *domain)
115+ : storage(domain) {};
115116
116117 AvailabilityDomain (Storage storage) : storage(storage) {};
117118
@@ -122,9 +123,9 @@ class AvailabilityDomain final {
122123 : std::nullopt ;
123124 }
124125
125- CustomAvailabilityDomain *getCustomDomain () const {
126+ const CustomAvailabilityDomain *getCustomDomain () const {
126127 ASSERT (isCustom ());
127- return storage.get <CustomAvailabilityDomain *>();
128+ return storage.get <const CustomAvailabilityDomain *>();
128129 }
129130
130131public:
@@ -152,7 +153,7 @@ class AvailabilityDomain final {
152153 return AvailabilityDomain (Kind::Embedded);
153154 }
154155
155- static AvailabilityDomain forCustom (CustomAvailabilityDomain *domain) {
156+ static AvailabilityDomain forCustom (const CustomAvailabilityDomain *domain) {
156157 return AvailabilityDomain (domain);
157158 }
158159
@@ -294,7 +295,7 @@ struct StableAvailabilityDomainComparator {
294295};
295296
296297// / Represents an availability domain that has been defined in a module.
297- class CustomAvailabilityDomain : public ASTAllocated <CustomAvailabilityDomain> {
298+ class CustomAvailabilityDomain : public llvm ::FoldingSetNode {
298299public:
299300 enum class Kind {
300301 // / A domain that is known to be enabled at compile time.
@@ -313,12 +314,20 @@ class CustomAvailabilityDomain : public ASTAllocated<CustomAvailabilityDomain> {
313314 CustomAvailabilityDomain (Identifier name, ModuleDecl *mod, Kind kind);
314315
315316public:
316- static CustomAvailabilityDomain *create ( const ASTContext &ctx, StringRef name ,
317- ModuleDecl *mod, Kind kind);
317+ static const CustomAvailabilityDomain *get (StringRef name, ModuleDecl *mod ,
318+ Kind kind, const ASTContext &ctx );
318319
319320 Identifier getName () const { return name; }
320321 Kind getKind () const { return kind; }
321322 ModuleDecl *getModule () const { return mod; }
323+
324+ // / Uniquing for `ASTContext`.
325+ static void Profile (llvm::FoldingSetNodeID &ID, Identifier name,
326+ ModuleDecl *mod, Kind kind);
327+
328+ void Profile (llvm::FoldingSetNodeID &ID) const {
329+ Profile (ID, name, mod, kind);
330+ }
322331};
323332
324333// / Represents either a resolved availability domain or an identifier written
0 commit comments