@@ -2439,11 +2439,6 @@ internal func _walkKeyPathPattern<W: KeyPathPatternVisitor>(
2439
2439
leafAccessor: leafAccessor,
2440
2440
kvcCompatibilityString: kvcString)
2441
2441
2442
- let bufferPtr = pattern. advanced ( by: keyPathPatternHeaderSize)
2443
- let bufferHeader = bufferPtr. load ( as: KeyPathBuffer . Header. self)
2444
- var buffer = UnsafeRawBufferPointer ( start: bufferPtr + 4 ,
2445
- count: bufferHeader. size)
2446
-
2447
2442
func visitStored( header: RawKeyPathComponent . Header ,
2448
2443
componentBuffer: inout UnsafeRawBufferPointer ) {
2449
2444
// Decode a stored property. A small offset may be stored inline in the
@@ -2458,7 +2453,7 @@ internal func _walkKeyPathPattern<W: KeyPathPatternVisitor>(
2458
2453
offset = . unresolvedFieldOffset( _pop ( from: & componentBuffer,
2459
2454
as: UInt32 . self) )
2460
2455
case RawKeyPathComponent . Header. unresolvedIndirectOffsetPayload:
2461
- let base = buffer . baseAddress. unsafelyUnwrapped
2456
+ let base = componentBuffer . baseAddress. unsafelyUnwrapped
2462
2457
let relativeOffset = _pop ( from: & componentBuffer,
2463
2458
as: Int32 . self)
2464
2459
let ptr = _resolveRelativeIndirectableAddress ( base, relativeOffset)
@@ -2532,6 +2527,13 @@ internal func _walkKeyPathPattern<W: KeyPathPatternVisitor>(
2532
2527
}
2533
2528
}
2534
2529
2530
+ // We declare this down here to avoid the temptation to use it within
2531
+ // the functions above.
2532
+ let bufferPtr = pattern. advanced ( by: keyPathPatternHeaderSize)
2533
+ let bufferHeader = bufferPtr. load ( as: KeyPathBuffer . Header. self)
2534
+ var buffer = UnsafeRawBufferPointer ( start: bufferPtr + 4 ,
2535
+ count: bufferHeader. size)
2536
+
2535
2537
while !buffer. isEmpty {
2536
2538
let header = _pop ( from: & buffer,
2537
2539
as: RawKeyPathComponent . Header. self)
0 commit comments