Reimplement the CF stub system using ObjC. The primary effect of this is to break the link-time dependency on the CF symbols, but it also improves performance a bit.

One additional tweak (setting the scalar-aligned bit on foreign indices) had to be made to avoid a performance regression for long non-ASCII foreign strings.
This commit is contained in:
David Smith
2019-07-30 16:21:23 -07:00
parent d9fd3d3ec2
commit c5fc715746
6 changed files with 172 additions and 189 deletions

View File

@@ -423,7 +423,7 @@ extension String.UTF8View {
if utf8Len == 1 {
_internalInvariant(idx.transcodedOffset == 0)
return idx.nextEncoded
return idx.nextEncoded._scalarAligned
}
// Check if we're still transcoding sub-scalar
@@ -432,7 +432,8 @@ extension String.UTF8View {
}
// Skip to the next scalar
return idx.encoded(offsetBy: scalarLen)
_internalInvariant(idx.transcodedOffset == utf8Len - 1)
return idx.encoded(offsetBy: scalarLen)._scalarAligned
}
@usableFromInline @inline(never)