Skip to content

Commit 459e3b0

Browse files
committed
Sema: Move markInvalidGenericSignature() to a method on TypeChecker
Also, call it from one spot where we were forgetting to.
1 parent 170992c commit 459e3b0

File tree

3 files changed

+37
-36
lines changed

3 files changed

+37
-36
lines changed

lib/Sema/TypeCheckDecl.cpp

Lines changed: 6 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -730,36 +730,6 @@ void TypeChecker::revertGenericParamList(GenericParamList *genericParams) {
730730
}
731731
}
732732

733-
static void markInvalidGenericSignature(ValueDecl *VD, TypeChecker &TC) {
734-
GenericParamList *genericParams;
735-
if (auto *AFD = dyn_cast<AbstractFunctionDecl>(VD))
736-
genericParams = AFD->getGenericParams();
737-
else
738-
genericParams = cast<GenericTypeDecl>(VD)->getGenericParams();
739-
740-
// If there aren't any generic parameters at this level, we're done.
741-
if (genericParams == nullptr)
742-
return;
743-
744-
DeclContext *DC = VD->getDeclContext();
745-
ArchetypeBuilder builder = TC.createArchetypeBuilder(DC->getParentModule());
746-
747-
if (auto sig = DC->getGenericSignatureOfContext())
748-
builder.addGenericSignature(sig, true);
749-
750-
// Visit each of the generic parameters.
751-
for (auto param : *genericParams)
752-
builder.addGenericParameter(param);
753-
754-
// Wire up the archetypes.
755-
for (auto GP : *genericParams)
756-
GP->setArchetype(builder.getArchetype(GP));
757-
758-
genericParams->setAllArchetypes(
759-
TC.Context.AllocateCopy(builder.getAllArchetypes()));
760-
}
761-
762-
763733
/// Finalize the given generic parameter list, assigning archetypes to
764734
/// the generic parameters.
765735
static void finalizeGenericParamList(ArchetypeBuilder &builder,
@@ -4338,7 +4308,7 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
43384308
gp->setOuterParameters(FD->getDeclContext()->getGenericParamsOfContext());
43394309

43404310
if (TC.validateGenericFuncSignature(FD)) {
4341-
markInvalidGenericSignature(FD, TC);
4311+
TC.markInvalidGenericSignature(FD);
43424312
} else {
43434313
// Create a fresh archetype builder.
43444314
ArchetypeBuilder builder =
@@ -4365,7 +4335,7 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
43654335
}
43664336
} else if (FD->getDeclContext()->isGenericTypeContext()) {
43674337
if (TC.validateGenericFuncSignature(FD)) {
4368-
markInvalidGenericSignature(FD, TC);
4338+
TC.markInvalidGenericSignature(FD);
43694339
} else if (!FD->hasType()) {
43704340
// Revert all of the types within the signature of the function.
43714341
TC.revertGenericFuncSignature(FD);
@@ -5912,7 +5882,7 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
59125882
gp->setOuterParameters(CD->getDeclContext()->getGenericParamsOfContext());
59135883

59145884
if (TC.validateGenericFuncSignature(CD)) {
5915-
markInvalidGenericSignature(CD, TC);
5885+
TC.markInvalidGenericSignature(CD);
59165886
} else {
59175887
ArchetypeBuilder builder =
59185888
TC.createArchetypeBuilder(CD->getModuleContext());
@@ -5931,7 +5901,7 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
59315901
}
59325902
} else if (CD->getDeclContext()->isGenericTypeContext()) {
59335903
if (TC.validateGenericFuncSignature(CD)) {
5934-
CD->setInvalid();
5904+
TC.markInvalidGenericSignature(CD);
59355905
} else {
59365906
// Revert all of the types within the signature of the constructor.
59375907
TC.revertGenericFuncSignature(CD);
@@ -6483,7 +6453,7 @@ void TypeChecker::validateDecl(ValueDecl *D, bool resolveTypeParams) {
64836453

64846454
// Validate the generic type parameters.
64856455
if (validateGenericTypeSignature(typeAlias)) {
6486-
markInvalidGenericSignature(typeAlias, *this);
6456+
markInvalidGenericSignature(typeAlias);
64876457
return;
64886458
}
64896459

@@ -6521,7 +6491,7 @@ void TypeChecker::validateDecl(ValueDecl *D, bool resolveTypeParams) {
65216491

65226492
// Validate the generic type parameters.
65236493
if (validateGenericTypeSignature(nominal)) {
6524-
markInvalidGenericSignature(nominal, *this);
6494+
markInvalidGenericSignature(nominal);
65256495
return;
65266496
}
65276497

lib/Sema/TypeCheckGeneric.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,35 @@ static Type getResultType(TypeChecker &TC, FuncDecl *fn, Type resultType) {
461461
return resultType;
462462
}
463463

464+
void TypeChecker::markInvalidGenericSignature(ValueDecl *VD) {
465+
GenericParamList *genericParams;
466+
if (auto *AFD = dyn_cast<AbstractFunctionDecl>(VD))
467+
genericParams = AFD->getGenericParams();
468+
else
469+
genericParams = cast<GenericTypeDecl>(VD)->getGenericParams();
470+
471+
// If there aren't any generic parameters at this level, we're done.
472+
if (genericParams == nullptr)
473+
return;
474+
475+
DeclContext *DC = VD->getDeclContext();
476+
ArchetypeBuilder builder = createArchetypeBuilder(DC->getParentModule());
477+
478+
if (auto sig = DC->getGenericSignatureOfContext())
479+
builder.addGenericSignature(sig, true);
480+
481+
// Visit each of the generic parameters.
482+
for (auto param : *genericParams)
483+
builder.addGenericParameter(param);
484+
485+
// Wire up the archetypes.
486+
for (auto GP : *genericParams)
487+
GP->setArchetype(builder.getArchetype(GP));
488+
489+
genericParams->setAllArchetypes(
490+
Context.AllocateCopy(builder.getAllArchetypes()));
491+
}
492+
464493
bool TypeChecker::validateGenericFuncSignature(AbstractFunctionDecl *func) {
465494
bool invalid = false;
466495

lib/Sema/TypeChecker.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -919,6 +919,8 @@ class TypeChecker final : public LazyResolver {
919919
bool isProtocolExtensionUsable(DeclContext *dc, Type type,
920920
ExtensionDecl *protocolExtension) override;
921921

922+
void markInvalidGenericSignature(ValueDecl *VD);
923+
922924
/// Validate the signature of a generic function.
923925
///
924926
/// \param func The generic function.

0 commit comments

Comments
 (0)