@@ -43,6 +43,10 @@ struct BridgeJSLink {
43
43
let swiftHeapObjectClassJs = """
44
44
/// Represents a Swift heap object like a class instance or an actor instance.
45
45
class SwiftHeapObject {
46
+ static __construct(ptr, deinit) {
47
+ return new SwiftHeapObject(ptr, deinit);
48
+ }
49
+
46
50
constructor(pointer, deinit) {
47
51
this.pointer = pointer;
48
52
this.hasReleased = false;
@@ -401,7 +405,7 @@ struct BridgeJSLink {
401
405
bodyLines. append ( " swift.memory.release(retId); " )
402
406
returnExpr = " ret "
403
407
case . swiftHeapObject( let name) :
404
- bodyLines. append ( " const ret = new \( name) ( \( call) ); " )
408
+ bodyLines. append ( " const ret = \( name) .__construct (\( call) ); " )
405
409
returnExpr = " ret "
406
410
}
407
411
return returnExpr
@@ -490,17 +494,25 @@ struct BridgeJSLink {
490
494
thunkBuilder. lowerParameter ( param: param)
491
495
}
492
496
var funcLines : [ String ] = [ ]
493
- funcLines. append ( " constructor( \( constructor. parameters. map { $0. name } . joined ( separator: " , " ) ) ) { " )
497
+ funcLines. append ( " static __construct(ptr) { " )
498
+ funcLines. append ( " return new \( klass. name) (ptr, instance.exports.bjs_ \( klass. name) _deinit); " . indent ( count: 4 ) )
499
+ funcLines. append ( " } " )
500
+ funcLines. append ( " " )
501
+ funcLines. append ( " constructor(pointer, deinit) { " )
502
+ funcLines. append ( " super(pointer, deinit); " . indent ( count: 4 ) )
503
+ funcLines. append ( " } " )
504
+ funcLines. append ( " " )
505
+ funcLines. append ( " static init( \( constructor. parameters. map { $0. name } . joined ( separator: " , " ) ) ) { " )
494
506
let returnExpr = thunkBuilder. callConstructor ( abiName: constructor. abiName)
495
507
funcLines. append ( contentsOf: thunkBuilder. bodyLines. map { $0. indent ( count: 4 ) } )
496
508
funcLines. append ( contentsOf: thunkBuilder. cleanupLines. map { $0. indent ( count: 4 ) } )
497
509
funcLines. append ( contentsOf: thunkBuilder. checkExceptionLines ( ) . map { $0. indent ( count: 4 ) } )
498
- funcLines. append ( " super( \( returnExpr ) , instance.exports.bjs_ \( klass. name) _deinit );" . indent ( count: 4 ) )
510
+ funcLines. append ( " return \( klass. name) .__construct( \( returnExpr ) ); " . indent ( count: 4 ) )
499
511
funcLines. append ( " } " )
500
512
jsLines. append ( contentsOf: funcLines. map { $0. indent ( count: 4 ) } )
501
513
502
514
dtsExportEntryLines. append (
503
- " new \( renderTSSignature ( parameters: constructor. parameters, returnType: . swiftHeapObject( klass. name) ) ) ; "
515
+ " init \( renderTSSignature ( parameters: constructor. parameters, returnType: . swiftHeapObject( klass. name) ) ) ; "
504
516
. indent ( count: 4 )
505
517
)
506
518
}
0 commit comments