Skip to content

Commit 971bb92

Browse files
committed
[JExtract] Don't emit constructor without SwiftArena
Users should consitently use the same arena. Also since nothing was retaining the '.ofAuto()' arena was evil.
1 parent 7700181 commit 971bb92

File tree

13 files changed

+61
-88
lines changed

13 files changed

+61
-88
lines changed

Samples/SwiftAndJavaJarSampleLib/src/jmh/java/org/swift/swiftkit/JavaToSwiftBenchmark.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ public class JavaToSwiftBenchmark {
3333

3434
@State(Scope.Benchmark)
3535
public static class BenchmarkState {
36+
ClosableSwiftArena arena;
3637
MySwiftClass obj;
3738

3839
@Setup(Level.Trial)
@@ -43,7 +44,13 @@ public void beforeALl() {
4344
// Tune down debug statements so they don't fill up stdout
4445
System.setProperty("jextract.trace.downcalls", "false");
4546

46-
obj = new MySwiftClass(1, 2);
47+
arena = SwiftArena.ofConfined();
48+
obj = new MySwiftClass(arena, 1, 2);
49+
}
50+
51+
@TearDown(Level.Trial)
52+
public void afterAll() {
53+
arena.close();
4754
}
4855
}
4956

Samples/SwiftAndJavaJarSampleLib/src/main/java/com/example/swift/HelloJava2Swift.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ static void examples() {
4747
MySwiftClass obj = new MySwiftClass(arena, 2222, 7777);
4848

4949
// just checking retains/releases work
50-
SwiftKit.retain(obj.$memorySegment());
51-
SwiftKit.release(obj.$memorySegment());
50+
SwiftKit.retain(obj);
51+
SwiftKit.release(obj);
5252

5353
obj.voidMethod();
5454
obj.takeIntMethod(42);

Samples/SwiftAndJavaJarSampleLib/src/test/java/com/example/swift/MySwiftClassTest.java

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

1717
import org.junit.jupiter.api.Disabled;
1818
import org.junit.jupiter.api.Test;
19+
import org.swift.swiftkit.SwiftArena;
1920
import org.swift.swiftkit.SwiftKit;
2021

2122
import java.io.File;
@@ -41,8 +42,8 @@ void checkPaths(Throwable throwable) {
4142

4243
@Test
4344
void test_MySwiftClass_voidMethod() {
44-
try {
45-
MySwiftClass o = new MySwiftClass(12, 42);
45+
try(var arena = SwiftArena.ofConfined()) {
46+
MySwiftClass o = new MySwiftClass(arena, 12, 42);
4647
o.voidMethod();
4748
} catch (Throwable throwable) {
4849
checkPaths(throwable);
@@ -51,17 +52,21 @@ void test_MySwiftClass_voidMethod() {
5152

5253
@Test
5354
void test_MySwiftClass_makeIntMethod() {
54-
MySwiftClass o = new MySwiftClass(12, 42);
55-
var got = o.makeIntMethod();
56-
assertEquals(12, got);
55+
try(var arena = SwiftArena.ofConfined()) {
56+
MySwiftClass o = new MySwiftClass(arena, 12, 42);
57+
var got = o.makeIntMethod();
58+
assertEquals(12, got);
59+
}
5760
}
5861

5962
@Test
6063
@Disabled // TODO: Need var mangled names in interfaces
6164
void test_MySwiftClass_property_len() {
62-
MySwiftClass o = new MySwiftClass(12, 42);
63-
var got = o.getLen();
64-
assertEquals(12, got);
65+
try(var arena = SwiftArena.ofConfined()) {
66+
MySwiftClass o = new MySwiftClass(arena, 12, 42);
67+
var got = o.getLen();
68+
assertEquals(12, got);
69+
}
6570
}
6671

6772
}

Samples/SwiftAndJavaJarSampleLib/src/test/java/org/swift/swiftkit/MySwiftClassTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ void call_retain_retainCount_release() {
2727
var arena = SwiftArena.ofConfined();
2828
var obj = new MySwiftClass(arena, 1, 2);
2929

30-
assertEquals(1, SwiftKit.retainCount(obj.$memorySegment()));
30+
assertEquals(1, SwiftKit.retainCount(obj));
3131
// TODO: test directly on SwiftHeapObject inheriting obj
3232

33-
SwiftKit.retain(obj.$memorySegment());
34-
assertEquals(2, SwiftKit.retainCount(obj.$memorySegment()));
33+
SwiftKit.retain(obj);
34+
assertEquals(2, SwiftKit.retainCount(obj));
3535

36-
SwiftKit.release(obj.$memorySegment());
37-
assertEquals(1, SwiftKit.retainCount(obj.$memorySegment()));
36+
SwiftKit.release(obj);
37+
assertEquals(1, SwiftKit.retainCount(obj));
3838
}
3939
}

Samples/SwiftAndJavaJarSampleLib/src/test/java/org/swift/swiftkit/SwiftArenaTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@ public void arena_releaseClassOnClose_class_ok() {
4141
try (var arena = SwiftArena.ofConfined()) {
4242
var obj = new MySwiftClass(arena,1, 2);
4343

44-
retain(obj.$memorySegment());
45-
assertEquals(2, retainCount(obj.$memorySegment()));
44+
retain(obj);
45+
assertEquals(2, retainCount(obj));
4646

47-
release(obj.$memorySegment());
48-
assertEquals(1, retainCount(obj.$memorySegment()));
47+
release(obj);
48+
assertEquals(1, retainCount(obj));
4949
}
5050

5151
// TODO: should we zero out the $memorySegment perhaps?

Samples/SwiftKitSampleApp/src/main/java/com/example/swift/HelloJava2Swift.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,11 @@ static void examples() {
4545
MySwiftClass obj = new MySwiftClass(arena, 2222, 7777);
4646

4747
// just checking retains/releases work
48-
SwiftKit.retain(obj.$memorySegment());
49-
SwiftKit.release(obj.$memorySegment());
48+
SwiftKit.trace("retainCount = " + SwiftKit.retainCount(obj));
49+
SwiftKit.retain(obj);
50+
SwiftKit.trace("retainCount = " + SwiftKit.retainCount(obj));
51+
SwiftKit.release(obj);
52+
SwiftKit.trace("retainCount = " + SwiftKit.retainCount(obj));
5053

5154
obj.voidMethod();
5255
obj.takeIntMethod(42);

Samples/SwiftKitSampleApp/src/test/java/com/example/swift/MySwiftClassTest.java

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

1717
import org.junit.jupiter.api.Disabled;
1818
import org.junit.jupiter.api.Test;
19+
import org.swift.swiftkit.SwiftArena;
1920
import org.swift.swiftkit.SwiftKit;
2021

2122
import java.io.File;
@@ -40,8 +41,8 @@ void checkPaths(Throwable throwable) {
4041

4142
@Test
4243
void test_MySwiftClass_voidMethod() {
43-
try {
44-
MySwiftClass o = new MySwiftClass(12, 42);
44+
try(var arena = SwiftArena.ofConfined()) {
45+
MySwiftClass o = new MySwiftClass(arena, 12, 42);
4546
o.voidMethod();
4647
} catch (Throwable throwable) {
4748
checkPaths(throwable);
@@ -50,17 +51,21 @@ void test_MySwiftClass_voidMethod() {
5051

5152
@Test
5253
void test_MySwiftClass_makeIntMethod() {
53-
MySwiftClass o = new MySwiftClass(12, 42);
54-
var got = o.makeIntMethod();
55-
assertEquals(12, got);
54+
try(var arena = SwiftArena.ofConfined()) {
55+
MySwiftClass o = new MySwiftClass(arena, 12, 42);
56+
var got = o.makeIntMethod();
57+
assertEquals(12, got);
58+
}
5659
}
5760

5861
@Test
5962
@Disabled // TODO: Need var mangled names in interfaces
6063
void test_MySwiftClass_property_len() {
61-
MySwiftClass o = new MySwiftClass(12, 42);
62-
var got = o.getLen();
63-
assertEquals(12, got);
64+
try(var arena = SwiftArena.ofConfined()) {
65+
MySwiftClass o = new MySwiftClass(arena, 12, 42);
66+
var got = o.getLen();
67+
assertEquals(12, got);
68+
}
6469
}
6570

6671
}

Samples/SwiftKitSampleApp/src/test/java/org/swift/swiftkit/MySwiftClassTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ void call_retain_retainCount_release() {
2727
var arena = SwiftArena.ofConfined();
2828
var obj = new MySwiftClass(arena, 1, 2);
2929

30-
assertEquals(1, SwiftKit.retainCount(obj.$memorySegment()));
30+
assertEquals(1, SwiftKit.retainCount(obj));
3131
// TODO: test directly on SwiftHeapObject inheriting obj
3232

33-
SwiftKit.retain(obj.$memorySegment());
34-
assertEquals(2, SwiftKit.retainCount(obj.$memorySegment()));
33+
SwiftKit.retain(obj);
34+
assertEquals(2, SwiftKit.retainCount(obj));
3535

36-
SwiftKit.release(obj.$memorySegment());
37-
assertEquals(1, SwiftKit.retainCount(obj.$memorySegment()));
36+
SwiftKit.release(obj);
37+
assertEquals(1, SwiftKit.retainCount(obj));
3838
}
3939
}

Samples/SwiftKitSampleApp/src/test/java/org/swift/swiftkit/SwiftArenaTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ public void arena_releaseClassOnClose_class_ok() {
4242
try (var arena = SwiftArena.ofConfined()) {
4343
var obj = new MySwiftClass(arena,1, 2);
4444

45-
retain(obj.$memorySegment());
46-
assertEquals(2, retainCount(obj.$memorySegment()));
45+
retain(obj);
46+
assertEquals(2, retainCount(obj));
4747

48-
release(obj.$memorySegment());
49-
assertEquals(1, retainCount(obj.$memorySegment()));
48+
release(obj);
49+
assertEquals(1, retainCount(obj));
5050
}
5151
}
5252

Sources/JExtractSwift/Swift2JavaTranslator+Printing.swift

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -432,19 +432,6 @@ extension Swift2JavaTranslator {
432432
) {
433433
let descClassIdentifier = renderDescClassName(decl)
434434

435-
printer.print(
436-
"""
437-
/**
438-
* Create an instance of {@code \(parentName.unqualifiedJavaTypeName)}.
439-
*
440-
\(decl.renderCommentSnippet ?? " *")
441-
*/
442-
public \(parentName.unqualifiedJavaTypeName)(\(renderJavaParamDecls(decl, paramPassingStyle: .wrapper))) {
443-
this(SwiftArena.ofAuto(), \(renderForwardJavaParams(decl, paramPassingStyle: .wrapper)));
444-
}
445-
"""
446-
)
447-
448435
printer.print(
449436
"""
450437
/**

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

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,6 @@ public SwiftAnyType(MemorySegment memorySegment) {
3434
this.memorySegment = memorySegment.asReadOnly();
3535
}
3636

37-
// public SwiftAnyType(SwiftHeapObject object) {
38-
// if (object.$layout().name().isEmpty()) {
39-
// throw new IllegalArgumentException("SwiftHeapObject must have a mangled name in order to obtain its SwiftType.");
40-
// }
41-
//
42-
// String mangledName = object.$layout().name().get();
43-
// var type = SwiftKit.getTypeByMangledNameInEnvironment(mangledName);
44-
// if (type.isEmpty()) {
45-
// throw new IllegalArgumentException("A Swift Any.Type cannot be null!");
46-
// }
47-
// this.memorySegment = type.get().memorySegment;
48-
// }
49-
50-
5137
public MemorySegment $memorySegment() {
5238
return memorySegment;
5339
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -266,8 +266,8 @@ public static void release(MemorySegment object) {
266266
}
267267
}
268268

269-
public static long release(SwiftHeapObject object) {
270-
return retainCount(object.$instance());
269+
public static void release(SwiftHeapObject object) {
270+
release(object.$instance());
271271
}
272272

273273
// ==== ------------------------------------------------------------------------------------------------------------

Tests/JExtractSwiftTests/MethodImportTests.swift

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -415,16 +415,6 @@ final class MethodImportTests {
415415
output,
416416
expected:
417417
"""
418-
/**
419-
* Create an instance of {@code MySwiftClass}.
420-
*
421-
* {@snippet lang=swift :
422-
* public init(len: Swift.Int, cap: Swift.Int)
423-
* }
424-
*/
425-
public MySwiftClass(long len, long cap) {
426-
this(SwiftArena.ofAuto(), len, cap);
427-
}
428418
/**
429419
* Create an instance of {@code MySwiftClass}.
430420
* This instance is managed by the passed in {@link SwiftArena} and may not outlive the arena's lifetime.
@@ -477,16 +467,6 @@ final class MethodImportTests {
477467
output,
478468
expected:
479469
"""
480-
/**
481-
* Create an instance of {@code MySwiftStruct}.
482-
*
483-
* {@snippet lang=swift :
484-
* public init(len: Swift.Int, cap: Swift.Int)
485-
* }
486-
*/
487-
public MySwiftStruct(long len, long cap) {
488-
this(SwiftArena.ofAuto(), len, cap);
489-
}
490470
/**
491471
* Create an instance of {@code MySwiftStruct}.
492472
* This instance is managed by the passed in {@link SwiftArena} and may not outlive the arena's lifetime.

0 commit comments

Comments
 (0)