Skip to content

Commit 46a4d56

Browse files
committed
Bring back the isOpaqueType parameter for deserialization
1 parent 4a7fb6f commit 46a4d56

File tree

5 files changed

+26
-10
lines changed

5 files changed

+26
-10
lines changed

include/swift/AST/Decl.h

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3789,11 +3789,14 @@ class GenericTypeParamDecl final
37893789
/// \param depth The generic signature depth.
37903790
/// \param index The index of the parameter in the generic signature.
37913791
/// \param paramKind The kind of generic type parameter this is.
3792+
/// \param isOpaqueType Whether the generic parameter is written as an opaque
3793+
/// parameter e.g 'some Collection'.
37923794
/// \param opaqueTypeRepr The TypeRepr of an opaque generic parameter.
37933795
///
37943796
GenericTypeParamDecl(DeclContext *dc, Identifier name, SourceLoc nameLoc,
37953797
SourceLoc specifierLoc, unsigned depth, unsigned index,
3796-
GenericTypeParamKind paramKind, TypeRepr *opaqueTypeRepr);
3798+
GenericTypeParamKind paramKind, bool isOpaqueType,
3799+
TypeRepr *opaqueTypeRepr);
37973800

37983801
/// Construct a new generic type parameter.
37993802
///
@@ -3808,12 +3811,15 @@ class GenericTypeParamDecl final
38083811
/// \param depth The generic signature depth.
38093812
/// \param index The index of the parameter in the generic signature.
38103813
/// \param paramKind The kind of generic type parameter this is.
3814+
/// \param isOpaqueType Whether the generic parameter is written as an opaque
3815+
/// parameter e.g 'some Collection'.
38113816
/// \param opaqueTypeRepr The TypeRepr of an opaque generic parameter.
38123817
///
38133818
static GenericTypeParamDecl *create(DeclContext *dc, Identifier name,
38143819
SourceLoc nameLoc, SourceLoc specifierLoc,
38153820
unsigned depth, unsigned index,
38163821
GenericTypeParamKind paramKind,
3822+
bool isOpaqueType,
38173823
TypeRepr *opaqueTypeRepr);
38183824

38193825
public:
@@ -3825,7 +3831,7 @@ class GenericTypeParamDecl final
38253831
SourceLoc specifierLoc, unsigned depth, unsigned index,
38263832
GenericTypeParamKind paramKind)
38273833
: GenericTypeParamDecl(dc, name, nameLoc, specifierLoc, depth, index,
3828-
paramKind, nullptr) {
3834+
paramKind, false, nullptr) {
38293835
}
38303836

38313837
/// Construct a deserialized generic type parameter.
@@ -3838,10 +3844,13 @@ class GenericTypeParamDecl final
38383844
/// \param depth The generic signature depth.
38393845
/// \param index The index of the parameter in the generic signature.
38403846
/// \param paramKind The kind of generic type parameter this is.
3847+
/// \param isOpaqueType Whether the generic parameter is written as an opaque
3848+
/// parameter e.g 'some Collection'.
38413849
///
38423850
static GenericTypeParamDecl *
38433851
createDeserialized(DeclContext *dc, Identifier name, unsigned depth,
3844-
unsigned index, GenericTypeParamKind paramKind);
3852+
unsigned index, GenericTypeParamKind paramKind,
3853+
bool isOpaqueType);
38453854

38463855
/// Construct a new parsed generic type parameter.
38473856
///

