Skip to content

Commit

Permalink
Eliminate extra indirection
Browse files Browse the repository at this point in the history
We only need to synchronize the lazy initialization; accesses either
succeed or don't already.
  • Loading branch information
natecook1000 committed Jun 1, 2022
1 parent 8db7cd2 commit 63c4e6a
Showing 1 changed file with 5 additions and 15 deletions.
20 changes: 5 additions & 15 deletions Sources/_StringProcessing/Regex/Core.swift
Original file line number Diff line number Diff line change
Expand Up @@ -85,19 +85,16 @@ extension Regex {
init(_ value: MEProgram<String>) { self.value = value }
}

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

/// The program for execution with the matching engine.
var loweredProgram: MEProgram<String> {
if let loweredObject = _stdlib_atomicLoadARCRef(object: _loweredProgramStorage) {
return (loweredObject as! ProgramBox).value
if let loweredObject = _loweredProgramStorage as? ProgramBox {
return loweredObject.value
}
let lowered = try! Compiler(tree: tree).emit()
_stdlib_atomicInitializeARCRef(object: _loweredProgramStorage, desired: ProgramBox(lowered))
_stdlib_atomicInitializeARCRef(object: &_loweredProgramStorage, desired: ProgramBox(lowered))
return lowered
}

Expand All @@ -108,13 +105,6 @@ extension Regex {
init(tree: DSLTree) {
self.tree = tree
}

deinit {
if _loweredProgramStorage.pointee != nil {
_loweredProgramStorage.deinitialize(count: 1)
}
_loweredProgramStorage.deallocate()
}
}

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

0 comments on commit 63c4e6a

Please sign in to comment.