24
24
#include " swift/AST/ASTWalker.h"
25
25
#include " swift/AST/ASTVisitor.h"
26
26
#include " swift/AST/Attr.h"
27
+ #include " swift/AST/DiagnosticSuppression.h"
27
28
#include " swift/AST/ExistentialLayout.h"
28
29
#include " swift/AST/Identifier.h"
29
30
#include " swift/AST/Initializer.h"
49
50
50
51
using namespace swift ;
51
52
52
- TypeChecker::TypeChecker (ASTContext &Ctx, DiagnosticEngine &Diags )
53
- : Context(Ctx), Diags(Diags)
53
+ TypeChecker::TypeChecker (ASTContext &Ctx)
54
+ : Context(Ctx), Diags(Ctx. Diags)
54
55
{
55
56
auto clangImporter =
56
57
static_cast <ClangImporter *>(Context.getClangModuleLoader ());
@@ -750,13 +751,10 @@ bool swift::performTypeLocChecking(ASTContext &Ctx, TypeLoc &T,
750
751
options |= TypeResolutionFlags::SILType;
751
752
752
753
auto resolution = TypeResolution::forContextual (DC, GenericEnv);
753
- if (ProduceDiagnostics) {
754
- return TypeChecker (Ctx).validateType (T, resolution, options);
755
- } else {
756
- // Set up a diagnostics engine that swallows diagnostics.
757
- DiagnosticEngine Diags (Ctx.SourceMgr );
758
- return TypeChecker (Ctx, Diags).validateType (T, resolution, options);
759
- }
754
+ Optional<DiagnosticSuppression> suppression;
755
+ if (!ProduceDiagnostics)
756
+ suppression.emplace (Ctx.Diags );
757
+ return TypeChecker (Ctx).validateType (T, resolution, options);
760
758
}
761
759
762
760
// / Expose TypeChecker's handling of GenericParamList to SIL parsing.
@@ -769,9 +767,8 @@ swift::handleSILGenericParams(ASTContext &Ctx, GenericParamList *genericParams,
769
767
void swift::typeCheckCompletionDecl (Decl *D) {
770
768
auto &Ctx = D->getASTContext ();
771
769
772
- // Set up a diagnostics engine that swallows diagnostics.
773
- DiagnosticEngine Diags (Ctx.SourceMgr );
774
- TypeChecker TC (Ctx, Diags);
770
+ DiagnosticSuppression suppression (Ctx.Diags );
771
+ TypeChecker TC (Ctx);
775
772
776
773
if (auto ext = dyn_cast<ExtensionDecl>(D))
777
774
TC.validateExtension (ext);
@@ -827,15 +824,14 @@ Optional<Type> swift::getTypeOfCompletionContextExpr(
827
824
CompletionTypeCheckKind kind,
828
825
Expr *&parsedExpr,
829
826
ConcreteDeclRef &referencedDecl) {
827
+ DiagnosticSuppression suppression (Ctx.Diags );
830
828
831
829
if (Ctx.getLazyResolver ()) {
832
830
TypeChecker *TC = static_cast <TypeChecker *>(Ctx.getLazyResolver ());
833
831
return ::getTypeOfCompletionContextExpr (*TC, DC, kind, parsedExpr,
834
832
referencedDecl);
835
833
} else {
836
- // Set up a diagnostics engine that swallows diagnostics.
837
- DiagnosticEngine diags (Ctx.SourceMgr );
838
- TypeChecker TC (Ctx, diags);
834
+ TypeChecker TC (Ctx);
839
835
// Try to solve for the actual type of the expression.
840
836
return ::getTypeOfCompletionContextExpr (TC, DC, kind, parsedExpr,
841
837
referencedDecl);
@@ -844,29 +840,27 @@ Optional<Type> swift::getTypeOfCompletionContextExpr(
844
840
845
841
bool swift::typeCheckCompletionSequence (DeclContext *DC, Expr *&parsedExpr) {
846
842
auto &ctx = DC->getASTContext ();
843
+ DiagnosticSuppression suppression (ctx.Diags );
847
844
if (ctx.getLazyResolver ()) {
848
845
TypeChecker *TC = static_cast <TypeChecker *>(ctx.getLazyResolver ());
849
846
return TC->typeCheckCompletionSequence (parsedExpr, DC);
850
847
} else {
851
- // Set up a diagnostics engine that swallows diagnostics.
852
- DiagnosticEngine diags (ctx.SourceMgr );
853
- TypeChecker TC (ctx, diags);
848
+ TypeChecker TC (ctx);
854
849
return TC.typeCheckCompletionSequence (parsedExpr, DC);
855
850
}
856
851
}
857
852
858
853
bool swift::typeCheckExpression (DeclContext *DC, Expr *&parsedExpr) {
859
854
auto &ctx = DC->getASTContext ();
855
+ DiagnosticSuppression suppression (ctx.Diags );
860
856
if (ctx.getLazyResolver ()) {
861
857
TypeChecker *TC = static_cast <TypeChecker *>(ctx.getLazyResolver ());
862
858
auto resultTy = TC->typeCheckExpression (parsedExpr, DC, TypeLoc (),
863
859
ContextualTypePurpose::CTP_Unused,
864
860
TypeCheckExprFlags::SuppressDiagnostics);
865
861
return !resultTy;
866
862
} else {
867
- // Set up a diagnostics engine that swallows diagnostics.
868
- DiagnosticEngine diags (ctx.SourceMgr );
869
- TypeChecker TC (ctx, diags);
863
+ TypeChecker TC (ctx);
870
864
auto resultTy = TC.typeCheckExpression (parsedExpr, DC, TypeLoc (),
871
865
ContextualTypePurpose::CTP_Unused,
872
866
TypeCheckExprFlags::SuppressDiagnostics);
@@ -877,35 +871,26 @@ bool swift::typeCheckExpression(DeclContext *DC, Expr *&parsedExpr) {
877
871
bool swift::typeCheckAbstractFunctionBodyUntil (AbstractFunctionDecl *AFD,
878
872
SourceLoc EndTypeCheckLoc) {
879
873
auto &Ctx = AFD->getASTContext ();
874
+ DiagnosticSuppression suppression (Ctx.Diags );
880
875
881
- // Set up a diagnostics engine that swallows diagnostics.
882
- DiagnosticEngine Diags (Ctx.SourceMgr );
883
-
884
- TypeChecker TC (Ctx, Diags);
876
+ TypeChecker TC (Ctx);
885
877
return !TC.typeCheckAbstractFunctionBodyUntil (AFD, EndTypeCheckLoc);
886
878
}
887
879
888
880
bool swift::typeCheckTopLevelCodeDecl (TopLevelCodeDecl *TLCD) {
889
881
auto &Ctx = static_cast <Decl *>(TLCD)->getASTContext ();
890
-
891
- // Set up a diagnostics engine that swallows diagnostics.
892
- DiagnosticEngine Diags (Ctx.SourceMgr );
893
-
894
- TypeChecker TC (Ctx, Diags);
882
+ DiagnosticSuppression suppression (Ctx.Diags );
883
+ TypeChecker TC (Ctx);
895
884
TC.typeCheckTopLevelCodeDecl (TLCD);
896
885
return true ;
897
886
}
898
887
899
- static void deleteTypeCheckerAndDiags (LazyResolver *resolver) {
900
- DiagnosticEngine &diags = static_cast <TypeChecker*>(resolver)->Diags ;
888
+ static void deleteTypeChecker (LazyResolver *resolver) {
901
889
delete resolver;
902
- delete &diags;
903
890
}
904
891
905
892
OwnedResolver swift::createLazyResolver (ASTContext &Ctx) {
906
- auto diags = new DiagnosticEngine (Ctx.SourceMgr );
907
- return OwnedResolver (new TypeChecker (Ctx, *diags),
908
- &deleteTypeCheckerAndDiags);
893
+ return OwnedResolver (new TypeChecker (Ctx), &deleteTypeChecker);
909
894
}
910
895
911
896
// checkForForbiddenPrefix is for testing purposes.
0 commit comments