Skip to content

Commit

Permalink
Use the new ? syntax (so purty)
Browse files Browse the repository at this point in the history
  • Loading branch information
lambda-fairy committed Mar 22, 2016
1 parent 28c965a commit 8492259
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 36 deletions.
7 changes: 4 additions & 3 deletions maud_macros/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#![crate_type = "dylib"]
#![feature(plugin_registrar, quote)]
#![feature(question_mark)]
#![feature(slice_patterns)]
#![feature(rustc_private)]

Expand All @@ -22,17 +23,17 @@ mod render;
pub type PResult<T> = Result<T, FatalError>;

fn html(cx: &mut ExtCtxt, sp: Span, mac_name: &str, args: &[TokenTree]) -> PResult<P<Expr>> {
let (write, input) = try!(parse::split_comma(cx, sp, mac_name, args));
let (write, input) = parse::split_comma(cx, sp, mac_name, args)?;
parse::parse(cx, sp, write, input)
}

fn html_utf8(cx: &mut ExtCtxt, sp: Span, mac_name: &str, args: &[TokenTree]) -> PResult<P<Expr>> {
let (io_write, input) = try!(parse::split_comma(cx, sp, mac_name, args));
let (io_write, input) = parse::split_comma(cx, sp, mac_name, args)?;
let io_write = io_write.to_vec();
let fmt_write = token::gensym_ident("__maud_utf8_writer");
let fmt_write = vec![
TokenTree::Token(DUMMY_SP, token::Ident(fmt_write, token::IdentStyle::Plain))];
let expr = try!(parse::parse(cx, sp, &fmt_write, input));
let expr = parse::parse(cx, sp, &fmt_write, input)?;
Ok(quote_expr!(cx,
match ::maud::Utf8Writer::new(&mut $io_write) {
mut $fmt_write => {
Expand Down
66 changes: 33 additions & 33 deletions maud_macros/src/parse.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ pub fn parse(cx: &ExtCtxt, sp: Span, write: &[TokenTree], input: &[TokenTree])
span: sp,
render: Renderer::new(cx),
};
try!(parser.markups());
parser.markups()?;
Ok(parser.into_render().into_expr(write.to_vec()))
}

Expand Down Expand Up @@ -145,7 +145,7 @@ impl<'cx, 'i> Parser<'cx, 'i> {
match self.input {
[] => return Ok(()),
[semi!(), ..] => self.shift(1),
[_, ..] => try!(self.markup()),
[_, ..] => self.markup()?,
}
}
}
Expand All @@ -156,43 +156,43 @@ impl<'cx, 'i> Parser<'cx, 'i> {
// Literal
[minus!(), ref tt @ literal!(), ..] => {
self.shift(2);
try!(self.literal(tt, true));
self.literal(tt, true)?;
},
[ref tt @ literal!(), ..] => {
self.shift(1);
try!(self.literal(tt, false))
self.literal(tt, false)?;
},
// If
[at!(), keyword!(sp, k), ..] if k.is_keyword(Keyword::If) => {
self.shift(2);
try!(self.if_expr(sp));
self.if_expr(sp)?;
},
// For
[at!(), keyword!(sp, k), ..] if k.is_keyword(Keyword::For) => {
self.shift(2);
try!(self.for_expr(sp));
self.for_expr(sp)?;
},
// Match
[at!(), keyword!(sp, k), ..] if k.is_keyword(Keyword::Match) => {
self.shift(2);
try!(self.match_expr(sp));
self.match_expr(sp)?;
},
// Call
[at!(), ident!(sp, name), ..] if name.name.as_str() == "call" => {
self.shift(2);
let func = try!(self.splice(sp));
let func = self.splice(sp)?;
self.render.emit_call(func);
},
// Splice
[ref tt @ caret!(), ..] => {
self.shift(1);
let expr = try!(self.splice(tt.get_span()));
let expr = self.splice(tt.get_span())?;
self.render.splice(expr);
},
// Element
[ident!(sp, _), ..] => {
let name = try!(self.name());
try!(self.element(sp, &name));
let name = self.name()?;
self.element(sp, &name)?;
},
// Block
[TokenTree::Delimited(_, ref d), ..] if d.delim == DelimToken::Brace => {
Expand All @@ -202,7 +202,7 @@ impl<'cx, 'i> Parser<'cx, 'i> {
// result inline
let mut i = &*d.tts;
mem::swap(&mut self.input, &mut i);
try!(self.markups());
self.markups()?;
mem::swap(&mut self.input, &mut i);
}
},
Expand All @@ -220,8 +220,8 @@ impl<'cx, 'i> Parser<'cx, 'i> {

/// Parses and renders a literal string or number.
fn literal(&mut self, tt: &TokenTree, minus: bool) -> PResult<()> {
let lit = try!(self.with_rust_parser(vec![tt.clone()], RustParser::parse_lit));
let s = try!(lit_to_string(self.render.cx, lit, minus));
let lit = self.with_rust_parser(vec![tt.clone()], RustParser::parse_lit)?;
let s = lit_to_string(self.render.cx, lit, minus)?;
self.render.string(&s);
Ok(())
}
Expand All @@ -236,7 +236,7 @@ impl<'cx, 'i> Parser<'cx, 'i> {
loop { match self.input {
[TokenTree::Delimited(sp, ref d), ..] if d.delim == DelimToken::Brace => {
self.shift(1);
if_body = try!(self.block(sp, &d.tts));
if_body = self.block(sp, &d.tts)?;
break;
},
[ref tt, ..] => {
Expand All @@ -257,15 +257,15 @@ impl<'cx, 'i> Parser<'cx, 'i> {
// rather than emitting it right away
let mut r = self.render.fork();
mem::swap(&mut self.render, &mut r);
try!(self.if_expr(sp));
self.if_expr(sp)?;
mem::swap(&mut self.render, &mut r);
r.into_stmts()
};
Some(else_body)
},
[TokenTree::Delimited(sp, ref d), ..] if d.delim == DelimToken::Brace => {
self.shift(1);
Some(try!(self.block(sp, &d.tts)))
Some(self.block(sp, &d.tts)?)
},
_ => parse_error!(self, sp, "expected body for this @else"),
}
Expand All @@ -292,13 +292,13 @@ impl<'cx, 'i> Parser<'cx, 'i> {
},
_ => parse_error!(self, sp, "invalid @for"),
}}
let pattern = try!(self.with_rust_parser(pattern, RustParser::parse_pat));
let pattern = self.with_rust_parser(pattern, RustParser::parse_pat)?;
let mut iterable = vec![];
let body;
loop { match self.input {
[TokenTree::Delimited(sp, ref d), ..] if d.delim == DelimToken::Brace => {
self.shift(1);
body = try!(self.block(sp, &d.tts));
body = self.block(sp, &d.tts)?;
break;
},
[ref tt, ..] => {
Expand All @@ -307,7 +307,7 @@ impl<'cx, 'i> Parser<'cx, 'i> {
},
_ => parse_error!(self, sp, "invalid @for"),
}}
let iterable = try!(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);
Ok(())
}
Expand All @@ -322,12 +322,12 @@ impl<'cx, 'i> Parser<'cx, 'i> {
loop { match self.input {
[TokenTree::Delimited(sp, ref d), ..] if d.delim == DelimToken::Brace => {
self.shift(1);
match_bodies = try!(Parser {
match_bodies = Parser {
in_attr: self.in_attr,
input: &d.tts,
span: sp,
render: self.render.fork(),
}.match_bodies());
}.match_bodies()?;
break;
},
[ref tt, ..] => {
Expand All @@ -336,7 +336,7 @@ impl<'cx, 'i> Parser<'cx, 'i> {
},
[] => parse_error!(self, sp, "expected body for this @match"),
}}
let match_var = try!(self.with_rust_parser(match_var, RustParser::parse_expr));
let match_var = self.with_rust_parser(match_var, RustParser::parse_expr)?;
self.render.emit_match(match_var, match_bodies);
Ok(())
}
Expand All @@ -351,7 +351,7 @@ impl<'cx, 'i> Parser<'cx, 'i> {
bodies.push(tt.clone());
},
[TokenTree::Token(sp, _), ..] | [TokenTree::Delimited(sp, _), ..] | [TokenTree::Sequence(sp, _), ..] => {
bodies.append(&mut try!(self.match_body(sp)));
bodies.append(&mut self.match_body(sp)?);
},
}
}
Expand All @@ -377,7 +377,7 @@ impl<'cx, 'i> Parser<'cx, 'i> {
[TokenTree::Delimited(sp, ref d), ..] if d.delim == DelimToken::Brace => {
if expr.is_empty() {
self.shift(1);
expr = try!(self.block(sp, &d.tts)).to_tokens(self.render.cx);
expr = self.block(sp, &d.tts)?.to_tokens(self.render.cx);
break;
} else {
self.shift(1);
Expand All @@ -388,7 +388,7 @@ impl<'cx, 'i> Parser<'cx, 'i> {
if expr.is_empty() {
parse_error!(self, sp, "expected body for this @match arm");
} else {
expr = try!(self.block(sp, &expr)).to_tokens(self.render.cx);
expr = self.block(sp, &expr)?.to_tokens(self.render.cx);
break;
}
},
Expand Down Expand Up @@ -462,13 +462,13 @@ impl<'cx, 'i> Parser<'cx, 'i> {
parse_error!(self, sp, "unexpected element, you silly bumpkin");
}
self.render.element_open_start(name);
try!(self.class_shorthand());
try!(self.attrs());
self.class_shorthand()?;
self.attrs()?;
self.render.element_open_end();
if let [slash!(), ..] = self.input {
self.shift(1);
} else {
try!(self.markup());
self.markup()?;
self.render.element_close(name);
}
Ok(())
Expand All @@ -479,7 +479,7 @@ impl<'cx, 'i> Parser<'cx, 'i> {
let mut classes = Vec::new();
while let [dot!(), ident!(_, _), ..] = self.input {
self.shift(1);
classes.push(try!(self.name()));
classes.push(self.name()?);
}
if !classes.is_empty() {
self.render.attribute_start("class");
Expand All @@ -503,7 +503,7 @@ impl<'cx, 'i> Parser<'cx, 'i> {
// Parse a value under an attribute context
let mut in_attr = true;
mem::swap(&mut self.in_attr, &mut in_attr);
try!(self.markup());
self.markup()?;
mem::swap(&mut self.in_attr, &mut in_attr);
}
self.render.attribute_end();
Expand All @@ -514,7 +514,7 @@ impl<'cx, 'i> Parser<'cx, 'i> {
if let [ref tt @ eq!(), ..] = self.input {
// Toggle the attribute based on a boolean expression
self.shift(1);
let cond = try!(self.splice(tt.get_span()));
let cond = self.splice(tt.get_span())?;
// Silence "unnecessary parentheses" warnings
let cond = strip_outer_parens(cond).to_tokens(self.render.cx);
let body = {
Expand Down Expand Up @@ -561,7 +561,7 @@ impl<'cx, 'i> Parser<'cx, 'i> {
span: sp,
render: self.render.fork(),
};
try!(parse.markups());
parse.markups()?;
Ok(parse.into_render().into_stmts())
}
}
Expand Down

0 comments on commit 8492259

Please sign in to comment.