Foundation and NSDecimal


(Alex Blewitt) #1

The Framework function

NS_INLINE BOOL NSDecimalIsNotANumber(const NSDecimal *dcm)

has been imported into Swift on both Darwin and Linux as

:type lookup NSDecimalIsNotANumber
@discardableResult func NSDecimalIsNotANumber(_ dcm: Swift.UnsafePointer<Foundation.Decimal>) -> Swift.Bool
:type lookup NSDecimalIsNotANumber
func NSDecimalIsNotANumber(_ dcm: Swift.UnsafePointer<Foundation.Decimal>) -> Swift.Bool

However I think this should instead be imported as a member function on the Decimal type, instead of passing through a pointer.

extension Decimal {
  public func isNotANumber() -> Bool
}

This may not have been picked up by the automatic renaming progress because it's a const pointer, and because it's an NS_INLINE defined in the header, instead of in an implementation file.

There are some other global constants NSDecimalMaxSize and NSDecimalNoScale, which should probably be implemented as constants in the Decimal type as well e.g.

extension Decimal {
  public let maxSize = 8
  public let noScale = Int16.max
}

Since this would need to be fixed in both the Swift Linux foundation implementation and the Darwin overlay (and it would be a breaking change) what is the right process to be able to fix this?

Alex


(Kenny Leung) #2

I would also say that this should not be marked as @discardableResult, since its only purpose is to report back yes or no, it would be kind of suspicious if the it wasn’t used.

-Kenny

···

On Sep 27, 2016, at 5:34 AM, Alex Blewitt via swift-corelibs-dev <swift-corelibs-dev@swift.org> wrote:

The Framework function

NS_INLINE BOOL NSDecimalIsNotANumber(const NSDecimal *dcm)

has been imported into Swift on both Darwin and Linux as

:type lookup NSDecimalIsNotANumber
@discardableResult func NSDecimalIsNotANumber(_ dcm: Swift.UnsafePointer<Foundation.Decimal>) -> Swift.Bool
:type lookup NSDecimalIsNotANumber
func NSDecimalIsNotANumber(_ dcm: Swift.UnsafePointer<Foundation.Decimal>) -> Swift.Bool

However I think this should instead be imported as a member function on the Decimal type, instead of passing through a pointer.

extension Decimal {
public func isNotANumber() -> Bool
}

This may not have been picked up by the automatic renaming progress because it's a const pointer, and because it's an NS_INLINE defined in the header, instead of in an implementation file.

There are some other global constants NSDecimalMaxSize and NSDecimalNoScale, which should probably be implemented as constants in the Decimal type as well e.g.

extension Decimal {
public let maxSize = 8
public let noScale = Int16.max
}

Since this would need to be fixed in both the Swift Linux foundation implementation and the Darwin overlay (and it would be a breaking change) what is the right process to be able to fix this?

Alex
_______________________________________________
swift-corelibs-dev mailing list
swift-corelibs-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-corelibs-dev


(Alex Blewitt) #3

I agree, but I'm not sure where that's coming from. It seems to be being imported from CoreFoundation on Darwin, and although it's defined this way in NSDecimal.h in the Foundation framework:

NS_INLINE BOOL NSDecimalIsNotANumber(const NSDecimal *dcm)
  { return ((dcm->_length == 0) && dcm->_isNegative); }

I'm not sure why the @discardableResult attribute is being added here; perhaps it's to do with the fact that it's an NS_INLINE function. Should I raise a separate bug for that?

Alex

···

On 28 Sep 2016, at 17:32, Kenny Leung via swift-corelibs-dev <swift-corelibs-dev@swift.org> wrote:

I would also say that this should not be marked as @discardableResult, since its only purpose is to report back yes or no, it would be kind of suspicious if the it wasn’t used.

-Kenny

On Sep 27, 2016, at 5:34 AM, Alex Blewitt via swift-corelibs-dev <swift-corelibs-dev@swift.org> wrote:

The Framework function

NS_INLINE BOOL NSDecimalIsNotANumber(const NSDecimal *dcm)

has been imported into Swift on both Darwin and Linux as

:type lookup NSDecimalIsNotANumber
@discardableResult func NSDecimalIsNotANumber(_ dcm: Swift.UnsafePointer<Foundation.Decimal>) -> Swift.Bool
:type lookup NSDecimalIsNotANumber
func NSDecimalIsNotANumber(_ dcm: Swift.UnsafePointer<Foundation.Decimal>) -> Swift.Bool

However I think this should instead be imported as a member function on the Decimal type, instead of passing through a pointer.

extension Decimal {
public func isNotANumber() -> Bool
}

This may not have been picked up by the automatic renaming progress because it's a const pointer, and because it's an NS_INLINE defined in the header, instead of in an implementation file.

There are some other global constants NSDecimalMaxSize and NSDecimalNoScale, which should probably be implemented as constants in the Decimal type as well e.g.

extension Decimal {
public let maxSize = 8
public let noScale = Int16.max
}

Since this would need to be fixed in both the Swift Linux foundation implementation and the Darwin overlay (and it would be a breaking change) what is the right process to be able to fix this?

Alex
_______________________________________________
swift-corelibs-dev mailing list
swift-corelibs-dev@swift.org
https://lists.swift.org/mailman/listinfo/swift-corelibs-dev

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