Skip to content

Commit ef66493

Browse files
committed
Tests and fixes.
1 parent fc1a9b8 commit ef66493

File tree

4 files changed

+97
-8
lines changed

4 files changed

+97
-8
lines changed

Sources/JExtractSwiftLib/FFM/CDeclLowering/FFMSwift2JavaGenerator+FunctionLowering.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ struct CdeclLowering {
282282
)
283283
}
284284

285-
case .data:
285+
case .data, .essentialsData:
286286
break
287287

288288
default:
@@ -375,7 +375,7 @@ struct CdeclLowering {
375375
case .nominal(let nominal):
376376
if let knownType = nominal.nominalTypeDecl.knownTypeKind {
377377
switch knownType {
378-
case .data:
378+
case .data, .essentialsData:
379379
break
380380
case .unsafeRawPointer, .unsafeMutableRawPointer:
381381
throw LoweringError.unhandledType(.optional(wrappedType))
@@ -387,7 +387,7 @@ struct CdeclLowering {
387387
throw LoweringError.unhandledType(.optional(wrappedType))
388388
case .void, .string:
389389
throw LoweringError.unhandledType(.optional(wrappedType))
390-
case .dataProtocol:
390+
case .dataProtocol, .essentialsDataProtocol:
391391
throw LoweringError.unhandledType(.optional(wrappedType))
392392
default:
393393
// Unreachable? Should be handled by `CType(cdeclType:)` lowering above.
@@ -505,7 +505,7 @@ struct CdeclLowering {
505505
])
506506
)
507507

508-
case .data:
508+
case .data, .essentialsData:
509509
break
510510

511511
default:
@@ -606,7 +606,7 @@ struct CdeclLowering {
606606
case .void:
607607
return LoweredResult(cdeclResultType: .void, cdeclOutParameters: [], conversion: .placeholder)
608608

609-
case .data:
609+
case .data, .essentialsData:
610610
break
611611

612612
case .string, .optional:

Sources/JExtractSwiftLib/FFM/FFMSwift2JavaGenerator+JavaTranslation.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ extension FFMSwift2JavaGenerator {
411411
conversion: .call(.placeholder, function: "SwiftRuntime.toCString", withArena: true)
412412
)
413413

414-
case .data:
414+
case .data, .essentialsData:
415415
break
416416

417417
default:
@@ -515,7 +515,7 @@ extension FFMSwift2JavaGenerator {
515515
case .nominal(let nominal):
516516
if let knownType = nominal.nominalTypeDecl.knownTypeKind {
517517
switch knownType {
518-
case .data, .dataProtocol:
518+
case .data, .dataProtocol, .essentialsData, .essentialsDataProtocol:
519519
break
520520
default:
521521
throw JavaTranslationError.unhandledType(.optional(swiftType))
@@ -658,7 +658,7 @@ extension FFMSwift2JavaGenerator {
658658
)
659659
)
660660

661-
case .data:
661+
case .data, .essentialsData:
662662
break
663663

664664
case .unsafePointer, .unsafeMutablePointer:

Sources/JExtractSwiftLib/SwiftTypes/SwiftKnownTypes.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ struct SwiftKnownTypes {
3737

3838
var dataProtocol: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.dataProtocol])) }
3939
var data: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.data])) }
40+
var essentialsDataProtocol: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.essentialsDataProtocol])) }
41+
var essentialsData: SwiftType { .nominal(SwiftNominalType(nominalTypeDecl: symbolTable[.essentialsData])) }
4042

