diff options
Diffstat (limited to 'src/js_lexer.zig')
-rw-r--r-- | src/js_lexer.zig | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/js_lexer.zig b/src/js_lexer.zig index ec800cfb5..91f4fceef 100644 --- a/src/js_lexer.zig +++ b/src/js_lexer.zig @@ -76,6 +76,7 @@ pub const Lexer = struct { number: f64 = 0.0, rescan_close_brace_as_template_token: bool = false, prev_error_loc: logger.Loc = logger.Loc.Empty, + regex_flags_start: ?u16 = null, allocator: *std.mem.Allocator, /// In JavaScript, strings are stored as UTF-16, but nearly every string is ascii. /// This means, usually, we can skip UTF8 -> UTF16 conversions. @@ -108,6 +109,7 @@ pub const Lexer = struct { .all_original_comments = self.all_original_comments, .code_point = self.code_point, .identifier = self.identifier, + .regex_flags_start = self.regex_flags_start, .jsx_factory_pragma_comment = self.jsx_factory_pragma_comment, .jsx_fragment_pragma_comment = self.jsx_fragment_pragma_comment, .source_mapping_url = self.source_mapping_url, @@ -1756,13 +1758,21 @@ pub const Lexer = struct { } pub fn scanRegExp(lexer: *LexerType) !void { + lexer.regex_flags_start = null; while (true) { switch (lexer.code_point) { '/' => { try lexer.step(); + + var has_set_flags_start = false; while (isIdentifierContinue(lexer.code_point)) { switch (lexer.code_point) { 'g', 'i', 'm', 's', 'u', 'y' => { + if (!has_set_flags_start) { + lexer.regex_flags_start = @truncate(u16, lexer.end - lexer.start); + has_set_flags_start = true; + } + try lexer.step(); }, else => { |