Skip to content

Commit 2ca6d55

Browse files
committed
C lowering: drop the Java FFM type from this lowering
We're going to separate out the lowering of Swift declarations to C from the handling of those C declarations on the Java side. That's cleaner and more generalizable.
1 parent 98129ae commit 2ca6d55

File tree

2 files changed

+21
-28
lines changed

2 files changed

+21
-28
lines changed

Sources/JExtractSwift/Swift2JavaTranslator+FunctionLowering.swift

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -64,19 +64,22 @@ extension Swift2JavaTranslator {
6464
)
6565

6666
// If the result type doesn't lower to either empty (void) or a single
67-
// primitive result, make it indirect.
67+
// result, make it indirect.
6868
let indirectResult: Bool
69-
if !(loweredResult.javaFFMParameters.count == 0 ||
70-
(loweredResult.javaFFMParameters.count == 1 &&
71-
loweredResult.javaFFMParameters[0].isPrimitive)) {
69+
if loweredResult.cdeclParameters.count == 0 {
70+
// void result type
71+
indirectResult = false
72+
} else if loweredResult.cdeclParameters.count == 1,
73+
loweredResult.cdeclParameters[0].isPrimitive {
74+
// Primitive result type
75+
indirectResult = false
76+
} else {
7277
loweredResult = try lowerParameter(
7378
signature.result.type,
7479
convention: .inout,
7580
parameterName: "_result"
7681
)
7782
indirectResult = true
78-
} else {
79-
indirectResult = false
8083
}
8184

8285
// Collect all of the lowered parameters for the @_cdecl function.
@@ -146,8 +149,7 @@ extension Swift2JavaTranslator {
146149
)
147150
)
148151
)
149-
],
150-
javaFFMParameters: [.SwiftPointer]
152+
]
151153
)
152154

153155
case .nominal(let nominal):
@@ -190,8 +192,7 @@ extension Swift2JavaTranslator {
190192
)
191193
)
192194
)
193-
],
194-
javaFFMParameters: [.SwiftPointer]
195+
]
195196
)
196197

197198
case .tuple(let tuple):
@@ -201,8 +202,7 @@ extension Swift2JavaTranslator {
201202
}
202203
return LoweredParameters(
203204
cdeclToOriginal: .tuplify(loweredElements.map { $0.cdeclToOriginal }),
204-
cdeclParameters: loweredElements.flatMap { $0.cdeclParameters },
205-
javaFFMParameters: loweredElements.flatMap { $0.javaFFMParameters }
205+
cdeclParameters: loweredElements.flatMap { $0.cdeclParameters }
206206
)
207207
}
208208
}
@@ -217,6 +217,9 @@ extension Swift2JavaTranslator {
217217

218218
// Swift types that map directly to Java primitive types.
219219
if let primitiveType = JavaType(swiftTypeName: nominalName) {
220+
// FIXME: Should be using C types here, not Java types.
221+
_ = primitiveType
222+
220223
// We cannot handle inout on primitive types.
221224
if convention == .inout {
222225
throw LoweringError.inoutNotSupported(type)
@@ -228,11 +231,9 @@ extension Swift2JavaTranslator {
228231
SwiftParameter(
229232
convention: convention,
230233
parameterName: parameterName,
231-
type: type
234+
type: type,
235+
isPrimitive: true
232236
)
233-
],
234-
javaFFMParameters: [
235-
ForeignValueLayout(javaType: primitiveType)!
236237
]
237238
)
238239
}
@@ -251,11 +252,9 @@ extension Swift2JavaTranslator {
251252
SwiftParameter(
252253
convention: convention,
253254
parameterName: parameterName,
254-
type: type
255+
type: type,
256+
isPrimitive: true
255257
)
256-
],
257-
javaFFMParameters: [
258-
.SwiftInt
259258
]
260259
)
261260
}
@@ -351,8 +350,7 @@ extension Swift2JavaTranslator {
351350

352351
return LoweredParameters(
353352
cdeclToOriginal: cdeclToOriginal,
354-
cdeclParameters: lowered.map(\.0),
355-
javaFFMParameters: lowered.map(\.1)
353+
cdeclParameters: lowered.map(\.0)
356354
)
357355
}
358356
}
@@ -405,12 +403,6 @@ struct LoweredParameters: Equatable {
405403

406404
/// The lowering of the parameters at the C level in Swift.
407405
var cdeclParameters: [SwiftParameter]
408-
409-
/// The lowering of the parameters at the C level as expressed for Java's
410-
/// foreign function and memory interface.
411-
///
412-
/// The elements in this array match up with those of 'cdeclParameters'.
413-
var javaFFMParameters: [ForeignValueLayout]
414406
}
415407

416408
extension LoweredParameters {

Sources/JExtractSwift/SwiftTypes/SwiftParameter.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ struct SwiftParameter: Equatable {
1919
var argumentLabel: String?
2020
var parameterName: String?
2121
var type: SwiftType
22+
var isPrimitive = false
2223
}
2324

2425
extension SwiftParameter: CustomStringConvertible {

0 commit comments

Comments
 (0)