aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-10-24 16:09:15 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-10-24 16:09:15 -0700
commit6f6510169e46d2741baf45f96f06d7254ceb0947 (patch)
tree0131d892b3e980a01047b17b988e8d584645fdf7
parentcfe159f636e0dad8fea5e665f783822211abad2e (diff)
downloadbun-6f6510169e46d2741baf45f96f06d7254ceb0947.tar.gz
bun-6f6510169e46d2741baf45f96f06d7254ceb0947.tar.zst
bun-6f6510169e46d2741baf45f96f06d7254ceb0947.zip
[JSON] Use a special lexer variant only for JSON
-rw-r--r--src/json_parser.zig32
1 files changed, 13 insertions, 19 deletions
diff --git a/src/json_parser.zig b/src/json_parser.zig
index 5d65291a7..51389335c 100644
--- a/src/json_parser.zig
+++ b/src/json_parser.zig
@@ -36,31 +36,23 @@ const Level = js_ast.Op.Level;
const Op = js_ast.Op;
const Scope = js_ast.Scope;
const locModuleScope = logger.Loc.Empty;
-const Lexer = js_lexer.Lexer;
fn JSONLikeParser(opts: js_lexer.JSONOptions) type {
return struct {
+ const Lexer = js_lexer.NewLexer(opts);
+
lexer: Lexer,
source: *const logger.Source,
log: *logger.Log,
allocator: *std.mem.Allocator,
pub fn init(allocator: *std.mem.Allocator, source: *const logger.Source, log: *logger.Log) !Parser {
- if (opts.allow_comments) {
- return Parser{
- .lexer = try Lexer.initTSConfig(log, source, allocator),
- .allocator = allocator,
- .log = log,
- .source = source,
- };
- } else {
- return Parser{
- .lexer = try Lexer.initJSON(log, source, allocator),
- .allocator = allocator,
- .log = log,
- .source = source,
- };
- }
+ return Parser{
+ .lexer = try Lexer.init(log, source, allocator),
+ .allocator = allocator,
+ .log = log,
+ .source = source,
+ };
}
const Parser = @This();
@@ -219,13 +211,15 @@ fn JSONLikeParser(opts: js_lexer.JSONOptions) type {
};
}
-const JSONParser = JSONLikeParser(js_lexer.JSONOptions{});
+const JSONParser = JSONLikeParser(js_lexer.JSONOptions{ .is_json = true });
const DotEnvJSONParser = JSONLikeParser(js_lexer.JSONOptions{
- .starts_with_string = true,
+ .ignore_leading_escape_sequences = true,
+ .ignore_trailing_escape_sequences = true,
.allow_trailing_commas = true,
+ .is_json = true,
});
-const TSConfigParser = JSONLikeParser(js_lexer.JSONOptions{ .allow_comments = true, .allow_trailing_commas = true });
var empty_string = E.String{ .utf8 = "" };
+const TSConfigParser = JSONLikeParser(js_lexer.JSONOptions{ .allow_comments = true, .is_json = true, .allow_trailing_commas = true });
var empty_object = E.Object{};
var empty_array = E.Array{ .items = &[_]ExprNodeIndex{} };
var empty_string_data = Expr.Data{ .e_string = &empty_string };