lib/AST/Decl.cpp

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5649,18 +5649,20 @@ GenericTypeParamDecl::GenericTypeParamDecl(DeclContext *dc, Identifier name,
56495649
SourceLoc specifierLoc,
56505650
unsigned depth, unsigned index,
56515651
GenericTypeParamKind paramKind,
5652+
bool isOpaqueType,
56525653
TypeRepr *opaqueTypeRepr)
56535654
: TypeDecl(DeclKind::GenericTypeParam, dc, name, nameLoc, {}) {
56545655
ASSERT(!(specifierLoc &&
56555656
!(paramKind == GenericTypeParamKind::Pack || paramKind == GenericTypeParamKind::Value)) &&
56565657
"'each' or 'let' keyword imply a parameter pack or value generic parameter");
5658+
ASSERT(isOpaqueType || !opaqueTypeRepr);
56575659

56585660
Bits.GenericTypeParamDecl.Depth = depth;
56595661
assert(Bits.GenericTypeParamDecl.Depth == depth && "Truncation");
56605662
Bits.GenericTypeParamDecl.Index = index;
56615663
assert(Bits.GenericTypeParamDecl.Index == index && "Truncation");
56625664
Bits.GenericTypeParamDecl.ParamKind = (uint8_t) paramKind;
5663-
Bits.GenericTypeParamDecl.IsOpaqueType = (bool) opaqueTypeRepr;
5665+
Bits.GenericTypeParamDecl.IsOpaqueType = isOpaqueType;
56645666

56655667
if (this->isOpaqueType())
56665668
*getTrailingObjects<TypeRepr *>() = opaqueTypeRepr;
@@ -5675,7 +5677,7 @@ GenericTypeParamDecl::GenericTypeParamDecl(DeclContext *dc, Identifier name,
56755677
GenericTypeParamDecl *GenericTypeParamDecl::create(
56765678
DeclContext *dc, Identifier name, SourceLoc nameLoc, SourceLoc specifierLoc,
56775679
unsigned depth, unsigned index, GenericTypeParamKind paramKind,
5678-
TypeRepr *opaqueTypeRepr) {
5680+
bool isOpaqueType, TypeRepr *opaqueTypeRepr) {
56795681
auto &ctx = dc->getASTContext();
56805682

56815683
auto numTypeReprs = 0;
@@ -5694,14 +5696,15 @@ GenericTypeParamDecl *GenericTypeParamDecl::create(
56945696
auto mem = ctx.Allocate(allocSize, alignof(GenericTypeParamDecl));
56955697
return new (mem)
56965698
GenericTypeParamDecl(dc, name, nameLoc, specifierLoc, depth, index,
5697-
paramKind, opaqueTypeRepr);
5699+
paramKind, isOpaqueType, opaqueTypeRepr);
56985700
}
56995701

57005702
GenericTypeParamDecl *GenericTypeParamDecl::createDeserialized(
57015703
DeclContext *dc, Identifier name, unsigned depth, unsigned index,
5702-
GenericTypeParamKind paramKind) {
5704+
GenericTypeParamKind paramKind, bool isOpaqueType) {
57035705
return GenericTypeParamDecl::create(dc, name, SourceLoc(), SourceLoc(),
57045706
depth, index, paramKind,
5707+
isOpaqueType,
57055708
/*opaqueRepr*/ nullptr);
57065709
}
57075710

@@ -5715,7 +5718,7 @@ GenericTypeParamDecl::createParsed(DeclContext *dc, Identifier name,
57155718
// parameter list.
57165719
return GenericTypeParamDecl::create(
57175720
dc, name, nameLoc, specifierLoc, GenericTypeParamDecl::InvalidDepth,
5718-
index, paramKind, /*opaqueTypeRepr*/ nullptr);
5721+
index, paramKind, /*isOpaqueType*/ false, /*opaqueTypeRepr*/ nullptr);
57195722
}
57205723

57215724
GenericTypeParamDecl *GenericTypeParamDecl::createImplicit(
@@ -5724,6 +5727,7 @@ GenericTypeParamDecl *GenericTypeParamDecl::createImplicit(
57245727
SourceLoc specifierLoc) {
57255728
auto *param = GenericTypeParamDecl::create(dc, name, nameLoc, specifierLoc,
57265729
depth, index, paramKind,
5730+
(bool)opaqueTypeRepr,
57275731
opaqueTypeRepr);
57285732
param->setImplicit();
57295733
return param;

lib/Serialization/Deserialization.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3466,10 +3466,11 @@ class DeclDeserializer {
34663466
StringRef blobData) {
34673467
IdentifierID nameID;
34683468
bool isImplicit;
3469+
bool isOpaqueType;
34693470
TypeID interfaceTypeID;
34703471

34713472
decls_block::GenericTypeParamDeclLayout::readRecord(
3472-
scratch, nameID, isImplicit, interfaceTypeID);
3473+
scratch, nameID, isImplicit, isOpaqueType, interfaceTypeID);
34733474

34743475
auto interfaceTy = MF.getTypeChecked(interfaceTypeID);
34753476
if (!interfaceTy)
@@ -3482,7 +3483,7 @@ class DeclDeserializer {
34823483
auto *DC = MF.getFile();
34833484
auto *genericParam = GenericTypeParamDecl::createDeserialized(
34843485
DC, MF.getIdentifier(nameID), paramTy->getDepth(), paramTy->getIndex(),
3485-
paramTy->getParamKind());
3486+
paramTy->getParamKind(), isOpaqueType);
34863487
declOrOffset = genericParam;
34873488

34883489
if (isImplicit)

lib/Serialization/ModuleFormat.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1497,6 +1497,7 @@ namespace decls_block {
14971497
using GenericTypeParamDeclLayout = BCRecordLayout<GENERIC_TYPE_PARAM_DECL,
14981498
IdentifierIDField, // name
14991499
BCFixed<1>, // implicit flag
1500+
BCFixed<1>, // is opaque?
15001501
TypeIDField // interface type
15011502
>;
15021503

lib/Serialization/Serialization.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4198,6 +4198,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
41984198
S.Out, S.ScratchRecord, abbrCode,
41994199
S.addDeclBaseNameRef(genericParam->getName()),
42004200
genericParam->isImplicit(),
4201+
genericParam->isOpaqueType(),
42014202
S.addTypeRef(genericParam->getDeclaredInterfaceType()->getCanonicalType()));
42024203
}
42034204

0 commit comments

Comments
 (0)