Merge remote-tracking branch 'origin/master' into swift-4.0-branch
diff --git a/Foundation/NSArray.swift b/Foundation/NSArray.swift
index c0a81cc..9a70f86 100644
--- a/Foundation/NSArray.swift
+++ b/Foundation/NSArray.swift
@@ -312,6 +312,13 @@
if val1 != val2 {
return false
}
+ } else if let val1 = object(at: idx) as? _ObjectBridgeable,
+ let val2 = otherArray[idx] as? _ObjectBridgeable {
+ if !(val1._bridgeToAnyObject() as! NSObject).isEqual(val2._bridgeToAnyObject()) {
+ return false
+ }
+ } else {
+ return false
}
}
diff --git a/Foundation/NSDecimal.swift b/Foundation/NSDecimal.swift
index 3f10b3f..88785f2 100644
--- a/Foundation/NSDecimal.swift
+++ b/Foundation/NSDecimal.swift
@@ -24,7 +24,7 @@
return Int32(__exponent)
}
set {
- __exponent = Int8(truncatingBitPattern: newValue)
+ __exponent = Int8(extendingOrTruncating: newValue)
}
}
// length == 0 && isNegative -> NaN
@@ -90,7 +90,7 @@
public init(_exponent: Int32, _length: UInt32, _isNegative: UInt32, _isCompact: UInt32, _reserved: UInt32, _mantissa: (UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16, UInt16)){
self._mantissa = _mantissa
- self.__exponent = Int8(truncatingBitPattern: _exponent)
+ self.__exponent = Int8(extendingOrTruncating: _exponent)
self.__lengthAndFlags = UInt8(_length & 0b1111)
self.__reserved = 0
self._isNegative = _isNegative
@@ -425,21 +425,21 @@
while mantissa != 0 && i < NSDecimalMaxSize {
switch i {
case 0:
- _mantissa.0 = UInt16(truncatingBitPattern:mantissa)
+ _mantissa.0 = UInt16(extendingOrTruncating:mantissa)
case 1:
- _mantissa.1 = UInt16(truncatingBitPattern:mantissa)
+ _mantissa.1 = UInt16(extendingOrTruncating:mantissa)
case 2:
- _mantissa.2 = UInt16(truncatingBitPattern:mantissa)
+ _mantissa.2 = UInt16(extendingOrTruncating:mantissa)
case 3:
- _mantissa.3 = UInt16(truncatingBitPattern:mantissa)
+ _mantissa.3 = UInt16(extendingOrTruncating:mantissa)
case 4:
- _mantissa.4 = UInt16(truncatingBitPattern:mantissa)
+ _mantissa.4 = UInt16(extendingOrTruncating:mantissa)
case 5:
- _mantissa.5 = UInt16(truncatingBitPattern:mantissa)
+ _mantissa.5 = UInt16(extendingOrTruncating:mantissa)
case 6:
- _mantissa.6 = UInt16(truncatingBitPattern:mantissa)
+ _mantissa.6 = UInt16(extendingOrTruncating:mantissa)
case 7:
- _mantissa.7 = UInt16(truncatingBitPattern:mantissa)
+ _mantissa.7 = UInt16(extendingOrTruncating:mantissa)
default:
fatalError("initialization overflow")
}
@@ -605,13 +605,13 @@
for i in 0..<d._length {
let accumulator: UInt32 = UInt32(d[i]) * UInt32(mul) + carry
carry = accumulator >> 16
- d[i] = UInt16(truncatingBitPattern: accumulator)
+ d[i] = UInt16(extendingOrTruncating: accumulator)
}
if carry != 0 {
if d._length >= Decimal.maxSize {
return .overflow
}
- d[d._length] = UInt16(truncatingBitPattern: carry)
+ d[d._length] = UInt16(extendingOrTruncating: carry)
d._length += 1
}
return .noError
@@ -622,13 +622,13 @@
for i in 0..<d._length {
let accumulator: UInt32 = UInt32(d[i]) + carry
carry = accumulator >> 16
- d[i] = UInt16(truncatingBitPattern: accumulator)
+ d[i] = UInt16(extendingOrTruncating: accumulator)
}
if carry != 0 {
if d._length >= Decimal.maxSize {
return .overflow
}
- d[d._length] = UInt16(truncatingBitPattern: carry)
+ d[d._length] = UInt16(extendingOrTruncating: carry)
d._length += 1
}
return .noError
@@ -776,8 +776,8 @@
if i + j < big._length {
let bigij = UInt32(big[i+j])
accumulator = UInt32(carry) + bigij + UInt32(right[j]) * UInt32(left[i])
- carry = UInt16(truncatingBitPattern:accumulator >> UInt32(16))
- big[i+j] = UInt16(truncatingBitPattern:accumulator)
+ carry = UInt16(extendingOrTruncating:accumulator >> 16)
+ big[i+j] = UInt16(extendingOrTruncating:accumulator)
} else if carry != 0 || (right[j] == 0 && left[j] == 0) {
return .overflow
}
@@ -917,7 +917,7 @@
acc = acc & 0xffff;
acc = 0xffff + UInt32(u[ul - vl + i - UInt32(j) - UInt32(1)]) - acc + sk; // subtract
sk = acc >> 16;
- u[ul - vl + i - UInt32(j) - UInt32(1)] = UInt16(truncatingBitPattern:acc)
+ u[ul - vl + i - UInt32(j) - UInt32(1)] = UInt16(extendingOrTruncating:acc)
}
// D5: test remainder
@@ -933,7 +933,7 @@
let vl = v._length
acc = UInt32(v[i]) + UInt32(u[UInt32(ul) - UInt32(vl) + UInt32(i) - UInt32(j) - UInt32(1)]) + k
k = acc >> 16;
- u[UInt32(ul) - UInt32(vl) + UInt32(i) - UInt32(j) - UInt32(1)] = UInt16(truncatingBitPattern:acc)
+ u[UInt32(ul) - UInt32(vl) + UInt32(i) - UInt32(j) - UInt32(1)] = UInt16(extendingOrTruncating:acc)
}
// k must be == 1 here
}
@@ -1186,8 +1186,8 @@
let li = UInt32(left[i])
let ri = UInt32(right[i])
accumulator = li + ri + UInt32(carry)
- carry = UInt16(truncatingBitPattern:accumulator >> 16)
- result[i] = UInt16(truncatingBitPattern:accumulator)
+ carry = UInt16(extendingOrTruncating:accumulator >> 16)
+ result[i] = UInt16(extendingOrTruncating:accumulator)
i += 1
}
@@ -1195,8 +1195,8 @@
if carry != 0 {
let li = UInt32(left[i])
accumulator = li + UInt32(carry)
- carry = UInt16(truncatingBitPattern:accumulator >> 16)
- result[i] = UInt16(truncatingBitPattern:accumulator)
+ carry = UInt16(extendingOrTruncating:accumulator >> 16)
+ result[i] = UInt16(extendingOrTruncating:accumulator)
i += 1
} else {
while i < left._length {
@@ -1210,8 +1210,8 @@
if carry != 0 {
let ri = UInt32(right[i])
accumulator = ri + UInt32(carry)
- carry = UInt16(truncatingBitPattern:accumulator >> 16)
- result[i] = UInt16(truncatingBitPattern:accumulator)
+ carry = UInt16(extendingOrTruncating:accumulator >> 16)
+ result[i] = UInt16(extendingOrTruncating:accumulator)
i += 1
} else {
while i < right._length {
@@ -1253,8 +1253,8 @@
let li = UInt32(left[i])
let ri = UInt32(right[i])
accumulator = 0xffff + li - ri + UInt32(carry)
- carry = UInt16(truncatingBitPattern:accumulator >> 16)
- result[i] = UInt16(truncatingBitPattern:accumulator)
+ carry = UInt16(extendingOrTruncating:accumulator >> 16)
+ result[i] = UInt16(extendingOrTruncating:accumulator)
i += 1
}
@@ -1262,8 +1262,8 @@
if carry != 0 {
let li = UInt32(left[i])
accumulator = 0xffff + li // + no carry
- carry = UInt16(truncatingBitPattern:accumulator >> 16)
- result[i] = UInt16(truncatingBitPattern:accumulator)
+ carry = UInt16(extendingOrTruncating:accumulator >> 16)
+ result[i] = UInt16(extendingOrTruncating:accumulator)
i += 1
} else {
while i < left._length {
@@ -1276,8 +1276,8 @@
while i < right._length {
let ri = UInt32(right[i])
accumulator = 0xffff - ri + UInt32(carry)
- carry = UInt16(truncatingBitPattern:accumulator >> 16)
- result[i] = UInt16(truncatingBitPattern:accumulator)
+ carry = UInt16(extendingOrTruncating:accumulator >> 16)
+ result[i] = UInt16(extendingOrTruncating:accumulator)
i += 1
}
diff --git a/Foundation/NSError.swift b/Foundation/NSError.swift
index bee29e3..e9448fc 100644
--- a/Foundation/NSError.swift
+++ b/Foundation/NSError.swift
@@ -393,7 +393,7 @@
return nil
}
- self.init(rawValue: RawValue(IntMax(_bridgedNSError.code)))
+ self.init(rawValue: RawValue(Int(_bridgedNSError.code)))
}
public var hashValue: Int { return _code }
@@ -421,7 +421,7 @@
return nil
}
- self.init(rawValue: RawValue(UIntMax(UInt(_bridgedNSError.code))))
+ self.init(rawValue: RawValue(UInt(_bridgedNSError.code)))
}
public var hashValue: Int { return _code }
diff --git a/TestFoundation/TestNSArray.swift b/TestFoundation/TestNSArray.swift
index 50a6a96..8442ecd 100644
--- a/TestFoundation/TestNSArray.swift
+++ b/TestFoundation/TestNSArray.swift
@@ -421,6 +421,12 @@
XCTAssertFalse(array1.isEqual(nil))
XCTAssertFalse(array1.isEqual(NSObject()))
+
+ let objectsArray1 = NSArray(array: [NSArray(array: [0])])
+ let objectsArray2 = NSArray(array: [NSArray(array: [1])])
+ XCTAssertFalse(objectsArray1 == objectsArray2)
+ XCTAssertFalse(objectsArray1.isEqual(objectsArray2))
+ XCTAssertFalse(objectsArray1.isEqual(to: Array(objectsArray2)))
}
/// - Note: value type conversion will destroy identity. So use index(of:) instead of indexOfObjectIdentical(to:)
diff --git a/TestFoundation/TestNSDictionary.swift b/TestFoundation/TestNSDictionary.swift
index ff415ef..096f0a6 100644
--- a/TestFoundation/TestNSDictionary.swift
+++ b/TestFoundation/TestNSDictionary.swift
@@ -134,6 +134,24 @@
XCTAssertFalse(dict1.isEqual(nil))
XCTAssertFalse(dict1.isEqual(NSObject()))
+
+ let nestedDict1 = NSDictionary(dictionary: [
+ "key.entities": [
+ ["key": 0]
+ ]
+ ])
+ let nestedDict2 = NSDictionary(dictionary: [
+ "key.entities": [
+ ["key": 1]
+ ]
+ ])
+ XCTAssertFalse(nestedDict1 == nestedDict2)
+ XCTAssertFalse(nestedDict1.isEqual(nestedDict2))
+ XCTAssertFalse(nestedDict1.isEqual(to: [
+ "key.entities": [
+ ["key": 1]
+ ]
+ ]))
}
func test_copying() {
diff --git a/build.py b/build.py
index f1a3ef4..669199a 100644
--- a/build.py
+++ b/build.py
@@ -9,7 +9,7 @@
script = Script()
-foundation = DynamicLibrary("Foundation")
+foundation = StaticAndDynamicLibrary("Foundation")
foundation.GCC_PREFIX_HEADER = 'CoreFoundation/Base.subproj/CoreFoundation_Prefix.h'
@@ -513,6 +513,8 @@
rule InstallFoundation
command = mkdir -p "${DSTROOT}/${PREFIX}/lib/swift/${OS}"; $
cp "${BUILD_DIR}/Foundation/${DYLIB_PREFIX}Foundation${DYLIB_SUFFIX}" "${DSTROOT}/${PREFIX}/lib/swift/${OS}"; $
+ mkdir -p "${DSTROOT}/${PREFIX}/lib/swift_static/${OS}"; $
+ cp "${BUILD_DIR}/Foundation/${STATICLIB_PREFIX}Foundation${STATICLIB_SUFFIX}" "${DSTROOT}/${PREFIX}/lib/swift_static/${OS}"; $
mkdir -p "${DSTROOT}/${PREFIX}/lib/swift/${OS}/${ARCH}"; $
cp "${BUILD_DIR}/Foundation/Foundation.swiftmodule" "${DSTROOT}/${PREFIX}/lib/swift/${OS}/${ARCH}/"; $
cp "${BUILD_DIR}/Foundation/Foundation.swiftdoc" "${DSTROOT}/${PREFIX}/lib/swift/${OS}/${ARCH}/"; $
diff --git a/configure b/configure
index 32a3f2f..4e0f128 100755
--- a/configure
+++ b/configure
@@ -28,6 +28,7 @@
from lib.product import DynamicLibrary
from lib.product import Framework
from lib.product import StaticLibrary
+from lib.product import StaticAndDynamicLibrary
from lib.product import Application
from lib.product import Executable
diff --git a/lib/product.py b/lib/product.py
index ad9af82..925cd78 100644
--- a/lib/product.py
+++ b/lib/product.py
@@ -112,10 +112,11 @@
class DynamicLibrary(Library):
def __init__(self, name):
Library.__init__(self, name)
- self.rule = "Link"
- self.product_name = Configuration.current.target.dynamic_library_prefix + name + Configuration.current.target.dynamic_library_suffix
+ self.name = name
def generate(self):
+ self.rule = "Link"
+ self.product_name = Configuration.current.target.dynamic_library_prefix + self.name + Configuration.current.target.dynamic_library_suffix
if Configuration.current.target.sdk == OSType.Linux or Configuration.current.target.sdk == OSType.FreeBSD:
self.conformance_begin = '${SDKROOT}/lib/swift/${OS}/${ARCH}/swift_begin.o'
self.conformance_end = '${SDKROOT}/lib/swift/${OS}/${ARCH}/swift_end.o'
@@ -172,16 +173,23 @@
return generated
-
class StaticLibrary(Library):
def __init__(self, name):
Library.__init__(self, name)
- self.rule = "Archive"
- self.product_name = Configuration.current.target.static_library_prefix + name + Configuration.current.target.static_library_suffix
-
+ self.name = name
+
def generate(self):
+ self.rule = "Archive"
+ self.product_name = Configuration.current.target.static_library_prefix + self.name + Configuration.current.target.static_library_suffix
return Library.generate(self, [])
-
+
+class StaticAndDynamicLibrary(StaticLibrary, DynamicLibrary):
+ def __init__(self, name):
+ StaticLibrary.__init__(self, name)
+ DynamicLibrary.__init__(self, name)
+
+ def generate(self):
+ return StaticLibrary.generate(self) + DynamicLibrary.generate(self)
class Executable(Product):
def __init__(self, name):
@@ -190,9 +198,8 @@
def generate(self):
generated = Product.generate(self)
-
- return generated
+ return generated
class Application(Product):
executable = None
diff --git a/lib/script.py b/lib/script.py
index 4f6a39f..150eb95 100644
--- a/lib/script.py
+++ b/lib/script.py
@@ -63,6 +63,8 @@
ARCH = """ + Configuration.current.target.swift_arch + """
DYLIB_PREFIX = """ + Configuration.current.target.dynamic_library_prefix + """
DYLIB_SUFFIX = """ + Configuration.current.target.dynamic_library_suffix + """
+STATICLIB_PREFIX = """ + Configuration.current.target.static_library_prefix + """
+STATICLIB_SUFFIX = """ + Configuration.current.target.static_library_suffix + """
PREFIX = """ + Configuration.current.prefix + """
"""
if Configuration.current.requires_pkg_config:
@@ -206,7 +208,7 @@
description = Link: $out
rule Archive
- command = mkdir -p `dirname $out`; ${AR} ${AR_FLAGS} $flags $out $in
+ command = mkdir -p `dirname $out`; ${AR} ${AR_FLAGS} $out $in
description = Archive: $out
"""