summaryrefslogtreecommitdiff
path: root/src/parse/mod.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-01-27 11:50:51 +0100
committerLaurenz <laurmaedje@gmail.com>2021-01-27 11:50:51 +0100
commitce8138c68557a2d158424a8aa6056d73ff9cb1ba (patch)
treea90616fc9194a6814e9a36493e38c6efb65af7e3 /src/parse/mod.rs
parent710f88ccb2bceb9851a8fb0b7f131343ee33dbd5 (diff)
Scope variables in blocks 🏔️
Diffstat (limited to 'src/parse/mod.rs')
-rw-r--r--src/parse/mod.rs10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/parse/mod.rs b/src/parse/mod.rs
index 8687ac24..ff75a563 100644
--- a/src/parse/mod.rs
+++ b/src/parse/mod.rs
@@ -52,7 +52,7 @@ fn node(p: &mut Parser, at_start: &mut bool) -> Option<Node> {
// Code block.
Token::LeftBrace => {
- return Some(Node::Expr(block(p)?));
+ return Some(Node::Expr(block(p, false)?));
}
// Markup.
@@ -285,7 +285,7 @@ fn primary(p: &mut Parser) -> Option<Expr> {
// Nested block.
Some(Token::LeftBrace) => {
- return block(p);
+ return block(p, true);
}
// Dictionary or just a parenthesized expression.
@@ -340,7 +340,7 @@ fn template(p: &mut Parser) -> Expr {
}
/// Parse a block expression: `{...}`.
-fn block(p: &mut Parser) -> Option<Expr> {
+fn block(p: &mut Parser, scopes: bool) -> Option<Expr> {
p.start_group(Group::Brace, TokenMode::Code);
let mut exprs = vec![];
while !p.eof() {
@@ -355,7 +355,7 @@ fn block(p: &mut Parser) -> Option<Expr> {
p.skip_white();
}
p.end_group();
- Some(Expr::Block(ExprBlock { exprs }))
+ Some(Expr::Block(ExprBlock { exprs, scopes }))
}
/// Parse a parenthesized function call.
@@ -469,7 +469,7 @@ fn ident(p: &mut Parser) -> Option<Ident> {
fn body(p: &mut Parser) -> Option<Expr> {
match p.peek() {
Some(Token::LeftBracket) => Some(template(p)),
- Some(Token::LeftBrace) => block(p),
+ Some(Token::LeftBrace) => block(p, true),
_ => {
p.expected_at("body", p.last_end());
None