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