Skip to content

Commit 00df828

Browse files
authored
Merge pull request #233 from madsodgaard/move-layout-constants
Move layout constants from generated code to SwiftKit
2 parents d332703 + 008d9d1 commit 00df828

File tree

5 files changed

+29
-63
lines changed

5 files changed

+29
-63
lines changed

Sources/JExtractSwift/JavaConstants/ForeignValueLayouts.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ public struct ForeignValueLayout: CustomStringConvertible, Equatable {
5757
result.append("/*\(inlineComment)*/")
5858
}
5959

60-
result.append("\(value)")
60+
result.append("SwiftValueLayout.\(value)")
6161

6262
// When the type is some custom type, e.g. another Swift struct that we imported,
6363
// we need to import its layout. We do this by calling $layout() on it.

Sources/JExtractSwift/Swift2JavaTranslator+Printing.swift

Lines changed: 1 addition & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,6 @@ extension Swift2JavaTranslator {
298298

299299
// Constants
300300
printClassConstants(printer: &printer)
301-
printTypeMappingDecls(&printer)
302301

303302
body(&printer)
304303
}
@@ -310,7 +309,6 @@ extension Swift2JavaTranslator {
310309

311310
// Constants
312311
printClassConstants(printer: &printer)
313-
printTypeMappingDecls(&printer)
314312

315313
printer.print(
316314
"""
@@ -443,45 +441,6 @@ extension Swift2JavaTranslator {
443441
)
444442
}
445443

446-
public func printTypeMappingDecls(_ printer: inout CodePrinter) {
447-
// TODO: use some dictionary for those
448-
printer.print(
449-
"""
450-
// TODO: rather than the C ones offer the Swift mappings
451-
public static final ValueLayout.OfBoolean C_BOOL = ValueLayout.JAVA_BOOLEAN;
452-
public static final ValueLayout.OfByte C_CHAR = ValueLayout.JAVA_BYTE;
453-
public static final ValueLayout.OfShort C_SHORT = ValueLayout.JAVA_SHORT;
454-
public static final ValueLayout.OfInt C_INT = ValueLayout.JAVA_INT;
455-
public static final ValueLayout.OfLong C_LONG_LONG = ValueLayout.JAVA_LONG;
456-
public static final ValueLayout.OfFloat C_FLOAT = ValueLayout.JAVA_FLOAT;
457-
public static final ValueLayout.OfDouble C_DOUBLE = ValueLayout.JAVA_DOUBLE;
458-
public static final AddressLayout C_POINTER = ValueLayout.ADDRESS
459-
.withTargetLayout(MemoryLayout.sequenceLayout(java.lang.Long.MAX_VALUE, ValueLayout.JAVA_BYTE));
460-
public static final ValueLayout.OfLong C_LONG = ValueLayout.JAVA_LONG;
461-
"""
462-
)
463-
printer.print("")
464-
printer.print(
465-
"""
466-
public static final ValueLayout.OfBoolean SWIFT_BOOL = ValueLayout.JAVA_BOOLEAN;
467-
public static final ValueLayout.OfByte SWIFT_INT8 = ValueLayout.JAVA_BYTE;
468-
public static final ValueLayout.OfChar SWIFT_UINT16 = ValueLayout.JAVA_CHAR;
469-
public static final ValueLayout.OfShort SWIFT_INT16 = ValueLayout.JAVA_SHORT;
470-
public static final ValueLayout.OfInt SWIFT_INT32 = ValueLayout.JAVA_INT;
471-
public static final ValueLayout.OfLong SWIFT_INT64 = ValueLayout.JAVA_LONG;
472-
public static final ValueLayout.OfFloat SWIFT_FLOAT = ValueLayout.JAVA_FLOAT;
473-
public static final ValueLayout.OfDouble SWIFT_DOUBLE = ValueLayout.JAVA_DOUBLE;
474-
public static final AddressLayout SWIFT_POINTER = ValueLayout.ADDRESS;
475-
// On the platform this was generated on, Int was Int64
476-
public static final SequenceLayout SWIFT_BYTE_ARRAY = MemoryLayout.sequenceLayout(8, ValueLayout.JAVA_BYTE);
477-
public static final ValueLayout.OfLong SWIFT_INT = SWIFT_INT64;
478-
public static final ValueLayout.OfLong SWIFT_UINT = SWIFT_INT64;
479-
480-
public static final AddressLayout SWIFT_SELF = SWIFT_POINTER;
481-
"""
482-
)
483-
}
484-
485444
public func printClassConstructors(_ printer: inout CodePrinter, _ decl: ImportedFunc) {
486445
guard let parentName = decl.parent else {
487446
fatalError("init must be inside a parent type! Was: \(decl)")
@@ -1054,7 +1013,7 @@ extension Swift2JavaTranslator {
10541013

10551014
let isIndirectReturn = decl.isIndirectReturn
10561015

1057-
var parameterLayoutDescriptors: [ForeignValueLayout] = javaMemoryLayoutDescriptors(
1016+
let parameterLayoutDescriptors: [ForeignValueLayout] = javaMemoryLayoutDescriptors(
10581017
forParametersOf: decl,
10591018
paramPassingStyle: .pointer
10601019
)

SwiftKit/src/main/java/org/swift/swiftkit/SwiftValueLayout.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import java.lang.foreign.AddressLayout;
1818
import java.lang.foreign.MemoryLayout;
19+
import java.lang.foreign.SequenceLayout;
1920
import java.lang.foreign.ValueLayout;
2021

2122
import static java.lang.foreign.ValueLayout.*;
@@ -32,13 +33,24 @@ public static long addressByteSize() {
3233
return ValueLayout.ADDRESS.byteSize();
3334
}
3435

36+
public static final ValueLayout.OfBoolean SWIFT_BOOL = ValueLayout.JAVA_BOOLEAN;
37+
public static final ValueLayout.OfByte SWIFT_INT8 = ValueLayout.JAVA_BYTE;
38+
public static final ValueLayout.OfChar SWIFT_UINT16 = ValueLayout.JAVA_CHAR;
39+
public static final ValueLayout.OfShort SWIFT_INT16 = ValueLayout.JAVA_SHORT;
40+
public static final ValueLayout.OfInt SWIFT_INT32 = ValueLayout.JAVA_INT;
41+
public static final ValueLayout.OfLong SWIFT_INT64 = ValueLayout.JAVA_LONG;
42+
public static final ValueLayout.OfFloat SWIFT_FLOAT = ValueLayout.JAVA_FLOAT;
43+
public static final ValueLayout.OfDouble SWIFT_DOUBLE = ValueLayout.JAVA_DOUBLE;
44+
public static final AddressLayout SWIFT_POINTER = ValueLayout.ADDRESS
45+
.withTargetLayout(MemoryLayout.sequenceLayout(Long.MAX_VALUE, JAVA_BYTE));
46+
public static final SequenceLayout SWIFT_BYTE_ARRAY = MemoryLayout.sequenceLayout(8, ValueLayout.JAVA_BYTE);
47+
3548
/**
3649
* The value layout for Swift's {@code Int} type, which is a signed type that follows
3750
* the size of a pointer (aka C's {@code ptrdiff_t}).
3851
*/
3952
public static ValueLayout SWIFT_INT = (ValueLayout.ADDRESS.byteSize() == 4) ?
40-
ValueLayout.JAVA_INT : ValueLayout.JAVA_LONG;
41-
53+
SWIFT_INT32 : SWIFT_INT64;
4254

4355
/**
4456
* The value layout for Swift's {@code UInt} type, which is an unsigned type that follows
@@ -47,9 +59,4 @@ public static long addressByteSize() {
4759
* Java does not have unsigned integer types, so we use the layout for Swift's {@code Int}.
4860
*/
4961
public static ValueLayout SWIFT_UINT = SWIFT_INT;
50-
51-
52-
public static final AddressLayout SWIFT_POINTER = ValueLayout.ADDRESS
53-
.withTargetLayout(MemoryLayout.sequenceLayout(Long.MAX_VALUE, JAVA_BYTE));
54-
5562
}

Tests/JExtractSwiftTests/FunctionDescriptorImportTests.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ final class FunctionDescriptorTests {
6161
expected:
6262
"""
6363
public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
64-
/*i*/SWIFT_INT
64+
/*i*/SwiftValueLayout.SWIFT_INT
6565
);
6666
"""
6767
)
@@ -76,8 +76,8 @@ final class FunctionDescriptorTests {
7676
expected:
7777
"""
7878
public static final FunctionDescriptor DESC = FunctionDescriptor.ofVoid(
79-
/*l*/SWIFT_INT64,
80-
/*i32*/SWIFT_INT32
79+
/*l*/SwiftValueLayout.SWIFT_INT64,
80+
/*i32*/SwiftValueLayout.SWIFT_INT32
8181
);
8282
"""
8383
)
@@ -92,8 +92,8 @@ final class FunctionDescriptorTests {
9292
expected:
9393
"""
9494
public static final FunctionDescriptor DESC = FunctionDescriptor.of(
95-
/* -> */SWIFT_INT,
96-
/*i*/SWIFT_INT
95+
/* -> */SwiftValueLayout.SWIFT_INT,
96+
/*i*/SwiftValueLayout.SWIFT_INT
9797
);
9898
"""
9999
)
@@ -108,8 +108,8 @@ final class FunctionDescriptorTests {
108108
expected:
109109
"""
110110
public static final FunctionDescriptor DESC_GET = FunctionDescriptor.of(
111-
/* -> */SWIFT_INT32,
112-
/*self$*/SWIFT_POINTER
111+
/* -> */SwiftValueLayout.SWIFT_INT32,
112+
/*self$*/SwiftValueLayout.SWIFT_POINTER
113113
);
114114
"""
115115
)
@@ -123,8 +123,8 @@ final class FunctionDescriptorTests {
123123
expected:
124124
"""
125125
public static final FunctionDescriptor DESC_SET = FunctionDescriptor.ofVoid(
126-
/*newValue*/SWIFT_INT32,
127-
/*self$*/SWIFT_POINTER
126+
/*newValue*/SwiftValueLayout.SWIFT_INT32,
127+
/*self$*/SwiftValueLayout.SWIFT_POINTER
128128
);
129129
"""
130130
)

Tests/JExtractSwiftTests/VariableImportTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,16 @@ final class VariableImportTests {
4848
"""
4949
private static class counterInt {
5050
public static final FunctionDescriptor DESC_GET = FunctionDescriptor.of(
51-
/* -> */SWIFT_INT,
52-
/*self$*/SWIFT_POINTER
51+
/* -> */SwiftValueLayout.SWIFT_INT,
52+
/*self$*/SwiftValueLayout.SWIFT_POINTER
5353
);
5454
public static final MemorySegment ADDR_GET =
5555
FakeModule.findOrThrow("swiftjava_FakeModule_MySwiftClass_counterInt");
5656
5757
public static final MethodHandle HANDLE_GET = Linker.nativeLinker().downcallHandle(ADDR_GET, DESC_GET);
5858
public static final FunctionDescriptor DESC_SET = FunctionDescriptor.ofVoid(
59-
/*newValue*/SWIFT_INT,
60-
/*self$*/SWIFT_POINTER
59+
/*newValue*/SwiftValueLayout.SWIFT_INT,
60+
/*self$*/SwiftValueLayout.SWIFT_POINTER
6161
);
6262
public static final MemorySegment ADDR_SET =
6363
FakeModule.findOrThrow("swiftjava_FakeModule_MySwiftClass_counterInt");

0 commit comments

Comments
 (0)