Skip to content

Commit af50d7e

Browse files
committed
AST: Add allowInverses flag to AbstractGenericSignatureRequest
1 parent 4e84d28 commit af50d7e

26 files changed

+85
-46
lines changed

include/swift/AST/GenericSignature.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -572,7 +572,8 @@ GenericSignature buildGenericSignature(
572572
ASTContext &ctx,
573573
GenericSignature baseSignature,
574574
SmallVector<GenericTypeParamType *, 2> addedParameters,
575-
SmallVector<Requirement, 2> addedRequirements);
575+
SmallVector<Requirement, 2> addedRequirements,
576+
bool allowInverses);
576577

577578
/// Summary of error conditions detected by the Requirement Machine.
578579
enum class GenericSignatureErrorFlags {

include/swift/AST/TypeCheckRequests.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1975,7 +1975,8 @@ class AbstractGenericSignatureRequest :
19751975
public SimpleRequest<AbstractGenericSignatureRequest,
19761976
GenericSignatureWithError (const GenericSignatureImpl *,
19771977
SmallVector<GenericTypeParamType *, 2>,
1978-
SmallVector<Requirement, 2>),
1978+
SmallVector<Requirement, 2>,
1979+
bool),
19791980
RequestFlags::Cached> {
19801981
public:
19811982
using SimpleRequest::SimpleRequest;
@@ -1988,7 +1989,8 @@ class AbstractGenericSignatureRequest :
19881989
evaluate(Evaluator &evaluator,
19891990
const GenericSignatureImpl *baseSignature,
19901991
SmallVector<GenericTypeParamType *, 2> addedParameters,
1991-
SmallVector<Requirement, 2> addedRequirements) const;
1992+
SmallVector<Requirement, 2> addedRequirements,
1993+
bool allowInverses) const;
19921994

19931995
public:
19941996
// Separate caching.

include/swift/AST/TypeCheckerTypeIDZone.def

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
SWIFT_REQUEST(TypeChecker, AbstractGenericSignatureRequest,
1919
GenericSignatureWithError (const GenericSignatureImpl *,
2020
SmallVector<GenericTypeParamType *, 2>,
21-
SmallVector<Requirement, 2>),
21+
SmallVector<Requirement, 2>,
22+
bool),
2223
Cached, NoLocationInfo)
2324
SWIFT_REQUEST(TypeChecker, ApplyAccessNoteRequest,
2425
evaluator::SideEffect(ValueDecl *), Cached, NoLocationInfo)
@@ -196,7 +197,7 @@ SWIFT_REQUEST(TypeChecker, InferredGenericSignatureRequest,
196197
GenericParamList *,
197198
WhereClauseOwner,
198199
SmallVector<Requirement, 2>,
199-
SmallVector<TypeLoc, 2>, bool),
200+
SmallVector<TypeLoc, 2>, bool, bool),
200201
Cached, NoLocationInfo)
201202
SWIFT_REQUEST(TypeChecker, DistributedModuleIsAvailableRequest,
202203
bool(ModuleDecl *), Cached, NoLocationInfo)

lib/AST/ASTContext.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5973,7 +5973,8 @@ ASTContext::getOpenedExistentialSignature(Type type, GenericSignature parentSig)
59735973
constraint);
59745974
auto genericSig = buildGenericSignature(
59755975
*this, canParentSig,
5976-
{genericParam}, {requirement});
5976+
{genericParam}, {requirement},
5977+
/*allowInverses=*/true);
59775978

59785979
CanGenericSignature canGenericSig(genericSig);
59795980

@@ -6085,8 +6086,8 @@ ASTContext::getOpenedElementSignature(CanGenericSignature baseGenericSig,
60856086
}
60866087

60876088
auto elementSig = buildGenericSignature(
6088-
*this, GenericSignature(), genericParams, requirements)
6089-
.getCanonicalSignature();
6089+
*this, GenericSignature(), genericParams, requirements,
6090+
/*allowInverses=*/false).getCanonicalSignature();
60906091
sigs[key] = elementSig;
60916092
return elementSig;
60926093
}
@@ -6159,7 +6160,8 @@ ASTContext::getOverrideGenericSignature(const NominalTypeDecl *baseNominal,
61596160

61606161
auto genericSig = buildGenericSignature(*this, derivedNominalSig,
61616162
std::move(addedGenericParams),
6162-
std::move(addedRequirements));
6163+
std::move(addedRequirements),
6164+
/*allowInverses=*/false);
61636165
getImpl().overrideSigCache.insert(std::make_pair(key, genericSig));
61646166
return genericSig;
61656167
}

lib/AST/ASTDemangler.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1093,7 +1093,8 @@ CanGenericSignature ASTBuilder::demangleGenericSignature(
10931093
decodeRequirement<BuiltType, BuiltRequirement, BuiltLayoutConstraint,
10941094
ASTBuilder>(node, requirements, *this);
10951095

1096-
return buildGenericSignature(Ctx, baseGenericSig, {}, std::move(requirements))
1096+
return buildGenericSignature(Ctx, baseGenericSig, {}, std::move(requirements),
1097+
/*allowInverses=*/true)
10971098
.getCanonicalSignature();
10981099
}
10991100

