Skip to content

Commit 1ab9fda

Browse files
committed
Revert "[stdlib] Make the rest of the scalar properties native (swiftlang#40233)"
This reverts commit ac6c08f.
1 parent 9cd109c commit 1ab9fda

23 files changed

+1078
-80444
lines changed

stdlib/public/SwiftShims/UnicodeData.h

Lines changed: 6 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -21,26 +21,6 @@
2121
extern "C" {
2222
#endif
2323

24-
#define SWIFT_STDLIB_LARGEST_NAME_COUNT 88
25-
26-
//===----------------------------------------------------------------------===//
27-
// Utilities
28-
//===----------------------------------------------------------------------===//
29-
30-
__swift_intptr_t _swift_stdlib_getMphIdx(__swift_uint32_t scalar,
31-
__swift_intptr_t levels,
32-
const __swift_uint64_t * const *keys,
33-
const __swift_uint16_t * const *ranks,
34-
const __swift_uint16_t * const sizes);
35-
36-
__swift_intptr_t _swift_stdlib_getScalarBitArrayIdx(__swift_uint32_t scalar,
37-
const __swift_uint64_t *bitArrays,
38-
const __swift_uint16_t *ranks);
39-
40-
//===----------------------------------------------------------------------===//
41-
// Normalization
42-
//===----------------------------------------------------------------------===//
43-
4424
SWIFT_RUNTIME_STDLIB_INTERNAL
4525
__swift_uint16_t _swift_stdlib_getNormData(__swift_uint32_t scalar);
4626

@@ -54,50 +34,19 @@ SWIFT_RUNTIME_STDLIB_INTERNAL
5434
__swift_uint32_t _swift_stdlib_getComposition(__swift_uint32_t x,
5535
__swift_uint32_t y);
5636

57-
//===----------------------------------------------------------------------===//
58-
// Grapheme Breaking
59-
//===----------------------------------------------------------------------===//
60-
37+
SWIFT_RUNTIME_STDLIB_INTERNAL
38+
__swift_intptr_t _swift_stdlib_getMphIdx(__swift_uint32_t scalar,
39+
__swift_intptr_t levels,
40+
const __swift_uint64_t * const *keys,
41+
const __swift_uint16_t * const *ranks,
42+
const __swift_uint16_t * const sizes);
6143

6244
SWIFT_RUNTIME_STDLIB_INTERNAL
6345
__swift_uint8_t _swift_stdlib_getGraphemeBreakProperty(__swift_uint32_t scalar);
6446

65-
//===----------------------------------------------------------------------===//
66-
// Unicode.Scalar.Properties
67-
//===----------------------------------------------------------------------===//
68-
6947
SWIFT_RUNTIME_STDLIB_INTERNAL
7048
__swift_uint64_t _swift_stdlib_getBinaryProperties(__swift_uint32_t scalar);
7149

72-
SWIFT_RUNTIME_STDLIB_INTERNAL
73-
__swift_uint8_t _swift_stdlib_getNumericType(__swift_uint32_t scalar);
74-
75-
SWIFT_RUNTIME_STDLIB_INTERNAL
76-
double _swift_stdlib_getNumericValue(__swift_uint32_t scalar);
77-
78-
SWIFT_RUNTIME_STDLIB_INTERNAL
79-
const char *_swift_stdlib_getNameAlias(__swift_uint32_t scalar);
80-
81-
SWIFT_RUNTIME_STDLIB_INTERNAL
82-
__swift_int32_t _swift_stdlib_getMapping(__swift_uint32_t scalar,
83-
__swift_uint8_t mapping);
84-
85-
SWIFT_RUNTIME_STDLIB_INTERNAL
86-
const __swift_uint8_t *_swift_stdlib_getSpecialMapping(__swift_uint32_t scalar,
87-
__swift_uint8_t mapping,
88-
__swift_intptr_t *length);
89-
90-
SWIFT_RUNTIME_STDLIB_INTERNAL
91-
__swift_intptr_t _swift_stdlib_getScalarName(__swift_uint32_t scalar,
92-
__swift_uint8_t *buffer,
93-
__swift_intptr_t capacity);
94-
95-
SWIFT_RUNTIME_STDLIB_INTERNAL
96-
__swift_uint16_t _swift_stdlib_getAge(__swift_uint32_t scalar);
97-
98-
SWIFT_RUNTIME_STDLIB_INTERNAL
99-
__swift_uint8_t _swift_stdlib_getGeneralCategory(__swift_uint32_t scalar);
100-
10150
#ifdef __cplusplus
10251
} // extern "C"
10352
#endif

