Skip to content

Decimal bin compat: remove the usage of @_cdecl from 'public' methods defined in NSDecimal.h #880

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 21, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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