diff --git a/Plugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift b/Plugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift index 4280b266..6e5c1714 100644 --- a/Plugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift +++ b/Plugins/BridgeJS/Sources/BridgeJSCore/ExportSwift.swift @@ -395,6 +395,17 @@ public class ExportSwift { } } + var swiftCallName: String { + switch self { + case .enumStatic(let enumDef): + return enumDef.swiftCallName + case .classStatic(let klass), .classInstance(let klass): + return klass.swiftCallName + case .structStatic(let structDef): + return structDef.swiftCallName + } + } + func callName(for property: ExportedProperty) -> String { switch self { case .enumStatic(let enumDef): @@ -423,7 +434,7 @@ public class ExportSwift { if !isStatic { try getterBuilder.liftParameter( - param: Parameter(label: nil, name: "_self", type: .swiftHeapObject(className)) + param: Parameter(label: nil, name: "_self", type: .swiftHeapObject(context.swiftCallName)) ) } @@ -446,7 +457,7 @@ public class ExportSwift { if !isStatic { // Instance properties need _self parameter try setterBuilder.liftParameter( - param: Parameter(label: nil, name: "_self", type: .swiftHeapObject(className)) + param: Parameter(label: nil, name: "_self", type: .swiftHeapObject(context.swiftCallName)) ) } diff --git a/Plugins/BridgeJS/Tests/BridgeJSToolTests/Inputs/MacroSwift/EnumNamespace.swift b/Plugins/BridgeJS/Tests/BridgeJSToolTests/Inputs/MacroSwift/EnumNamespace.swift index dbf04483..218cd4ca 100644 --- a/Plugins/BridgeJS/Tests/BridgeJSToolTests/Inputs/MacroSwift/EnumNamespace.swift +++ b/Plugins/BridgeJS/Tests/BridgeJSToolTests/Inputs/MacroSwift/EnumNamespace.swift @@ -2,7 +2,11 @@ @JS enum Utils { @JS class Converter { - @JS init() {} + @JS var precision: Int + + @JS init() { + self.precision = 2 + } @JS func toString(value: Int) -> String { return String(value) diff --git a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumNamespace.Global.json b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumNamespace.Global.json index 65b8ba35..f26bd304 100644 --- a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumNamespace.Global.json +++ b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumNamespace.Global.json @@ -48,7 +48,19 @@ "Utils" ], "properties" : [ + { + "isReadonly" : false, + "isStatic" : false, + "name" : "precision", + "namespace" : [ + "Utils" + ], + "type" : { + "int" : { + } + } + } ], "swiftCallName" : "Utils.Converter" }, diff --git a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumNamespace.Global.swift b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumNamespace.Global.swift index 47d1ff60..f3d673a0 100644 --- a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumNamespace.Global.swift +++ b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumNamespace.Global.swift @@ -151,6 +151,27 @@ public func _bjs_Converter_toString(_ _self: UnsafeMutableRawPointer, _ value: I #endif } +@_expose(wasm, "bjs_Converter_precision_get") +@_cdecl("bjs_Converter_precision_get") +public func _bjs_Converter_precision_get(_ _self: UnsafeMutableRawPointer) -> Int32 { + #if arch(wasm32) + let ret = Utils.Converter.bridgeJSLiftParameter(_self).precision + return ret.bridgeJSLowerReturn() + #else + fatalError("Only available on WebAssembly") + #endif +} + +@_expose(wasm, "bjs_Converter_precision_set") +@_cdecl("bjs_Converter_precision_set") +public func _bjs_Converter_precision_set(_ _self: UnsafeMutableRawPointer, _ value: Int32) -> Void { + #if arch(wasm32) + Utils.Converter.bridgeJSLiftParameter(_self).precision = Int.bridgeJSLiftParameter(value) + #else + fatalError("Only available on WebAssembly") + #endif +} + @_expose(wasm, "bjs_Converter_deinit") @_cdecl("bjs_Converter_deinit") public func _bjs_Converter_deinit(_ pointer: UnsafeMutableRawPointer) -> Void { diff --git a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumNamespace.json b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumNamespace.json index 9b800c74..a4ba27b8 100644 --- a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumNamespace.json +++ b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumNamespace.json @@ -48,7 +48,19 @@ "Utils" ], "properties" : [ + { + "isReadonly" : false, + "isStatic" : false, + "name" : "precision", + "namespace" : [ + "Utils" + ], + "type" : { + "int" : { + } + } + } ], "swiftCallName" : "Utils.Converter" }, diff --git a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumNamespace.swift b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumNamespace.swift index 47d1ff60..f3d673a0 100644 --- a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumNamespace.swift +++ b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSCodegenTests/EnumNamespace.swift @@ -151,6 +151,27 @@ public func _bjs_Converter_toString(_ _self: UnsafeMutableRawPointer, _ value: I #endif } +@_expose(wasm, "bjs_Converter_precision_get") +@_cdecl("bjs_Converter_precision_get") +public func _bjs_Converter_precision_get(_ _self: UnsafeMutableRawPointer) -> Int32 { + #if arch(wasm32) + let ret = Utils.Converter.bridgeJSLiftParameter(_self).precision + return ret.bridgeJSLowerReturn() + #else + fatalError("Only available on WebAssembly") + #endif +} + +@_expose(wasm, "bjs_Converter_precision_set") +@_cdecl("bjs_Converter_precision_set") +public func _bjs_Converter_precision_set(_ _self: UnsafeMutableRawPointer, _ value: Int32) -> Void { + #if arch(wasm32) + Utils.Converter.bridgeJSLiftParameter(_self).precision = Int.bridgeJSLiftParameter(value) + #else + fatalError("Only available on WebAssembly") + #endif +} + @_expose(wasm, "bjs_Converter_deinit") @_cdecl("bjs_Converter_deinit") public func _bjs_Converter_deinit(_ pointer: UnsafeMutableRawPointer) -> Void { diff --git a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.Global.d.ts b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.Global.d.ts index be77e759..17ac74a8 100644 --- a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.Global.d.ts +++ b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.Global.d.ts @@ -84,6 +84,7 @@ export interface SwiftHeapObject { } export interface Converter extends SwiftHeapObject { toString(value: number): string; + precision: number; } export interface HTTPServer extends SwiftHeapObject { call(method: Networking.API.MethodTag): void; diff --git a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.Global.js b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.Global.js index ca44d238..f3903134 100644 --- a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.Global.js +++ b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.Global.js @@ -300,6 +300,13 @@ export async function createInstantiator(options, swift) { tmpRetString = undefined; return ret; } + get precision() { + const ret = instance.exports.bjs_Converter_precision_get(this.pointer); + return ret; + } + set precision(value) { + instance.exports.bjs_Converter_precision_set(this.pointer, value); + } } class HTTPServer extends SwiftHeapObject { static __construct(ptr) { diff --git a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.d.ts b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.d.ts index a6934d6e..bc8e1601 100644 --- a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.d.ts +++ b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.d.ts @@ -56,6 +56,7 @@ export interface SwiftHeapObject { } export interface Converter extends SwiftHeapObject { toString(value: number): string; + precision: number; } export interface HTTPServer extends SwiftHeapObject { call(method: Networking.API.MethodTag): void; diff --git a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.js b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.js index 8484951f..effa7fee 100644 --- a/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.js +++ b/Plugins/BridgeJS/Tests/BridgeJSToolTests/__Snapshots__/BridgeJSLinkTests/EnumNamespace.js @@ -281,6 +281,13 @@ export async function createInstantiator(options, swift) { tmpRetString = undefined; return ret; } + get precision() { + const ret = instance.exports.bjs_Converter_precision_get(this.pointer); + return ret; + } + set precision(value) { + instance.exports.bjs_Converter_precision_set(this.pointer, value); + } } class HTTPServer extends SwiftHeapObject { static __construct(ptr) { diff --git a/Tests/BridgeJSRuntimeTests/ExportAPITests.swift b/Tests/BridgeJSRuntimeTests/ExportAPITests.swift index 26f587fa..bc77cb34 100644 --- a/Tests/BridgeJSRuntimeTests/ExportAPITests.swift +++ b/Tests/BridgeJSRuntimeTests/ExportAPITests.swift @@ -313,7 +313,11 @@ struct TestError: Error { @JS enum Utils { @JS class Converter { - @JS init() {} + @JS var precision: Int + + @JS init() { + self.precision = 2 + } @JS func toString(value: Int) -> String { return String(value) diff --git a/Tests/BridgeJSRuntimeTests/Generated/BridgeJS.swift b/Tests/BridgeJSRuntimeTests/Generated/BridgeJS.swift index 6a7ce73c..47d3ca6a 100644 --- a/Tests/BridgeJSRuntimeTests/Generated/BridgeJS.swift +++ b/Tests/BridgeJSRuntimeTests/Generated/BridgeJS.swift @@ -6947,6 +6947,27 @@ public func _bjs_Converter_toString(_ _self: UnsafeMutableRawPointer, _ value: I #endif } +@_expose(wasm, "bjs_Converter_precision_get") +@_cdecl("bjs_Converter_precision_get") +public func _bjs_Converter_precision_get(_ _self: UnsafeMutableRawPointer) -> Int32 { + #if arch(wasm32) + let ret = Utils.Converter.bridgeJSLiftParameter(_self).precision + return ret.bridgeJSLowerReturn() + #else + fatalError("Only available on WebAssembly") + #endif +} + +@_expose(wasm, "bjs_Converter_precision_set") +@_cdecl("bjs_Converter_precision_set") +public func _bjs_Converter_precision_set(_ _self: UnsafeMutableRawPointer, _ value: Int32) -> Void { + #if arch(wasm32) + Utils.Converter.bridgeJSLiftParameter(_self).precision = Int.bridgeJSLiftParameter(value) + #else + fatalError("Only available on WebAssembly") + #endif +} + @_expose(wasm, "bjs_Converter_deinit") @_cdecl("bjs_Converter_deinit") public func _bjs_Converter_deinit(_ pointer: UnsafeMutableRawPointer) -> Void { diff --git a/Tests/BridgeJSRuntimeTests/Generated/JavaScript/BridgeJS.json b/Tests/BridgeJSRuntimeTests/Generated/JavaScript/BridgeJS.json index 4b33632b..313add01 100644 --- a/Tests/BridgeJSRuntimeTests/Generated/JavaScript/BridgeJS.json +++ b/Tests/BridgeJSRuntimeTests/Generated/JavaScript/BridgeJS.json @@ -714,7 +714,19 @@ "Utils" ], "properties" : [ + { + "isReadonly" : false, + "isStatic" : false, + "name" : "precision", + "namespace" : [ + "Utils" + ], + "type" : { + "int" : { + } + } + } ], "swiftCallName" : "Utils.Converter" }, diff --git a/Tests/prelude.mjs b/Tests/prelude.mjs index 4242d8bd..d2b62a11 100644 --- a/Tests/prelude.mjs +++ b/Tests/prelude.mjs @@ -607,6 +607,9 @@ function BridgeJSRuntimeTests_runJsWorks(instance, exports) { assert.equal(exports.roundtripInternalSupportedMethod(exports.Networking.APIV2.Internal.SupportedMethod.Get), exports.Networking.APIV2.Internal.SupportedMethod.Get); const converter = new exports.Utils.Converter(); + assert.equal(converter.precision, 2); + converter.precision = 5; + assert.equal(converter.precision, 5); assert.equal(converter.toString(42), "42"); assert.equal(converter.toString(123), "123"); converter.release();