From d78a77b0755048f26807761ca19aedaa2d81a42e Mon Sep 17 00:00:00 2001 From: Toni Date: Wed, 11 Mar 2026 18:38:27 +0100 Subject: [PATCH] finally allow escaped quotes in strings --- src/tokenizer.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/tokenizer.rs b/src/tokenizer.rs index 6fe4698..abd43d6 100644 --- a/src/tokenizer.rs +++ b/src/tokenizer.rs @@ -242,8 +242,14 @@ impl Tokenizer { self.add_token(TokenType::Char)? } '"' => { - while !self.eof() && self.peek() != '"' { - if self.peek() == '\n' { + let start_loc = self.loc.clone(); + + while !self.eof() { + if self.peek() == '\\' { + self.advance(); + } else if self.peek() == '"' { + break; + } else if self.peek() == '\n' { self.loc.line += 1; self.loc.column = 1; } @@ -251,7 +257,10 @@ impl Tokenizer { } if self.eof() { - return error!(self.loc, "unterminated string"); + return error!( + self.loc, + format!("unterminated string, started at {}", start_loc) + ); } self.advance(); @@ -402,6 +411,7 @@ impl Tokenizer { Some('n') => result.push('\n'), Some('r') => result.push('\r'), Some('t') => result.push('\t'), + Some('0') => result.push('\0'), Some('\\') => result.push('\\'), Some('\'') => result.push('\''), Some('"') => result.push('"'),