aboutsummaryrefslogtreecommitdiffstats
path: root/lexer.go
diff options
context:
space:
mode:
authorRose Hogenson <rosehogenson@posteo.net>2025-11-18 19:20:29 -0800
committerRose Hogenson <rosehogenson@posteo.net>2025-11-18 19:20:29 -0800
commit933c9c9721bf20bc00dab85a75546a7573c31747 (patch)
tree62282c41bec50a844148e09b5741283aa5bc3a61 /lexer.go
parentb25fc1dbacf79d795f80ae07a5785877c2b0fdb0 (diff)
downloadccl-933c9c9721bf20bc00dab85a75546a7573c31747.tar.zst
Holy shit fuzzing is so cool
Diffstat (limited to 'lexer.go')
-rw-r--r--lexer.go18
1 files changed, 13 insertions, 5 deletions
diff --git a/lexer.go b/lexer.go
index a996451..e2680e8 100644
--- a/lexer.go
+++ b/lexer.go
@@ -2,6 +2,7 @@ package ccl
import (
"bytes"
+ "fmt"
"unicode"
"unicode/utf8"
)
@@ -26,7 +27,8 @@ func (l *lexer) yield(n int) token {
return t
}
-func (l *lexer) skipSpace() {
+func (l *lexer) skipSpace() error {
+Space:
for l.i < len(l.data) {
if bytes.HasPrefix(l.data[l.i:], []byte("#")) || bytes.HasPrefix(l.data[l.i:], []byte("//")) {
for ; l.i < len(l.data) && l.data[l.i] != '\n'; l.i++ {
@@ -34,10 +36,13 @@ func (l *lexer) skipSpace() {
continue
}
if bytes.HasPrefix(l.data[l.i:], []byte("/*")) {
- for ; l.i < len(l.data) && !bytes.HasPrefix(l.data[l.i:], []byte("*/")); l.i++ {
+ for ; l.i < len(l.data); l.i++ {
+ if bytes.HasPrefix(l.data[l.i:], []byte("*/")) {
+ l.i += 2
+ continue Space
+ }
}
- l.i += 2
- continue
+ return fmt.Errorf("unterminated comment")
}
if r, n := utf8.DecodeRune(l.data[l.i:]); unicode.IsSpace(r) {
l.i += n
@@ -45,6 +50,7 @@ func (l *lexer) skipSpace() {
}
break
}
+ return nil
}
func numFirstByte(b byte) bool {
@@ -72,7 +78,9 @@ func fieldTailByte(b byte) bool {
}
func (l *lexer) next() (token, error) {
- l.skipSpace()
+ if err := l.skipSpace(); err != nil {
+ return token{}, err
+ }
if l.i == len(l.data) {
return token{}, errEOF
}