ref 2
This commit is contained in:
parent
3563c0f8ee
commit
4091a45658
23
scanner.go
23
scanner.go
|
@ -6,7 +6,6 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
|
||||||
"unicode"
|
"unicode"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -393,9 +392,11 @@ func (s *Scanner) ScanString() (any, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var builder strings.Builder
|
// Reset buffer while preserving capacity
|
||||||
builder.Grow(64) // Preallocate with reasonable capacity
|
s.buffer = s.buffer[:0]
|
||||||
|
|
||||||
|
// Avoid strings.Builder as it creates a new array internally
|
||||||
|
// and instead use our rune buffer directly
|
||||||
for {
|
for {
|
||||||
r, _, err := s.ReadRune()
|
r, _, err := s.ReadRune()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -414,23 +415,23 @@ func (s *Scanner) ScanString() (any, error) {
|
||||||
}
|
}
|
||||||
switch escaped {
|
switch escaped {
|
||||||
case '"':
|
case '"':
|
||||||
builder.WriteRune('"')
|
s.buffer = append(s.buffer, '"')
|
||||||
case '\\':
|
case '\\':
|
||||||
builder.WriteRune('\\')
|
s.buffer = append(s.buffer, '\\')
|
||||||
case 'n':
|
case 'n':
|
||||||
builder.WriteRune('\n')
|
s.buffer = append(s.buffer, '\n')
|
||||||
case 't':
|
case 't':
|
||||||
builder.WriteRune('\t')
|
s.buffer = append(s.buffer, '\t')
|
||||||
default:
|
default:
|
||||||
builder.WriteRune('\\')
|
s.buffer = append(s.buffer, '\\', escaped)
|
||||||
builder.WriteRune(escaped)
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
builder.WriteRune(r)
|
s.buffer = append(s.buffer, r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return builder.String(), nil
|
// Convert rune slice to string once at the end
|
||||||
|
return string(s.buffer), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ConvertValue converts string values to their appropriate types
|
// ConvertValue converts string values to their appropriate types
|
||||||
|
|
Loading…
Reference in New Issue
Block a user