wat4wasm 1.1.5 → 1.1.6

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.
@@ -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
+ (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(VIEW_BLOCK_NAME)) {
78
- const block = maskSet.lastBlockOf(VIEW_BLOCK_NAME);
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(SIZE_BLOCK_NAME)) {
84
- const block = maskSet.lastBlockOf(SIZE_BLOCK_NAME);
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(DATA_BLOCK_NAME)) {
271
+ while (maskSet.hasBlock("data")) {
90
272
 
91
- const block = maskSet.lastBlockOf(DATA_BLOCK_NAME);
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wat4wasm",
3
- "version": "1.1.5",
3
+ "version": "1.1.6",
4
4
  "description": "",
5
5
  "homepage": "https://github.com/central-network/wat4wasm#readme",
6
6
  "bugs": {
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
+ (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
- while (maskSet.hasBlock(VIEW_BLOCK_NAME)) {
917
- const block = maskSet.lastBlockOf(VIEW_BLOCK_NAME);
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(SIZE_BLOCK_NAME)) {
922
- const block = maskSet.lastBlockOf(SIZE_BLOCK_NAME);
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(DATA_BLOCK_NAME)) {
927
- const block = maskSet.lastBlockOf(DATA_BLOCK_NAME);
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
  }