Fixed T-Dark blocks in blocks

This commit is contained in:
Erin 2021-12-14 23:16:19 +01:00 committed by ondra05
parent 183f26f415
commit 007917a217

View file

@ -37,12 +37,7 @@ impl<'source> Parser<'source> {
Token::Comment => continue,
// T-Dark block (replace `lang` with `script`)
Token::TDark => {
self.tdark = true;
let mut block = self.get_block()?;
ast.append(&mut block.block);
self.tdark = false;
}
Token::TDark => ast.extend(self.tdark_flow()?.block),
token => ast.push(self.parse(token)?),
}
}
@ -329,12 +324,21 @@ impl<'source> Parser<'source> {
loop {
match self.checked_next()? {
Token::RightCurly => break,
Token::TDark => block.extend(self.tdark_flow()?.block),
t => block.push(self.parse(t)?),
}
}
Ok(Block { block })
}
/// Parse T-Dark block
fn tdark_flow(&mut self) -> Result<Block, Error> {
self.tdark = true;
let block = self.get_block();
self.tdark = false;
block
}
/// If Statement parser gets any kind of value (Identifier or Literal)
/// It cannot parse it as it do not parse expressions. Instead of it it
/// will parse it to function call or print statement.