Remove error handling for rune
This commit is contained in:
@@ -136,40 +136,24 @@ func (p *parser) expect(expected rune) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *parser) peekRune() (rune, error) {
|
func (p *parser) peekRune() rune {
|
||||||
if p.lookahead.empty() {
|
if p.lookahead.empty() {
|
||||||
p.lookahead.r, p.lookahead.size = utf8.DecodeRune(p.data[p.end:])
|
p.lookahead.r, p.lookahead.size = utf8.DecodeRune(p.data[p.end:])
|
||||||
if p.lookahead.r == utf8.RuneError {
|
if p.lookahead.r == utf8.RuneError && p.lookahead.size == 0 {
|
||||||
|
p.lookahead.r = eof
|
||||||
switch p.lookahead.size {
|
|
||||||
case 0:
|
|
||||||
p.lookahead.r = eof
|
|
||||||
case 1:
|
|
||||||
p.lookahead.r = utf8.RuneError
|
|
||||||
return utf8.RuneError, &InvalidUnicodeError{r: p.lookahead.r}
|
|
||||||
default:
|
|
||||||
panic("unhandled rune error case")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return p.lookahead.r, nil
|
return p.lookahead.r
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *parser) nextRune() (rune, error) {
|
func (p *parser) nextRune() rune {
|
||||||
r, err := p.peekRune()
|
r := p.peekRune()
|
||||||
if err == nil {
|
if r != eof {
|
||||||
p.end += p.lookahead.size
|
p.end += p.lookahead.size
|
||||||
p.lookahead.r = 0
|
p.lookahead.r = 0
|
||||||
p.lookahead.size = 0
|
p.lookahead.size = 0
|
||||||
}
|
}
|
||||||
return r, err
|
return r
|
||||||
}
|
|
||||||
|
|
||||||
func (p *parser) sureNextRune() {
|
|
||||||
_, err := p.nextRune()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *parser) ignore() {
|
func (p *parser) ignore() {
|
||||||
@@ -189,10 +173,7 @@ func (p *parser) accept() []byte {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *parser) expectRune(expected rune) error {
|
func (p *parser) expectRune(expected rune) error {
|
||||||
r, err := p.nextRune()
|
r := p.nextRune()
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if r != expected {
|
if r != expected {
|
||||||
return &UnexpectedCharacter{
|
return &UnexpectedCharacter{
|
||||||
r: r,
|
r: r,
|
||||||
@@ -520,20 +501,17 @@ func (p *parser) parseLiteralString() error {
|
|||||||
p.ignore()
|
p.ignore()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
r, err := p.peekRune()
|
r := p.peekRune()
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if r == '\'' {
|
if r == '\'' {
|
||||||
p.builder.LiteralString(p.accept())
|
p.builder.LiteralString(p.accept())
|
||||||
p.sureNextRune()
|
p.nextRune()
|
||||||
p.ignore()
|
p.ignore()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if !isLiteralChar(r) {
|
if !isLiteralChar(r) {
|
||||||
return &InvalidCharacter{r: r}
|
return &InvalidCharacter{r: r}
|
||||||
}
|
}
|
||||||
p.sureNextRune()
|
p.nextRune()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -573,36 +551,27 @@ func (p *parser) parseBasicString() error {
|
|||||||
p.ignore()
|
p.ignore()
|
||||||
|
|
||||||
for {
|
for {
|
||||||
r, err := p.peekRune()
|
r := p.peekRune()
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if r == '"' {
|
if r == '"' {
|
||||||
p.builder.BasicString(p.accept())
|
p.builder.BasicString(p.accept())
|
||||||
p.sureNextRune()
|
p.nextRune()
|
||||||
p.ignore()
|
p.ignore()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if r == '\\' {
|
if r == '\\' {
|
||||||
p.sureNextRune()
|
p.nextRune()
|
||||||
r, err := p.peekRune()
|
r := p.peekRune()
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if isEscapeChar(r) {
|
if isEscapeChar(r) {
|
||||||
p.sureNextRune()
|
p.nextRune()
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if r == 'u' {
|
if r == 'u' {
|
||||||
p.sureNextRune()
|
p.nextRune()
|
||||||
for i := 0; i < 4; i++ {
|
for i := 0; i < 4; i++ {
|
||||||
r, err := p.nextRune()
|
r := p.nextRune()
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if !isHex(r) {
|
if !isHex(r) {
|
||||||
return &InvalidCharacter{r: r}
|
return &InvalidCharacter{r: r}
|
||||||
}
|
}
|
||||||
@@ -611,12 +580,9 @@ func (p *parser) parseBasicString() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if r == 'U' {
|
if r == 'U' {
|
||||||
p.sureNextRune()
|
p.nextRune()
|
||||||
for i := 0; i < 8; i++ {
|
for i := 0; i < 8; i++ {
|
||||||
r, err := p.nextRune()
|
r := p.nextRune()
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if !isHex(r) {
|
if !isHex(r) {
|
||||||
return &InvalidCharacter{r: r}
|
return &InvalidCharacter{r: r}
|
||||||
}
|
}
|
||||||
@@ -628,7 +594,7 @@ func (p *parser) parseBasicString() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if isBasicStringChar(r) {
|
if isBasicStringChar(r) {
|
||||||
p.sureNextRune()
|
p.nextRune()
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user