@@ -38,6 +38,7 @@ internal struct _ThreadLocalStorage {
38
38
//
39
39
// private
40
40
internal var uBreakIterator : OpaquePointer
41
+ internal var uText : OpaquePointer
41
42
42
43
// TODO: Consider saving two, e.g. for character-by-character comparison
43
44
@@ -55,8 +56,9 @@ internal struct _ThreadLocalStorage {
55
56
// TODO: unowned reference to string owner, base address, and _countAndFlags
56
57
57
58
// private: Should only be called by _initializeThreadLocalStorage
58
- internal init ( _uBreakIterator: OpaquePointer ) {
59
+ internal init ( _uBreakIterator: OpaquePointer , _uText : OpaquePointer ) {
59
60
self . uBreakIterator = _uBreakIterator
61
+ self . uText = _uText
60
62
}
61
63
62
64
// Get the current thread's TLS pointer. On first call for a given thread,
@@ -104,19 +106,26 @@ internal func _destroyTLS(_ ptr: UnsafeMutableRawPointer?) {
104
106
internal func _createThreadLocalStorage( )
105
107
-> UnsafeMutablePointer < _ThreadLocalStorage >
106
108
{
107
- // Create and initialize one .
109
+ // Allocate and initialize a UBreakIterator and UText .
108
110
var err = __swift_stdlib_U_ZERO_ERROR
109
111
let newUBreakIterator = __swift_stdlib_ubrk_open (
110
112
/*type:*/ __swift_stdlib_UBRK_CHARACTER, /*locale:*/ nil ,
111
113
/*text:*/ nil , /*textLength:*/ 0 , /*status:*/ & err)
112
114
_precondition ( err. isSuccess, " Unexpected ubrk_open failure " )
113
115
116
+ // utext_openUTF8 needs a valid pointer, even though we won't read from it
117
+ var a : Int8 = 0x41
118
+ let newUText = __swift_stdlib_utext_openUTF8 (
119
+ /*ut:*/ nil , /*s:*/ & a, /*len:*/ 1 , /*status:*/ & err)
120
+
121
+ _precondition ( err. isSuccess, " Unexpected utext_openUTF8 failure " )
122
+
114
123
let tlsPtr : UnsafeMutablePointer < _ThreadLocalStorage >
115
124
= UnsafeMutablePointer< _ThreadLocalStorage> . allocate(
116
125
capacity: 1
117
126
)
118
- tlsPtr. initialize (
119
- to : _ThreadLocalStorage ( _uBreakIterator: newUBreakIterator)
120
- )
127
+ tlsPtr. initialize ( to : _ThreadLocalStorage (
128
+ _uBreakIterator: newUBreakIterator, _uText : newUText ) )
129
+
121
130
return tlsPtr
122
131
}
0 commit comments