MCPcopy Index your code
hub / github.com/segmentio/encoding / parseNumber

Method parseNumber

json/parse.go:288–386  ·  view source on GitHub ↗
(b []byte)

Source from the content-addressed store, hash-verified

286}
287
288func (d decoder) parseNumber(b []byte) (v, r []byte, kind Kind, err error) {
289 if len(b) == 0 {
290 r, err = b, unexpectedEOF(b)
291 return
292 }
293
294 // Assume it's an unsigned integer at first.
295 kind = Uint
296
297 i := 0
298 // sign
299 if b[i] == '-' {
300 kind = Int
301 i++
302 }
303
304 if i == len(b) {
305 r, err = b[i:], syntaxError(b, "missing number value after sign")
306 return
307 }
308
309 if b[i] < '0' || b[i] > '9' {
310 r, err = b[i:], syntaxError(b, "expected digit but got '%c'", b[i])
311 return
312 }
313
314 // integer part
315 if b[i] == '0' {
316 i++
317 if i == len(b) || (b[i] != '.' && b[i] != 'e' && b[i] != 'E') {
318 v, r = b[:i], b[i:]
319 return
320 }
321 if '0' <= b[i] && b[i] <= '9' {
322 r, err = b[i:], syntaxError(b, "cannot decode number with leading '0' character")
323 return
324 }
325 }
326
327 for i < len(b) && '0' <= b[i] && b[i] <= '9' {
328 i++
329 }
330
331 // decimal part
332 if i < len(b) && b[i] == '.' {
333 kind = Float
334 i++
335 decimalStart := i
336
337 for i < len(b) {
338 if c := b[i]; '0' > c || c > '9' {
339 if i == decimalStart {
340 r, err = b[i:], syntaxError(b, "expected digit but found '%c'", c)
341 return
342 }
343 break
344 }
345 i++

Callers 10

encodeNumberMethod · 0.95
parseIntMethod · 0.95
parseUintMethod · 0.95
parseValueMethod · 0.95
decodeFloat32Method · 0.95
decodeFloat64Method · 0.95
decodeNumberMethod · 0.95
decodeFromStringToIntMethod · 0.95
decodeDynamicNumberMethod · 0.95
NextMethod · 0.80

Calls 2

unexpectedEOFFunction · 0.85
syntaxErrorFunction · 0.85

Tested by

no test coverage detected