diff options
author | 2022-07-02 01:34:56 -0700 | |
---|---|---|
committer | 2022-07-02 01:36:04 -0700 | |
commit | 0d9ebb1fd20156f0ce6caea755dadb4b05d032ba (patch) | |
tree | 23232bb4f61414ec2590626550cec91725a749be /misctools/headers-cleaner.js | |
parent | ba2c24e77cac9a47014773646f1c4d9d6aedd64a (diff) | |
download | bun-0d9ebb1fd20156f0ce6caea755dadb4b05d032ba.tar.gz bun-0d9ebb1fd20156f0ce6caea755dadb4b05d032ba.tar.zst bun-0d9ebb1fd20156f0ce6caea755dadb4b05d032ba.zip |
[internal] Make `make jsc-bindings-headers` more reliable
Diffstat (limited to 'misctools/headers-cleaner.js')
-rw-r--r-- | misctools/headers-cleaner.js | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/misctools/headers-cleaner.js b/misctools/headers-cleaner.js new file mode 100644 index 000000000..10824d916 --- /dev/null +++ b/misctools/headers-cleaner.js @@ -0,0 +1,102 @@ +// this file is intended to be runnable both from node and bun +var { readFileSync, writeFileSync } = require("fs"); +var { join } = require("path"); + +const destination = join(__dirname, "../src/bun.js/bindings/headers.zig"); +const replacements = join( + __dirname, + "../src/bun.js/bindings/headers-replacements.zig" +); + +console.log("Writing to", destination); +var output = "// GENERATED CODE - DO NOT MODIFY BY HAND\n\n"; +var input = readFileSync(destination, "utf8"); + +const first_extern = input.indexOf("extern fn"); +const first_extern_line = input.indexOf("\n", first_extern - 128); +const last_extern_fn = input.lastIndexOf("extern"); +const last_extern_fn_line = input.indexOf("\n", last_extern_fn); +const keep = ( + input.substring(0, first_extern_line) + input.substring(last_extern_fn_line) +) + .split("\n") + .filter( + (a) => + /const (JSC|WTF|Web)_/gi.test(a) && + !a.includes("JSValue") && + !a.includes("CatchScope") + ) + .join("\n") + .trim(); + +input = keep + input.slice(first_extern_line, last_extern_fn_line); +input = input.replaceAll("*WebCore__", "*bindings."); +input = input.replaceAll("*JSC__", "*bindings."); +input = input.replaceAll("[*c] JSC__", "[*c]bindings."); +input = input.replaceAll("[*c] const JSC__", "[*c]const bindings."); +input = input.replaceAll( + "[*c]Inspector__ScriptArguments", + "[*c]bindings.ScriptArguments" +); + +input = input + .replaceAll("VirtualMachine", "bindings.VirtualMachine") + .replaceAll("bindings.bindings.VirtualMachine", "bindings.VirtualMachine"); + +const hardcode = { + "[*c][*c]JSC__Exception": "*?*JSC__Exception ", + "[*c]?*anyopaque": "[*c]*anyopaque", + "[*c]JSC__JSGlobalObject": "?*JSC__JSGlobalObject", +}; + +for (let key in hardcode) { + const value = hardcode[key]; + input = input.replaceAll(key, value); +} + +const remove = [ + "pub const __darwin", + "pub const _", + "pub const __builtin", + "pub const int", + "pub const INT", + "pub const uint", + "pub const UINT", + "pub const WCHAR", + "pub const wchar", + "pub const intmax", + "pub const INTMAX", + "pub const uintmax", + "pub const UINTMAX", + "pub const max_align_t", + "pub const ZigErrorCode", + "pub const JSClassRef", + "pub const __", +]; +var lines = input.split("\n"); +for (let prefix of remove) { + for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + if (line.startsWith(prefix)) { + lines[i] = ""; + } + } +} +for (let i = 0; i < lines.length; i++) { + const line = lines[i]; + if (line.includes("struct_")) { + lines[i] = ""; + continue; + } +} +input = lines.filter((a) => a.length > 0).join("\n"); + +writeFileSync( + destination, + output + + "\n" + + readFileSync(replacements, "utf8").trim() + + "\n" + + input.trim() + + "\n" +); |