Skip to content

Commit

Permalink
Rename toSwift to fromABI (#298)
Browse files Browse the repository at this point in the history
Fixes #292
  • Loading branch information
tristanlabelle committed Sep 16, 2024
1 parent 8e78c36 commit acccf55
Show file tree
Hide file tree
Showing 46 changed files with 82 additions and 82 deletions.
4 changes: 2 additions & 2 deletions Docs/How it works.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ extension COMInterop when T == SWRT_IFoo {
var name: BSTR? = nil
defer { BStrBinding.release(&name) }
try COMError.fromABI(pointer.pointee.vtable.pointee.GetName(pointer, &name))
return BStrBinding.toSwift(name)
return BStrBinding.fromABI(name)
}
}

Expand Down Expand Up @@ -123,7 +123,7 @@ enum IFooBinding: COMBinding { // COMBinding conforms to ABIBinding

public static var interfaceID: COMInterfaceID { SWRT_IFoo.iid }

public static func toSwift(_ value: UnsafeMutablePointer<SWRT_IFoo>?) -> IFoo? {
public static func fromABI(_ value: UnsafeMutablePointer<SWRT_IFoo>?) -> IFoo? {
guard let value else { return nil }
return IFooImport(addingRef: value)
}
Expand Down
6 changes: 3 additions & 3 deletions Generator/Sources/SwiftWinRT/Writing/ABIBinding.swift
Original file line number Diff line number Diff line change
Expand Up @@ -124,9 +124,9 @@ fileprivate func writeStructBindingExtension(

let fields = structDefinition.fields.filter { $0.isInstance }

// public static func toSwift(_ value: ABIValue) -> SwiftValue { .init(field: value.Field, ...) }
// public static func fromABI(_ value: ABIValue) -> SwiftValue { .init(field: value.Field, ...) }
try writer.writeFunc(
visibility: .public, static: true, name: "toSwift",
visibility: .public, static: true, name: "fromABI",
params: [.init(label: "_", name: "value", type: abiType)],
returnType: .`self`) { writer in
if fields.isEmpty {
Expand Down Expand Up @@ -194,7 +194,7 @@ fileprivate func writeStructABIToSwiftInitializerParam(

if typeProjection.kind != .identity {
typeProjection.bindingType.write(to: &output)
output.write(".toSwift(")
output.write(".fromABI(")
}

SwiftIdentifier.write(abiValueName, to: &output)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,10 +141,10 @@ fileprivate func writeSwiftToABICall(
let typeProjection = param.typeProjection
if typeProjection.kind != .identity && param.passBy.isOutput {
if typeProjection.kind == .inert {
writer.writeStatement("\(param.name) = \(typeProjection.bindingType).toSwift(\(param.abiBindingName))")
writer.writeStatement("\(param.name) = \(typeProjection.bindingType).fromABI(\(param.abiBindingName))")
}
else {
writer.writeStatement("\(param.name) = \(typeProjection.bindingType).toSwift(consuming: &\(param.abiBindingName))")
writer.writeStatement("\(param.name) = \(typeProjection.bindingType).fromABI(consuming: &\(param.abiBindingName))")
}
}
}
Expand Down Expand Up @@ -186,9 +186,9 @@ fileprivate func writeSwiftToABICall(
case .identity where !returnCOMReference:
returnValue = returnParam.name
case .inert:
returnValue = "\(returnTypeBinding.bindingType).toSwift(\(returnParam.name))"
returnValue = "\(returnTypeBinding.bindingType).fromABI(\(returnParam.name))"
default:
returnValue = "\(returnTypeBinding.bindingType).toSwift(consuming: &\(returnParam.name))"
returnValue = "\(returnTypeBinding.bindingType).fromABI(consuming: &\(returnParam.name))"
}

writer.writeReturnStatement(value: returnValue)
Expand Down
2 changes: 1 addition & 1 deletion Generator/Sources/SwiftWinRT/Writing/VirtualTable.swift
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,7 @@ fileprivate func writeVirtualTableFuncImplementation(name: String, paramNames: [
fileprivate func writePrologueForParam(_ param: ParamProjection, to output: IndentedTextOutputStream) throws {
if param.passBy.isInput {
let declarator: SwiftVariableDeclarator = param.passBy.isOutput ? .var : .let
output.write("\(declarator) \(param.swiftBindingName) = \(param.bindingType).toSwift")
output.write("\(declarator) \(param.swiftBindingName) = \(param.bindingType).fromABI")
switch param.typeProjection.kind {
case .identity: fatalError("Case should have been ignored earlier.")
case .inert, .allocating:
Expand Down
8 changes: 4 additions & 4 deletions Support/Sources/ABIBindings/ABIBinding.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,11 @@ public protocol ABIBinding {

/// Converts a value from its ABI to its Swift representation
/// without releasing the original value.
static func toSwift(_ value: ABIValue) -> SwiftValue
static func fromABI(_ value: ABIValue) -> SwiftValue

/// Converts a value from its ABI to its Swift representation,
/// releasing the original value.
static func toSwift(consuming value: inout ABIValue) -> SwiftValue
static func fromABI(consuming value: inout ABIValue) -> SwiftValue

/// Converts a value from its Swift to its ABI representation.
/// The resulting value should be released as its creation might have allocated resources.
Expand All @@ -28,9 +28,9 @@ public protocol ABIBinding {
}

extension ABIBinding {
public static func toSwift(consuming value: inout ABIValue) -> SwiftValue {
public static func fromABI(consuming value: inout ABIValue) -> SwiftValue {
defer { release(&value) }
return toSwift(value)
return fromABI(value)
}

public static func withABI<Result>(_ value: SwiftValue, _ closure: (ABIValue) throws -> Result) throws -> Result {
Expand Down
2 changes: 1 addition & 1 deletion Support/Sources/ABIBindings/BoolBinding.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ public enum BoolBinding: PODBinding {
public typealias SwiftValue = Bool

public static var abiDefaultValue: CBool { false }
public static func toSwift(_ value: CBool) -> Bool { value }
public static func fromABI(_ value: CBool) -> Bool { value }
public static func toABI(_ value: Bool) -> CBool { value }
}
2 changes: 1 addition & 1 deletion Support/Sources/ABIBindings/ClosedEnumBinding.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ public protocol ClosedEnumBinding: RawRepresentable, PODBinding

extension ClosedEnumBinding {
public static var abiDefaultValue: RawValue { RawValue.zero }
public static func toSwift(_ value: RawValue) -> Self { Self(rawValue: value)! }
public static func fromABI(_ value: RawValue) -> Self { Self(rawValue: value)! }
public static func toABI(_ value: Self) -> RawValue { value.rawValue }
}
2 changes: 1 addition & 1 deletion Support/Sources/ABIBindings/IdentityBinding.swift
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ public protocol IdentityBinding: PODBinding where SwiftValue == ABIValue {}

extension IdentityBinding {
public static func toABI(_ value: SwiftValue) -> ABIValue { value }
public static func toSwift(_ value: ABIValue) -> SwiftValue { value }
public static func fromABI(_ value: ABIValue) -> SwiftValue { value }
}
2 changes: 1 addition & 1 deletion Support/Sources/ABIBindings/NumericBinding.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ public enum NumericBinding<Value: Numeric>: PODBinding {
public typealias SwiftValue = Value

public static var abiDefaultValue: ABIValue { Value.zero }
public static func toSwift(_ value: Value) -> Value { value }
public static func fromABI(_ value: Value) -> Value { value }
public static func toABI(_ value: Value) -> Value { value }
}
2 changes: 1 addition & 1 deletion Support/Sources/ABIBindings/OpenEnumBinding.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ public protocol OpenEnumBinding: RawRepresentable, PODBinding

extension OpenEnumBinding {
public static var abiDefaultValue: RawValue { RawValue.zero }
public static func toSwift(_ value: RawValue) -> Self { Self(rawValue: value) }
public static func fromABI(_ value: RawValue) -> Self { Self(rawValue: value) }
public static func toABI(_ value: Self) -> RawValue { value.rawValue }
}
2 changes: 1 addition & 1 deletion Support/Sources/ABIBindings/PODBinding.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ public protocol PODBinding: ABIBinding {
}

extension PODBinding {
public static func toSwift(consuming value: inout ABIValue) -> SwiftValue { toSwift(value) }
public static func fromABI(consuming value: inout ABIValue) -> SwiftValue { fromABI(value) }
public static func release(_ value: inout ABIValue) {}
}
2 changes: 1 addition & 1 deletion Support/Sources/ABIBindings/WideCharBinding.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,6 @@ public enum WideCharBinding: PODBinding {
public typealias SwiftValue = Unicode.UTF16.CodeUnit

public static var abiDefaultValue: ABIValue { 0 }
public static func toSwift(_ value: UInt16) -> Unicode.UTF16.CodeUnit { value }
public static func fromABI(_ value: UInt16) -> Unicode.UTF16.CodeUnit { value }
public static func toABI(_ value: Unicode.UTF16.CodeUnit) -> UInt16 { value }
}
10 changes: 5 additions & 5 deletions Support/Sources/COM/COMBinding.swift
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,15 @@ extension COMBinding {
// Default ABIBinding implementation
public static var abiDefaultValue: ABIValue { nil }

public static func toSwift(_ value: ABIValue) -> SwiftValue {
public static func fromABI(_ value: ABIValue) -> SwiftValue {
guard let comPointer = value else { return nil }
return toSwift(ABIReference(addingRef: comPointer))
return fromABI(ABIReference(addingRef: comPointer))
}

public static func toSwift(consuming value: inout ABIValue) -> SwiftValue {
public static func fromABI(consuming value: inout ABIValue) -> SwiftValue {
guard let comPointer = value else { return nil }
value = nil
return toSwift(ABIReference(transferringRef: comPointer))
return fromABI(ABIReference(transferringRef: comPointer))
}

public static func toABI(_ value: SwiftValue) throws -> ABIValue {
Expand All @@ -56,7 +56,7 @@ extension COMBinding {
// Default COMBinding implementation
public static func _unwrap(_ pointer: ABIPointer) -> SwiftObject? { nil }

public static func toSwift(_ reference: consuming ABIReference) -> SwiftObject {
public static func fromABI(_ reference: consuming ABIReference) -> SwiftObject {
if let swiftObject = _unwrap(reference.pointer) { return swiftObject }
return _wrap(consume reference)
}
Expand Down
2 changes: 1 addition & 1 deletion Support/Sources/COM/COMEmbedding.swift
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ public enum IUnknownVirtualTable {
ppvObject.pointee = nil

return COMError.toABI {
let id = GUIDBinding.toSwift(iid.pointee)
let id = GUIDBinding.fromABI(iid.pointee)
let this = IUnknownPointer(OpaquePointer(this))
let reference = id == uuidof(SWRT_SwiftCOMObject.self)
? IUnknownReference(addingRef: this)
Expand Down
2 changes: 1 addition & 1 deletion Support/Sources/COM/COMError+createErrorInfo.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ extension COMError {
var createErrorInfo = ICreateErrorInfoBinding.abiDefaultValue
defer { ICreateErrorInfoBinding.release(&createErrorInfo) }
try COMError.fromABI(SWRT_CreateErrorInfo(&createErrorInfo))
return try NullResult.unwrap(ICreateErrorInfoBinding.toSwift(createErrorInfo))
return try NullResult.unwrap(ICreateErrorInfoBinding.fromABI(createErrorInfo))
}

/// Creates an instance of `IErrorInfo` with prepopulated fields.
Expand Down
2 changes: 1 addition & 1 deletion Support/Sources/COM/COMError.swift
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ public struct COMError: COMErrorProtocol, CustomStringConvertible {
var errorInfo: UnsafeMutablePointer<SWRT_IErrorInfo>?
defer { IErrorInfoBinding.release(&errorInfo) }
try fromABI(captureErrorInfo: false, COM_ABI.SWRT_GetErrorInfo(/* dwReserved: */ 0, &errorInfo))
return IErrorInfoBinding.toSwift(consuming: &errorInfo)
return IErrorInfoBinding.fromABI(consuming: &errorInfo)
}

public static func setErrorInfo(_ errorInfo: IErrorInfo?) throws {
Expand Down
2 changes: 1 addition & 1 deletion Support/Sources/COM/Projection/BStrBinding.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public enum BStrBinding: ABIBinding {

public static var abiDefaultValue: ABIValue { nil }

public static func toSwift(_ value: COM_ABI.SWRT_BStr?) -> String? {
public static func fromABI(_ value: COM_ABI.SWRT_BStr?) -> String? {
guard let value else { return nil }
let length = COM_ABI.SWRT_SysStringLen(value)
return String(utf16CodeUnits: value, count: Int(length))
Expand Down
2 changes: 1 addition & 1 deletion Support/Sources/COM/Projection/GUID.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public enum GUIDBinding: PODBinding {
.init(Data1: 0, Data2: 0, Data3: 0, Data4: (0, 0, 0, 0, 0, 0, 0, 0))
}

public static func toSwift(_ value: COM_ABI.SWRT_Guid) -> GUID {
public static func fromABI(_ value: COM_ABI.SWRT_Guid) -> GUID {
.init(uuid: (
UInt8((value.Data1 >> 24) & 0xFF), UInt8((value.Data1 >> 16) & 0xFF),
UInt8((value.Data1 >> 8) & 0xFF), UInt8((value.Data1 >> 0) & 0xFF),
Expand Down
2 changes: 1 addition & 1 deletion Support/Sources/COM/Projection/HResultBinding.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@ public enum HResultBinding: PODBinding {
public typealias ABIValue = COM_ABI.SWRT_HResult

public static var abiDefaultValue: ABIValue { 0 /* S_OK */ }
public static func toSwift(_ value: COM_ABI.SWRT_HResult) -> SwiftValue { HResult(value) }
public static func fromABI(_ value: COM_ABI.SWRT_HResult) -> SwiftValue { HResult(value) }
public static func toABI(_ value: HResult) -> COM_ABI.SWRT_HResult { value.value }
}
8 changes: 4 additions & 4 deletions Support/Sources/COM/Projection/ICreateErrorInfo.swift
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,11 @@ public enum ICreateErrorInfoBinding: COMTwoWayBinding {
Release: { IUnknownVirtualTable.Release($0) },
SetGUID: { this, guid in _implement(this) {
guard let guid else { throw COMError.invalidArg }
try $0.setGUID(GUIDBinding.toSwift(guid.pointee))
try $0.setGUID(GUIDBinding.fromABI(guid.pointee))
} },
SetSource: { this, source in _implement(this) { try $0.setSource(BStrBinding.toSwift(source)) } },
SetDescription: { this, description in _implement(this) { try $0.setDescription(BStrBinding.toSwift(description)) } },
SetHelpFile: { this, helpFile in _implement(this) { try $0.setHelpFile(BStrBinding.toSwift(helpFile)) } },
SetSource: { this, source in _implement(this) { try $0.setSource(BStrBinding.fromABI(source)) } },
SetDescription: { this, description in _implement(this) { try $0.setDescription(BStrBinding.fromABI(description)) } },
SetHelpFile: { this, helpFile in _implement(this) { try $0.setHelpFile(BStrBinding.fromABI(helpFile)) } },
SetHelpContext: { this, helpContext in _implement(this) { try $0.setHelpContext(helpContext) } })
}

Expand Down
8 changes: 4 additions & 4 deletions Support/Sources/COM/Projection/IErrorInfo.swift
Original file line number Diff line number Diff line change
Expand Up @@ -51,25 +51,25 @@ extension COMInterop where ABIStruct == COM_ABI.SWRT_IErrorInfo {
public func getGuid() throws -> GUID {
var value = GUIDBinding.abiDefaultValue
try COMError.fromABI(this.pointee.VirtualTable.pointee.GetGUID(this, &value))
return GUIDBinding.toSwift(value)
return GUIDBinding.fromABI(value)
}

public func getSource() throws -> String? {
var value = BStrBinding.abiDefaultValue
try COMError.fromABI(this.pointee.VirtualTable.pointee.GetSource(this, &value))
return BStrBinding.toSwift(consuming: &value)
return BStrBinding.fromABI(consuming: &value)
}

public func getDescription() throws -> String? {
var value = BStrBinding.abiDefaultValue
try COMError.fromABI(this.pointee.VirtualTable.pointee.GetDescription(this, &value))
return BStrBinding.toSwift(consuming: &value)
return BStrBinding.fromABI(consuming: &value)
}

public func getHelpFile() throws -> String? {
var value = BStrBinding.abiDefaultValue
try COMError.fromABI(this.pointee.VirtualTable.pointee.GetHelpFile(this, &value))
return BStrBinding.toSwift(consuming: &value)
return BStrBinding.fromABI(consuming: &value)
}

public func getHelpContext() throws -> UInt32 {
Expand Down
2 changes: 1 addition & 1 deletion Support/Sources/COM/Projection/IUnknown.swift
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ extension IUnknownProtocol {
/// Queries this object for an additional COM interface described by the given binding.
/// On failure, throws a COMError with an HResult of E_NOINTERFACE.
public func queryInterface<Binding: COMBinding>(_: Binding.Type) throws -> Binding.SwiftObject {
Binding.toSwift(try self._queryInterface(Binding.self))
Binding.fromABI(try self._queryInterface(Binding.self))
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ extension ActivatableClassBinding {
}

extension ComposableClassBinding {
public static func toSwift(consuming value: inout ABIValue) -> SwiftValue {
public static func fromABI(consuming value: inout ABIValue) -> SwiftValue {
guard let pointer = value else { return nil }
let reference = COMReference(transferringRef: pointer)
if let swiftObject = _unwrap(reference.pointer) { return swiftObject }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public enum IReferenceToOptionalBinding<Binding: IReferenceableBinding>: WinRTBi
withUnsafeMutablePointer(to: &abiValue) { abiValuePointer in
try! reference.interop.get_Value(abiValuePointer)
}
return Binding.toSwift(consuming: &abiValue)
return Binding.fromABI(consuming: &abiValue)
}

public static func toCOM(_ value: SwiftObject) throws -> ABIReference {
Expand Down
8 changes: 4 additions & 4 deletions Support/Sources/WindowsRuntime/Projection/ArrayBinding.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,19 @@ public enum ArrayBinding<ElementBinding: ABIBinding>: ABIBinding {

public static var abiDefaultValue: ABIValue { .null }

public static func toSwift(_ value: ABIValue) -> SwiftValue {
public static func fromABI(_ value: ABIValue) -> SwiftValue {
guard value.count > 0 else { return [] }
return .init(unsafeUninitializedCapacity: Int(value.count)) { buffer, initializedCount in
for i in 0..<Int(value.count) {
buffer.initializeElement(at: i, to: ElementBinding.toSwift(value[i]))
buffer.initializeElement(at: i, to: ElementBinding.fromABI(value[i]))
initializedCount = i + 1
}
}
}

public static func toSwift(pointer: UnsafeMutablePointer<ElementBinding.ABIValue>?, count: UInt32) -> SwiftValue {
public static func fromABI(pointer: UnsafeMutablePointer<ElementBinding.ABIValue>?, count: UInt32) -> SwiftValue {
if let pointer {
return toSwift(COMArray(pointer: pointer, count: count))
return fromABI(COMArray(pointer: pointer, count: count))
} else {
assert(count == 0)
return []
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@ extension EventRegistrationToken: PODBinding {
public typealias ABIValue = WindowsRuntime_ABI.SWRT_EventRegistrationToken

public static var abiDefaultValue: ABIValue { WindowsRuntime_ABI.SWRT_EventRegistrationToken(value: 0) }
public static func toSwift(_ value: ABIValue) -> SwiftValue { SwiftValue(value.value) }
public static func fromABI(_ value: ABIValue) -> SwiftValue { SwiftValue(value.value) }
public static func toABI(_ value: SwiftValue) -> ABIValue { ABIValue(value: value.value) }
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public enum IActivationFactoryBinding: InterfaceBinding {
private final class Import: WinRTImport<IActivationFactoryBinding>, IActivationFactoryProtocol {
public func activateInstance() throws -> IInspectable {
var instancePointer = try _interop.activateInstance()
return try NullResult.unwrap(IInspectableBinding.toSwift(consuming: &instancePointer))
return try NullResult.unwrap(IInspectableBinding.fromABI(consuming: &instancePointer))
}
}
}
Expand Down
6 changes: 3 additions & 3 deletions Support/Sources/WindowsRuntime/Projection/IInspectable.swift
Original file line number Diff line number Diff line change
Expand Up @@ -48,18 +48,18 @@ extension COMInterop where ABIStruct == WindowsRuntime_ABI.SWRT_IInspectable {
var iids: COMArray<WindowsRuntime_ABI.SWRT_Guid> = .null
try WinRTError.fromABI(this.pointee.VirtualTable.pointee.GetIids(this, &iids.count, &iids.pointer))
defer { iids.deallocate() }
return ArrayBinding<GUIDBinding>.toSwift(consuming: &iids)
return ArrayBinding<GUIDBinding>.fromABI(consuming: &iids)
}

public func getRuntimeClassName() throws -> String {
var runtimeClassName: WindowsRuntime_ABI.SWRT_HString?
try WinRTError.fromABI(this.pointee.VirtualTable.pointee.GetRuntimeClassName(this, &runtimeClassName))
return StringBinding.toSwift(consuming: &runtimeClassName)
return StringBinding.fromABI(consuming: &runtimeClassName)
}

public func getTrustLevel() throws -> TrustLevel {
var trustLevel: WindowsRuntime_ABI.SWRT_TrustLevel = 0
try WinRTError.fromABI(this.pointee.VirtualTable.pointee.GetTrustLevel(this, &trustLevel))
return TrustLevel.toSwift(trustLevel)
return TrustLevel.fromABI(trustLevel)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,6 @@ extension COMInterop where ABIStruct == WindowsRuntime_ABI.SWRT_ILanguageExcepti
var result: IUnknownPointer? = nil // IUnknownBinding.abiDefaultValue (compiler bug?)
defer { IUnknownBinding.release(&result) }
try COMError.fromABI(this.pointee.VirtualTable.pointee.GetLanguageException(this, &result))
return IUnknownBinding.toSwift(consuming: &result)
return IUnknownBinding.fromABI(consuming: &result)
}
}
Loading

0 comments on commit acccf55

Please sign in to comment.