diff options
author | 2021-09-05 02:05:45 -0700 | |
---|---|---|
committer | 2021-09-05 02:05:45 -0700 | |
commit | c20df72d7319ff55ed4e5c9c7ff1abaab951d0bd (patch) | |
tree | c4e9489eb072f08af62ad58ee57cf04e436f6ef7 /src/json_parser.zig | |
parent | b8941666b46f9b7aa46e3f3db42b429a0d1d26cd (diff) | |
download | bun-c20df72d7319ff55ed4e5c9c7ff1abaab951d0bd.tar.gz bun-c20df72d7319ff55ed4e5c9c7ff1abaab951d0bd.tar.zst bun-c20df72d7319ff55ed4e5c9c7ff1abaab951d0bd.zip |
more mutexes
Former-commit-id: 52966012b4b74d24ab28a0c75740aef35fb75327
Diffstat (limited to 'src/json_parser.zig')
-rw-r--r-- | src/json_parser.zig | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/json_parser.zig b/src/json_parser.zig index 0704d1aaa..8f8f415f3 100644 --- a/src/json_parser.zig +++ b/src/json_parser.zig @@ -211,9 +211,32 @@ fn JSONLikeParser(opts: js_lexer.JSONOptions) type { const JSONParser = JSONLikeParser(js_lexer.JSONOptions{}); const TSConfigParser = JSONLikeParser(js_lexer.JSONOptions{ .allow_comments = true, .allow_trailing_commas = true }); +var empty_string = E.String{ .utf8 = "" }; +var empty_object = E.Object{}; +var empty_array = E.Array{ .items = &[_]ExprNodeIndex{} }; +var empty_string_data = Expr.Data{ .e_string = &empty_string }; +var empty_object_data = Expr.Data{ .e_object = &empty_object }; +var empty_array_data = Expr.Data{ .e_array = &empty_array }; pub fn ParseJSON(source: *const logger.Source, log: *logger.Log, allocator: *std.mem.Allocator) !Expr { var parser = try JSONParser.init(allocator, source, log); + switch (source.contents.len) { + // This is to be consisntent with how disabled JS files are handled + 0 => { + return Expr{ .loc = logger.Loc{ .start = 0 }, .data = empty_object_data }; + }, + // This is a fast pass I guess + 2 => { + if (strings.eqlComptime(source.contents[0..1], "\"\"") or strings.eqlComptime(source.contents[0..1], "''")) { + return Expr{ .loc = logger.Loc{ .start = 0 }, .data = empty_string_data }; + } else if (strings.eqlComptime(source.contents[0..1], "{}")) { + return Expr{ .loc = logger.Loc{ .start = 0 }, .data = empty_object_data }; + } else if (strings.eqlComptime(source.contents[0..1], "[]")) { + return Expr{ .loc = logger.Loc{ .start = 0 }, .data = empty_array_data }; + } + }, + else => {}, + } return parser.parseExpr(); } |