Skip to content

Commit bdc37c9

Browse files
committed
[nfc][cxx-interop] Create and use custom metadata builder, visitor for foreign reference types.
1 parent 96086a0 commit bdc37c9

File tree

2 files changed

+38
-10
lines changed

2 files changed

+38
-10
lines changed

lib/IRGen/ForeignClassMetadataVisitor.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,28 @@ class ForeignClassMetadataScanner : public ForeignClassMetadataVisitor<Impl> {
7171
}
7272
};
7373

74+
template <class Impl>
75+
class ForeignReferenceTypeMetadataVisitor
76+
: public NominalMetadataVisitor<Impl> {
77+
using super = NominalMetadataVisitor<Impl>;
78+
protected:
79+
ClassDecl *Target;
80+
using super::asImpl;
81+
public:
82+
ForeignReferenceTypeMetadataVisitor(IRGenModule &IGM, ClassDecl *target)
83+
: super(IGM), Target(target) {}
84+
85+
void layout() {
86+
super::layout();
87+
asImpl().addNominalTypeDescriptor();
88+
asImpl().addReservedWord();
89+
}
90+
91+
CanType getTargetType() const {
92+
return Target->getDeclaredType()->getCanonicalType();
93+
}
94+
};
95+
7496
} // end namespace irgen
7597
} // end namespace swift
7698

lib/IRGen/GenMeta.cpp

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5410,21 +5410,21 @@ namespace {
54105410
}
54115411
};
54125412

5413-
template<class Impl>
5413+
class ForeignClassMetadataBuilder;
54145414
class ForeignClassMetadataBuilderBase :
5415-
public ForeignClassMetadataVisitor<Impl> {
5415+
public ForeignClassMetadataVisitor<ForeignClassMetadataBuilder> {
54165416
protected:
54175417
ConstantStructBuilder &B;
54185418

54195419
ForeignClassMetadataBuilderBase(IRGenModule &IGM, ClassDecl *target,
54205420
ConstantStructBuilder &B)
5421-
: ForeignClassMetadataVisitor<Impl>(IGM, target), B(B) {}
5421+
: ForeignClassMetadataVisitor(IGM, target), B(B) {}
54225422
};
54235423

54245424
/// A builder for ForeignClassMetadata.
54255425
class ForeignClassMetadataBuilder :
54265426
public ForeignMetadataBuilderBase<ForeignClassMetadataBuilder,
5427-
ForeignClassMetadataBuilderBase<ForeignClassMetadataBuilder>> {
5427+
ForeignClassMetadataBuilderBase> {
54285428
public:
54295429
ForeignClassMetadataBuilder(IRGenModule &IGM, ClassDecl *target,
54305430
ConstantStructBuilder &B)
@@ -5521,10 +5521,21 @@ namespace {
55215521
}
55225522
};
55235523

5524+
class ForeignReferenceTypeMetadataBuilder;
5525+
class ForeignReferenceTypeMetadataBuilderBase :
5526+
public ForeignReferenceTypeMetadataVisitor<ForeignReferenceTypeMetadataBuilder> {
5527+
protected:
5528+
ConstantStructBuilder &B;
5529+
5530+
ForeignReferenceTypeMetadataBuilderBase(IRGenModule &IGM, ClassDecl *target,
5531+
ConstantStructBuilder &B)
5532+
: ForeignReferenceTypeMetadataVisitor(IGM, target), B(B) {}
5533+
};
5534+
55245535
/// A builder for ForeignReferenceTypeMetadata.
55255536
class ForeignReferenceTypeMetadataBuilder :
55265537
public ForeignMetadataBuilderBase<ForeignReferenceTypeMetadataBuilder,
5527-
ForeignClassMetadataBuilderBase<ForeignReferenceTypeMetadataBuilder>> {
5538+
ForeignReferenceTypeMetadataBuilderBase> {
55285539
public:
55295540
ForeignReferenceTypeMetadataBuilder(IRGenModule &IGM, ClassDecl *target,
55305541
ConstantStructBuilder &B)
@@ -5560,11 +5571,6 @@ namespace {
55605571
PointerAuthEntity::Special::TypeDescriptor);
55615572
}
55625573

5563-
void addSuperclass() {
5564-
assert(!Target->hasSuperclass() &&
5565-
"foreign reference types should not have superclasses.");
5566-
}
5567-
55685574
void addReservedWord() {
55695575
B.addNullPointer(IGM.Int8PtrTy);
55705576
}

0 commit comments

Comments
 (0)