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.
- package/LICENSE +201 -0
- package/NOTICE +94 -0
- package/README.md +114 -0
- package/bin/asc.js +35 -0
- package/bin/asinit.js +468 -0
- package/dist/asc.d.ts +4 -0
- package/dist/toilscript.d.ts +4 -0
- package/dist/transform.cjs +1 -0
- package/dist/transform.d.ts +1 -0
- package/dist/transform.js +1 -0
- package/lib/binaryen.d.ts +2 -0
- package/lib/binaryen.js +2 -0
- package/package.json +114 -0
- package/std/README.md +6 -0
- package/std/assembly/array.ts +550 -0
- package/std/assembly/arraybuffer.ts +77 -0
- package/std/assembly/atomics.ts +127 -0
- package/std/assembly/bindings/asyncify.ts +16 -0
- package/std/assembly/bindings/dom.ts +291 -0
- package/std/assembly/bindings/node.ts +6 -0
- package/std/assembly/bitflags.ts +53 -0
- package/std/assembly/builtins.ts +2650 -0
- package/std/assembly/byteslice.ts +177 -0
- package/std/assembly/compat.ts +2 -0
- package/std/assembly/console.ts +42 -0
- package/std/assembly/crypto.ts +9 -0
- package/std/assembly/dataview.ts +181 -0
- package/std/assembly/date.ts +375 -0
- package/std/assembly/diagnostics.ts +11 -0
- package/std/assembly/encoding.ts +151 -0
- package/std/assembly/endian.ts +45 -0
- package/std/assembly/error.ts +44 -0
- package/std/assembly/fixedarray.ts +173 -0
- package/std/assembly/fixedmap.ts +326 -0
- package/std/assembly/fixedset.ts +275 -0
- package/std/assembly/function.ts +42 -0
- package/std/assembly/index.d.ts +2891 -0
- package/std/assembly/iterator.ts +35 -0
- package/std/assembly/map.ts +269 -0
- package/std/assembly/math.ts +3289 -0
- package/std/assembly/memory.ts +123 -0
- package/std/assembly/number.ts +388 -0
- package/std/assembly/object.ts +36 -0
- package/std/assembly/performance.ts +9 -0
- package/std/assembly/pointer.ts +80 -0
- package/std/assembly/polyfills.ts +27 -0
- package/std/assembly/process.ts +50 -0
- package/std/assembly/reference.ts +48 -0
- package/std/assembly/regexp.ts +12 -0
- package/std/assembly/rt/README.md +83 -0
- package/std/assembly/rt/common.ts +81 -0
- package/std/assembly/rt/index-incremental.ts +2 -0
- package/std/assembly/rt/index-memory.ts +1 -0
- package/std/assembly/rt/index-minimal.ts +2 -0
- package/std/assembly/rt/index-stub.ts +1 -0
- package/std/assembly/rt/index.d.ts +37 -0
- package/std/assembly/rt/itcms.ts +419 -0
- package/std/assembly/rt/memory-runtime.ts +94 -0
- package/std/assembly/rt/rtrace.ts +15 -0
- package/std/assembly/rt/stub.ts +133 -0
- package/std/assembly/rt/tcms.ts +254 -0
- package/std/assembly/rt/tlsf.ts +592 -0
- package/std/assembly/rt.ts +90 -0
- package/std/assembly/set.ts +225 -0
- package/std/assembly/shared/feature.ts +68 -0
- package/std/assembly/shared/runtime.ts +13 -0
- package/std/assembly/shared/target.ts +11 -0
- package/std/assembly/shared/tsconfig.json +11 -0
- package/std/assembly/shared/typeinfo.ts +72 -0
- package/std/assembly/staticarray.ts +423 -0
- package/std/assembly/string.ts +850 -0
- package/std/assembly/symbol.ts +114 -0
- package/std/assembly/table.ts +16 -0
- package/std/assembly/tsconfig.json +6 -0
- package/std/assembly/typedarray.ts +1954 -0
- package/std/assembly/uri.ts +17 -0
- package/std/assembly/util/bytes.ts +107 -0
- package/std/assembly/util/casemap.ts +497 -0
- package/std/assembly/util/error.ts +58 -0
- package/std/assembly/util/hash.ts +117 -0
- package/std/assembly/util/math.ts +1922 -0
- package/std/assembly/util/memory.ts +290 -0
- package/std/assembly/util/number.ts +873 -0
- package/std/assembly/util/sort.ts +313 -0
- package/std/assembly/util/string.ts +1202 -0
- package/std/assembly/util/uri.ts +275 -0
- package/std/assembly/vector.ts +4 -0
- package/std/assembly.json +16 -0
- package/std/portable/index.d.ts +461 -0
- package/std/portable/index.js +416 -0
- package/std/portable.json +11 -0
- package/std/types/assembly/index.d.ts +1 -0
- package/std/types/assembly/package.json +3 -0
- package/std/types/portable/index.d.ts +1 -0
- package/std/types/portable/package.json +3 -0
- package/tsconfig-base.json +13 -0
- package/util/README.md +23 -0
- package/util/browser/fs.js +1 -0
- package/util/browser/module.js +5 -0
- package/util/browser/path.js +520 -0
- package/util/browser/process.js +59 -0
- package/util/browser/url.js +23 -0
- package/util/cpu.d.ts +9 -0
- package/util/cpu.js +42 -0
- package/util/find.d.ts +6 -0
- package/util/find.js +20 -0
- package/util/node.d.ts +21 -0
- package/util/node.js +34 -0
- package/util/options.d.ts +70 -0
- package/util/options.js +262 -0
- package/util/terminal.d.ts +52 -0
- package/util/terminal.js +35 -0
- package/util/text.d.ts +26 -0
- package/util/text.js +114 -0
- package/util/tsconfig.json +9 -0
- package/util/web.d.ts +11 -0
- 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
|
+
}
|