Skip to content

Commit 25131e8

Browse files
committed
Changes required for swift-4.1-branch port to Android
1 parent 6c54c84 commit 25131e8

19 files changed

+75
-45
lines changed

CoreFoundation/Base.subproj/CFInternal.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ extern void __CFGenericValidateType_(CFTypeRef cf, CFTypeID type, const char *fu
216216
#define __CFBitfield64GetValue(V, N1, N2) (((V) & __CFBitfield64Mask(N1, N2)) >> (N2))
217217
#define __CFBitfield64SetValue(V, N1, N2, X) ((V) = ((V) & ~__CFBitfield64Mask(N1, N2)) | ((((uint64_t)X) << (N2)) & __CFBitfield64Mask(N1, N2)))
218218

219-
#if __LP64__
219+
#if __LP64__ || DEPLOYMENT_TARGET_ANDROID
220220
typedef uint64_t __CFInfoType;
221221
#define __CFInfoMask(N1, N2) __CFBitfield64Mask(N1, N2)
222222
#else

CoreFoundation/Base.subproj/CFKnownLocations.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ CFURLRef _Nullable _CFKnownLocationCreatePreferencesURLForUser(CFKnownLocationUs
4545
}
4646

4747
}
48-
#elif !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS
48+
#elif !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS && !DEPLOYMENT_TARGET_ANDROID
4949

