@@ -64,11 +64,6 @@ export class SwiftRuntime {
6464 return textDecoder . decode ( uint8Memory . subarray ( ptr , ptr + len ) ) ;
6565 }
6666
67- const readStringUntilNull = ( ptr : pointer ) => {
68- const uint8Memory = new Uint8Array ( memory ( ) . buffer ) ;
69- return textDecoder . decode ( uint8Memory . slice ( ptr ) ) ;
70- }
71-
7267 const writeString = ( ptr : pointer , value : string ) => {
7368 const bytes = textEncoder . encode ( value ) ;
7469 const uint8Memory = new Uint8Array ( memory ( ) . buffer ) ;
@@ -86,16 +81,19 @@ export class SwiftRuntime {
8681 uint8Memory [ ptr + 3 ] = value & 0xff000000
8782 }
8883
89- const decodeValue = ( kind : JavaScriptValueKind , payload : number ) => {
84+ const decodeValue = (
85+ kind : JavaScriptValueKind ,
86+ payload1 : number , payload2 : number
87+ ) => {
9088 switch ( kind ) {
9189 case JavaScriptValueKind . Boolean : {
92- switch ( payload ) {
90+ switch ( payload1 ) {
9391 case 0 : return false
9492 case 1 : return true
9593 }
9694 }
9795 case JavaScriptValueKind . String : {
98- return readStringUntilNull ( payload )
96+ return readString ( payload1 , payload2 )
9997 }
10098 case JavaScriptValueKind . Object : {
10199 }
@@ -108,13 +106,15 @@ export class SwiftRuntime {
108106 switch ( typeof value ) {
109107 case "boolean" :
110108 return {
111- kind : 0 ,
112- payload : value ? 1 : 0 ,
109+ kind : JavaScriptValueKind . Boolean ,
110+ payload1 : value ? 1 : 0 ,
111+ payload2 : 0 ,
113112 }
114113 case "string" : {
115114 return {
116115 kind : JavaScriptValueKind . String ,
117- payload : allocValue ( value ) ,
116+ payload1 : allocValue ( value ) ,
117+ payload2 : value . length ,
118118 }
119119 }
120120 default :
@@ -123,16 +123,25 @@ export class SwiftRuntime {
123123 }
124124
125125 return {
126- swjs_set_js_value : ( ref : ref , name : pointer , length : number , kind : JavaScriptValueKind , payload : number ) => {
126+ swjs_set_js_value : (
127+ ref : ref , name : pointer , length : number ,
128+ kind : JavaScriptValueKind ,
129+ payload1 : number , payload2 : number
130+ ) => {
127131 const obj = this . _heapValues [ ref ] ;
128- Reflect . set ( obj , readString ( name , length ) , decodeValue ( kind , payload ) )
132+ Reflect . set ( obj , readString ( name , length ) , decodeValue ( kind , payload1 , payload2 ) )
129133 } ,
130- swjs_get_js_value : ( ref : ref , name : pointer , length : number , kind_ptr : pointer , payload_ptr : pointer ) => {
134+ swjs_get_js_value : (
135+ ref : ref , name : pointer , length : number ,
136+ kind_ptr : pointer ,
137+ payload1_ptr : pointer , payload2_ptr : pointer
138+ ) => {
131139 const obj = this . _heapValues [ ref ] ;
132140 const result = Reflect . get ( obj , readString ( name , length ) ) ;
133- const { kind, payload } = encodeValue ( result ) ;
141+ const { kind, payload1 , payload2 } = encodeValue ( result ) ;
134142 writeUint32 ( kind_ptr , kind ) ;
135- writeUint32 ( payload_ptr , payload ) ;
143+ writeUint32 ( payload1_ptr , payload1 ) ;
144+ writeUint32 ( payload2_ptr , payload2 ) ;
136145 } ,
137146 swjs_load_string : ( ref : ref , buffer : pointer ) => {
138147 const string = this . _heapValues [ ref ] ;
0 commit comments