@scriptc/compiler 0.0.6 → 0.0.7
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/dist/backend/emission/emitter.js +7 -0
- package/dist/backend/emission/emitter.js.map +1 -1
- package/dist/backend/llvm/emitter.js +11 -2
- package/dist/backend/llvm/emitter.js.map +1 -1
- package/dist/diagnostics/diagnostic.d.ts +6 -0
- package/dist/diagnostics/diagnostic.js +16 -0
- package/dist/diagnostics/diagnostic.js.map +1 -1
- package/dist/frontend/lib-contract.d.ts +96 -0
- package/dist/frontend/lib-contract.js +291 -0
- package/dist/frontend/lib-contract.js.map +1 -0
- package/dist/frontend/lowering/lower-exprs.js +19 -4
- package/dist/frontend/lowering/lower-exprs.js.map +1 -1
- package/dist/frontend/lowering/lower-stmts.js +9 -1
- package/dist/frontend/lowering/lower-stmts.js.map +1 -1
- package/dist/index.d.ts +10 -2
- package/dist/index.js +60 -1
- package/dist/index.js.map +1 -1
- package/dist/ir/nodes.d.ts +20 -0
- package/dist/ir/nodes.js +68 -0
- package/dist/ir/nodes.js.map +1 -1
- package/dist/library/profile.d.ts +36 -0
- package/dist/library/profile.js +105 -3
- package/dist/library/profile.js.map +1 -1
- package/dist/library/sidecar-validate.d.ts +4 -0
- package/dist/library/sidecar-validate.js +506 -0
- package/dist/library/sidecar-validate.js.map +1 -0
- package/dist/library/sidecar.d.ts +191 -0
- package/dist/library/sidecar.js +568 -0
- package/dist/library/sidecar.js.map +1 -0
- package/dist/library/wyhash.d.ts +12 -0
- package/dist/library/wyhash.js +116 -0
- package/dist/library/wyhash.js.map +1 -0
- package/package.json +2 -2
- package/surface-manifest.json +1 -1
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/* Wyhash-64 (final_version_3) over BigInt — the sidecar schema's one
|
|
2
|
+
* worked hashing definition. Both identity values the contract sidecar
|
|
3
|
+
* carries ride this function:
|
|
4
|
+
*
|
|
5
|
+
* - `build_id`: seed 0xb11d1d00 over the length-prefixed stream of
|
|
6
|
+
* (compiler version, profile bytes, sorted module graph) — the
|
|
7
|
+
* build-pairing fence, deliberately compiler-release-salted.
|
|
8
|
+
* - `source_hash` under the "module-graph" contract: seed 0xc0de5eed
|
|
9
|
+
* over the length-prefixed sorted module graph alone — the freshness
|
|
10
|
+
* hash, deliberately stable across compiler releases for identical
|
|
11
|
+
* sources.
|
|
12
|
+
*
|
|
13
|
+
* Every variable-length input is length-prefixed (u64 little-endian byte
|
|
14
|
+
* count, then the bytes) so no concatenation of inputs is ambiguous; the
|
|
15
|
+
* hash runs once over the whole framed stream. Determinism is the entire
|
|
16
|
+
* point: no clock, no environment, no machine identity anywhere near the
|
|
17
|
+
* inputs. */
|
|
18
|
+
const MASK64 = (1n << 64n) - 1n;
|
|
19
|
+
const P0 = 0xa0761d6478bd642fn;
|
|
20
|
+
const P1 = 0xe7037ed1a0b428dbn;
|
|
21
|
+
const P2 = 0x8ebc6af09c88c6e3n;
|
|
22
|
+
const P3 = 0x589965cc75374cc3n;
|
|
23
|
+
/** 64x64→128 multiply, xor-folded (wyhash's _wymix). */
|
|
24
|
+
function wymix(a, b) {
|
|
25
|
+
const r = (a & MASK64) * (b & MASK64);
|
|
26
|
+
return ((r & MASK64) ^ (r >> 64n)) & MASK64;
|
|
27
|
+
}
|
|
28
|
+
function wyr8(d, o) {
|
|
29
|
+
let v = 0n;
|
|
30
|
+
for (let i = 7; i >= 0; i--)
|
|
31
|
+
v = (v << 8n) | BigInt(d[o + i]);
|
|
32
|
+
return v;
|
|
33
|
+
}
|
|
34
|
+
function wyr4(d, o) {
|
|
35
|
+
return BigInt(d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) | (BigInt(d[o + 3]) << 24n);
|
|
36
|
+
}
|
|
37
|
+
function wyr3(d, o, k) {
|
|
38
|
+
return BigInt((d[o] << 16) | (d[o + (k >> 1)] << 8) | d[o + k - 1]);
|
|
39
|
+
}
|
|
40
|
+
/** wyhash final_version_3 of `data` under `seed` — a u64. */
|
|
41
|
+
export function wyhash64(data, seed) {
|
|
42
|
+
const len = data.length;
|
|
43
|
+
seed = (seed ^ P0) & MASK64;
|
|
44
|
+
let a;
|
|
45
|
+
let b;
|
|
46
|
+
if (len <= 16) {
|
|
47
|
+
if (len >= 4) {
|
|
48
|
+
a = (wyr4(data, 0) << 32n) | wyr4(data, (len >> 3) << 2);
|
|
49
|
+
b = (wyr4(data, len - 4) << 32n) | wyr4(data, len - 4 - ((len >> 3) << 2));
|
|
50
|
+
}
|
|
51
|
+
else if (len > 0) {
|
|
52
|
+
a = wyr3(data, 0, len);
|
|
53
|
+
b = 0n;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
a = 0n;
|
|
57
|
+
b = 0n;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
let i = len;
|
|
62
|
+
let p = 0;
|
|
63
|
+
if (i > 48) {
|
|
64
|
+
let see1 = seed;
|
|
65
|
+
let see2 = seed;
|
|
66
|
+
do {
|
|
67
|
+
seed = wymix(wyr8(data, p) ^ P1, wyr8(data, p + 8) ^ seed);
|
|
68
|
+
see1 = wymix(wyr8(data, p + 16) ^ P2, wyr8(data, p + 24) ^ see1);
|
|
69
|
+
see2 = wymix(wyr8(data, p + 32) ^ P3, wyr8(data, p + 40) ^ see2);
|
|
70
|
+
p += 48;
|
|
71
|
+
i -= 48;
|
|
72
|
+
} while (i > 48);
|
|
73
|
+
seed = seed ^ see1 ^ see2;
|
|
74
|
+
}
|
|
75
|
+
while (i > 16) {
|
|
76
|
+
seed = wymix(wyr8(data, p) ^ P1, wyr8(data, p + 8) ^ seed);
|
|
77
|
+
i -= 16;
|
|
78
|
+
p += 16;
|
|
79
|
+
}
|
|
80
|
+
a = wyr8(data, p + i - 16);
|
|
81
|
+
b = wyr8(data, p + i - 8);
|
|
82
|
+
}
|
|
83
|
+
return wymix(P1 ^ BigInt(len), wymix(a ^ P1, b ^ seed));
|
|
84
|
+
}
|
|
85
|
+
/** Frame variable-length inputs unambiguously: each chunk is prefixed by
|
|
86
|
+
* its u64 little-endian byte count. */
|
|
87
|
+
export function lengthPrefixedStream(chunks) {
|
|
88
|
+
let total = 0;
|
|
89
|
+
for (const c of chunks)
|
|
90
|
+
total += 8 + c.length;
|
|
91
|
+
const out = new Uint8Array(total);
|
|
92
|
+
let o = 0;
|
|
93
|
+
for (const c of chunks) {
|
|
94
|
+
let n = c.length;
|
|
95
|
+
for (let i = 0; i < 8; i++) {
|
|
96
|
+
out[o + i] = n & 0xff;
|
|
97
|
+
// Length fits a double exactly for any real source tree; shift via
|
|
98
|
+
// division to stay integer-exact past 2^31.
|
|
99
|
+
n = Math.floor(n / 256);
|
|
100
|
+
}
|
|
101
|
+
o += 8;
|
|
102
|
+
out.set(c, o);
|
|
103
|
+
o += c.length;
|
|
104
|
+
}
|
|
105
|
+
return out;
|
|
106
|
+
}
|
|
107
|
+
/** A u64 as the schema's hash encoding: exactly 16 lowercase hex digits. */
|
|
108
|
+
export function hex16(v) {
|
|
109
|
+
return (v & MASK64).toString(16).padStart(16, "0");
|
|
110
|
+
}
|
|
111
|
+
/** The `build_id` seed of the schema's worked definition. */
|
|
112
|
+
export const BUILD_ID_SEED = 0xb11d1d00n;
|
|
113
|
+
/** The "module-graph" source-hash contract's seed (profile-selectable
|
|
114
|
+
* contract; scriptc v1 implements exactly this one). */
|
|
115
|
+
export const SOURCE_HASH_SEED = 0xc0de5eedn;
|
|
116
|
+
//# sourceMappingURL=wyhash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wyhash.js","sourceRoot":"","sources":["../../src/library/wyhash.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scriptc/compiler",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"description": "The scriptc compiler — TypeScript/JavaScript frontend, typed IR, LLVM and C backends",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://scriptc.dev",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"typescript": "7.0.2",
|
|
32
32
|
"typescript5": "npm:typescript@5.9.3",
|
|
33
|
-
"@scriptc/runtime": "0.0.
|
|
33
|
+
"@scriptc/runtime": "0.0.7"
|
|
34
34
|
},
|
|
35
35
|
"scripts": {
|
|
36
36
|
"build": "node node_modules/typescript5/bin/tsc -p tsconfig.json"
|
package/surface-manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"compilerVersion": "0.0.
|
|
3
|
+
"compilerVersion": "0.0.7",
|
|
4
4
|
"coverage": [
|
|
5
5
|
"Entries are projected mechanically from the compiler's own decision tables: the diagnostics registry, the unsupported-syntax dispatch tables, the stdlib and node-builtin lowering tables, and the supported-builtin-module list. Nothing is hand-maintained; the manifest regenerates byte-identically from the source tree at this version.",
|
|
6
6
|
"Absence from this manifest means 'not projected', never 'unsupported'. Surfaces lowered through dedicated code paths rather than tables are not yet projected: console, JSON, process, Promise/async and the timer surface, the net/http/tls/https/dgram/dns/assert/test/stream/readline module member surfaces, template literals, the regex slice, and global functions (parseInt, parseFloat, isNaN, isFinite).",
|