diff options
author | 2021-09-26 20:03:49 -0700 | |
---|---|---|
committer | 2021-09-26 20:03:49 -0700 | |
commit | 018ba2c83bf3c2e925ec3273c5f936cb4aff434f (patch) | |
tree | 9b028dd9911c8ecc17fec29076c91cf035728a7c /src/js_lexer.zig | |
parent | 66ed7c1f30d1ba6569efa114c9d90ccac45fb86a (diff) | |
download | bun-018ba2c83bf3c2e925ec3273c5f936cb4aff434f.tar.gz bun-018ba2c83bf3c2e925ec3273c5f936cb4aff434f.tar.zst bun-018ba2c83bf3c2e925ec3273c5f936cb4aff434f.zip |
Most of macro implementation
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 => { |