Rename $if
and $for
to #if
and #for
`#if` and `#for` aren't splices. They are a different concept, so should have different syntax as well.
This commit is contained in:
parent
59360c719c
commit
37835b3b24
2 changed files with 17 additions and 14 deletions
|
@ -13,6 +13,9 @@ use super::render::{Escape, Renderer};
|
||||||
macro_rules! dollar {
|
macro_rules! dollar {
|
||||||
() => (TtToken(_, token::Dollar))
|
() => (TtToken(_, token::Dollar))
|
||||||
}
|
}
|
||||||
|
macro_rules! pound {
|
||||||
|
() => (TtToken(_, token::Pound))
|
||||||
|
}
|
||||||
macro_rules! dot {
|
macro_rules! dot {
|
||||||
() => (TtToken(_, token::Dot))
|
() => (TtToken(_, token::Dot))
|
||||||
}
|
}
|
||||||
|
@ -125,12 +128,12 @@ impl<'cx, 'i> Parser<'cx, 'i> {
|
||||||
self.literal(tt, false);
|
self.literal(tt, false);
|
||||||
},
|
},
|
||||||
// If
|
// If
|
||||||
[dollar!(), ident!(sp, name), ..] if name.name == "if" => {
|
[pound!(), ident!(sp, name), ..] if name.name == "if" => {
|
||||||
self.shift(2);
|
self.shift(2);
|
||||||
self.if_expr(sp);
|
self.if_expr(sp);
|
||||||
},
|
},
|
||||||
// For
|
// For
|
||||||
[dollar!(), ident!(sp, name), ..] if name.name == "for" => {
|
[pound!(), ident!(sp, name), ..] if name.name == "for" => {
|
||||||
self.shift(2);
|
self.shift(2);
|
||||||
self.for_expr(sp);
|
self.for_expr(sp);
|
||||||
},
|
},
|
||||||
|
@ -201,11 +204,11 @@ impl<'cx, 'i> Parser<'cx, 'i> {
|
||||||
self.shift(1);
|
self.shift(1);
|
||||||
if_cond.push(tt.clone());
|
if_cond.push(tt.clone());
|
||||||
},
|
},
|
||||||
[] => self.render.cx.span_fatal(sp, "expected body for this $if"),
|
[] => self.render.cx.span_fatal(sp, "expected body for this #if"),
|
||||||
}}
|
}}
|
||||||
// Parse the (optional) else
|
// Parse the (optional) else
|
||||||
let else_body = match self.input {
|
let else_body = match self.input {
|
||||||
[dollar!(), ident!(else_), ..] if else_.name == "else" => {
|
[pound!(), ident!(else_), ..] if else_.name == "else" => {
|
||||||
self.shift(2);
|
self.shift(2);
|
||||||
match self.input {
|
match self.input {
|
||||||
[ident!(sp, if_), ..] if if_.name == "if" => {
|
[ident!(sp, if_), ..] if if_.name == "if" => {
|
||||||
|
@ -225,7 +228,7 @@ impl<'cx, 'i> Parser<'cx, 'i> {
|
||||||
self.shift(1);
|
self.shift(1);
|
||||||
Some(self.block(sp, &d.tts))
|
Some(self.block(sp, &d.tts))
|
||||||
},
|
},
|
||||||
_ => self.render.cx.span_fatal(sp, "expected body for this $else"),
|
_ => self.render.cx.span_fatal(sp, "expected body for this #else"),
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
_ => None,
|
_ => None,
|
||||||
|
@ -244,7 +247,7 @@ impl<'cx, 'i> Parser<'cx, 'i> {
|
||||||
self.shift(1);
|
self.shift(1);
|
||||||
pattern.push(tt.clone());
|
pattern.push(tt.clone());
|
||||||
},
|
},
|
||||||
_ => self.render.cx.span_fatal(sp, "invalid $for"),
|
_ => self.render.cx.span_fatal(sp, "invalid #for"),
|
||||||
}}
|
}}
|
||||||
let pattern = self.with_rust_parser(pattern, RustParser::parse_pat);
|
let pattern = self.with_rust_parser(pattern, RustParser::parse_pat);
|
||||||
let mut iterable = vec![];
|
let mut iterable = vec![];
|
||||||
|
@ -259,7 +262,7 @@ impl<'cx, 'i> Parser<'cx, 'i> {
|
||||||
self.shift(1);
|
self.shift(1);
|
||||||
iterable.push(tt.clone());
|
iterable.push(tt.clone());
|
||||||
},
|
},
|
||||||
_ => self.render.cx.span_fatal(sp, "invalid $for"),
|
_ => self.render.cx.span_fatal(sp, "invalid #for"),
|
||||||
}}
|
}}
|
||||||
let iterable = self.with_rust_parser(iterable, RustParser::parse_expr);
|
let iterable = self.with_rust_parser(iterable, RustParser::parse_expr);
|
||||||
self.render.emit_for(pattern, iterable, body);
|
self.render.emit_for(pattern, iterable, body);
|
||||||
|
|
|
@ -202,13 +202,13 @@ mod control {
|
||||||
for (number, &name) in (1..4).zip(["one", "two", "three"].iter()) {
|
for (number, &name) in (1..4).zip(["one", "two", "three"].iter()) {
|
||||||
let mut s = String::new();
|
let mut s = String::new();
|
||||||
html!(s, {
|
html!(s, {
|
||||||
$if number == 1 {
|
#if number == 1 {
|
||||||
"one"
|
"one"
|
||||||
} $else if number == 2 {
|
} #else if number == 2 {
|
||||||
"two"
|
"two"
|
||||||
} $else if number == 3 {
|
} #else if number == 3 {
|
||||||
"three"
|
"three"
|
||||||
} $else {
|
} #else {
|
||||||
"oh noes"
|
"oh noes"
|
||||||
}
|
}
|
||||||
}).unwrap();
|
}).unwrap();
|
||||||
|
@ -221,9 +221,9 @@ mod control {
|
||||||
for &(input, output) in [(Some("yay"), "yay"), (None, "oh noes")].iter() {
|
for &(input, output) in [(Some("yay"), "yay"), (None, "oh noes")].iter() {
|
||||||
let mut s = String::new();
|
let mut s = String::new();
|
||||||
html!(s, {
|
html!(s, {
|
||||||
$if let Some(value) = input {
|
#if let Some(value) = input {
|
||||||
$value
|
$value
|
||||||
} $else {
|
} #else {
|
||||||
"oh noes"
|
"oh noes"
|
||||||
}
|
}
|
||||||
}).unwrap();
|
}).unwrap();
|
||||||
|
@ -236,7 +236,7 @@ mod control {
|
||||||
let ponies = ["Apple Bloom", "Scootaloo", "Sweetie Belle"];
|
let ponies = ["Apple Bloom", "Scootaloo", "Sweetie Belle"];
|
||||||
let mut s = String::new();
|
let mut s = String::new();
|
||||||
html!(s, {
|
html!(s, {
|
||||||
ul $for pony in &ponies {
|
ul #for pony in &ponies {
|
||||||
li $pony
|
li $pony
|
||||||
}
|
}
|
||||||
}).unwrap();
|
}).unwrap();
|
||||||
|
|
Loading…
Add table
Reference in a new issue