stdlib/public/SwiftShims/UnicodeShims.h

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,16 @@
2929
extern "C" {
3030
#endif
3131

32+
SWIFT_RUNTIME_STDLIB_API
33+
__swift_int32_t _swift_stdlib_unicode_strToUpper(
34+
__swift_uint16_t *Destination, __swift_int32_t DestinationCapacity,
35+
const __swift_uint16_t *Source, __swift_int32_t SourceLength);
36+
37+
SWIFT_RUNTIME_STDLIB_API
38+
__swift_int32_t _swift_stdlib_unicode_strToLower(
39+
__swift_uint16_t *Destination, __swift_int32_t DestinationCapacity,
40+
const __swift_uint16_t *Source, __swift_int32_t SourceLength);
41+
3242
typedef enum __swift_stdlib_UProperty {
3343
__swift_stdlib_UCHAR_GENERAL_CATEGORY = 0x1005,
3444
__swift_stdlib_UCHAR_NUMERIC_TYPE = 0x1009,
@@ -254,6 +264,16 @@ typedef enum __swift_stdlib_UCharNameChoice {
254264
#endif
255265
} __swift_stdlib_UCharNameChoice;
256266

267+
typedef enum __swift_stdlib_UNumericType {
268+
__swift_stdlib_U_NT_NONE,
269+
__swift_stdlib_U_NT_DECIMAL,
270+
__swift_stdlib_U_NT_DIGIT,
271+
__swift_stdlib_U_NT_NUMERIC,
272+
#ifndef U_HIDE_DEPRECATED_API
273+
__swift_stdlib_U_NT_COUNT
274+
#endif
275+
} __swift_stdlib_UNumericType;
276+
257277
typedef struct __swift_stdlib_UBreakIterator __swift_stdlib_UBreakIterator;
258278
typedef struct __swift_stdlib_UText __swift_stdlib_UText;
259279
typedef __swift_int8_t __swift_stdlib_UBool;
@@ -271,6 +291,44 @@ typedef __swift_uint16_t __swift_stdlib_UChar;
271291
typedef __swift_uint8_t
272292
__swift_stdlib_UVersionInfo[__SWIFT_STDLIB_U_MAX_VERSION_LENGTH];
273293

294+
SWIFT_RUNTIME_STDLIB_API
295+
void __swift_stdlib_u_charAge(
296+
__swift_stdlib_UChar32, __swift_stdlib_UVersionInfo _Nonnull);
297+
298+
SWIFT_RUNTIME_STDLIB_API
299+
__swift_int32_t
300+
__swift_stdlib_u_getIntPropertyValue(__swift_stdlib_UChar32,
301+
__swift_stdlib_UProperty);
302+
303+
SWIFT_RUNTIME_STDLIB_API
304+
__swift_int32_t __swift_stdlib_u_charName(
305+
__swift_stdlib_UChar32 code, __swift_stdlib_UCharNameChoice nameChoice,
306+
char *_Nullable buffer, __swift_int32_t bufferLength,
307+
__swift_stdlib_UErrorCode *pErrorCode);
308+
309+
SWIFT_RUNTIME_STDLIB_API
310+
__swift_int32_t __swift_stdlib_u_strToLower(
311+
__swift_stdlib_UChar *dest, __swift_int32_t destCapacity,
312+
const __swift_stdlib_UChar *src, __swift_int32_t srcLength,
313+
const char *_Nullable locale, __swift_stdlib_UErrorCode *pErrorCode);
314+
315+
SWIFT_RUNTIME_STDLIB_API
316+
__swift_int32_t __swift_stdlib_u_strToTitle(
317+
__swift_stdlib_UChar *dest, __swift_int32_t destCapacity,
318+
const __swift_stdlib_UChar *src, __swift_int32_t srcLength,
319+
__swift_stdlib_UBreakIterator *_Nullable titleIter,
320+
const char *_Nullable locale, __swift_stdlib_UErrorCode *pErrorCode);
321+
322+
SWIFT_RUNTIME_STDLIB_API
323+
__swift_int32_t __swift_stdlib_u_strToUpper(
324+
__swift_stdlib_UChar *dest, __swift_int32_t destCapacity,
325+
const __swift_stdlib_UChar *src, __swift_int32_t srcLength,
326+
const char *_Nullable locale, __swift_stdlib_UErrorCode *pErrorCode);
327+
328+
SWIFT_RUNTIME_STDLIB_API
329+
double __swift_stdlib_u_getNumericValue(__swift_stdlib_UChar32 c);
330+
331+
274332
#ifdef __cplusplus
275333
} // extern "C"
276334
#endif

stdlib/public/core/String.swift

Lines changed: 68 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -849,14 +849,41 @@ extension String {
849849
}
850850
}
851851

