diff options
| -rw-r--r-- | ccl.go | 18 | ||||
| -rw-r--r-- | lexer.go | 9 |
2 files changed, 13 insertions, 14 deletions
@@ -399,16 +399,16 @@ func (p *parser) unescape(rawStr []byte) ([]byte, error) { if i < len(rawStr) && rawStr[i] == '\n' { b = nil } else { - return nil, fmt.Errorf("invalid escape sequence %q", rawStr[i-2:min(i+1, len(rawStr))]) + return nil, p.error("invalid escape sequence %q", rawStr[i-2:min(i+1, len(rawStr))]) } case 'x': i++ if i+2 > len(rawStr) { - return nil, fmt.Errorf("invalid hex escape %q", rawStr[i-2:min(i+2, len(rawStr))]) + return nil, p.error("invalid hex escape %q", rawStr[i-2:min(i+2, len(rawStr))]) } n, err := strconv.ParseUint(string(rawStr[i:i+2]), 16, 8) if err != nil { - return nil, fmt.Errorf("invalid hex escape %q: %s", rawStr[i-2:i+2], err) + return nil, p.error("invalid hex escape %q: %s", rawStr[i-2:i+2], err) } i++ b = []byte{byte(n)} @@ -419,21 +419,21 @@ func (p *parser) unescape(rawStr []byte) ([]byte, error) { } i++ if i+nBytes > len(rawStr) { - return nil, fmt.Errorf("invalid unicode escape %q", rawStr[i-2:min(i+nBytes, len(rawStr))]) + return nil, p.error("invalid unicode escape %q", rawStr[i-2:min(i+nBytes, len(rawStr))]) } n, err := strconv.ParseUint(string(rawStr[i:i+nBytes]), 16, 31) if err != nil { - return nil, fmt.Errorf("invalid hex escape %q: %s", rawStr[i-2:i+nBytes], err) + return nil, p.error("invalid unicode escape %q: %s", rawStr[i-2:i+nBytes], err) } i += nBytes - 1 b = utf8.AppendRune(nil, rune(n)) default: if i+3 > len(rawStr) { - return nil, fmt.Errorf("invalid string escape %q", rawStr[i-1:i+1]) + return nil, p.error("invalid string escape %q", rawStr[i-1:i+1]) } n, err := strconv.ParseUint(string(rawStr[i:i+3]), 8, 8) if err != nil { - return nil, fmt.Errorf("invalid octal escape %q: %s", rawStr[i-1:i+3], err) + return nil, p.error("invalid octal escape %q: %s", rawStr[i-1:i+3], err) } i += 2 b = []byte{byte(n)} @@ -522,7 +522,7 @@ func (p *parser) parseVal(fieldVal reflect.Value, tok, field []byte) error { case fieldVal.Type() == reflect.TypeFor[[]byte](): b, err := base64.StdEncoding.DecodeString(s) if err != nil { - return fmt.Errorf("field %q: bad base64", field) + return p.error("field %q: bad base64", field) } fieldVal.Set(reflect.ValueOf(b)) default: @@ -606,7 +606,7 @@ func (p *parser) parseFieldVal(out reflect.Value, parsedFields map[string]bool, } fieldIdx, ok := p.fieldMap[structField{out.Type(), string(field)}] if !ok { - return fmt.Errorf("no field named %q", field) + return p.error("no field named %q", field) } fieldVal := out.Field(fieldIdx) tok, err := p.next() @@ -2,7 +2,6 @@ package ccl import ( "bytes" - "fmt" "unicode" "unicode/utf8" ) @@ -36,13 +35,13 @@ Space: continue } if bytes.HasPrefix(l.data[l.i:], []byte("/*")) { - for ; l.i < len(l.data); l.i++ { - if bytes.HasPrefix(l.data[l.i:], []byte("*/")) { - l.i += 2 + for i := l.i; i < len(l.data); i++ { + if bytes.HasPrefix(l.data[i:], []byte("*/")) { + l.i = i + 2 continue Space } } - return fmt.Errorf("unterminated comment") + return l.error("unterminated comment") } if r, n := utf8.DecodeRune(l.data[l.i:]); unicode.IsSpace(r) { l.i += n |