lib/AST/AutoDiff.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,8 @@ GenericSignature autodiff::getConstrainedDerivativeGenericSignature(
374374

375375
return buildGenericSignature(ctx, derivativeGenSig,
376376
/*addedGenericParams*/ {},
377-
std::move(requirements));
377+
std::move(requirements),
378+
/*allowInverses=*/true);
378379
}
379380

380381
// Given the rest of a `Builtin.applyDerivative_{jvp|vjp}` or

lib/AST/Builtins.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -310,10 +310,13 @@ synthesizeGenericSignature(SynthesisContext &SC,
310310
CollectGenericParams collector(SC);
311311
list.Params.visit(collector);
312312

313+
// FIXME: Change allowInverses to false and add Copyable/Escapable explicitly
314+
// to those builtins that need it.
313315
return buildGenericSignature(SC.Context,
314316
GenericSignature(),
315317
std::move(collector.GenericParamTypes),
316-
std::move(collector.AddedRequirements));
318+
std::move(collector.AddedRequirements),
319+
/*allowInverses=*/true);
317320
}
318321

319322
/// Build a builtin function declaration.
@@ -732,10 +735,13 @@ namespace {
732735
}
733736

734737
FuncDecl *build(Identifier name) {
738+
// FIXME: Change allowInverses to false and add Copyable/Escapable
739+
// explicitly to those builtins that need it.
735740
auto GenericSig = buildGenericSignature(
736741
Context, GenericSignature(),
737742
std::move(genericParamTypes),
738-
std::move(addedRequirements));
743+
std::move(addedRequirements),
744+
/*allowInverses=*/true);
739745
return getBuiltinGenericFunction(name, InterfaceParams,
740746
InterfaceResult,
741747
TheGenericParamList, GenericSig,

lib/AST/ExistentialGeneralization.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ class Generalizer : public CanTypeVisitor<Generalizer, Type> {
5656
// Finish the signature.
5757
auto sig = buildGenericSignature(ctx, GenericSignature(),
5858
addedParameters,
59-
addedRequirements);
59+
addedRequirements,
60+
/*allowInverses=*/false);
6061

6162
// TODO: minimize the signature by removing redundant generic
6263
// parameters.

lib/AST/GenericSignature.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,8 @@ GenericSignature GenericSignature::typeErased(ArrayRef<Type> typeErasedParams) c
547547
return buildGenericSignature(
548548
Ptr->getASTContext(), GenericSignature(),
549549
SmallVector<GenericTypeParamType *>(getGenericParams()),
550-
requirementsErased);
550+
requirementsErased,
551+
/*allowInverses=*/false);
551552
}
552553

553554
return *this;
@@ -1159,7 +1160,8 @@ void swift::validateGenericSignature(ASTContext &context,
11591160
AbstractGenericSignatureRequest{
11601161
nullptr,
11611162
genericParams,
1162-
requirements},
1163+
requirements,
1164+
/*allowInverses=*/false},
11631165
GenericSignatureWithError());
11641166

11651167
// If there were any errors, the signature was invalid.
@@ -1195,7 +1197,8 @@ void swift::validateGenericSignature(ASTContext &context,
11951197
AbstractGenericSignatureRequest{
11961198
nullptr,
11971199
genericParams,
1198-
newRequirements},
1200+
newRequirements,
1201+
/*allowInverses=*/false},
11991202
GenericSignatureWithError());
12001203

12011204
// If there were any errors, we formed an invalid signature, so
@@ -1252,13 +1255,15 @@ GenericSignature
12521255
swift::buildGenericSignature(ASTContext &ctx,
12531256
GenericSignature baseSignature,
12541257
SmallVector<GenericTypeParamType *, 2> addedParameters,
1255-
SmallVector<Requirement, 2> addedRequirements) {
1258+
SmallVector<Requirement, 2> addedRequirements,
1259+
bool allowInverses) {
12561260
return evaluateOrDefault(
12571261
ctx.evaluator,
12581262
AbstractGenericSignatureRequest{
12591263
baseSignature.getPointer(),
12601264
addedParameters,
1261-
addedRequirements},
1265+
addedRequirements,
1266+
allowInverses},
12621267
GenericSignatureWithError()).getPointer();
12631268
}
12641269

lib/AST/RequirementEnvironment.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,5 +218,6 @@ RequirementEnvironment::RequirementEnvironment(
218218

219219
witnessThunkSig = buildGenericSignature(ctx, GenericSignature(),
220220
std::move(genericParamTypes),
221-
std::move(requirements));
221+
std::move(requirements),
222+
/*allowInverses=*/false);
222223
}

0 commit comments

Comments
 (0)