@@ -117,7 +117,7 @@ class SwiftRuntimeHeap {
117117export class SwiftRuntime {
118118 private instance : WebAssembly . Instance | null ;
119119 private heap : SwiftRuntimeHeap
120- private version : number = 610
120+ private version : number = 611
121121
122122 constructor ( ) {
123123 this . instance = null ;
@@ -163,9 +163,8 @@ export class SwiftRuntime {
163163 const textDecoder = new TextDecoder ( 'utf-8' ) ;
164164 const textEncoder = new TextEncoder ( ) ; // Only support utf-8
165165
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 ) ;
169168 }
170169
171170 const writeString = ( ptr : pointer , bytes : Uint8Array ) => {
@@ -217,7 +216,7 @@ export class SwiftRuntime {
217216 return payload3 ;
218217 }
219218 case JavaScriptValueKind . String : {
220- return readString ( payload1 , payload2 )
219+ return readString ( payload1 ) ;
221220 }
222221 case JavaScriptValueKind . Object : {
223222 return this . heap . referenceHeap ( payload1 )
@@ -261,10 +260,9 @@ export class SwiftRuntime {
261260 break ;
262261 }
263262 case "string" : {
264- const bytes = textEncoder . encode ( value ) ;
265263 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 ) ;
268266 break ;
269267 }
270268 case "undefined" : {
@@ -308,20 +306,20 @@ export class SwiftRuntime {
308306
309307 return {
310308 swjs_set_prop : (
311- ref : ref , name : pointer , length : number ,
309+ ref : ref , name : ref ,
312310 kind : JavaScriptValueKind ,
313311 payload1 : number , payload2 : number , payload3 : number
314312 ) => {
315313 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 ) )
317315 } ,
318316 swjs_get_prop : (
319- ref : ref , name : pointer , length : number ,
317+ ref : ref , name : ref ,
320318 kind_ptr : pointer ,
321319 payload1_ptr : pointer , payload2_ptr : pointer , payload3_ptr : number
322320 ) => {
323321 const obj = this . heap . referenceHeap ( ref ) ;
324- const result = Reflect . get ( obj , readString ( name , length ) ) ;
322+ const result = Reflect . get ( obj , readString ( name ) ) ;
325323 writeValue ( result , kind_ptr , payload1_ptr , payload2_ptr , payload3_ptr ) ;
326324 } ,
327325 swjs_set_subscript : (
@@ -341,6 +339,18 @@ export class SwiftRuntime {
341339 const result = Reflect . get ( obj , index ) ;
342340 writeValue ( result , kind_ptr , payload1_ptr , payload2_ptr , payload3_ptr ) ;
343341 } ,
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+ } ,
344354 swjs_load_string : ( ref : ref , buffer : pointer ) => {
345355 const bytes = this . heap . referenceHeap ( ref ) ;
346356 writeString ( buffer , bytes ) ;
0 commit comments