toilscript 0.0.1

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 (117) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +94 -0
  3. package/README.md +114 -0
  4. package/bin/asc.js +35 -0
  5. package/bin/asinit.js +468 -0
  6. package/dist/asc.d.ts +4 -0
  7. package/dist/toilscript.d.ts +4 -0
  8. package/dist/transform.cjs +1 -0
  9. package/dist/transform.d.ts +1 -0
  10. package/dist/transform.js +1 -0
  11. package/lib/binaryen.d.ts +2 -0
  12. package/lib/binaryen.js +2 -0
  13. package/package.json +114 -0
  14. package/std/README.md +6 -0
  15. package/std/assembly/array.ts +550 -0
  16. package/std/assembly/arraybuffer.ts +77 -0
  17. package/std/assembly/atomics.ts +127 -0
  18. package/std/assembly/bindings/asyncify.ts +16 -0
  19. package/std/assembly/bindings/dom.ts +291 -0
  20. package/std/assembly/bindings/node.ts +6 -0
  21. package/std/assembly/bitflags.ts +53 -0
  22. package/std/assembly/builtins.ts +2650 -0
  23. package/std/assembly/byteslice.ts +177 -0
  24. package/std/assembly/compat.ts +2 -0
  25. package/std/assembly/console.ts +42 -0
  26. package/std/assembly/crypto.ts +9 -0
  27. package/std/assembly/dataview.ts +181 -0
  28. package/std/assembly/date.ts +375 -0
  29. package/std/assembly/diagnostics.ts +11 -0
  30. package/std/assembly/encoding.ts +151 -0
  31. package/std/assembly/endian.ts +45 -0
  32. package/std/assembly/error.ts +44 -0
  33. package/std/assembly/fixedarray.ts +173 -0
  34. package/std/assembly/fixedmap.ts +326 -0
  35. package/std/assembly/fixedset.ts +275 -0
  36. package/std/assembly/function.ts +42 -0
  37. package/std/assembly/index.d.ts +2891 -0
  38. package/std/assembly/iterator.ts +35 -0
  39. package/std/assembly/map.ts +269 -0
  40. package/std/assembly/math.ts +3289 -0
  41. package/std/assembly/memory.ts +123 -0
  42. package/std/assembly/number.ts +388 -0
  43. package/std/assembly/object.ts +36 -0
  44. package/std/assembly/performance.ts +9 -0
  45. package/std/assembly/pointer.ts +80 -0
  46. package/std/assembly/polyfills.ts +27 -0
  47. package/std/assembly/process.ts +50 -0
  48. package/std/assembly/reference.ts +48 -0
  49. package/std/assembly/regexp.ts +12 -0
  50. package/std/assembly/rt/README.md +83 -0
  51. package/std/assembly/rt/common.ts +81 -0
  52. package/std/assembly/rt/index-incremental.ts +2 -0
  53. package/std/assembly/rt/index-memory.ts +1 -0
  54. package/std/assembly/rt/index-minimal.ts +2 -0
  55. package/std/assembly/rt/index-stub.ts +1 -0
  56. package/std/assembly/rt/index.d.ts +37 -0
  57. package/std/assembly/rt/itcms.ts +419 -0
  58. package/std/assembly/rt/memory-runtime.ts +94 -0
  59. package/std/assembly/rt/rtrace.ts +15 -0
  60. package/std/assembly/rt/stub.ts +133 -0
  61. package/std/assembly/rt/tcms.ts +254 -0
  62. package/std/assembly/rt/tlsf.ts +592 -0
  63. package/std/assembly/rt.ts +90 -0
  64. package/std/assembly/set.ts +225 -0
  65. package/std/assembly/shared/feature.ts +68 -0
  66. package/std/assembly/shared/runtime.ts +13 -0
  67. package/std/assembly/shared/target.ts +11 -0
  68. package/std/assembly/shared/tsconfig.json +11 -0
  69. package/std/assembly/shared/typeinfo.ts +72 -0
  70. package/std/assembly/staticarray.ts +423 -0
  71. package/std/assembly/string.ts +850 -0
  72. package/std/assembly/symbol.ts +114 -0
  73. package/std/assembly/table.ts +16 -0
  74. package/std/assembly/tsconfig.json +6 -0
  75. package/std/assembly/typedarray.ts +1954 -0
  76. package/std/assembly/uri.ts +17 -0
  77. package/std/assembly/util/bytes.ts +107 -0
  78. package/std/assembly/util/casemap.ts +497 -0
  79. package/std/assembly/util/error.ts +58 -0
  80. package/std/assembly/util/hash.ts +117 -0
  81. package/std/assembly/util/math.ts +1922 -0
  82. package/std/assembly/util/memory.ts +290 -0
  83. package/std/assembly/util/number.ts +873 -0
  84. package/std/assembly/util/sort.ts +313 -0
  85. package/std/assembly/util/string.ts +1202 -0
  86. package/std/assembly/util/uri.ts +275 -0
  87. package/std/assembly/vector.ts +4 -0
  88. package/std/assembly.json +16 -0
  89. package/std/portable/index.d.ts +461 -0
  90. package/std/portable/index.js +416 -0
  91. package/std/portable.json +11 -0
  92. package/std/types/assembly/index.d.ts +1 -0
  93. package/std/types/assembly/package.json +3 -0
  94. package/std/types/portable/index.d.ts +1 -0
  95. package/std/types/portable/package.json +3 -0
  96. package/tsconfig-base.json +13 -0
  97. package/util/README.md +23 -0
  98. package/util/browser/fs.js +1 -0
  99. package/util/browser/module.js +5 -0
  100. package/util/browser/path.js +520 -0
  101. package/util/browser/process.js +59 -0
  102. package/util/browser/url.js +23 -0
  103. package/util/cpu.d.ts +9 -0
  104. package/util/cpu.js +42 -0
  105. package/util/find.d.ts +6 -0
  106. package/util/find.js +20 -0
  107. package/util/node.d.ts +21 -0
  108. package/util/node.js +34 -0
  109. package/util/options.d.ts +70 -0
  110. package/util/options.js +262 -0
  111. package/util/terminal.d.ts +52 -0
  112. package/util/terminal.js +35 -0
  113. package/util/text.d.ts +26 -0
  114. package/util/text.js +114 -0
  115. package/util/tsconfig.json +9 -0
  116. package/util/web.d.ts +11 -0
  117. package/util/web.js +33 -0
