All the implementations are the same so see if they can be shared.
Created attachment 443743 [details] WIP Patch
<rdar://problem/85479832>