porffor 0.2.0-fde989a → 0.14.0-032e4ad08

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.
Files changed (64) hide show
  1. package/CONTRIBUTING.md +262 -0
  2. package/LICENSE +20 -20
  3. package/README.md +135 -94
  4. package/asur/README.md +2 -0
  5. package/asur/index.js +1262 -0
  6. package/byg/index.js +216 -0
  7. package/compiler/2c.js +66 -54
  8. package/compiler/{sections.js → assemble.js} +109 -21
  9. package/compiler/builtins/annexb_string.js +72 -0
  10. package/compiler/builtins/annexb_string.ts +19 -0
  11. package/compiler/builtins/array.ts +225 -0
  12. package/compiler/builtins/base64.ts +77 -0
  13. package/compiler/builtins/boolean.ts +20 -0
  14. package/compiler/builtins/crypto.ts +121 -0
  15. package/compiler/builtins/date.ts +2069 -0
  16. package/compiler/builtins/error.js +22 -0
  17. package/compiler/builtins/escape.ts +140 -0
  18. package/compiler/builtins/function.ts +7 -0
  19. package/compiler/builtins/int.ts +147 -0
  20. package/compiler/builtins/math.ts +410 -0
  21. package/compiler/builtins/number.ts +531 -0
  22. package/compiler/builtins/object.ts +6 -0
  23. package/compiler/builtins/porffor.d.ts +60 -0
  24. package/compiler/builtins/set.ts +199 -0
  25. package/compiler/builtins/string.ts +1081 -0
  26. package/compiler/builtins/symbol.ts +62 -0
  27. package/compiler/builtins.js +466 -284
  28. package/compiler/{codeGen.js → codegen.js} +1573 -656
  29. package/compiler/decompile.js +3 -4
  30. package/compiler/embedding.js +22 -22
  31. package/compiler/encoding.js +94 -10
  32. package/compiler/expression.js +1 -1
  33. package/compiler/generated_builtins.js +2110 -0
  34. package/compiler/index.js +29 -44
  35. package/compiler/log.js +6 -3
  36. package/compiler/opt.js +55 -41
  37. package/compiler/parse.js +38 -30
  38. package/compiler/precompile.js +121 -0
  39. package/compiler/prefs.js +31 -0
  40. package/compiler/prototype.js +209 -201
  41. package/compiler/types.js +38 -0
  42. package/compiler/wasmSpec.js +33 -8
  43. package/compiler/wrap.js +154 -89
  44. package/package.json +9 -5
  45. package/porf +2 -0
  46. package/porffor_tmp.c +202 -0
  47. package/rhemyn/compile.js +46 -27
  48. package/rhemyn/parse.js +322 -320
  49. package/rhemyn/test/parse.js +58 -58
  50. package/runner/compare.js +33 -34
  51. package/runner/debug.js +117 -0
  52. package/runner/index.js +80 -12
  53. package/runner/profiler.js +75 -0
  54. package/runner/repl.js +58 -15
  55. package/runner/sizes.js +37 -37
  56. package/runner/version.js +10 -8
  57. package/compiler/builtins/base64.js +0 -92
  58. package/filesize.cmd +0 -2
  59. package/runner/info.js +0 -89
  60. package/runner/profile.js +0 -46
  61. package/runner/results.json +0 -1
  62. package/runner/transform.js +0 -15
  63. package/tmp.c +0 -661
  64. package/util/enum.js +0 -20
