porffor 0.2.0-fde989a → 0.14.0-4057a18e9

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