Skip to content

Commit 14ec6fe

Browse files
committed
Print origin when logging deinit, and allow per-class freedom suspension.
1 parent 2d08ea2 commit 14ec6fe

File tree

3 files changed

+14
-11
lines changed

3 files changed

+14
-11
lines changed

src/generation/base_type_generator.mts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,6 +1072,8 @@ export abstract class BaseTypeGenerator<Type extends RustType> {
10721072
}
10731073

10741074
return `
1075+
public static var enableDeinitLogging = true
1076+
public static var suspendFreedom = false
10751077
private static var instanceCounter: UInt = 0
10761078
internal let instanceNumber: UInt
10771079
@@ -1156,16 +1158,18 @@ export abstract class BaseTypeGenerator<Type extends RustType> {
11561158
if (this.hasFreeMethod(type)) {
11571159
freeCode = `
11581160
deinit {
1159-
if Bindings.suspendFreedom {
1161+
if Bindings.suspendFreedom || Self.suspendFreedom {
11601162
return
11611163
}
11621164
11631165
if !self.dangling {
1164-
Bindings.print("Freeing ${swiftTypeName} \\(self.instanceNumber).")
1166+
if Self.enableDeinitLogging {
1167+
Bindings.print("Freeing ${swiftTypeName} \\(self.instanceNumber). (Origin: \\(self.instantiationContext))")
1168+
}
11651169
${freeabilityOverrideInfix}
11661170
self.free()
1167-
} else {
1168-
Bindings.print("Not freeing ${swiftTypeName} \\(self.instanceNumber) due to dangle.")
1171+
} else if Self.enableDeinitLogging {
1172+
Bindings.print("Not freeing ${swiftTypeName} \\(self.instanceNumber) due to dangle. (Origin: \\(self.instantiationContext))")
11691173
}
11701174
}
11711175
`;

src/generation/bindings_file_generator.mts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,6 @@ export default class BindingsFileGenerator extends BaseTypeGenerator<GlobalBindi
9898
internal private(set) var anchors: Set<NativeTypeWrapper> = []
9999
internal var pointerDebugDescription: String? = nil
100100
101-
@available(*, unavailable, message: "This variable is only available to subclasses.")
102-
public static var enableDeinitLogging = true
103-
104101
init(conflictAvoidingVariableName: UInt, instantiationContext: String) {
105102
Self.globalInstanceCounter += 1
106103
self.globalInstanceNumber = Self.globalInstanceCounter

src/generation/trait_generator.mts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -141,15 +141,17 @@ export default class TraitGenerator extends BaseTypeGenerator<RustTrait> {
141141
}
142142
143143
deinit {
144-
if Bindings.suspendFreedom {
144+
if Bindings.suspendFreedom || Self.suspendFreedom {
145145
return
146146
}
147147
148148
if !self.dangling {
149-
Bindings.print("Freeing ${swiftTypeName} \\(self.instanceNumber).")
149+
if Self.enableDeinitLogging {
150+
Bindings.print("Freeing ${swiftTypeName} \\(self.instanceNumber). (Origin: \\(self.instantiationContext))")
151+
}
150152
self.free()
151-
} else {
152-
Bindings.print("Not freeing ${swiftTypeName} \\(self.instanceNumber) due to dangle.")
153+
} else if Self.enableDeinitLogging {
154+
Bindings.print("Not freeing ${swiftTypeName} \\(self.instanceNumber) due to dangle. (Origin: \\(self.instantiationContext))")
153155
}
154156
}
155157
}

0 commit comments

Comments
 (0)