| author | Stephen Paul Weber
<singpolyma@singpolyma.net> 2024-04-18 02:31:24 UTC |
| committer | Stephen Paul Weber
<singpolyma@singpolyma.net> 2024-04-18 02:31:24 UTC |
| parent | 570fd1c8f57104060653fd04e6e47e007ef9d65b |
| HaxeSwiftBridge.hx | +14 | -3 |
diff --git a/HaxeSwiftBridge.hx b/HaxeSwiftBridge.hx index 26a2ea7..93cddc7 100644 --- a/HaxeSwiftBridge.hx +++ b/HaxeSwiftBridge.hx @@ -187,17 +187,22 @@ class HaxeSwiftBridge { case TInst(_.get().name => "String", params): return "useString(" + item + ")" + (canNull ? "" : "!"); case TInst(_.get().name => "Array", [param]): + final ptrType = switch getSwiftType(param) { + case "String": "UnsafePointer<CChar>?"; + case "Int16": "Int16"; + default: "UnsafeMutableRawPointer?"; + } if (isRet) { return "{" + - "var __ret: UnsafeMutablePointer<UnsafeMutableRawPointer?>? = nil;" + + "var __ret: UnsafeMutablePointer<" + ptrType + ">? = nil;" + "let __ret_length = " + ~/\)$/.replace(item, ", &__ret);") + "return " + castToSwift("__ret", type, canNull, false) + ";" + "}()"; } else { return "{" + - "let __r = UnsafeMutableBufferPointer<UnsafeMutableRawPointer?>(start: " + item + ", count: " + item + "_length).map({" + + "let __r = UnsafeMutableBufferPointer<" + ptrType + ">(start: " + item + ", count: " + item + "_length).map({" + castToSwift("$0", param) + "});" + "c_" + libName + "." + libName + "_release(" + item + ");" + @@ -228,7 +233,9 @@ class HaxeSwiftBridge { return switch type { case TInst(_.get().name => "String", params): return item; - case TInst(_.get().name => "Array", params): + case TInst(_.get().name => "Array", [TInst(_)]): + return item + ".map { $0.o }"; + case TInst(_.get().name => "Array", [param]): return item; case TInst(_.get() => t, []): return item + (canNull ? "?" : "") + ".o"; @@ -440,6 +447,10 @@ class HaxeSwiftBridge { ibuilder.add("\n\t\t\t},\n\t\t\t__"); ibuilder.add(arg.name); ibuilder.add("_ptr"); + case TInst(_.get().name => "Array", [param]): + ibuilder.add(castToC(arg.name, arg.t)); + ibuilder.add(", "); + ibuilder.add(arg.name + ".count"); default: ibuilder.add(castToC(arg.name, arg.t)); }