@@ -221,11 +221,9 @@ class ExportSwift {
221221 return nil
222222 }
223223 guard let typeDecl = typeDeclResolver. lookupType ( for: identifier) else {
224- print ( " Failed to lookup type \( type. trimmedDescription) : not found in typeDeclResolver " )
225224 return nil
226225 }
227226 guard typeDecl. is ( ClassDeclSyntax . self) || typeDecl. is ( ActorDeclSyntax . self) else {
228- print ( " Failed to lookup type \( type. trimmedDescription) : is not a class or actor " )
229227 return nil
230228 }
231229 return . swiftHeapObject( typeDecl. name. text)
@@ -237,10 +235,16 @@ class ExportSwift {
237235 //
238236 // To update this file, just rebuild your project or run
239237 // `swift package bridge-js`.
238+
239+ @_spi(JSObject_id) import JavaScriptKit
240+
240241 @_extern(wasm, module: " bjs " , name: " return_string " )
241242 private func _return_string(_ ptr: UnsafePointer<UInt8>?, _ len: Int32)
242243 @_extern(wasm, module: " bjs " , name: " init_memory " )
243244 private func _init_memory(_ sourceId: Int32, _ ptr: UnsafeMutablePointer<UInt8>?)
245+
246+ @_extern(wasm, module: " bjs " , name: " swift_js_retain " )
247+ private func _swift_js_retain(_ ptr: Int32) -> Int32
244248 """
245249
246250 func renderSwiftGlue( ) -> String ? {
@@ -317,11 +321,19 @@ class ExportSwift {
317321 )
318322 abiParameterSignatures. append ( ( bytesLabel, . i32) )
319323 abiParameterSignatures. append ( ( lengthLabel, . i32) )
320- case . jsObject:
324+ case . jsObject( nil ) :
321325 abiParameterForwardings. append (
322326 LabeledExprSyntax (
323327 label: param. label,
324- expression: ExprSyntax ( " \( raw: param. name) " )
328+ expression: ExprSyntax ( " JSObject(id: UInt32(bitPattern: \( raw: param. name) )) " )
329+ )
330+ )
331+ abiParameterSignatures. append ( ( param. name, . i32) )
332+ case . jsObject( let name) :
333+ abiParameterForwardings. append (
334+ LabeledExprSyntax (
335+ label: param. label,
336+ expression: ExprSyntax ( " \( raw: name) (takingThis: UInt32(bitPattern: \( raw: param. name) )) " )
325337 )
326338 )
327339 abiParameterSignatures. append ( ( param. name, . i32) )
@@ -404,10 +416,16 @@ class ExportSwift {
404416 }
405417 """
406418 )
407- case . jsObject:
419+ case . jsObject( nil ) :
420+ body. append (
421+ """
422+ return _swift_js_retain(Int32(bitPattern: ret.id))
423+ """
424+ )
425+ case . jsObject( _? ) :
408426 body. append (
409427 """
410- return ret.id
428+ return _swift_js_retain(Int32(bitPattern: ret.this.id))
411429 """
412430 )
413431 case . swiftHeapObject:
@@ -566,6 +584,8 @@ extension BridgeType {
566584 self = . bool
567585 case " Void " :
568586 self = . void
587+ case " JSObject " :
588+ self = . jsObject( nil )
569589 default :
570590 return nil
571591 }
0 commit comments