@@ -60,18 +60,16 @@ export async function createInstantiator(options, swift) {
6060 const js = swift . memory . heap ;
6161 /// Represents a Swift heap object like a class instance or an actor instance.
6262 class SwiftHeapObject {
63- static __construct ( ptr , deinit ) {
64- return new SwiftHeapObject ( ptr , deinit ) ;
65- }
66-
67- constructor ( pointer , deinit ) {
68- this . pointer = pointer ;
69- this . hasReleased = false ;
70- this . deinit = deinit ;
71- this . registry = new FinalizationRegistry ( ( pointer ) => {
63+ static __wrap ( pointer , deinit , prototype ) {
64+ const obj = Object . create ( prototype ) ;
65+ obj . pointer = pointer ;
66+ obj . hasReleased = false ;
67+ obj . deinit = deinit ;
68+ obj . registry = new FinalizationRegistry ( ( pointer ) => {
7269 deinit ( pointer ) ;
7370 } ) ;
74- this . registry . register ( this , this . pointer ) ;
71+ obj . registry . register ( this , obj . pointer ) ;
72+ return obj ;
7573 }
7674
7775 release ( ) {
@@ -81,14 +79,11 @@ export async function createInstantiator(options, swift) {
8179 }
8280 class Greeter extends SwiftHeapObject {
8381 static __construct ( ptr ) {
84- return new Greeter ( ptr , instance . exports . bjs_Greeter_deinit ) ;
82+ return SwiftHeapObject . __wrap ( ptr , instance . exports . bjs_Greeter_deinit , Greeter . prototype ) ;
8583 }
8684
87- constructor ( pointer , deinit ) {
88- super ( pointer , deinit ) ;
89- }
9085
91- static init ( name ) {
86+ constructor ( name ) {
9287 const nameBytes = textEncoder . encode ( name ) ;
9388 const nameId = swift . memory . retain ( nameBytes ) ;
9489 const ret = instance . exports . bjs_Greeter_init ( nameId , nameBytes . length ) ;
@@ -104,14 +99,11 @@ export async function createInstantiator(options, swift) {
10499 }
105100 class Converter extends SwiftHeapObject {
106101 static __construct ( ptr ) {
107- return new Converter ( ptr , instance . exports . bjs_Converter_deinit ) ;
102+ return SwiftHeapObject . __wrap ( ptr , instance . exports . bjs_Converter_deinit , Converter . prototype ) ;
108103 }
109104
110- constructor ( pointer , deinit ) {
111- super ( pointer , deinit ) ;
112- }
113105
114- static init ( ) {
106+ constructor ( ) {
115107 const ret = instance . exports . bjs_Converter_init ( ) ;
116108 return Converter . __construct ( ret ) ;
117109 }
@@ -124,12 +116,9 @@ export async function createInstantiator(options, swift) {
124116 }
125117 class UUID extends SwiftHeapObject {
126118 static __construct ( ptr ) {
127- return new UUID ( ptr , instance . exports . bjs_UUID_deinit ) ;
119+ return SwiftHeapObject . __wrap ( ptr , instance . exports . bjs_UUID_deinit , UUID . prototype ) ;
128120 }
129121
130- constructor ( pointer , deinit ) {
131- super ( pointer , deinit ) ;
132- }
133122 uuidString ( ) {
134123 instance . exports . bjs_UUID_uuidString ( this . pointer ) ;
135124 const ret = tmpRetString ;
0 commit comments