@@ -763,7 +763,7 @@ extension ModuleDependencyGraph {
763
763
764
764
func stringIndex( field i: Int ) throws -> Int {
765
765
let u = record. fields [ i]
766
- guard u < UInt64 ( internedStringTable. endIndex ) else {
766
+ guard u < UInt64 ( internedStringTable. count ) else {
767
767
throw malformedError
768
768
}
769
769
return Int ( u)
@@ -775,18 +775,18 @@ extension ModuleDependencyGraph {
775
775
let s = try internedString ( field: i)
776
776
return s. isEmpty ? nil : s
777
777
}
778
- func dependencyKey( fields : ( kindCode : Int ,
779
- declAspect : Int ,
780
- context : Int ,
781
- identifier : Int )
778
+ func dependencyKey( kindCodeField : Int ,
779
+ declAspectField : Int ,
780
+ contextField : Int ,
781
+ identifierField : Int
782
782
) throws -> DependencyKey {
783
- let kindCode = record. fields [ fields . kindCode ]
784
- guard let declAspect = DependencyKey . DeclAspect ( record. fields [ fields . declAspect ] )
783
+ let kindCode = record. fields [ kindCodeField ]
784
+ guard let declAspect = DependencyKey . DeclAspect ( record. fields [ declAspectField ] )
785
785
else {
786
786
throw malformedError
787
787
}
788
- let context = try internedString ( field: fields . context )
789
- let identifier = try internedString ( field: fields . identifier )
788
+ let context = try internedString ( field: contextField )
789
+ let identifier = try internedString ( field: identifierField )
790
790
let designator = try DependencyKey . Designator (
791
791
kindCode: kindCode, context: context, name: identifier,
792
792
internedStringTable: internedStringTable, fileSystem: fileSystem)
@@ -805,13 +805,18 @@ extension ModuleDependencyGraph {
805
805
806
806
self . majorVersion = record. fields [ 0 ]
807
807
self . minorVersion = record. fields [ 1 ]
808
+ let stringCount = record. fields [ 2 ]
809
+ internedStringTable. reserveCapacity ( Int ( stringCount) )
808
810
self . compilerVersionString = String ( decoding: compilerVersionBlob, as: UTF8 . self)
809
811
case . moduleDepGraphNode:
810
812
guard record. fields. count == 6
811
813
else {
812
814
throw malformedError
813
815
}
814
- let key = try dependencyKey ( fields: ( 0 , 1 , 2 , 3 ) )
816
+ let key = try dependencyKey ( kindCodeField: 0 ,
817
+ declAspectField: 1 ,
818
+ contextField: 2 ,
819
+ identifierField: 3 )
815
820
let depSourceFileOrNone = try nonemptyInternedString ( field: 4 )
816
821
let depSource = try depSourceFileOrNone. map {
817
822
internedFile -> DependencySource in
@@ -833,7 +838,11 @@ extension ModuleDependencyGraph {
833
838
else {
834
839
throw malformedError
835
840
}
836
- self . currentDefKey = try dependencyKey ( fields: ( 0 , 1 , 2 , 3 ) )
841
+ self . currentDefKey = try dependencyKey (
842
+ kindCodeField: 0 ,
843
+ declAspectField: 1 ,
844
+ contextField: 2 ,
845
+ identifierField: 3 )
837
846
case . useIDNode:
838
847
guard let key = self . currentDefKey,
839
848
record. fields. count == 1 else {
@@ -1025,6 +1034,7 @@ extension ModuleDependencyGraph {
1025
1034
$0. append ( RecordID . metadata)
1026
1035
$0. append ( serializedGraphVersion. majorForWriting)
1027
1036
$0. append ( serializedGraphVersion. minorForWriting)
1037
+ $0. append ( min ( UInt ( internedStringTable. count) , UInt ( UInt32 . max) ) )
1028
1038
} ,
1029
1039
blob: self . compilerVersion)
1030
1040
}
@@ -1068,6 +1078,8 @@ extension ModuleDependencyGraph {
1068
1078
. fixed( bitWidth: 16 ) ,
1069
1079
// Minor version
1070
1080
. fixed( bitWidth: 16 ) ,
1081
+ // Number of strings to be interned
1082
+ . fixed( bitWidth: 32 ) ,
1071
1083
// Frontend version
1072
1084
. blob,
1073
1085
] )
0 commit comments