Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@

package org.swift.swiftkit.ffm;

import com.example.swift.Data;
import com.example.swift.MySwiftLibrary;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.infra.Blackhole;
import org.swift.swiftkit.ffm.foundation.Data;

import java.lang.foreign.MemorySegment;
import java.lang.foreign.ValueLayout;
Expand Down Expand Up @@ -79,7 +79,7 @@ public ByteBuffer ffm_data_withUnsafeBytes_asByteBuffer() {
});
return buf.value;
}

@Benchmark
public byte[] ffm_data_withUnsafeBytes_toArray() {
Holder<byte[]> buf = new Holder<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.swift.swiftkit.core.SwiftLibraries;
import org.swift.swiftkit.ffm.AllocatingSwiftArena;
import org.swift.swiftkit.ffm.SwiftRuntime;
import org.swift.swiftkit.ffm.foundation.Data;

import java.util.Optional;
import java.util.OptionalLong;
Expand Down Expand Up @@ -85,7 +86,7 @@ static void examples() {
var origBytes = arena.allocateFrom("foobar");
var origDat = Data.init(origBytes, origBytes.byteSize(), arena);
CallTraces.trace("origDat.count = " + origDat.getCount());

var retDat = MySwiftLibrary.globalReceiveReturnData(origDat, arena);
retDat.withUnsafeBytes((retBytes) -> {
var str = retBytes.getString(0);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import org.junit.jupiter.api.Test;
import org.swift.swiftkit.ffm.AllocatingSwiftArena;
import org.swift.swiftkit.ffm.foundation.Data;

import java.lang.foreign.ValueLayout;

Expand Down Expand Up @@ -134,7 +135,7 @@ void test_Data_toByteBuffer_emptyData() {
byte[] original = new byte[0];
var data = Data.fromByteArray(original, arena);
var buffer = data.toByteBuffer(arena);

assertEquals(0, buffer.capacity());
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import org.junit.jupiter.api.Test;
import org.swift.swiftkit.ffm.AllocatingSwiftArena;
import org.swift.swiftkit.ffm.foundation.Data;

import java.util.Optional;
import java.util.OptionalLong;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.openjdk.jmh.infra.Blackhole;
import org.swift.swiftkit.core.ClosableSwiftArena;
import org.swift.swiftkit.core.SwiftArena;
import org.swift.swiftkit.core.foundation.Data;

import java.util.concurrent.TimeUnit;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import org.junit.jupiter.api.Test;
import org.swift.swiftkit.core.SwiftArena;
import org.swift.swiftkit.core.foundation.Data;

import static org.junit.jupiter.api.Assertions.*;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import org.junit.jupiter.api.Test;
import org.swift.swiftkit.core.SwiftArena;
import org.swift.swiftkit.core.foundation.Date;

import java.time.Instant;
import java.time.temporal.ChronoUnit;
Expand Down Expand Up @@ -59,4 +60,4 @@ void date_timeIntervalSince1970() {
assertEquals(1000, date.getTimeIntervalSince1970());
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@

package com.example.swift;

import com.example.swift.MySwiftLibrary;
import org.junit.jupiter.api.Test;
import org.swift.swiftkit.core.SwiftArena;
import org.swift.swiftkit.core.foundation.Data;
import org.swift.swiftkit.core.foundation.Date;

import java.time.Instant;
import java.util.Optional;
Expand Down Expand Up @@ -143,4 +144,4 @@ void optionalThrows() {
assertEquals("swiftError", exception.getMessage());
}
}
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -456,6 +456,8 @@ extension FFMSwift2JavaGenerator {
let arena =
if let className = type.className,
analysis.importedTypes[className] != nil
|| type == .swiftkitFFMFoundationData
|| type == .swiftkitFFMFoundationDataProtocol
{
// Use passed-in 'SwiftArena' for 'SwiftValue'.
"swiftArena"
Expand Down Expand Up @@ -619,7 +621,9 @@ extension FFMSwift2JavaGenerator {
func renderMemoryLayoutValue(for javaType: JavaType) -> String {
if let layout = ForeignValueLayout(javaType: javaType) {
return layout.description
} else if case .class(package: _, name: let customClass, _) = javaType {
} else if case .class(.some(let package), name: let customClass, _) = javaType {
return ForeignValueLayout(customType: "\(package).\(customClass)").description
} else if case .class(.none, name: let customClass, _) = javaType {
return ForeignValueLayout(customType: customClass).description
} else {
fatalError("renderMemoryLayoutValue not supported for \(javaType)")
Expand Down Expand Up @@ -776,7 +780,7 @@ extension FFMSwift2JavaGenerator.JavaConversionStep {

case .wrapMemoryAddressUnsafe(let inner, let javaType):
let inner = inner.render(&printer, placeholder, placeholderForDowncall: placeholderForDowncall)
return "\(javaType.className!).wrapMemoryAddressUnsafe(\(inner), swiftArena)"
return "\(javaType).wrapMemoryAddressUnsafe(\(inner), swiftArena)"

case .construct(let inner, let javaType):
let inner = inner.render(&printer, placeholder, placeholderForDowncall: placeholderForDowncall)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -464,7 +464,15 @@ extension FFMSwift2JavaGenerator {
)

case .foundationData, .essentialsData:
break
return TranslatedParameter(
javaParameters: [
JavaParameter(
name: parameterName,
type: .swiftkitFFMFoundationData
)
],
conversion: .swiftValueSelfSegment(.placeholder)
)

case .swiftJavaError:
// SwiftJavaError is a class — treat as arbitrary nominal type below
Expand Down Expand Up @@ -635,10 +643,26 @@ extension FFMSwift2JavaGenerator {
case .nominal(let nominal):
if let knownType = nominal.nominalTypeDecl.knownTypeKind {
switch knownType {
case .foundationData, .foundationDataProtocol:
break
case .essentialsData, .essentialsDataProtocol:
break
case .foundationData, .essentialsData:
return TranslatedParameter(
javaParameters: [
JavaParameter(
name: parameterName,
type: .optional(.swiftkitFFMFoundationData)
)
],
conversion: .call(.placeholder, function: "SwiftRuntime.toOptionalSegmentInstance", withArena: false)
)
case .foundationDataProtocol, .essentialsDataProtocol:
return TranslatedParameter(
javaParameters: [
JavaParameter(
name: parameterName,
type: .optional(.swiftkitFFMFoundationDataProtocol)
)
],
conversion: .call(.placeholder, function: "SwiftRuntime.toOptionalSegmentInstance", withArena: false)
)
default:
throw JavaTranslationError.unhandledType(known: .optional(swiftType))
}
Expand All @@ -647,7 +671,7 @@ extension FFMSwift2JavaGenerator {
let translatedTy = try self.translate(swiftType: swiftType)
return TranslatedParameter(
javaParameters: [
JavaParameter(name: parameterName, type: JavaType(className: "Optional<\(translatedTy.description)>"))
JavaParameter(name: parameterName, type: .optional(translatedTy))
],
conversion: .call(.placeholder, function: "SwiftRuntime.toOptionalSegmentInstance", withArena: false)
)
Expand Down Expand Up @@ -750,7 +774,15 @@ extension FFMSwift2JavaGenerator {
)

case .foundationData, .essentialsData:
break // Implemented as wrapper
let javaType: JavaType = .swiftkitFFMFoundationData
return TranslatedResult(
javaResultType: javaType,
annotations: resultAnnotations,
outParameters: [
JavaParameter(name: "", type: javaType)
],
conversion: .wrapMemoryAddressUnsafe(.placeholder, javaType)
)

case .unsafePointer, .unsafeMutablePointer:
// FIXME: Implement
Expand Down
Loading
Loading