@@ -1758,24 +1758,24 @@ namespace {
1758
1758
return diags.diagnose (std::forward<ArgTypes>(Args)...);
1759
1759
}
1760
1760
1761
- Type resolveAttributedType (AttributedTypeRepr *repr,
1762
- TypeResolutionOptions options);
1763
- Type resolveAttributedType (TypeAttributes &attrs, TypeRepr *repr,
1764
- TypeResolutionOptions options);
1765
- Type resolveASTFunctionType (FunctionTypeRepr *repr,
1766
- TypeResolutionOptions options ,
1767
- AnyFunctionType::Representation representation
1768
- = AnyFunctionType::Representation::Swift,
1769
- bool noescape = false ,
1770
- const clang::Type *parsedClangFunctionType
1771
- = nullptr ,
1772
- DifferentiabilityKind diffKind
1773
- = DifferentiabilityKind::NonDifferentiable);
1761
+ NeverNullType resolveAttributedType (AttributedTypeRepr *repr,
1762
+ TypeResolutionOptions options);
1763
+ NeverNullType resolveAttributedType (TypeAttributes &attrs, TypeRepr *repr,
1764
+ TypeResolutionOptions options);
1765
+ NeverNullType
1766
+ resolveASTFunctionType (FunctionTypeRepr *repr ,
1767
+ TypeResolutionOptions options,
1768
+ AnyFunctionType::Representation representation =
1769
+ AnyFunctionType::Representation::Swift ,
1770
+ bool noescape = false ,
1771
+ const clang::Type *parsedClangFunctionType = nullptr ,
1772
+ DifferentiabilityKind diffKind =
1773
+ DifferentiabilityKind::NonDifferentiable);
1774
1774
SmallVector<AnyFunctionType::Param, 8 > resolveASTFunctionTypeParams (
1775
1775
TupleTypeRepr *inputRepr, TypeResolutionOptions options,
1776
1776
bool requiresMappingOut, DifferentiabilityKind diffKind);
1777
1777
1778
- Type resolveSILFunctionType (
1778
+ NeverNullType resolveSILFunctionType (
1779
1779
FunctionTypeRepr *repr, TypeResolutionOptions options,
1780
1780
SILCoroutineKind coroutineKind = SILCoroutineKind::None,
1781
1781
SILFunctionType::ExtInfoBuilder extInfoBuilder =
@@ -1794,40 +1794,40 @@ namespace {
1794
1794
SmallVectorImpl<SILYieldInfo> &yields,
1795
1795
SmallVectorImpl<SILResultInfo> &results,
1796
1796
Optional<SILResultInfo> &errorResult);
1797
- Type resolveIdentifierType (IdentTypeRepr *IdType,
1798
- TypeResolutionOptions options);
1799
- Type resolveSpecifierTypeRepr (SpecifierTypeRepr *repr,
1800
- TypeResolutionOptions options);
1801
- Type resolveArrayType (ArrayTypeRepr *repr,
1802
- TypeResolutionOptions options);
1803
- Type resolveDictionaryType (DictionaryTypeRepr *repr,
1804
- TypeResolutionOptions options);
1805
- Type resolveOptionalType (OptionalTypeRepr *repr,
1806
- TypeResolutionOptions options);
1807
- Type resolveImplicitlyUnwrappedOptionalType (ImplicitlyUnwrappedOptionalTypeRepr *repr,
1808
- TypeResolutionOptions options ,
1809
- bool isDirect);
1810
- Type resolveTupleType (TupleTypeRepr *repr,
1811
- TypeResolutionOptions options);
1812
- Type resolveCompositionType (CompositionTypeRepr *repr,
1813
- TypeResolutionOptions options);
1814
- Type resolveMetatypeType (MetatypeTypeRepr *repr,
1815
- TypeResolutionOptions options);
1816
- Type resolveProtocolType (ProtocolTypeRepr *repr,
1817
- TypeResolutionOptions options);
1818
- Type resolveSILBoxType (SILBoxTypeRepr *repr,
1819
- TypeResolutionOptions options);
1820
-
1821
- Type buildMetatypeType (MetatypeTypeRepr *repr,
1822
- Type instanceType,
1823
- Optional<MetatypeRepresentation> storedRepr);
1824
- Type buildProtocolType (ProtocolTypeRepr *repr,
1825
- Type instanceType,
1826
- Optional<MetatypeRepresentation> storedRepr);
1827
-
1828
- Type resolveOpaqueReturnType (TypeRepr *repr, StringRef mangledName,
1829
- unsigned ordinal,
1830
- TypeResolutionOptions options);
1797
+ NeverNullType resolveIdentifierType (IdentTypeRepr *IdType,
1798
+ TypeResolutionOptions options);
1799
+ NeverNullType resolveSpecifierTypeRepr (SpecifierTypeRepr *repr,
1800
+ TypeResolutionOptions options);
1801
+ NeverNullType resolveArrayType (ArrayTypeRepr *repr,
1802
+ TypeResolutionOptions options);
1803
+ NeverNullType resolveDictionaryType (DictionaryTypeRepr *repr,
1804
+ TypeResolutionOptions options);
1805
+ NeverNullType resolveOptionalType (OptionalTypeRepr *repr,
1806
+ TypeResolutionOptions options);
1807
+ NeverNullType resolveImplicitlyUnwrappedOptionalType (
1808
+ ImplicitlyUnwrappedOptionalTypeRepr *repr ,
1809
+ TypeResolutionOptions options, bool isDirect);
1810
+ NeverNullType resolveTupleType (TupleTypeRepr *repr,
1811
+ TypeResolutionOptions options);
1812
+ NeverNullType resolveCompositionType (CompositionTypeRepr *repr,
1813
+ TypeResolutionOptions options);
1814
+ NeverNullType resolveMetatypeType (MetatypeTypeRepr *repr,
1815
+ TypeResolutionOptions options);
1816
+ NeverNullType resolveProtocolType (ProtocolTypeRepr *repr,
1817
+ TypeResolutionOptions options);
1818
+ NeverNullType resolveSILBoxType (SILBoxTypeRepr *repr,
1819
+ TypeResolutionOptions options);
1820
+
1821
+ NeverNullType
1822
+ buildMetatypeType (MetatypeTypeRepr *repr, Type instanceType,
1823
+ Optional<MetatypeRepresentation> storedRepr);
1824
+ NeverNullType
1825
+ buildProtocolType (ProtocolTypeRepr *repr, Type instanceType,
1826
+ Optional<MetatypeRepresentation> storedRepr);
1827
+
1828
+ NeverNullType resolveOpaqueReturnType (TypeRepr *repr, StringRef mangledName,
1829
+ unsigned ordinal,
1830
+ TypeResolutionOptions options);
1831
1831
1832
1832
// / Returns true if the given type conforms to `Differentiable` in the
1833
1833
// / module of `DC`. If `tangentVectorEqualsSelf` is true, returns true iff
@@ -1923,7 +1923,7 @@ NeverNullType TypeResolver::resolveType(TypeRepr *repr,
1923
1923
// Default non-escaping for closure parameters
1924
1924
auto result =
1925
1925
resolveASTFunctionType (cast<FunctionTypeRepr>(repr), options);
1926
- if (result && result ->is <FunctionType>())
1926
+ if (result->is <FunctionType>())
1927
1927
return applyNonEscapingIfNecessary (result, options);
1928
1928
return result;
1929
1929
}
@@ -1995,18 +1995,19 @@ static Type rebuildWithDynamicSelf(ASTContext &Context, Type ty) {
1995
1995
}
1996
1996
}
1997
1997
1998
- Type TypeResolver::resolveAttributedType (AttributedTypeRepr *repr,
1999
- TypeResolutionOptions options) {
1998
+ NeverNullType
1999
+ TypeResolver::resolveAttributedType (AttributedTypeRepr *repr,
2000
+ TypeResolutionOptions options) {
2000
2001
// Copy the attributes, since we're about to start hacking on them.
2001
2002
TypeAttributes attrs = repr->getAttrs ();
2002
2003
assert (!attrs.empty ());
2003
2004
2004
2005
return resolveAttributedType (attrs, repr->getTypeRepr (), options);
2005
2006
}
2006
2007
2007
- Type TypeResolver::resolveAttributedType (TypeAttributes &attrs,
2008
- TypeRepr *repr,
2009
- TypeResolutionOptions options) {
2008
+ NeverNullType
2009
+ TypeResolver::resolveAttributedType (TypeAttributes &attrs, TypeRepr *repr,
2010
+ TypeResolutionOptions options) {
2010
2011
// Convenience to grab the source range of a type attribute.
2011
2012
auto getTypeAttrRangeWithAt = [](ASTContext &ctx, SourceLoc attrLoc) {
2012
2013
return SourceRange (attrLoc, attrLoc.getAdvancedLoc (1 ));
@@ -2630,10 +2631,10 @@ TypeResolver::resolveASTFunctionTypeParams(TupleTypeRepr *inputRepr,
2630
2631
return elements;
2631
2632
}
2632
2633
2633
- Type TypeResolver::resolveOpaqueReturnType (TypeRepr *repr,
2634
- StringRef mangledName,
2635
- unsigned ordinal,
2636
- TypeResolutionOptions options) {
2634
+ NeverNullType
2635
+ TypeResolver::resolveOpaqueReturnType (TypeRepr *repr, StringRef mangledName,
2636
+ unsigned ordinal,
2637
+ TypeResolutionOptions options) {
2637
2638
// The type repr should be a generic identifier type. We don't really use
2638
2639
// the identifier for anything, but we do resolve the generic arguments
2639
2640
// to instantiate the possibly-generic opaque type.
@@ -2672,7 +2673,7 @@ Type TypeResolver::resolveOpaqueReturnType(TypeRepr *repr,
2672
2673
return ty;
2673
2674
}
2674
2675
2675
- Type TypeResolver::resolveASTFunctionType (
2676
+ NeverNullType TypeResolver::resolveASTFunctionType (
2676
2677
FunctionTypeRepr *repr, TypeResolutionOptions parentOptions,
2677
2678
AnyFunctionType::Representation representation, bool noescape,
2678
2679
const clang::Type *parsedClangFunctionType,
@@ -2807,8 +2808,8 @@ bool TypeResolver::isDifferentiable(Type type, bool tangentVectorEqualsSelf) {
2807
2808
return type->getCanonicalType () == tanSpace->getCanonicalType ();
2808
2809
}
2809
2810
2810
- Type TypeResolver::resolveSILBoxType (SILBoxTypeRepr *repr,
2811
- TypeResolutionOptions options) {
2811
+ NeverNullType TypeResolver::resolveSILBoxType (SILBoxTypeRepr *repr,
2812
+ TypeResolutionOptions options) {
2812
2813
// Resolve the field types.
2813
2814
SmallVector<SILField, 4 > fields;
2814
2815
{
@@ -2872,7 +2873,7 @@ Type TypeResolver::resolveSILBoxType(SILBoxTypeRepr *repr,
2872
2873
return SILBoxType::get (getASTContext (), layout, subMap);
2873
2874
}
2874
2875
2875
- Type TypeResolver::resolveSILFunctionType (
2876
+ NeverNullType TypeResolver::resolveSILFunctionType (
2876
2877
FunctionTypeRepr *repr, TypeResolutionOptions options,
2877
2878
SILCoroutineKind coroutineKind,
2878
2879
SILFunctionType::ExtInfoBuilder extInfoBuilder, ParameterConvention callee,
@@ -3287,8 +3288,9 @@ bool TypeResolver::resolveSILResults(TypeRepr *repr,
3287
3288
yields, ordinaryResults, errorResult);
3288
3289
}
3289
3290
3290
- Type TypeResolver::resolveIdentifierType (IdentTypeRepr *IdType,
3291
- TypeResolutionOptions options) {
3291
+ NeverNullType
3292
+ TypeResolver::resolveIdentifierType (IdentTypeRepr *IdType,
3293
+ TypeResolutionOptions options) {
3292
3294
auto ComponentRange = IdType->getComponentRange ();
3293
3295
auto Components = llvm::makeArrayRef (ComponentRange.begin (),
3294
3296
ComponentRange.end ());
@@ -3322,8 +3324,9 @@ Type TypeResolver::resolveIdentifierType(IdentTypeRepr *IdType,
3322
3324
return result;
3323
3325
}
3324
3326
3325
- Type TypeResolver::resolveSpecifierTypeRepr (SpecifierTypeRepr *repr,
3326
- TypeResolutionOptions options) {
3327
+ NeverNullType
3328
+ TypeResolver::resolveSpecifierTypeRepr (SpecifierTypeRepr *repr,
3329
+ TypeResolutionOptions options) {
3327
3330
// inout is only valid for (non-Subscript and non-EnumCaseDecl)
3328
3331
// function parameters.
3329
3332
if (!options.is (TypeResolverContext::FunctionInput) ||
@@ -3364,9 +3367,8 @@ Type TypeResolver::resolveSpecifierTypeRepr(SpecifierTypeRepr *repr,
3364
3367
return resolveType (repr->getBase (), options);
3365
3368
}
3366
3369
3367
-
3368
- Type TypeResolver::resolveArrayType (ArrayTypeRepr *repr,
3369
- TypeResolutionOptions options) {
3370
+ NeverNullType TypeResolver::resolveArrayType (ArrayTypeRepr *repr,
3371
+ TypeResolutionOptions options) {
3370
3372
auto baseTy = resolveType (repr->getBase (), options.withoutContext ());
3371
3373
if (baseTy->hasError ()) {
3372
3374
return ErrorType::get (getASTContext ());
@@ -3380,8 +3382,9 @@ Type TypeResolver::resolveArrayType(ArrayTypeRepr *repr,
3380
3382
return sliceTy;
3381
3383
}
3382
3384
3383
- Type TypeResolver::resolveDictionaryType (DictionaryTypeRepr *repr,
3384
- TypeResolutionOptions options) {
3385
+ NeverNullType
3386
+ TypeResolver::resolveDictionaryType (DictionaryTypeRepr *repr,
3387
+ TypeResolutionOptions options) {
3385
3388
options = adjustOptionsForGenericArgs (options);
3386
3389
3387
3390
auto keyTy = resolveType (repr->getKey (), options.withoutContext ());
@@ -3410,8 +3413,8 @@ Type TypeResolver::resolveDictionaryType(DictionaryTypeRepr *repr,
3410
3413
return DictionaryType::get (keyTy, valueTy);
3411
3414
}
3412
3415
3413
- Type TypeResolver::resolveOptionalType (OptionalTypeRepr *repr,
3414
- TypeResolutionOptions options) {
3416
+ NeverNullType TypeResolver::resolveOptionalType (OptionalTypeRepr *repr,
3417
+ TypeResolutionOptions options) {
3415
3418
TypeResolutionOptions elementOptions = options.withoutContext (true );
3416
3419
elementOptions.setContext (TypeResolverContext::ImmediateOptionalTypeArgument);
3417
3420
@@ -3429,10 +3432,9 @@ Type TypeResolver::resolveOptionalType(OptionalTypeRepr *repr,
3429
3432
return optionalTy;
3430
3433
}
3431
3434
3432
- Type TypeResolver::resolveImplicitlyUnwrappedOptionalType (
3433
- ImplicitlyUnwrappedOptionalTypeRepr *repr,
3434
- TypeResolutionOptions options,
3435
- bool isDirect) {
3435
+ NeverNullType TypeResolver::resolveImplicitlyUnwrappedOptionalType (
3436
+ ImplicitlyUnwrappedOptionalTypeRepr *repr, TypeResolutionOptions options,
3437
+ bool isDirect) {
3436
3438
TypeResolutionFlags allowIUO = TypeResolutionFlags::SILType;
3437
3439
3438
3440
bool doDiag = false ;
@@ -3500,8 +3502,8 @@ Type TypeResolver::resolveImplicitlyUnwrappedOptionalType(
3500
3502
return uncheckedOptionalTy;
3501
3503
}
3502
3504
3503
- Type TypeResolver::resolveTupleType (TupleTypeRepr *repr,
3504
- TypeResolutionOptions options) {
3505
+ NeverNullType TypeResolver::resolveTupleType (TupleTypeRepr *repr,
3506
+ TypeResolutionOptions options) {
3505
3507
SmallVector<TupleTypeElt, 8 > elements;
3506
3508
elements.reserve (repr->getNumElements ());
3507
3509
@@ -3568,8 +3570,9 @@ Type TypeResolver::resolveTupleType(TupleTypeRepr *repr,
3568
3570
return TupleType::get (elements, getASTContext ());
3569
3571
}
3570
3572
3571
- Type TypeResolver::resolveCompositionType (CompositionTypeRepr *repr,
3572
- TypeResolutionOptions options) {
3573
+ NeverNullType
3574
+ TypeResolver::resolveCompositionType (CompositionTypeRepr *repr,
3575
+ TypeResolutionOptions options) {
3573
3576
3574
3577
// Note that the superclass type will appear as part of one of the
3575
3578
// types in 'Members', so it's not used when constructing the
@@ -3636,8 +3639,8 @@ Type TypeResolver::resolveCompositionType(CompositionTypeRepr *repr,
3636
3639
/* HasExplicitAnyObject=*/ false );
3637
3640
}
3638
3641
3639
- Type TypeResolver::resolveMetatypeType (MetatypeTypeRepr *repr,
3640
- TypeResolutionOptions options) {
3642
+ NeverNullType TypeResolver::resolveMetatypeType (MetatypeTypeRepr *repr,
3643
+ TypeResolutionOptions options) {
3641
3644
// The instance type of a metatype is always abstract, not SIL-lowered.
3642
3645
auto ty = resolveType (repr->getBase (), options.withoutContext ());
3643
3646
if (ty->hasError ()) {
@@ -3657,10 +3660,9 @@ Type TypeResolver::resolveMetatypeType(MetatypeTypeRepr *repr,
3657
3660
return buildMetatypeType (repr, ty, storedRepr);
3658
3661
}
3659
3662
3660
- Type TypeResolver::buildMetatypeType (
3661
- MetatypeTypeRepr *repr,
3662
- Type instanceType,
3663
- Optional<MetatypeRepresentation> storedRepr) {
3663
+ NeverNullType
3664
+ TypeResolver::buildMetatypeType (MetatypeTypeRepr *repr, Type instanceType,
3665
+ Optional<MetatypeRepresentation> storedRepr) {
3664
3666
if (instanceType->isAnyExistentialType ()) {
3665
3667
// TODO: diagnose invalid representations?
3666
3668
return ExistentialMetatypeType::get (instanceType, storedRepr);
@@ -3669,8 +3671,8 @@ Type TypeResolver::buildMetatypeType(
3669
3671
}
3670
3672
}
3671
3673
3672
- Type TypeResolver::resolveProtocolType (ProtocolTypeRepr *repr,
3673
- TypeResolutionOptions options) {
3674
+ NeverNullType TypeResolver::resolveProtocolType (ProtocolTypeRepr *repr,
3675
+ TypeResolutionOptions options) {
3674
3676
// The instance type of a metatype is always abstract, not SIL-lowered.
3675
3677
auto ty = resolveType (repr->getBase (), options.withoutContext ());
3676
3678
if (ty->hasError ()) {
@@ -3690,10 +3692,9 @@ Type TypeResolver::resolveProtocolType(ProtocolTypeRepr *repr,
3690
3692
return buildProtocolType (repr, ty, storedRepr);
3691
3693
}
3692
3694
3693
- Type TypeResolver::buildProtocolType (
3694
- ProtocolTypeRepr *repr,
3695
- Type instanceType,
3696
- Optional<MetatypeRepresentation> storedRepr) {
3695
+ NeverNullType
3696
+ TypeResolver::buildProtocolType (ProtocolTypeRepr *repr, Type instanceType,
3697
+ Optional<MetatypeRepresentation> storedRepr) {
3697
3698
if (!instanceType->isAnyExistentialType ()) {
3698
3699
diagnose (repr->getProtocolLoc (), diag::dot_protocol_on_non_existential,
3699
3700
instanceType);
0 commit comments