aboutsummaryrefslogtreecommitdiff
path: root/misctools
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-07-02 01:34:56 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-07-02 01:36:04 -0700
commit0d9ebb1fd20156f0ce6caea755dadb4b05d032ba (patch)
tree23232bb4f61414ec2590626550cec91725a749be /misctools
parentba2c24e77cac9a47014773646f1c4d9d6aedd64a (diff)
downloadbun-0d9ebb1fd20156f0ce6caea755dadb4b05d032ba.tar.gz
bun-0d9ebb1fd20156f0ce6caea755dadb4b05d032ba.tar.zst
bun-0d9ebb1fd20156f0ce6caea755dadb4b05d032ba.zip
[internal] Make `make jsc-bindings-headers` more reliable
Diffstat (limited to 'misctools')
-rw-r--r--misctools/headers-cleaner.js102
-rw-r--r--misctools/headers-cleaner.zig58
2 files changed, 102 insertions, 58 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"
+);
diff --git a/misctools/headers-cleaner.zig b/misctools/headers-cleaner.zig
deleted file mode 100644
index 4715a2c97..000000000
--- a/misctools/headers-cleaner.zig
+++ /dev/null
@@ -1,58 +0,0 @@
-const std = @import("std");
-
-pub fn main() anyerror!void {
- const headers_zig_file_src: std.builtin.SourceLocation = @src();
- var paths = [_][]const u8{ std.mem.span(headers_zig_file_src.file), "../../src/bun.js/bindings/headers.zig" };
- const headers_zig_file = try std.fs.path.resolve(std.heap.c_allocator, &paths);
- std.debug.print("Writing to {s}", .{headers_zig_file});
- var headers_zig: std.fs.File = try std.fs.openFileAbsolute(headers_zig_file, .{ .mode = .read_write });
- var contents = try headers_zig.readToEndAlloc(std.heap.page_allocator, headers_zig.getEndPos() catch unreachable);
- const last_extern_i = std.mem.lastIndexOf(u8, contents, "pub extern fn") orelse @panic("Expected contents");
- const last_newline = std.mem.indexOf(u8, contents[last_extern_i..], "\n") orelse @panic("Expected newline");
- const to_splice = "// GENERATED CODE - DO NOT MODIFY BY HAND\n\n";
- var new_contents = try std.heap.page_allocator.alloc(u8, contents.len + to_splice.len);
- std.mem.copy(u8, new_contents, to_splice);
- std.mem.copy(u8, new_contents[to_splice.len..], contents);
- var i: usize = to_splice.len;
- var remainder = new_contents[i..];
- while (remainder.len > 0) {
- i = (std.mem.indexOf(u8, remainder, "\npub const struct_b") orelse break);
- var begin = remainder[i..];
-
- const end_struct = (std.mem.indexOf(u8, begin, "\n};\n") orelse break) + "\n};\n".len;
-
- std.mem.set(u8, begin[1 .. end_struct + 3], ' ');
- remainder = begin[end_struct..];
- }
- i = to_splice.len;
- remainder = new_contents[i..];
- while (remainder.len > 0) {
- i = (std.mem.indexOf(u8, remainder, "\npub const struct_") orelse break);
- var begin = remainder[i..];
- var end_struct = (std.mem.indexOf(u8, begin, "opaque {};") orelse break);
- end_struct += (std.mem.indexOf(u8, begin[end_struct..], "\n") orelse break);
- i = 0;
-
- std.mem.set(u8, begin[1..end_struct], ' ');
- remainder = begin[end_struct..];
- }
-
- const HARDCODE = [_][]const u8{
- "[*c][*c]JSC__Exception",
- "*?*JSC__Exception ",
- "[*c]?*anyopaque",
- "[*c]*anyopaque",
- };
- i = 0;
- while (i < HARDCODE.len) : (i += 2) {
- _ = std.mem.replace(u8, new_contents, HARDCODE[i], HARDCODE[i + 1], new_contents);
- }
-
- const js_value_start = std.mem.indexOf(u8, new_contents, "pub const JSC__JSValue") orelse unreachable;
- const js_value_end = std.mem.indexOf(u8, new_contents[js_value_start..], "\n") orelse unreachable;
- std.mem.set(u8, new_contents[js_value_start..][0..js_value_end], ' ');
-
- try headers_zig.seekTo(0);
- try headers_zig.writeAll(new_contents);
- try headers_zig.setEndPos(last_newline + last_extern_i + to_splice.len);
-}