From 0bb4c96481f8013aed69cafbe7e79900969d8292 Mon Sep 17 00:00:00 2001 From: Celestino Amoroso Date: Mon, 10 Jun 2024 18:52:13 +0200 Subject: [PATCH] scanner.go: Strings can be enclosed between two single-quotes too --- scanner.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/scanner.go b/scanner.go index b88ee98..77c6cc4 100644 --- a/scanner.go +++ b/scanner.go @@ -178,13 +178,18 @@ func (self *scanner) fetchNextToken() (tk *Token) { tk = self.makeToken(SymDot, ch) } case '\'': - tk = self.makeToken(SymQuote, ch) + if escape { + tk = self.makeToken(SymQuote, ch) + escape = false + } else { + tk = self.fetchString(ch) + } case '"': if escape { tk = self.makeToken(SymDoubleQuote, ch) escape = false } else { - tk = self.fetchString() + tk = self.fetchString(ch) } case '`': tk = self.makeToken(SymBackTick, ch) @@ -533,7 +538,7 @@ func (self *scanner) fetchUntil(sym Symbol, allowEos bool, endings ...byte) (tk return } -func (self *scanner) fetchString() (tk *Token) { +func (self *scanner) fetchString(termCh byte) (tk *Token) { var err error var ch, prev byte var sb strings.Builder @@ -554,7 +559,7 @@ func (self *scanner) fetchString() (tk *Token) { sb.WriteByte(ch) } prev = 0 - } else if ch == '"' { + } else if ch == termCh { break } else { prev = ch