Skip to content

Commit

Permalink
Update for interpolation changes upstream
Browse files Browse the repository at this point in the history
  • Loading branch information
tomjakubowski committed May 4, 2015
1 parent c13e234 commit d4d3133
Showing 1 changed file with 17 additions and 12 deletions.
29 changes: 17 additions & 12 deletions src/plugin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@ fn parse_json(cx: &ExtCtxt, parser: &mut Parser) -> P<Expr> {
Ok(parse_json(cx, p))
}).ok().unwrap();
let exprs = cx.expr_vec(orig_span, exprs);
quote_expr!(cx, {{
quote_expr!(cx, {
use ::std::boxed::Box;
let xs: Box<[_]> = Box::new($exprs);
::rustc_serialize::json::Json::Array(xs.into_vec())
}})
})
},
&Token::OpenDelim(DelimToken::Brace) => {
let _ = parser.bump();
Expand All @@ -53,22 +53,27 @@ fn parse_json(cx: &ExtCtxt, parser: &mut Parser) -> P<Expr> {
let (istr, _) = p.parse_str().ok().unwrap();
let s = &*istr;
let _ = p.expect(&Token::Colon);
let key = quote_expr!(cx, {{
let key = quote_expr!(cx, {
use ::std::borrow::ToOwned;
$s.to_owned()
}});
});
Ok((key, parse_json(cx, p)))
}).ok().unwrap();
let ob = quote_expr!(cx, _ob);
let mut stmts = vec![];
let mut insertions = vec![];
// Can't use `quote_stmt!()` and interpolate a vector of
// statements, seemingly. Should consider filing a bug
// upstream.
for &(ref key, ref value) in kvs.iter() {
stmts.push(quote_stmt!(cx, $ob.insert($key, $value)));
insertions.push(quote_expr!(cx, {
_ob.insert($key, $value);
}));
}
quote_expr!(cx, {{
let mut $ob = ::std::collections::BTreeMap::new();
$stmts;
::rustc_serialize::json::Json::Object($ob)
}})
let expr = quote_expr!(cx, {
let mut _ob = ::std::collections::BTreeMap::new();
$insertions;
::rustc_serialize::json::Json::Object(_ob)
});
expr
},
&Token::OpenDelim(DelimToken::Paren) => {
let expr = parser.parse_expr();
Expand Down

0 comments on commit d4d3133

Please sign in to comment.