> On 20 May 2017, at 19:58, Philippe Hausler wrote:
> 
>> On May 20, 2017, at 12:25 AM, David Waite wrote:
>> 
>> I believe behavior depends on whether the NSNumber is the objc type or swift 
>> subtype, and whether you call the NSNumber.intValue or use 
>> Int.init?(exactly: NSNumber).
> 
> That part of the behavior is no longer the case. The bridge only transacts 
> upon one number type (to leverage tagged pointers) and the subclass was 
> removed (since it caused some gnarly inconsistencies)

The subclass `_SwiftTypePreservingNSNumber` still exists:

<https://github.com/apple/swift/blob/master/stdlib/public/SDK/Foundation/TypePreservingNSNumber.mm>

Maybe the file isn't compiled anymore due to your pull requests:

<https://github.com/apple/swift/pull/9162>
<https://github.com/apple/swift/pull/9293>

You mentioned tagged pointers. My understanding is that:

* `OBJC_TAG_NSNumber` doesn't attempt to store a `float` or `double` in the 
60-bit payload;
* `OBJC_TAG_NSDate` is used only if bits 0...3 of the `NSTimeInterval` (aka 
`double`) are zero.

<https://opensource.apple.com/source/objc4/objc4-709/runtime/objc-internal.h.auto.html>

How often is an NSDate (with "sub-millisecond precision") created as a tagged 
pointer?

-- Ben

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to