852-
var result = ""
853-
result.reserveCapacity(utf8.count)
854-
855-
for scalar in unicodeScalars {
856-
result += scalar.properties.lowercaseMapping
852+
// TODO(String performance): Try out incremental case-conversion rather than
853+
// make UTF-16 array beforehand
854+
let codeUnits = Array(self.utf16).withUnsafeBufferPointer {
855+
(uChars: UnsafeBufferPointer<UInt16>) -> Array<UInt16> in
856+
var length: Int = 0
857+
let result = Array<UInt16>(unsafeUninitializedCapacity: uChars.count) {
858+
buffer, initializedCount in
859+
var error = __swift_stdlib_U_ZERO_ERROR
860+
length = Int(truncatingIfNeeded:
861+
__swift_stdlib_u_strToLower(
862+
buffer.baseAddress._unsafelyUnwrappedUnchecked,
863+
Int32(buffer.count),
864+
uChars.baseAddress._unsafelyUnwrappedUnchecked,
865+
Int32(uChars.count),
866+
"",
867+
&error))
868+
initializedCount = min(length, uChars.count)
869+
}
870+
if length > uChars.count {
871+
var error = __swift_stdlib_U_ZERO_ERROR
872+
return Array<UInt16>(unsafeUninitializedCapacity: length) {
873+
buffer, initializedCount in
874+
__swift_stdlib_u_strToLower(
875+
buffer.baseAddress._unsafelyUnwrappedUnchecked,
876+
Int32(buffer.count),
877+
uChars.baseAddress._unsafelyUnwrappedUnchecked,
878+
Int32(uChars.count),
879+
"",
880+
&error)
881+
initializedCount = length
882+
}
883+
}
884+
return result
857885
}
858-
859-
return result
886+
return codeUnits.withUnsafeBufferPointer { String._uncheckedFromUTF16($0) }
860887
}
861888

862889
/// Returns an uppercase version of the string.
@@ -883,14 +910,41 @@ extension String {
883910
}
884911
}
885912

886-
var result = ""
887-
result.reserveCapacity(utf8.count)
888-
889-
for scalar in unicodeScalars {
890-
result += scalar.properties.uppercaseMapping
913+
// TODO(String performance): Try out incremental case-conversion rather than
914+
// make UTF-16 array beforehand
915+
let codeUnits = Array(self.utf16).withUnsafeBufferPointer {
916+
(uChars: UnsafeBufferPointer<UInt16>) -> Array<UInt16> in
917+
var length: Int = 0
918+
let result = Array<UInt16>(unsafeUninitializedCapacity: uChars.count) {
919+
buffer, initializedCount in
920+
var err = __swift_stdlib_U_ZERO_ERROR
921+
length = Int(truncatingIfNeeded:
922+
__swift_stdlib_u_strToUpper(
923+
buffer.baseAddress._unsafelyUnwrappedUnchecked,
924+
Int32(buffer.count),
925+
uChars.baseAddress._unsafelyUnwrappedUnchecked,
926+
Int32(uChars.count),
927+
"",
928+
&err))
929+
initializedCount = min(length, uChars.count)
930+
}
931+
if length > uChars.count {
932+
var err = __swift_stdlib_U_ZERO_ERROR
933+
return Array<UInt16>(unsafeUninitializedCapacity: length) {
934+
buffer, initializedCount in
935+
__swift_stdlib_u_strToUpper(
936+
buffer.baseAddress._unsafelyUnwrappedUnchecked,
937+
Int32(buffer.count),
938+
uChars.baseAddress._unsafelyUnwrappedUnchecked,
939+
Int32(uChars.count),
940+
"",
941+
&err)
942+
initializedCount = length
943+
}
944+
}
945+
return result
891946
}
892-
893-
return result
947+
return codeUnits.withUnsafeBufferPointer { String._uncheckedFromUTF16($0) }
894948
}
895949

896950
/// Creates an instance from the description of a given

0 commit comments

Comments
 (0)