diff options
author | 2022-02-16 00:32:29 -0800 | |
---|---|---|
committer | 2022-02-16 00:32:29 -0800 | |
commit | fe55720c6c022ab24f23cf452973071dfc2b67ae (patch) | |
tree | e24019105c0e2653400935e1538636f91c009b12 | |
parent | 08e8eabc6f1fdf5a58da0196462cba38b87c18d8 (diff) | |
download | bun-fe55720c6c022ab24f23cf452973071dfc2b67ae.tar.gz bun-fe55720c6c022ab24f23cf452973071dfc2b67ae.tar.zst bun-fe55720c6c022ab24f23cf452973071dfc2b67ae.zip |
[JS Parser] Add error when RegExp has duplicate flag
-rw-r--r-- | src/js_lexer.zig | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/js_lexer.zig b/src/js_lexer.zig index 1f6c39989..282cac680 100644 --- a/src/js_lexer.zig +++ b/src/js_lexer.zig @@ -1815,6 +1815,10 @@ fn NewLexer_( lexer.step(); var has_set_flags_start = false; + const min_flag = comptime std.mem.min(u8, "gimsuy"); + const max_flag = comptime std.mem.max(u8, "gimsuy"); + const RegexpFlags = std.bit_set.IntegerBitSet((max_flag - min_flag) + 1); + var flags = RegexpFlags.initEmpty(); while (isIdentifierContinue(lexer.code_point)) { switch (lexer.code_point) { 'g', 'i', 'm', 's', 'u', 'y' => { @@ -1822,6 +1826,16 @@ fn NewLexer_( lexer.regex_flags_start = @truncate(u16, lexer.end - lexer.start); has_set_flags_start = true; } + const flag = max_flag - @intCast(u8, lexer.code_point); + if (flags.isSet(flag)) { + lexer.addError( + lexer.regex_flags_start.?, + "Duplicate flag \"{u}\" in regular expression", + .{@intCast(u21, lexer.code_point)}, + false, + ); + } + flags.set(flag); lexer.step(); }, |