aboutsummaryrefslogtreecommitdiff
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 {