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