@@ -0,0 +1,531 @@
1
+ import type {} from './porffor.d.ts';
2
+
3
+ // radix: number|any for rawType check
4
+ export const __Number_prototype_toString = (_this: number, radix: number|any) => {
5
+ let out: bytestring = '';
6
+ let outPtr: i32 = Porffor.wasm`local.get ${out}`;
7
+
8
+ if (!Number.isFinite(_this)) {
9
+ if (Number.isNaN(_this)) out = 'NaN';
10
+ else if (_this == Infinity) out = 'Infinity';
11
+ else out = '-Infinity';
12
+
13
+ return out;
14
+ }
15
+
16
+ if (Porffor.rawType(radix) != Porffor.TYPES.number) {
17
+ // todo: string to number
18
+ radix = 10;
19
+ }
20
+
21
+ radix |= 0;
22
+ if (radix < 2 || radix > 36) {
23
+ throw new RangeError('toString() radix argument must be between 2 and 36');
24
+ }
25
+
26
+ if (_this == 0) {
27
+ out = '0';
28
+ return out;
29
+ }
30
+
31
+ // if negative value
32
+ if (_this < 0) {
33
+ _this = -_this; // turn value positive for later use
34
+ Porffor.wasm.i32.store8(outPtr++, 45, 0, 4); // prepend -
35
+ }
36
+
37
+ let i: f64 = Math.trunc(_this);
38
+
39
+ let digits: bytestring = ''; // byte "array"
40
+
41
+ let l: i32 = 0;
42
+ if (radix == 10) {
43
+ if (i >= 1e21) {
44
+ // large exponential
45
+ let trailing: boolean = true;
46
+ let e: i32 = -1;
47
+ while (i > 0) {
48
+ const digit: f64 = i % radix;
49
+ i = Math.trunc(i / radix);
50
+
51
+ e++;
52
+ if (trailing) {
53
+ if (digit == 0) { // skip trailing 0s
54
+ continue;
55
+ }
56
+ trailing = false;
57
+ }
58
+
59
+ Porffor.wasm.i32.store8(Porffor.wasm`local.get ${digits}` + l, digit, 0, 4);
60
+ l++;
61
+ }
62
+
63
+ let digitsPtr: i32 = Porffor.wasm`local.get ${digits}` + l;
64
+ let endPtr: i32 = outPtr + l;
65
+ let dotPlace: i32 = outPtr + 1;
66
+ while (outPtr < endPtr) {
67
+ if (outPtr == dotPlace) {
68
+ Porffor.wasm.i32.store8(outPtr++, 46, 0, 4); // .
69
+ endPtr++;
70
+ }
71
+
72
+ let digit: i32 = Porffor.wasm.i32.load8_u(--digitsPtr, 0, 4);
73
+
74
+ if (digit < 10) digit += 48; // 0-9
75
+ else digit += 87; // a-z
76
+
77
+ Porffor.wasm.i32.store8(outPtr++, digit, 0, 4);
78
+ }
79
+
80
+ Porffor.wasm.i32.store8(outPtr++, 101, 0, 4); // e
81
+ Porffor.wasm.i32.store8(outPtr++, 43, 0, 4); // +
82
+
83
+ l = 0;
84
+ for (; e > 0; l++) {
85
+ Porffor.wasm.i32.store8(Porffor.wasm`local.get ${digits}` + l, e % radix, 0, 4);
86
+ e = Math.trunc(e / radix);
87
+ }
88
+
89
+ digitsPtr = Porffor.wasm`local.get ${digits}` + l;
90
+
91
+ endPtr = outPtr + l;
92
+ while (outPtr < endPtr) {
93
+ let digit: i32 = Porffor.wasm.i32.load8_u(--digitsPtr, 0, 4);
94
+
95
+ if (digit < 10) digit += 48; // 0-9
96
+ else digit += 87; // a-z
97
+
98
+ Porffor.wasm.i32.store8(outPtr++, digit, 0, 4);
99
+ }
100
+
101
+ out.length = outPtr - Porffor.wasm`local.get ${out}`;
102
+
103
+ return out;
104
+ }
105
+
106
+ if (_this < 1e-6) {
107
+ // small exponential
108
+ let decimal: f64 = _this;
109
+
110
+ let e: i32 = 1;
111
+ while (true) {
112
+ decimal *= radix;
113
+
114
+ const intPart: i32 = Math.trunc(decimal);
115
+ if (intPart > 0) {
116
+ if (decimal - intPart < 1e-10) break;
117
+ } else e++;
118
+ }
119
+
120
+ while (decimal > 0) {
121
+ const digit: f64 = decimal % radix;
122
+ decimal = Math.trunc(decimal / radix);
123
+
124
+ Porffor.wasm.i32.store8(Porffor.wasm`local.get ${digits}` + l, digit, 0, 4);
125
+ l++;
126
+ }
127
+
128
+ let digitsPtr: i32 = Porffor.wasm`local.get ${digits}` + l;
129
+ let endPtr: i32 = outPtr + l;
130
+ let dotPlace: i32 = outPtr + 1;
131
+ while (outPtr < endPtr) {
132
+ let digit: i32 = Porffor.wasm.i32.load8_u(--digitsPtr, 0, 4);
133
+
134
+ if (outPtr == dotPlace) {
135
+ Porffor.wasm.i32.store8(outPtr++, 46, 0, 4); // .
136
+ endPtr++;
137
+ }
138
+
139
+ if (digit < 10) digit += 48; // 0-9
140
+ else digit += 87; // a-z
141
+
142
+ Porffor.wasm.i32.store8(outPtr++, digit, 0, 4);
143
+ }
144
+
145
+ Porffor.wasm.i32.store8(outPtr++, 101, 0, 4); // e
146
+ Porffor.wasm.i32.store8(outPtr++, 45, 0, 4); // -
147
+
148
+ l = 0;
149
+ for (; e > 0; l++) {
150
+ Porffor.wasm.i32.store8(Porffor.wasm`local.get ${digits}` + l, e % radix, 0, 4);
151
+ e = Math.trunc(e / radix);
152
+ }
153
+
154
+ digitsPtr = Porffor.wasm`local.get ${digits}` + l;
155
+
156
+ endPtr = outPtr + l;
157
+ while (outPtr < endPtr) {
158
+ let digit: i32 = Porffor.wasm.i32.load8_u(--digitsPtr, 0, 4);
159
+
160
+ if (digit < 10) digit += 48; // 0-9
161
+ else digit += 87; // a-z
162
+
163
+ Porffor.wasm.i32.store8(outPtr++, digit, 0, 4);
164
+ }
165
+
166
+ out.length = outPtr - Porffor.wasm`local.get ${out}`;
167
+
168
+ return out;
169
+ }
170
+ }
171
+
172
+ if (i == 0) {
173
+ Porffor.wasm.i32.store8(Porffor.wasm`local.get ${digits}`, 0, 0, 4);
174
+ l = 1;
175
+ } else {
176
+ for (; i > 0; l++) {
177
+ Porffor.wasm.i32.store8(Porffor.wasm`local.get ${digits}` + l, i % radix, 0, 4);
178
+ i = Math.trunc(i / radix);
179
+ }
180
+ }
181
+
182
+ let digitsPtr: i32 = Porffor.wasm`local.get ${digits}` + l;
183
+ let endPtr: i32 = outPtr + l;
184
+ while (outPtr < endPtr) {
185
+ let digit: i32 = Porffor.wasm.i32.load8_u(--digitsPtr, 0, 4);
186
+
187
+ if (digit < 10) digit += 48; // 0-9
188
+ else digit += 87; // a-z
189
+
190
+ Porffor.wasm.i32.store8(outPtr++, digit, 0, 4);
191
+ }
192
+
193
+ let decimal: f64 = _this - Math.trunc(_this);
194
+ if (decimal > 0) {
195
+ Porffor.wasm.i32.store8(outPtr++, 46, 0, 4); // .
196
+
197
+ decimal += 1;
198
+
199
+ // todo: doesn't handle non-10 radix properly
200
+ let decimalDigits: i32 = 16 - l;
201
+ for (let j: i32 = 0; j < decimalDigits; j++) {
202
+ decimal *= radix;
203
+ }
204
+
205
+ decimal = Math.round(decimal);
206
+
207
+ l = 0;
208
+ let trailing: boolean = true;
209
+ while (decimal > 1) {
210
+ const digit: f64 = decimal % radix;
211
+ decimal = Math.trunc(decimal / radix);
212
+
213
+ if (trailing) {
214
+ if (digit == 0) { // skip trailing 0s
215
+ continue;
216
+ }
217
+ trailing = false;
218
+ }
219
+
220
+ Porffor.wasm.i32.store8(Porffor.wasm`local.get ${digits}` + l, digit, 0, 4);
221
+ l++;
222
+ }
223
+
224
+ digitsPtr = Porffor.wasm`local.get ${digits}` + l;
225
+
226
+ endPtr = outPtr + l;
227
+ while (outPtr < endPtr) {
228
+ let digit: i32 = Porffor.wasm.i32.load8_u(--digitsPtr, 0, 4);
229
+
230
+ if (digit < 10) digit += 48; // 0-9
231
+ else digit += 87; // a-z
232
+
233
+ Porffor.wasm.i32.store8(outPtr++, digit, 0, 4);
234
+ }
235
+ }
236
+
237
+ out.length = outPtr - Porffor.wasm`local.get ${out}`;
238
+
239
+ return out;
240
+ };
241
+
242
+ export const __Number_prototype_toFixed = (_this: number, fractionDigits: number) => {
243
+ let out: bytestring = '';
244
+ let outPtr: i32 = Porffor.wasm`local.get ${out}`;
245
+
246
+ if (!Number.isFinite(_this)) {
247
+ if (Number.isNaN(_this)) out = 'NaN';
248
+ else if (_this == Infinity) out = 'Infinity';
249
+ else out = '-Infinity';
250
+
251
+ return out;
252
+ }
253
+
254
+ fractionDigits |= 0;
255
+ if (fractionDigits < 0 || fractionDigits > 100) {
256
+ throw new RangeError('toFixed() fractionDigits argument must be between 0 and 100');
257
+ }
258
+
259
+ // if negative value
260
+ if (_this < 0) {
261
+ _this = -_this; // turn value positive for later use
262
+ Porffor.wasm.i32.store8(outPtr++, 45, 0, 4); // prepend -
263
+ }
264
+
265
+ let i: f64 = Math.trunc(_this);
266
+
267
+ let digits: bytestring = ''; // byte "array"
268
+
269
+ let l: i32 = 0;
270
+
271
+ if (i == 0) {
272
+ Porffor.wasm.i32.store8(Porffor.wasm`local.get ${digits}`, 0, 0, 4);
273
+ l = 1;
274
+ } else {
275
+ for (; i > 0; l++) {
276
+ Porffor.wasm.i32.store8(Porffor.wasm`local.get ${digits}` + l, i % 10, 0, 4);
277
+ i = Math.trunc(i / 10);
278
+ }
279
+ }
280
+
281
+ let digitsPtr: i32 = Porffor.wasm`local.get ${digits}` + l;
282
+ let endPtr: i32 = outPtr + l;
283
+ while (outPtr < endPtr) {
284
+ let digit: i32 = Porffor.wasm.i32.load8_u(--digitsPtr, 0, 4);
285
+
286
+ if (digit < 10) digit += 48; // 0-9
287
+ else digit += 87; // a-z
288
+
289
+ Porffor.wasm.i32.store8(outPtr++, digit, 0, 4);
290
+ }
291
+
292
+ let decimal: f64 = _this - Math.trunc(_this);
293
+ if (fractionDigits > 0) {
294
+ Porffor.wasm.i32.store8(outPtr++, 46, 0, 4); // .
295
+
296
+ decimal += 1;
297
+
298
+ for (let j: i32 = 0; j < fractionDigits; j++) {
299
+ decimal *= 10;
300
+ }
301
+
302
+ decimal = Math.round(decimal);
303
+
304
+ l = 0;
305
+ while (decimal > 1) {
306
+ const digit: f64 = decimal % 10;
307
+ decimal = Math.trunc(decimal / 10);
308
+
309
+ Porffor.wasm.i32.store8(Porffor.wasm`local.get ${digits}` + l, digit, 0, 4);
310
+ l++;
311
+ }
312
+
313
+ digitsPtr = Porffor.wasm`local.get ${digits}` + l;
314
+
315
+ endPtr = outPtr + l;
316
+ while (outPtr < endPtr) {
317
+ let digit: i32 = Porffor.wasm.i32.load8_u(--digitsPtr, 0, 4);
318
+
319
+ if (digit < 10) digit += 48; // 0-9
320
+ else digit += 87; // a-z
321
+
322
+ Porffor.wasm.i32.store8(outPtr++, digit, 0, 4);
323
+ }
324
+ }
325
+
326
+ out.length = outPtr - Porffor.wasm`local.get ${out}`;
327
+
328
+ return out;
329
+ };
330
+
331
+ // fractionDigits: number|any for rawType check
332
+ export const __Number_prototype_toExponential = (_this: number, fractionDigits: number|any) => {
333
+ let out: bytestring = '';
334
+ let outPtr: i32 = Porffor.wasm`local.get ${out}`;
335
+
336
+ if (!Number.isFinite(_this)) {
337
+ if (Number.isNaN(_this)) out = 'NaN';
338
+ else if (_this == Infinity) out = 'Infinity';
339
+ else out = '-Infinity';
340
+
341
+ return out;
342
+ }
343
+
344
+ if (Porffor.rawType(fractionDigits) != Porffor.TYPES.number) {
345
+ // todo: string to number
346
+ fractionDigits = undefined;
347
+ } else {
348
+ fractionDigits |= 0;
349
+ if (fractionDigits < 0 || fractionDigits > 100) {
350
+ throw new RangeError('toExponential() fractionDigits argument must be between 0 and 100');
351
+ }
352
+ }
353
+
354
+ // if negative value
355
+ if (_this < 0) {
356
+ _this = -_this; // turn value positive for later use
357
+ Porffor.wasm.i32.store8(outPtr++, 45, 0, 4); // prepend -
358
+ }
359
+
360
+ let i: f64 = _this;
361
+
362
+ let digits: bytestring = ''; // byte "array"
363
+
364
+ let l: i32 = 0;
365
+ let e: i32 = 0;
366
+ let digitsPtr: i32;
367
+ let endPtr: i32;
368
+ if (_this == 0) {
369
+ Porffor.wasm.i32.store8(outPtr++, 48, 0, 4); // 0
370
+
371
+ if (fractionDigits > 0) {
372
+ Porffor.wasm.i32.store8(outPtr++, 46, 0, 4); // .
373
+ for (let j: i32 = 0; j < fractionDigits; j++) {
374
+ Porffor.wasm.i32.store8(outPtr++, 48, 0, 4); // 0
375
+ }
376
+ }
377
+
378
+ Porffor.wasm.i32.store8(outPtr++, 101, 0, 4); // e
379
+ Porffor.wasm.i32.store8(outPtr++, 43, 0, 4); // +
380
+ } else if (_this < 1) {
381
+ // small exponential
382
+ if (Porffor.rawType(fractionDigits) != Porffor.TYPES.number) {
383
+ e = 1;
384
+ while (true) {
385
+ i *= 10;
386
+
387
+ const intPart: i32 = Math.trunc(i);
388
+ if (intPart > 0) {
389
+ if (i - intPart < 1e-10) break;
390
+ } else e++;
391
+ }
392
+ } else {
393
+ e = 1;
394
+ let j: i32 = 0;
395
+ while (j <= fractionDigits) {
396
+ i *= 10;
397
+
398
+ const intPart: i32 = Math.trunc(i);
399
+ if (intPart == 0) e++;
400
+ else j++;
401
+ }
402
+ }
403
+
404
+ while (i > 0) {
405
+ const digit: f64 = i % 10;
406
+ i = Math.trunc(i / 10);
407
+
408
+ Porffor.wasm.i32.store8(Porffor.wasm`local.get ${digits}` + l, digit, 0, 4);
409
+ l++;
410
+ }
411
+
412
+ digitsPtr = Porffor.wasm`local.get ${digits}` + l;
413
+ endPtr = outPtr + l;
414
+ let dotPlace: i32 = outPtr + 1;
415
+ while (outPtr < endPtr) {
416
+ let digit: i32 = Porffor.wasm.i32.load8_u(--digitsPtr, 0, 4);
417
+
418
+ if (outPtr == dotPlace) {
419
+ Porffor.wasm.i32.store8(outPtr++, 46, 0, 4); // .
420
+ endPtr++;
421
+ }
422
+
423
+ if (digit < 10) digit += 48; // 0-9
424
+ else digit += 87; // a-z
425
+
426
+ Porffor.wasm.i32.store8(outPtr++, digit, 0, 4);
427
+ }
428
+
429
+ Porffor.wasm.i32.store8(outPtr++, 101, 0, 4); // e
430
+ Porffor.wasm.i32.store8(outPtr++, 45, 0, 4); // -
431
+ } else {
432
+ // large exponential
433
+ e = -1;
434
+ while (i >= 1) {
435
+ i /= 10;
436
+ e++;
437
+ }
438
+
439
+ if (Porffor.rawType(fractionDigits) != Porffor.TYPES.number) {
440
+ while (true) {
441
+ i *= 10;
442
+
443
+ const intPart: i32 = Math.trunc(i);
444
+ if (intPart > 0) {
445
+ if (i - intPart < 1e-10) break;
446
+ } else e++;
447
+ }
448
+ } else {
449
+ // i = _this;
450
+ // if (e >= fractionDigits) {
451
+ // for (let j: i32 = 0; j < e - fractionDigits; j++) {
452
+ // i /= 10;
453
+ // }
454
+ // } else {
455
+ // for (let j: i32 = 0; j < fractionDigits - e; j++) {
456
+ // i *= 10;
457
+ // }
458
+ // }
459
+
460
+ // eg: 1.2345 -> 123.45, if fractionDigits = 2
461
+ for (let j: i32 = 0; j <= fractionDigits; j++) {
462
+ i *= 10;
463
+ }
464
+ }
465
+
466
+ // eg: 123.45 -> 123
467
+ i = Math.round(i);
468
+
469
+ while (i > 0) {
470
+ const digit: f64 = i % 10;
471
+ i = Math.trunc(i / 10);
472
+
473
+ Porffor.wasm.i32.store8(Porffor.wasm`local.get ${digits}` + l, digit, 0, 4);
474
+ l++;
475
+ }
476
+
477
+ digitsPtr = Porffor.wasm`local.get ${digits}` + l;
478
+ endPtr = outPtr + l;
479
+ let dotPlace: i32 = outPtr + 1;
480
+ while (outPtr < endPtr) {
481
+ if (outPtr == dotPlace) {
482
+ Porffor.wasm.i32.store8(outPtr++, 46, 0, 4); // .
483
+ endPtr++;
484
+ }
485
+
486
+ let digit: i32 = Porffor.wasm.i32.load8_u(--digitsPtr, 0, 4);
487
+
488
+ if (digit < 10) digit += 48; // 0-9
489
+ else digit += 87; // a-z
490
+
491
+ Porffor.wasm.i32.store8(outPtr++, digit, 0, 4);
492
+ }
493
+
494
+ Porffor.wasm.i32.store8(outPtr++, 101, 0, 4); // e
495
+ Porffor.wasm.i32.store8(outPtr++, 43, 0, 4); // +
496
+ }
497
+
498
+ if (e == 0) {
499
+ Porffor.wasm.i32.store8(Porffor.wasm`local.get ${digits}`, 0, 0, 4);
500
+ l = 1;
501
+ } else {
502
+ l = 0;
503
+ for (; e > 0; l++) {
504
+ Porffor.wasm.i32.store8(Porffor.wasm`local.get ${digits}` + l, e % 10, 0, 4);
505
+ e = Math.trunc(e / 10);
506
+ }
507
+ }
508
+
509
+ digitsPtr = Porffor.wasm`local.get ${digits}` + l;
510
+
511
+ endPtr = outPtr + l;
512
+ while (outPtr < endPtr) {
513
+ let digit: i32 = Porffor.wasm.i32.load8_u(--digitsPtr, 0, 4);
514
+
515
+ if (digit < 10) digit += 48; // 0-9
516
+ else digit += 87; // a-z
517
+
518
+ Porffor.wasm.i32.store8(outPtr++, digit, 0, 4);
519
+ }
520
+
521
+ out.length = outPtr - Porffor.wasm`local.get ${out}`;
522
+
523
+ return out;
524
+ };
525
+
526
+ // 21.1.3.7 Number.prototype.valueOf ()
527
+ // https://tc39.es/ecma262/#sec-number.prototype.valueof
528
+ export const __Number_prototype_valueOf = (_this: number) => {
529
+ // 1. Return ? ThisNumberValue(this value).
530
+ return _this;
531
+ };
@@ -0,0 +1,6 @@
1
+ import type {} from './porffor.d.ts';
2
+
3
+ export const __Object_prototype_toString = (_this: object) => {
4
+ let out: bytestring = '[object Object]';
5
+ return out;
6
+ };
@@ -0,0 +1,60 @@
1
+ export type i32 = number;
2
+ export type i64 = number;
3
+ export type f64 = number;
4
+ export type bytestring = string;
5
+
6
+ type PorfforGlobal = {
7
+ wasm: {
8
+ (...args: any[]): any;
9
+ i32: {
10
+ load(pointer: any, align: i32, offset: i32): i32;
11
+ store(pointer: any, value: i32, align: i32, offset: i32): i32;
12
+ load8_u(pointer: any, align: i32, offset: i32): i32;
13
+ store8(pointer: any, value: i32, align: i32, offset: i32): i32;
14
+ load16_u(pointer: any, align: i32, offset: i32): i32;
15
+ store16(pointer: any, value: i32, align: i32, offset: i32): i32;
16
+ const(value: i32): i32;
17
+ }
18
+
19
+ f64: {
20
+ load(pointer: any, align: i32, offset: i32): i32;
21
+ store(pointer: any, value: f64, align: i32, offset: i32): f64;
22
+ }
23
+ }
24
+
25
+ randomByte(): i32;
26
+
27
+ type(x: any): bytestring;
28
+ rawType(x: any): i32;
29
+ TYPES: {
30
+ number: i32;
31
+ boolean: i32;
32
+ string: i32;
33
+ undefined: i32;
34
+ object: i32;
35
+ function: i32;
36
+ symbol: i32;
37
+ bigint: i32;
38
+
39
+ array: i32;
40
+ regexp: i32;
41
+ bytestring: i32;
42
+ date: i32;
43
+ set: i32;
44
+ }
45
+
46
+ fastOr(...args: any): boolean;
47
+ fastAnd(...args: any): boolean;
48
+
49
+ s(...args: any): string;
50
+ bs(...args: any): bytestring;
51
+ };
52
+
53
+ declare global {
54
+ const Porffor: PorfforGlobal;
55
+
56
+ type i32 = number;
57
+ type i64 = number;
58
+ type f64 = number;
59
+ type bytestring = string;
60
+ }