5050
/*
5151
Building for an OS that uses the FHS, BSD's hier(7), and/or the XDG specification for paths:

CoreFoundation/Base.subproj/CFPlatform.c

+3
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,9 @@ CF_EXPORT CFStringRef CFCopyFullUserName(void) {
297297
uid_t euid;
298298
__CFGetUGIDs(&euid, NULL);
299299
struct passwd *upwd = getpwuid(euid ? euid : getuid());
300+
#if DEPLOYMENT_TARGET_ANDROID
301+
#define pw_gecos pw_name
302+
#endif
300303
if (upwd && upwd->pw_gecos) {
301304
result = CFStringCreateWithCString(kCFAllocatorSystemDefault, upwd->pw_gecos, kCFPlatformInterfaceStringEncoding);
302305
}

CoreFoundation/Base.subproj/CFUtilities.c

+1
Original file line numberDiff line numberDiff line change
@@ -1000,6 +1000,7 @@ void CFLog1(CFLogLevel lev, CFStringRef message) {
10001000
CFStringGetCString(message, buffer, maxLength, encoding);
10011001

10021002
__android_log_print(priority, tag, "%s", buffer);
1003+
fprintf(stderr, "%s\n", buffer);
10031004

10041005
if (buffer != &stack_buffer[0]) free(buffer);
10051006
#else

CoreFoundation/Base.subproj/ForSwiftFoundationOnly.h

+2
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,8 @@ static inline _Bool _withStackOrHeapBuffer(size_t amount, void (__attribute__((n
403403
static inline int _direntNameLength(struct dirent *entry) {
404404
#ifdef _D_EXACT_NAMLEN // defined on Linux
405405
return _D_EXACT_NAMLEN(entry);
406+
#elif DEPLOYMENT_TARGET_ANDROID
407+
return strlen(entry->d_name);
406408
#else
407409
return entry->d_namlen;
408410
#endif

CoreFoundation/NumberDate.subproj/CFTimeZone.c

+9
Original file line numberDiff line numberDiff line change
@@ -813,6 +813,15 @@ static CFTimeZoneRef __CFTimeZoneCreateSystem(void) {
813813
CFRelease(name);
814814
if (result) return result;
815815
}
816+
#if DEPLOYMENT_TARGET_ANDROID
817+
// Timezone database by name not available on Android.
818+
// Approximate with gmtoff - could be general default.
819+
struct tm info;
820+
time_t now = time(NULL);
821+
if (NULL != localtime_r(&now, &info)) {
822+
return CFTimeZoneCreateWithTimeIntervalFromGMT(kCFAllocatorSystemDefault, info.tm_gmtoff);
823+
}
824+
#endif
816825
return CFTimeZoneCreateWithTimeIntervalFromGMT(kCFAllocatorSystemDefault, 0.0);
817826
}
818827

CoreFoundation/PlugIn.subproj/CFBundle.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ static void _CFBundleEnsureBundlesExistForImagePaths(CFArrayRef imagePaths);
137137

138138
#pragma mark -
139139

140-
#if !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS
140+
#if !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS && !DEPLOYMENT_TARGET_ANDROID
141141

142142
// Functions and constants for FHS bundles:
143143
#define _CFBundleFHSDirectory_share CFSTR("share")
@@ -162,10 +162,10 @@ static Boolean _CFBundleURLIsForFHSInstalledBundle(CFURLRef bundleURL) {
162162

163163
return isFHSBundle;
164164
}
165-
#endif // !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS
165+
#endif // !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS && !DEPLOYMENT_TARGET_ANDROID
166166

167167
Boolean _CFBundleSupportsFHSBundles() {
168-
#if !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS
168+
#if !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS && !DEPLOYMENT_TARGET_ANDROID
169169
return true;
170170
#else
171171
return false;
@@ -714,7 +714,7 @@ static CFBundleRef _CFBundleCreate(CFAllocatorRef allocator, CFURLRef bundleURL,
714714

715715
bundle->_url = newURL;
716716

717-
#if !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS
717+
#if !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS && !DEPLOYMENT_TARGET_ANDROID
718718
bundle->_isFHSInstalledBundle = _CFBundleURLIsForFHSInstalledBundle(newURL);
719719
#endif
720720

CoreFoundation/PlugIn.subproj/CFBundle_Executable.c

+7-7
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
#include <dlfcn.h>
1616
#endif
1717

18-
#if !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS
18+
#if !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS && !DEPLOYMENT_TARGET_ANDROID
1919

2020
#if DEPLOYMENT_TARGET_LINUX
2121
#if __LP64__
@@ -48,7 +48,7 @@
4848
_kCFBundleFHSDirectory_lib
4949
#endif // DEPLOYMENT_TARGET_LINUX
5050

51-
#endif // !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS
51+
#endif // !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS && !DEPLOYMENT_TARGET_ANDROID
5252

5353
// This is here because on iPhoneOS with the dyld shared cache, we remove binaries from their
5454
// original locations on disk, so checking whether a binary's path exists is no longer sufficient.
@@ -73,7 +73,7 @@ static CFURLRef _CFBundleCopyExecutableURLRaw(CFURLRef urlPath, CFStringRef exeN
7373
CFURLRef executableURL = NULL;
7474
if (!urlPath || !exeName) return NULL;
7575

76-
#if !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS
76+
#if !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS && !DEPLOYMENT_TARGET_ANDROID
7777
if (!executableURL) {
7878
executableURL = CFURLCreateWithFileSystemPathRelativeToBase(kCFAllocatorSystemDefault, exeName, kCFURLPOSIXPathStyle, false, urlPath);
7979
if (!_binaryLoadable(executableURL)) {
@@ -203,7 +203,7 @@ static CFURLRef _CFBundleCopyExecutableURLInDirectory2(CFBundleRef bundle, CFURL
203203
Boolean doExecSearch = true;
204204
#endif
205205

206-
#if !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS
206+
#if !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS && !DEPLOYMENT_TARGET_ANDROID
207207
if (lookupMainExe && bundle && bundle->_isFHSInstalledBundle) {
208208
// For a FHS installed bundle, the URL points to share/Bundle.resources, and the binary is in:
209209

@@ -227,13 +227,13 @@ static CFURLRef _CFBundleCopyExecutableURLInDirectory2(CFBundleRef bundle, CFURL
227227

228228
CFRelease(prefixPath);
229229
}
230-
#endif // !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS
230+
#endif // !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS && !DEPLOYMENT_TARGET_ANDROID
231231

232232
// Now, look for the executable inside the bundle.
233233
if (!foundIt && doExecSearch && 0 != version) {
234234
CFURLRef exeDirURL = NULL;
235235

236-
#if !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS
236+
#if !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS && !DEPLOYMENT_TARGET_ANDROID
237237
if (bundle && bundle->_isFHSInstalledBundle) {
238238
CFURLRef withoutExtension = CFURLCreateCopyDeletingPathExtension(kCFAllocatorSystemDefault, url);
239239
CFStringRef lastPathComponent = CFURLCopyLastPathComponent(withoutExtension);
@@ -248,7 +248,7 @@ static CFURLRef _CFBundleCopyExecutableURLInDirectory2(CFBundleRef bundle, CFURL
248248
CFRelease(libexec);
249249
CFRelease(exeDirName);
250250
} else
251-
#endif // !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS
251+
#endif // !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS && !DEPLOYMENT_TARGET_ANDROID
252252
if (1 == version) {
253253
exeDirURL = CFURLCreateWithString(kCFAllocatorSystemDefault, _CFBundleExecutablesURLFromBase1, url);
254254
} else if (2 == version) {

CoreFoundation/PlugIn.subproj/CFBundle_Internal.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ CF_EXTERN_C_BEGIN
3131
#endif
3232

3333
// FHS bundles are supported on the Swift and C runtimes, except on Windows.
34-
#if !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS
34+
#if !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS && !DEPLOYMENT_TARGET_ANDROID
3535

3636
#if DEPLOYMENT_TARGET_LINUX || DEPLOYMENT_TARGET_FREEBSD
3737
#define _CFBundleFHSSharedLibraryFilenamePrefix CFSTR("lib")
@@ -43,7 +43,7 @@ CF_EXTERN_C_BEGIN
4343
#error Disable FHS bundles or specify shared library prefixes and suffixes for this platform.
4444
#endif // DEPLOYMENT_TARGET_…
4545

46-
#endif // !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS
46+
#endif // !DEPLOYMENT_RUNTIME_OBJC && !DEPLOYMENT_TARGET_WINDOWS && !DEPLOYMENT_TARGET_ANDROID
4747

4848
#define CFBundleExecutableNotFoundError 4
4949
#define CFBundleExecutableNotLoadableError 3584

CoreFoundation/PlugIn.subproj/CFBundle_Main.c

+8
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,20 @@ static CFBundleRef _CFBundleGetMainBundleAlreadyLocked(void) {
7979
CFStringRef str = NULL;
8080
CFURLRef executableURL = NULL, bundleURL = NULL;
8181
_initedMainBundle = true;
82+
#if DEPLOYMENT_TARGET_ANDROID
83+
const char *bundlePath = getenv("CFFIXED_USER_HOME") ?: getenv("TMPDIR") ?: "/data/local/tmp";
84+
CFStringRef bundleRef = CFStringCreateWithFileSystemRepresentation(kCFAllocatorNull, bundlePath);
85+
bundleURL = CFRetain(CFURLCreateWithFileSystemPath(kCFAllocatorSystemDefault, bundleRef,
86+
PLATFORM_PATH_STYLE, false));
87+
CFRelease(bundleRef);
88+
#else
8289
processPath = _CFProcessPath();
8390
if (processPath) {
8491
str = CFStringCreateWithFileSystemRepresentation(kCFAllocatorSystemDefault, processPath);
8592
if (!executableURL) executableURL = CFURLCreateWithFileSystemPath(kCFAllocatorSystemDefault, str, PLATFORM_PATH_STYLE, false);
8693
}
8794
if (executableURL) bundleURL = _CFBundleCopyBundleURLForExecutableURL(executableURL);
95+
#endif
8896
if (bundleURL) {
8997
// make sure that main bundle has executable path
9098
//??? what if we are not the main executable in the bundle?

CoreFoundation/Preferences.subproj/CFPreferences.c

+4
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,11 @@ static CFURLRef _CFPreferencesURLForStandardDomainWithSafetyLevel(CFStringRef do
440440
CFURLRef theURL = NULL;
441441
CFAllocatorRef prefAlloc = __CFPreferencesAllocator();
442442
#if DEPLOYMENT_TARGET_MACOSX || DEPLOYMENT_TARGET_LINUX || DEPLOYMENT_TARGET_WINDOWS
443+
#if DEPLOYMENT_TARGET_ANDROID
444+
CFURLRef prefDir = CFBundleCopyBundleURL(CFBundleGetMainBundle());
445+
#else
443446
CFURLRef prefDir = _preferencesDirectoryForUserHostSafetyLevel(userName, hostName, safeLevel);
447+
#endif
444448
CFStringRef appName;
445449
CFStringRef fileName;
446450
Boolean mustFreeAppName = false;

CoreFoundation/URL.subproj/CFURL.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@
2525
#include <unistd.h>
2626
#include <sys/stat.h>
2727
#include <sys/types.h>
28-
#if __has_include(<sys/syslog.h>)
29-
#include <sys/syslog.h>
30-
#elif __has_include(<syslog.h>)
28+
#if __has_include(<syslog.h>)
3129
#include <syslog.h>
30+
#else
31+
#include <sys/syslog.h>
3232
#endif
3333
#include <CoreFoundation/CFURLPriv.h>
3434
#endif

Foundation/Bundle.swift

+10-2
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,16 @@ open class Bundle: NSObject {
5353
self.init(path: url.path)
5454
}
5555

56-
public init(for aClass: AnyClass) { NSUnimplemented() }
57-
56+
#if os(Android)
57+
public convenience init(for aClass: AnyClass) {
58+
self.init(path: Bundle.main.bundlePath)!
59+
}
60+
#else
61+
public init(for aClass: AnyClass) {
62+
NSUnimplemented()
63+
}
64+
#endif
65+
5866
public init?(identifier: String) {
5967
super.init()
6068

Foundation/FileManager.swift

+7-4
Original file line numberDiff line numberDiff line change
@@ -375,10 +375,13 @@ open class FileManager : NSObject {
375375

376376
This method replaces fileSystemAttributesAtPath:.
377377
*/
378+
#if os(Android)
379+
@available(*, unavailable, message: "Unsuppported on this platform")
380+
open func attributesOfFileSystem(forPath path: String) throws -> [FileAttributeKey : Any] {
381+
NSUnsupported()
382+
}
383+
#else
378384
open func attributesOfFileSystem(forPath path: String) throws -> [FileAttributeKey : Any] {
379-
#if os(Android)
380-
NSUnimplemented()
381-
#else
382385
// statvfs(2) doesn't support 64bit inode on Darwin (apfs), fallback to statfs(2)
383386
#if os(macOS) || os(iOS)
384387
var s = statfs()
@@ -407,8 +410,8 @@ open class FileManager : NSObject {
407410
result[.systemFreeNodes] = NSNumber(value: UInt64(s.f_ffree))
408411

409412
return result
410-
#endif
411413
}
414+
#endif
412415

413416
/* createSymbolicLinkAtPath:withDestination:error: returns YES if the symbolic link that point at 'destPath' was able to be created at the location specified by 'path'. If this method returns NO, the link was unable to be created and an NSError will be returned by reference in the 'error' parameter. This method does not traverse a terminal symlink.
414417

Foundation/NSCFString.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ internal final class _NSCFConstantString : _NSCFString {
7171
// FIXME: Split expression as a work-around for slow type
7272
// checking (tracked by SR-5322).
7373
let offTemp1 = MemoryLayout<OpaquePointer>.size + MemoryLayout<uintptr_t>.size
74-
let offTemp2 = MemoryLayout<_CFInfo>.size
75-
return offTemp1 + offTemp2 + MemoryLayout<UnsafePointer<UInt8>>.size
74+
let offset = offTemp1 + MemoryLayout<_CFInfo>.size
75+
return offset + MemoryLayout<UnsafePointer<UInt8>>.size
7676
}
7777

7878
private var _lenPtr : UnsafeMutableRawPointer {

Foundation/NSTimeZone.swift

-8
Original file line numberDiff line numberDiff line change
@@ -179,14 +179,6 @@ open class NSTimeZone : NSObject, NSCopying, NSSecureCoding, NSCoding {
179179
extension NSTimeZone {
180180

181181
open class var system: TimeZone {
182-
#if os(Android)
183-
var now = time(nil), info = tm()
184-
if localtime_r(&now, &info) != nil {
185-
// NOTE: this is not a real time zone but a fixed offset from GMT.
186-
// It will be incorrect outside the current daylight saving period.
187-
return TimeZone(reference: NSTimeZone(forSecondsFromGMT: info.tm_gmtoff))
188-
}
189-
#endif
190182
return CFTimeZoneCopySystem()._swiftObject
191183
}
192184

TestFoundation/TestFileManager.swift

+2
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,7 @@ class TestFileManager : XCTestCase {
275275
}
276276

277277
func test_fileSystemAttributes() {
278+
#if !os(Android)
278279
let fm = FileManager.default
279280
let path = NSTemporaryDirectory()
280281

@@ -306,6 +307,7 @@ class TestFileManager : XCTestCase {
306307
} catch let err {
307308
XCTFail("\(err)")
308309
}
310+
#endif
309311
}
310312

311313
func test_setFileAttributes() {

TestFoundation/TestNSAttributedString.swift

-5
Original file line numberDiff line numberDiff line change
@@ -192,10 +192,6 @@ class TestNSAttributedString : XCTestCase {
192192
}
193193

194194
func test_enumerateAttributes() {
195-
#if os(Android)
196-
// Invalid dictionary returned by CFAttributedStringGetAttributesAndLongestEffectiveRange
197-
XCTFail("Intermittent failures on Android")
198-
#else
199195
let string = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus consectetur et sem vitae consectetur. Nam venenatis lectus a laoreet blandit."
200196

201197
let attrKey1 = NSAttributedStringKey("attribute.placeholder.key1")
@@ -254,7 +250,6 @@ class TestNSAttributedString : XCTestCase {
254250
}
255251
XCTAssertEqual(rangeDescriptionString, "(0,10)")
256252
XCTAssertEqual(attrsDescriptionString, "[attribute.placeholder.key1:attribute.placeholder.value1]")
257-
#endif
258253
}
259254

260255
func test_copy() {

TestFoundation/TestNSNumber.swift

+9-6
Original file line numberDiff line numberDiff line change
@@ -1083,37 +1083,40 @@ class TestNSNumber : XCTestCase {
10831083

10841084
func test_stringValue() {
10851085

1086+
// The following casts on subtraction are required for an Android compile
1087+
// https://bugs.swift.org/browse/SR-7469
1088+
10861089
if UInt.max == UInt32.max {
10871090
XCTAssertEqual(NSNumber(value: UInt.min).stringValue, "0")
10881091
XCTAssertEqual(NSNumber(value: UInt.min + 1).stringValue, "1")
10891092
XCTAssertEqual(NSNumber(value: UInt.max).stringValue, "4294967295")
1090-
XCTAssertEqual(NSNumber(value: UInt.max - 1).stringValue, "4294967294")
1093+
XCTAssertEqual(NSNumber(value: UInt.max - 1 as UInt).stringValue, "4294967294")
10911094
} else if UInt.max == UInt64.max {
10921095
XCTAssertEqual(NSNumber(value: UInt.min).stringValue, "0")
10931096
XCTAssertEqual(NSNumber(value: UInt.min + 1).stringValue, "1")
10941097
XCTAssertEqual(NSNumber(value: UInt.max).stringValue, "18446744073709551615")
1095-
XCTAssertEqual(NSNumber(value: UInt.max - 1).stringValue, "18446744073709551614")
1098+
XCTAssertEqual(NSNumber(value: UInt.max - 1 as UInt).stringValue, "18446744073709551614")
10961099
}
10971100

10981101
XCTAssertEqual(NSNumber(value: UInt8.min).stringValue, "0")
10991102
XCTAssertEqual(NSNumber(value: UInt8.min + 1).stringValue, "1")
11001103
XCTAssertEqual(NSNumber(value: UInt8.max).stringValue, "255")
1101-
XCTAssertEqual(NSNumber(value: UInt8.max - 1).stringValue, "254")
1104+
XCTAssertEqual(NSNumber(value: UInt8.max - 1 as UInt8).stringValue, "254")
11021105

11031106
XCTAssertEqual(NSNumber(value: UInt16.min).stringValue, "0")
11041107
XCTAssertEqual(NSNumber(value: UInt16.min + 1).stringValue, "1")
11051108
XCTAssertEqual(NSNumber(value: UInt16.max).stringValue, "65535")
1106-
XCTAssertEqual(NSNumber(value: UInt16.max - 1).stringValue, "65534")
1109+
XCTAssertEqual(NSNumber(value: UInt16.max - 1 as UInt16).stringValue, "65534")
11071110

11081111
XCTAssertEqual(NSNumber(value: UInt32.min).stringValue, "0")
11091112
XCTAssertEqual(NSNumber(value: UInt32.min + 1).stringValue, "1")
11101113
XCTAssertEqual(NSNumber(value: UInt32.max).stringValue, "4294967295")
1111-
XCTAssertEqual(NSNumber(value: UInt32.max - 1).stringValue, "4294967294")
1114+
XCTAssertEqual(NSNumber(value: UInt32.max - 1 as UInt32).stringValue, "4294967294")
11121115

11131116
XCTAssertEqual(NSNumber(value: UInt64.min).stringValue, "0")
11141117
XCTAssertEqual(NSNumber(value: UInt64.min + 1).stringValue, "1")
11151118
XCTAssertEqual(NSNumber(value: UInt64.max).stringValue, "18446744073709551615")
1116-
XCTAssertEqual(NSNumber(value: UInt64.max - 1).stringValue, "18446744073709551614")
1119+
XCTAssertEqual(NSNumber(value: UInt64.max - 1 as UInt64).stringValue, "18446744073709551614")
11171120

11181121
if Int.max == Int32.max {
11191122
XCTAssertEqual(NSNumber(value: Int.min).stringValue, "-2147483648")

0 commit comments

Comments
 (0)