aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-09-17 18:37:26 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-09-17 18:37:26 -0700
commit9ae35ec5811f7395f98988ccdcd07395cd731bb0 (patch)
tree04cd0dfaeb3f42d48b671201b4529af3357bcedc /src
parentb1ca1eb228dd3a1e1be0dd5feae06ed1b631b38e (diff)
downloadbun-v0.0.21.tar.gz
bun-v0.0.21.tar.zst
bun-v0.0.21.zip
Slightly improve JSX decoding perfbun-v0.0.21
Diffstat (limited to '')
-rw-r--r--src/js_lexer.zig13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/js_lexer.zig b/src/js_lexer.zig
index 4f58f4431..687d20409 100644
--- a/src/js_lexer.zig
+++ b/src/js_lexer.zig
@@ -2071,8 +2071,17 @@ pub const Lexer = struct {
}
}
+ threadlocal var jsx_decode_buf: std.ArrayList(u16) = undefined;
+ threadlocal var jsx_decode_init = false;
pub fn fixWhitespaceAndDecodeJSXEntities(lexer: *LexerType, text: string) !JavascriptString {
- var decoded = std.ArrayList(u16).init(lexer.allocator);
+ if (!jsx_decode_init) {
+ jsx_decode_init = true;
+ jsx_decode_buf = std.ArrayList(u16).init(default_allocator);
+ }
+ jsx_decode_buf.clearRetainingCapacity();
+
+ var decoded = jsx_decode_buf;
+ defer jsx_decode_buf = decoded;
var decoded_ptr = &decoded;
var i: u32 = 0;
var after_last_non_whitespace: ?u32 = null;
@@ -2129,7 +2138,7 @@ pub const Lexer = struct {
try decodeJSXEntities(lexer, text[start..text.len], decoded_ptr);
}
- return decoded.toOwnedSlice();
+ return decoded.items;
}
pub fn decodeJSXEntities(lexer: *LexerType, text: string, out: *std.ArrayList(u16)) !void {