1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
// TODO: move this file somewhere else. it doesnt make sense in src/js/
// it generates C++ code not related to javascript at all
import { spawn } from "bun";
import path from "../node/path";
const STATIC_HASH_TABLES = [
//
"src/bun.js/bindings/BunObject.cpp",
"src/bun.js/bindings/ZigGlobalObject.lut.txt",
"src/bun.js/bindings/JSBuffer.cpp",
"src/bun.js/bindings/Process.cpp",
"src/bun.js/bindings/ProcessBindingConstants.cpp",
"src/bun.js/bindings/ProcessBindingNatives.cpp",
];
console.time("Creating static hash tables...");
const create_hash_table = path.join(import.meta.dir, "../../../src/bun.js/scripts/create_hash_table");
if (!create_hash_table) {
console.warn("Could not find create_hash_table executable. Run `bun i` or clone webkit to build static hash tables");
process.exit(1);
}
await Promise.all(
STATIC_HASH_TABLES.map(async cpp => {
cpp = path.join(import.meta.dir, "../../../", cpp);
const { stdout, exited } = spawn({
cmd: [create_hash_table, cpp],
stdout: "pipe",
stderr: "inherit",
});
await exited;
let str = await new Response(stdout).text();
str = str.replaceAll(/^\/\/.*$/gm, "");
str = str.replaceAll(/^#include.*$/gm, "");
str = str.replaceAll(`namespace JSC {`, "");
str = str.replaceAll(`} // namespace JSC`, "");
str = "// File generated via `make static-hash-table` / `make cpp`\n" + str.trim() + "\n";
await Bun.write(cpp.replace(/\.cpp$/, ".lut.h").replace(/(\.lut)?\.txt$/, ".lut.h"), str);
console.log("Wrote", path.relative(process.cwd(), cpp.replace(/\.cpp$/, ".lut.h")));
}),
);
console.timeEnd("Creating static hash tables...");
|