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