Skip to content

Commit

Permalink
Decimal bin compat: remove the usage of @_cdecl from 'public' methods…
Browse files Browse the repository at this point in the history
… defined in NSDecimal.h (#880)
  • Loading branch information
iCharlesHu authored Aug 21, 2024
1 parent eaa0b3b commit e34e1c9
Showing 1 changed file with 142 additions and 54 deletions.
196 changes: 142 additions & 54 deletions Sources/FoundationEssentials/Decimal/Decimal+Compatibility.swift
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,7 @@ public func _pow(_ x: Decimal, _ y: Int) -> Decimal {
}
#endif

@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func __NSDecimalAdd(
private func __NSDecimalAdd(
_ result: UnsafeMutablePointer<Decimal>,
_ lhs: UnsafePointer<Decimal>,
_ rhs: UnsafePointer<Decimal>,
Expand All @@ -123,9 +122,8 @@ public func _pow(_ x: Decimal, _ y: Int) -> Decimal {
}

#if FOUNDATION_FRAMEWORK
@_cdecl("NSDecimalAdd")
@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func NSDecimalAdd(_ result: UnsafeMutablePointer<Decimal>, _ lhs: UnsafePointer<Decimal>, _ rhs: UnsafePointer<Decimal>, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError {
@_cdecl("_NSDecimalAdd")
internal func _NSDecimalAdd(_ result: UnsafeMutablePointer<Decimal>, _ lhs: UnsafePointer<Decimal>, _ rhs: UnsafePointer<Decimal>, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError {
__NSDecimalAdd(result, lhs, rhs, roundingMode)
}
#else
Expand All @@ -135,9 +133,7 @@ public func _NSDecimalAdd(_ result: UnsafeMutablePointer<Decimal>, _ lhs: Unsafe
}
#endif


@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func __NSDecimalSubtract(
private func __NSDecimalSubtract(
_ result: UnsafeMutablePointer<Decimal>,
_ lhs: UnsafePointer<Decimal>,
_ rhs: UnsafePointer<Decimal>,
Expand All @@ -157,9 +153,8 @@ public func _NSDecimalAdd(_ result: UnsafeMutablePointer<Decimal>, _ lhs: Unsafe
}

#if FOUNDATION_FRAMEWORK
@_cdecl("NSDecimalSubtract")
@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func NSDecimalSubtract(_ result: UnsafeMutablePointer<Decimal>, _ lhs: UnsafePointer<Decimal>, _ rhs: UnsafePointer<Decimal>, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError {
@_cdecl("_NSDecimalSubtract")
internal func _NSDecimalSubtract(_ result: UnsafeMutablePointer<Decimal>, _ lhs: UnsafePointer<Decimal>, _ rhs: UnsafePointer<Decimal>, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError {
__NSDecimalSubtract(result, lhs, rhs, roundingMode)
}
#else
Expand All @@ -169,8 +164,7 @@ public func _NSDecimalSubtract(_ result: UnsafeMutablePointer<Decimal>, _ lhs: U
}
#endif

@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func __NSDecimalMultiply(
private func __NSDecimalMultiply(
_ result: UnsafeMutablePointer<Decimal>,
_ lhs: UnsafePointer<Decimal>,
_ rhs: UnsafePointer<Decimal>,
Expand All @@ -190,9 +184,8 @@ public func _NSDecimalSubtract(_ result: UnsafeMutablePointer<Decimal>, _ lhs: U
}

#if FOUNDATION_FRAMEWORK
@_cdecl("NSDecimalMultiply")
@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func NSDecimalMultiply(_ result: UnsafeMutablePointer<Decimal>, _ lhs: UnsafePointer<Decimal>, _ rhs: UnsafePointer<Decimal>, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError {
@_cdecl("_NSDecimalMultiply")
internal func _NSDecimalMultiply(_ result: UnsafeMutablePointer<Decimal>, _ lhs: UnsafePointer<Decimal>, _ rhs: UnsafePointer<Decimal>, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError {
__NSDecimalMultiply(result, lhs, rhs, roundingMode)
}
#else
Expand All @@ -202,8 +195,7 @@ public func _NSDecimalMultiply(_ result: UnsafeMutablePointer<Decimal>, _ lhs: U
}
#endif

@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func __NSDecimalDivide(
private func __NSDecimalDivide(
_ result: UnsafeMutablePointer<Decimal>,
_ lhs: UnsafePointer<Decimal>,
_ rhs: UnsafePointer<Decimal>,
Expand All @@ -223,9 +215,8 @@ public func _NSDecimalMultiply(_ result: UnsafeMutablePointer<Decimal>, _ lhs: U
}

#if FOUNDATION_FRAMEWORK
@_cdecl("NSDecimalDivide")
@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func NSDecimalDivide(_ result: UnsafeMutablePointer<Decimal>, _ lhs: UnsafePointer<Decimal>, _ rhs: UnsafePointer<Decimal>, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError {
@_cdecl("_NSDecimalDivide")
internal func _NSDecimalDivide(_ result: UnsafeMutablePointer<Decimal>, _ lhs: UnsafePointer<Decimal>, _ rhs: UnsafePointer<Decimal>, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError {
__NSDecimalDivide(result, lhs, rhs, roundingMode)
}
#else
Expand All @@ -235,8 +226,7 @@ public func _NSDecimalDivide(_ result: UnsafeMutablePointer<Decimal>, _ lhs: Uns
}
#endif

@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func __NSDecimalPower(
private func __NSDecimalPower(
_ result: UnsafeMutablePointer<Decimal>,
_ decimal: UnsafePointer<Decimal>,
_ exponent: Int,
Expand All @@ -254,9 +244,8 @@ public func _NSDecimalDivide(_ result: UnsafeMutablePointer<Decimal>, _ lhs: Uns
}

#if FOUNDATION_FRAMEWORK
@_cdecl("NSDecimalPower")
@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func NSDecimalPower(_ result: UnsafeMutablePointer<Decimal>, _ decimal: UnsafePointer<Decimal>, _ exponent: Int, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError {
@_cdecl("_NSDecimalPower")
internal func _NSDecimalPower(_ result: UnsafeMutablePointer<Decimal>, _ decimal: UnsafePointer<Decimal>, _ exponent: Int, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError {
__NSDecimalPower(result, decimal, exponent, roundingMode)
}
#else
Expand All @@ -266,8 +255,7 @@ public func _NSDecimalPower(_ result: UnsafeMutablePointer<Decimal>, _ decimal:
}
#endif

@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func __NSDecimalMultiplyByPowerOf10(
private func __NSDecimalMultiplyByPowerOf10(
_ result: UnsafeMutablePointer<Decimal>,
_ decimal: UnsafePointer<Decimal>,
_ power: CShort,
Expand All @@ -285,9 +273,8 @@ public func _NSDecimalPower(_ result: UnsafeMutablePointer<Decimal>, _ decimal:
}

#if FOUNDATION_FRAMEWORK
@_cdecl("NSDecimalMultiplyByPowerOf10")
@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func NSDecimalMultiplyByPowerOf10(_ result: UnsafeMutablePointer<Decimal>, _ decimal: UnsafePointer<Decimal>, _ power: CShort, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError {
@_cdecl("_NSDecimalMultiplyByPowerOf10")
internal func _NSDecimalMultiplyByPowerOf10(_ result: UnsafeMutablePointer<Decimal>, _ decimal: UnsafePointer<Decimal>, _ power: CShort, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError {
__NSDecimalMultiplyByPowerOf10(result, decimal, power, roundingMode)
}
#else
Expand All @@ -297,18 +284,16 @@ public func _NSDecimalMultiplyByPowerOf10(_ result: UnsafeMutablePointer<Decimal
}
#endif

@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func __NSDecimalCompare(
private func __NSDecimalCompare(
_ lhs: UnsafePointer<Decimal>,
_ rhs: UnsafePointer<Decimal>
) -> ComparisonResult {
return Decimal._compare(lhs: lhs.pointee, rhs: rhs.pointee)
}

#if FOUNDATION_FRAMEWORK
@_cdecl("NSDecimalCompare")
@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func NSDecimalCompare(_ lhs: UnsafePointer<Decimal>, _ rhs: UnsafePointer<Decimal>) -> ComparisonResult {
@_cdecl("_NSDecimalCompare")
internal func _NSDecimalCompare(_ lhs: UnsafePointer<Decimal>, _ rhs: UnsafePointer<Decimal>) -> ComparisonResult {
__NSDecimalCompare(lhs, rhs)
}
#else
Expand All @@ -318,8 +303,7 @@ public func _NSDecimalCompare(_ lhs: UnsafePointer<Decimal>, _ rhs: UnsafePointe
}
#endif

@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func __NSDecimalRound(
private func __NSDecimalRound(
_ result: UnsafeMutablePointer<Decimal>,
_ decimal: UnsafePointer<Decimal>,
_ scale: Int,
Expand All @@ -338,9 +322,8 @@ public func _NSDecimalCompare(_ lhs: UnsafePointer<Decimal>, _ rhs: UnsafePointe
}

#if FOUNDATION_FRAMEWORK
@_cdecl("NSDecimalRound")
@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func NSDecimalRound(_ result: UnsafeMutablePointer<Decimal>, _ decimal: UnsafePointer<Decimal>, _ scale: Int, _ roundingMode: Decimal.RoundingMode) {
@_cdecl("_NSDecimalRound")
internal func _NSDecimalRound(_ result: UnsafeMutablePointer<Decimal>, _ decimal: UnsafePointer<Decimal>, _ scale: Int, _ roundingMode: Decimal.RoundingMode) {
__NSDecimalRound(result, decimal, scale, roundingMode)
}
#else
Expand All @@ -350,8 +333,7 @@ public func _NSDecimalRound(_ result: UnsafeMutablePointer<Decimal>, _ decimal:
}
#endif

@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func __NSDecimalNormalize(
private func __NSDecimalNormalize(
_ lhs: UnsafeMutablePointer<Decimal>,
_ rhs: UnsafeMutablePointer<Decimal>,
_ roundingMode: Decimal.RoundingMode
Expand All @@ -375,9 +357,8 @@ public func _NSDecimalRound(_ result: UnsafeMutablePointer<Decimal>, _ decimal:
}

#if FOUNDATION_FRAMEWORK
@_cdecl("NSDecimalNormalize")
@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func NSDecimalNormalize(_ lhs: UnsafeMutablePointer<Decimal>, _ rhs: UnsafeMutablePointer<Decimal>, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError {
@_cdecl("_NSDecimalNormalize")
internal func _NSDecimalNormalize(_ lhs: UnsafeMutablePointer<Decimal>, _ rhs: UnsafeMutablePointer<Decimal>, _ roundingMode: Decimal.RoundingMode) -> Decimal.CalculationError {
__NSDecimalNormalize(lhs, rhs, roundingMode)
}
#else
Expand All @@ -388,9 +369,8 @@ public func _NSDecimalNormalize(_ lhs: UnsafeMutablePointer<Decimal>, _ rhs: Uns
#endif

#if FOUNDATION_FRAMEWORK
@_cdecl("NSDecimalCompact")
@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func NSDecimalCompact(_ number: UnsafeMutablePointer<Decimal>) {
@_cdecl("_NSDecimalCompact")
internal func _NSDecimalCompact(_ number: UnsafeMutablePointer<Decimal>) {
var value = number.pointee
value.compact()
number.pointee = value
Expand All @@ -404,8 +384,7 @@ public func _NSDecimalCompact(_ number: UnsafeMutablePointer<Decimal>) {
}
#endif

@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func __NSDecimalString(
private func __NSDecimalString(
_ decimal: UnsafePointer<Decimal>,
_ locale: Any? = nil
) -> String {
Expand All @@ -430,9 +409,8 @@ public func _NSDecimalCompact(_ number: UnsafeMutablePointer<Decimal>) {
}

#if FOUNDATION_FRAMEWORK
@_cdecl("NSDecimalString")
@available(macOS 10.10, iOS 8.0, watchOS 2.0, tvOS 9.0, *)
@usableFromInline internal func NSDecimalString(_ decimal: UnsafePointer<Decimal>, _ locale: Any? = nil) -> String {
@_cdecl("_NSDecimalString")
internal func _NSDecimalString(_ decimal: UnsafePointer<Decimal>, _ locale: Any? = nil) -> String {
__NSDecimalString(decimal, locale)
}
#else
Expand Down Expand Up @@ -483,3 +461,113 @@ private func _convertError(_ error: any Error) -> Decimal.CalculationError {
return .divideByZero
}
}

#if FOUNDATION_FRAMEWORK
// MARK: Bin Compat Symbols
// We introduced the following symbols in Swift with iOS 18.
// For bin compat, we need maintain these symbols as stubs
@available(macOS 15.0, iOS 18.0, tvOS 18.0, watchOS 11.0, visionOS 2.0, *)
@usableFromInline internal func NSDecimalAdd(
_ result: UnsafeMutablePointer<Decimal>,
_ leftOperand: UnsafePointer<Decimal>,
_ rightOperand: UnsafePointer<Decimal>,
_ roundingMode: NSDecimalNumber.RoundingMode
) -> NSDecimalNumber.CalculationError {
return __NSDecimalAdd(result, leftOperand, rightOperand, roundingMode)
}

@available(macOS 15.0, iOS 18.0, tvOS 18.0, watchOS 11.0, visionOS 2.0, *)
@usableFromInline internal func NSDecimalSubtract(
_ result: UnsafeMutablePointer<Decimal>,
_ leftOperand: UnsafePointer<Decimal>,
_ rightOperand: UnsafePointer<Decimal>,
_ roundingMode: NSDecimalNumber.RoundingMode
) -> NSDecimalNumber.CalculationError {
return __NSDecimalSubtract(result, leftOperand, rightOperand, roundingMode)
}

@available(macOS 15.0, iOS 18.0, tvOS 18.0, watchOS 11.0, visionOS 2.0, *)
@usableFromInline internal func NSDecimalMultiply(
_ result: UnsafeMutablePointer<Decimal>,
_ leftOperand: UnsafePointer<Decimal>,
_ rightOperand: UnsafePointer<Decimal>,
_ roundingMode: NSDecimalNumber.RoundingMode
) -> NSDecimalNumber.CalculationError {
return __NSDecimalMultiply(result, leftOperand, rightOperand, roundingMode)
}

@available(macOS 15.0, iOS 18.0, tvOS 18.0, watchOS 11.0, visionOS 2.0, *)
@usableFromInline internal func NSDecimalDivide(
_ result: UnsafeMutablePointer<Decimal>,
_ leftOperand: UnsafePointer<Decimal>,
_ rightOperand: UnsafePointer<Decimal>,
_ roundingMode: NSDecimalNumber.RoundingMode
) -> NSDecimalNumber.CalculationError {
return __NSDecimalDivide(result, leftOperand, rightOperand, roundingMode)
}

@available(macOS 15.0, iOS 18.0, tvOS 18.0, watchOS 11.0, visionOS 2.0, *)
@usableFromInline internal func NSDecimalPower(
_ result: UnsafeMutablePointer<Decimal>,
_ number: UnsafePointer<Decimal>,
_ power: Int,
_ roundingMode: NSDecimalNumber.RoundingMode
) -> NSDecimalNumber.CalculationError {
return __NSDecimalPower(result, number, power, roundingMode)
}

@available(macOS 15.0, iOS 18.0, tvOS 18.0, watchOS 11.0, visionOS 2.0, *)
@usableFromInline internal func NSDecimalMultiplyByPowerOf10(
_ result: UnsafeMutablePointer<Decimal>,
_ number: UnsafePointer<Decimal>,
_ power: Int16,
_ roundingMode: NSDecimalNumber.RoundingMode
) -> NSDecimalNumber.CalculationError {
return __NSDecimalMultiplyByPowerOf10(result, number, power, roundingMode)
}

@available(macOS 15.0, iOS 18.0, tvOS 18.0, watchOS 11.0, visionOS 2.0, *)
@usableFromInline internal func NSDecimalCompare(
_ leftOperand: UnsafePointer<Decimal>,
_ rightOperand: UnsafePointer<Decimal>
) -> ComparisonResult {
return __NSDecimalCompare(leftOperand, rightOperand)
}

@available(macOS 15.0, iOS 18.0, tvOS 18.0, watchOS 11.0, visionOS 2.0, *)
@usableFromInline internal func NSDecimalRound(
_ result: UnsafeMutablePointer<Decimal>,
_ number: UnsafePointer<Decimal>,
_ scale: Int,
_ roundingMode: NSDecimalNumber.RoundingMode
) {
__NSDecimalRound(result, number, scale, roundingMode)
}

@available(macOS 15.0, iOS 18.0, tvOS 18.0, watchOS 11.0, visionOS 2.0, *)
@usableFromInline internal func NSDecimalNormalize(
_ number1: UnsafeMutablePointer<Decimal>,
_ number2: UnsafeMutablePointer<Decimal>,
_ roundingMode: NSDecimalNumber.RoundingMode
) -> NSDecimalNumber.CalculationError {
return __NSDecimalNormalize(number1, number2, roundingMode)
}

@available(macOS 15.0, iOS 18.0, tvOS 18.0, watchOS 11.0, visionOS 2.0, *)
@usableFromInline internal func NSDecimalCompact(
_ number: UnsafeMutablePointer<Decimal>
) {
var value = number.pointee
value.compact()
number.pointee = value
}

@available(macOS 15.0, iOS 18.0, tvOS 18.0, watchOS 11.0, visionOS 2.0, *)
@usableFromInline internal func NSDecimalString(
_ dcm: UnsafePointer<Decimal>,
_ locale: Any?
) -> String {
return __NSDecimalString(dcm, locale)
}

#endif // FOUNDATION_FRAMEWORK

0 comments on commit e34e1c9

Please sign in to comment.