fix scanner error of number like "100f"
This commit is contained in:
File diff suppressed because one or more lines are too long
@ -2,7 +2,6 @@ package nbt
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"sync"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -47,28 +46,6 @@ func (s *scanner) reset() {
|
|||||||
s.parseState = s.parseState[0:0]
|
s.parseState = s.parseState[0:0]
|
||||||
}
|
}
|
||||||
|
|
||||||
var scannerPool = sync.Pool{
|
|
||||||
New: func() interface{} {
|
|
||||||
return &scanner{}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func newScanner() *scanner {
|
|
||||||
scan := scannerPool.Get().(*scanner)
|
|
||||||
// scan.reset by design doesn't set bytes to zero
|
|
||||||
//scan.bytes = 0
|
|
||||||
scan.reset()
|
|
||||||
return scan
|
|
||||||
}
|
|
||||||
|
|
||||||
func freeScanner(scan *scanner) {
|
|
||||||
// Avoid hanging on to too much memory in extreme cases.
|
|
||||||
if len(scan.parseState) > 1024 {
|
|
||||||
scan.parseState = nil
|
|
||||||
}
|
|
||||||
scannerPool.Put(scan)
|
|
||||||
}
|
|
||||||
|
|
||||||
// pushParseState pushes a new parse state p onto the parse stack.
|
// pushParseState pushes a new parse state p onto the parse stack.
|
||||||
// an error state is returned if maxNestingDepth was exceeded, otherwise successState is returned.
|
// an error state is returned if maxNestingDepth was exceeded, otherwise successState is returned.
|
||||||
func (s *scanner) pushParseState(c byte, newParseState int, successState int) int {
|
func (s *scanner) pushParseState(c byte, newParseState int, successState int) int {
|
||||||
@ -282,10 +259,6 @@ func (s *scanner) stateNum0(c byte) int {
|
|||||||
s.step = s.stateNum1
|
s.step = s.stateNum1
|
||||||
return scanContinue
|
return scanContinue
|
||||||
}
|
}
|
||||||
if isAllowedInUnquotedString(c) {
|
|
||||||
s.step = s.stateInUnquotedString
|
|
||||||
return scanContinue
|
|
||||||
}
|
|
||||||
return s.stateEndNumValue(c)
|
return s.stateEndNumValue(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -298,10 +271,6 @@ func (s *scanner) stateNum1(c byte) int {
|
|||||||
s.step = s.stateNumDot
|
s.step = s.stateNumDot
|
||||||
return scanContinue
|
return scanContinue
|
||||||
}
|
}
|
||||||
if isAllowedInUnquotedString(c) {
|
|
||||||
s.step = s.stateInUnquotedString
|
|
||||||
return scanContinue
|
|
||||||
}
|
|
||||||
return s.stateEndNumValue(c)
|
return s.stateEndNumValue(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -326,10 +295,6 @@ func (s *scanner) stateNumDot0(c byte) int {
|
|||||||
s.step = s.stateNumDot0
|
s.step = s.stateNumDot0
|
||||||
return scanContinue
|
return scanContinue
|
||||||
}
|
}
|
||||||
if isAllowedInUnquotedString(c) {
|
|
||||||
s.step = s.stateInUnquotedString
|
|
||||||
return scanContinue
|
|
||||||
}
|
|
||||||
return s.stateEndNumDotValue(c)
|
return s.stateEndNumDotValue(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -347,6 +312,10 @@ func (s *scanner) stateEndNumValue(c byte) int {
|
|||||||
case 'f', 'F', 'd', 'D':
|
case 'f', 'F', 'd', 'D':
|
||||||
return s.stateEndNumDotValue(c)
|
return s.stateEndNumDotValue(c)
|
||||||
}
|
}
|
||||||
|
if isAllowedInUnquotedString(c) {
|
||||||
|
s.step = s.stateInUnquotedString
|
||||||
|
return scanContinue
|
||||||
|
}
|
||||||
return s.stateEndValue(c)
|
return s.stateEndValue(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user