forked from github/multus-cni
gomodule is still in progress to migrate for now, hence multus team decide to keep vendor directory to support build without gomodule.
90 lines
1.8 KiB
Go
90 lines
1.8 KiB
Go
//+build !jsoniter_sloppy
|
|
|
|
package jsoniter
|
|
|
|
import "fmt"
|
|
|
|
func (iter *Iterator) skipNumber() {
|
|
if !iter.trySkipNumber() {
|
|
iter.unreadByte()
|
|
iter.ReadFloat32()
|
|
}
|
|
}
|
|
|
|
func (iter *Iterator) trySkipNumber() bool {
|
|
dotFound := false
|
|
for i := iter.head; i < iter.tail; i++ {
|
|
c := iter.buf[i]
|
|
switch c {
|
|
case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
|
|
case '.':
|
|
if dotFound {
|
|
iter.ReportError("validateNumber", `more than one dot found in number`)
|
|
return true // already failed
|
|
}
|
|
if i+1 == iter.tail {
|
|
return false
|
|
}
|
|
c = iter.buf[i+1]
|
|
switch c {
|
|
case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9':
|
|
default:
|
|
iter.ReportError("validateNumber", `missing digit after dot`)
|
|
return true // already failed
|
|
}
|
|
dotFound = true
|
|
default:
|
|
switch c {
|
|
case ',', ']', '}', ' ', '\t', '\n', '\r':
|
|
if iter.head == i {
|
|
return false // if - without following digits
|
|
}
|
|
iter.head = i
|
|
return true // must be valid
|
|
}
|
|
return false // may be invalid
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (iter *Iterator) skipString() {
|
|
if !iter.trySkipString() {
|
|
iter.unreadByte()
|
|
iter.ReadString()
|
|
}
|
|
}
|
|
|
|
func (iter *Iterator) trySkipString() bool {
|
|
for i := iter.head; i < iter.tail; i++ {
|
|
c := iter.buf[i]
|
|
if c == '"' {
|
|
iter.head = i + 1
|
|
return true // valid
|
|
} else if c == '\\' {
|
|
return false
|
|
} else if c < ' ' {
|
|
iter.ReportError("trySkipString",
|
|
fmt.Sprintf(`invalid control character found: %d`, c))
|
|
return true // already failed
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (iter *Iterator) skipObject() {
|
|
iter.unreadByte()
|
|
iter.ReadObjectCB(func(iter *Iterator, field string) bool {
|
|
iter.Skip()
|
|
return true
|
|
})
|
|
}
|
|
|
|
func (iter *Iterator) skipArray() {
|
|
iter.unreadByte()
|
|
iter.ReadArrayCB(func(iter *Iterator) bool {
|
|
iter.Skip()
|
|
return true
|
|
})
|
|
}
|