Skip to content

Commit b5b1d9a

Browse files
author
Nathan Hawes
authored
Revert "[SourceKit] Make each Variant keep a strong reference to its SourceKitdResponse context"
1 parent 5322284 commit b5b1d9a

File tree

2 files changed

+12
-54
lines changed

2 files changed

+12
-54
lines changed

test/SourceKit/SwiftLang/basic.swift

Lines changed: 0 additions & 28 deletions
This file was deleted.

tools/SourceKit/tools/swift-lang/SourceKitdResponse.swift

Lines changed: 12 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,12 @@ import sourcekitd
1717
public class SourceKitdResponse: CustomStringConvertible {
1818

1919
public struct Dictionary: CustomStringConvertible, CustomReflectable {
20-
// The lifetime of this sourcekitd_variant_t is tied to the response it came
21-
// from, so keep a reference to the response too.
2220
private let dict: sourcekitd_variant_t
23-
private let context: SourceKitdResponse
2421

25-
26-
public init(dict: sourcekitd_variant_t, context: SourceKitdResponse) {
22+
public init(dict: sourcekitd_variant_t) {
2723
assert(sourcekitd_variant_get_type(dict).rawValue ==
2824
SOURCEKITD_VARIANT_TYPE_DICTIONARY.rawValue)
2925
self.dict = dict
30-
self.context = context
3126
}
3227

3328
public func getString(_ key: SourceKitdUID) -> String {
@@ -52,12 +47,12 @@ public class SourceKitdResponse: CustomStringConvertible {
5247

5348
public func getArray(_ key: SourceKitdUID) -> Array {
5449
let value = sourcekitd_variant_dictionary_get_value(dict, key.uid)
55-
return Array(arr: value, context: context)
50+
return Array(arr: value)
5651
}
5752

5853
public func getDictionary(_ key: SourceKitdUID) -> Dictionary {
5954
let value = sourcekitd_variant_dictionary_get_value(dict, key.uid)
60-
return Dictionary(dict: value, context: context)
55+
return Dictionary(dict: value)
6156
}
6257

6358
public func getOptional(_ key: SourceKitdUID) -> Variant? {
@@ -66,7 +61,7 @@ public class SourceKitdResponse: CustomStringConvertible {
6661
SOURCEKITD_VARIANT_TYPE_NULL.rawValue {
6762
return nil
6863
}
69-
return Variant(val: value, context: context)
64+
return Variant(val: value)
7065
}
7166

7267
public var description: String {
@@ -79,21 +74,17 @@ public class SourceKitdResponse: CustomStringConvertible {
7974
}
8075

8176
public struct Array: CustomStringConvertible {
82-
// The lifetime of this sourcekitd_variant_t is tied to the response it came
83-
// from, so keep a reference to the response too.
8477
private let arr: sourcekitd_variant_t
85-
private let context: SourceKitdResponse
8678

8779
public var count: Int {
8880
let count = sourcekitd_variant_array_get_count(arr)
8981
return Int(count)
9082
}
9183

92-
public init(arr: sourcekitd_variant_t, context: SourceKitdResponse) {
84+
public init(arr: sourcekitd_variant_t) {
9385
assert(sourcekitd_variant_get_type(arr).rawValue ==
9486
SOURCEKITD_VARIANT_TYPE_ARRAY.rawValue)
9587
self.arr = arr
96-
self.context = context
9788
}
9889

9990
public func getString(_ index: Int) -> String {
@@ -118,21 +109,20 @@ public class SourceKitdResponse: CustomStringConvertible {
118109

119110
public func getArray(_ index: Int) -> Array {
120111
let value = sourcekitd_variant_array_get_value(arr, index)
121-
return Array(arr: value, context: context)
112+
return Array(arr: value)
122113
}
123114

124115
public func getDictionary(_ index: Int) -> Dictionary {
125116
let value = sourcekitd_variant_array_get_value(arr, index)
126-
return Dictionary(dict: value, context: context)
117+
return Dictionary(dict: value)
127118
}
128119

129120
public func enumerate(_ applier: (_ index: Int, _ value: Variant) -> Bool) {
130121
// The block passed to sourcekit_variant_array_apply() does not actually
131122
// escape, it's synchronous and not called after returning.
132-
let context = self.context
133123
withoutActuallyEscaping(applier) { escapingApplier in
134124
_ = sourcekitd_variant_array_apply(arr) { (index, elem) -> Bool in
135-
return escapingApplier(Int(index), Variant(val: elem, context: context))
125+
return escapingApplier(Int(index), Variant(val: elem))
136126
}
137127
}
138128
}
@@ -144,14 +134,10 @@ public class SourceKitdResponse: CustomStringConvertible {
144134
}
145135

146136
public struct Variant: CustomStringConvertible {
147-
// The lifetime of this sourcekitd_variant_t is tied to the response it came
148-
// from, so keep a reference to the response too.
149137
private let val: sourcekitd_variant_t
150-
fileprivate let context: SourceKitdResponse
151138

152-
fileprivate init(val: sourcekitd_variant_t, context: SourceKitdResponse) {
139+
fileprivate init(val: sourcekitd_variant_t) {
153140
self.val = val
154-
self.context = context
155141
}
156142

157143
public func getString() -> String {
@@ -181,11 +167,11 @@ public class SourceKitdResponse: CustomStringConvertible {
181167
}
182168

183169
public func getArray() -> Array {
184-
return Array(arr: val, context: context)
170+
return Array(arr: val)
185171
}
186172

187173
public func getDictionary() -> Dictionary {
188-
return Dictionary(dict: val, context: context)
174+
return Dictionary(dict: val)
189175
}
190176

191177
public var description: String {
@@ -196,7 +182,7 @@ public class SourceKitdResponse: CustomStringConvertible {
196182
private let resp: sourcekitd_response_t
197183

198184
public var value: Dictionary {
199-
return Dictionary(dict: sourcekitd_response_get_value(resp), context: self)
185+
return Dictionary(dict: sourcekitd_response_get_value(resp))
200186
}
201187

202188
/// Copies the raw bytes of the JSON description of this documentation item.

0 commit comments

Comments
 (0)