Skip to content

Commit 2ba20d2

Browse files
Remove payload2 from value bridging interface
1 parent 36a06c5 commit 2ba20d2

File tree

7 files changed

+46
-78
lines changed

7 files changed

+46
-78
lines changed

Runtime/src/index.ts

+22-34
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,8 @@ export class SwiftRuntime {
148148
const argv = exports.swjs_prepare_host_function_call(argc)
149149
for (let index = 0; index < args.length; index++) {
150150
const argument = args[index]
151-
const base = argv + 24 * index
152-
writeValue(argument, base, base + 4, base + 8, base + 16)
151+
const base = argv + 16 * index
152+
writeValue(argument, base, base + 4, base + 8)
153153
}
154154
let output: any;
155155
const callback_func_ref = this.heap.retain(function (result: any) {
@@ -203,7 +203,7 @@ export class SwiftRuntime {
203203

204204
const decodeValue = (
205205
kind: JavaScriptValueKind,
206-
payload1: number, payload2: number, payload3: number
206+
payload1: number, payload2: number
207207
) => {
208208
switch (kind) {
209209
case JavaScriptValueKind.Boolean: {
@@ -213,7 +213,7 @@ export class SwiftRuntime {
213213
}
214214
}
215215
case JavaScriptValueKind.Number: {
216-
return payload3;
216+
return payload2;
217217
}
218218
case JavaScriptValueKind.String: {
219219
return readString(payload1);
@@ -237,50 +237,40 @@ export class SwiftRuntime {
237237

238238
const writeValue = (
239239
value: any, kind_ptr: pointer,
240-
payload1_ptr: pointer, payload2_ptr: pointer, payload3_ptr: pointer
240+
payload1_ptr: pointer, payload2_ptr: pointer
241241
) => {
242242
if (value === null) {
243243
writeUint32(kind_ptr, JavaScriptValueKind.Null);
244-
writeUint32(payload1_ptr, 0);
245-
writeUint32(payload2_ptr, 0);
246244
return;
247245
}
248246
switch (typeof value) {
249247
case "boolean": {
250248
writeUint32(kind_ptr, JavaScriptValueKind.Boolean);
251249
writeUint32(payload1_ptr, value ? 1 : 0);
252-
writeUint32(payload2_ptr, 0);
253250
break;
254251
}
255252
case "number": {
256253
writeUint32(kind_ptr, JavaScriptValueKind.Number);
257-
writeUint32(payload1_ptr, 0);
258-
writeUint32(payload2_ptr, 0);
259-
writeFloat64(payload3_ptr, value);
254+
writeFloat64(payload2_ptr, value);
260255
break;
261256
}
262257
case "string": {
263258
writeUint32(kind_ptr, JavaScriptValueKind.String);
264259
writeUint32(payload1_ptr, this.heap.retain(value));
265-
writeUint32(payload2_ptr, 0);
266260
break;
267261
}
268262
case "undefined": {
269263
writeUint32(kind_ptr, JavaScriptValueKind.Undefined);
270-
writeUint32(payload1_ptr, 0);
271-
writeUint32(payload2_ptr, 0);
272264
break;
273265
}
274266
case "object": {
275267
writeUint32(kind_ptr, JavaScriptValueKind.Object);
276268
writeUint32(payload1_ptr, this.heap.retain(value));
277-
writeUint32(payload2_ptr, 0);
278269
break;
279270
}
280271
case "function": {
281272
writeUint32(kind_ptr, JavaScriptValueKind.Function);
282273
writeUint32(payload1_ptr, this.heap.retain(value));
283-
writeUint32(payload2_ptr, 0);
284274
break;
285275
}
286276
default:
@@ -289,17 +279,15 @@ export class SwiftRuntime {
289279
}
290280

291281
// Note:
292-
// `decodeValues` assumes that the size of RawJSValue is 24
293-
// and the alignment of it is 8
282+
// `decodeValues` assumes that the size of RawJSValue is 16.
294283
const decodeValues = (ptr: pointer, length: number) => {
295284
let result = []
296285
for (let index = 0; index < length; index++) {
297-
const base = ptr + 24 * index
286+
const base = ptr + 16 * index
298287
const kind = readUInt32(base)
299288
const payload1 = readUInt32(base + 4)
300-
const payload2 = readUInt32(base + 8)
301-
const payload3 = readFloat64(base + 16)
302-
result.push(decodeValue(kind, payload1, payload2, payload3))
289+
const payload2 = readFloat64(base + 8)
290+
result.push(decodeValue(kind, payload1, payload2))
303291
}
304292
return result
305293
}
@@ -308,36 +296,36 @@ export class SwiftRuntime {
308296
swjs_set_prop: (
309297
ref: ref, name: ref,
310298
kind: JavaScriptValueKind,
311-
payload1: number, payload2: number, payload3: number
299+
payload1: number, payload2: number
312300
) => {
313301
const obj = this.heap.referenceHeap(ref);
314-
Reflect.set(obj, readString(name), decodeValue(kind, payload1, payload2, payload3))
302+
Reflect.set(obj, readString(name), decodeValue(kind, payload1, payload2))
315303
},
316304
swjs_get_prop: (
317305
ref: ref, name: ref,
318306
kind_ptr: pointer,
319-
payload1_ptr: pointer, payload2_ptr: pointer, payload3_ptr: number
307+
payload1_ptr: pointer, payload2_ptr: pointer
320308
) => {
321309
const obj = this.heap.referenceHeap(ref);
322310
const result = Reflect.get(obj, readString(name));
323-
writeValue(result, kind_ptr, payload1_ptr, payload2_ptr, payload3_ptr);
311+
writeValue(result, kind_ptr, payload1_ptr, payload2_ptr);
324312
},
325313
swjs_set_subscript: (
326314
ref: ref, index: number,
327315
kind: JavaScriptValueKind,
328-
payload1: number, payload2: number, payload3: number
316+
payload1: number, payload2: number
329317
) => {
330318
const obj = this.heap.referenceHeap(ref);
331-
Reflect.set(obj, index, decodeValue(kind, payload1, payload2, payload3))
319+
Reflect.set(obj, index, decodeValue(kind, payload1, payload2))
332320
},
333321
swjs_get_subscript: (
334322
ref: ref, index: number,
335323
kind_ptr: pointer,
336-
payload1_ptr: pointer, payload2_ptr: pointer, payload3_ptr: pointer
324+
payload1_ptr: pointer, payload2_ptr: pointer
337325
) => {
338326
const obj = this.heap.referenceHeap(ref);
339327
const result = Reflect.get(obj, index);
340-
writeValue(result, kind_ptr, payload1_ptr, payload2_ptr, payload3_ptr);
328+
writeValue(result, kind_ptr, payload1_ptr, payload2_ptr);
341329
},
342330
swjs_encode_string: (ref: ref, bytes_ptr_result: pointer) => {
343331
const bytes = textEncoder.encode(this.heap.referenceHeap(ref));
@@ -358,22 +346,22 @@ export class SwiftRuntime {
358346
swjs_call_function: (
359347
ref: ref, argv: pointer, argc: number,
360348
kind_ptr: pointer,
361-
payload1_ptr: pointer, payload2_ptr: pointer, payload3_ptr: pointer
349+
payload1_ptr: pointer, payload2_ptr: pointer
362350
) => {
363351
const func = this.heap.referenceHeap(ref)
364352
const result = Reflect.apply(func, undefined, decodeValues(argv, argc))
365-
writeValue(result, kind_ptr, payload1_ptr, payload2_ptr, payload3_ptr);
353+
writeValue(result, kind_ptr, payload1_ptr, payload2_ptr);
366354
},
367355
swjs_call_function_with_this: (
368356
obj_ref: ref, func_ref: ref,
369357
argv: pointer, argc: number,
370358
kind_ptr: pointer,
371-
payload1_ptr: pointer, payload2_ptr: pointer, payload3_ptr: pointer
359+
payload1_ptr: pointer, payload2_ptr: pointer
372360
) => {
373361
const obj = this.heap.referenceHeap(obj_ref)
374362
const func = this.heap.referenceHeap(func_ref)
375363
const result = Reflect.apply(func, obj, decodeValues(argv, argc))
376-
writeValue(result, kind_ptr, payload1_ptr, payload2_ptr, payload3_ptr);
364+
writeValue(result, kind_ptr, payload1_ptr, payload2_ptr);
377365
},
378366
swjs_create_function: (
379367
host_func_id: number,

Sources/JavaScriptKit/FundamentalObjects/JSFunction.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ public class JSFunction: JSObject {
2727
if let thisId = this?.id {
2828
_call_function_with_this(thisId,
2929
self.id, argv, Int32(argc),
30-
&result.kind, &result.payload1, &result.payload2, &result.payload3)
30+
&result.kind, &result.payload1, &result.payload2)
3131
} else {
3232
_call_function(
3333
self.id, argv, Int32(argc),
34-
&result.kind, &result.payload1, &result.payload2, &result.payload3
34+
&result.kind, &result.payload1, &result.payload2
3535
)
3636
}
3737
return result

Sources/JavaScriptKit/FundamentalObjects/JSString.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ extension JSString {
9797

9898
func withRawJSValue<T>(_ body: (RawJSValue) -> T) -> T {
9999
let rawValue = RawJSValue(
100-
kind: .string, payload1: guts.jsRef, payload2: 0, payload3: 0
100+
kind: .string, payload1: guts.jsRef, payload2: 0
101101
)
102102
return body(rawValue)
103103
}

Sources/JavaScriptKit/JSValue.swift

+4-4
Original file line numberDiff line numberDiff line change
@@ -149,29 +149,29 @@ public func getJSValue(this: JSObject, name: JSString) -> JSValue {
149149
var rawValue = RawJSValue()
150150
_get_prop(this.id, name.asInternalJSRef(),
151151
&rawValue.kind,
152-
&rawValue.payload1, &rawValue.payload2, &rawValue.payload3)
152+
&rawValue.payload1, &rawValue.payload2)
153153
return rawValue.jsValue()
154154
}
155155

156156
public func setJSValue(this: JSObject, name: JSString, value: JSValue) {
157157
value.withRawJSValue { rawValue in
158-
_set_prop(this.id, name.asInternalJSRef(), rawValue.kind, rawValue.payload1, rawValue.payload2, rawValue.payload3)
158+
_set_prop(this.id, name.asInternalJSRef(), rawValue.kind, rawValue.payload1, rawValue.payload2)
159159
}
160160
}
161161

162162
public func getJSValue(this: JSObject, index: Int32) -> JSValue {
163163
var rawValue = RawJSValue()
164164
_get_subscript(this.id, index,
165165
&rawValue.kind,
166-
&rawValue.payload1, &rawValue.payload2, &rawValue.payload3)
166+
&rawValue.payload1, &rawValue.payload2)
167167
return rawValue.jsValue()
168168
}
169169

170170
public func setJSValue(this: JSObject, index: Int32, value: JSValue) {
171171
value.withRawJSValue { rawValue in
172172
_set_subscript(this.id, index,
173173
rawValue.kind,
174-
rawValue.payload1, rawValue.payload2, rawValue.payload3)
174+
rawValue.payload1, rawValue.payload2)
175175
}
176176
}
177177

Sources/JavaScriptKit/JSValueConvertible.swift

+4-13
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ extension RawJSValue: JSValueConvertible {
183183
case .boolean:
184184
return .boolean(payload1 != 0)
185185
case .number:
186-
return .number(payload3)
186+
return .number(payload2)
187187
case .string:
188188
return .string(JSString(jsRef: payload1))
189189
case .object:
@@ -194,8 +194,6 @@ extension RawJSValue: JSValueConvertible {
194194
return .undefined
195195
case .function:
196196
return .function(JSFunction(id: UInt32(payload1)))
197-
default:
198-
fatalError("unreachable")
199197
}
200198
}
201199
}
@@ -204,38 +202,31 @@ extension JSValue {
204202
func withRawJSValue<T>(_ body: (RawJSValue) -> T) -> T {
205203
let kind: JavaScriptValueKind
206204
let payload1: JavaScriptPayload1
207-
let payload2: JavaScriptPayload2
208-
var payload3: JavaScriptPayload3 = 0
205+
var payload2: JavaScriptPayload2 = 0
209206
switch self {
210207
case let .boolean(boolValue):
211208
kind = .boolean
212209
payload1 = boolValue ? 1 : 0
213-
payload2 = 0
214210
case let .number(numberValue):
215211
kind = .number
216212
payload1 = 0
217-
payload2 = 0
218-
payload3 = numberValue
213+
payload2 = numberValue
219214
case let .string(string):
220215
return string.withRawJSValue(body)
221216
case let .object(ref):
222217
kind = .object
223218
payload1 = JavaScriptPayload1(ref.id)
224-
payload2 = 0
225219
case .null:
226220
kind = .null
227221
payload1 = 0
228-
payload2 = 0
229222
case .undefined:
230223
kind = .undefined
231224
payload1 = 0
232-
payload2 = 0
233225
case let .function(functionRef):
234226
kind = .function
235227
payload1 = JavaScriptPayload1(functionRef.id)
236-
payload2 = 0
237228
}
238-
let rawValue = RawJSValue(kind: kind, payload1: payload1, payload2: payload2, payload3: payload3)
229+
let rawValue = RawJSValue(kind: kind, payload1: payload1, payload2: payload2)
239230
return body(rawValue)
240231
}
241232
}

Sources/JavaScriptKit/XcodeSupport.swift

+6-12
Original file line numberDiff line numberDiff line change
@@ -11,32 +11,28 @@ import _CJavaScriptKit
1111
_: JavaScriptObjectRef,
1212
_: JavaScriptValueKind,
1313
_: JavaScriptPayload1,
14-
_: JavaScriptPayload2,
15-
_: JavaScriptPayload3
14+
_: JavaScriptPayload2
1615
) { fatalError() }
1716
func _get_prop(
1817
_: JavaScriptObjectRef,
1918
_: JavaScriptObjectRef,
2019
_: UnsafeMutablePointer<JavaScriptValueKind>!,
2120
_: UnsafeMutablePointer<JavaScriptPayload1>!,
22-
_: UnsafeMutablePointer<JavaScriptPayload2>!,
23-
_: UnsafeMutablePointer<JavaScriptPayload3>!
21+
_: UnsafeMutablePointer<JavaScriptPayload2>!
2422
) { fatalError() }
2523
func _set_subscript(
2624
_: JavaScriptObjectRef,
2725
_: Int32,
2826
_: JavaScriptValueKind,
2927
_: JavaScriptPayload1,
30-
_: JavaScriptPayload2,
31-
_: JavaScriptPayload3
28+
_: JavaScriptPayload2
3229
) { fatalError() }
3330
func _get_subscript(
3431
_: JavaScriptObjectRef,
3532
_: Int32,
3633
_: UnsafeMutablePointer<JavaScriptValueKind>!,
3734
_: UnsafeMutablePointer<JavaScriptPayload1>!,
38-
_: UnsafeMutablePointer<JavaScriptPayload2>!,
39-
_: UnsafeMutablePointer<JavaScriptPayload3>!
35+
_: UnsafeMutablePointer<JavaScriptPayload2>!
4036
) { fatalError() }
4137
func _encode_string(
4238
_: JavaScriptObjectRef,
@@ -55,17 +51,15 @@ import _CJavaScriptKit
5551
_: UnsafePointer<RawJSValue>!, _: Int32,
5652
_: UnsafeMutablePointer<JavaScriptValueKind>!,
5753
_: UnsafeMutablePointer<JavaScriptPayload1>!,
58-
_: UnsafeMutablePointer<JavaScriptPayload2>!,
59-
_: UnsafeMutablePointer<JavaScriptPayload3>!
54+
_: UnsafeMutablePointer<JavaScriptPayload2>!
6055
) { fatalError() }
6156
func _call_function_with_this(
6257
_: JavaScriptObjectRef,
6358
_: JavaScriptObjectRef,
6459
_: UnsafePointer<RawJSValue>!, _: Int32,
6560
_: UnsafeMutablePointer<JavaScriptValueKind>!,
6661
_: UnsafeMutablePointer<JavaScriptPayload1>!,
67-
_: UnsafeMutablePointer<JavaScriptPayload2>!,
68-
_: UnsafeMutablePointer<JavaScriptPayload3>!
62+
_: UnsafeMutablePointer<JavaScriptPayload2>!
6963
) { fatalError() }
7064
func _call_new(
7165
_: JavaScriptObjectRef,

0 commit comments

Comments
 (0)