Skip to content

Commit f90930f

Browse files
committed
[NFC] Simplify Forbidden Prefix API
Rephrase it in terms of DeclBaseName and fix up some callsites.
1 parent 3bd45c8 commit f90930f

File tree

5 files changed

+17
-42
lines changed

5 files changed

+17
-42
lines changed

lib/Sema/TypeCheckConstraints.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1119,7 +1119,8 @@ namespace {
11191119
return finish(walkToClosureExprPre(closure), expr);
11201120

11211121
if (auto unresolved = dyn_cast<UnresolvedDeclRefExpr>(expr)) {
1122-
TC.checkForForbiddenPrefix(unresolved);
1122+
TypeChecker::checkForForbiddenPrefix(
1123+
TC.Context, unresolved->getName().getBaseName());
11231124
return finish(true, TC.resolveDeclRefExpr(unresolved, DC));
11241125
}
11251126

lib/Sema/TypeCheckDecl.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2211,6 +2211,8 @@ class DeclChecker : public DeclVisitor<DeclChecker> {
22112211

22122212
if (auto VD = dyn_cast<ValueDecl>(decl)) {
22132213
auto &Context = TC.Context;
2214+
TypeChecker::checkForForbiddenPrefix(Context, VD->getBaseName());
2215+
22142216
checkRedeclaration(Context, VD);
22152217

22162218
// Force some requests, which can produce diagnostics.
@@ -3594,7 +3596,6 @@ bool TypeChecker::isAvailabilitySafeForConformance(
35943596
}
35953597

35963598
void TypeChecker::typeCheckDecl(Decl *D) {
3597-
checkForForbiddenPrefix(D);
35983599
DeclChecker(*this).visit(D);
35993600
}
36003601

@@ -4127,7 +4128,7 @@ void TypeChecker::validateDecl(ValueDecl *D) {
41274128
PrettyStackTraceDecl StackTrace("validating", D);
41284129
FrontendStatsTracer StatsTracer(Context.Stats, "validate-decl", D);
41294130

4130-
checkForForbiddenPrefix(D);
4131+
TypeChecker::checkForForbiddenPrefix(Context, D->getBaseName());
41314132

41324133
if (Context.Stats)
41334134
Context.Stats->getFrontendCounters().NumDeclsValidated++;

lib/Sema/TypeCheckPattern.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,9 +1006,9 @@ bool TypeChecker::coercePatternToType(Pattern *&P, TypeResolution resolution,
10061006
P->setType(type);
10071007
var->setNamingPattern(NP);
10081008

1009-
// FIXME: Should probably just remove the forbidden prefix stuff, it no
1010-
// longer makes a lot of sense in a request-based world.
1011-
checkForForbiddenPrefix(var);
1009+
// FIXME: This call can be removed once pattern binding validation is
1010+
// sufficiently requestified.
1011+
TypeChecker::checkForForbiddenPrefix(Context, var->getBaseName());
10121012

10131013
// If we are inferring a variable to have type AnyObject.Type,
10141014
// "()", an uninhabited type, or optional thereof, emit a diagnostic.

lib/Sema/TypeChecker.cpp

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -729,38 +729,18 @@ TypeChecker &swift::createTypeChecker(ASTContext &Ctx) {
729729
return TypeChecker::createForContext(Ctx);
730730
}
731731

732-
// checkForForbiddenPrefix is for testing purposes.
733-
734-
void TypeChecker::checkForForbiddenPrefix(const Decl *D) {
735-
if (!hasEnabledForbiddenTypecheckPrefix())
732+
void TypeChecker::checkForForbiddenPrefix(ASTContext &C, DeclBaseName Name) {
733+
if (C.LangOpts.DebugForbidTypecheckPrefix.empty())
736734
return;
737-
if (auto VD = dyn_cast<ValueDecl>(D)) {
738-
if (!VD->getBaseName().isSpecial())
739-
checkForForbiddenPrefix(VD->getBaseName().getIdentifier().str());
740-
}
741-
}
742735

743-
void TypeChecker::checkForForbiddenPrefix(const UnresolvedDeclRefExpr *E) {
744-
if (!hasEnabledForbiddenTypecheckPrefix())
736+
// Don't touch special names or empty names.
737+
if (Name.isSpecial() || Name.empty())
745738
return;
746-
if (!E->getName().isSpecial())
747-
checkForForbiddenPrefix(E->getName().getBaseIdentifier());
748-
}
749739

750-
void TypeChecker::checkForForbiddenPrefix(Identifier Ident) {
751-
if (!hasEnabledForbiddenTypecheckPrefix())
752-
return;
753-
checkForForbiddenPrefix(Ident.empty() ? StringRef() : Ident.str());
754-
}
755-
756-
void TypeChecker::checkForForbiddenPrefix(StringRef Name) {
757-
if (!hasEnabledForbiddenTypecheckPrefix())
758-
return;
759-
if (Name.empty())
760-
return;
761-
if (Name.startswith(Context.LangOpts.DebugForbidTypecheckPrefix)) {
740+
StringRef Str = Name.getIdentifier().str();
741+
if (Str.startswith(C.LangOpts.DebugForbidTypecheckPrefix)) {
762742
std::string Msg = "forbidden typecheck occurred: ";
763-
Msg += Name;
743+
Msg += Str;
764744
llvm::report_fatal_error(Msg);
765745
}
766746
}

lib/Sema/TypeChecker.h

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1883,16 +1883,9 @@ class TypeChecker final : public LazyResolver {
18831883
/// @}
18841884

18851885
/// If LangOptions::DebugForbidTypecheckPrefix is set and the given decl
1886-
/// has a name with that prefix, an llvm fatal_error is triggered.
1886+
/// name starts with that prefix, an llvm fatal_error is triggered.
18871887
/// This is for testing purposes.
1888-
void checkForForbiddenPrefix(const Decl *D);
1889-
void checkForForbiddenPrefix(const UnresolvedDeclRefExpr *E);
1890-
void checkForForbiddenPrefix(Identifier Ident);
1891-
void checkForForbiddenPrefix(StringRef Name);
1892-
1893-
bool hasEnabledForbiddenTypecheckPrefix() const {
1894-
return !Context.LangOpts.DebugForbidTypecheckPrefix.empty();
1895-
}
1888+
static void checkForForbiddenPrefix(ASTContext &C, DeclBaseName Name);
18961889

18971890
/// Check error handling in the given type-checked top-level code.
18981891
void checkTopLevelErrorHandling(TopLevelCodeDecl *D);

0 commit comments

Comments
 (0)