diff options
author | 2021-09-30 01:54:53 -0700 | |
---|---|---|
committer | 2021-09-30 01:54:53 -0700 | |
commit | ec256209a857390784713609f0f85a54349df380 (patch) | |
tree | 2fe711bd6686a58d816643b33121da2c913531b5 | |
parent | 74db7809eb38dee778e3ee36db75ba3a01b5ecbc (diff) | |
download | bun-ec256209a857390784713609f0f85a54349df380.tar.gz bun-ec256209a857390784713609f0f85a54349df380.tar.zst bun-ec256209a857390784713609f0f85a54349df380.zip |
flatten fragments
-rw-r--r-- | src/js_ast.zig | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/src/js_ast.zig b/src/js_ast.zig index 3bce9d015..a494f879a 100644 --- a/src/js_ast.zig +++ b/src/js_ast.zig @@ -6494,11 +6494,35 @@ pub const Macro = struct { } } return JSNode{ .data = .{ .inline_inject = writer.inject.toOwnedSlice() }, .loc = writer.loc }; - } else if (tag == Tag.fragment) { + } + + if (tag == Tag.fragment) { const count: u32 = (writer.eatArg() orelse return null).toU32(); // collapse single-item fragments - if (count == 1) { - break :brk writer.writeFromJS() orelse return null; + switch (count) { + 0 => { + return JSNode{ .data = .{ .fragment = &[_]JSNode{} }, .loc = writer.loc }; + }, + + 1 => { + var _node = writer.writeFromJS() orelse return null; + while (true) { + switch (_node.data) { + .fragment => |fragment| { + if (fragment.len == 1) { + _node = fragment[0]; + continue; + } + + break :brk _node; + }, + else => { + break :brk _node; + }, + } + } + }, + else => {}, } var i: u32 = 0; |