wat4wasm 1.1.5 → 1.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/processors/data.js +252 -11
- package/package.json +1 -1
- package/wat4wasm +215 -10
package/lib/processors/data.js
CHANGED
|
@@ -1,12 +1,8 @@
|
|
|
1
1
|
import helpers from "../helpers.js"
|
|
2
2
|
|
|
3
|
-
export const DATA_BLOCK_NAME = "data";
|
|
4
|
-
export const SIZE_BLOCK_NAME = "data.size";
|
|
5
|
-
export const VIEW_BLOCK_NAME = "data.view";
|
|
6
|
-
|
|
7
3
|
const GENERATE_DATA_VIEWER = (size, $name) => {
|
|
8
4
|
return `
|
|
9
|
-
(block ${$name}
|
|
5
|
+
(block ${$name}
|
|
10
6
|
(result externref)
|
|
11
7
|
|
|
12
8
|
(global.set $wat4wasm (call $self.Array<>ext))
|
|
@@ -65,6 +61,178 @@ const GENERATE_DATA_VIEWER = (size, $name) => {
|
|
|
65
61
|
`;
|
|
66
62
|
};
|
|
67
63
|
|
|
64
|
+
const GENERATE_TEXT_VIEWER = (size, $name) => {
|
|
65
|
+
return `
|
|
66
|
+
(block ${$name}
|
|
67
|
+
(result externref)
|
|
68
|
+
|
|
69
|
+
(global.set $wat4wasm (call $self.Array<>ext))
|
|
70
|
+
|
|
71
|
+
(call $self.Reflect.set<ext.i32.i32>
|
|
72
|
+
(global.get $wat4wasm) (i32.const 0) (i32.const ${size})
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
(global.set $wat4wasm
|
|
76
|
+
(call $self.Reflect.construct<ext.ext>ext
|
|
77
|
+
(ref.extern $self.Uint8Array<ext>)
|
|
78
|
+
(global.get $wat4wasm)
|
|
79
|
+
)
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
(if (i32.const ${size})
|
|
83
|
+
(then
|
|
84
|
+
(i32.const 0)
|
|
85
|
+
(i64.load (i32.const 0))
|
|
86
|
+
|
|
87
|
+
(block $copy
|
|
88
|
+
(i32.store (i32.const 0) (i32.const ${size}))
|
|
89
|
+
(loop $i--
|
|
90
|
+
(if (i32.load (i32.const 0))
|
|
91
|
+
(then
|
|
92
|
+
(i32.store
|
|
93
|
+
(i32.const 0)
|
|
94
|
+
(i32.sub (i32.load (i32.const 0)) (i32.const 1))
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
(memory.init ${$name}
|
|
98
|
+
(i32.const 4)
|
|
99
|
+
(i32.load (i32.const 0))
|
|
100
|
+
(i32.const 1)
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
(call $self.Reflect.set<ext.i32.i32>
|
|
104
|
+
(global.get $wat4wasm)
|
|
105
|
+
(i32.load (i32.const 0))
|
|
106
|
+
(i32.load8_u (i32.const 4))
|
|
107
|
+
)
|
|
108
|
+
|
|
109
|
+
(br $i--)
|
|
110
|
+
)
|
|
111
|
+
)
|
|
112
|
+
)
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
(i64.store (; stack stack ;))
|
|
116
|
+
)
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
(local.set $arguments (call $self.Array<>ext))
|
|
121
|
+
|
|
122
|
+
(call $self.Reflect.set<ext.i32.ext>
|
|
123
|
+
(local.get $arguments)
|
|
124
|
+
(i32.const 0)
|
|
125
|
+
(global.get $wat4wasm)
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
(call $self.Reflect.apply<ext.ext.ext>ext
|
|
129
|
+
(local.get $textDecoder.decode)
|
|
130
|
+
(local.get $textDecoder)
|
|
131
|
+
(local.get $arguments)
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
(global.set $wat4wasm (null))
|
|
135
|
+
)
|
|
136
|
+
`;
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
const GENERATE_HREF_VIEWER = (size, $name) => {
|
|
140
|
+
return `
|
|
141
|
+
(block ${$name}
|
|
142
|
+
(result externref)
|
|
143
|
+
|
|
144
|
+
(global.set $wat4wasm (call $self.Array<>ext))
|
|
145
|
+
|
|
146
|
+
(call $self.Reflect.set<ext.i32.i32>
|
|
147
|
+
(global.get $wat4wasm) (i32.const 0) (i32.const ${size})
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
(global.set $wat4wasm
|
|
151
|
+
(call $self.Reflect.construct<ext.ext>ext
|
|
152
|
+
(ref.extern $self.Uint8Array<ext>)
|
|
153
|
+
(global.get $wat4wasm)
|
|
154
|
+
)
|
|
155
|
+
)
|
|
156
|
+
|
|
157
|
+
(if (i32.const ${size})
|
|
158
|
+
(then
|
|
159
|
+
(i32.const 0)
|
|
160
|
+
(i64.load (i32.const 0))
|
|
161
|
+
|
|
162
|
+
(block $copy
|
|
163
|
+
(i32.store (i32.const 0) (i32.const ${size}))
|
|
164
|
+
(loop $i--
|
|
165
|
+
(if (i32.load (i32.const 0))
|
|
166
|
+
(then
|
|
167
|
+
(i32.store
|
|
168
|
+
(i32.const 0)
|
|
169
|
+
(i32.sub (i32.load (i32.const 0)) (i32.const 1))
|
|
170
|
+
)
|
|
171
|
+
|
|
172
|
+
(memory.init ${$name}
|
|
173
|
+
(i32.const 4)
|
|
174
|
+
(i32.load (i32.const 0))
|
|
175
|
+
(i32.const 1)
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
(call $self.Reflect.set<ext.i32.i32>
|
|
179
|
+
(global.get $wat4wasm)
|
|
180
|
+
(i32.load (i32.const 0))
|
|
181
|
+
(i32.load8_u (i32.const 4))
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
(br $i--)
|
|
185
|
+
)
|
|
186
|
+
)
|
|
187
|
+
)
|
|
188
|
+
)
|
|
189
|
+
|
|
190
|
+
(i64.store (; stack stack ;))
|
|
191
|
+
)
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
(local.set $arguments (call $self.Array<>ext))
|
|
196
|
+
|
|
197
|
+
(call $self.Reflect.set<ext.i32.ext>
|
|
198
|
+
(local.get $arguments)
|
|
199
|
+
(i32.const 0)
|
|
200
|
+
(global.get $wat4wasm)
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
(call $self.Reflect.set<ext.i32.ext>
|
|
204
|
+
(local.get $arguments)
|
|
205
|
+
(i32.const 0)
|
|
206
|
+
(call $self.Reflect.apply<ext.ext.ext>ext
|
|
207
|
+
(local.get $textDecoder.decode)
|
|
208
|
+
(local.get $textDecoder)
|
|
209
|
+
(local.get $arguments)
|
|
210
|
+
)
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
(call $self.Reflect.set<ext.i32.ext>
|
|
214
|
+
(local.get $arguments)
|
|
215
|
+
(i32.const 0)
|
|
216
|
+
(call $self.Reflect.construct<ext.ext>ext
|
|
217
|
+
(call $self.Reflect.get<ext.ext>ext (self) (string "Blob"))
|
|
218
|
+
(call $self.Array<ext>ext (local.get $arguments))
|
|
219
|
+
)
|
|
220
|
+
)
|
|
221
|
+
|
|
222
|
+
(call $self.Reflect.apply<ext.ext.ext>ext
|
|
223
|
+
(call $self.Reflect.get<ext.ext>ext
|
|
224
|
+
(call $self.Reflect.get<ext.ext>ext (self) (string "URL"))
|
|
225
|
+
(string "createObjectURL")
|
|
226
|
+
)
|
|
227
|
+
(null)
|
|
228
|
+
(local.get $arguments)
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
(global.set $wat4wasm (null))
|
|
232
|
+
)
|
|
233
|
+
`;
|
|
234
|
+
};
|
|
235
|
+
|
|
68
236
|
export default function (wat, WAT4WASM) {
|
|
69
237
|
|
|
70
238
|
const maskSet = new helpers.MaskSet(wat);
|
|
@@ -73,22 +241,36 @@ export default function (wat, WAT4WASM) {
|
|
|
73
241
|
const segmentSizes = new Map();
|
|
74
242
|
const sizeRequests = new Set();
|
|
75
243
|
const viewRequests = new Set();
|
|
244
|
+
const textRequests = new Set();
|
|
245
|
+
const hrefRequests = new Set();
|
|
246
|
+
|
|
247
|
+
while (maskSet.hasBlock("data.text")) {
|
|
248
|
+
const block = maskSet.lastBlockOf("data.text");
|
|
249
|
+
textRequests.add(block);
|
|
250
|
+
maskSet.mask(block);
|
|
251
|
+
}
|
|
76
252
|
|
|
77
|
-
while (maskSet.hasBlock(
|
|
78
|
-
const block = maskSet.lastBlockOf(
|
|
253
|
+
while (maskSet.hasBlock("data.href")) {
|
|
254
|
+
const block = maskSet.lastBlockOf("data.href");
|
|
255
|
+
hrefRequests.add(block);
|
|
256
|
+
maskSet.mask(block);
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
while (maskSet.hasBlock("data.view")) {
|
|
260
|
+
const block = maskSet.lastBlockOf("data.view");
|
|
79
261
|
viewRequests.add(block);
|
|
80
262
|
maskSet.mask(block);
|
|
81
263
|
}
|
|
82
264
|
|
|
83
|
-
while (maskSet.hasBlock(
|
|
84
|
-
const block = maskSet.lastBlockOf(
|
|
265
|
+
while (maskSet.hasBlock("data.size")) {
|
|
266
|
+
const block = maskSet.lastBlockOf("data.size");
|
|
85
267
|
sizeRequests.add(block);
|
|
86
268
|
maskSet.mask(block);
|
|
87
269
|
}
|
|
88
270
|
|
|
89
|
-
while (maskSet.hasBlock(
|
|
271
|
+
while (maskSet.hasBlock("data")) {
|
|
90
272
|
|
|
91
|
-
const block = maskSet.lastBlockOf(
|
|
273
|
+
const block = maskSet.lastBlockOf("data");
|
|
92
274
|
const content = helpers.findQuotedText(block);
|
|
93
275
|
|
|
94
276
|
maskSet.mask(block);
|
|
@@ -155,9 +337,20 @@ export default function (wat, WAT4WASM) {
|
|
|
155
337
|
maskSet.update(block, block.id);
|
|
156
338
|
});
|
|
157
339
|
|
|
340
|
+
textRequests.forEach(block => {
|
|
341
|
+
block.id = helpers.referenceId();
|
|
342
|
+
maskSet.update(block, block.id);
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
hrefRequests.forEach(block => {
|
|
346
|
+
block.id = helpers.referenceId();
|
|
347
|
+
maskSet.update(block, block.id);
|
|
348
|
+
});
|
|
349
|
+
|
|
158
350
|
wat = maskSet.restore();
|
|
159
351
|
|
|
160
352
|
let oninit = String();
|
|
353
|
+
|
|
161
354
|
viewRequests.forEach(block => {
|
|
162
355
|
if (externgetter.has(block.$name) === false) {
|
|
163
356
|
const size = segmentSizes.get(block.$name);
|
|
@@ -176,12 +369,60 @@ export default function (wat, WAT4WASM) {
|
|
|
176
369
|
}
|
|
177
370
|
});
|
|
178
371
|
|
|
372
|
+
textRequests.forEach(block => {
|
|
373
|
+
if (externgetter.has(block.$name) === false) {
|
|
374
|
+
const size = segmentSizes.get(block.$name);
|
|
375
|
+
const code = GENERATE_TEXT_VIEWER(size, block.$name);
|
|
376
|
+
|
|
377
|
+
const growRequest = WAT4WASM_GROW_EXTERN_TABLE(wat);
|
|
378
|
+
block.tableSetter = growRequest.generateSetter(code);
|
|
379
|
+
|
|
380
|
+
wat = growRequest.modifiedRaw;
|
|
381
|
+
oninit = `${oninit}\n\n${block.tableSetter}\n\n`;
|
|
382
|
+
|
|
383
|
+
externgetter.set(
|
|
384
|
+
block.$name,
|
|
385
|
+
growRequest.getter.concat(` ;; ${block.$name}\n`)
|
|
386
|
+
);
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
|
|
390
|
+
hrefRequests.forEach(block => {
|
|
391
|
+
if (externgetter.has(block.$name) === false) {
|
|
392
|
+
const size = segmentSizes.get(block.$name);
|
|
393
|
+
const code = GENERATE_HREF_VIEWER(size, block.$name);
|
|
394
|
+
|
|
395
|
+
const growRequest = WAT4WASM_GROW_EXTERN_TABLE(wat);
|
|
396
|
+
block.tableSetter = growRequest.generateSetter(code);
|
|
397
|
+
|
|
398
|
+
wat = growRequest.modifiedRaw;
|
|
399
|
+
oninit = `${oninit}\n\n${block.tableSetter}\n\n`;
|
|
400
|
+
|
|
401
|
+
externgetter.set(
|
|
402
|
+
block.$name,
|
|
403
|
+
growRequest.getter.concat(` ;; ${block.$name}\n`)
|
|
404
|
+
);
|
|
405
|
+
}
|
|
406
|
+
});
|
|
407
|
+
|
|
179
408
|
viewRequests.forEach(block => {
|
|
180
409
|
wat = wat.replaceAll(
|
|
181
410
|
block.id, externgetter.get(block.$name)
|
|
182
411
|
);
|
|
183
412
|
});
|
|
184
413
|
|
|
414
|
+
textRequests.forEach(block => {
|
|
415
|
+
wat = wat.replaceAll(
|
|
416
|
+
block.id, externgetter.get(block.$name)
|
|
417
|
+
);
|
|
418
|
+
});
|
|
419
|
+
|
|
420
|
+
hrefRequests.forEach(block => {
|
|
421
|
+
wat = wat.replaceAll(
|
|
422
|
+
block.id, externgetter.get(block.$name)
|
|
423
|
+
);
|
|
424
|
+
});
|
|
425
|
+
|
|
185
426
|
wat = APPEND_ON_EXTERN_READY(wat, oninit);
|
|
186
427
|
|
|
187
428
|
return wat;
|
package/package.json
CHANGED
package/wat4wasm
CHANGED
|
@@ -852,12 +852,9 @@ function ASYNC (wat, WAT4WASM) {
|
|
|
852
852
|
return wat;
|
|
853
853
|
}
|
|
854
854
|
|
|
855
|
-
const DATA_BLOCK_NAME = "data";
|
|
856
|
-
const SIZE_BLOCK_NAME = "data.size";
|
|
857
|
-
const VIEW_BLOCK_NAME = "data.view";
|
|
858
855
|
const GENERATE_DATA_VIEWER = (size, $name) => {
|
|
859
856
|
return `
|
|
860
|
-
(block ${$name}
|
|
857
|
+
(block ${$name}
|
|
861
858
|
(result externref)
|
|
862
859
|
(global.set $wat4wasm (call $self.Array<>ext))
|
|
863
860
|
|
|
@@ -907,24 +904,186 @@ const GENERATE_DATA_VIEWER = (size, $name) => {
|
|
|
907
904
|
)
|
|
908
905
|
`;
|
|
909
906
|
};
|
|
907
|
+
const GENERATE_TEXT_VIEWER = (size, $name) => {
|
|
908
|
+
return `
|
|
909
|
+
(block ${$name}
|
|
910
|
+
(result externref)
|
|
911
|
+
(global.set $wat4wasm (call $self.Array<>ext))
|
|
912
|
+
|
|
913
|
+
(call $self.Reflect.set<ext.i32.i32>
|
|
914
|
+
(global.get $wat4wasm) (i32.const 0) (i32.const ${size})
|
|
915
|
+
)
|
|
916
|
+
(global.set $wat4wasm
|
|
917
|
+
(call $self.Reflect.construct<ext.ext>ext
|
|
918
|
+
(ref.extern $self.Uint8Array<ext>)
|
|
919
|
+
(global.get $wat4wasm)
|
|
920
|
+
)
|
|
921
|
+
)
|
|
922
|
+
|
|
923
|
+
(if (i32.const ${size})
|
|
924
|
+
(then
|
|
925
|
+
(i32.const 0)
|
|
926
|
+
(i64.load (i32.const 0))
|
|
927
|
+
(block $copy
|
|
928
|
+
(i32.store (i32.const 0) (i32.const ${size}))
|
|
929
|
+
(loop $i--
|
|
930
|
+
(if (i32.load (i32.const 0))
|
|
931
|
+
(then
|
|
932
|
+
(i32.store
|
|
933
|
+
(i32.const 0)
|
|
934
|
+
(i32.sub (i32.load (i32.const 0)) (i32.const 1))
|
|
935
|
+
)
|
|
936
|
+
(memory.init ${$name}
|
|
937
|
+
(i32.const 4)
|
|
938
|
+
(i32.load (i32.const 0))
|
|
939
|
+
(i32.const 1)
|
|
940
|
+
)
|
|
941
|
+
(call $self.Reflect.set<ext.i32.i32>
|
|
942
|
+
(global.get $wat4wasm)
|
|
943
|
+
(i32.load (i32.const 0))
|
|
944
|
+
(i32.load8_u (i32.const 4))
|
|
945
|
+
)
|
|
946
|
+
(br $i--)
|
|
947
|
+
)
|
|
948
|
+
)
|
|
949
|
+
)
|
|
950
|
+
)
|
|
951
|
+
(i64.store (; stack stack ;))
|
|
952
|
+
)
|
|
953
|
+
)
|
|
954
|
+
|
|
955
|
+
(local.set $arguments (call $self.Array<>ext))
|
|
956
|
+
|
|
957
|
+
(call $self.Reflect.set<ext.i32.ext>
|
|
958
|
+
(local.get $arguments)
|
|
959
|
+
(i32.const 0)
|
|
960
|
+
(global.get $wat4wasm)
|
|
961
|
+
)
|
|
962
|
+
(call $self.Reflect.apply<ext.ext.ext>ext
|
|
963
|
+
(local.get $textDecoder.decode)
|
|
964
|
+
(local.get $textDecoder)
|
|
965
|
+
(local.get $arguments)
|
|
966
|
+
)
|
|
967
|
+
|
|
968
|
+
(global.set $wat4wasm (null))
|
|
969
|
+
)
|
|
970
|
+
`;
|
|
971
|
+
};
|
|
972
|
+
const GENERATE_HREF_VIEWER = (size, $name) => {
|
|
973
|
+
return `
|
|
974
|
+
(block ${$name}
|
|
975
|
+
(result externref)
|
|
976
|
+
(global.set $wat4wasm (call $self.Array<>ext))
|
|
977
|
+
|
|
978
|
+
(call $self.Reflect.set<ext.i32.i32>
|
|
979
|
+
(global.get $wat4wasm) (i32.const 0) (i32.const ${size})
|
|
980
|
+
)
|
|
981
|
+
(global.set $wat4wasm
|
|
982
|
+
(call $self.Reflect.construct<ext.ext>ext
|
|
983
|
+
(ref.extern $self.Uint8Array<ext>)
|
|
984
|
+
(global.get $wat4wasm)
|
|
985
|
+
)
|
|
986
|
+
)
|
|
987
|
+
|
|
988
|
+
(if (i32.const ${size})
|
|
989
|
+
(then
|
|
990
|
+
(i32.const 0)
|
|
991
|
+
(i64.load (i32.const 0))
|
|
992
|
+
(block $copy
|
|
993
|
+
(i32.store (i32.const 0) (i32.const ${size}))
|
|
994
|
+
(loop $i--
|
|
995
|
+
(if (i32.load (i32.const 0))
|
|
996
|
+
(then
|
|
997
|
+
(i32.store
|
|
998
|
+
(i32.const 0)
|
|
999
|
+
(i32.sub (i32.load (i32.const 0)) (i32.const 1))
|
|
1000
|
+
)
|
|
1001
|
+
(memory.init ${$name}
|
|
1002
|
+
(i32.const 4)
|
|
1003
|
+
(i32.load (i32.const 0))
|
|
1004
|
+
(i32.const 1)
|
|
1005
|
+
)
|
|
1006
|
+
(call $self.Reflect.set<ext.i32.i32>
|
|
1007
|
+
(global.get $wat4wasm)
|
|
1008
|
+
(i32.load (i32.const 0))
|
|
1009
|
+
(i32.load8_u (i32.const 4))
|
|
1010
|
+
)
|
|
1011
|
+
(br $i--)
|
|
1012
|
+
)
|
|
1013
|
+
)
|
|
1014
|
+
)
|
|
1015
|
+
)
|
|
1016
|
+
(i64.store (; stack stack ;))
|
|
1017
|
+
)
|
|
1018
|
+
)
|
|
1019
|
+
|
|
1020
|
+
(local.set $arguments (call $self.Array<>ext))
|
|
1021
|
+
|
|
1022
|
+
(call $self.Reflect.set<ext.i32.ext>
|
|
1023
|
+
(local.get $arguments)
|
|
1024
|
+
(i32.const 0)
|
|
1025
|
+
(global.get $wat4wasm)
|
|
1026
|
+
)
|
|
1027
|
+
(call $self.Reflect.set<ext.i32.ext>
|
|
1028
|
+
(local.get $arguments)
|
|
1029
|
+
(i32.const 0)
|
|
1030
|
+
(call $self.Reflect.apply<ext.ext.ext>ext
|
|
1031
|
+
(local.get $textDecoder.decode)
|
|
1032
|
+
(local.get $textDecoder)
|
|
1033
|
+
(local.get $arguments)
|
|
1034
|
+
)
|
|
1035
|
+
)
|
|
1036
|
+
(call $self.Reflect.set<ext.i32.ext>
|
|
1037
|
+
(local.get $arguments)
|
|
1038
|
+
(i32.const 0)
|
|
1039
|
+
(call $self.Reflect.construct<ext.ext>ext
|
|
1040
|
+
(call $self.Reflect.get<ext.ext>ext (self) (string "Blob"))
|
|
1041
|
+
(call $self.Array<ext>ext (local.get $arguments))
|
|
1042
|
+
)
|
|
1043
|
+
)
|
|
1044
|
+
(call $self.Reflect.apply<ext.ext.ext>ext
|
|
1045
|
+
(call $self.Reflect.get<ext.ext>ext
|
|
1046
|
+
(call $self.Reflect.get<ext.ext>ext (self) (string "URL"))
|
|
1047
|
+
(string "createObjectURL")
|
|
1048
|
+
)
|
|
1049
|
+
(null)
|
|
1050
|
+
(local.get $arguments)
|
|
1051
|
+
)
|
|
1052
|
+
|
|
1053
|
+
(global.set $wat4wasm (null))
|
|
1054
|
+
)
|
|
1055
|
+
`;
|
|
1056
|
+
};
|
|
910
1057
|
function DATA (wat, WAT4WASM) {
|
|
911
1058
|
const maskSet = new helpers.MaskSet(wat);
|
|
912
1059
|
const externgetter = new Map();
|
|
913
1060
|
const segmentSizes = new Map();
|
|
914
1061
|
const sizeRequests = new Set();
|
|
915
1062
|
const viewRequests = new Set();
|
|
916
|
-
|
|
917
|
-
|
|
1063
|
+
const textRequests = new Set();
|
|
1064
|
+
const hrefRequests = new Set();
|
|
1065
|
+
while (maskSet.hasBlock("data.text")) {
|
|
1066
|
+
const block = maskSet.lastBlockOf("data.text");
|
|
1067
|
+
textRequests.add(block);
|
|
1068
|
+
maskSet.mask(block);
|
|
1069
|
+
}
|
|
1070
|
+
while (maskSet.hasBlock("data.href")) {
|
|
1071
|
+
const block = maskSet.lastBlockOf("data.href");
|
|
1072
|
+
hrefRequests.add(block);
|
|
1073
|
+
maskSet.mask(block);
|
|
1074
|
+
}
|
|
1075
|
+
while (maskSet.hasBlock("data.view")) {
|
|
1076
|
+
const block = maskSet.lastBlockOf("data.view");
|
|
918
1077
|
viewRequests.add(block);
|
|
919
1078
|
maskSet.mask(block);
|
|
920
1079
|
}
|
|
921
|
-
while (maskSet.hasBlock(
|
|
922
|
-
const block = maskSet.lastBlockOf(
|
|
1080
|
+
while (maskSet.hasBlock("data.size")) {
|
|
1081
|
+
const block = maskSet.lastBlockOf("data.size");
|
|
923
1082
|
sizeRequests.add(block);
|
|
924
1083
|
maskSet.mask(block);
|
|
925
1084
|
}
|
|
926
|
-
while (maskSet.hasBlock(
|
|
927
|
-
const block = maskSet.lastBlockOf(
|
|
1085
|
+
while (maskSet.hasBlock("data")) {
|
|
1086
|
+
const block = maskSet.lastBlockOf("data");
|
|
928
1087
|
const content = helpers.findQuotedText(block);
|
|
929
1088
|
maskSet.mask(block);
|
|
930
1089
|
if (helpers.hasProtocol(content) === false) {
|
|
@@ -975,6 +1134,14 @@ function DATA (wat, WAT4WASM) {
|
|
|
975
1134
|
block.id = helpers.referenceId();
|
|
976
1135
|
maskSet.update(block, block.id);
|
|
977
1136
|
});
|
|
1137
|
+
textRequests.forEach(block => {
|
|
1138
|
+
block.id = helpers.referenceId();
|
|
1139
|
+
maskSet.update(block, block.id);
|
|
1140
|
+
});
|
|
1141
|
+
hrefRequests.forEach(block => {
|
|
1142
|
+
block.id = helpers.referenceId();
|
|
1143
|
+
maskSet.update(block, block.id);
|
|
1144
|
+
});
|
|
978
1145
|
wat = maskSet.restore();
|
|
979
1146
|
let oninit = String();
|
|
980
1147
|
viewRequests.forEach(block => {
|
|
@@ -991,11 +1158,49 @@ function DATA (wat, WAT4WASM) {
|
|
|
991
1158
|
);
|
|
992
1159
|
}
|
|
993
1160
|
});
|
|
1161
|
+
textRequests.forEach(block => {
|
|
1162
|
+
if (externgetter.has(block.$name) === false) {
|
|
1163
|
+
const size = segmentSizes.get(block.$name);
|
|
1164
|
+
const code = GENERATE_TEXT_VIEWER(size, block.$name);
|
|
1165
|
+
const growRequest = WAT4WASM_GROW_EXTERN_TABLE(wat);
|
|
1166
|
+
block.tableSetter = growRequest.generateSetter(code);
|
|
1167
|
+
wat = growRequest.modifiedRaw;
|
|
1168
|
+
oninit = `${oninit}\n\n${block.tableSetter}\n\n`;
|
|
1169
|
+
externgetter.set(
|
|
1170
|
+
block.$name,
|
|
1171
|
+
growRequest.getter.concat(` ;; ${block.$name}\n`)
|
|
1172
|
+
);
|
|
1173
|
+
}
|
|
1174
|
+
});
|
|
1175
|
+
hrefRequests.forEach(block => {
|
|
1176
|
+
if (externgetter.has(block.$name) === false) {
|
|
1177
|
+
const size = segmentSizes.get(block.$name);
|
|
1178
|
+
const code = GENERATE_HREF_VIEWER(size, block.$name);
|
|
1179
|
+
const growRequest = WAT4WASM_GROW_EXTERN_TABLE(wat);
|
|
1180
|
+
block.tableSetter = growRequest.generateSetter(code);
|
|
1181
|
+
wat = growRequest.modifiedRaw;
|
|
1182
|
+
oninit = `${oninit}\n\n${block.tableSetter}\n\n`;
|
|
1183
|
+
externgetter.set(
|
|
1184
|
+
block.$name,
|
|
1185
|
+
growRequest.getter.concat(` ;; ${block.$name}\n`)
|
|
1186
|
+
);
|
|
1187
|
+
}
|
|
1188
|
+
});
|
|
994
1189
|
viewRequests.forEach(block => {
|
|
995
1190
|
wat = wat.replaceAll(
|
|
996
1191
|
block.id, externgetter.get(block.$name)
|
|
997
1192
|
);
|
|
998
1193
|
});
|
|
1194
|
+
textRequests.forEach(block => {
|
|
1195
|
+
wat = wat.replaceAll(
|
|
1196
|
+
block.id, externgetter.get(block.$name)
|
|
1197
|
+
);
|
|
1198
|
+
});
|
|
1199
|
+
hrefRequests.forEach(block => {
|
|
1200
|
+
wat = wat.replaceAll(
|
|
1201
|
+
block.id, externgetter.get(block.$name)
|
|
1202
|
+
);
|
|
1203
|
+
});
|
|
999
1204
|
wat = APPEND_ON_EXTERN_READY(wat, oninit);
|
|
1000
1205
|
return wat;
|
|
1001
1206
|
}
|