4143
func unsafePointer(_ pointeeType: SwiftType) -> SwiftType {
4244
.nominal(
@@ -79,6 +81,7 @@ struct SwiftKnownTypes {
7981
func representativeType(of knownProtocol: SwiftKnownTypeDeclKind) -> SwiftType? {
8082
switch knownProtocol {
8183
case .dataProtocol: return self.data
84+
case .essentialsDataProtocol: return self.essentialsData
8285
default: return nil
8386
}
8487
}

Tests/JExtractSwiftTests/DataImportTests.swift

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,21 @@ final class DataImportTests {
3131
public func receiveDataProtocol<T: DataProtocol>(dat: some DataProtocol, dat2: T?)
3232
"""
3333

34+
let essentials_data_interfaceFile =
35+
"""
36+
import FoundationEssentials
37+
38+
public func receiveData(dat: Data)
39+
public func returnData() -> Data
40+
"""
41+
42+
let essentials_dataProtocol_interfaceFile =
43+
"""
44+
import FoundationEssentials
45+
46+
public func receiveDataProtocol<T: DataProtocol>(dat: some DataProtocol, dat2: T?)
47+
"""
48+
3449

3550
@Test("Import Data: Swift thunks")
3651
func data_swiftThunk() throws {
@@ -85,6 +100,57 @@ final class DataImportTests {
85100
""",
86101
]
87102
)
103+
104+
try assertOutput(
105+
input: essentials_data_interfaceFile, .ffm, .swift,
106+
expectedChunks: [
107+
"""
108+
import FoundationEssentials
109+
""",
110+
"""
111+
@_cdecl("swiftjava_SwiftModule_receiveData_dat")
112+
public func swiftjava_SwiftModule_receiveData_dat(_ dat: UnsafeRawPointer) {
113+
receiveData(dat: dat.assumingMemoryBound(to: Data.self).pointee)
114+
}
115+
""",
116+
"""
117+
@_cdecl("swiftjava_SwiftModule_returnData")
118+
public func swiftjava_SwiftModule_returnData(_ _result: UnsafeMutableRawPointer) {
119+
_result.assumingMemoryBound(to: Data.self).initialize(to: returnData())
120+
}
121+
""",
122+
123+
"""
124+
@_cdecl("swiftjava_getType_SwiftModule_Data")
125+
public func swiftjava_getType_SwiftModule_Data() -> UnsafeMutableRawPointer /* Any.Type */ {
126+
return unsafeBitCast(Data.self, to: UnsafeMutableRawPointer.self)
127+
}
128+
""",
129+
130+
"""
131+
@_cdecl("swiftjava_SwiftModule_Data_init_bytes_count")
132+
public func swiftjava_SwiftModule_Data_init_bytes_count(_ bytes: UnsafeRawPointer, _ count: Int, _ _result: UnsafeMutableRawPointer) {
133+
_result.assumingMemoryBound(to: Data.self).initialize(to: Data(bytes: bytes, count: count))
134+
}
135+
""",
136+
137+
"""
138+
@_cdecl("swiftjava_SwiftModule_Data_count$get")
139+
public func swiftjava_SwiftModule_Data_count$get(_ self: UnsafeRawPointer) -> Int {
140+
return self.assumingMemoryBound(to: Data.self).pointee.count
141+
}
142+
""",
143+
144+
"""
145+
@_cdecl("swiftjava_SwiftModule_Data_withUnsafeBytes__")
146+
public func swiftjava_SwiftModule_Data_withUnsafeBytes__(_ body: @convention(c) (UnsafeRawPointer?, Int) -> Void, _ self: UnsafeRawPointer) {
147+
self.assumingMemoryBound(to: Data.self).pointee.withUnsafeBytes({ (_0) in
148+
return body(_0.baseAddress, _0.count)
149+
})
150+
}
151+
""",
152+
]
153+
)
88154
}
89155

90156
@Test("Import Data: JavaBindings")
@@ -354,6 +420,26 @@ final class DataImportTests {
354420
"""
355421
]
356422
)
423+
424+
try assertOutput(
425+
input: essentials_dataProtocol_interfaceFile, .ffm, .swift,
426+
expectedChunks: [
427+
"""
428+
import FoundationEssentials
429+
""",
430+
"""
431+
@_cdecl("swiftjava_SwiftModule_receiveDataProtocol_dat_dat2")
432+
public func swiftjava_SwiftModule_receiveDataProtocol_dat_dat2(_ dat: UnsafeRawPointer, _ dat2: UnsafeRawPointer?) {
433+
receiveDataProtocol(dat: dat.assumingMemoryBound(to: Data.self).pointee, dat2: dat2?.assumingMemoryBound(to: Data.self).pointee)
434+
}
435+
""",
436+
437+
// Just to make sure 'Data' is imported.
438+
"""
439+
@_cdecl("swiftjava_getType_SwiftModule_Data")
440+
"""
441+
]
442+
)
357443
}
358444

359445
@Test("Import DataProtocol: JavaBindings")

0 commit comments

Comments
 (0)