scanner.go: Strings can be enclosed between two single-quotes too

This commit is contained in:
Celestino Amoroso 2024-06-10 18:52:13 +02:00
parent 1757298eb4
commit 0bb4c96481

View File

@ -178,13 +178,18 @@ func (self *scanner) fetchNextToken() (tk *Token) {
tk = self.makeToken(SymDot, ch) tk = self.makeToken(SymDot, ch)
} }
case '\'': case '\'':
tk = self.makeToken(SymQuote, ch) if escape {
tk = self.makeToken(SymQuote, ch)
escape = false
} else {
tk = self.fetchString(ch)
}
case '"': case '"':
if escape { if escape {
tk = self.makeToken(SymDoubleQuote, ch) tk = self.makeToken(SymDoubleQuote, ch)
escape = false escape = false
} else { } else {
tk = self.fetchString() tk = self.fetchString(ch)
} }
case '`': case '`':
tk = self.makeToken(SymBackTick, ch) tk = self.makeToken(SymBackTick, ch)
@ -533,7 +538,7 @@ func (self *scanner) fetchUntil(sym Symbol, allowEos bool, endings ...byte) (tk
return return
} }
func (self *scanner) fetchString() (tk *Token) { func (self *scanner) fetchString(termCh byte) (tk *Token) {
var err error var err error
var ch, prev byte var ch, prev byte
var sb strings.Builder var sb strings.Builder
@ -554,7 +559,7 @@ func (self *scanner) fetchString() (tk *Token) {
sb.WriteByte(ch) sb.WriteByte(ch)
} }
prev = 0 prev = 0
} else if ch == '"' { } else if ch == termCh {
break break
} else { } else {
prev = ch prev = ch