-
-
Notifications
You must be signed in to change notification settings - Fork 73
Expand file tree
/
Copy pathSwiftClass.Export.js
More file actions
122 lines (116 loc) · 4.84 KB
/
SwiftClass.Export.js
File metadata and controls
122 lines (116 loc) · 4.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
// NOTICE: This is auto-generated code by BridgeJS from JavaScriptKit,
// DO NOT EDIT.
//
// To update this file, just rebuild your project or run
// `swift package bridge-js`.
export async function createInstantiator(options, swift) {
let instance;
let memory;
let setException;
const textDecoder = new TextDecoder("utf-8");
const textEncoder = new TextEncoder("utf-8");
let tmpRetString;
let tmpRetBytes;
let tmpRetException;
return {
/** @param {WebAssembly.Imports} importObject */
addImports: (importObject) => {
const bjs = {};
importObject["bjs"] = bjs;
bjs["swift_js_return_string"] = function(ptr, len) {
const bytes = new Uint8Array(memory.buffer, ptr, len);
tmpRetString = textDecoder.decode(bytes);
}
bjs["swift_js_init_memory"] = function(sourceId, bytesPtr) {
const source = swift.memory.getObject(sourceId);
const bytes = new Uint8Array(memory.buffer, bytesPtr);
bytes.set(source);
}
bjs["swift_js_make_js_string"] = function(ptr, len) {
const bytes = new Uint8Array(memory.buffer, ptr, len);
return swift.memory.retain(textDecoder.decode(bytes));
}
bjs["swift_js_init_memory_with_result"] = function(ptr, len) {
const target = new Uint8Array(memory.buffer, ptr, len);
target.set(tmpRetBytes);
tmpRetBytes = undefined;
}
bjs["swift_js_throw"] = function(id) {
tmpRetException = swift.memory.retainByRef(id);
}
bjs["swift_js_retain"] = function(id) {
return swift.memory.retainByRef(id);
}
bjs["swift_js_release"] = function(id) {
swift.memory.release(id);
}
// Wrapper functions for module: TestModule
if (!importObject["TestModule"]) {
importObject["TestModule"] = {};
}
importObject["TestModule"]["bjs_Greeter_wrap"] = function(pointer) {
const obj = Greeter.__construct(pointer);
return swift.memory.retain(obj);
};
},
setInstance: (i) => {
instance = i;
memory = instance.exports.memory;
setException = (error) => {
instance.exports._swift_js_exception.value = swift.memory.retain(error)
}
},
/** @param {WebAssembly.Instance} instance */
createExports: (instance) => {
const js = swift.memory.heap;
/// Represents a Swift heap object like a class instance or an actor instance.
class SwiftHeapObject {
static __wrap(pointer, deinit, prototype) {
const obj = Object.create(prototype);
obj.pointer = pointer;
obj.hasReleased = false;
obj.deinit = deinit;
obj.registry = new FinalizationRegistry((pointer) => {
deinit(pointer);
});
obj.registry.register(this, obj.pointer);
return obj;
}
release() {
this.registry.unregister(this);
this.deinit(this.pointer);
}
}
class Greeter extends SwiftHeapObject {
static __construct(ptr) {
return SwiftHeapObject.__wrap(ptr, instance.exports.bjs_Greeter_deinit, Greeter.prototype);
}
constructor(name) {
const nameBytes = textEncoder.encode(name);
const nameId = swift.memory.retain(nameBytes);
const ret = instance.exports.bjs_Greeter_init(nameId, nameBytes.length);
swift.memory.release(nameId);
return Greeter.__construct(ret);
}
greet() {
instance.exports.bjs_Greeter_greet(this.pointer);
const ret = tmpRetString;
tmpRetString = undefined;
return ret;
}
changeName(name) {
const nameBytes = textEncoder.encode(name);
const nameId = swift.memory.retain(nameBytes);
instance.exports.bjs_Greeter_changeName(this.pointer, nameId, nameBytes.length);
swift.memory.release(nameId);
}
}
return {
Greeter,
takeGreeter: function bjs_takeGreeter(greeter) {
instance.exports.bjs_takeGreeter(greeter.pointer);
},
};
},
}
}