in json/parse.go [659:692]
func (p *Parser) stepNumber(b []byte) ([]byte, bool, error) {
// search for char in stop-set
stop := -1
done := false
for i, c := range b {
isStopChar := c == ' ' || c == '\t' || c == '\f' || c == '\n' || c == '\r' ||
c == ',' ||
c == ']' ||
c == '}'
if isStopChar {
stop = i
done = true
break
}
p.isDouble = p.isDouble || c == '.' || c == 'e' || c == 'E'
}
if !done {
p.literalBuffer = append(p.literalBuffer, b...)
return nil, false, nil
}
rest := b[stop:]
b = b[:stop]
if len(p.literalBuffer) > 0 {
b = append(p.literalBuffer, b...)
p.literalBuffer = b[:0] // reset buffer
}
err := p.reportNumber(b, p.isDouble)
p.popState()
return rest, true, err
}