aboutsummaryrefslogtreecommitdiff
path: root/src/js_lexer.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-11-15 00:13:09 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-11-15 00:13:09 -0800
commitc7e3b4aaa6d0ffdcaca3cadd79fe9ef3d96d3ef6 (patch)
tree95c18a00a89ac0df66bccd9e0559d9eb7205fb08 /src/js_lexer.zig
parent44babb9ce5a4e26fc43b002dedbf194c31331a0e (diff)
downloadbun-c7e3b4aaa6d0ffdcaca3cadd79fe9ef3d96d3ef6.tar.gz
bun-c7e3b4aaa6d0ffdcaca3cadd79fe9ef3d96d3ef6.tar.zst
bun-c7e3b4aaa6d0ffdcaca3cadd79fe9ef3d96d3ef6.zip
Diffstat (limited to 'src/js_lexer.zig')
-rw-r--r--src/js_lexer.zig39
1 files changed, 18 insertions, 21 deletions
diff --git a/src/js_lexer.zig b/src/js_lexer.zig
index 134497421..9a4795fa8 100644
--- a/src/js_lexer.zig
+++ b/src/js_lexer.zig
@@ -2437,9 +2437,7 @@ fn NewLexer_(
else => {},
}
- if (strings.indexOfChar(text, '\r') == null) {
- return text;
- }
+ var i = strings.indexOfChar(text, '\r') orelse return text;
// From the specification:
//
@@ -2450,28 +2448,27 @@ fn NewLexer_(
// <LF> for both TV and TRV. An explicit EscapeSequence is needed to
// include a <CR> or <CR><LF> sequence.
var bytes = MutableString.init(lexer.allocator, text.len) catch unreachable;
- var end: usize = 0;
- var i: usize = 0;
- var c: u8 = '0';
- while (i < bytes.list.items.len) {
- c = bytes.list.items[i];
- i += 1;
-
- if (c == '\r') {
- // Convert '\r\n' into '\n'
- if (i < bytes.list.items.len and bytes.list.items[i] == '\n') {
- i += 1;
- }
+ bytes.appendAssumeCapacity(text[0..i]) catch unreachable;
+ var remain = text[i..];
+ if (remain[0] == '\n') {
+ bytes.appendChar('\n');
+ remain = remain[1..];
+ }
- // Convert '\r' into '\n'
- c = '\n';
+ while (strings.indexofChar(remain, '\r')) |j| {
+ bytes.appendAssumeCapacity(remain[0..j]) catch unreachable;
+ remain = remain[j..];
+ if (remain[0] == '\n') {
+ bytes.appendCharAssumeCapacity('\n');
+ remain = remain[1..];
+ } else {
+ bytes.appendCharAssumeCapacity('\r');
}
-
- bytes.list.items[end] = c;
- end += 1;
}
- return bytes.toOwnedSliceLength(end + 1);
+ bytes.appendAssumeCapacity(remain) catch unreachable;
+
+ return bytes.toOwnedSlice();
}
fn parseNumericLiteralOrDot(lexer: *LexerType) !void {