Skip to content

Commit

Permalink
wip: if_expr and else_if_expr
Browse files Browse the repository at this point in the history
also:
 remove dead code
 remove invalid import

Refs lambda-fairy#121
  • Loading branch information
anxiousmodernman committed Apr 9, 2018
1 parent 4cd5451 commit 9773269
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 26 deletions.
2 changes: 1 addition & 1 deletion maud_macros/src/build.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use proc_macro::{Delimiter, Literal, Span, TokenNode, TokenStream, TokenTree};
use proc_macro::{Delimiter, Literal, Span, TokenStream, TokenTree};
use proc_macro::quote;

use maud_htmlescape::Escaper;
Expand Down
1 change: 1 addition & 0 deletions maud_macros/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#![feature(proc_macro)]
#![feature(pattern_parentheses)]

#![doc(html_root_url = "https://docs.rs/maud_macros/0.17.2")]

Expand Down
36 changes: 11 additions & 25 deletions maud_macros/src/parse.rs
Original file line number Diff line number Diff line change
Expand Up @@ -192,8 +192,8 @@ impl Parser {
fn if_expr(&mut self, builder: &mut Builder) -> ParseResult<()> {
loop {
match self.next() {
Some(TokenTree { kind: TokenNode::Group(Delimiter::Brace, block), span }) => {
let block = self.block(block, span)?;
Some(TokenTree::Group(block)) if block.delimiter() == Delimiter::Brace => {
let block = self.block(block.stream(), block.span())?;
builder.push(block);
break;
},
Expand All @@ -209,36 +209,22 @@ impl Parser {
/// The leading `@else if` or `@else` should *not* already be consumed.
fn else_if_expr(&mut self, builder: &mut Builder) -> ParseResult<()> {
match self.peek2() {
// Try to match an `@else` after this
Some((
TokenTree { kind: TokenNode::Op('@', _), .. },
Some(TokenTree { kind: TokenNode::Term(else_keyword), span }),
)) if else_keyword.as_str() == "else" => {
Some((TokenTree::Op(o), Some(TokenTree::Term(else_keyword))))
if o.op() == '@' && else_keyword.as_str() == "else" => {
self.advance2();
let else_keyword = TokenTree { kind: TokenNode::Term(else_keyword), span };
builder.push(else_keyword);
let else_keyword = Term::new("else", else_keyword.span());
builder.push(TokenTree::Term(else_keyword));
match self.peek() {
// `@else if`
Some(TokenTree { kind: TokenNode::Term(if_keyword), span })
if if_keyword.as_str() == "if" => {
Some(TokenTree::Term(if_keyword)) if if_keyword.as_str() == "if" => {
self.advance();
let if_keyword = TokenTree { kind: TokenNode::Term(if_keyword), span };
builder.push(if_keyword);
let if_keyword = Term::new("if", if_keyword.span());
builder.push(TokenTree::Term(if_keyword));
self.if_expr(builder)?;
},
// Just an `@else`
_ => {
if let Some(TokenTree { kind: TokenNode::Group(Delimiter::Brace, block), span }) = self.next() {
let block = self.block(block, span)?;
builder.push(block);
} else {
return self.error("expected body for @else");
}
},
}

}
self.else_if_expr(builder)
},
// We didn't find an `@else`; stop
_ => Ok(()),
}
}
Expand Down

0 comments on commit 9773269

Please sign in to comment.