Skip to content

Commit c4440c4

Browse files
committed
[json] json.parse performance fix (for #18218)
1 parent d826ad6 commit c4440c4

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

src/vs/base/common/json.ts

+12-11
Original file line numberDiff line numberDiff line change
@@ -1043,9 +1043,6 @@ export function visit(text: string, visitor: JSONVisitor, options?: ParseOptions
10431043
}
10441044

10451045
function parseString(isValue: boolean): boolean {
1046-
if (_scanner.getToken() !== SyntaxKind.StringLiteral) {
1047-
return false;
1048-
}
10491046
let value = _scanner.getTokenValue();
10501047
if (isValue) {
10511048
onLiteralValue(value);
@@ -1088,10 +1085,11 @@ export function visit(text: string, visitor: JSONVisitor, options?: ParseOptions
10881085
}
10891086

10901087
function parseProperty(): boolean {
1091-
if (!parseString(false)) {
1088+
if (_scanner.getToken() !== SyntaxKind.StringLiteral) {
10921089
handleError(ParseErrorCode.PropertyNameExpected, [], [SyntaxKind.CloseBraceToken, SyntaxKind.CommaToken]);
10931090
return false;
10941091
}
1092+
parseString(false);
10951093
if (_scanner.getToken() === SyntaxKind.ColonToken) {
10961094
onSeparator(':');
10971095
scanNext(); // consume colon
@@ -1106,9 +1104,6 @@ export function visit(text: string, visitor: JSONVisitor, options?: ParseOptions
11061104
}
11071105

11081106
function parseObject(): boolean {
1109-
if (_scanner.getToken() !== SyntaxKind.OpenBraceToken) {
1110-
return false;
1111-
}
11121107
onObjectBegin();
11131108
scanNext(); // consume open brace
11141109

@@ -1138,9 +1133,6 @@ export function visit(text: string, visitor: JSONVisitor, options?: ParseOptions
11381133
}
11391134

11401135
function parseArray(): boolean {
1141-
if (_scanner.getToken() !== SyntaxKind.OpenBracketToken) {
1142-
return false;
1143-
}
11441136
onArrayBegin();
11451137
scanNext(); // consume open bracket
11461138

@@ -1170,7 +1162,16 @@ export function visit(text: string, visitor: JSONVisitor, options?: ParseOptions
11701162
}
11711163

11721164
function parseValue(): boolean {
1173-
return parseArray() || parseObject() || parseString(true) || parseLiteral();
1165+
switch (_scanner.getToken()) {
1166+
case SyntaxKind.OpenBracketToken:
1167+
return parseArray();
1168+
case SyntaxKind.OpenBraceToken:
1169+
return parseObject();
1170+
case SyntaxKind.StringLiteral:
1171+
return parseString(true);
1172+
default:
1173+
return parseLiteral();
1174+
}
11741175
}
11751176

11761177
scanNext();

0 commit comments

Comments
 (0)