about summary refs log tree commit diff
path: root/src/lex
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2021-11-14 19:31:48 +0100
committerMel <einebeere@gmail.com>2021-11-14 19:31:48 +0100
commit98ac2e8f26ff4d90c37bb9c9536e9eb14e31efb4 (patch)
treef7e4b47cd4d8a370597267f8f1819e874c5aacce /src/lex
parent514ceb979c4ce79bfee2234cf981292ded714f66 (diff)
downloadrabbithole-98ac2e8f26ff4d90c37bb9c9536e9eb14e31efb4.tar.zst
rabbithole-98ac2e8f26ff4d90c37bb9c9536e9eb14e31efb4.zip
Parse and walk str embeds.
Diffstat (limited to 'src/lex')
-rw-r--r--src/lex/lexer.rs15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/lex/lexer.rs b/src/lex/lexer.rs
index 6467f5c..b6633d4 100644
--- a/src/lex/lexer.rs
+++ b/src/lex/lexer.rs
@@ -247,15 +247,19 @@ impl<'s> Lexer<'s> {
                 let mut nest_level = 0;
 
                 // Finish the last string part
-                self.preempted.push_back(Token {
-                    location: location_str,
-                    variant: TokenVariant::Str(str_buffer),
-                });
+                if !str_buffer.is_empty() {
+                    self.preempted.push_back(Token {
+                        location: location_str,
+                        variant: TokenVariant::Str(str_buffer),
+                    });
+                }
                 str_buffer = String::new();
 
                 // Build embed
                 let location_embed = self.location;
                 let mut embed_buffer = String::new();
+                embed_buffer.push(c);
+
                 loop {
                     // TOOD: Same as above
                     let c = self.advance().expect("Expected Str embed to be closed");
@@ -263,8 +267,7 @@ impl<'s> Lexer<'s> {
                         nest_level += 1;
                     } else if c == '}' {
                         if nest_level <= 0 {
-                            // Remove last '}' of embed
-                            self.advance().unwrap();
+                            embed_buffer.push(c);
                             location_str = self.location;
                             break;
                         } else {