@@ -1332,22 +1332,21 @@ void PrintAST::printGenericSignature(const GenericSignature *genericSig,
1332
1332
// print everything
1333
1333
[&](const Requirement &) { return true ; });
1334
1334
}
1335
+
1335
1336
void PrintAST::printGenericSignature (
1336
1337
const GenericSignature *genericSig, unsigned flags,
1337
1338
llvm::function_ref<bool (const Requirement &)> filter) {
1339
+ auto requirements = genericSig->getRequirements ();
1340
+
1338
1341
if (flags & InnermostOnly) {
1339
1342
auto genericParams = genericSig->getInnermostGenericParams ();
1340
- unsigned depth = genericParams[0 ]->getDepth ();
1341
- SmallVector<Requirement, 2 > requirementsAtDepth;
1342
- getRequirementsAtDepth (genericSig, depth, requirementsAtDepth);
1343
1343
1344
- printSingleDepthOfGenericSignature (genericParams, requirementsAtDepth ,
1345
- flags, filter);
1344
+ printSingleDepthOfGenericSignature (genericParams, requirements, flags ,
1345
+ filter);
1346
1346
return ;
1347
1347
}
1348
1348
1349
1349
auto genericParams = genericSig->getGenericParams ();
1350
- auto requirements = genericSig->getRequirements ();
1351
1350
1352
1351
if (!Options.PrintInSILBody ) {
1353
1352
printSingleDepthOfGenericSignature (genericParams, requirements, flags,
@@ -1963,15 +1962,24 @@ void PrintAST::printMembers(ArrayRef<Decl *> members, bool needComma,
1963
1962
}
1964
1963
1965
1964
void PrintAST::printGenericDeclGenericParams (GenericContext *decl) {
1966
- if (decl->getGenericParams ())
1965
+ if (decl->isGeneric ())
1967
1966
if (auto GenericSig = decl->getGenericSignature ())
1968
1967
printGenericSignature (GenericSig, PrintParams | InnermostOnly);
1969
1968
}
1970
1969
1971
1970
void PrintAST::printGenericDeclGenericRequirements (GenericContext *decl) {
1972
- if (decl->getGenericParams ())
1973
- if (auto GenericSig = decl->getGenericSignature ())
1974
- printGenericSignature (GenericSig, PrintRequirements | InnermostOnly);
1971
+ if (decl->isGeneric ()) {
1972
+ if (auto genericSig = decl->getGenericSignature ()) {
1973
+ auto *baseGenericSig = decl->getParent ()
1974
+ ->getGenericSignatureOfContext ();
1975
+ printGenericSignature (genericSig, PrintRequirements,
1976
+ [baseGenericSig](const Requirement &req) {
1977
+ if (baseGenericSig)
1978
+ return !baseGenericSig->isRequirementSatisfied (req);
1979
+ return true ;
1980
+ });
1981
+ }
1982
+ }
1975
1983
}
1976
1984
1977
1985
void PrintAST::printInherited (const Decl *decl) {
@@ -2112,7 +2120,7 @@ void PrintAST::printExtension(ExtensionDecl *decl) {
2112
2120
auto *baseGenericSig = decl->getExtendedNominal ()->getGenericSignature ();
2113
2121
assert (baseGenericSig &&
2114
2122
" an extension can't be generic if the base type isn't" );
2115
- printGenericSignature (genericSig, PrintRequirements | InnermostOnly ,
2123
+ printGenericSignature (genericSig, PrintRequirements,
2116
2124
[baseGenericSig](const Requirement &req) -> bool {
2117
2125
// Only include constraints that are not satisfied by the base type.
2118
2126
return !baseGenericSig->isRequirementSatisfied (req);
0 commit comments