@@ -0,0 +1,117 @@
1
+ export function HASH<T>(key: T): u32 {
2
+ if (isString<T>()) {
3
+ return hashStr(changetype<string>(key));
4
+ } else if (isReference<T>()) {
5
+ if (sizeof<T>() == 4) return hash32(changetype<u32>(key));
6
+ if (sizeof<T>() == 8) return hash64(changetype<u64>(key));
7
+ } else if (isFloat<T>()) {
8
+ if (sizeof<T>() == 4) return hash32(reinterpret<u32>(f32(key)));
9
+ if (sizeof<T>() == 8) return hash64(reinterpret<u64>(f64(key)));
10
+ } else {
11
+ if (sizeof<T>() <= 4) return hash32(u32(key), sizeof<T>());
12
+ if (sizeof<T>() == 8) return hash64(u64(key));
13
+ }
14
+ return unreachable();
15
+ }
16
+
17
+ // XXHash 32-bit as a starting point, see: https://cyan4973.github.io/xxHash
18
+
19
+ // primes
20
+ // @ts-ignore: decorator
21
+ @inline const XXH32_P1: u32 = 2654435761;
22
+ // @ts-ignore: decorator
23
+ @inline const XXH32_P2: u32 = 2246822519;
24
+ // @ts-ignore: decorator
25
+ @inline const XXH32_P3: u32 = 3266489917;
26
+ // @ts-ignore: decorator
27
+ @inline const XXH32_P4: u32 = 668265263;
28
+ // @ts-ignore: decorator
29
+ @inline const XXH32_P5: u32 = 374761393;
30
+ // @ts-ignore: decorator
31
+ @inline const XXH32_SEED: u32 = 0;
32
+
33
+ // @ts-ignore: decorator
34
+ @inline
35
+ function hash32(key: u32, len: u32 = 4): u32 {
36
+ let h: u32 = XXH32_SEED + XXH32_P5 + len;
37
+ h += key * XXH32_P3;
38
+ h = rotl(h, 17) * XXH32_P4;
39
+ h ^= h >> 15;
40
+ h *= XXH32_P2;
41
+ h ^= h >> 13;
42
+ h *= XXH32_P3;
43
+ h ^= h >> 16;
44
+ return h;
45
+ }
46
+
47
+ // @ts-ignore: decorator
48
+ @inline
49
+ function hash64(key: u64): u32 {
50
+ let h: u32 = XXH32_SEED + XXH32_P5 + 8;
51
+ h += <u32>key * XXH32_P3;
52
+ h = rotl(h, 17) * XXH32_P4;
53
+ h += <u32>(key >> 32) * XXH32_P3;
54
+ h = rotl(h, 17) * XXH32_P4;
55
+ h ^= h >> 15;
56
+ h *= XXH32_P2;
57
+ h ^= h >> 13;
58
+ h *= XXH32_P3;
59
+ h ^= h >> 16;
60
+ return h;
61
+ }
62
+
63
+ // @ts-ignore: decorator
64
+ @inline
65
+ function mix(h: u32, key: u32): u32 {
66
+ return rotl(h + key * XXH32_P2, 13) * XXH32_P1;
67
+ }
68
+
69
+ // @ts-ignore: decorator
70
+ @inline
71
+ function hashStr(key: string): u32 {
72
+ if (changetype<usize>(key) == 0) return XXH32_SEED;
73
+
74
+ let h: u32 = key.length << 1;
75
+ let len: usize = h;
76
+ let pos = changetype<usize>(key);
77
+
78
+ if (len >= 16) {
79
+ let s1 = XXH32_SEED + XXH32_P1 + XXH32_P2;
80
+ let s2 = XXH32_SEED + XXH32_P2;
81
+ let s3 = XXH32_SEED;
82
+ let s4 = XXH32_SEED - XXH32_P1;
83
+
84
+ let end = len + pos - 16;
85
+ while (pos <= end) {
86
+ s1 = mix(s1, load<u32>(pos ));
87
+ s2 = mix(s2, load<u32>(pos, 4));
88
+ s3 = mix(s3, load<u32>(pos, 8));
89
+ s4 = mix(s4, load<u32>(pos, 12));
90
+ pos += 16;
91
+ }
92
+ h += rotl(s1, 1) + rotl(s2, 7) + rotl(s3, 12) + rotl(s4, 18);
93
+ } else {
94
+ h += XXH32_SEED + XXH32_P5;
95
+ }
96
+
97
+ let end = changetype<usize>(key) + len - 4;
98
+ while (pos <= end) {
99
+ h += load<u32>(pos) * XXH32_P3;
100
+ h = rotl(h, 17) * XXH32_P4;
101
+ pos += 4;
102
+ }
103
+
104
+ end = changetype<usize>(key) + len;
105
+ while (pos < end) {
106
+ h += <u32>load<u8>(pos) * XXH32_P5;
107
+ h = rotl(h, 11) * XXH32_P1;
108
+ pos++;
109
+ }
110
+
111
+ h ^= h >> 15;
112
+ h *= XXH32_P2;
113
+ h ^= h >> 13;
114
+ h *= XXH32_P3;
115
+ h ^= h >> 16;
116
+ return h;
117
+ }