aboutsummaryrefslogtreecommitdiff
path: root/src/main_javascript.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-08-03 19:04:24 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-08-03 19:04:24 -0700
commit58fd17867d661a8eb162efec7d39a6ab1c0fd6fd (patch)
tree1ad2e204087b8b77900d7a26147c58752560b86d /src/main_javascript.zig
parent3b684308c3153a6ca84faa0fecc49b76bbf941a8 (diff)
downloadbun-58fd17867d661a8eb162efec7d39a6ab1c0fd6fd.tar.gz
bun-58fd17867d661a8eb162efec7d39a6ab1c0fd6fd.tar.zst
bun-58fd17867d661a8eb162efec7d39a6ab1c0fd6fd.zip
Threader
Former-commit-id: a13dd6402f54527e87e9afdbbf48e5ff1501c8f9
Diffstat (limited to 'src/main_javascript.zig')
-rw-r--r--src/main_javascript.zig42
1 files changed, 35 insertions, 7 deletions
diff --git a/src/main_javascript.zig b/src/main_javascript.zig
index 97bc012d3..f5976e304 100644
--- a/src/main_javascript.zig
+++ b/src/main_javascript.zig
@@ -166,7 +166,7 @@ pub const Cli = struct {
var diag = clap.Diagnostic{};
- var args = clap.parse(clap.Help, &params, .{ .diagnostic = &diag }) catch |err| {
+ var args = clap.parse(clap.Help, &params, .{ .diagnostic = &diag, .allocator = allocator }) catch |err| {
// Report useful error and exit
diag.report(stderr.writer(), err) catch {};
return err;
@@ -365,6 +365,35 @@ pub const Cli = struct {
pub const src = "var headers = new Headers(); headers.set(\"hey\", \"hi\"); console.log(headers.get(\"hey\")); \"HELLO\";";
};
+ pub fn Threader(comptime Stdout: type, comptime Stderr: type) type {
+ return struct {
+ allocator: *std.mem.Allocator,
+ stdout: Stdout,
+ stderr: Stderr,
+ args: Api.TransformOptions,
+ pub fn spawn(this: @This()) !void {
+ try alloc.setup(std.heap.c_allocator);
+ var stdout = std.io.getStdOut();
+ // var stdout = std.io.bufferedWriter(stdout_file.writer());
+ var stderr = std.io.getStdErr();
+ // var stderr = std.io.bufferedWriter(stderr_file.writer());
+ var output_source = Output.Source.init(stdout, stderr);
+ // defer stdout.flush() catch {};
+ // defer stderr.flush() catch {};
+ Output.Source.set(&output_source);
+ Output.enable_ansi_colors = stderr.isTty();
+
+ var log = logger.Log.init(this.allocator);
+
+ var vm = try VirtualMachine.init(this.allocator, this.args, null, &log);
+ var promise = try vm.loadEntryPoint(vm.bundler.options.entry_points[0]);
+ if (promise.status(vm.global.vm()) == js.JSPromise.Status.Rejected) {
+ vm.defaultErrorHandler(promise.result(vm.global.vm()));
+ }
+ }
+ };
+ }
+
pub fn start(allocator: *std.mem.Allocator, stdout: anytype, stderr: anytype) anyerror!void {
const start_time = std.time.nanoTimestamp();
var log = logger.Log.init(allocator);
@@ -377,17 +406,16 @@ pub const Cli = struct {
// var results = try bundler.Bundler.bundle(allocator, &log, args);
// var file = results.output_files[0];
- var vm = try VirtualMachine.init(allocator, args, null, &log);
+
// var resolved_entry_point = try vm.bundler.resolver.resolve(
// vm.bundler.fs.top_level_dir,
// vm.bundler.normalizeEntryPointPath(vm.bundler.options.entry_points[0]),
// .entry_point,
// );
-
- var promise = try vm.loadEntryPoint(vm.bundler.options.entry_points[0]);
- if (promise.status(vm.global.vm()) == js.JSPromise.Status.Rejected) {
- vm.defaultRejectionHandler(promise.result(vm.global.vm()));
- }
+ const Threadable = Threader(@TypeOf(stdout), @TypeOf(stderr));
+ const runner = Threadable{ .allocator = allocator, .stdout = stdout, .stderr = stderr, .args = args };
+ var thread = try std.Thread.spawn(.{}, Threadable.spawn, .{runner});
+ thread.join();
}
};