@@ -117,7 +117,7 @@ class SwiftRuntimeHeap {
117
117
export class SwiftRuntime {
118
118
private instance : WebAssembly . Instance | null ;
119
119
private heap : SwiftRuntimeHeap
120
- private version : number = 610
120
+ private version : number = 611
121
121
122
122
constructor ( ) {
123
123
this . instance = null ;
@@ -163,9 +163,8 @@ export class SwiftRuntime {
163
163
const textDecoder = new TextDecoder ( 'utf-8' ) ;
164
164
const textEncoder = new TextEncoder ( ) ; // Only support utf-8
165
165
166
- const readString = ( ptr : pointer , len : number ) => {
167
- const uint8Memory = new Uint8Array ( memory ( ) . buffer ) ;
168
- return textDecoder . decode ( uint8Memory . subarray ( ptr , ptr + len ) ) ;
166
+ const readString = ( ref : ref ) => {
167
+ return this . heap . referenceHeap ( ref ) ;
169
168
}
170
169
171
170
const writeString = ( ptr : pointer , bytes : Uint8Array ) => {
@@ -217,7 +216,7 @@ export class SwiftRuntime {
217
216
return payload3 ;
218
217
}
219
218
case JavaScriptValueKind . String : {
220
- return readString ( payload1 , payload2 )
219
+ return readString ( payload1 ) ;
221
220
}
222
221
case JavaScriptValueKind . Object : {
223
222
return this . heap . referenceHeap ( payload1 )
@@ -261,10 +260,9 @@ export class SwiftRuntime {
261
260
break ;
262
261
}
263
262
case "string" : {
264
- const bytes = textEncoder . encode ( value ) ;
265
263
writeUint32 ( kind_ptr , JavaScriptValueKind . String ) ;
266
- writeUint32 ( payload1_ptr , this . heap . retain ( bytes ) ) ;
267
- writeUint32 ( payload2_ptr , bytes . length ) ;
264
+ writeUint32 ( payload1_ptr , this . heap . retain ( value ) ) ;
265
+ writeUint32 ( payload2_ptr , 0 ) ;
268
266
break ;
269
267
}
270
268
case "undefined" : {
@@ -308,20 +306,20 @@ export class SwiftRuntime {
308
306
309
307
return {
310
308
swjs_set_prop : (
311
- ref : ref , name : pointer , length : number ,
309
+ ref : ref , name : ref ,
312
310
kind : JavaScriptValueKind ,
313
311
payload1 : number , payload2 : number , payload3 : number
314
312
) => {
315
313
const obj = this . heap . referenceHeap ( ref ) ;
316
- Reflect . set ( obj , readString ( name , length ) , decodeValue ( kind , payload1 , payload2 , payload3 ) )
314
+ Reflect . set ( obj , readString ( name ) , decodeValue ( kind , payload1 , payload2 , payload3 ) )
317
315
} ,
318
316
swjs_get_prop : (
319
- ref : ref , name : pointer , length : number ,
317
+ ref : ref , name : ref ,
320
318
kind_ptr : pointer ,
321
319
payload1_ptr : pointer , payload2_ptr : pointer , payload3_ptr : number
322
320
) => {
323
321
const obj = this . heap . referenceHeap ( ref ) ;
324
- const result = Reflect . get ( obj , readString ( name , length ) ) ;
322
+ const result = Reflect . get ( obj , readString ( name ) ) ;
325
323
writeValue ( result , kind_ptr , payload1_ptr , payload2_ptr , payload3_ptr ) ;
326
324
} ,
327
325
swjs_set_subscript : (
@@ -341,6 +339,18 @@ export class SwiftRuntime {
341
339
const result = Reflect . get ( obj , index ) ;
342
340
writeValue ( result , kind_ptr , payload1_ptr , payload2_ptr , payload3_ptr ) ;
343
341
} ,
342
+ swjs_encode_string : ( ref : ref , bytes_ptr_result : pointer ) => {
343
+ const bytes = textEncoder . encode ( this . heap . referenceHeap ( ref ) ) ;
344
+ const bytes_ptr = this . heap . retain ( bytes ) ;
345
+ writeUint32 ( bytes_ptr_result , bytes_ptr ) ;
346
+ return bytes . length ;
347
+ } ,
348
+ swjs_decode_string : ( bytes_ptr : pointer , length : number ) => {
349
+ const uint8Memory = new Uint8Array ( memory ( ) . buffer ) ;
350
+ const bytes = uint8Memory . subarray ( bytes_ptr , bytes_ptr + length ) ;
351
+ const string = textDecoder . decode ( bytes ) ;
352
+ return this . heap . retain ( string ) ;
353
+ } ,
344
354
swjs_load_string : ( ref : ref , buffer : pointer ) => {
345
355
const bytes = this . heap . referenceHeap ( ref ) ;
346
356
writeString ( buffer , bytes ) ;
0 commit comments