aboutsummaryrefslogtreecommitdiff
path: root/src/main_wasm.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/main_wasm.zig')
-rw-r--r--src/main_wasm.zig305
1 files changed, 0 insertions, 305 deletions
diff --git a/src/main_wasm.zig b/src/main_wasm.zig
deleted file mode 100644
index e8281b486..000000000
--- a/src/main_wasm.zig
+++ /dev/null
@@ -1,305 +0,0 @@
-const std = @import("std");
-const lex = @import("js_lexer.zig");
-const logger = @import("logger.zig");
-const options = @import("options.zig");
-const js_parser = @import("js_parser.zig");
-const json_parser = @import("json_parser.zig");
-const js_printer = @import("js_printer.zig");
-const js_ast = @import("js_ast.zig");
-const linker = @import("linker.zig");
-usingnamespace @import("ast/base.zig");
-usingnamespace @import("defines.zig");
-const panicky = @import("panic_handler.zig");
-usingnamespace @import("global.zig");
-const fs = @import("fs.zig");
-const Schema = @import("api/schema.zig").Api;
-const builtin = std.builtin;
-const MainPanicHandler = panicky.NewPanicHandler(panicky.default_panic);
-// const zee = @import("zee_alloc.zig");
-
-pub fn panic(msg: []const u8, error_return_trace: ?*std.builtin.StackTrace) noreturn {
- if (MainPanicHandler.Singleton) |singleton| {
- MainPanicHandler.handle_panic(msg, error_return_trace);
- } else {
- panicky.default_panic(msg, error_return_trace);
- }
-}
-
-var default_options = std.mem.zeroes(Schema.TransformOptions);
-
-pub const Uint8Array = packed struct {
- pub const Float = @Type(builtin.TypeInfo{ .Float = .{ .bits = 2 * @bitSizeOf(usize) } });
- pub const Abi = if (builtin.target.isWasm()) Float else Uint8Array;
-
- ptr: [*]u8,
- len: usize,
-
- pub fn toSlice(raw: Abi) []u8 {
- const self = @bitCast(Uint8Array, raw);
- return self.ptr[0..self.len];
- }
-
- pub fn fromSlice(slice: []u8) Abi {
- const self = Uint8Array{ .ptr = slice.ptr, .len = slice.len };
- return @bitCast(Abi, self);
- }
-
- pub fn empty() Abi {
- return Uint8Array.fromSlice(&[0]u8{});
- }
-
- pub fn encode(comptime SchemaType: type, obj: SchemaType) !Abi {
- var list = std.ArrayList(u8).init(default_allocator);
- var writer = list.writer();
- try obj.encode(writer);
- return Uint8Array.fromSlice(list.toOwnedSlice());
- }
-
- pub fn decode(self: Abi, comptime SchemaType: type) !SchemaType {
- var buf = Uint8Array.toSlice(self);
- var stream = std.io.fixedBufferStream(buf);
- const res = try SchemaType.decode(default_allocator, stream.reader());
- return res;
- }
-};
-
-pub fn constStrToU8(s: string) []u8 {
- return @intToPtr([*]u8, @ptrToInt(s.ptr))[0..s.len];
-}
-
-pub const Api = struct {
- options: *Schema.TransformOptions = &default_options,
- files: std.ArrayList(string),
- log: logger.Log,
- defines: ?*Define = null,
-
- pub fn transform(self: *Api, request: Schema.Transform) !Schema.TransformResponse {
- const opts = try options.TransformOptions.initUncached(default_allocator, request.path.?, request.contents);
- var source = logger.Source.initFile(opts.entry_point, default_allocator);
-
- var ast: js_ast.Ast = undefined;
- if (self.defines == null) {
- var raw_defines = RawDefines.init(default_allocator);
- raw_defines.put("process.env.NODE_ENV", "\"development\"") catch unreachable;
-
- var user_defines = try DefineData.from_input(raw_defines, &self.log, default_allocator);
- self.defines = try Define.init(
- default_allocator,
- user_defines,
- );
- }
-
- switch (opts.loader) {
- .json => {
- var expr = try json_parser.ParseJSON(&source, &self.log, default_allocator);
- var stmt = js_ast.Stmt.alloc(default_allocator, js_ast.S.ExportDefault{
- .value = js_ast.StmtOrExpr{ .expr = expr },
- .default_name = js_ast.LocRef{ .loc = logger.Loc{}, .ref = Ref{} },
- }, logger.Loc{ .start = 0 });
-
- var part = js_ast.Part{
- .stmts = &([_]js_ast.Stmt{stmt}),
- };
-
- ast = js_ast.Ast.initTest(&([_]js_ast.Part{part}));
- },
- .jsx, .tsx, .ts, .js => {
- var parser = try js_parser.Parser.init(opts, &self.log, &source, self.defines.?, default_allocator);
- var res = try parser.parse();
- ast = res.ast;
- },
- else => {
- Global.panic("Unsupported loader: {s}", .{opts.loader});
- },
- }
-
- var _linker = linker.Linker{};
- var symbols: [][]js_ast.Symbol = &([_][]js_ast.Symbol{ast.symbols});
- const printed = try js_printer.printAst(
- default_allocator,
- ast,
- js_ast.Symbol.Map.initList(symbols),
- &source,
- false,
- js_printer.Options{ .to_module_ref = ast.module_ref orelse js_ast.Ref{ .inner_index = 0 } },
- &_linker,
- );
- // Output.print("Parts count: {d}", .{ast.parts.len});
- var output_files = try default_allocator.alloc(Schema.OutputFile, 1);
- var _data = printed.js[0..printed.js.len];
- var _path = constStrToU8(source.path.text);
-
- output_files[0] = Schema.OutputFile{ .data = _data, .path = _path };
-
- var resp = std.mem.zeroes(Schema.TransformResponse);
- resp.status = .success;
- resp.files = output_files;
-
- return resp;
- // var source = logger.Source.initFile(file: fs.File, allocator: *std.mem.Allocator)
- }
-};
-
-pub extern fn console_log(abi: Uint8Array.Abi) void;
-pub extern fn console_error(abi: Uint8Array.Abi) void;
-pub extern fn console_warn(abi: Uint8Array.Abi) void;
-pub extern fn console_info(abi: Uint8Array.Abi) void;
-
-// const ZeeAlloc = zee.ZeeAlloc(.{});
-// var zee_instance: ZeeAlloc = undefined;
-// const Gpa = std.heap.GeneralPurposeAllocator(.{});
-// var arena: std.heap.ArenaAllocator = undefined;
-// var gpa: Gpa = undefined;
-var hunk: alloc.Hunk = undefined;
-var hunk_high: alloc.HunkSide = undefined;
-var hunk_low: alloc.HunkSide = undefined;
-var perma_hunk: alloc.Hunk = undefined;
-var perma_hunk_high_alloc: *std.mem.Allocator = undefined;
-var perma_hunk_high: alloc.HunkSide = undefined;
-var perma_hunk_low_alloc: *std.mem.Allocator = undefined;
-var perma_hunk_low: alloc.HunkSide = undefined;
-var last_start_high: usize = 0;
-var last_start_low: usize = 0;
-pub const Exports = struct {
- fn init() callconv(.C) i32 {
- var perma_hunk_buf = std.heap.page_allocator.alloc(u8, 128000) catch return -1;
- perma_hunk = alloc.Hunk.init(perma_hunk_buf);
- perma_hunk_high = perma_hunk.high();
- perma_hunk_low = perma_hunk.low();
-
- perma_hunk_high_alloc = &perma_hunk_low.allocator;
-
- // var gpa = Gpa{};
- // var allocator = &gpa.allocator;
- var out_buffer = perma_hunk_low.allocator.alloc(u8, 4096) catch return -1;
- var err_buffer = perma_hunk_low.allocator.alloc(u8, 4096) catch return -1;
- var output = perma_hunk_low.allocator.create(Output.Source) catch return -1;
- var stream = std.io.fixedBufferStream(out_buffer);
- var err_stream = std.io.fixedBufferStream(err_buffer);
- output.* = Output.Source.init(
- stream,
- err_stream,
- );
- output.out_buffer = out_buffer;
- output.err_buffer = err_buffer;
- Output.Source.set(output);
-
- var _api = std.heap.page_allocator.create(Api) catch return -1;
- _api.* = Api{ .files = std.ArrayList(string).init(std.heap.page_allocator), .log = logger.Log.init(std.heap.page_allocator) };
- api = _api;
-
- _ = MainPanicHandler.init(&api.?.log);
-
- // This will need more thought.
- var raw_defines = RawDefines.init(std.heap.page_allocator);
- raw_defines.put("process.env.NODE_ENV", "\"development\"") catch return -1;
- var user_defines = DefineData.from_input(raw_defines, &_api.log, std.heap.page_allocator) catch return -1;
- _api.defines = Define.init(
- std.heap.page_allocator,
- user_defines,
- ) catch return -1;
-
- if (alloc.needs_setup) {
- var buf = std.heap.page_allocator.alloc(u8, 26843545) catch return -1;
- hunk = alloc.Hunk.init(buf);
- hunk_high = hunk.high();
- hunk_low = hunk.low();
- default_allocator = &hunk_high.allocator;
- default_allocator = &hunk_low.allocator;
- alloc.needs_setup = false;
- }
-
- Output.printErrorable("Initialized.", .{}) catch |err| {
- var name = default_allocator.alloc(u8, @errorName(err).len) catch unreachable;
- std.mem.copy(u8, name, @errorName(err));
- console_error(Uint8Array.fromSlice(name));
- };
-
- return 1;
- }
-
- fn transform(abi: Uint8Array.Abi) callconv(.C) Uint8Array.Abi {
- // Output.print("Received {d}", .{abi});
- const req: Schema.Transform = Uint8Array.decode(abi, Schema.Transform) catch return Uint8Array.empty();
- // Output.print("Req {s}", .{req});
- // default_allocator.free(Uint8Array.toSlice(abi));
- const resp = api.?.transform(req) catch return Uint8Array.empty();
-
- var res = Uint8Array.encode(Schema.TransformResponse, resp) catch return Uint8Array.empty();
-
- return res;
- }
-
- // Reset
- fn cycleStart() callconv(.C) void {
- last_start_high = hunk.getHighMark();
- last_start_low = hunk.getLowMark();
- }
-
- fn cycleEnd() callconv(.C) void {
- if (last_start_high > 0) {
- hunk.freeToHighMark(last_start_high);
- last_start_high = 0;
- }
-
- if (last_start_low > 0) {
- hunk.freeToLowMark(last_start_low);
- last_start_low = 0;
- }
- }
-
- fn malloc(size: usize) callconv(.C) Uint8Array.Abi {
- if (size == 0) {
- return 0;
- }
- const result = default_allocator.alloc(u8, size) catch unreachable;
- return Uint8Array.fromSlice(result);
- }
- // fn calloc(num_elements: usize, element_size: usize) callconv(.C) ?*c_void {
- // const size = num_elements *% element_size;
- // const c_ptr = @call(.{ .modifier = .never_inline }, malloc, .{size});
- // if (c_ptr) |ptr| {
- // const p = @ptrCast([*]u8, ptr);
- // @memset(p, 0, size);
- // }
- // return c_ptr;
- // }
- // fn realloc(c_ptr: ?*c_void, new_size: usize) callconv(.C) ?*c_void {
- // if (new_size == 0) {
- // // @call(.{ .modifier = .never_inline }, free, .{@intCast(Uint8Array.Abi, c_ptr.?)});
- // return null;
- // } else if (c_ptr) |ptr| {
- // // Use a synthetic slice
- // const p = @ptrCast([*]u8, ptr);
- // const result = default_allocator.realloc(p[0..1], new_size) catch return null;
- // return @ptrCast(*c_void, result.ptr);
- // } else {
- // return @call(.{ .modifier = .never_inline }, malloc, .{new_size});
- // }
- // }
- fn free(abi: Uint8Array.Abi) callconv(.C) void {
- default_allocator.free(Uint8Array.toSlice(abi));
- }
-};
-
-var api: ?*Api = null;
-
-comptime {
- @export(Exports.init, .{ .name = "init", .linkage = .Strong });
- @export(Exports.transform, .{ .name = "transform", .linkage = .Strong });
- @export(Exports.malloc, .{ .name = "malloc", .linkage = .Strong });
- // @export(Exports.calloc, .{ .name = "calloc", .linkage = .Strong });
- // @export(Exports.realloc, .{ .name = "realloc", .linkage = .Strong });
- @export(Exports.cycleStart, .{ .name = "cycleStart", .linkage = .Strong });
- @export(Exports.cycleEnd, .{ .name = "cycleEnd", .linkage = .Strong });
- @export(Exports.free, .{ .name = "free", .linkage = .Strong });
-}
-
-pub fn main() anyerror!void {
- std.mem.doNotOptimizeAway(Exports.init);
- std.mem.doNotOptimizeAway(Exports.transform);
- std.mem.doNotOptimizeAway(Exports.malloc);
- // std.mem.doNotOptimizeAway(Exports.calloc);
- // std.mem.doNotOptimizeAway(Exports.realloc);
- std.mem.doNotOptimizeAway(Exports.free);
-}