Skip to content

Commit 9ccbe9e

Browse files
committed
Eliminate extra indirection
We only need to synchronize the lazy initialization; accesses either succeed or don't already.
1 parent 8db7cd2 commit 9ccbe9e

File tree

1 file changed

+5
-15
lines changed

1 file changed

+5
-15
lines changed

Sources/_StringProcessing/Regex/Core.swift

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -85,19 +85,16 @@ extension Regex {
8585
init(_ value: MEProgram<String>) { self.value = value }
8686
}
8787

88-
private var _loweredProgramStorage: UnsafeMutablePointer<AnyObject?> = {
89-
let pointer = UnsafeMutablePointer<AnyObject?>.allocate(capacity: 1)
90-
pointer.initialize(to: nil)
91-
return pointer
92-
}()
88+
/// Do not use directly - all accesses must go through `loweredProgram`.
89+
private var _unsafeLoweredProgramStorage: AnyObject? = nil
9390

9491
/// The program for execution with the matching engine.
9592
var loweredProgram: MEProgram<String> {
96-
if let loweredObject = _stdlib_atomicLoadARCRef(object: _loweredProgramStorage) {
97-
return (loweredObject as! ProgramBox).value
93+
if let loweredObject = _unsafeLoweredProgramStorage as? ProgramBox {
94+
return loweredObject.value
9895
}
9996
let lowered = try! Compiler(tree: tree).emit()
100-
_stdlib_atomicInitializeARCRef(object: _loweredProgramStorage, desired: ProgramBox(lowered))
97+
_stdlib_atomicInitializeARCRef(object: &_unsafeLoweredProgramStorage, desired: ProgramBox(lowered))
10198
return lowered
10299
}
103100

@@ -108,13 +105,6 @@ extension Regex {
108105
init(tree: DSLTree) {
109106
self.tree = tree
110107
}
111-
112-
deinit {
113-
if _loweredProgramStorage.pointee != nil {
114-
_loweredProgramStorage.deinitialize(count: 1)
115-
}
116-
_loweredProgramStorage.deallocate()
117-
}
118108
}
119109

120110
/// The set of matching options that applies to the start of this regex.

0 commit comments

Comments
 (0)