@@ -2566,25 +2566,27 @@ ModuleFile::getDeclChecked(DeclID DID, Optional<DeclContext *> ForcedContext) {
2566
2566
bool isImplicit, isObjC, hasStubImplementation, throws;
2567
2567
GenericEnvironmentID genericEnvID;
2568
2568
uint8_t storedInitKind, rawAccessLevel;
2569
- TypeID interfaceID, canonicalTypeID ;
2569
+ TypeID interfaceID;
2570
2570
DeclID overriddenID;
2571
2571
bool needsNewVTableEntry, firstTimeRequired;
2572
- ArrayRef<uint64_t > argNameIDs;
2572
+ unsigned numArgNames;
2573
+ ArrayRef<uint64_t > argNameAndDependencyIDs;
2573
2574
2574
2575
decls_block::ConstructorLayout::readRecord (scratch, contextID,
2575
2576
rawFailability, isImplicit,
2576
2577
isObjC, hasStubImplementation,
2577
2578
throws, storedInitKind,
2578
2579
genericEnvID, interfaceID,
2579
- canonicalTypeID, overriddenID,
2580
+ overriddenID,
2580
2581
rawAccessLevel,
2581
2582
needsNewVTableEntry,
2582
2583
firstTimeRequired,
2583
- argNameIDs);
2584
+ numArgNames,
2585
+ argNameAndDependencyIDs);
2584
2586
2585
2587
// Resolve the name ids.
2586
2588
SmallVector<Identifier, 2 > argNames;
2587
- for (auto argNameID : argNameIDs )
2589
+ for (auto argNameID : argNameAndDependencyIDs. slice ( 0 , numArgNames) )
2588
2590
argNames.push_back (getIdentifier (argNameID));
2589
2591
DeclName name (ctx, ctx.Id_init , argNames);
2590
2592
@@ -2610,10 +2612,12 @@ ModuleFile::getDeclChecked(DeclID DID, Optional<DeclContext *> ForcedContext) {
2610
2612
return llvm::make_error<OverrideError>(name, errorFlags);
2611
2613
}
2612
2614
2613
- auto canonicalType = getTypeChecked (canonicalTypeID);
2614
- if (!canonicalType) {
2615
- return llvm::make_error<TypeError>(
2616
- name, takeErrorInfo (canonicalType.takeError ()), errorFlags);
2615
+ for (auto dependencyID : argNameAndDependencyIDs.slice (numArgNames)) {
2616
+ auto dependency = getTypeChecked (dependencyID);
2617
+ if (!dependency) {
2618
+ return llvm::make_error<TypeError>(
2619
+ name, takeErrorInfo (dependency.takeError ()), errorFlags);
2620
+ }
2617
2621
}
2618
2622
2619
2623
auto parent = getDeclContext (contextID);
@@ -2690,18 +2694,20 @@ ModuleFile::getDeclChecked(DeclID DID, Optional<DeclContext *> ForcedContext) {
2690
2694
DeclContextID contextID;
2691
2695
bool isImplicit, isObjC, isStatic, isLet, hasNonPatternBindingInit;
2692
2696
uint8_t storageKind, rawAccessLevel, rawSetterAccessLevel;
2693
- TypeID interfaceTypeID, canonicalTypeID ;
2697
+ TypeID interfaceTypeID;
2694
2698
DeclID getterID, setterID, materializeForSetID, willSetID, didSetID;
2695
2699
DeclID addressorID, mutableAddressorID, overriddenID;
2700
+ ArrayRef<uint64_t > dependencyIDs;
2696
2701
2697
2702
decls_block::VarLayout::readRecord (scratch, nameID, contextID,
2698
2703
isImplicit, isObjC, isStatic, isLet,
2699
2704
hasNonPatternBindingInit, storageKind,
2700
- interfaceTypeID, canonicalTypeID,
2705
+ interfaceTypeID,
2701
2706
getterID, setterID, materializeForSetID,
2702
2707
addressorID, mutableAddressorID,
2703
2708
willSetID, didSetID, overriddenID,
2704
- rawAccessLevel, rawSetterAccessLevel);
2709
+ rawAccessLevel, rawSetterAccessLevel,
2710
+ dependencyIDs);
2705
2711
2706
2712
Identifier name = getIdentifier (nameID);
2707
2713
@@ -2711,10 +2717,12 @@ ModuleFile::getDeclChecked(DeclID DID, Optional<DeclContext *> ForcedContext) {
2711
2717
return llvm::make_error<OverrideError>(name);
2712
2718
}
2713
2719
2714
- auto canonicalType = getTypeChecked (canonicalTypeID);
2715
- if (!canonicalType) {
2716
- return llvm::make_error<TypeError>(
2717
- name, takeErrorInfo (canonicalType.takeError ()));
2720
+ for (TypeID dependencyID : dependencyIDs) {
2721
+ auto dependency = getTypeChecked (dependencyID);
2722
+ if (!dependency) {
2723
+ return llvm::make_error<TypeError>(
2724
+ name, takeErrorInfo (dependency.takeError ()));
2725
+ }
2718
2726
}
2719
2727
2720
2728
auto DC = ForcedContext ? *ForcedContext : getDeclContext (contextID);
@@ -2802,37 +2810,42 @@ ModuleFile::getDeclChecked(DeclID DID, Optional<DeclContext *> ForcedContext) {
2802
2810
bool isStatic;
2803
2811
uint8_t rawStaticSpelling, rawAccessLevel, rawAddressorKind;
2804
2812
bool isObjC, isMutating, hasDynamicSelf, throws;
2805
- unsigned numParamPatterns;
2813
+ unsigned numParamPatterns, numNameComponentsBiased ;
2806
2814
GenericEnvironmentID genericEnvID;
2807
- TypeID interfaceTypeID, canonicalTypeID ;
2815
+ TypeID interfaceTypeID;
2808
2816
DeclID associatedDeclID;
2809
2817
DeclID overriddenID;
2810
2818
DeclID accessorStorageDeclID;
2811
- bool hasCompoundName, needsNewVTableEntry;
2812
- ArrayRef<uint64_t > nameIDs ;
2819
+ bool needsNewVTableEntry;
2820
+ ArrayRef<uint64_t > nameAndDependencyIDs ;
2813
2821
2814
2822
decls_block::FuncLayout::readRecord (scratch, contextID, isImplicit,
2815
2823
isStatic, rawStaticSpelling, isObjC,
2816
2824
isMutating, hasDynamicSelf, throws,
2817
2825
numParamPatterns, genericEnvID,
2818
- interfaceTypeID, canonicalTypeID,
2826
+ interfaceTypeID,
2819
2827
associatedDeclID, overriddenID,
2820
- accessorStorageDeclID, hasCompoundName,
2828
+ accessorStorageDeclID,
2829
+ numNameComponentsBiased,
2821
2830
rawAddressorKind, rawAccessLevel,
2822
- needsNewVTableEntry, nameIDs);
2831
+ needsNewVTableEntry,
2832
+ nameAndDependencyIDs);
2823
2833
2824
2834
// Resolve the name ids.
2825
- SmallVector<Identifier, 2 > names;
2826
- for (auto nameID : nameIDs)
2827
- names.push_back (getIdentifier (nameID));
2828
-
2835
+ Identifier baseName = getIdentifier (nameAndDependencyIDs.front ());
2829
2836
DeclName name;
2830
- if (!names.empty ()) {
2831
- if (hasCompoundName)
2832
- name = DeclName (ctx, names[0 ],
2833
- llvm::makeArrayRef (names.begin () + 1 , names.end ()));
2834
- else
2835
- name = DeclName (names[0 ]);
2837
+ ArrayRef<uint64_t > dependencyIDs;
2838
+ if (numNameComponentsBiased != 0 ) {
2839
+ SmallVector<Identifier, 2 > names;
2840
+ for (auto nameID : nameAndDependencyIDs.slice (1 ,
2841
+ numNameComponentsBiased-1 )){
2842
+ names.push_back (getIdentifier (nameID));
2843
+ }
2844
+ name = DeclName (ctx, baseName, names);
2845
+ dependencyIDs = nameAndDependencyIDs.slice (numNameComponentsBiased);
2846
+ } else {
2847
+ name = baseName;
2848
+ dependencyIDs = nameAndDependencyIDs.drop_front ();
2836
2849
}
2837
2850
2838
2851
DeclDeserializationError::Flags errorFlags;
@@ -2845,10 +2858,12 @@ ModuleFile::getDeclChecked(DeclID DID, Optional<DeclContext *> ForcedContext) {
2845
2858
return llvm::make_error<OverrideError>(name, errorFlags);
2846
2859
}
2847
2860
2848
- auto canonicalType = getTypeChecked (canonicalTypeID);
2849
- if (!canonicalType) {
2850
- return llvm::make_error<TypeError>(
2851
- name, takeErrorInfo (canonicalType.takeError ()), errorFlags);
2861
+ for (TypeID dependencyID : dependencyIDs) {
2862
+ auto dependency = getTypeChecked (dependencyID);
2863
+ if (!dependency) {
2864
+ return llvm::make_error<TypeError>(
2865
+ name, takeErrorInfo (dependency.takeError ()), errorFlags);
2866
+ }
2852
2867
}
2853
2868
2854
2869
auto DC = getDeclContext (contextID);
@@ -3355,28 +3370,29 @@ ModuleFile::getDeclChecked(DeclID DID, Optional<DeclContext *> ForcedContext) {
3355
3370
DeclContextID contextID;
3356
3371
bool isImplicit, isObjC;
3357
3372
GenericEnvironmentID genericEnvID;
3358
- TypeID interfaceTypeID, canonicalTypeID ;
3373
+ TypeID interfaceTypeID;
3359
3374
DeclID getterID, setterID, materializeForSetID;
3360
3375
DeclID addressorID, mutableAddressorID, willSetID, didSetID;
3361
3376
DeclID overriddenID;
3362
3377
uint8_t rawAccessLevel, rawSetterAccessLevel;
3363
3378
uint8_t rawStorageKind;
3364
- ArrayRef<uint64_t > argNameIDs;
3379
+ unsigned numArgNames;
3380
+ ArrayRef<uint64_t > argNameAndDependencyIDs;
3365
3381
3366
3382
decls_block::SubscriptLayout::readRecord (scratch, contextID,
3367
3383
isImplicit, isObjC, rawStorageKind,
3368
3384
genericEnvID,
3369
- interfaceTypeID, canonicalTypeID,
3385
+ interfaceTypeID,
3370
3386
getterID, setterID,
3371
3387
materializeForSetID,
3372
3388
addressorID, mutableAddressorID,
3373
3389
willSetID, didSetID,
3374
3390
overriddenID, rawAccessLevel,
3375
- rawSetterAccessLevel,
3376
- argNameIDs );
3391
+ rawSetterAccessLevel, numArgNames,
3392
+ argNameAndDependencyIDs );
3377
3393
// Resolve the name ids.
3378
3394
SmallVector<Identifier, 2 > argNames;
3379
- for (auto argNameID : argNameIDs )
3395
+ for (auto argNameID : argNameAndDependencyIDs. slice ( 0 , numArgNames) )
3380
3396
argNames.push_back (getIdentifier (argNameID));
3381
3397
DeclName name (ctx, ctx.Id_subscript , argNames);
3382
3398
@@ -3386,10 +3402,12 @@ ModuleFile::getDeclChecked(DeclID DID, Optional<DeclContext *> ForcedContext) {
3386
3402
return llvm::make_error<OverrideError>(name);
3387
3403
}
3388
3404
3389
- auto canonicalType = getTypeChecked (canonicalTypeID);
3390
- if (!canonicalType) {
3391
- return llvm::make_error<TypeError>(
3392
- name, takeErrorInfo (canonicalType.takeError ()));
3405
+ for (TypeID dependencyID : argNameAndDependencyIDs.slice (numArgNames)) {
3406
+ auto dependency = getTypeChecked (dependencyID);
3407
+ if (!dependency) {
3408
+ return llvm::make_error<TypeError>(
3409
+ name, takeErrorInfo (dependency.takeError ()));
3410
+ }
3393
3411
}
3394
3412
3395
3413
auto parent = getDeclContext (contextID);
@@ -4379,8 +4397,15 @@ Expected<Type> ModuleFile::getTypeChecked(TypeID TID) {
4379
4397
decls_block::UnboundGenericTypeLayout::readRecord (scratch,
4380
4398
genericID, parentID);
4381
4399
4382
- auto genericDecl = cast<GenericTypeDecl>(getDecl (genericID));
4383
- typeOrOffset = UnboundGenericType::get (genericDecl, getType (parentID), ctx);
4400
+ auto nominalOrError = getDeclChecked (genericID);
4401
+ if (!nominalOrError)
4402
+ return nominalOrError.takeError ();
4403
+ auto genericDecl = cast<GenericTypeDecl>(nominalOrError.get ());
4404
+
4405
+ // FIXME: Check this?
4406
+ auto parentTy = getType (parentID);
4407
+
4408
+ typeOrOffset = UnboundGenericType::get (genericDecl, parentTy, ctx);
4384
4409
break ;
4385
4410
}
4386
4411
0 commit comments