@@ -64,11 +64,6 @@ export class SwiftRuntime {
64
64
return textDecoder . decode ( uint8Memory . subarray ( ptr , ptr + len ) ) ;
65
65
}
66
66
67
- const readStringUntilNull = ( ptr : pointer ) => {
68
- const uint8Memory = new Uint8Array ( memory ( ) . buffer ) ;
69
- return textDecoder . decode ( uint8Memory . slice ( ptr ) ) ;
70
- }
71
-
72
67
const writeString = ( ptr : pointer , value : string ) => {
73
68
const bytes = textEncoder . encode ( value ) ;
74
69
const uint8Memory = new Uint8Array ( memory ( ) . buffer ) ;
@@ -86,16 +81,19 @@ export class SwiftRuntime {
86
81
uint8Memory [ ptr + 3 ] = value & 0xff000000
87
82
}
88
83
89
- const decodeValue = ( kind : JavaScriptValueKind , payload : number ) => {
84
+ const decodeValue = (
85
+ kind : JavaScriptValueKind ,
86
+ payload1 : number , payload2 : number
87
+ ) => {
90
88
switch ( kind ) {
91
89
case JavaScriptValueKind . Boolean : {
92
- switch ( payload ) {
90
+ switch ( payload1 ) {
93
91
case 0 : return false
94
92
case 1 : return true
95
93
}
96
94
}
97
95
case JavaScriptValueKind . String : {
98
- return readStringUntilNull ( payload )
96
+ return readString ( payload1 , payload2 )
99
97
}
100
98
case JavaScriptValueKind . Object : {
101
99
}
@@ -108,13 +106,15 @@ export class SwiftRuntime {
108
106
switch ( typeof value ) {
109
107
case "boolean" :
110
108
return {
111
- kind : 0 ,
112
- payload : value ? 1 : 0 ,
109
+ kind : JavaScriptValueKind . Boolean ,
110
+ payload1 : value ? 1 : 0 ,
111
+ payload2 : 0 ,
113
112
}
114
113
case "string" : {
115
114
return {
116
115
kind : JavaScriptValueKind . String ,
117
- payload : allocValue ( value ) ,
116
+ payload1 : allocValue ( value ) ,
117
+ payload2 : value . length ,
118
118
}
119
119
}
120
120
default :
@@ -123,16 +123,25 @@ export class SwiftRuntime {
123
123
}
124
124
125
125
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
+ ) => {
127
131
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 ) )
129
133
} ,
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
+ ) => {
131
139
const obj = this . _heapValues [ ref ] ;
132
140
const result = Reflect . get ( obj , readString ( name , length ) ) ;
133
- const { kind, payload } = encodeValue ( result ) ;
141
+ const { kind, payload1 , payload2 } = encodeValue ( result ) ;
134
142
writeUint32 ( kind_ptr , kind ) ;
135
- writeUint32 ( payload_ptr , payload ) ;
143
+ writeUint32 ( payload1_ptr , payload1 ) ;
144
+ writeUint32 ( payload2_ptr , payload2 ) ;
136
145
} ,
137
146
swjs_load_string : ( ref : ref , buffer : pointer ) => {
138
147
const string = this . _heapValues [ ref ] ;
0 commit comments