Skip to content

Commit 553216a

Browse files
committed
Address most of Slava's commentary on this PR.
1 parent 9758499 commit 553216a

File tree

5 files changed

+8
-32
lines changed

5 files changed

+8
-32
lines changed

lib/AST/DeclContext.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -354,8 +354,7 @@ AbstractFunctionDecl *DeclContext::getInnermostMethodContext() {
354354
}
355355

356356
bool DeclContext::isTypeContext() const {
357-
return (getContextKind() == DeclContextKind::GenericTypeDecl &&
358-
!isa<TypeAliasDecl>(this)) ||
357+
return isa<NominalTypeDecl>(this) ||
359358
getContextKind() == DeclContextKind::ExtensionDecl;
360359
}
361360

lib/Sema/ITCDecl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ void IterativeTypeChecker::processResolveInheritedClauseEntry(
103103

104104
// Validate the type of this inherited clause entry.
105105
// FIXME: Recursion into existing type checker.
106-
GenericTypeToArchetypeResolver resolver(dc->getGenericEnvironmentOfContext());
106+
GenericTypeToArchetypeResolver resolver(dc);
107107
if (TC.validateType(*inherited, dc, options, &resolver)) {
108108
inherited->setInvalidType(getASTContext());
109109
}

lib/Sema/TypeCheckConstraints.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -937,8 +937,7 @@ bool PreCheckExpression::walkToClosureExprPre(ClosureExpr *closure) {
937937
options |= TR_InExpression;
938938
bool hadParameterError = false;
939939

940-
GenericTypeToArchetypeResolver resolver(
941-
closure->getGenericEnvironmentOfContext());
940+
GenericTypeToArchetypeResolver resolver(closure);
942941

943942
if (TC.typeCheckParameterList(PL, DC, options, resolver)) {
944943
closure->setType(ErrorType::get(TC.Context));

lib/Sema/TypeCheckDecl.cpp

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6846,25 +6846,6 @@ void TypeChecker::checkDeclCircularity(NominalTypeDecl *decl) {
68466846
}
68476847
}
68486848

6849-
/// Determine whether the given variable is the implicit 'self' parameter for
6850-
/// a function, and return that function if so.
6851-
static AbstractFunctionDecl *isImplicitSelfParam(VarDecl *var){
6852-
if (!var->isImplicit()) return nullptr;
6853-
6854-
auto param = dyn_cast<ParamDecl>(var);
6855-
if (!param) return nullptr;
6856-
6857-
auto func = dyn_cast<AbstractFunctionDecl>(var->getDeclContext());
6858-
if (!func) return nullptr;
6859-
6860-
if (!func->getDeclContext()->isTypeContext()) return nullptr;
6861-
6862-
if (param == func->getImplicitSelfDecl())
6863-
return func;
6864-
6865-
return nullptr;
6866-
}
6867-
68686849
void TypeChecker::validateDecl(ValueDecl *D, bool resolveTypeParams) {
68696850
if (hasEnabledForbiddenTypecheckPrefix())
68706851
checkForForbiddenPrefix(D);
@@ -7112,12 +7093,12 @@ void TypeChecker::validateDecl(ValueDecl *D, bool resolveTypeParams) {
71127093
case DeclKind::Param: {
71137094
auto VD = cast<VarDecl>(D);
71147095
if (!VD->hasType()) {
7115-
if (auto func = isImplicitSelfParam(VD)) {
7096+
if (VD->isSelfParameter()) {
71167097
if (!VD->hasInterfaceType()) {
71177098
VD->setInterfaceType(ErrorType::get(Context));
71187099
VD->setInvalid();
71197100
}
7120-
recordSelfContextType(func);
7101+
recordSelfContextType(cast<AbstractFunctionDecl>(VD->getDeclContext()));
71217102
} else if (PatternBindingDecl *PBD = VD->getParentPatternBinding()) {
71227103
if (PBD->isBeingTypeChecked()) {
71237104
diagnose(VD, diag::pattern_used_in_type, VD->getName());

lib/Sema/TypeCheckType.cpp

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -201,8 +201,7 @@ Type TypeChecker::resolveTypeInContext(
201201
bool isSpecialized,
202202
GenericTypeResolver *resolver,
203203
UnsatisfiedDependency *unsatisfiedDependency) {
204-
GenericTypeToArchetypeResolver defaultResolver(
205-
fromDC->getGenericEnvironmentOfContext());
204+
GenericTypeToArchetypeResolver defaultResolver(fromDC);
206205
if (!resolver)
207206
resolver = &defaultResolver;
208207

@@ -529,8 +528,7 @@ Type TypeChecker::applyUnboundGenericArguments(
529528
"invalid arguments, use applyGenericArguments for diagnostic emitting");
530529

531530
// Make sure we always have a resolver to use.
532-
GenericTypeToArchetypeResolver defaultResolver(
533-
dc->getGenericEnvironmentOfContext());
531+
GenericTypeToArchetypeResolver defaultResolver(dc);
534532
if (!resolver)
535533
resolver = &defaultResolver;
536534

@@ -1613,8 +1611,7 @@ Type TypeChecker::resolveType(TypeRepr *TyR, DeclContext *DC,
16131611
PrettyStackTraceTypeRepr stackTrace(Context, "resolving", TyR);
16141612

16151613
// Make sure we always have a resolver to use.
1616-
GenericTypeToArchetypeResolver defaultResolver(
1617-
DC->getGenericEnvironmentOfContext());
1614+
GenericTypeToArchetypeResolver defaultResolver(DC);
16181615
if (!resolver)
16191616
resolver = &defaultResolver;
16201617

0 commit comments

Comments
 (0)