From 23bf5c9a9342baaec1471552b760676c2363cec5 Mon Sep 17 00:00:00 2001 From: 1911860538 Date: Wed, 30 Apr 2025 22:06:21 +0800 Subject: [PATCH 1/2] encoding/json: remove redundant c <= ' ' check in isSpace --- src/encoding/json/scanner.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/encoding/json/scanner.go b/src/encoding/json/scanner.go index f4086186e29b0b..758474876a9f70 100644 --- a/src/encoding/json/scanner.go +++ b/src/encoding/json/scanner.go @@ -199,7 +199,7 @@ func (s *scanner) popParseState() { } func isSpace(c byte) bool { - return c <= ' ' && (c == ' ' || c == '\t' || c == '\r' || c == '\n') + return c == ' ' || c == '\t' || c == '\r' || c == '\n' } // stateBeginValueOrEmpty is the state after reading `[`. From 309d67cf69377c32ef615ccaba6d83ef1d147cd9 Mon Sep 17 00:00:00 2001 From: 1911860538 Date: Thu, 1 May 2025 08:17:47 +0800 Subject: [PATCH 2/2] encoding/json: add benchmarks for isSpace --- src/encoding/json/scanner_test.go | 38 +++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/encoding/json/scanner_test.go b/src/encoding/json/scanner_test.go index fb64463599625e..f23bf7107b4188 100644 --- a/src/encoding/json/scanner_test.go +++ b/src/encoding/json/scanner_test.go @@ -304,3 +304,41 @@ func genMap(n int) map[string]any { } return x } + +var ( + isSpaceRes bool + + nonPrintable = []byte{0x01, 0x08} + printableNonSpace = []byte{'a', 'z', '1', 'X'} + spaceChars = []byte{' ', '\t', '\r', '\n'} +) + +func BenchmarkIsSpace_NonPrintable(b *testing.B) { + var r bool + for i := 0; i < b.N; i++ { + for _, c := range nonPrintable { + r = isSpace(c) + } + } + isSpaceRes = r +} + +func BenchmarkIsSpace_PrintableNonSpace(b *testing.B) { + var r bool + for i := 0; i < b.N; i++ { + for _, c := range printableNonSpace { + r = isSpace(c) + } + } + isSpaceRes = r +} + +func BenchmarkIsSpace_SpaceChars(b *testing.B) { + var r bool + for i := 0; i < b.N; i++ { + for _, c := range spaceChars { + r = isSpace(c) + } + } + isSpaceRes = r +}